#!/bin/sh set -e # Forgejo installation helper for Sawa Panel # Context: Runs inside /opt/forgejo via sh as root echo "Configuring Forgejo environment..." # 1. Create forgejo system user if it doesn't exist # Handle Alpine BusyBox compatibility (fails silently if exists) if ! id "forgejo" >/dev/null 2>&1; then echo "Creating forgejo system user..." adduser -S -D -H -h /opt/forgejo -s /sbin/nologin forgejo || true fi # 2. Setup directory structure for custom config and data mkdir -p data custom/conf # 3. Generate initial app.ini SECRET_KEY=$(head -c 32 /dev/urandom | base64) echo "Writing app.ini configuration..." cat < custom/conf/app.ini APP_NAME = Sawa Forgejo RUN_MODE = prod RUN_USER = forgejo [repository] ROOT = /opt/forgejo/data/forgejo-repositories [database] DB_TYPE = postgres HOST = 127.0.0.1:5432 NAME = forgejo USER = forgejo PASSWD = $SAWA_DB_PASSWORD SSL_MODE = disable [server] SSH_DOMAIN = ${SAWA_DOMAIN:-git.home1.local} HTTP_PORT = 3000 ROOT_URL = https://${SAWA_DOMAIN:-git.home1.local}/ DISABLE_SSH = false SSH_PORT = 22 OFFLINE_MODE = false APP_DATA_PATH = /opt/forgejo/data [security] INSTALL_LOCK = true SECRET_KEY = $SECRET_KEY [service] DISABLE_REGISTRATION = false EOF # 4. Correct ownership so forgejo user can write to its own directories FORGEJO_GROUP=$(id -gn forgejo 2>/dev/null || echo nogroup) chown -R forgejo:$FORGEJO_GROUP . echo "Forgejo installation script completed successfully."