udpated the config, add cnames,. docker compose, tunnel configs.

This commit is contained in:
admin 2025-05-28 14:53:33 -06:00
parent 3b091eb57a
commit 588a3255a9
7 changed files with 317 additions and 163 deletions

View File

@ -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() {

284
config.sh
View File

@ -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..."

View File

@ -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

View File

@ -12,9 +12,6 @@
- Homepage:
- abbr: HP
href: https://gethomepage.dev/
- Silex:
- abbr: SX
href: https://www.silex.me/
- Services:
- Listmonk:

View File

@ -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

View File

@ -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

View File

@ -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