fix(deploy): 调整 xboard 更新脚本执行流程

更新脚本改为先拉取镜像,再通过一次性 web 容器执行
xboard:update,最后重新启动服务

移除 --migrate 参数并补充非交互终端下的执行说明,
同时更新 README、部署模块文档并新增测试 compose 配置
This commit is contained in:
yinjianm
2026-04-28 13:41:04 +08:00
parent a4e78b864a
commit c24a1495ff
5 changed files with 97 additions and 17 deletions
+5 -3
View File
@@ -59,16 +59,18 @@ docker compose exec -T web php artisan xboard:update
docker compose up -d
```
更新镜像但不自动迁移数据库
更新镜像并执行项目更新流程
```sh
sh ./scripts/update.sh
```
更新镜像并显式执行数据库迁移
该脚本在交互终端中的等价命令
```sh
sh ./scripts/update.sh --migrate
docker compose pull
docker compose run -it --rm web php artisan xboard:update
docker compose up -d
```
查看服务状态:
+71
View File
@@ -0,0 +1,71 @@
services:
web:
image: ${XBOARD_IMAGE:-ghcr.io/micah123321/xboard:new}
restart: on-failure
depends_on:
- redis
command: php artisan octane:start --host=0.0.0.0 --port=7001
environment:
docker: "true"
ports:
- "${WEB_PORT:-7001}:7001"
volumes: &xboard-volumes
- redis-data:/data
- ./.env:/www/.env
- ./.docker/.data/:/www/.docker/.data
- ./storage/logs:/www/storage/logs
- ./storage/theme:/www/storage/theme
- ./plugins:/www/plugins
horizon:
image: ${XBOARD_IMAGE:-ghcr.io/micah123321/xboard:new}
restart: on-failure
depends_on:
- redis
command: php artisan horizon
environment:
docker: "true"
volumes: *xboard-volumes
scheduler:
image: ${XBOARD_IMAGE:-ghcr.io/micah123321/xboard:new}
restart: unless-stopped
depends_on:
- redis
command: php artisan schedule:work
environment:
docker: "true"
volumes: *xboard-volumes
admin:
image: ${XBOARD_ADMIN_IMAGE:-ghcr.io/micah123321/xboard-admin-frontend:new}
restart: unless-stopped
depends_on:
- web
environment:
XBOARD_BACKEND_UPSTREAM: ${XBOARD_BACKEND_UPSTREAM:-http://web:7001}
XBOARD_UPLOAD_UPSTREAM: ${XBOARD_UPLOAD_UPSTREAM:-https://pic.535888.xyz}
ports:
- "${ADMIN_PORT:-7002}:80"
ws-server:
image: ${XBOARD_IMAGE:-ghcr.io/micah123321/xboard:new}
restart: on-failure
depends_on:
- redis
command: php artisan ws-server start
environment:
docker: "true"
ports:
- "${WS_PORT:-8076}:8076"
volumes: *xboard-volumes
redis:
image: ${REDIS_IMAGE:-redis:8-alpine}
restart: unless-stopped
command: redis-server --unixsocket /data/redis.sock --unixsocketperm 777 --save 900 1 --save 300 10 --save 60 10000
volumes:
- redis-data:/data
volumes:
redis-data:
+13 -13
View File
@@ -3,21 +3,16 @@ set -eu
cd "$(dirname "$0")/.."
run_migrate=false
for arg in "$@"; do
case "$arg" in
--migrate)
run_migrate=true
;;
-h|--help)
echo "Usage: sh ./scripts/update.sh [--migrate]"
echo " --migrate Run 'php artisan migrate --force' after containers are updated."
echo "Usage: sh ./scripts/update.sh"
echo "Runs: docker compose pull && docker compose run -it --rm web php artisan xboard:update && docker compose up -d"
exit 0
;;
*)
echo "Unknown option: $arg"
echo "Usage: sh ./scripts/update.sh [--migrate]"
echo "Usage: sh ./scripts/update.sh"
exit 1
;;
esac
@@ -34,12 +29,17 @@ if ! docker compose version >/dev/null 2>&1; then
fi
docker compose pull
docker compose up -d
if [ "$run_migrate" = "true" ]; then
docker compose exec -T web php artisan migrate --force
else
echo "Migration skipped. Re-run with --migrate when the release requires database migrations."
run_tty_args="-it"
if [ ! -t 0 ] || [ ! -t 1 ]; then
run_tty_args=""
fi
if [ -n "$run_tty_args" ]; then
docker compose run -it --rm web php artisan xboard:update
else
docker compose run --rm web php artisan xboard:update
fi
docker compose up -d
docker compose ps