部署方案调研
Coolify vs Dokploy
coolify作为使用larvel基于docker开发的开源部署方案,稳定运行多年且其部署方案深受个人开发者喜爱,所以尝试使用coolify解决网页部署。虽然总体上dokploy比coolify有更多的优点,但是目前coolify对cloudflare支持还是比较差一些所以我这里用了开源比较久的稳定老牌coolify。
以下为具体实践过程:
开了一台netcup限时特惠的4c8g服务器,进入服务器后首先配置本地mac公钥到服务器上
cat ~/.ssh/filename.pub | ssh user@host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys
然后在服务器上添加权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
ls -ld ~/.ssh
ls -l ~/.ssh/authorized_keys
配置sshd
vim /etc/ssh/sshd_config
PermitRootLogin prohibit-password or true
PubkeyAuthentication yes
配置coolify所需防火墙并检查
sudo ufw status
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 3000/tcp
sudo ufw allow 6001/tcp
sudo ufw allow 6002/tcp
sudo ufw allow 9000:9100/tcp
sudo ufw allow 8000/tcp
sudo ufw enable
sudo ufw status verbose
运行coolify自动化安装脚本
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash
安装完成后在梯子配置可访问ip的8000端口随后设置coolify权限账号

实际部署
创建source
新增默认source,其名称可改为你所部署项目名称,然后默认选中privte/public的仓库并用github app新增。
创建project
新增部署项目后需要添加上一步所创建的source的资源。如果是简单nextjs项目则保持默认,比如base directory以及publick directory都保持根目录/,如果是condev-ui这样的monorepo项目,所部署的网页在某一个子包里,可以编写nixpacks.toml去指定命令。这里nixpacks.toml的脚本写的为
providers = ["node"][phases.setup];
nixPkgs = ["nodejs_22", "pnpm"][phases.install];
cmds = ["pnpm install --frozen-lockfile"][phases.build];
cmds = ["pnpm exec turbo run build"][start];
cmd = "pnpm --filter @condev-ui/site start";
然后push到仓库里面,点击project deploy。然后就可以在domain里面访问部署的项目了。等到下次push到仓库中coolify会自动部署。