#!/bin/bash # 简化的部署脚本 set -e SERVER_USER="ubuntu" SERVER_HOST="cssc.datalibstar.com" SERVER_PASS="825670@MashenClaw" SERVER_DIR="/home/ubuntu/city-manual" LOCAL_DIR="/root/.openclaw/workspace" TEMP_TAR="/tmp/city-manual-deploy.tar.gz" echo "========================================" echo " 城市手册项目部署到云服务器" echo "========================================" echo "" # 1. 打包本地代码 echo "1. 打包本地代码..." cd "$LOCAL_DIR" tar --exclude='.git' \ --exclude='node_modules' \ --exclude='backend/venv' \ --exclude='__pycache__' \ --exclude='*.pyc' \ --exclude='.env' \ --exclude='db.sqlite3' \ --exclude='media' \ --exclude='staticfiles' \ --exclude='.docker' \ --exclude='frontend/node_modules' \ -czf "$TEMP_TAR" . echo "✓ 打包完成:$TEMP_TAR ($(du -h "$TEMP_TAR" | cut -f1))" # 2. 上传到服务器 echo "2. 上传到服务器..." sshpass -p "$SERVER_PASS" scp -o StrictHostKeyChecking=no "$TEMP_TAR" "$SERVER_USER@$SERVER_HOST:/tmp/" echo "✓ 上传完成" # 3. 在服务器上解压并部署 echo "3. 在服务器上部署..." sshpass -p "$SERVER_PASS" ssh -o StrictHostKeyChecking=no "$SERVER_USER@$SERVER_HOST" " set -e # 备份旧目录 if [ -d '$SERVER_DIR' ]; then echo '备份旧版本...' mv $SERVER_DIR ${SERVER_DIR}.backup.\$(date +%Y%m%d_%H%M%S) fi # 创建新目录 mkdir -p $SERVER_DIR # 解压代码 echo '解压代码...' tar -xzf /tmp/city-manual-deploy.tar.gz -C $SERVER_DIR cd $SERVER_DIR # 创建 .env 文件 echo '创建环境配置...' cat > .env << 'EOF' DJANGO_SECRET_KEY=CityWiki2024SecretKey825670 DJANGO_DEBUG=False DB_NAME=citywiki DB_USER=citywiki DB_PASSWORD=CityWiki2024! DB_HOST=db DB_PORT=5432 ALLOWED_HOSTS=localhost,cssc.datalibstar.com,127.0.0.1 CORS_ALLOWED_ORIGINS=http://localhost,http://cssc.datalibstar.com,http://127.0.0.1 EOF # 安装前端依赖 echo '安装前端依赖...' cd frontend npm install --production cd .. # 构建并启动 Docker echo '构建 Docker 镜像...' docker-compose build echo '启动服务...' docker-compose up -d # 等待服务启动 echo '等待服务启动...' sleep 15 # 运行数据库迁移 echo '运行数据库迁移...' docker-compose exec -T backend python manage.py migrate --noinput # 导入省份数据 echo '导入省份数据...' docker-compose exec -T backend python manage.py seed_provinces # 创建超级用户 echo '创建管理员账户...' docker-compose exec -T backend python manage.py shell << 'PYTHON' from django.contrib.auth import get_user_model User = get_user_model() if not User.objects.filter(username='admin').exists(): User.objects.create_superuser('admin', 'admin@citywiki.com', 'Admin123!') print('✓ 管理员账户已创建') print(' 用户名:admin') print(' 密码:Admin123!') else: print('✓ 管理员账户已存在') PYTHON # 清理临时文件 rm -f /tmp/city-manual-deploy.tar.gz echo '' echo '========================================' echo ' 部署完成!' echo '========================================' echo '' echo '访问地址:http://cssc.datalibstar.com' echo '管理员:admin / Admin123!' echo '' " # 4. 清理本地临时文件 rm -f "$TEMP_TAR" echo "" echo "✅ 部署完成!"