feat: add private Docker registry support

- Add --docker-registry parameter to start.sh and setup.sh
- Support login to private registries like code.letsbe.solutions
- Required for pulling sysadmin-agent image from Gitea registry

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Matt 2025-12-08 16:13:48 +01:00
parent 0b6fa76816
commit f467869cf5
2 changed files with 24 additions and 8 deletions

View File

@ -26,9 +26,10 @@ SKIP_SSL=false
ROOT_SSL=false ROOT_SSL=false
DOMAIN="" DOMAIN=""
# Docker Hub authentication (optional) # Docker registry authentication (optional)
DOCKER_USER="" DOCKER_USER=""
DOCKER_TOKEN="" DOCKER_TOKEN=""
DOCKER_REGISTRY=""
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
case $1 in case $1 in
@ -56,6 +57,10 @@ while [[ $# -gt 0 ]]; do
DOCKER_TOKEN="$2" DOCKER_TOKEN="$2"
shift 2 shift 2
;; ;;
--docker-registry)
DOCKER_REGISTRY="$2"
shift 2
;;
--help|-h) --help|-h)
echo "Usage: $0 [--tools \"tool1,tool2,...\"|\"all\"] [--domain DOMAIN] [--skip-ssl] [--root-ssl]" echo "Usage: $0 [--tools \"tool1,tool2,...\"|\"all\"] [--domain DOMAIN] [--skip-ssl] [--root-ssl]"
echo "" echo ""
@ -64,8 +69,9 @@ while [[ $# -gt 0 ]]; do
echo " --domain Domain name for SSL email (administrator@domain)" echo " --domain Domain name for SSL email (administrator@domain)"
echo " --skip-ssl Skip SSL certificate setup" echo " --skip-ssl Skip SSL certificate setup"
echo " --root-ssl Include root domain in SSL certificate" echo " --root-ssl Include root domain in SSL certificate"
echo " --docker-user Docker Hub username (optional, to bypass rate limits)" echo " --docker-user Docker registry username (optional)"
echo " --docker-token Docker Hub Personal Access Token (optional)" echo " --docker-token Docker registry password/token (optional)"
echo " --docker-registry Docker registry URL (optional, defaults to Docker Hub)"
echo "" echo ""
echo "Examples:" echo "Examples:"
echo " $0 --tools \"all\" --domain \"example.com\"" echo " $0 --tools \"all\" --domain \"example.com\""
@ -112,10 +118,15 @@ sudo systemctl enable docker
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-linux-$(uname -m)" -o /usr/local/bin/docker-compose sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-linux-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod 755 /usr/local/bin/docker-compose sudo chmod 755 /usr/local/bin/docker-compose
# Docker Hub login (optional - to bypass rate limits) # Docker registry login (optional - for private registries or to bypass rate limits)
if [[ -n "$DOCKER_USER" && -n "$DOCKER_TOKEN" ]]; then if [[ -n "$DOCKER_USER" && -n "$DOCKER_TOKEN" ]]; then
if [[ -n "$DOCKER_REGISTRY" ]]; then
echo "Logging into Docker registry: $DOCKER_REGISTRY..."
echo "$DOCKER_TOKEN" | docker login -u "$DOCKER_USER" --password-stdin "$DOCKER_REGISTRY"
else
echo "Logging into Docker Hub..." echo "Logging into Docker Hub..."
echo "$DOCKER_TOKEN" | docker login -u "$DOCKER_USER" --password-stdin echo "$DOCKER_TOKEN" | docker login -u "$DOCKER_USER" --password-stdin
fi
fi fi
# ============================================================================= # =============================================================================

View File

@ -57,9 +57,10 @@ CUSTOMER=""
DOMAIN="" DOMAIN=""
COMPANY_NAME="" COMPANY_NAME=""
# Docker Hub authentication (optional) # Docker registry authentication (optional)
DOCKER_USER="" DOCKER_USER=""
DOCKER_TOKEN="" DOCKER_TOKEN=""
DOCKER_REGISTRY=""
# ============================================================================= # =============================================================================
# HELPER FUNCTIONS # HELPER FUNCTIONS
@ -128,13 +129,16 @@ parse_json() {
SERVER_PASSWORD=$(echo "$json" | jq -r '.password // empty') SERVER_PASSWORD=$(echo "$json" | jq -r '.password // empty')
SSH_KEY=$(echo "$json" | jq -r '.key // empty') SSH_KEY=$(echo "$json" | jq -r '.key // empty')
ACTION=$(echo "$json" | jq -r '.action // empty') ACTION=$(echo "$json" | jq -r '.action // empty')
TOOLS=$(echo "$json" | jq -r '.tools // empty') # Handle tools as either array or string
TOOLS=$(echo "$json" | jq -r 'if .tools | type == "array" then .tools | join(",") elif .tools then .tools else empty end')
SKIP_SSL=$(echo "$json" | jq -r 'if .skip_ssl == true then "true" else "" end') SKIP_SSL=$(echo "$json" | jq -r 'if .skip_ssl == true then "true" else "" end')
ROOT_SSL=$(echo "$json" | jq -r 'if .root_ssl == true then "true" else "" end')
CUSTOMER=$(echo "$json" | jq -r '.customer // empty') CUSTOMER=$(echo "$json" | jq -r '.customer // empty')
DOMAIN=$(echo "$json" | jq -r '.domain // empty') DOMAIN=$(echo "$json" | jq -r '.domain // empty')
COMPANY_NAME=$(echo "$json" | jq -r '.company_name // empty') COMPANY_NAME=$(echo "$json" | jq -r '.company_name // empty')
DOCKER_USER=$(echo "$json" | jq -r '.docker_user // empty') DOCKER_USER=$(echo "$json" | jq -r '.docker_user // empty')
DOCKER_TOKEN=$(echo "$json" | jq -r '.docker_token // empty') DOCKER_TOKEN=$(echo "$json" | jq -r '.docker_token // empty')
DOCKER_REGISTRY=$(echo "$json" | jq -r '.docker_registry // empty')
# Registration token (can also be set via environment variable) # Registration token (can also be set via environment variable)
local json_token=$(echo "$json" | jq -r '.registration_token // empty') local json_token=$(echo "$json" | jq -r '.registration_token // empty')
@ -376,6 +380,7 @@ if [[ "$ACTION" == "setup" ]]; then
[[ "$ROOT_SSL" == "true" ]] && SETUP_ARGS="$SETUP_ARGS --root-ssl" [[ "$ROOT_SSL" == "true" ]] && SETUP_ARGS="$SETUP_ARGS --root-ssl"
[[ -n "$DOCKER_USER" ]] && SETUP_ARGS="$SETUP_ARGS --docker-user $(printf '%q' "$DOCKER_USER")" [[ -n "$DOCKER_USER" ]] && SETUP_ARGS="$SETUP_ARGS --docker-user $(printf '%q' "$DOCKER_USER")"
[[ -n "$DOCKER_TOKEN" ]] && SETUP_ARGS="$SETUP_ARGS --docker-token $(printf '%q' "$DOCKER_TOKEN")" [[ -n "$DOCKER_TOKEN" ]] && SETUP_ARGS="$SETUP_ARGS --docker-token $(printf '%q' "$DOCKER_TOKEN")"
[[ -n "$DOCKER_REGISTRY" ]] && SETUP_ARGS="$SETUP_ARGS --docker-registry $(printf '%q' "$DOCKER_REGISTRY")"
# Run setup.sh directly in foreground (connection stays alive with PermitRootLogin yes) # Run setup.sh directly in foreground (connection stays alive with PermitRootLogin yes)
echo "Running setup.sh (this may take 10-15 minutes)..." echo "Running setup.sh (this may take 10-15 minutes)..."