Use catalog as source of truth for app deployment

This commit is contained in:
2026-05-21 11:55:16 +02:00
parent 7cb50fc496
commit ec18df3f24
3 changed files with 53 additions and 74 deletions
+13 -68
View File
@@ -10,12 +10,10 @@ if [ -z "$APP_ID" ]; then
fi
BASE_DIR="/opt/appfactory"
WORKSPACE_DIR="$HOME/workspace"
CADDY_FILE="$BASE_DIR/gateway/Caddyfile"
CATALOG_FILE="$BASE_DIR/apps/catalog.yml"
WORKSPACE_DIR="/home/jiri/workspace"
APP_SOURCE_DIR="$WORKSPACE_DIR/$APP_ID"
CATALOG_FILE="$BASE_DIR/apps/catalog.yml"
if [ ! -d "$APP_SOURCE_DIR" ]; then
echo "Missing app source: $APP_SOURCE_DIR"
@@ -25,68 +23,12 @@ fi
echo "Building Docker image..."
docker build -t "$APP_ID:latest" "$APP_SOURCE_DIR"
COMPOSE_FILE="$BASE_DIR/deploy/apps-compose.yml"
mkdir -p "$BASE_DIR/deploy/generated"
if [ ! -f "$COMPOSE_FILE" ]; then
cat > "$COMPOSE_FILE" <<EOF
services:
EOF
if ! grep -q "^- id: NEVER_MATCH" "$CATALOG_FILE" 2>/dev/null; then
true
fi
if grep -q "container_name: $APP_ID" "$COMPOSE_FILE"; then
echo "App already registered in compose."
else
cat >> "$COMPOSE_FILE" <<EOF
$APP_ID:
image: $APP_ID:latest
container_name: $APP_ID
restart: unless-stopped
environment:
- APP_NAME=$APP_ID
- ROOT_PATH=/apps/$APP_ID
networks:
- appfactory
EOF
fi
#if ! grep -q "apps/$APP_ID" "$BASE_DIR/gateway/Caddyfile"; then
#
#TMP_FILE=$(mktemp)
#
#sed '$d' "$CADDY_FILE" > "$TMP_FILE"
#
#cat >> "$TMP_FILE" <<EOF
#
# handle_path /apps/$APP_ID/* {
# reverse_proxy $APP_ID:8000
# }
#
#}
#EOF
#
#mv "$TMP_FILE" "$CADDY_FILE"
#
#fi
echo "Restarting stack..."
cd "$BASE_DIR/deploy"
docker compose -f docker-compose.yml -f apps-compose.yml up -d
docker restart appfactory-caddy
CATALOG_FILE="$BASE_DIR/apps/catalog.yml"
if ! grep -q "id: $APP_ID" "$CATALOG_FILE"; then
cat >> "$CATALOG_FILE" <<EOF
cat >> "$CATALOG_FILE" <<EOF_APP
- id: $APP_ID
name: $APP_ID
@@ -96,14 +38,17 @@ cat >> "$CATALOG_FILE" <<EOF
docs: /apps/$APP_ID/docs
health: /apps/$APP_ID/health
status: deployed
EOF
EOF_APP
fi
"$HOME/workspace/appfactory-tools/scripts/generate-caddyfile.sh"
"$HOME/workspace/appfactory-tools/scripts/generate-apps-page.sh"
/home/jiri/workspace/appfactory-tools/scripts/generate-apps-compose.sh
/home/jiri/workspace/appfactory-tools/scripts/generate-caddyfile.sh
/home/jiri/workspace/appfactory-tools/scripts/generate-apps-page.sh
cd "$BASE_DIR/deploy"
docker compose -f docker-compose.yml -f apps-compose.yml up -d --force-recreate "$APP_ID"
echo ""
echo "DONE"
echo ""
echo "Open:"
echo "http://SERVER_IP/apps/$APP_ID/docs"
echo "http://192.168.66.130/apps/$APP_ID/docs"
+29
View File
@@ -0,0 +1,29 @@
#!/usr/bin/env bash
set -euo pipefail
BASE_DIR="/opt/appfactory"
CATALOG_FILE="$BASE_DIR/apps/catalog.yml"
COMPOSE_FILE="$BASE_DIR/deploy/apps-compose.yml"
cat > "$COMPOSE_FILE" <<'EOF_COMPOSE'
services:
EOF_COMPOSE
awk '
/- id:/ { app=$3 }
/language:/ { lang=$2 }
/status:/ {
if (app != "") {
print " " app ":"
print " image: " app ":latest"
print " container_name: " app
print " restart: unless-stopped"
print " environment:"
print " - APP_NAME=" app
print " - ROOT_PATH=/apps/" app
print " networks:"
print " - appfactory"
print ""
}
}
' "$CATALOG_FILE" >> "$COMPOSE_FILE"
+11 -6
View File
@@ -5,7 +5,7 @@ BASE_DIR="/opt/appfactory"
CATALOG_FILE="$BASE_DIR/apps/catalog.yml"
CADDY_FILE="$BASE_DIR/gateway/Caddyfile"
cat > "$CADDY_FILE" <<'EOF'
cat > "$CADDY_FILE" <<'EOF_CADDY'
:80 {
handle /health {
respond "AppFactory OK" 200
@@ -22,13 +22,18 @@ cat > "$CADDY_FILE" <<'EOF'
file_server
}
EOF
EOF_CADDY
awk '
/- id:/ { print " handle_path /apps/" $3 "/* {\n reverse_proxy " $3 ":8000\n }\n" }
/- id:/ {
print " handle_path /apps/" $3 "/* {"
print " reverse_proxy " $3 ":8000"
print " }"
print ""
}
' "$CATALOG_FILE" >> "$CADDY_FILE"
cat >> "$CADDY_FILE" <<'EOF'
cat >> "$CADDY_FILE" <<'EOF_CADDY'
handle_path /webhook/* {
reverse_proxy appfactory-webhook:9000
}
@@ -41,6 +46,6 @@ cat >> "$CADDY_FILE" <<'EOF'
respond "AppFactory gateway is running" 200
}
}
EOF
EOF_CADDY
docker exec appfactory-caddy caddy reload --config /etc/caddy/Caddyfile || docker restart appfactory-caddy
docker exec appfactory-caddy caddy reload --config /etc/caddy/Caddyfile