# 云服务器部署指南 ## 目标服务器 - **主机:** cssc.datalibstar.com - **用户:** mashen - **项目路径:** /root/.openclaw/workspace/city-manual --- ## 部署前准备 ### 1. 解决 SSH 连接问题 当前 SSH 认证失败,需要: **方案 A: 使用密码登录** ```bash # 在本地测试 ssh mashen@cssc.datalibstar.com # 输入密码:825670@MashenClaw ``` **方案 B: 配置 SSH 密钥** ```bash # 在服务器上添加公钥 ssh-copy-id mashen@cssc.datalibstar.com # 或手动添加 cat ~/.ssh/id_ed25519.pub | ssh mashen@cssc.datalibstar.com "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" ``` ### 2. 服务器环境要求 **必需软件:** - Python 3.8+ - Node.js 16+ - PostgreSQL 12+ - Nginx - Gunicorn **检查命令:** ```bash python3 --version node --version psql --version nginx -v ``` --- ## 部署步骤 ### 步骤 1: 克隆项目 ```bash # SSH 到服务器 ssh mashen@cssc.datalibstar.com # 进入工作目录 cd /root/.openclaw/workspace # 克隆最新代码 git clone http://10.2.0.100:8989/mashen/chengshishouce.git city-manual-temp cd city-manual-temp git checkout master ``` ### 步骤 2: 安装后端依赖 ```bash cd /root/.openclaw/workspace/city-manual-temp/backend # 创建虚拟环境 python3 -m venv venv source venv/bin/activate # 安装依赖 pip install -r requirements.txt pip install gunicorn ``` ### 步骤 3: 配置环境变量 ```bash cd /root/.openclaw/workspace/city-manual-temp # 创建 .env 文件 cat > .env << EOF # Django 配置 DJANGO_SETTINGS_MODULE=config.settings.production DJANGO_SECRET_KEY=your-secret-key-change-this DEBUG=False ALLOWED_HOSTS=cssc.datalibstar.com,127.0.0.1,localhost # 数据库配置 DATABASE_URL=postgres://coder:825670wl@10.2.0.100:5432/cssc # 媒体文件 MEDIA_ROOT=/root/.openclaw/workspace/city-manual-temp/backend/media STATIC_ROOT=/root/.openclaw/workspace/city-manual-temp/backend/static EOF ``` ### 步骤 4: 数据库迁移 ```bash cd /root/.openclaw/workspace/city-manual-temp/backend source ../venv/bin/activate # 执行迁移 python manage.py migrate # 收集静态文件 python manage.py collectstatic --noinput # 创建超级用户(可选) python manage.py createsuperuser ``` ### 步骤 5: 配置 Gunicorn ```bash # 创建 systemd 服务文件 sudo cat > /etc/systemd/system/city-manual.service << 'EOF' [Unit] Description=City Manual Gunicorn Service After=network.target [Service] User=root Group=root WorkingDirectory=/root/.openclaw/workspace/city-manual-temp/backend ExecStart=/root/.openclaw/workspace/city-manual-temp/backend/venv/bin/gunicorn \ --access-logfile - \ --workers 3 \ --bind unix:/run/city-manual.sock \ city_manual.wsgi:application Restart=always [Install] WantedBy=multi-user.target EOF # 启动服务 sudo systemctl daemon-reload sudo systemctl enable city-manual sudo systemctl start city-manual # 检查状态 sudo systemctl status city-manual ``` ### 步骤 6: 配置 Nginx ```bash # 创建 Nginx 配置 sudo cat > /etc/nginx/sites-available/city-manual << 'EOF' server { listen 80; server_name cssc.datalibstar.com; # 日志 access_log /var/log/nginx/city-manual-access.log; error_log /var/log/nginx/city-manual-error.log; # 静态文件 location /static/ { alias /root/.openclaw/workspace/city-manual-temp/backend/static/; expires 30d; add_header Cache-Control "public, immutable"; } # 媒体文件 location /media/ { alias /root/.openclaw/workspace/city-manual-temp/backend/media/; expires 7d; } # Django 应用 location / { include proxy_params; proxy_pass http://unix:/run/city-manual.sock; 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 10M; } EOF # 启用配置 sudo ln -sf /etc/nginx/sites-available/city-manual /etc/nginx/sites-enabled/ # 测试配置 sudo nginx -t # 重载 Nginx sudo systemctl reload nginx ``` ### 步骤 7: 配置防火墙 ```bash # 开放 HTTP 端口 sudo ufw allow 80/tcp # 开放 HTTPS 端口(如果启用 SSL) sudo ufw allow 443/tcp # 检查防火墙状态 sudo ufw status ``` ### 步骤 8: 部署前端(可选) 如果使用前后端分离部署: ```bash cd /root/.openclaw/workspace/city-manual-temp/frontend # 安装依赖 npm install # 构建生产版本 npm run build # 配置 Nginx 服务构建文件 # (需要额外配置 Nginx 路由) ``` ### 步骤 9: 验证部署 ```bash # 检查 Gunicorn 状态 sudo systemctl status city-manual # 检查 Nginx 状态 sudo systemctl status nginx # 测试访问 curl http://cssc.datalibstar.com/ curl http://cssc.datalibstar.com/admin/ # 查看日志 sudo tail -f /var/log/nginx/city-manual-access.log sudo tail -f /var/log/nginx/city-manual-error.log ``` --- ## 自动化部署脚本 创建 `deploy.sh` 脚本: ```bash #!/bin/bash set -e echo "🚀 开始部署城市手册..." PROJECT_DIR="/root/.openclaw/workspace/city-manual" VENV_DIR="$PROJECT_DIR/backend/venv" # 1. 拉取最新代码 cd $PROJECT_DIR git pull origin master # 2. 安装依赖 source $VENV_DIR/bin/activate pip install -r requirements.txt -q # 3. 数据库迁移 cd $PROJECT_DIR/backend python manage.py migrate --noinput # 4. 收集静态文件 python manage.py collectstatic --noinput # 5. 重启 Gunicorn sudo systemctl restart city-manual # 6. 检查状态 sleep 2 if sudo systemctl is-active --quiet city-manual; then echo "✅ 部署成功!" echo "📍 访问地址:http://cssc.datalibstar.com" else echo "❌ 部署失败,请检查日志" exit 1 fi ``` 使用: ```bash chmod +x deploy.sh ./deploy.sh ``` --- ## HTTPS 配置(推荐) ### 使用 Let's Encrypt ```bash # 安装 Certbot sudo apt install certbot python3-certbot-nginx # 获取证书 sudo certbot --nginx -d cssc.datalibstar.com # 自动续期 sudo certbot renew --dry-run ``` ### 配置自动 HTTPS 重定向 Nginx 配置会自动添加 301 重定向。 --- ## 监控和维护 ### 日志查看 ```bash # Nginx 日志 sudo tail -f /var/log/nginx/city-manual-access.log sudo tail -f /var/log/nginx/city-manual-error.log # Gunicorn 日志 sudo journalctl -u city-manual -f ``` ### 性能监控 ```bash # 查看进程 ps aux | grep gunicorn # 查看连接 sudo netstat -nltp | grep city-manual # 查看资源使用 htop ``` ### 备份数据库 ```bash # 备份 pg_dump -h 10.2.0.100 -U coder cssc > backup_$(date +%Y%m%d).sql # 恢复 psql -h 10.2.0.100 -U coder cssc < backup_20260412.sql ``` --- ## 故障排除 ### 问题 1: Gunicorn 启动失败 ```bash # 查看详细错误 sudo journalctl -u city-manual -n 50 # 检查端口占用 sudo lsof -i :8000 # 手动测试 cd /root/.openclaw/workspace/city-manual/backend source venv/bin/activate python manage.py runserver ``` ### 问题 2: Nginx 502 Bad Gateway ```bash # 检查 Gunicorn socket ls -la /run/city-manual.sock # 检查权限 sudo chmod 666 /run/city-manual.sock # 重启服务 sudo systemctl restart city-manual sudo systemctl restart nginx ``` ### 问题 3: 静态文件 404 ```bash # 重新收集 cd /root/.openclaw/workspace/city-manual/backend source venv/bin/activate python manage.py collectstatic --noinput # 检查 Nginx 配置路径 sudo nginx -t ``` ### 问题 4: 数据库连接失败 ```bash # 测试连接 psql -h 10.2.0.100 -U coder -d cssc # 检查 .env 配置 cat /root/.openclaw/workspace/city-manual/.env ``` --- ## 回滚方案 ```bash # 1. 切换到上一个版本 cd /root/.openclaw/workspace/city-manual git checkout # 2. 重新部署 ./deploy.sh # 3. 验证 curl http://cssc.datalibstar.com/ ``` --- ## 部署检查清单 - [ ] SSH 可以正常连接 - [ ] Python 和 Node.js 版本正确 - [ ] PostgreSQL 可连接 - [ ] 代码已拉取到最新 - [ ] 依赖已安装 - [ ] 数据库迁移完成 - [ ] 静态文件已收集 - [ ] Gunicorn 服务运行正常 - [ ] Nginx 配置正确 - [ ] 防火墙已配置 - [ ] 可以通过浏览器访问 - [ ] Admin 后台可以登录 - [ ] 日志正常无错误 --- ## 参考链接 - [Django 部署文档](https://docs.djangoproject.com/en/stable/howto/deployment/) - [Gunicorn 文档](https://docs.gunicorn.org/en/stable/) - [Nginx 配置最佳实践](https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/) --- ## 版本信息 - **文档版本:** 1.0 - **创建日期:** 2026-04-12 - **项目版本:** 2026.4.12 - **作者:** 码神 ⚡