5.9 KiB
5.9 KiB
OmniVerse 官网生产环境部署指南
部署架构
Internet (80/443)
↓
Nginx Reverse Proxy (Docker)
↓
├─→ Frontend App (Port 3000, Docker)
└─→ News Crawler API (Port 3001, Docker)
服务组件
- Nginx - 反向代理和SSL终止 (80/443端口)
- Web Frontend - React应用 (内部3000端口)
- News Crawler - 新闻爬虫服务 (内部3001端口)
- Certbot - SSL证书自动续期
部署前准备
1. 检查域名DNS解析
确保域名已正确解析到服务器:
nslookup www.omniverseai.net
nslookup omniverseai.net
2. 检查必要端口
确保以下端口可用:
# 检查端口占用
netstat -tlnp | grep -E ':(80|443) '
# 如有其他服务占用,需要先停止
3. 安装Docker和Docker Compose
# 检查Docker版本
docker --version
docker-compose --version
# 如未安装,请先安装Docker
4. 配置环境变量
编辑 .env.production 文件,修改必要的配置:
nano .env.production
重要配置项:
API_KEY: 修改为强密码CORS_ORIGIN: 确认域名正确
部署步骤
第一步:初始部署(HTTP)
首次部署使用HTTP模式,用于SSL证书申请:
# 运行部署脚本
./deploy-prod.sh
部署脚本会:
- 停止旧容器
- 构建Docker镜像
- 启动所有服务
- 显示服务状态
第二步:验证HTTP访问
访问 http://www.omniverseai.net 确认网站可以正常访问。
# 检查服务状态
docker-compose -f docker-compose.prod.yml ps
# 查看日志
docker-compose -f docker-compose.prod.yml logs -f web
docker-compose -f docker-compose.prod.yml logs -f news-crawler
docker-compose -f docker-compose.prod.yml logs -f nginx
第三步:申请SSL证书
确认HTTP访问正常后,运行SSL初始化脚本:
# 申请证书(首次)
./init-ssl.sh
第四步:启用HTTPS
证书申请成功后,需要更新Nginx配置:
- 编辑
nginx/default.conf:
nano nginx/default.conf
-
进行以下修改:
- 在HTTP服务器块中,注释掉临时的
proxy_pass配置 - 取消注释 HTTP到HTTPS重定向配置
- 取消注释整个HTTPS服务器配置块
- 在HTTP服务器块中,注释掉临时的
-
重启Nginx:
docker-compose -f docker-compose.prod.yml restart nginx
- 验证HTTPS访问: 访问 https://www.omniverseai.net
管理命令
查看服务状态
docker-compose -f docker-compose.prod.yml ps
查看日志
# 查看所有服务日志
docker-compose -f docker-compose.prod.yml logs -f
# 查看特定服务日志
docker-compose -f docker-compose.prod.yml logs -f web
docker-compose -f docker-compose.prod.yml logs -f nginx
docker-compose -f docker-compose.prod.yml logs -f news-crawler
重启服务
# 重启所有服务
docker-compose -f docker-compose.prod.yml restart
# 重启特定服务
docker-compose -f docker-compose.prod.yml restart web
docker-compose -f docker-compose.prod.yml restart nginx
停止服务
docker-compose -f docker-compose.prod.yml down
更新部署
# 拉取最新代码
git pull
# 重新部署
./deploy-prod.sh
SSL证书续期
Certbot容器会自动续期证书(每12小时检查一次)。也可以手动续期:
docker-compose -f docker-compose.prod.yml run --rm certbot renew
docker-compose -f docker-compose.prod.yml restart nginx
监控和维护
健康检查
# Web服务健康检查
curl http://localhost:3000
# News爬虫服务健康检查
curl http://localhost:3001/health
# Nginx状态
curl -I http://www.omniverseai.net
数据备份
新闻数据库和日志存储在Docker volumes中:
# 查看volumes
docker volume ls | grep omniverse
# 备份新闻数据库
docker run --rm -v website_news_data:/data -v $(pwd):/backup alpine tar czf /backup/news_data_backup.tar.gz -C /data .
# 备份日志
docker run --rm -v website_news_logs:/logs -v $(pwd):/backup alpine tar czf /backup/news_logs_backup.tar.gz -C /logs .
清理旧数据
新闻爬虫服务会自动清理7天前的旧新闻(可在 .env.production 中配置)。
故障排查
网站无法访问
- 检查服务是否运行:
docker-compose -f docker-compose.prod.yml ps
- 检查Nginx日志:
docker-compose -f docker-compose.prod.yml logs nginx
- 检查端口是否监听:
netstat -tlnp | grep -E ':(80|443) '
SSL证书问题
- 检查证书文件:
ls -la ./certbot/conf/live/www.omniverseai.net/
- 测试证书:
openssl s_client -connect www.omniverseai.net:443 -servername www.omniverseai.net
- 手动续期:
docker-compose -f docker-compose.prod.yml run --rm certbot renew --dry-run
新闻服务问题
- 检查服务日志:
docker-compose -f docker-compose.prod.yml logs news-crawler
- 手动触发爬虫:
curl -X POST http://localhost:3001/api/crawl \
-H "X-API-Key: your-api-key"
- 检查数据库:
docker exec -it omniverse-news-crawler ls -la /app/data
性能优化
Nginx缓存
可以在 nginx/default.conf 中添加缓存配置:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;
proxy_cache my_cache;
资源限制
可以在 docker-compose.prod.yml 中添加资源限制:
services:
web:
deploy:
resources:
limits:
cpus: '1'
memory: 512M
安全建议
- 定期更新Docker镜像
- 使用强密码作为API_KEY
- 启用防火墙,只开放80和443端口
- 定期备份数据
- 监控日志中的异常访问
- 配置fail2ban防止暴力攻击
联系支持
如遇到问题,请查看:
- 应用日志:
docker-compose logs - Nginx日志:
/var/log/nginx/(在容器内) - 新闻服务日志:
./news-crawler-service/logs/