mirror of
https://github.com/truewhile/MeBox.git
synced 2026-09-28 03:06:38 +08:00
Update deployment docs and media library UI
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
param(
|
||||
[int]$Port = 18080,
|
||||
[string]$HostAddress = "0.0.0.0",
|
||||
[string]$DataDir = "",
|
||||
[string]$CacheDir = "",
|
||||
[switch]$SkipBuild,
|
||||
[switch]$Foreground
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
$Root = Resolve-Path (Join-Path $PSScriptRoot "..")
|
||||
if (-not $DataDir) { $DataDir = Join-Path $Root "data" }
|
||||
if (-not $CacheDir) { $CacheDir = Join-Path $Root "cache" }
|
||||
$WebDir = Join-Path $Root "web\dist"
|
||||
$BinDir = Join-Path $Root "bin"
|
||||
$Exe = Join-Path $BinDir "mediastation-go.exe"
|
||||
$PidFile = Join-Path $Root ".mediastation.pid"
|
||||
$LogDir = Join-Path $Root "logs"
|
||||
$OutLog = Join-Path $LogDir "mediastation.out.log"
|
||||
$ErrLog = Join-Path $LogDir "mediastation.err.log"
|
||||
|
||||
New-Item -ItemType Directory -Force -Path $DataDir, $CacheDir, $BinDir, $LogDir | Out-Null
|
||||
|
||||
if (-not $SkipBuild) {
|
||||
Write-Host "[1/3] Building frontend"
|
||||
Push-Location (Join-Path $Root "web")
|
||||
npm ci
|
||||
npm run build
|
||||
Pop-Location
|
||||
|
||||
Write-Host "[2/3] Building server"
|
||||
Push-Location $Root
|
||||
$env:CGO_ENABLED = "0"
|
||||
go build -trimpath -ldflags="-s -w" -o $Exe ./cmd/server
|
||||
Pop-Location
|
||||
} else {
|
||||
Write-Host "[1/3] Build skipped"
|
||||
}
|
||||
|
||||
if (Test-Path $PidFile) {
|
||||
$oldPid = 0
|
||||
$pidText = Get-Content $PidFile -Raw
|
||||
if ([int]::TryParse($pidText.Trim(), [ref]$oldPid)) {
|
||||
$oldProc = Get-Process -Id $oldPid -ErrorAction SilentlyContinue
|
||||
if ($oldProc) {
|
||||
Write-Host "[3/3] Stopping old process $oldPid"
|
||||
Stop-Process -Id $oldPid -Force
|
||||
Start-Sleep -Seconds 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$env:MEDIASTATION_APP_HOST = $HostAddress
|
||||
$env:MEDIASTATION_APP_PORT = "$Port"
|
||||
$env:MEDIASTATION_APP_DATA_DIR = $DataDir
|
||||
$env:MEDIASTATION_APP_WEB_DIR = $WebDir
|
||||
$env:MEDIASTATION_DATABASE_DB_PATH = (Join-Path $DataDir "mediastation.db")
|
||||
$env:MEDIASTATION_CACHE_CACHE_DIR = $CacheDir
|
||||
|
||||
Write-Host "[3/3] Starting MediaStationGo on http://$HostAddress`:$Port"
|
||||
if ($Foreground) {
|
||||
& $Exe
|
||||
} else {
|
||||
$proc = Start-Process -FilePath $Exe `
|
||||
-WorkingDirectory $Root `
|
||||
-WindowStyle Hidden `
|
||||
-RedirectStandardOutput $OutLog `
|
||||
-RedirectStandardError $ErrLog `
|
||||
-PassThru
|
||||
$proc.Id | Set-Content $PidFile
|
||||
Start-Sleep -Seconds 2
|
||||
Invoke-WebRequest -UseBasicParsing -Uri "http://127.0.0.1:$Port/api/health" -TimeoutSec 10 | Out-Null
|
||||
Write-Host "Started. PID=$($proc.Id), logs=$OutLog / $ErrLog"
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
PORT="${PORT:-18080}"
|
||||
HOST="${HOST:-0.0.0.0}"
|
||||
DATA_DIR="${DATA_DIR:-$ROOT_DIR/data}"
|
||||
CACHE_DIR="${CACHE_DIR:-$ROOT_DIR/cache}"
|
||||
WEB_DIR="${WEB_DIR:-$ROOT_DIR/web/dist}"
|
||||
BIN_DIR="${BIN_DIR:-$ROOT_DIR/bin}"
|
||||
BIN_PATH="${BIN_PATH:-$BIN_DIR/mediastation-go}"
|
||||
PID_FILE="${PID_FILE:-$ROOT_DIR/.mediastation.pid}"
|
||||
LOG_FILE="${LOG_FILE:-$ROOT_DIR/logs/mediastation.log}"
|
||||
SKIP_BUILD="${SKIP_BUILD:-0}"
|
||||
DETACH="${DETACH:-1}"
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
MediaStationGo one-click deploy
|
||||
|
||||
Usage:
|
||||
PORT=18080 DATA_DIR=/opt/mediastation/data ./scripts/deploy.sh
|
||||
|
||||
Environment:
|
||||
PORT HTTP port, default 18080
|
||||
HOST Listen host, default 0.0.0.0
|
||||
DATA_DIR Persistent data directory, default ./data
|
||||
CACHE_DIR Cache directory, default ./cache
|
||||
WEB_DIR Built frontend directory, default ./web/dist
|
||||
SKIP_BUILD 1 to skip npm/go build
|
||||
DETACH 1 to run in background, 0 to run in foreground
|
||||
EOF
|
||||
}
|
||||
|
||||
if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
|
||||
usage
|
||||
exit 0
|
||||
fi
|
||||
|
||||
mkdir -p "$DATA_DIR" "$CACHE_DIR" "$BIN_DIR" "$(dirname "$LOG_FILE")"
|
||||
|
||||
if [[ "$SKIP_BUILD" != "1" ]]; then
|
||||
echo "[1/3] Building frontend"
|
||||
(cd "$ROOT_DIR/web" && npm ci && npm run build)
|
||||
echo "[2/3] Building server"
|
||||
(cd "$ROOT_DIR" && CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o "$BIN_PATH" ./cmd/server)
|
||||
else
|
||||
echo "[1/3] Build skipped"
|
||||
fi
|
||||
|
||||
if [[ -f "$PID_FILE" ]]; then
|
||||
old_pid="$(cat "$PID_FILE" || true)"
|
||||
if [[ -n "$old_pid" ]] && kill -0 "$old_pid" 2>/dev/null; then
|
||||
echo "[3/3] Stopping old process $old_pid"
|
||||
kill "$old_pid" || true
|
||||
sleep 1
|
||||
fi
|
||||
fi
|
||||
|
||||
export MEDIASTATION_APP_HOST="$HOST"
|
||||
export MEDIASTATION_APP_PORT="$PORT"
|
||||
export MEDIASTATION_APP_DATA_DIR="$DATA_DIR"
|
||||
export MEDIASTATION_APP_WEB_DIR="$WEB_DIR"
|
||||
export MEDIASTATION_DATABASE_DB_PATH="$DATA_DIR/mediastation.db"
|
||||
export MEDIASTATION_CACHE_CACHE_DIR="$CACHE_DIR"
|
||||
|
||||
echo "[3/3] Starting MediaStationGo on http://$HOST:$PORT"
|
||||
if [[ "$DETACH" == "1" ]]; then
|
||||
nohup "$BIN_PATH" >>"$LOG_FILE" 2>&1 &
|
||||
echo $! > "$PID_FILE"
|
||||
sleep 2
|
||||
if command -v curl >/dev/null 2>&1; then
|
||||
curl -fsS "http://127.0.0.1:$PORT/api/health" >/dev/null
|
||||
fi
|
||||
echo "Started. PID=$(cat "$PID_FILE"), log=$LOG_FILE"
|
||||
else
|
||||
exec "$BIN_PATH"
|
||||
fi
|
||||
@@ -0,0 +1,33 @@
|
||||
param(
|
||||
[string]$Image = "ghcr.io/shukebta/mediastation-go",
|
||||
[string]$Tag = "latest",
|
||||
[string]$Platforms = "linux/amd64,linux/arm64",
|
||||
[switch]$Load
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
$Builder = "mediastation-builder"
|
||||
|
||||
docker buildx inspect $Builder *> $null
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
docker buildx create --name $Builder --use | Out-Null
|
||||
} else {
|
||||
docker buildx use $Builder | Out-Null
|
||||
}
|
||||
|
||||
$args = @(
|
||||
"buildx", "build",
|
||||
"--platform", $Platforms,
|
||||
"-t", "$Image`:$Tag"
|
||||
)
|
||||
|
||||
if ($Load) {
|
||||
$args += "--load"
|
||||
} else {
|
||||
$args += "--push"
|
||||
}
|
||||
|
||||
$args += "."
|
||||
|
||||
Write-Host "Building $Image`:$Tag for $Platforms"
|
||||
docker @args
|
||||
@@ -0,0 +1,31 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
IMAGE="${IMAGE:-ghcr.io/shukebta/mediastation-go}"
|
||||
TAG="${TAG:-latest}"
|
||||
PLATFORMS="${PLATFORMS:-linux/amd64,linux/arm64}"
|
||||
PUSH="${PUSH:-1}"
|
||||
BUILDER="${BUILDER:-mediastation-builder}"
|
||||
|
||||
if ! docker buildx inspect "$BUILDER" >/dev/null 2>&1; then
|
||||
docker buildx create --name "$BUILDER" --use >/dev/null
|
||||
else
|
||||
docker buildx use "$BUILDER" >/dev/null
|
||||
fi
|
||||
|
||||
args=(
|
||||
buildx build
|
||||
--platform "$PLATFORMS"
|
||||
-t "$IMAGE:$TAG"
|
||||
)
|
||||
|
||||
if [[ "$PUSH" == "1" ]]; then
|
||||
args+=(--push)
|
||||
else
|
||||
args+=(--load)
|
||||
fi
|
||||
|
||||
args+=(.)
|
||||
|
||||
echo "Building $IMAGE:$TAG for $PLATFORMS"
|
||||
docker "${args[@]}"
|
||||
Reference in New Issue
Block a user