#!/bin/bash # 使用后端本地调用api方式部署 # 加载配置 if [ -f "./deploy.config.sh" ]; then source ./deploy.config.sh else echo "配置文件 deploy.config.sh 不存在" exit 1 fi echo "开始远程部署 - $(date)" echo "开始部署您的项目..." # 1. 克隆项目代码 # echo "1. 克隆项目代码..." # git clone https://git.zhouxhere.com/wonderzhao/cola-web.git # 2. 进入项目目录 # echo "2. 进入项目目录..." # cd cola-web # 3. 安装依赖 # echo "3. 安装依赖..." # npm install # 4. 构建项目 echo "4. 构建项目..." npm run build # 5. 构建 Docker 镜像 echo "5. 构建 Docker 镜像..." docker build -t ${DOCKER_IMAGE_NAME} . # 6. 保存镜像为 tar 文件 echo "6. 保存 Docker 镜像..." docker save ${DOCKER_IMAGE_NAME} > ${DOCKER_IMAGE_NAME}.tar # 7. 创建 nginx 配置文件 echo "7. 创建 nginx 配置文件..." cat > nginx.conf << 'NGINX_EOF' server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; try_files $uri $uri/ /index.html; } location /api { proxy_pass http://192.168.1.199:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } NGINX_EOF # 8. 传输文件到服务器 echo "8. 传输文件到服务器..." scp -v -P ${REMOTE_PORT} ${DOCKER_IMAGE_NAME}.tar ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}/ scp -v -P ${REMOTE_PORT} nginx.conf ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}/ # 9. 在远程服务器上执行部署 echo "9. 在远程服务器上执行部署..." ssh -p ${REMOTE_PORT} ${REMOTE_USER}@${REMOTE_HOST} << EOF set -e # 遇到错误立即退出 echo "===== 开始执行远程部署 =====" cd ${REMOTE_PATH} docker load < ${DOCKER_IMAGE_NAME}.tar docker stop ${DOCKER_CONTAINER_NAME} 2>/dev/null || true docker rm ${DOCKER_CONTAINER_NAME} 2>/dev/null || true docker run -d \\ --name ${DOCKER_CONTAINER_NAME} \\ -p ${APP_PORT}:80 \\ -v ${REMOTE_PATH}/nginx.conf:/etc/nginx/conf.d/default.conf \\ --restart unless-stopped \\ ${DOCKER_IMAGE_NAME} EOF echo "部署完成!" # 清理本地临时文件 rm -f nginx.conf rm -f ${DOCKER_IMAGE_NAME}.tar # 10. 检查部署状态 # echo "10. 检查部署状态..." # ssh owner@192.168.1.199 "docker ps | grep cola-web" # 在另一个终端窗口查看日志 # tail -f deploy.log