Files
chengshishouce/deploy_final.sh

132 lines
3.5 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# 最终部署脚本 - 使用 docker compose
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 (使用 docker compose 而不是 docker-compose)
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 "✅ 部署完成!"