构建与部署
项目构建、打包、服务器部署完整流程
概述
本项目基于 Next.js 16 + Fumadocs 构建, 部署到 Debian 13, 使用 Nginx 反向代理 + SSL.
本地构建
先清理旧的开发缓存, 再执行生产构建:
cd ~/docs/myself-docs/my-self-app
rm -rf .next
pnpm build打包传输
以下文件需要传到服务器:
| 文件/目录 | 说明 |
|---|---|
.next/ | 构建产物 (必需) |
public/ | 静态资源 |
package.json | 依赖声明 |
pnpm-lock.yaml | 锁定版本 |
.env.local | 生产环境变量 |
打包命令:
tar -czf deploy.tar.gz .next package.json pnpm-lock.yaml .env.local
scp deploy.tar.gz user@server:/opt/myself-docs/服务器部署
1. 解压安装
ssh user@server
cd /opt/myself-docs
tar -xzf deploy.tar.gz
pnpm install --prod --ignore-scripts2. PM2 进程管理
# 安装 pm2 (全局)
pnpm add -g pm2
# 启动
pm2 start pnpm --name "myself-docs" -- start
# 查看状态
pm2 status
# 查看日志
pm2 logs myself-docs
# 保存进程列表, 开机自启
pm2 save
pm2 startup3. Nginx 反向代理 + SSL
创建 /etc/nginx/sites-available/myself-docs:
# HTTP → HTTPS
server {
listen 80;
server_name your-domain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name your-domain.com;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
add_header Strict-Transport-Security "max-age=63072000" always;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 50m;
}
location /_next/static {
proxy_pass http://127.0.0.1:3000;
proxy_cache_valid 200 365d;
add_header Cache-Control "public, immutable";
}
}启用:
ln -s /etc/nginx/sites-available/myself-docs /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx4. SSL 证书 (Let's Encrypt)
apt install certbot python3-certbot-nginx
certbot --nginx -d your-domain.com
certbot renew --dry-run更新部署
# 本地
pnpm build
tar -czf deploy.tar.gz .next public package.json pnpm-lock.yaml .env.local
scp deploy.tar.gz user@server:/opt/myself-docs/
# 服务器
cd /opt/myself-docs
tar -xzf deploy.tar.gz
pnpm install --prod --ignore-scripts
pm2 restart myself-docs环境变量
生产 .env.local:
# Supabase 密码验证 (可选)
NEXT_PUBLIC_SUPABASE_URL=https://xxx.supabase.co
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=eyJh...
# HMAC token 密钥
AUTH_SECRET=your-random-32-char-secret
# 本地密码 (没有 Supabase 时的 fallback)
# NEXT_PUBLIC_DOCS_PASSWORD=journal2026