#!/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" echo "========================================" echo " 城市手册项目部署到云服务器" echo "========================================" echo "" # 1. 在服务器上创建目录 echo "1. 准备服务器目录..." sshpass -p "$SERVER_PASS" ssh -o StrictHostKeyChecking=no "$SERVER_USER@$SERVER_HOST" " if [ -d '$SERVER_DIR' ]; then echo '备份旧版本...' mv $SERVER_DIR ${SERVER_DIR}.backup.\$(date +%Y%m%d_%H%M%S) fi mkdir -p $SERVER_DIR " # 2. 使用 rsync 同步代码 echo "2. 同步代码到服务器..." rsync -avz --delete \ --exclude '.git' \ --exclude 'node_modules' \ --exclude 'backend/venv' \ --exclude '__pycache__' \ --exclude '*.pyc' \ --exclude '.env' \ --exclude 'db.sqlite3' \ --exclude 'media' \ --exclude 'staticfiles' \ --exclude '.docker' \ "$LOCAL_DIR/" \ "sshpass -p '$SERVER_PASS' rsync --rsh=ssh -avz $SERVER_USER@$SERVER_HOST:$SERVER_DIR/" echo "✓ 代码同步完成" # 3. 在服务器上执行部署 echo "3. 在服务器上执行部署..." sshpass -p "$SERVER_PASS" ssh -o StrictHostKeyChecking=no "$SERVER_USER@$SERVER_HOST" " 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 echo '' echo '========================================' echo ' 部署完成!' echo '========================================' echo '' echo '访问地址:http://cssc.datalibstar.com' echo '管理员:admin / Admin123!' echo '' " echo "" echo "✅ 部署完成!"