erpnext/scripts/coolify/preload-image.sh
epistemophiliac e73912541e Add Coolify host image preload for large registry pulls.
Document exit 255 during multi-hundred-MB layer downloads and default PULL_POLICY to if_not_present after preload.
2026-06-16 20:49:15 -04:00

54 lines
2.1 KiB
Bash
Executable file

#!/usr/bin/env bash
# Pre-load the ERPNext custom image into the Coolify host Docker daemon.
# Run on the Coolify server (root) BEFORE the first deploy, or after Jenkins pushes a new tag.
#
# Why: the custom image is ~1.2GB with large layers. Coolify deploy can fail while
# `docker compose up` streams pull progress (exit 255) when pulling through Cloudflare/Traefik.
# Skopeo copies from internal Forgejo (same trick as Jenkins push) — fast and reliable.
#
# Usage (on Coolify host):
# export REGISTRY_USER=epistemophiliac
# export REGISTRY_PASSWORD='<forgejo-token>'
# export CUSTOM_TAG=main-26933f3 # or main
# bash scripts/coolify/preload-image.sh
#
# Then in Coolify env: PULL_POLICY=if_not_present
set -euo pipefail
REGISTRY_IMAGE="${CUSTOM_IMAGE:-git.aexoradao.com/epistemophiliac/erpnext}"
IMAGE_TAG="${CUSTOM_TAG:-main}"
FORGEJO_HOST="${FORGEJO_HOST:-forgejo-vydgeq365afzmxe4s1d75fwv}"
FORGEJO_NETWORK="${FORGEJO_NETWORK:-vydgeq365afzmxe4s1d75fwv}"
SKOPEO_IMAGE="${SKOPEO_IMAGE:-quay.io/skopeo/stable:v1.17.0}"
if [ -z "${REGISTRY_USER:-}" ] || [ -z "${REGISTRY_PASSWORD:-}" ]; then
echo "ERROR: set REGISTRY_USER and REGISTRY_PASSWORD (Forgejo token with package read)"
exit 1
fi
if ! docker info >/dev/null 2>&1; then
echo "ERROR: run as root on the Coolify host (docker info failed)"
exit 1
fi
echo "=== Preload ${REGISTRY_IMAGE}:${IMAGE_TAG} ==="
echo "Source: http://${FORGEJO_HOST}:3000/epistemophiliac/erpnext:${IMAGE_TAG} (internal)"
docker run --rm \
--network "${FORGEJO_NETWORK}" \
-v /var/run/docker.sock:/var/run/docker.sock \
"${SKOPEO_IMAGE}" \
copy \
"docker://${FORGEJO_HOST}:3000/epistemophiliac/erpnext:${IMAGE_TAG}" \
"docker-daemon:${REGISTRY_IMAGE}:${IMAGE_TAG}" \
--src-creds "${REGISTRY_USER}:${REGISTRY_PASSWORD}" \
--src-tls-verify=false \
--retry-times 3
if [ "${IMAGE_TAG}" != "main" ]; then
docker tag "${REGISTRY_IMAGE}:${IMAGE_TAG}" "${REGISTRY_IMAGE}:main"
echo "Also tagged ${REGISTRY_IMAGE}:main"
fi
echo "OK: ${REGISTRY_IMAGE}:${IMAGE_TAG} is on the host."
echo "Set PULL_POLICY=if_not_present in Coolify, then redeploy."