119 lines
3.1 KiB
Bash
Executable File
119 lines
3.1 KiB
Bash
Executable File
#!/usr/bin/env sh
|
|
set -eu
|
|
|
|
DB_TARGET="${1:-sqlite}"
|
|
|
|
STACK_NAME="${STACK_NAME:-ksef_app}"
|
|
COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.yml}"
|
|
SSL_DIR="${SSL_DIR:-./deploy/caddy/ssl}"
|
|
|
|
if [ -f .env ]; then
|
|
set -a
|
|
. ./.env
|
|
set +a
|
|
fi
|
|
|
|
APP_DOMAIN="${APP_DOMAIN:-localhost}"
|
|
APP_EXTERNAL_SCHEME="${APP_EXTERNAL_SCHEME:-https}"
|
|
EXPOSE_PORT="${EXPOSE_PORT:-8785}"
|
|
|
|
CERT_FILE="${CERT_FILE:-${SSL_DIR}/server.crt}"
|
|
KEY_FILE="${KEY_FILE:-${SSL_DIR}/server.key}"
|
|
|
|
log() {
|
|
printf '%s\n' "$*"
|
|
}
|
|
|
|
need_cmd() {
|
|
command -v "$1" >/dev/null 2>&1 || {
|
|
printf 'Brak wymaganego polecenia: %s\n' "$1" >&2
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
need_cmd docker
|
|
need_cmd openssl
|
|
|
|
mkdir -p "$SSL_DIR"
|
|
|
|
case "$DB_TARGET" in
|
|
sqlite)
|
|
export DB_ENGINE=sqlite
|
|
export DB_HOST=""
|
|
export DB_PORT=""
|
|
COMPOSE_PROFILES=""
|
|
mkdir -p ./db/sqlite
|
|
DB_PATH_INFO="./db/sqlite/app.db"
|
|
;;
|
|
pgsql|postgres|postgresql)
|
|
export DB_ENGINE=pgsql
|
|
export DB_HOST="${DB_HOST:-postgres}"
|
|
export DB_PORT="${DB_PORT:-5432}"
|
|
COMPOSE_PROFILES="pgsql"
|
|
mkdir -p ./db/pgsql
|
|
DB_PATH_INFO="./db/pgsql"
|
|
;;
|
|
mysql)
|
|
export DB_ENGINE=mysql
|
|
export DB_HOST="${DB_HOST:-mysql}"
|
|
export DB_PORT="${DB_PORT:-3306}"
|
|
COMPOSE_PROFILES="mysql"
|
|
mkdir -p ./db/mysql
|
|
DB_PATH_INFO="./db/mysql"
|
|
;;
|
|
*)
|
|
printf 'Nieznany typ bazy: %s\n' "$DB_TARGET" >&2
|
|
printf 'Użycie: ./deploy_docker.sh [sqlite|pgsql|mysql]\n' >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
if [ ! -f "$CERT_FILE" ] || [ ! -f "$KEY_FILE" ]; then
|
|
log "Nie znaleziono certyfikatu SSL w katalogu ${SSL_DIR}, tworzę self-signed cert..."
|
|
rm -f "$CERT_FILE" "$KEY_FILE"
|
|
openssl req -x509 -nodes -newkey rsa:4096 -sha256 -days 825 \
|
|
-keyout "$KEY_FILE" \
|
|
-out "$CERT_FILE" \
|
|
-subj "/CN=${APP_DOMAIN}" \
|
|
-addext "subjectAltName=DNS:${APP_DOMAIN},DNS:localhost,IP:127.0.0.1"
|
|
chmod 600 "$KEY_FILE"
|
|
chmod 644 "$CERT_FILE"
|
|
else
|
|
log "Znaleziono istniejący certyfikat SSL w katalogu ${SSL_DIR}."
|
|
fi
|
|
|
|
log "Wybrany silnik bazy: ${DB_ENGINE}"
|
|
|
|
if [ -n "$COMPOSE_PROFILES" ]; then
|
|
export COMPOSE_PROFILES
|
|
log "Aktywne profile Compose: ${COMPOSE_PROFILES}"
|
|
else
|
|
unset COMPOSE_PROFILES || true
|
|
log "Brak aktywnych profili Compose"
|
|
fi
|
|
|
|
log "Pobieram najnowsze obrazy dla projektu ${STACK_NAME}..."
|
|
docker compose -p "$STACK_NAME" -f "$COMPOSE_FILE" pull
|
|
|
|
log "Zatrzymuję aktualny stack projektu ${STACK_NAME}..."
|
|
docker compose -p "$STACK_NAME" -f "$COMPOSE_FILE" stop || true
|
|
|
|
log "Usuwam kontenery i osierocone zasoby tylko dla projektu ${STACK_NAME}..."
|
|
docker compose -p "$STACK_NAME" -f "$COMPOSE_FILE" down --remove-orphans || true
|
|
|
|
log "Buduję obrazy projektu ${STACK_NAME} bez cache..."
|
|
docker compose -p "$STACK_NAME" -f "$COMPOSE_FILE" build --no-cache
|
|
|
|
log "Uruchamiam stack ${STACK_NAME}..."
|
|
docker compose -p "$STACK_NAME" -f "$COMPOSE_FILE" up -d
|
|
|
|
APP_URL="${APP_EXTERNAL_SCHEME}://${APP_DOMAIN}"
|
|
if [ -n "${EXPOSE_PORT:-}" ]; then
|
|
APP_URL="${APP_URL}:${EXPOSE_PORT}"
|
|
fi
|
|
|
|
log "Deployment zakończony."
|
|
log "Adres aplikacji: ${APP_URL}"
|
|
log "Port zewnętrzny: ${EXPOSE_PORT}"
|
|
log "Silnik bazy: ${DB_ENGINE}"
|
|
log "Ścieżka danych bazy: ${DB_PATH_INFO}" |