Add Arcane stack with auto-deployment and secret generation
- Added ARCANE_ENCRYPTION_KEY and ARCANE_JWT_SECRET to .env.example - Created deploy_arcane() function in ez-homelab.sh - Auto-generate Arcane secrets after Authelia secrets - Deploy Arcane in both Option 2 (Core Server) and Option 3 (Additional Server) - Added Arcane docker-compose.yml configuration
This commit is contained in:
@@ -74,6 +74,11 @@ AUTHELIA_JWT_SECRET=generate-with-openssl-rand-hex-64
|
|||||||
AUTHELIA_SESSION_SECRET=generate-with-openssl-rand-hex-64
|
AUTHELIA_SESSION_SECRET=generate-with-openssl-rand-hex-64
|
||||||
AUTHELIA_STORAGE_ENCRYPTION_KEY=generate-with-openssl-rand-hex-64
|
AUTHELIA_STORAGE_ENCRYPTION_KEY=generate-with-openssl-rand-hex-64
|
||||||
|
|
||||||
|
# ARCANE Secrets - Let ez-homelab.sh generate these unless you know what your doing
|
||||||
|
ARCANE_ENCRYPTION_KEY=generate-with-openssl-rand-hex-64
|
||||||
|
ARCANE_JWT_SECRET=generate-with-openssl-rand-hex-64
|
||||||
|
|
||||||
|
|
||||||
# Surfshark WireGuard (OPTIONAL - Advanced users only)
|
# Surfshark WireGuard (OPTIONAL - Advanced users only)
|
||||||
# Get WireGuard details from Surfshark dashboard
|
# Get WireGuard details from Surfshark dashboard
|
||||||
# SURFSHARK_PRIVATE_KEY=your-wireguard-private-key
|
# SURFSHARK_PRIVATE_KEY=your-wireguard-private-key
|
||||||
|
|||||||
@@ -9,12 +9,12 @@ services:
|
|||||||
- arcane-data:/app/data
|
- arcane-data:/app/data
|
||||||
- /opt/stacks:/opt/stacks
|
- /opt/stacks:/opt/stacks
|
||||||
environment:
|
environment:
|
||||||
- APP_URL=http://192.168.4.12:3552
|
- APP_URL=http://${SERVER_IP}:3552
|
||||||
- PROJECTS_DIRECTORY=/opt/stacks
|
- PROJECTS_DIRECTORY=/opt/stacks
|
||||||
- PUID=1000
|
- PUID=1000
|
||||||
- PGID=1000
|
- PGID=1000
|
||||||
- ENCRYPTION_KEY=5Db7OZ8TtiRNnXi09oh4WN27igS8YohGo45bnBycN7U=
|
- ENCRYPTION_KEY=${ARCANE_ENCRYPTION_KEY}
|
||||||
- JWT_SECRET=xwe+pZrRvv18OprdQS+8O5R3fhNekn4pOmikSTJzQIg=
|
- JWT_SECRET=${ARCANE_JWT_SECRET}
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
networks:
|
networks:
|
||||||
- traefik-network
|
- traefik-network
|
||||||
@@ -25,8 +25,8 @@ services:
|
|||||||
# restart: unless-stopped
|
# restart: unless-stopped
|
||||||
# environment:
|
# environment:
|
||||||
# - AGENT_MODE=true
|
# - AGENT_MODE=true
|
||||||
# - AGENT_TOKEN=
|
# - AGENT_TOKEN=${ARCANE_AGENT_TOKEN}
|
||||||
# - MANAGER_API_URL=http://192.168.4.4:3552
|
# - MANAGER_API_URL=http://${SERVER_IP}:3552
|
||||||
# ports:
|
# ports:
|
||||||
# - "3553:3553"
|
# - "3553:3553"
|
||||||
# volumes:
|
# volumes:
|
||||||
|
|||||||
@@ -821,10 +821,22 @@ save_env_file() {
|
|||||||
AUTHELIA_STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 64)
|
AUTHELIA_STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 64)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Generate Arcane secrets
|
||||||
|
if [ -z "$ARCANE_ENCRYPTION_KEY" ]; then
|
||||||
|
ARCANE_ENCRYPTION_KEY=$(openssl rand -hex 64)
|
||||||
|
fi
|
||||||
|
if [ -z "$ARCANE_JWT_SECRET" ]; then
|
||||||
|
ARCANE_JWT_SECRET=$(openssl rand -hex 64)
|
||||||
|
fi
|
||||||
|
|
||||||
# Save Authelia settings to .env
|
# Save Authelia settings to .env
|
||||||
sudo -u "$ACTUAL_USER" sed -i "s%AUTHELIA_JWT_SECRET=.*%AUTHELIA_JWT_SECRET=$AUTHELIA_JWT_SECRET%" "$REPO_DIR/.env"
|
sudo -u "$ACTUAL_USER" sed -i "s%AUTHELIA_JWT_SECRET=.*%AUTHELIA_JWT_SECRET=$AUTHELIA_JWT_SECRET%" "$REPO_DIR/.env"
|
||||||
sudo -u "$ACTUAL_USER" sed -i "s%AUTHELIA_SESSION_SECRET=.*%AUTHELIA_SESSION_SECRET=$AUTHELIA_SESSION_SECRET%" "$REPO_DIR/.env"
|
sudo -u "$ACTUAL_USER" sed -i "s%AUTHELIA_SESSION_SECRET=.*%AUTHELIA_SESSION_SECRET=$AUTHELIA_SESSION_SECRET%" "$REPO_DIR/.env"
|
||||||
sudo -u "$ACTUAL_USER" sed -i "s%AUTHELIA_STORAGE_ENCRYPTION_KEY=.*%AUTHELIA_STORAGE_ENCRYPTION_KEY=$AUTHELIA_STORAGE_ENCRYPTION_KEY%" "$REPO_DIR/.env"
|
sudo -u "$ACTUAL_USER" sed -i "s%AUTHELIA_STORAGE_ENCRYPTION_KEY=.*%AUTHELIA_STORAGE_ENCRYPTION_KEY=$AUTHELIA_STORAGE_ENCRYPTION_KEY%" "$REPO_DIR/.env"
|
||||||
|
|
||||||
|
# Save Arcane settings to .env
|
||||||
|
sudo -u "$ACTUAL_USER" sed -i "s%ARCANE_ENCRYPTION_KEY=.*%ARCANE_ENCRYPTION_KEY=$ARCANE_ENCRYPTION_KEY%" "$REPO_DIR/.env"
|
||||||
|
sudo -u "$ACTUAL_USER" sed -i "s%ARCANE_JWT_SECRET=.*%ARCANE_JWT_SECRET=$ARCANE_JWT_SECRET%" "$REPO_DIR/.env"
|
||||||
sudo -u "$ACTUAL_USER" sed -i "s%# AUTHELIA_ADMIN_USER=.*%AUTHELIA_ADMIN_USER=$ADMIN_USER%" "$REPO_DIR/.env"
|
sudo -u "$ACTUAL_USER" sed -i "s%# AUTHELIA_ADMIN_USER=.*%AUTHELIA_ADMIN_USER=$ADMIN_USER%" "$REPO_DIR/.env"
|
||||||
sudo -u "$ACTUAL_USER" sed -i "s%AUTHELIA_ADMIN_USER=.*%AUTHELIA_ADMIN_USER=$ADMIN_USER%" "$REPO_DIR/.env"
|
sudo -u "$ACTUAL_USER" sed -i "s%AUTHELIA_ADMIN_USER=.*%AUTHELIA_ADMIN_USER=$ADMIN_USER%" "$REPO_DIR/.env"
|
||||||
sudo -u "$ACTUAL_USER" sed -i "s%# AUTHELIA_ADMIN_EMAIL=.*%AUTHELIA_ADMIN_EMAIL=$ADMIN_EMAIL%" "$REPO_DIR/.env"
|
sudo -u "$ACTUAL_USER" sed -i "s%# AUTHELIA_ADMIN_EMAIL=.*%AUTHELIA_ADMIN_EMAIL=$ADMIN_EMAIL%" "$REPO_DIR/.env"
|
||||||
@@ -1248,6 +1260,46 @@ deploy_dashboards() {
|
|||||||
echo ""
|
echo ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
deploy_arcane() {
|
||||||
|
log_info "Deploying Arcane stack..."
|
||||||
|
log_info " - Arcane (Docker Management UI)"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Create arcane directory
|
||||||
|
sudo mkdir -p /opt/stacks/arcane
|
||||||
|
|
||||||
|
# Copy arcane compose file
|
||||||
|
cp "$REPO_DIR/docker-compose/arcane/docker-compose.yml" /opt/stacks/arcane/docker-compose.yml
|
||||||
|
cp "$REPO_DIR/.env" /opt/stacks/arcane/.env
|
||||||
|
sudo chown "$ACTUAL_USER:$ACTUAL_USER" /opt/stacks/arcane/docker-compose.yml
|
||||||
|
sudo chown "$ACTUAL_USER:$ACTUAL_USER" /opt/stacks/arcane/.env
|
||||||
|
|
||||||
|
# Remove variables that arcane stack doesn't need
|
||||||
|
sed -i '/^AUTHELIA_/d' /opt/stacks/arcane/.env
|
||||||
|
sed -i '/^QBITTORRENT_/d' /opt/stacks/arcane/.env
|
||||||
|
sed -i '/^GRAFANA_/d' /opt/stacks/arcane/.env
|
||||||
|
sed -i '/^CODE_SERVER_/d' /opt/stacks/arcane/.env
|
||||||
|
sed -i '/^JUPYTER_/d' /opt/stacks/arcane/.env
|
||||||
|
sed -i '/^POSTGRES_/d' /opt/stacks/arcane/.env
|
||||||
|
sed -i '/^NEXTCLOUD_/d' /opt/stacks/arcane/.env
|
||||||
|
sed -i '/^GITEA_/d' /opt/stacks/arcane/.env
|
||||||
|
sed -i '/^WORDPRESS_/d' /opt/stacks/arcane/.env
|
||||||
|
sed -i '/^BOOKSTACK_/d' /opt/stacks/arcane/.env
|
||||||
|
sed -i '/^MEDIAWIKI_/d' /opt/stacks/arcane/.env
|
||||||
|
sed -i '/^BITWARDEN_/d' /opt/stacks/arcane/.env
|
||||||
|
sed -i '/^FORMIO_/d' /opt/stacks/arcane/.env
|
||||||
|
sed -i '/^HOMEPAGE_VAR_/d' /opt/stacks/arcane/.env
|
||||||
|
|
||||||
|
# Replace placeholders in arcane compose file
|
||||||
|
localize_yml_file "/opt/stacks/arcane/docker-compose.yml"
|
||||||
|
|
||||||
|
# Deploy arcane stack
|
||||||
|
cd /opt/stacks/arcane
|
||||||
|
run_cmd docker compose up -d || true
|
||||||
|
log_success "Arcane stack deployed"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
# Deployment function
|
# Deployment function
|
||||||
perform_deployment() {
|
perform_deployment() {
|
||||||
debug_log "perform_deployment() called with DEPLOY_CORE=$DEPLOY_CORE, DEPLOY_INFRASTRUCTURE=$DEPLOY_INFRASTRUCTURE, DEPLOY_DASHBOARDS=$DEPLOY_DASHBOARDS, SETUP_STACKS=$SETUP_STACKS"
|
debug_log "perform_deployment() called with DEPLOY_CORE=$DEPLOY_CORE, DEPLOY_INFRASTRUCTURE=$DEPLOY_INFRASTRUCTURE, DEPLOY_DASHBOARDS=$DEPLOY_DASHBOARDS, SETUP_STACKS=$SETUP_STACKS"
|
||||||
@@ -1337,6 +1389,11 @@ perform_deployment() {
|
|||||||
deploy_dashboards
|
deploy_dashboards
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Deploy arcane stack (deployed for both core and additional servers)
|
||||||
|
if [ "$DEPLOY_CORE" = true ] || [ "$DEPLOY_INFRASTRUCTURE" = true ]; then
|
||||||
|
deploy_arcane
|
||||||
|
fi
|
||||||
|
|
||||||
# Setup stacks for Dockge
|
# Setup stacks for Dockge
|
||||||
if [ "$SETUP_STACKS" = true ]; then
|
if [ "$SETUP_STACKS" = true ]; then
|
||||||
setup_stacks_for_dockge
|
setup_stacks_for_dockge
|
||||||
|
|||||||
Reference in New Issue
Block a user