Created
March 24, 2024 04:16
-
-
Save jordanlambrecht/23f9bf5c792226bdc84ba7167fa5f61e to your computer and use it in GitHub Desktop.
Docker-Compose Template
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
name: PROJECT_NAME | |
version: "3.8" | |
# ╔══════════════════════════════════════════════════════════════════════════════╗ | |
# ║ ║ | |
# ║ TEMPLATE ║ | |
# ║ ║ | |
# ╚══════════════════════════════════════════════════════════════════════════════╝ | |
# COMMON SERVICES FRAGMENT | |
x-common-service-config: &common-service-config | |
environment: | |
TZ: ${TZ} | |
PUID: ${PUID} | |
PGID: ${PGID} | |
UMASK: ${UMASK} | |
env_file: | |
- /Users/<redacted>/Docker/_globals/common.env | |
- /Users/<redacted>/Docker/_globals/databases.env | |
- .env | |
networks: | |
- network_universal | |
volumes: | |
- /Users/<redacted>/Docker/_globals/:/_globals/ | |
entrypoint: ["/_globals/init-common.sh"] | |
labels: | |
com.centurylinklabs.watchtower.enable: "true" | |
uptime-kuma.enable: "true" | |
uptime-kuma.url: "http://uptime-kuma:${UPTIME_KUMA_PORT}" | |
restart: unless-stopped | |
# POSTGRESQL SERVICES FRAGMENT | |
x-postgres-config: &postgres-config | |
<<: *common-service-config | |
environment: | |
DATABASE_HOST: postgres | |
DATABASE_PORT: ${POSTGRES_PORT} # Originates from databases.env | |
entrypoint: ["/_globals/init-common.sh", "/_globals/init-postgres.sh"] | |
volumes: | |
- ${POSTGRES_ENTRYPOINT}:/usr/local/bin/init-postgres.sh | |
networks: | |
- network_databases | |
# MARIADB SERVICES FRAGMENT | |
x-mariadb-config: &mariadb-config | |
<<: *common-service-config | |
environment: | |
DATABASE_HOST: mariadb | |
DATABASE_PORT: ${MARIA_PORT} # Originates from databases.env | |
entrypoint: ["/_globals/init-common.sh", "/_globals/init-mariadb.sh"] | |
volumes: | |
- ${MARIA_ENTRYPOINT}:/usr/local/bin/init-mariadb.sh | |
networks: | |
- network_databases | |
# REDIS SERVICES FRAGMENT | |
x-redis-config: &redis-config | |
<<: *common-service-config | |
environment: | |
REDIS_HOST: redis | |
REDIS_PORT: ${REDIS_PORT} # Originates from databases.env | |
entrypoint: ["/_globals/init-common.sh", "/_globals/init-redis.sh"] | |
volumes: | |
- ${REDIS_ENTRYPOINT}:/usr/local/bin/init-redis.sh | |
networks: | |
- network_databases | |
services: | |
# ════════════════════════════════════ | |
# STANDARD SERVICE | |
# ════════════════════════════════════ | |
myservice_non_database: | |
image: myservice-image | |
ports: | |
- "${MYSERVICE_PORT}:8080" | |
labels: | |
# com.centurylinklabs.watchtower.enable: false #Future Self: Uncomment to disable watchtower | |
# uptime-kuma.enable: "false" #Uncomment to disable uptime-kuma | |
# ════════════════════════════════════ | |
# POSTGRES-DEPENDENT SERVICE | |
# ════════════════════════════════════ | |
myservice_postgres: | |
<<: *postgres-config | |
image: myservice-image | |
environment: | |
ports: | |
- "${MYSERVICE_PORT}:8080" | |
# ════════════════════════════════════ | |
# MARIA-DEPENDENT SERVICE | |
# ════════════════════════════════════ | |
myservice_mariadb: | |
<<: *mariadb-config | |
image: myservice-image | |
environment: | |
DATABASE_USER: myservice # specific to this service | |
DATABASE_PASSWORD: myservice # specific to this service | |
DATABASE_NAME: myservice # specific to this service | |
ports: | |
- "${MYSERVICE_PORT}:8080" | |
# ════════════════════════════════════ | |
# REDIS-DEPENDENT SERVICE | |
# ════════════════════════════════════ | |
myservice_redis: | |
<<: *redis-config | |
image: myservice-image | |
ports: | |
- "${MYSERVICE_PORT}:8080" # MYSERVICE_PORT needs to be defined in ./.env for this specific service | |
# ════════════════════════════════════ | |
# NETWORK CONFIG | |
# ════════════════════════════════════ | |
networks: | |
network_universal: | |
name: network_universal | |
external: true | |
network_databases: | |
name: network_databases | |
external: true | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -a # Automatically export all variables | |
source /_globals/common.env | |
set +a # Disable automatic export | |
exec "$@" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -e | |
# Wait for MariaDB to be ready | |
until mysql -h "$MARIADB_HOST" -u "$MARIADB_USER" -p"$MARIADB_PASSWORD" -e '\q'; do | |
>&2 echo "MariaDB is unavailable - sleeping" | |
sleep 1 | |
done | |
>&2 echo "MariaDB is up - executing command" | |
# Generate unique credentials based on the service's name or other criteria | |
DB_NAME="db_${SERVICE_NAME}" | |
DB_USER="user_${SERVICE_NAME}" | |
DB_PASS="pass_${SERVICE_NAME}" | |
# Create the database and user | |
mysql -u "$MARIADB_USER" -p"$MARIADB_PASSWORD" <<-EOSQL | |
CREATE DATABASE IF NOT EXISTS \`$DB_NAME\`; | |
CREATE USER IF NOT EXISTS '$DB_USER'@'%' IDENTIFIED BY '$DB_PASS'; | |
GRANT ALL PRIVILEGES ON \`$DB_NAME\`.* TO '$DB_USER'@'%'; | |
FLUSH PRIVILEGES; | |
EOSQL | |
# Execute the main command | |
exec "$@" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -e | |
# Generate unique credentials based on the service's name or other criteria | |
DB_NAME="db_${SERVICE_NAME}" | |
DB_USER="user_${SERVICE_NAME}" | |
DB_PASS="pass_${SERVICE_NAME}" | |
# Create the database and user | |
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL | |
CREATE DATABASE "$DB_NAME"; | |
CREATE USER "$DB_USER" WITH PASSWORD '$DB_PASS'; | |
GRANT ALL PRIVILEGES ON DATABASE "$DB_NAME" TO "$DB_USER"; | |
EOSQL | |
# Execute the main command | |
exec "$@" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment