Harden Docker deployment tiers

This commit is contained in:
ShukeBta
2026-06-15 21:00:52 +08:00
parent fea1b1dda1
commit 713fc6ec1e
6 changed files with 35 additions and 17 deletions
+4 -6
View File
@@ -153,7 +153,7 @@ environment:
```bash
docker compose pull
docker compose up -d
docker logs -f mediastation-go
docker compose logs -f mediastation-go
```
看到 `sqlite data migrated to postgres`,或确认网页里的用户、媒体库、设置都正常后,再处理旧 SQLite 文件。
@@ -278,7 +278,6 @@ services:
# Docker Hub 备用:
# image: shukbet/mediastationgo:latest
container_name: mediastation-go
restart: unless-stopped
init: true
depends_on:
@@ -330,7 +329,6 @@ services:
postgres:
image: postgres:16-alpine
container_name: mediastation-postgres
restart: unless-stopped
environment:
POSTGRES_DB: mediastation
@@ -339,7 +337,7 @@ services:
volumes:
- ./postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U mediastation -d mediastation"]
test: ["CMD-SHELL", "pg_isready -h 127.0.0.1 -U mediastation -d mediastation"]
interval: 10s
timeout: 5s
retries: 10
@@ -390,7 +388,7 @@ docker compose up -d
### 查看日志
```bash
docker logs -f mediastation-go
docker compose logs -f mediastation-go
```
### 备份
@@ -429,7 +427,7 @@ docker compose down
```bash
docker ps
docker logs --tail=100 mediastation-go
docker compose logs --tail=100 mediastation-go
```
确认浏览器访问的是:
+4 -6
View File
@@ -153,7 +153,7 @@ Recommended SQLite to PostgreSQL upgrade flow:
```bash
docker compose pull
docker compose up -d
docker logs -f mediastation-go
docker compose logs -f mediastation-go
```
After you see `sqlite data migrated to postgres`, or after the web UI shows your users, libraries, and settings correctly, you can stop using the old SQLite file as a migration source.
@@ -278,7 +278,6 @@ services:
# Docker Hub backup:
# image: shukbet/mediastationgo:latest
container_name: mediastation-go
restart: unless-stopped
init: true
depends_on:
@@ -331,7 +330,6 @@ services:
postgres:
image: postgres:16-alpine
container_name: mediastation-postgres
restart: unless-stopped
environment:
POSTGRES_DB: mediastation
@@ -340,7 +338,7 @@ services:
volumes:
- ./postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U mediastation -d mediastation"]
test: ["CMD-SHELL", "pg_isready -h 127.0.0.1 -U mediastation -d mediastation"]
interval: 10s
timeout: 5s
retries: 10
@@ -391,7 +389,7 @@ docker compose up -d
### Logs
```bash
docker logs -f mediastation-go
docker compose logs -f mediastation-go
```
### Backup
@@ -430,7 +428,7 @@ Check the container:
```bash
docker ps
docker logs --tail=100 mediastation-go
docker compose logs --tail=100 mediastation-go
```
Then open:
+26
View File
@@ -12,6 +12,7 @@ package main
import (
"context"
"database/sql"
"errors"
"fmt"
"net"
@@ -69,6 +70,9 @@ func main() {
if err != nil {
logger.Fatal("database open failed", zap.Error(err))
}
if err := waitForDatabase(db, logger); err != nil {
logger.Fatal("database not ready", zap.Error(err))
}
if err := database.AutoMigrate(db); err != nil {
logger.Fatal("auto-migrate failed", zap.Error(err))
}
@@ -144,6 +148,28 @@ func applyCPUThreadLimit(cfg *config.Config, logger *zap.Logger) {
}
}
func waitForDatabase(db interface{ DB() (*sql.DB, error) }, logger *zap.Logger) error {
sqlDB, err := db.DB()
if err != nil {
return err
}
var lastErr error
for attempt := 1; attempt <= 30; attempt++ {
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
err = sqlDB.PingContext(ctx)
cancel()
if err == nil {
return nil
}
lastErr = err
if logger != nil {
logger.Warn("database not ready; retrying", zap.Int("attempt", attempt), zap.Error(err))
}
time.Sleep(time.Duration(attempt) * 500 * time.Millisecond)
}
return lastErr
}
func buildRouter(cfg *config.Config, logger *zap.Logger, svc *service.Container) *gin.Engine {
if !cfg.App.Debug {
gin.SetMode(gin.ReleaseMode)
-1
View File
@@ -22,7 +22,6 @@ services:
opensearch:
image: opensearchproject/opensearch:2
container_name: mediastation-opensearch
restart: unless-stopped
environment:
discovery.type: single-node
-1
View File
@@ -17,7 +17,6 @@ services:
redis:
image: redis:7-alpine
container_name: mediastation-redis
restart: unless-stopped
command:
- redis-server
+1 -3
View File
@@ -22,7 +22,6 @@ services:
# 方式二:Docker Hub 备用(GHCR 拉取慢或不可用时使用)
# image: shukbet/mediastationgo:latest
container_name: mediastation-go
restart: unless-stopped
init: true
depends_on:
@@ -122,7 +121,6 @@ services:
postgres:
image: postgres:16-alpine
container_name: mediastation-postgres
restart: unless-stopped
environment:
POSTGRES_DB: mediastation
@@ -133,7 +131,7 @@ services:
# PostgreSQL 主数据目录。升级/重建容器时必须保留。
- ./postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U mediastation -d mediastation"]
test: ["CMD-SHELL", "pg_isready -h 127.0.0.1 -U mediastation -d mediastation"]
interval: 10s
timeout: 5s
retries: 10