- Node.js >= 18
- PM2 (用于进程管理)
- Nginx (用于反向代理)
# 更新系统包
sudo apt update && sudo apt upgrade -y
# 安装 Node.js
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs
# 安装 PM2
sudo npm install -g pm2
# 安装 Nginx
sudo apt install -y nginx
# 创建应用目录
mkdir -p /var/www/resource-navigator
cd /var/www/resource-navigator
# 克隆项目代码
git clone [你的仓库地址] .
# 安装项目依赖
npm install
# 生成 Prisma 客户端
npm run db:generate
创建 .env
文件:
# 数据库配置 (建议在生产环境使用 PostgreSQL)
DATABASE_URL="file:/var/www/resource-navigator/prisma/prod.db"
# Next.js 配置
NEXTAUTH_URL="https://你的域名"
ADMIN_EMAIL="管理员邮箱"
ADMIN_PASSWORD="管理员密码"
NEXTAUTH_SECRET="生成一个随机密钥"
# Telegram 配置
TELEGRAM_BOT_TOKEN="你的Telegram Bot Token"
HTTP_PROXY="你的代理服务器地址" # 如果需要代理访问 Telegram
# 构建 Next.js 项目
npm run build
创建 ecosystem.config.js
:
module.exports = {
apps: [
{
name: 'resource-navigator',
script: 'npm',
args: 'start',
env: {
NODE_ENV: 'production',
PORT: 3000
}
},
{
name: 'telegram-scraper',
script: 'scripts/scrape-telegram-v2.ts',
interpreter: 'node',
interpreter_args: '-r ts-node/register',
cron_restart: '0 */6 * * *', // 每6小时运行一次
watch: false,
env: {
NODE_ENV: 'production'
}
}
]
};
# 启动应用
pm2 start ecosystem.config.js
# 保存 PM2 配置(开机自启)
pm2 save
pm2 startup
创建 Nginx 配置文件:
server {
listen 80;
server_name 你的域名;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
# 测试配置
sudo nginx -t
# 重启 Nginx
sudo systemctl restart nginx
# 安装 Certbot
sudo apt install -y certbot python3-certbot-nginx
# 获取 SSL 证书
sudo certbot --nginx -d 你的域名
创建数据库备份脚本 backup.sh
:
#!/bin/bash
BACKUP_DIR="/var/www/resource-navigator/backups"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
# 创建备份目录
mkdir -p $BACKUP_DIR
# 复制数据库文件
cp /var/www/resource-navigator/prisma/prod.db $BACKUP_DIR/prod_$TIMESTAMP.db
# 保留最近7天的备份
find $BACKUP_DIR -name "prod_*.db" -mtime +7 -delete
设置定时任务:
# 编辑 crontab
crontab -e
# 添加每日备份任务(每天凌晨3点)
0 3 * * * /var/www/resource-navigator/backup.sh
# 查看应用日志
pm2 logs resource-navigator
# 查看爬虫日志
pm2 logs telegram-scraper
# 查看应用状态
pm2 status
# 查看详细监控
pm2 monit
# 进入项目目录
cd /var/www/resource-navigator
# 拉取最新代码
git pull
# 安装依赖
npm install
# 重新构建
npm run build
# 重启服务
pm2 restart all
-
如果网站无法访问:
- 检查 PM2 进程状态:
pm2 status
- 检查 Nginx 状态:
sudo systemctl status nginx
- 检查应用日志:
pm2 logs
- 检查 PM2 进程状态:
-
如果爬虫无法工作:
- 检查代理配置
- 检查 Telegram Bot Token
- 查看爬虫日志:
pm2 logs telegram-scraper
-
数据库问题:
- 检查数据库文件权限
- 恢复最近的备份
- 运行数据库迁移:
npm run db:migrate
- 定期检查日志确保服务正常运行
- 确保服务器防火墙只开放必要端口(80/443)
- 定期更新系统和依赖包
- 保持备份文件的安全性
- 监控服务器资源使用情况