|
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
|
|
# 部署脚本 - 微信小程序后端服务
|
|
|
|
|
|
|
|
|
|
echo "开始部署微信小程序后端服务..."
|
|
|
|
|
|
|
|
|
|
# 检查是否安装了Docker
|
|
|
|
|
echo "检查Docker是否安装..."
|
|
|
|
|
if ! command -v docker &> /dev/null; then
|
|
|
|
|
echo "错误: Docker未安装,请先安装Docker"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# 检查并更新Docker Compose和Buildx
|
|
|
|
|
echo "检查并更新Docker工具..."
|
|
|
|
|
|
|
|
|
|
# 检查是否安装了Docker Compose
|
|
|
|
|
if ! command -v docker-compose &> /dev/null && ! docker compose version &> /dev/null; then
|
|
|
|
|
echo "Docker Compose未安装,正在安装..."
|
|
|
|
|
# 使用Daocloud镜像加速安装
|
|
|
|
|
curl -L "https://get.daocloud.io/docker/compose/releases/download/latest/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
|
|
|
|
chmod +x /usr/local/bin/docker-compose
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# 更新Docker Buildx到最新版本
|
|
|
|
|
echo "更新Docker Buildx..."
|
|
|
|
|
# 卸载旧版本
|
|
|
|
|
docker buildx uninstall 2>/dev/null || true
|
|
|
|
|
# 安装最新版本
|
|
|
|
|
docker buildx install
|
|
|
|
|
# 创建并使用默认构建器
|
|
|
|
|
docker buildx create --name mybuilder --use 2>/dev/null || true
|
|
|
|
|
# 重启Docker服务以应用更改
|
|
|
|
|
systemctl restart docker 2>/dev/null || true
|
|
|
|
|
|
|
|
|
|
echo "Docker工具检查完成"
|
|
|
|
|
|
|
|
|
|
# 创建项目目录
|
|
|
|
|
echo "创建项目目录..."
|
|
|
|
|
mkdir -p /opt/project_app/logs /opt/project_app/uploads /opt/project_app/mysql-data
|
|
|
|
|
|
|
|
|
|
# 处理代码仓库或更新代码
|
|
|
|
|
echo "处理代码仓库..."
|
|
|
|
|
if [ ! -d /opt/project_app/.git ]; then
|
|
|
|
|
# 如果目录不存在.git文件夹,检查目录是否为空
|
|
|
|
|
if [ "$(ls -A /opt/project_app)" ]; then
|
|
|
|
|
# 目录不为空,创建临时目录克隆后复制文件
|
|
|
|
|
echo "目标目录已存在且不为空,使用临时目录克隆代码..."
|
|
|
|
|
git clone http://8.137.125.67:4000/Swt29/Project_app.git /tmp/project_app_temp
|
|
|
|
|
# 复制.git文件夹和所有文件
|
|
|
|
|
cp -r /tmp/project_app_temp/. /opt/project_app/
|
|
|
|
|
# 清理临时目录
|
|
|
|
|
rm -rf /tmp/project_app_temp
|
|
|
|
|
else
|
|
|
|
|
# 目录为空,直接克隆仓库
|
|
|
|
|
git clone http://8.137.125.67:4000/Swt29/Project_app.git /opt/project_app
|
|
|
|
|
fi
|
|
|
|
|
cd /opt/project_app
|
|
|
|
|
else
|
|
|
|
|
# 如果目录已存在.git文件夹,则更新代码
|
|
|
|
|
cd /opt/project_app
|
|
|
|
|
# 使用fast-forward方式更新,避免分支冲突
|
|
|
|
|
git fetch origin BOSS
|
|
|
|
|
git merge --ff-only FETCH_HEAD || {
|
|
|
|
|
echo "分支冲突,重置本地分支到远程最新版本..."
|
|
|
|
|
git reset --hard origin/BOSS
|
|
|
|
|
}
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# 确保有必要的配置文件
|
|
|
|
|
echo "确保配置文件存在..."
|
|
|
|
|
git fetch origin BOSS
|
|
|
|
|
git checkout origin/BOSS -- docker-compose.yml Dockerfile 2>/dev/null || true
|
|
|
|
|
|
|
|
|
|
# 检查.env文件是否存在
|
|
|
|
|
echo "检查环境变量配置..."
|
|
|
|
|
if [ ! -f .env ]; then
|
|
|
|
|
echo "警告: .env文件不存在,请手动配置环境变量"
|
|
|
|
|
echo "可以参考.env.example文件创建.env文件"
|
|
|
|
|
else
|
|
|
|
|
echo ".env文件已存在,跳过配置步骤"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# 构建Docker镜像
|
|
|
|
|
echo "构建Docker镜像..."
|
|
|
|
|
docker-compose build
|
|
|
|
|
|
|
|
|
|
# 启动服务
|
|
|
|
|
echo "启动服务..."
|
|
|
|
|
docker-compose up -d
|
|
|
|
|
|
|
|
|
|
echo "部署完成!服务已启动并在后台运行。"
|
|
|
|
|
echo "使用以下命令查看服务状态:docker-compose ps"
|
|
|
|
|
echo "使用以下命令查看日志:docker-compose logs -f"
|