Panfex Blog

独立项目部署教程

在同一台服务器上部署独立的 Next.js 项目,使用子域名访问,与主站完全隔离。以 panfex-blog 为例。

前置信息

项目
服务器Ubuntu 22.04, IP 你的服务器 IP
子域名blog.panfex.com
项目目录/home/ubuntu/panfex-blog
运行端口3001
GitHub 仓库Cipuzp/panfex-blog(Private)

第一步:DNS 解析(最先做,等生效)

在域名管理面板添加一条 A 记录:

记录类型主机记录记录值
Ablog你的服务器 IP

DNS 解析需要几分钟到几小时生效,先做这一步,利用等待时间做后续操作。

第二步:本地准备(推送代码到 GitHub)

cd /path/to/your/project
git init
git add -A
git commit -m "初始化项目"

# 在 GitHub 上创建仓库(Private),然后关联并推送
git remote add origin https://github.com/Cipuzp/panfex-blog.git
git branch -M main
git push -u origin main

第三步:服务器 SSH 密钥配置

GitHub 的 Deploy Key 是绑定单个仓库的,同一个 key 不能用于两个仓库。如果服务器已有 SSH key 用于其他仓库(如 contentFactory),需要为新仓库生成新的密钥。

3.1 生成新密钥

ssh root@你的服务器 IP

# 生成新的 SSH 密钥
ssh-keygen -t ed25519 -f ~/.ssh/id_panfex_blog -C "panfex-blog-deploy"
# 提示 passphrase 时直接回车(留空)

3.2 配置 SSH 别名

cat >> ~/.ssh/config << 'EOF'
Host github-blog
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_panfex_blog
EOF

为什么要用别名? 服务器有两个 SSH 密钥:

  • ~/.ssh/id_rsa → 给 contentFactory
  • ~/.ssh/id_panfex_blog → 给 panfex-blog

git@github.com 时 SSH 默认只用 id_rsa。别名 github-blog 告诉 SSH 访问时用 id_panfex_blog 密钥:

  • git@github.com:Cipuzp/contentFactory.git → 用 id_rsa
  • git@github-blog:Cipuzp/panfex-blog.git → 用 id_panfex_blog

3.3 添加 Deploy Key 到 GitHub

cat ~/.ssh/id_panfex_blog.pub

复制输出,前往 GitHub → 仓库 → Settings → Deploy keys → Add deploy key,粘贴公钥。

第四步:克隆代码到服务器

mkdir -p /home/ubuntu/panfex-blog
cd /home/ubuntu/panfex-blog

# 使用别名克隆
git clone git@github-blog:Cipuzp/panfex-blog.git .

第五步:首次初始化

chmod +x scripts/deploy.sh
./scripts/deploy.sh --init

会安装 Node.js 22(NodeSource apt 源)和 PM2。

第六步:正式部署

./scripts/deploy.sh

自动执行:git pullnpm cinpm run build → Nginx 配置 → PM2 启动。

验证 HTTP

curl http://localhost:3001/health
# 返回 OK

# DNS 生效后
curl http://blog.panfex.com/health
# 返回 OK

第七步:签发 SSL 证书

等 DNS A 记录生效后(ping blog.panfex.com 确认解析到正确 IP):

./scripts/deploy.sh --ssl

第八步:最终验证

curl -I https://blog.panfex.com

浏览器访问 https://blog.panfex.com 确认页面和 HTTPS 正常。

日常更新

cd /home/ubuntu/panfex-blog
./scripts/deploy.sh

常用命令

pm2 status                    # 查看应用状态
pm2 logs panfex-blog          # 查看实时日志
pm2 restart panfex-blog       # 手动重启
sudo nginx -t                 # 测试 Nginx 配置
sudo systemctl reload nginx   # 重载 Nginx
sudo certbot renew --dry-run  # 检查 SSL 续签

deploy.sh 命令一览

命令用途
./scripts/deploy.sh日常更新(git pull → 构建 → 重启)
./scripts/deploy.sh --init首次初始化(安装 Node + PM2)
./scripts/deploy.sh --build-only仅构建,不重启
./scripts/deploy.sh --nginx仅更新 Nginx 配置
./scripts/deploy.sh --ssl签发 SSL 证书

On this page