From 588a3255a93a7fd4ba998c94c64742d73cb6abaf Mon Sep 17 00:00:00 2001 From: admin Date: Wed, 28 May 2025 14:53:33 -0600 Subject: [PATCH] udpated the config, add cnames,. docker compose, tunnel configs. --- add-cname-records.sh | 35 +-- config.sh | 284 ++++++++++++------ configs/cloudflare/tunnel-config.yml | 31 ++ configs/homepage/bookmarks.yaml | 5 +- configs/homepage/services.yaml | 18 +- .../services.yaml.backup_20250528_144546 | 78 +++++ docker-compose.yml | 29 -- 7 files changed, 317 insertions(+), 163 deletions(-) create mode 100644 configs/cloudflare/tunnel-config.yml create mode 100644 configs/homepage/services.yaml.backup_20250528_144546 diff --git a/add-cname-records.sh b/add-cname-records.sh index 1b7aef2..1b8c475 100755 --- a/add-cname-records.sh +++ b/add-cname-records.sh @@ -53,26 +53,14 @@ if ! command -v jq &> /dev/null; then exit 1 fi -# Array of subdomains that need DNS records +# Array of subdomains that need DNS records - updated to match our active services SUBDOMAINS=( - "homepage" - "excalidraw" + "dashboard" + "code" "listmonk" - "monica" - "flatnotes" - "code-server" - "ollama" - "open-webui" - "gitea" - "mini-qr" - "ferdium" - "answer" - "nocodb" + "docs" "n8n" - "convertx" - "rocket" - "live" - "vw" + "db" ) # Function to check if DNS record already exists @@ -151,9 +139,8 @@ echo "Setting up Cloudflare Access Protection" echo "-------------------------------------------------------------" echo "" echo "The following services will be protected with authentication:" -echo " - homepage.$CF_DOMAIN" -echo " - code-server.$CF_DOMAIN" -echo " - live.$CF_DOMAIN" +echo " - dashboard.$CF_DOMAIN" +echo " - code.$CF_DOMAIN" echo "" echo "Please enter the admin email address that should have access:" read ADMIN_EMAIL @@ -164,11 +151,11 @@ if [[ ! "$ADMIN_EMAIL" =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]]; t exit 1 fi -# Services that require authentication -PROTECTED_SERVICES=("homepage" "code-server" "live") +# Services that require authentication - updated for our use case +PROTECTED_SERVICES=("dashboard" "code") -# Services that should have bypass policies (public access) -BYPASS_SERVICES=("excalidraw" "listmonk" "monica" "flatnotes" "ollama" "open-webui" "gitea" "mini-qr" "ferdium" "answer" "nocodb" "n8n" "convertx" "rocket" "vw") +# Services that should have bypass policies (public access) - updated for our use case +BYPASS_SERVICES=("listmonk" "docs" "n8n" "db") # Function to create access application with email authentication create_protected_app() { diff --git a/config.sh b/config.sh index ad4c949..56888d0 100755 --- a/config.sh +++ b/config.sh @@ -21,6 +21,9 @@ EOF SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" ENV_FILE="$SCRIPT_DIR/.env" MKDOCS_YML="$SCRIPT_DIR/mkdocs/docs/mkdocs.yml" +TUNNEL_CONFIG_DIR="$SCRIPT_DIR/configs/cloudflare" +TUNNEL_CONFIG_FILE="$TUNNEL_CONFIG_DIR/tunnel-config.yml" +SERVICES_YAML="$SCRIPT_DIR/configs/homepage/services.yaml" echo "Looking for .env file at: $ENV_FILE" @@ -34,13 +37,27 @@ generate_password() { update_env_var() { local key=$1 local value=$2 - local escaped_value=$(echo "$value" | sed 's/[\/&]/\\&/g') + # More robust method to handle special characters in passwords if grep -q "^$key=" "$ENV_FILE"; then - sed -i "s/^$key=.*/$key=$escaped_value/" "$ENV_FILE" + # Create a temporary file + local tmpfile=$(mktemp) + + # Process the .env file line by line + while IFS= read -r line; do + if [[ "$line" =~ ^$key= ]]; then + echo "$key=$value" >> "$tmpfile" + else + echo "$line" >> "$tmpfile" + fi + done < "$ENV_FILE" + + # Replace the original file with the temporary file + mv "$tmpfile" "$ENV_FILE" echo "Updated $key in .env file" else - echo "$key=$escaped_value" >> "$ENV_FILE" + # Add new key-value pair if it doesn't exist + echo "$key=$value" >> "$ENV_FILE" echo "Added $key to .env file" fi } @@ -85,14 +102,12 @@ MKDOCS_SITE_SERVER_PORT=4001 N8N_PORT=5678 NOCODB_PORT=8090 HOMEPAGE_PORT=3010 -SILEX_PORT=6805 # Domain Configuration BASE_DOMAIN=https://changeme.org DOMAIN=changeme.org LISTMONK_HOSTNAME=listmonk.changeme.org N8N_HOST=n8n.changeme.org -SILEX_HOST=silex.changeme.org # Cloudflare Configuration CF_API_TOKEN=your_cloudflare_api_token @@ -121,21 +136,6 @@ NOCODB_JWT_SECRET=changeMe NOCODB_DB_NAME=nocodb NOCODB_DB_USER=noco NOCODB_DB_PASSWORD=changeMe - -# Listmonk SMTP Configuration -LISTMONK_SMTP_HOST=smtp.example.com -LISTMONK_SMTP_PORT=587 -LISTMONK_SMTP_AUTH_PROTOCOL=plain -LISTMONK_SMTP_USERNAME=your-smtp-username -LISTMONK_SMTP_PASSWORD=your-smtp-password -LISTMONK_SMTP_HELLO_HOSTNAME=listmonk.changeme.org -LISTMONK_SMTP_TLS_ENABLED=true -LISTMONK_SMTP_TLS_SKIP_VERIFY=false -LISTMONK_SMTP_MAX_CONNS=10 -LISTMONK_SMTP_MAX_MSG_RETRIES=2 -LISTMONK_SMTP_IDLE_TIMEOUT=10s -LISTMONK_SMTP_WAIT_TIMEOUT=5s -LISTMONK_SMTP_EMAIL_HEADERS=List-Unsubscribe-Post=List-Unsubscribe=One-Click EOL echo "New .env file created with default values." @@ -170,6 +170,38 @@ update_mkdocs_yml() { fi } +# Function to update service URLs in services.yaml +update_services_yaml() { + local new_domain=$1 + + if [ ! -f "$SERVICES_YAML" ]; then + echo "Warning: services.yaml not found at $SERVICES_YAML" + return 1 + fi + + echo "Updating service URLs in services.yaml..." + + # Create a backup of the services.yaml file + local timestamp=$(date +"%Y%m%d_%H%M%S") + local backup_file="${SERVICES_YAML}.backup_${timestamp}" + cp "$SERVICES_YAML" "$backup_file" + echo "Created backup of services.yaml at $backup_file" + + # Update the commented URLs to use the new domain + sed -i "s|# href: \"https://code\.changeme\.org\"|# href: \"https://code.$new_domain\"|g" "$SERVICES_YAML" + sed -i "s|# href: \"https://listmonk\.changeme\.org\"|# href: \"https://listmonk.$new_domain\"|g" "$SERVICES_YAML" + sed -i "s|# href: \"https://db\.changeme\.org\"|# href: \"https://db.$new_domain\"|g" "$SERVICES_YAML" + sed -i "s|# href: \"https://docs\.changeme\.org\"|# href: \"https://docs.$new_domain\"|g" "$SERVICES_YAML" + sed -i "s|# href: \"https://n8n\.changeme\.org\"|# href: \"https://n8n.$new_domain\"|g" "$SERVICES_YAML" + sed -i "s|# href: \"https://test\.com\"|# href: \"https://$new_domain\"|g" "$SERVICES_YAML" + + # Also update any remaining changeme.org references + sed -i "s|changeme\.org|$new_domain|g" "$SERVICES_YAML" + + echo "Updated service URLs in services.yaml to use domain: $new_domain" + return 0 +} + # Function to check if a port is in use check_port() { local port=$1 @@ -201,7 +233,6 @@ check_port_conflicts() { "${N8N_PORT:-5678}:N8N" "${NOCODB_PORT:-8090}:NocoDB" "${HOMEPAGE_PORT:-3010}:Homepage" - "${SILEX_PORT:-6805}:Silex" ) local conflicts_found=false @@ -303,15 +334,114 @@ configure_alternative_ports() { fi fi - # Silex - if check_port "${SILEX_PORT:-6805}"; then - read -p "Enter alternative port for Silex [current: ${SILEX_PORT:-6805}]: " new_silex_port - if [ ! -z "$new_silex_port" ]; then - update_env_var "SILEX_PORT" "$new_silex_port" - fi + echo "Port configuration completed." +} + +# Function to create Cloudflare tunnel configuration file +create_tunnel_config() { + local domain=$1 + local tunnel_id=$2 + + # Ensure the tunnel config directory exists + if [ ! -d "$TUNNEL_CONFIG_DIR" ]; then + echo "Creating Cloudflare tunnel config directory at $TUNNEL_CONFIG_DIR" + mkdir -p "$TUNNEL_CONFIG_DIR" fi - echo "Port configuration completed." + echo "Creating Cloudflare tunnel configuration file..." + + # Generate the tunnel configuration file with simpler format + cat > "$TUNNEL_CONFIG_FILE" << EOL +# filepath: /home/bunker-admin/changemaker.lite/configs/cloudflare/tunnel-config.yml +# Cloudflare Tunnel Configuration +# Auto-generated by Changemaker Configuration Wizard + +tunnel: $tunnel_id # e.g. 1234567890abcdef +credentials-file: /home/coder/.cloudflared/$tunnel_id.json # e.g. /home/coder/.cloudflared/[insert tunnel number].json +ingress: + + - hostname: dashboard.$domain + service: http://localhost:${HOMEPAGE_PORT:-3010} + + - hostname: code.$domain + service: http://localhost:${CODE_SERVER_PORT:-8888} + + - hostname: listmonk.$domain + service: http://localhost:${LISTMONK_PORT:-9000} + + - hostname: docs.$domain + service: http://localhost:${MKDOCS_PORT:-4000} + + - hostname: $domain + service: http://localhost:${MKDOCS_SITE_SERVER_PORT:-4001} + + - hostname: n8n.$domain + service: http://localhost:${N8N_PORT:-5678} + + - hostname: db.$domain + service: http://localhost:${NOCODB_PORT:-8090} + + # Catch-all rule (required) + - service: http_status:404 +EOL + + echo "✅ Tunnel configuration file created at: $TUNNEL_CONFIG_FILE" + + # If the tunnel ID is a placeholder, provide instructions + if [[ "$tunnel_id" == "\${CF_TUNNEL_ID}" ]]; then + echo "NOTE: You need to replace ${CF_TUNNEL_ID} with your actual Cloudflare Tunnel ID" + echo " once you create a tunnel in the Cloudflare Zero Trust dashboard." + fi +} + +# Function to show tunnel setup instructions +show_tunnel_instructions() { + local domain=$1 + + echo "" + echo "=== Cloudflare Tunnel Setup Instructions ===" + echo "" + echo "To complete the tunnel setup:" + echo "" + echo "1. Install cloudflared on your server:" + echo " https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation" + echo "" + echo "2. Create a tunnel using the Cloudflare dashboard or run:" + echo " cloudflared tunnel create changemaker-tunnel" + echo "" + echo "3. Copy the credentials file to the correct location:" + echo " mkdir -p /home/coder/.cloudflared" + echo " cp ~/.cloudflared/[TUNNEL-ID].json /home/coder/.cloudflared/" + echo "" + echo "4. Update your .env with the correct CF_TUNNEL_ID if not already done" + echo "" + echo "5. Start the tunnel with your configuration file:" + echo " cloudflared tunnel --config $TUNNEL_CONFIG_FILE run" + echo "" + echo "6. After verifying it works, you can create a systemd service for automatic startup:" + echo " sudo cloudflared service install" + echo "" + echo "7. Your services will be available at the following URLs:" + echo " - Documentation: https://$domain" + echo " - Dashboard: https://dashboard.$domain" + echo " - Code Server: https://code.$domain" + echo " - Listmonk: https://listmonk.$domain" + echo " - N8N: https://n8n.$domain" + echo " - NocoDB: https://db.$domain" + echo " - MkDocs Dev: https://docs.$domain" + echo "" +} + +# Function to load environment variables from .env file +load_env_vars() { + if [ -f "$ENV_FILE" ]; then + # Load variables from .env file, ignoring comments and empty lines + while IFS= read -r line; do + if [[ "$line" =~ ^[A-Za-z_][A-Za-z0-9_]*= ]]; then + export "$line" + fi + done < <(grep -E '^[A-Za-z_][A-Za-z0-9_]*=' "$ENV_FILE") + fi } # Initialize a new .env file if it doesn't exist @@ -324,6 +454,9 @@ else backup_env_file fi +# Load existing environment variables +load_env_vars + echo -e "\n\nWelcome to Changemaker Config!\n" echo "This script will help you configure your .env file for Changemaker." echo "Please provide the following information:" @@ -341,9 +474,9 @@ echo -e "\nUpdating domain settings in .env file..." # Update main domain settings update_env_var "DOMAIN" "$domain_name" update_env_var "BASE_DOMAIN" "https://$domain_name" +update_env_var "HOMEPAGE_VAR_BASE_URL" "https://$domain_name" update_env_var "LISTMONK_HOSTNAME" "listmonk.$domain_name" update_env_var "N8N_HOST" "n8n.$domain_name" -update_env_var "SILEX_HOST" "silex.$domain_name" update_env_var "CF_DOMAIN" "$domain_name" echo "Domain settings updated successfully!" @@ -401,41 +534,59 @@ if [[ ! "$configure_cf" =~ ^[Nn]$ ]]; then if [[ "$cf_tunnel_id" =~ ^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$ ]]; then update_env_var "CF_TUNNEL_ID" "$cf_tunnel_id" echo "✅ Cloudflare Tunnel ID updated" + + # Create tunnel configuration with the provided tunnel ID + create_tunnel_config "$domain_name" "$cf_tunnel_id" else echo "⚠️ Warning: Tunnel ID format seems incorrect (should be UUID format)" update_env_var "CF_TUNNEL_ID" "$cf_tunnel_id" + + # Still create the config file even with potentially incorrect format + create_tunnel_config "$domain_name" "$cf_tunnel_id" fi else echo "⚠️ Cloudflare Tunnel ID left unchanged" + # Create template config without tunnel ID + create_tunnel_config "$domain_name" "\${CF_TUNNEL_ID}" fi echo "" echo "Cloudflare configuration completed!" echo "You can now run './add-cname-records.sh' to set up DNS records." + + # Show tunnel setup instructions + show_tunnel_instructions "$domain_name" else echo "Skipping Cloudflare configuration. You can run this script again later to configure it." + # Still create a template tunnel config + echo "" + read -p "Do you want to create a template tunnel configuration anyway? [Y/n]: " create_template + if [[ ! "$create_template" =~ ^[Nn]$ ]]; then + create_tunnel_config "$domain_name" "\${CF_TUNNEL_ID}" + echo "Template tunnel configuration created. Update CF_TUNNEL_ID in .env and regenerate if needed." + fi fi # Update the site_url in mkdocs.yml echo -e "\nUpdating site_url in mkdocs.yml..." update_mkdocs_yml "$domain_name" -# Check for port conflicts -echo -e "\n---- Checking Port Availability ----" -check_port_conflicts +# Update service URLs in services.yaml +echo -e "\nUpdating service URLs in services.yaml..." +update_services_yaml "$domain_name" # Listmonk Admin Credentials configuration echo -e "\n---- Listmonk Admin Credentials ----" -read -p "Enter Listmonk admin username [default: admin]: " listmonk_user -read -sp "Enter Listmonk admin password [default: strongpassword]: " listmonk_password +read -p "Enter Listmonk admin email/username [default: admin@example.com]: " listmonk_user +read -sp "Enter Listmonk admin password [default: changeMe]: " listmonk_password echo # Add new line after password input if [ -z "$listmonk_user" ]; then - listmonk_user="admin" + listmonk_user="admin@example.com" fi if [ -z "$listmonk_password" ]; then - listmonk_password="strongpassword" + listmonk_password="changeMe" fi update_env_var "LISTMONK_ADMIN_USER" "$listmonk_user" @@ -462,67 +613,6 @@ update_env_var "N8N_USER_PASSWORD" "$n8n_password" echo "N8N admin credentials updated." -# SMTP Configuration -echo -e "\n---- SMTP Configuration ----" -echo "Configure SMTP settings for sending emails through Listmonk." -read -p "Do you want to configure SMTP settings now? [Y/n]: " configure_smtp - -if [[ ! "$configure_smtp" =~ ^[Nn]$ ]]; then - echo "" - echo "Please enter your SMTP server details:" - - read -p "SMTP Host (e.g., smtp.gmail.com, smtp.sendgrid.net): " smtp_host - read -p "SMTP Port [default: 587]: " smtp_port - read -p "SMTP Username/Email: " smtp_username - read -sp "SMTP Password: " smtp_password - echo - read -p "Hello Hostname [default: ${LISTMONK_HOSTNAME:-listmonk.changeme.org}]: " smtp_hello - read -p "Enable TLS? [Y/n]: " smtp_tls - - # Set defaults - if [ -z "$smtp_port" ]; then - smtp_port="587" - fi - - if [ -z "$smtp_hello" ]; then - smtp_hello="${LISTMONK_HOSTNAME:-listmonk.changeme.org}" - fi - - if [[ "$smtp_tls" =~ ^[Nn]$ ]]; then - smtp_tls_enabled="false" - else - smtp_tls_enabled="true" - fi - - # Update SMTP settings in .env - if [ ! -z "$smtp_host" ]; then - update_env_var "LISTMONK_SMTP_HOST" "$smtp_host" - fi - - update_env_var "LISTMONK_SMTP_PORT" "$smtp_port" - - if [ ! -z "$smtp_username" ]; then - update_env_var "LISTMONK_SMTP_USERNAME" "$smtp_username" - fi - - if [ ! -z "$smtp_password" ]; then - update_env_var "LISTMONK_SMTP_PASSWORD" "$smtp_password" - fi - - update_env_var "LISTMONK_SMTP_HELLO_HOSTNAME" "$smtp_hello" - update_env_var "LISTMONK_SMTP_TLS_ENABLED" "$smtp_tls_enabled" - update_env_var "LISTMONK_SMTP_AUTH_PROTOCOL" "plain" - update_env_var "LISTMONK_SMTP_TLS_SKIP_VERIFY" "false" - update_env_var "LISTMONK_SMTP_MAX_CONNS" "10" - update_env_var "LISTMONK_SMTP_MAX_MSG_RETRIES" "2" - update_env_var "LISTMONK_SMTP_IDLE_TIMEOUT" "10s" - update_env_var "LISTMONK_SMTP_WAIT_TIMEOUT" "5s" - - echo "✅ SMTP configuration completed!" -else - echo "Skipping SMTP configuration. You can configure this later in the Listmonk admin interface." -fi - # Generate secure passwords for database and encryption echo -e "\n---- Generating Secure Passwords ----" echo "Generating secure passwords for database and encryption keys..." diff --git a/configs/cloudflare/tunnel-config.yml b/configs/cloudflare/tunnel-config.yml new file mode 100644 index 0000000..0b0e15d --- /dev/null +++ b/configs/cloudflare/tunnel-config.yml @@ -0,0 +1,31 @@ +# filepath: /home/bunker-admin/changemaker.lite/configs/cloudflare/tunnel-config.yml +# Cloudflare Tunnel Configuration +# Auto-generated by Changemaker Configuration Wizard + +tunnel: test # e.g. 1234567890abcdef +credentials-file: /home/coder/.cloudflared/test.json # e.g. /home/coder/.cloudflared/[insert tunnel number].json +ingress: + + - hostname: dashboard.reed.com + service: http://localhost:3010 + + - hostname: code.reed.com + service: http://localhost:8888 + + - hostname: listmonk.reed.com + service: http://localhost:9000 + + - hostname: docs.reed.com + service: http://localhost:4000 + + - hostname: reed.com + service: http://localhost:4001 + + - hostname: n8n.reed.com + service: http://localhost:5678 + + - hostname: db.reed.com + service: http://localhost:8090 + + # Catch-all rule (required) + - service: http_status:404 diff --git a/configs/homepage/bookmarks.yaml b/configs/homepage/bookmarks.yaml index 04959f8..544bf52 100755 --- a/configs/homepage/bookmarks.yaml +++ b/configs/homepage/bookmarks.yaml @@ -12,10 +12,7 @@ - Homepage: - abbr: HP href: https://gethomepage.dev/ - - Silex: - - abbr: SX - href: https://www.silex.me/ - + - Services: - Listmonk: - abbr: LM diff --git a/configs/homepage/services.yaml b/configs/homepage/services.yaml index ce97f59..db1a4aa 100644 --- a/configs/homepage/services.yaml +++ b/configs/homepage/services.yaml @@ -1,10 +1,10 @@ --- -# For public access, replace "http://localhost" with your domain (e.g., "https://changeme.org") +# For public access, replace "http://localhost" with your subdomain URLs - Essential Tools: - Code Server: href: "http://localhost:8888" - # href: "https://changeme.org:8888" # Uncomment for public access + # href: "https://code.reed.com" # Uncomment for public access description: VS Code in the browser icon: mdi-code-braces widget: @@ -13,7 +13,7 @@ server: my-docker - Listmonk: href: "http://localhost:9000" - # href: "https://changeme.org:9000" # Uncomment for public access + # href: "https://listmonk.reed.com" # Uncomment for public access description: Newsletter & mailing list manager icon: mdi-email-newsletter widget: @@ -22,18 +22,18 @@ server: my-docker - NocoDB: href: "http://localhost:8090" - # href: "https://changeme.org:8090" # Uncomment for public access + # href: "https://db.reed.com" # Uncomment for public access description: No-code database platform icon: mdi-database widget: type: docker - container: nocodb + container: changemakerlite-nocodb-1 server: my-docker - Content & Documentation: - MkDocs (Live): href: "http://localhost:4000" - # href: "https://changeme.org:4000" # Uncomment for public access + # href: "https://docs.reed.com" # Uncomment for public access description: Live documentation server with hot reload icon: mdi-book-open-page-variant widget: @@ -42,7 +42,7 @@ server: my-docker - Static Site: href: "http://localhost:4001" - # href: "https://changeme.org:4001" # Uncomment for public access + # href: "https://reed.com" # Uncomment for public access description: Built documentation hosting icon: mdi-web widget: @@ -53,7 +53,7 @@ - Automation & Infrastructure: - n8n: href: "http://localhost:5678" - # href: "https://changeme.org:5678" # Uncomment for public access + # href: "https://n8n.reed.com" # Uncomment for public access description: Workflow automation platform icon: mdi-workflow widget: @@ -74,5 +74,5 @@ icon: mdi-database-outline widget: type: docker - container: root_db + container: changemakerlite-root_db-1 server: my-docker diff --git a/configs/homepage/services.yaml.backup_20250528_144546 b/configs/homepage/services.yaml.backup_20250528_144546 new file mode 100644 index 0000000..b3d9172 --- /dev/null +++ b/configs/homepage/services.yaml.backup_20250528_144546 @@ -0,0 +1,78 @@ +--- +# For public access, replace "http://localhost" with your subdomain URLs + +- Essential Tools: + - Code Server: + href: "http://localhost:8888" + # href: "https://code.changeme.org" # Uncomment for public access + description: VS Code in the browser + icon: mdi-code-braces + widget: + type: docker + container: code-server-changemaker + server: my-docker + - Listmonk: + href: "http://localhost:9000" + # href: "https://listmonk.changeme.org" # Uncomment for public access + description: Newsletter & mailing list manager + icon: mdi-email-newsletter + widget: + type: docker + container: listmonk_app + server: my-docker + - NocoDB: + href: "http://localhost:8090" + # href: "https://db.changeme.org" # Uncomment for public access + description: No-code database platform + icon: mdi-database + widget: + type: docker + container: changemakerlite-nocodb-1 + server: my-docker + +- Content & Documentation: + - MkDocs (Live): + href: "http://localhost:4000" + # href: "https://docs.changeme.org" # Uncomment for public access + description: Live documentation server with hot reload + icon: mdi-book-open-page-variant + widget: + type: docker + container: mkdocs-changemaker + server: my-docker + - Static Site: + href: "http://localhost:4001" + # href: "https://test.com" # Uncomment for public access + description: Built documentation hosting + icon: mdi-web + widget: + type: docker + container: mkdocs-site-server-changemaker + server: my-docker + +- Automation & Infrastructure: + - n8n: + href: "http://localhost:5678" + # href: "https://n8n.changeme.org" # Uncomment for public access + description: Workflow automation platform + icon: mdi-workflow + widget: + type: docker + container: n8n-changemaker + server: my-docker + - PostgreSQL (Listmonk): + href: "#" + description: Database for Listmonk + icon: mdi-database-outline + widget: + type: docker + container: listmonk-db + server: my-docker + - PostgreSQL (NocoDB): + href: "#" + description: Database for NocoDB + icon: mdi-database-outline + widget: + type: docker + container: changemakerlite-root_db-1 + server: my-docker diff --git a/docker-compose.yml b/docker-compose.yml index 8299831..ab117e7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -29,35 +29,6 @@ services: hostname: ${LISTMONK_HOSTNAME} depends_on: - listmonk-db - command: [sh, -c, "./listmonk --install --idempotent --yes --config '' && ./listmonk --upgrade --yes --config '' && ./listmonk --config ''"] - environment: - LISTMONK_app__address: 0.0.0.0:9000 - LISTMONK_db__user: ${POSTGRES_USER} - LISTMONK_db__password: ${POSTGRES_PASSWORD} - LISTMONK_db__database: ${POSTGRES_DB} - LISTMONK_db__host: listmonk-db - LISTMONK_db__port: 5432 - LISTMONK_db__ssl_mode: disable - LISTMONK_db__max_open: 25 - LISTMONK_db__max_idle: 25 - LISTMONK_db__max_lifetime: 300s - TZ: Etc/UTC - LISTMONK_ADMIN_USER: ${LISTMONK_ADMIN_USER:-} - LISTMONK_ADMIN_PASSWORD: ${LISTMONK_ADMIN_PASSWORD:-} - # SMTP Configuration - LISTMONK_smtp__host: ${LISTMONK_SMTP_HOST:-} - LISTMONK_smtp__port: ${LISTMONK_SMTP_PORT:-587} - LISTMONK_smtp__auth_protocol: ${LISTMONK_SMTP_AUTH_PROTOCOL:-plain} - LISTMONK_smtp__username: ${LISTMONK_SMTP_USERNAME:-} - LISTMONK_smtp__password: ${LISTMONK_SMTP_PASSWORD:-} - LISTMONK_smtp__hello_hostname: ${LISTMONK_SMTP_HELLO_HOSTNAME:-} - LISTMONK_smtp__tls_enabled: ${LISTMONK_SMTP_TLS_ENABLED:-true} - LISTMONK_smtp__tls_skip_verify: ${LISTMONK_SMTP_TLS_SKIP_VERIFY:-false} - LISTMONK_smtp__max_conns: ${LISTMONK_SMTP_MAX_CONNS:-10} - LISTMONK_smtp__max_msg_retries: ${LISTMONK_SMTP_MAX_MSG_RETRIES:-2} - LISTMONK_smtp__idle_timeout: ${LISTMONK_SMTP_IDLE_TIMEOUT:-10s} - LISTMONK_smtp__wait_timeout: ${LISTMONK_SMTP_WAIT_TIMEOUT:-5s} - LISTMONK_smtp__email_headers: ${LISTMONK_SMTP_EMAIL_HEADERS:-} volumes: - ./assets/uploads:/listmonk/uploads:rw