自托管的一站式 PaaS 解决方案

289 阅读13分钟

在当今云计算时代,自托管应用变得越来越受欢迎,而 Coolify 作为一个开源的自托管 PaaS (平台即服务) 解决方案,正在成为开发者的新宠。本教程将带你从零开始,一步步掌握 Coolify 的安装、配置和使用,让你能够在自己的服务器上部署各种应用。

目录

  1. 什么是 Coolify?
  2. 准备工作
  3. 创建服务器
  4. 安装 Coolify
  5. 初始设置与安全配置
  6. 部署你的第一个应用
  7. 使用 GitHub 集成
  8. 数据库设置与管理
  9. 高级配置:HTTP 重定向与基本认证
  10. 备份与恢复策略
  11. 监控与状态仪表板
  12. 常见问题排查
  13. Coolify 的优缺点
  14. 结语

1. 什么是 Coolify?

Coolify 是一个开源的自托管 PaaS 解决方案,旨在提供类似于 Netlify、Heroku 或 Vercel 的部署体验,但完全运行在你自己的服务器上。它的核心优势包括:

  • 一键部署:从 GitHub 仓库直接部署应用
  • 预配置服务:数据库、缓存、监控等服务的一键部署
  • 自动 HTTPS:轻松配置 SSL 证书
  • 自动更新:应用代码更新时自动重新部署
  • 开源免费:不依赖第三方服务,完全自托管

Coolify 让你能够在自己的基础设施上获得类似商业 PaaS 平台的体验,非常适合希望自托管项目但又想减少运维复杂度的开发者。

2. 准备工作

在开始安装 Coolify 之前,你需要确保满足以下条件:

系统要求

  • 至少 2 个 CPU 核心
  • 至少 2GB 内存
  • 至少 30GB 存储空间(推荐 40GB+)
  • 带有公网 IP 的 VPS 或服务器
  • 一个域名(用于设置 HTTPS)

推荐配置

根据实际使用情况,Coolify 团队建议的配置为:

  • 4 个 CPU 核心
  • 8GB 内存
  • 50GB+ 存储空间

这样的配置足以运行 Coolify 本身以及多个中小型应用。

所需工具

  • SSH 客户端(如终端、PuTTY 或 MobaXterm)
  • 一个域名的 DNS 访问权限

3. 创建服务器

我们将使用 Hetzner 作为服务器提供商的例子,但你可以选择任何 VPS 提供商,如 DigitalOcean、Linode、Vultr 等。

在 AWS 创建 VPS

  1. 在 AWS Cloud 控制台创建一个新服务器
  2. 选择位置(建议选择离你最近的数据中心)
  3. 选择 Ubuntu 22.04 LTS 作为操作系统
  4. 选择符合要求的服务器类型(至少 2 核 2GB)
    • 对于生产环境,推荐 4 核 8GB 配置
  5. 添加 SSH 密钥以便安全登录

4. 安装 Coolify

服务器创建好后,我们需要通过 SSH 连接到服务器并安装 Coolify。

SSH 连接到服务器

使用你配置的 SSH 密钥登录服务器:

ssh root@你的服务器IP

确认系统更新

首先确保系统已完全更新:

apt update
apt upgrade -y

安装 Coolify

使用官方安装脚本安装 Coolify:

curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash

安装完成后,你会看到一条消息,显示 Coolify 已在 8000 端口上运行。接下来,我们需要通过浏览器访问:

http://你的服务器IP:8000

5. 初始设置与安全配置

创建管理员账户

  1. 通过浏览器访问 http://你的服务器IP:8000
  2. 设置管理员名称、邮箱和密码
  3. 完成初始设置向导

配置 HTTPS

为了安全地使用 Coolify,我们需要配置 HTTPS:

  1. 在 DNS 提供商处添加 A 记录,将域名指向你的服务器 IP

    • 例如: coolify.你的域名.com你的服务器IP
    • 添加通配符记录: *.你的域名.com你的服务器IP
  2. 在 Coolify 仪表板中,转到设置 → 常规

  3. 设置实例域名为 https://coolify.你的域名.com

  4. 取消勾选"验证 DNS 设置"(如果遇到问题)

  5. 保存设置

配置代理服务器

Coolify 使用代理服务器来管理 HTTPS 和请求路由:

  1. 转到服务器设置 → 代理
  2. 选择 Caddy 作为代理(更简单的配置)
  3. 在通配符域名中设置 https://你的域名.com
  4. 保存设置并停止旧代理
  5. 启用 Caddy 代理

启用防火墙

为了保护服务器安全,我们需要配置防火墙,只开放必要的端口:

  1. 在 Hetzner (或你的提供商) 控制台创建新防火墙
  2. 允许以下入站端口:
    • 22 (SSH)
    • 80 (HTTP)
    • 443 (HTTPS)
  3. 应用防火墙到你的服务器

这样,我们就锁定了所有非必要端口,包括 8000 端口,防止未授权访问。

增强账户安全

  1. 访问你的 Coolify 域名 https://coolify.你的域名.com
  2. 转到个人资料,修改密码为更安全的密码
  3. 启用双因素认证 (2FA)

6. 部署你的第一个应用

让我们从简单的静态网站开始,熟悉 Coolify 的部署流程。

部署静态网站

  1. 在 Coolify 仪表板中,创建新项目(例如"静态网站")
  2. 选择"生产"环境
  3. 添加资源 → 选择"公共仓库"
  4. 输入 GitHub 仓库 URL(例如一个包含 HTML, CSS 和 JavaScript 的简单仓库)
  5. 选择"静态"构建包
  6. 设置域名为 website.你的域名.com
  7. 点击部署

你的静态网站现在应该可以通过 https://website.你的域名.com 访问了。

配置 www 重定向

许多网站需要将 www 子域名重定向到主域名:

  1. 在项目设置中,为同一应用添加域名 www.website.你的域名.com
  2. 添加自定义 Caddy 配置,使用标签:
caddy.0.redir=https://website.你的域名.com

这会将 www.website.你的域名.com 重定向到 website.你的域名.com

部署 Node.js 应用

接下来让我们部署一个 Next.js 应用:

  1. 创建新项目(例如"Next.js App")
  2. 选择"生产"环境
  3. 添加资源 → 选择"公共仓库"
  4. 输入包含 Next.js 应用的 GitHub 仓库 URL
  5. 选择"nixpacks"构建包(它会自动检测 Next.js)
  6. 设置域名为 nextapp.你的域名.com
  7. 点击部署

Coolify 将自动检测这是一个 Node.js 应用,并使用适当的构建和启动命令。

7. 使用 GitHub 集成

为了实现自动部署和访问私有仓库,我们需要设置 GitHub 集成。

创建 GitHub 应用

  1. 在 Coolify 仪表板中,转到源 → 创建一个 GitHub 应用
  2. 为应用提供一个唯一名称(例如"coolify-你的名字")
  3. 确保 Webhook 端点使用你的 HTTPS URL
  4. 点击注册,这将带你到 GitHub
  5. 在 GitHub 上完成应用创建
  6. 选择你想授权的仓库,或授权所有仓库

使用 GitHub 集成部署应用

  1. 创建新项目
  2. 添加资源 → 选择"使用 GitHub 应用的私有仓库"
  3. 选择你的 GitHub 应用和你想部署的仓库
  4. 选择构建包(例如 nixpacks)
  5. 设置必要的环境变量和域名
  6. 点击部署

现在,每当你推送新代码到仓库时,Coolify 将自动检测变更并重新部署应用。

配置 Webhook 自动部署

GitHub 应用集成已经为你配置了 webhook,但对于现有项目,你可以在项目设置中查看 webhook 状态:

  1. 进入项目 → 配置 → Webhooks
  2. 确认 webhook 状态为"活跃"
  3. 推送更改到仓库来测试自动部署

8. 数据库设置与管理

Coolify 支持多种数据库的一键部署,让我们以 PostgreSQL 为例。

部署 PostgreSQL 数据库

  1. 在你的项目中,添加资源 → 选择"数据库" → PostgreSQL
  2. 设置数据库名称(例如"mydb")
  3. 保存并启动数据库

数据库会自动启动,并提供连接信息:

  • 数据库主机(容器名)
  • 数据库端口
  • 用户名和密码
  • 数据库连接 URL

部署带数据库的应用

以 T3 应用(Next.js + Prisma + PostgreSQL)为例:

  1. 创建一个新项目,并添加 PostgreSQL 数据库资源
  2. 添加应用资源,链接到 GitHub 仓库
  3. 配置环境变量,包括数据库连接 URL
    DATABASE_URL=postgres://postgres:密码@数据库容器名:5432/postgres
    
  4. 对于 Prisma 应用,我们需要初始化数据库架构

我们可以创建一个 Docker 容器来推送数据库架构:

FROM node:16

WORKDIR /app

RUN git clone 你的仓库URL .
RUN npm install

ENV DATABASE_URL=postgres://postgres:密码@数据库容器名:5432/postgres

RUN npx prisma db push

CMD ["npx", "prisma", "studio"]

配置好 Docker 容器后,可以推送数据库架构,然后停止容器。

9. 高级配置:HTTP 重定向与基本认证

创建自定义 Caddy 配置

Coolify 使用 Caddy 作为代理服务器,我们可以通过 Docker 标签自定义 Caddy 配置:

  1. 在项目配置中,找到标签设置
  2. 添加标签来自定义 Caddy 行为

例如,添加 HTTP 基本认证:

caddy.0.basicauth=username hash密码

你可以使用 Docker 容器生成哈希密码:

sudo docker run --rm caddy caddy hash-password

创建动态代理配置

对于全局代理配置,可以使用 Coolify 的动态配置功能:

  1. 转到服务器 → 代理 → 动态配置
  2. 点击"创建",并为配置提供一个名称
  3. 添加配置,例如全局重定向:
www.你的域名.com {
    redir https://你的域名.com
}

这将创建一个在所有项目之外生效的全局 Caddy 配置。

10. 备份与恢复策略

为了保护你的数据,设置适当的备份策略是至关重要的。

设置 MinIO (S3 兼容存储)

  1. 创建一个名为"存储"的新项目
  2. 添加资源 → 服务 → MinIO
  3. 设置域名为 storage.你的域名.com
  4. 设置控制台域名为 console.storage.你的域名.com
  5. 保存并部署

部署完成后,你会获得管理员用户名和密码。登录 MinIO 控制台:

  1. 创建一个存储桶(例如"db-backups")
  2. 创建一个访问密钥,记下访问密钥和密钥 ID

配置数据库备份

  1. 在 Coolify 仪表板中,转到 S3 存储

  2. 点击"添加",并配置你的 MinIO 存储:

    • 名称:MinIO 存储
    • 端点:https://storage.你的域名.com
    • 区域:us-west-1(或你设置的区域)
    • 存储桶:db-backups
    • 访问密钥和密钥:使用刚刚创建的密钥
    • 点击"验证连接"
  3. 转到你的数据库资源 → 备份

  4. 设置备份频率(使用 cron 语法)

    • 例如:0 0 * * * 表示每天午夜备份
  5. 启用 S3 备份,选择你配置的 MinIO 存储

  6. 设置本地保留的备份数量(例如 7)

  7. 保存设置

现在,你的数据库将按照设定的计划自动备份到 MinIO 存储中。

11. 监控与状态仪表板

为了监控服务器的性能和健康状况,我们可以部署一个简单的状态仪表板。

部署 Glances 监控

  1. 创建一个新项目(例如"VPS 状态")
  2. 添加资源 → 选择"Docker Compose"
  3. 使用以下 Docker Compose 配置:
version: '3'
services:
  glances:
    image: nicolargo/glances:latest
    pid: host
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      - GLANCES_OPT=-w
    restart: always
    ports:
      - 61208:61208
    labels:
      - caddy.0.basicauth=你的用户名 你的密码哈希
  1. 设置域名为 stats.你的域名.com:61208
  2. 保存并部署

现在你可以通过 https://stats.你的域名.com 访问 Glances 仪表板,它会显示 CPU、内存、磁盘和网络使用情况,以及正在运行的容器信息。

使用 Coolify 自带监控

Coolify 也提供了基本的监控功能:

  1. 转到你的服务器资源
  2. 查看资源使用情况图表
  3. 查看运行中的容器和它们的状态

12. 常见问题排查

部署失败问题

如果部署失败,可以查看以下几点:

  1. 检查日志:在项目页面的"部署"和"日志"选项卡中查看错误信息
  2. 确认构建包:有时 nixpacks 可能无法正确检测你的应用类型,你可能需要指定特定的构建和启动命令
  3. 检查环境变量:确保所有必要的环境变量都已正确设置
  4. 检查端口配置:确保应用在 Docker 容器内监听正确的端口,并且该端口已正确映射

代理问题

如果你的应用已部署但无法访问:

  1. 检查域名配置:确保域名已正确设置并指向服务器 IP
  2. 查看 Caddy 配置:检查代理配置和标签设置
  3. 检查 HTTPS 证书:Caddy 应该自动生成和更新证书,但有时可能会失败
  4. 检查应用端口:确保 Caddy 正在代理到正确的应用端口

资源限制问题

如果你的服务器资源不足:

  1. 监控资源使用情况:使用 Glances 或类似工具查看 CPU 和内存使用情况
  2. 调整容器资源限制:在 Docker Compose 配置中设置 CPU 和内存限制
  3. 升级服务器:如果你经常遇到资源限制,考虑升级服务器配置

13. Coolify 的优缺点

优点

  1. 简单易用:提供类似于 Vercel 和 Netlify 的一键部署体验
  2. 完全自托管:你拥有完全的控制权和数据所有权
  3. 多种应用支持:从静态网站到复杂的全栈应用都能部署
  4. 预配置服务:数据库、缓存和其他服务的一键部署
  5. 自动 HTTPS:通过 Caddy 轻松配置 SSL
  6. 开源免费:无需订阅费用

缺点

  1. 资源消耗:Coolify 本身需要大量资源(2 CPU, 2GB RAM)
  2. 仍在积极开发中:可能会遇到 bug 和不稳定问题
  3. 学习曲线:要充分利用 Coolify,仍需了解 Docker 和网络基础知识
  4. 一人维护项目:主要由一个开发者维护,支持可能有限
  5. 自定义配置复杂度:非标准应用可能需要更多手动配置

14. 结语

Coolify 是一个有前途的自托管 PaaS 解决方案,特别适合那些希望在自己的基础设施上获得类似 Netlify 或 Vercel 体验的开发者。虽然它仍在积极开发中,但已经可以用于生产环境,特别是对于静态网站和标准 Web 应用。

对于已经熟悉 Docker 和服务器管理的开发者,直接使用 Docker 和 Caddy 可能更为灵活。但对于希望减少运维复杂度的团队和个人,Coolify 提供了一个很好的平衡点,既有自托管的好处,又不失云服务的便利性。

随着项目的成熟和社区的增长,Coolify 有望成为自托管 PaaS 领域的领先解决方案。如果你有兴趣了解更多或参与项目,可以访问 Coolify 的 GitHub 仓库和 Discord 社区。


希望这个教程对你有所帮助!如果你有任何问题或需要更详细的解释,请随时在评论中提问或访问 Coolify 的官方支持渠道。

祝你的自托管之旅愉快!