Menu

使用 Coolify 部署 Next.js 项目

本文详细介绍如何使用 Coolify 部署 Next.js 项目,帮助你快速完成项目上线。

由于 Coolify 对 VPS 的性能要求比 Dokploy 高,所以如果你的 VPS 配置较低,请选择 Dokploy 并阅读 Dokploy 部署文档

前置准备

在开始部署之前,建议先在 next.config.mjs 中添加以下配置:

next.config.mjs
const nextConfig = {
  output: "standalone", // 添加这行
  
  // other code...
}

由于 Coolify 基于 Docker 运行,使用 standalone 模式可以显著减小构建镜像的体积。

什么是 Coolify

Coolify 是一个开源的自托管 PaaS(Platform as a Service)平台,可作为 Vercel、Netlify、Railway、Zeabur 等服务的开源替代方案。

coolify

服务器准备与 Coolify 安装

购买服务器

使用 Coolify 需要自行购买服务器。如果你不确定选择哪家服务商,可以考虑 hostinger。对于项目初期,4核16G 的 VPS 就足够使用,月费仅需 $7.99。

hostinger

配置服务器

完成付款后,按照页面提示完成 VPS 设置。配置完成后,控制台会显示 VPS 已启动。

接下来需要配置防火墙规则。Hostinger 默认没有防火墙规则,这意味着所有端口都处于开放状态,存在安全风险。我们需要创建防火墙规则,开放 22、80、443、8000 端口的访问权限。

8000 端口用于打开 Coolify 注册页面,一旦完成后面的 Coolify 自定义域名设置,就要关闭 8000 端口。

hostinger-settings
hostinger-settings

安装 Coolify

可以根据官方文档通过命令安装,也可以直接在 Hostinger 后台安装

hostinger-terminal

安装完成后,打开 http://your_server_ip:8000 即可进入 Coolify 管理后台。

hostinger-terminal
server-type

配置 Coolify

注册并登录后,首先为管理后台设置自定义域名:

custom-domain

然后在域名解析平台(以 CloudFlare 为例)添加该自定义域名的解析记录,选择 A 类型解析,IP 地址填写服务器地址。

coolify-dns

解析生效后,就可以通过自定义域名访问 Coolify 管理后台了。

记得删掉防火墙 8000 端口,以后只用域名访问。

最后,绑定你的 Git 账号,如下图所示:

coolify-git
coolify-git
coolify-git
coolify-git

部署步骤

Coolify 提供了类似 Vercel 的可视化部署界面,你可以很方便地选择 GitHub 仓库进行自动部署。

add-project
add-project
add-project
add-project
add-project

配置自定义域名和重定向规则

add-project

创建完成后,需要在 Cloudflare 设置 DNS:

add-dns

添加两条记录:

A 记录:
your-domain.com -> 你的服务器 IP
开启 Proxy
 
A 记录:
www.your-domain.com -> 你的服务器 IP
开启 Proxy

然后打开 SSL/TLS 设置,选择 Full 或 Flexible:

setting-ssl

配置环境变量

set-up-env
set-up-env

接着点击右上角的 Deploy 按钮就可以自动部署了。

查看构建进度

deployments

之后每次提交代码都会自动触发部署。

一些高级用法

日志

如果你在 Next.js 项目中使用 Pino 记录日志,那么通过 Coolify 的功能将日志目录挂载到宿主机。

  1. 点击左侧菜单的 "Persistent Storage"
  2. 点击 "+ Add" 添加新的存储挂载,填写以下内容:
    • Source Path(宿主机路径): /var/log/nexty-dev
    • Destination Path(容器内路径): /app/logs
log
log
  1. 保存配置并点击 Redeploy
log

配置生效后,容器写入 /app/logs 的日志文件会实际保存到宿主机的 /var/log/nexty-dev 目录。

在 VPS 上面查看日志

# 查看日志文件列表
ls -la /var/log/nexty-dev/
 
# 实时查看日志
tail -f /var/log/nexty-dev/xxxxxxxx-*.log
 
# 搜索特定内容
grep "error" /var/log/nexty-dev/xxxxxxxx-*.log

如果想在本地查看日志,可以用 scp 命令导出整个文件夹或者指定文件:

# 在本地电脑执行
scp -r root@ip:/var/log/nexty-dev/ ./nexty-logs/

部署 Redis

创建 Redis 的步骤和创建普通项目类似,只是 Resource 要选择 Redis

redis
redis

创建完成后就能看到配置信息了

redis

对于生产环境,如果部署在同一台服务器,可直接使用内部链接。

其他关键配置介绍:

  • Ports Mappings(端口映射):是 宿主机端口:容器端口 的映射,例如需要在本地临时调试,可设置为 6380:6379,这样本地就能通过 IP 和 6380 端口访问到 Redis 了。
  • SSL Configuration(SSL 配置):
    • 连接 Redis 的流量会经过 TLS/SSL 加密。
    • 建议开启,这样可以防止你的数据和密码在传输过程中被截获。
    • 开启后,你的客户端连接字符串通常需要从 redis:// 改为 rediss://
    • 在本地电脑通过命令 echo | openssl s_client -connect 72.62.133.215:23771 2>/dev/null | openssl x509 > redis_server.crt 可以下载 Coolify 生成的 CA 文件
  • Proxy - Make it publicly available(代理 - 公开访问):
    • 不勾选,只有同一个 Coolify 里的应用能访问这个 redis
    • 勾选,必须设置了 Public Port 才允许勾选,勾选后会展示一个 Public URL。
  • Public Port(公共端口):定义你通过服务器 IP 访问 Redis 时使用的端口号,如果需要开启,建议设置 5 位数的冷门端口,安全级别会比 6379 高很多。

如果你是本地临时调试,可以使用 Ports Mappings,用完立即关闭端口。如果需要保持互联网访问,那么建议设置 SSL、Proxy、Public Port。

无论是通过 Ports Mappings 还是通过 Proxy 连接,都需要在 vps 防火墙开启对应的端口。

Redis 开启 AOF

如果需要 Redis 的数据持久化,可以开启 AOF,只需在 Custom Redis Configuration 配置这两行:

appendonly yes
appendfsync everysec

然后滚动到顶部,点击 Save、Restart。

如需验证是否正确开启 AOF,可以打开顶部的 Terminal,然后执行命令:

redis-cli
AUTH YOUR_PASSWORD
CONFIG GET appendonly
redis