Fix containerised restarts
This commit is contained in:
@@ -16,6 +16,7 @@ SCHED_CONTAINER="scheduling_gia"
|
||||
|
||||
REDIS_DATA_DIR="${QUADLET_REDIS_DATA_DIR:-$ROOT_DIR/.podman/gia_redis_data}"
|
||||
WHATSAPP_DATA_DIR="${QUADLET_WHATSAPP_DATA_DIR:-$ROOT_DIR/.podman/gia_whatsapp_data}"
|
||||
SQLITE_DATA_DIR="${QUADLET_SQLITE_DATA_DIR:-$ROOT_DIR/.podman/gia_sqlite_data}"
|
||||
VRUN_DIR="/code/vrun"
|
||||
|
||||
load_env() {
|
||||
@@ -24,6 +25,19 @@ load_env() {
|
||||
set +a
|
||||
}
|
||||
|
||||
is_remote() {
|
||||
[[ -n "${CONTAINER_HOST:-}" ]] || [[ -n "${PODMAN_HOST:-}" ]] || [[ -n "${DOCKER_HOST:-}" ]]
|
||||
}
|
||||
|
||||
resolve_path() {
|
||||
local path="$1"
|
||||
if [[ "$path" = /* ]]; then
|
||||
echo "$path"
|
||||
else
|
||||
echo "$ROOT_DIR/$path"
|
||||
fi
|
||||
}
|
||||
|
||||
require_podman() {
|
||||
if ! command -v podman >/dev/null 2>&1; then
|
||||
echo "podman not found" >&2
|
||||
@@ -32,11 +46,12 @@ require_podman() {
|
||||
}
|
||||
|
||||
ensure_dirs() {
|
||||
mkdir -p "$REDIS_DATA_DIR" "$WHATSAPP_DATA_DIR" "$VRUN_DIR" "$ROOT_DIR/signal-cli-config"
|
||||
mkdir -p "$REDIS_DATA_DIR" "$WHATSAPP_DATA_DIR" "$SQLITE_DATA_DIR" "$VRUN_DIR" "$ROOT_DIR/signal-cli-config"
|
||||
chmod 0777 "$SQLITE_DATA_DIR" 2>/dev/null || true
|
||||
# Container runs as uid 1000 (xf); rootless Podman remaps uids so plain
|
||||
# chown won't work — podman unshare translates to the correct host uid.
|
||||
if [[ -n "${QUADLET_SKIP_UNSHARE:-}" ]] || [[ -n "${CONTAINER_HOST:-}" ]] || [[ -n "${PODMAN_HOST:-}" ]] || [[ -n "${DOCKER_HOST:-}" ]]; then
|
||||
echo "Skipping podman unshare chown (QUADLET_SKIP_UNSHARE or remote host detected)"
|
||||
echo "Skipping podman unshare chown -- running in sandbox"
|
||||
else
|
||||
podman unshare chown 1000:1000 "$WHATSAPP_DATA_DIR" 2>/dev/null || true
|
||||
fi
|
||||
@@ -68,10 +83,12 @@ run_worker_container() {
|
||||
--replace
|
||||
--name "$name"
|
||||
--pod "$POD_NAME"
|
||||
--user "$(id -u):$(id -g)"
|
||||
--env-file "$STACK_ENV"
|
||||
--env "SIGNAL_HTTP_URL=http://127.0.0.1:8080"
|
||||
--env "APP_DATABASE_PATH=$APP_DATABASE_PATH"
|
||||
-v "$REPO_DIR:/code"
|
||||
-v "$APP_DATABASE_FILE:/conf/db.sqlite3"
|
||||
-v "$SQLITE_DATA_DIR:/conf"
|
||||
-v "$VRUN_DIR:/var/run"
|
||||
)
|
||||
if [[ "$with_uwsgi" == "1" ]]; then
|
||||
@@ -93,10 +110,12 @@ run_oneshot_container() {
|
||||
--replace
|
||||
--name "$name"
|
||||
--pod "$POD_NAME"
|
||||
--user "$(id -u):$(id -g)"
|
||||
--env-file "$STACK_ENV"
|
||||
--env "SIGNAL_HTTP_URL=http://127.0.0.1:8080"
|
||||
--env "APP_DATABASE_PATH=$APP_DATABASE_PATH"
|
||||
-v "$REPO_DIR:/code"
|
||||
-v "$APP_DATABASE_FILE:/conf/db.sqlite3"
|
||||
-v "$SQLITE_DATA_DIR:/conf"
|
||||
-v "$VRUN_DIR:/var/run"
|
||||
)
|
||||
if [[ "$with_whatsapp" == "1" ]]; then
|
||||
@@ -120,7 +139,18 @@ down_stack() {
|
||||
start_stack() {
|
||||
require_podman
|
||||
load_env
|
||||
REPO_DIR="$(resolve_path "$REPO_DIR")"
|
||||
APP_DATABASE_FILE="$(resolve_path "$APP_DATABASE_FILE")"
|
||||
APP_DATABASE_BASENAME="$(basename "$APP_DATABASE_FILE")"
|
||||
APP_DATABASE_PATH="/conf/$APP_DATABASE_BASENAME"
|
||||
HOST_DATABASE_FILE="$SQLITE_DATA_DIR/$APP_DATABASE_BASENAME"
|
||||
APP_LOCAL_SETTINGS="$(resolve_path "$APP_LOCAL_SETTINGS")"
|
||||
ensure_dirs
|
||||
if [[ "$APP_DATABASE_FILE" != "$HOST_DATABASE_FILE" ]] && [[ -f "$APP_DATABASE_FILE" ]] && [[ ! -f "$HOST_DATABASE_FILE" ]]; then
|
||||
cp "$APP_DATABASE_FILE" "$HOST_DATABASE_FILE"
|
||||
fi
|
||||
touch "$HOST_DATABASE_FILE"
|
||||
chmod 0666 "$HOST_DATABASE_FILE" 2>/dev/null || true
|
||||
down_stack
|
||||
|
||||
podman pod create --name "$POD_NAME" -p "${APP_PORT:-5006}:8000" -p "8080:8080" >/dev/null
|
||||
@@ -165,7 +195,11 @@ case "${1:-}" in
|
||||
up)
|
||||
start_stack
|
||||
trap 'down_stack; exit 0' INT TERM
|
||||
podman logs -f "$APP_CONTAINER" "$ASGI_CONTAINER" "$UR_CONTAINER" "$SCHED_CONTAINER" "$REDIS_CONTAINER" "$SIGNAL_CONTAINER" || true
|
||||
if is_remote; then
|
||||
podman logs -f "$APP_CONTAINER" || true
|
||||
else
|
||||
podman logs -f "$APP_CONTAINER" "$ASGI_CONTAINER" "$UR_CONTAINER" "$SCHED_CONTAINER" "$REDIS_CONTAINER" "$SIGNAL_CONTAINER" || true
|
||||
fi
|
||||
;;
|
||||
down)
|
||||
require_podman
|
||||
@@ -181,7 +215,11 @@ case "${1:-}" in
|
||||
;;
|
||||
logs)
|
||||
require_podman
|
||||
podman logs -f "$APP_CONTAINER" "$ASGI_CONTAINER" "$UR_CONTAINER" "$SCHED_CONTAINER" "$REDIS_CONTAINER" "$SIGNAL_CONTAINER"
|
||||
if is_remote; then
|
||||
podman logs -f "$APP_CONTAINER"
|
||||
else
|
||||
podman logs -f "$APP_CONTAINER" "$ASGI_CONTAINER" "$UR_CONTAINER" "$SCHED_CONTAINER" "$REDIS_CONTAINER" "$SIGNAL_CONTAINER"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {install|up|down|restart|status|logs}" >&2
|
||||
|
||||
Reference in New Issue
Block a user