88 lines
3.0 KiB
Bash
Executable File
88 lines
3.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
source "${SCRIPT_DIR}/functions.sh"
|
|
resolve_paths
|
|
|
|
WORKER_COUNT=1
|
|
while getopts "c:" opt; do
|
|
case $opt in
|
|
c) WORKER_COUNT="$OPTARG" ;;
|
|
*) echo "Usage: $0 [-c count]"; exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
require_env
|
|
resolve_volume_path
|
|
|
|
TEMPLATE_COMPOSE="${INIT_DIR}/templates/worker.yaml"
|
|
TEMPLATE_CONFIG="${INIT_DIR}/config/worker.yaml"
|
|
TEMPLATE_LOG="${INIT_DIR}/config/worker-log.yaml"
|
|
|
|
require_file "$TEMPLATE_COMPOSE" "Compose template"
|
|
require_file "$TEMPLATE_CONFIG" "Config template"
|
|
require_file "$TEMPLATE_LOG" "Log template"
|
|
|
|
WORKERS_DIR="${VOLUME_PATH}/synapse/workers"
|
|
mkdir -p "$WORKERS_DIR" "${ROOT_DIR}/.tmp"
|
|
|
|
TRAEFIK_ENABLED="${PROXY:-0}"
|
|
TEMP_COMPOSE="${ROOT_DIR}/.tmp/compose_workers.yaml"
|
|
> "$TEMP_COMPOSE"
|
|
|
|
for ((i=1; i<=WORKER_COUNT; i++)); do
|
|
worker_name="synapse-worker-${i}"
|
|
port=$((9093 + i))
|
|
|
|
sed -e "s/{{WORKER_NAME}}/${worker_name}/g" \
|
|
-e "s/{{PORT}}/${port}/g" \
|
|
-e "s/{{SERVER_NAME}}/${HOMESERVER_FQDN}/g" \
|
|
-e "s/{{DB_USER}}/${DB_USER:-synapse}/g" \
|
|
-e "s/{{DB_PASSWORD}}/${DB_PASSWORD:-synapse_password}/g" \
|
|
-e "s/{{DB_NAME}}/${DB_NAME:-synapse}/g" \
|
|
"$TEMPLATE_CONFIG" > "${WORKERS_DIR}/${worker_name}.yaml"
|
|
|
|
sed -e "s/{{WORKER_NAME}}/${worker_name}/g" \
|
|
-e "s/{{MAX_BYTES}}/${LOG_MAX_BYTES:-10485760}/g" \
|
|
-e "s/{{BACKUP_COUNT}}/${LOG_BACKUP_COUNT:-5}/g" \
|
|
-e "s/{{LOG_LEVEL}}/${LOG_LEVEL:-INFO}/g" \
|
|
-e "s/{{SYNAPSE_LOG_LEVEL}}/${SYNAPSE_LOG_LEVEL:-INFO}/g" \
|
|
"$TEMPLATE_LOG" > "${WORKERS_DIR}/${worker_name}.log.config"
|
|
|
|
TRAEFIK_LABELS=""
|
|
if [[ "$TRAEFIK_ENABLED" == "1" && -n "$DOMAIN" ]]; then
|
|
TRAEFIK_LABELS=" labels:
|
|
- traefik.enable=true
|
|
- traefik.http.services.${worker_name}.loadbalancer.server.port=${port}
|
|
- traefik.http.routers.synapse-worker-${worker_name}.rule=Host(\`${DOMAIN}\`) && PathPrefix(\`/_matrix\`)
|
|
- traefik.http.routers.synapse-worker-${worker_name}.entrypoints=websecure
|
|
- traefik.http.routers.synapse-worker-${worker_name}.service=${worker_name}
|
|
- traefik.http.routers.synapse-worker-${worker_name}.priority=10
|
|
"
|
|
fi
|
|
|
|
sed -e "s/{{WORKER_NAME}}/${worker_name}/g" \
|
|
-e "s/{{PORT}}/${port}/g" \
|
|
-e "s/{{APP_TYPE}}/synapse.app.generic_worker/g" \
|
|
-e "s/{{TRAEFIK_LABELS}}/${TRAEFIK_LABELS}/g" \
|
|
"$TEMPLATE_COMPOSE" >> "$TEMP_COMPOSE"
|
|
|
|
echo "" >> "$TEMP_COMPOSE"
|
|
done
|
|
|
|
if [[ -f "$COMPOSE_FILE" ]]; then
|
|
if ! grep -qE "^ synapse-worker-[0-9]+:" "$COMPOSE_FILE"; then
|
|
cat "$TEMP_COMPOSE" >> "$COMPOSE_FILE"
|
|
log_info "Appended ${WORKER_COUNT} worker(s) to compose.yaml"
|
|
else
|
|
log_warn "Some workers already exist. Manual merge required"
|
|
cp "$TEMP_COMPOSE" "${ROOT_DIR}/.tmp/compose_workers.yaml"
|
|
fi
|
|
else
|
|
log_warn "compose.yaml not found. Generated: ${TEMP_COMPOSE}"
|
|
fi
|
|
|
|
rm -f "$TEMP_COMPOSE"
|
|
log_info "Worker generation complete"
|