#!/bin/bash set -e # 进入脚本所在目录(确保和 docker-compose.yml 在同一目录) cd "$(dirname "$0")" echo "=======================================================" echo "开始在服务器上拉取镜像并一键部署" echo "=======================================================" echo ">> 正在从阿里云镜像库拉取最新的 server、web 和 libreoffice 镜像..." # 如果拉取需要密码,请确保服务器上已经执行过 docker login if ! docker pull registry.cn-qingdao.aliyuncs.com/fzxs/aurak-server:latest; then echo "拉取 server 镜像失败!请确保服务器已登录 registry.cn-qingdao.aliyuncs.com" exit 1 fi if ! docker pull registry.cn-qingdao.aliyuncs.com/fzxs/aurak-web:latest; then echo "拉取 web 镜像失败!请确保服务器已登录 registry.cn-qingdao.aliyuncs.com" exit 1 fi if ! docker pull registry.cn-qingdao.aliyuncs.com/fzxs/aurak-libreoffice:latest; then echo "拉取 libreoffice 镜像失败!请确保服务器已登录 registry.cn-qingdao.aliyuncs.com" exit 1 fi echo ">> 为了让 docker-compose 能直接使用拉取的镜像,重新标记(Tag)镜像..." docker tag registry.cn-qingdao.aliyuncs.com/fzxs/aurak-server:latest aurak-server:latest 2>/dev/null || true docker tag registry.cn-qingdao.aliyuncs.com/fzxs/aurak-web:latest aurak-web:latest 2>/dev/null || true docker tag registry.cn-qingdao.aliyuncs.com/fzxs/aurak-libreoffice:latest aurak-libreoffice:latest 2>/dev/null || true # 因为 docker-compose 没有指定 image,会默认通过文件夹名字或我们指定的标签运行 # 如果 docker-compose 仍然会去找默认名字,我们需要让环境变量里的 image 为我们拉取的, # 不过最简单的方式是,通过环境变量临时覆盖,或者使用 docker compose up 的特性 # 但既然不能改 docker-compose.yml,我们可以通过 IMAGE_NAME 环境变量来覆盖吗?没有设定的话不行。 # 所以我们可以通过 docker tag 来把阿里云的镜像打成 docker-compose.yml 默认预期的服务名字 # 如果目录叫 AuraK,docker-compose 默认生成的镜像名叫 aurak-server 和 aurak-web docker tag registry.cn-qingdao.aliyuncs.com/fzxs/aurak-server:latest aurak-server 2>/dev/null || true docker tag registry.cn-qingdao.aliyuncs.com/fzxs/aurak-web:latest aurak-web 2>/dev/null || true docker tag registry.cn-qingdao.aliyuncs.com/fzxs/aurak-libreoffice:latest aurak-libreoffice 2>/dev/null || true echo ">> 正在重新创建并启动容器..." # --no-build 确保在服务器上不会意外使用本地代码触发构建 docker compose up -d --no-build server web libreoffice echo "=======================================================" echo "部署完成!当前服务运行状态:" docker compose ps echo "======================================================="