- Add missing packages to requirements.txt: requests, beautifulsoup4, fake-useragent, yt-dlp, urllib3 - Fix entrypoint.sh: replace grep -oP (GNU) with awk (BusyBox compat) - Fix entrypoint.sh: add policy routing so LAN clients get responses via eth0 instead of through the WireGuard tunnel - Change healthcheck from ping to curl (VPN provider blocks ICMP) - Add start_period and increase retries for healthcheck - Change external port mapping to 2000:8000 - Add podman-compose.prod.yml and push.sh to version control
97 lines
3.2 KiB
Bash
97 lines
3.2 KiB
Bash
#!/usr/bin/env bash
|
|
# filepath: /home/lukas/Volume/repo/Aniworld/Docker/push.sh
|
|
#
|
|
# Build and push Aniworld container images to the Gitea registry.
|
|
#
|
|
# Usage:
|
|
# ./push.sh # builds & pushes with tag "latest"
|
|
# ./push.sh v1.2.3 # builds & pushes with tag "v1.2.3"
|
|
# ./push.sh v1.2.3 --no-build # pushes existing images only
|
|
#
|
|
# Prerequisites:
|
|
# podman login git.lpl-mind.de
|
|
|
|
set -euo pipefail
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Configuration
|
|
# ---------------------------------------------------------------------------
|
|
REGISTRY="git.lpl-mind.de"
|
|
NAMESPACE="lukas.pupkalipinski"
|
|
PROJECT="aniworld"
|
|
|
|
APP_IMAGE="${REGISTRY}/${NAMESPACE}/${PROJECT}/app"
|
|
VPN_IMAGE="${REGISTRY}/${NAMESPACE}/${PROJECT}/vpn"
|
|
|
|
TAG="${1:-latest}"
|
|
SKIP_BUILD=false
|
|
if [[ "${2:-}" == "--no-build" ]]; then
|
|
SKIP_BUILD=true
|
|
fi
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Helpers
|
|
# ---------------------------------------------------------------------------
|
|
log() { echo -e "\n>>> $*"; }
|
|
err() { echo -e "\n❌ ERROR: $*" >&2; exit 1; }
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Pre-flight checks
|
|
# ---------------------------------------------------------------------------
|
|
echo "============================================"
|
|
echo " Aniworld — Build & Push"
|
|
echo " Registry : ${REGISTRY}"
|
|
echo " Tag : ${TAG}"
|
|
echo "============================================"
|
|
|
|
command -v podman &>/dev/null || err "podman is not installed."
|
|
|
|
if ! podman login --get-login "${REGISTRY}" &>/dev/null; then
|
|
err "Not logged in. Run:\n podman login ${REGISTRY}"
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Build
|
|
# ---------------------------------------------------------------------------
|
|
if [[ "${SKIP_BUILD}" == false ]]; then
|
|
log "Building app image → ${APP_IMAGE}:${TAG}"
|
|
podman build \
|
|
-t "${APP_IMAGE}:${TAG}" \
|
|
-f "${SCRIPT_DIR}/Dockerfile.app" \
|
|
"${PROJECT_ROOT}"
|
|
|
|
log "Building VPN image → ${VPN_IMAGE}:${TAG}"
|
|
podman build \
|
|
-t "${VPN_IMAGE}:${TAG}" \
|
|
-f "${SCRIPT_DIR}/Containerfile" \
|
|
"${SCRIPT_DIR}"
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Push
|
|
# ---------------------------------------------------------------------------
|
|
log "Pushing ${APP_IMAGE}:${TAG}"
|
|
podman push "${APP_IMAGE}:${TAG}"
|
|
|
|
log "Pushing ${VPN_IMAGE}:${TAG}"
|
|
podman push "${VPN_IMAGE}:${TAG}"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Summary
|
|
# ---------------------------------------------------------------------------
|
|
echo ""
|
|
echo "============================================"
|
|
echo " ✅ Push complete!"
|
|
echo ""
|
|
echo " Images:"
|
|
echo " ${APP_IMAGE}:${TAG}"
|
|
echo " ${VPN_IMAGE}:${TAG}"
|
|
echo ""
|
|
echo " Deploy on server:"
|
|
echo " podman login ${REGISTRY}"
|
|
echo " podman-compose -f podman-compose.prod.yml pull"
|
|
echo " podman-compose -f podman-compose.prod.yml up -d"
|
|
echo "============================================" |