mirror of
https://github.com/truewhile/MeBox.git
synced 2026-09-28 03:06:38 +08:00
docs: add docker image cleanup update helper
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
.PHONY: all build build-server build-web dev dev-web run deploy docker docker-stop docker-push clean install-web tidy test vet smoke
|
||||
.PHONY: all build build-server build-web dev dev-web run deploy docker docker-update docker-stop docker-push clean install-web tidy test vet smoke
|
||||
|
||||
# ---- 默认目标 ----
|
||||
all: build
|
||||
@@ -33,6 +33,9 @@ deploy:
|
||||
docker:
|
||||
docker compose up -d
|
||||
|
||||
docker-update:
|
||||
./scripts/docker-compose-update.sh
|
||||
|
||||
docker-stop:
|
||||
docker compose down
|
||||
|
||||
|
||||
@@ -231,7 +231,7 @@ mkdir -p data cache media downloads
|
||||
```bash
|
||||
cat > .env <<'EOF'
|
||||
# 固定版本;需要升级时改成新的 MediaStationGo-vX.Y.Z 后执行 docker compose pull && docker compose up -d
|
||||
MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.10
|
||||
MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.11
|
||||
MEDIASTATION_HTTP_PORT=18080
|
||||
|
||||
# 程序数据和缓存建议放在 MediaStationGo 部署目录下,便于备份和迁移。
|
||||
@@ -300,7 +300,7 @@ vim docker-compose.yml
|
||||
#
|
||||
# 镜像版本:
|
||||
# 默认拉取 latest;如需固定版本,创建 .env 并写入:
|
||||
# MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.10
|
||||
# MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.11
|
||||
#
|
||||
# 路径映射总览:
|
||||
# /data 程序数据目录。保存 SQLite 数据库、JWT secret、系统配置等,必须持久化。
|
||||
@@ -443,6 +443,14 @@ docker compose up -d
|
||||
# docker-compose up -d
|
||||
```
|
||||
|
||||
如果是升级已有部署,建议使用仓库提供的更新脚本。它会先拉取并重建容器,再只清理 `ghcr.io/shukebta/mediastation-go` 的旧镜像和 dangling 层,避免 NAS 磁盘被历史镜像占满:
|
||||
|
||||
```bash
|
||||
curl -fsSL https://cdn.jsdelivr.net/gh/ShukeBta/MediaStationGo@main/scripts/docker-compose-update.sh -o docker-compose-update.sh
|
||||
chmod +x docker-compose-update.sh
|
||||
./docker-compose-update.sh
|
||||
```
|
||||
|
||||
7. 查看状态与日志:
|
||||
|
||||
```bash
|
||||
@@ -481,13 +489,19 @@ docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
后续升级建议在部署目录执行:
|
||||
|
||||
```bash
|
||||
./docker-compose-update.sh
|
||||
```
|
||||
|
||||
### 固定版本部署
|
||||
|
||||
建议生产环境固定版本,避免 `latest` 自动变化。NAS 直读推荐 `.env`:
|
||||
|
||||
```bash
|
||||
cat > .env <<'EOF'
|
||||
MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.10
|
||||
MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.11
|
||||
MEDIASTATION_HTTP_PORT=18080
|
||||
MEDIASTATION_DATA_DIR=./data
|
||||
MEDIASTATION_CACHE_DIR=./cache
|
||||
@@ -692,10 +706,13 @@ docker logs -f mediastation-go
|
||||
更新镜像:
|
||||
|
||||
```bash
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
curl -fsSL https://cdn.jsdelivr.net/gh/ShukeBta/MediaStationGo@main/scripts/docker-compose-update.sh -o docker-compose-update.sh
|
||||
chmod +x docker-compose-update.sh
|
||||
./docker-compose-update.sh
|
||||
```
|
||||
|
||||
说明:普通 `docker compose pull && docker compose up -d` 只会切换到新镜像,不会自动删除旧镜像;上面的脚本会保留当前正在运行的 MediaStationGo 镜像,删除同仓库未使用的旧镜像,并执行 `docker image prune -f` 清理 dangling 层。如需进一步清理所有未使用镜像,可临时执行 `PRUNE_ALL_UNUSED=1 ./docker-compose-update.sh`。
|
||||
|
||||
停止服务:
|
||||
|
||||
```bash
|
||||
@@ -747,26 +764,26 @@ cd MediaStationGo
|
||||
|
||||
| 平台 | 包名示例 |
|
||||
| --- | --- |
|
||||
| Linux x86_64 | `MediaStationGo-v0.0.10-linux-amd64.tar.gz` |
|
||||
| Linux ARM64 | `MediaStationGo-v0.0.10-linux-arm64.tar.gz` |
|
||||
| Windows x86_64 | `MediaStationGo-v0.0.10-windows-amd64.zip` |
|
||||
| macOS Intel | `MediaStationGo-v0.0.10-darwin-amd64.tar.gz` |
|
||||
| macOS Apple Silicon | `MediaStationGo-v0.0.10-darwin-arm64.tar.gz` |
|
||||
| Linux x86_64 | `MediaStationGo-v0.0.11-linux-amd64.tar.gz` |
|
||||
| Linux ARM64 | `MediaStationGo-v0.0.11-linux-arm64.tar.gz` |
|
||||
| Windows x86_64 | `MediaStationGo-v0.0.11-windows-amd64.zip` |
|
||||
| macOS Intel | `MediaStationGo-v0.0.11-darwin-amd64.tar.gz` |
|
||||
| macOS Apple Silicon | `MediaStationGo-v0.0.11-darwin-arm64.tar.gz` |
|
||||
|
||||
部署步骤:
|
||||
|
||||
```bash
|
||||
# Linux 示例
|
||||
tar -xzf MediaStationGo-v0.0.10-linux-amd64.tar.gz
|
||||
cd MediaStationGo-v0.0.10-linux-amd64
|
||||
tar -xzf MediaStationGo-v0.0.11-linux-amd64.tar.gz
|
||||
cd MediaStationGo-v0.0.11-linux-amd64
|
||||
MEDIASTATION_APP_PORT=18080 ./mediastation-go
|
||||
```
|
||||
|
||||
Windows:
|
||||
|
||||
```powershell
|
||||
Expand-Archive .\MediaStationGo-v0.0.10-windows-amd64.zip
|
||||
cd .\MediaStationGo-v0.0.10-windows-amd64
|
||||
Expand-Archive .\MediaStationGo-v0.0.11-windows-amd64.zip
|
||||
cd .\MediaStationGo-v0.0.11-windows-amd64
|
||||
$env:MEDIASTATION_APP_PORT = "18080"
|
||||
.\mediastation-go.exe
|
||||
```
|
||||
|
||||
+30
-13
@@ -228,7 +228,7 @@ mkdir -p data cache media downloads
|
||||
|
||||
```bash
|
||||
cat > .env <<'EOF'
|
||||
MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.10
|
||||
MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.11
|
||||
MEDIASTATION_HTTP_PORT=18080
|
||||
MEDIASTATION_DATA_DIR=./data
|
||||
MEDIASTATION_CACHE_DIR=./cache
|
||||
@@ -279,6 +279,14 @@ docker compose up -d
|
||||
# docker-compose up -d
|
||||
```
|
||||
|
||||
For existing deployments, use the update helper. It pulls and recreates the service, then removes old unused `ghcr.io/shukebta/mediastation-go` images and dangling layers so NAS disks do not fill up with historical images:
|
||||
|
||||
```bash
|
||||
curl -fsSL https://cdn.jsdelivr.net/gh/ShukeBta/MediaStationGo@main/scripts/docker-compose-update.sh -o docker-compose-update.sh
|
||||
chmod +x docker-compose-update.sh
|
||||
./docker-compose-update.sh
|
||||
```
|
||||
|
||||
7. Check status and logs:
|
||||
|
||||
```bash
|
||||
@@ -317,13 +325,19 @@ docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
For later upgrades, run this from the deployment directory:
|
||||
|
||||
```bash
|
||||
./docker-compose-update.sh
|
||||
```
|
||||
|
||||
### Pin a Release Version
|
||||
|
||||
For production, pin a specific release tag instead of using `latest`. Recommended NAS `.env`:
|
||||
|
||||
```bash
|
||||
cat > .env <<'EOF'
|
||||
MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.10
|
||||
MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.11
|
||||
MEDIASTATION_HTTP_PORT=18080
|
||||
MEDIASTATION_DATA_DIR=./data
|
||||
MEDIASTATION_CACHE_DIR=./cache
|
||||
@@ -514,10 +528,13 @@ docker logs -f mediastation-go
|
||||
Update:
|
||||
|
||||
```bash
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
curl -fsSL https://cdn.jsdelivr.net/gh/ShukeBta/MediaStationGo@main/scripts/docker-compose-update.sh -o docker-compose-update.sh
|
||||
chmod +x docker-compose-update.sh
|
||||
./docker-compose-update.sh
|
||||
```
|
||||
|
||||
Note: plain `docker compose pull && docker compose up -d` switches to the new image but does not remove old images. The helper keeps the currently running MediaStationGo image, removes unused older images from the same repository, and runs `docker image prune -f` for dangling layers. To aggressively remove all unused images, run `PRUNE_ALL_UNUSED=1 ./docker-compose-update.sh`.
|
||||
|
||||
Stop:
|
||||
|
||||
```bash
|
||||
@@ -569,25 +586,25 @@ Each release provides multi-platform archives:
|
||||
|
||||
| Platform | Package example |
|
||||
| --- | --- |
|
||||
| Linux x86_64 | `MediaStationGo-v0.0.10-linux-amd64.tar.gz` |
|
||||
| Linux ARM64 | `MediaStationGo-v0.0.10-linux-arm64.tar.gz` |
|
||||
| Windows x86_64 | `MediaStationGo-v0.0.10-windows-amd64.zip` |
|
||||
| macOS Intel | `MediaStationGo-v0.0.10-darwin-amd64.tar.gz` |
|
||||
| macOS Apple Silicon | `MediaStationGo-v0.0.10-darwin-arm64.tar.gz` |
|
||||
| Linux x86_64 | `MediaStationGo-v0.0.11-linux-amd64.tar.gz` |
|
||||
| Linux ARM64 | `MediaStationGo-v0.0.11-linux-arm64.tar.gz` |
|
||||
| Windows x86_64 | `MediaStationGo-v0.0.11-windows-amd64.zip` |
|
||||
| macOS Intel | `MediaStationGo-v0.0.11-darwin-amd64.tar.gz` |
|
||||
| macOS Apple Silicon | `MediaStationGo-v0.0.11-darwin-arm64.tar.gz` |
|
||||
|
||||
Linux example:
|
||||
|
||||
```bash
|
||||
tar -xzf MediaStationGo-v0.0.10-linux-amd64.tar.gz
|
||||
cd MediaStationGo-v0.0.10-linux-amd64
|
||||
tar -xzf MediaStationGo-v0.0.11-linux-amd64.tar.gz
|
||||
cd MediaStationGo-v0.0.11-linux-amd64
|
||||
MEDIASTATION_APP_PORT=18080 ./mediastation-go
|
||||
```
|
||||
|
||||
Windows example:
|
||||
|
||||
```powershell
|
||||
Expand-Archive .\MediaStationGo-v0.0.10-windows-amd64.zip
|
||||
cd .\MediaStationGo-v0.0.10-windows-amd64
|
||||
Expand-Archive .\MediaStationGo-v0.0.11-windows-amd64.zip
|
||||
cd .\MediaStationGo-v0.0.11-windows-amd64
|
||||
$env:MEDIASTATION_APP_PORT = "18080"
|
||||
.\mediastation-go.exe
|
||||
```
|
||||
|
||||
+7
-2
@@ -6,13 +6,18 @@
|
||||
# 3. docker compose up -d
|
||||
# 4. 浏览器打开 http://<服务器IP>:18080
|
||||
#
|
||||
# 推荐更新命令(会清理本项目旧镜像,避免 NAS 磁盘堆满):
|
||||
# curl -fsSL https://cdn.jsdelivr.net/gh/ShukeBta/MediaStationGo@main/scripts/docker-compose-update.sh -o docker-compose-update.sh
|
||||
# chmod +x docker-compose-update.sh
|
||||
# ./docker-compose-update.sh
|
||||
#
|
||||
# 默认账号:
|
||||
# admin / admin123
|
||||
# 首次部署后请立即到「个人资料/用户管理」修改密码。
|
||||
#
|
||||
# 镜像版本:
|
||||
# 默认拉取 latest;如需固定版本,创建 .env 并写入:
|
||||
# MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.10
|
||||
# MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.11
|
||||
#
|
||||
# 路径映射总览:
|
||||
# /data 程序数据目录。保存 SQLite 数据库、JWT secret、系统配置等,必须持久化。
|
||||
@@ -54,7 +59,7 @@ services:
|
||||
mediastation-go:
|
||||
image: ghcr.io/shukebta/mediastation-go:${MEDIASTATION_IMAGE_TAG:-latest}
|
||||
# 默认只在本地没有镜像时拉取,避免每次重启都访问 GHCR。
|
||||
# 需要升级时手动执行:docker compose pull && docker compose up -d
|
||||
# 需要升级时建议执行 ./docker-compose-update.sh,更新后会清理本项目旧镜像。
|
||||
pull_policy: missing
|
||||
container_name: mediastation-go
|
||||
restart: unless-stopped
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
IMAGE="${MEDIASTATION_IMAGE:-ghcr.io/shukebta/mediastation-go}"
|
||||
SERVICE="${MEDIASTATION_SERVICE:-mediastation-go}"
|
||||
CONTAINER="${MEDIASTATION_CONTAINER:-mediastation-go}"
|
||||
PRUNE_DANGLING="${PRUNE_DANGLING:-1}"
|
||||
PRUNE_ALL_UNUSED="${PRUNE_ALL_UNUSED:-0}"
|
||||
|
||||
if docker compose version >/dev/null 2>&1; then
|
||||
COMPOSE=(docker compose)
|
||||
elif command -v docker-compose >/dev/null 2>&1; then
|
||||
COMPOSE=(docker-compose)
|
||||
else
|
||||
echo "docker compose / docker-compose not found" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "==> Pulling latest configured image"
|
||||
"${COMPOSE[@]}" pull "$SERVICE"
|
||||
|
||||
echo "==> Recreating service"
|
||||
"${COMPOSE[@]}" up -d "$SERVICE"
|
||||
|
||||
running_image_id="$(docker inspect -f '{{.Image}}' "$CONTAINER" 2>/dev/null || true)"
|
||||
if [[ -z "$running_image_id" ]]; then
|
||||
echo "WARN: container '$CONTAINER' not found, skip project image cleanup" >&2
|
||||
else
|
||||
echo "==> Removing old unused $IMAGE images"
|
||||
while IFS= read -r image_id; do
|
||||
[[ -z "$image_id" || "$image_id" == "$running_image_id" ]] && continue
|
||||
docker rmi "$image_id" >/dev/null 2>&1 || true
|
||||
done < <(docker image ls "$IMAGE" --format '{{.ID}}' | sort -u)
|
||||
fi
|
||||
|
||||
if [[ "$PRUNE_DANGLING" == "1" ]]; then
|
||||
echo "==> Pruning dangling image layers"
|
||||
docker image prune -f >/dev/null
|
||||
fi
|
||||
|
||||
if [[ "$PRUNE_ALL_UNUSED" == "1" ]]; then
|
||||
echo "==> Pruning all unused images"
|
||||
docker image prune -a -f >/dev/null
|
||||
fi
|
||||
|
||||
echo "Done. Current image:"
|
||||
docker image ls "$IMAGE" --format ' {{.Repository}}:{{.Tag}} {{.ID}} {{.Size}}' | head -n 20
|
||||
Reference in New Issue
Block a user