diff --git a/README.md b/README.md index b72ed61..54a70c4 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ A preconfigured docker compose with awesome open source tool : - a postgresql database with pgadmin - **hasura** : provide a graphql api on postgresql database and all services listed above - **n8n** : an automation tools +- **umami** : open source analytics +- **listmonk** : newsletters management ## Configuring pgAdmin @@ -13,11 +15,16 @@ A preconfigured docker compose with awesome open source tool : ## Used ports -- pgadmin : `5050` -- hasura : `8080` +- pgadmin : 5050 +- hasura : 8080 +- n8n : 5678 +- umami : 3333 +- listmonk : 9000 ## Hasura console +Doc : https://hasura.io/docs + Launch console from local : hasura console --admin-secret $ADMIN_PASSWORD @@ -25,3 +32,21 @@ Launch console from local : hausar console --no-browser --admin-secret $ADMIN_PASSWORD Alternatively, you can uncomment `admin_secret` in file `hasura/config.yaml` and set your password. + +## n8n + +Doc : https://docs.n8n.io + +## Umami + +Doc : https://umami.is/docs + +Default administrator account username `admin` and the password `umami`. + +## Listmonk + +Doc : https://listmonk.app/docs + +After launched `docker compose up -d`, at the first install we need to populate the database : + + docker-compose run --rm listmonk ./listmonk --install diff --git a/composes/listmonk/config.toml b/composes/listmonk/config.toml new file mode 100644 index 0000000..3f9c3e7 --- /dev/null +++ b/composes/listmonk/config.toml @@ -0,0 +1,28 @@ +[app] +# Interface and port where the app will run its webserver. The default value +# of localhost will only listen to connections from the current machine. To +# listen on all interfaces use '0.0.0.0'. To listen on the default web address +# port, use port 80 (this will require running with elevated permissions). +address = "0.0.0.0:9000" + +# BasicAuth authentication for the admin dashboard. This will eventually +# be replaced with a better multi-user, role-based authentication system. +# IMPORTANT: Leave both values empty to disable authentication on admin +# only where an external authentication is already setup. +admin_username = "listmonk" +admin_password = "listmonk" + +# Database. +[db] +host = "postgres" +port = 5432 +user = "adminuser" +password = "rootpassword" + +# Ensure that this database has been created in Postgres. +database = "listmonk" + +ssl_mode = "disable" +max_open = 25 +max_idle = 25 +max_lifetime = "300s" \ No newline at end of file diff --git a/composes/listmonk/listmonk.yml b/composes/listmonk/listmonk.yml new file mode 100644 index 0000000..834d6fc --- /dev/null +++ b/composes/listmonk/listmonk.yml @@ -0,0 +1,15 @@ +services: + listmonk: + container_name: $APP_NAME-listmonk + image: listmonk/listmonk:latest + restart: always + ports: + - 9000:9000 + depends_on: + postgres: + condition: service_healthy + volumes: + - ./config.toml:/listmonk/config.toml + environment: + - TZ=$GENERIC_TIMEZONE + command: /bin/sh -c "./listmonk --install --idempotent --yes && ./listmonk --upgrade --yes && ./listmonk" diff --git a/composes/postgres/init-data.sh b/composes/postgres/init-data.sh index cb97bc9..cdb608b 100644 --- a/composes/postgres/init-data.sh +++ b/composes/postgres/init-data.sh @@ -17,21 +17,30 @@ else echo "SETUP INFO: No Environment variables given!" fi -# Create n8n table +# Create n8n database if [ -n "$N8N_DB" ] && [ -n "${POSTGRES_NON_ROOT_USER:-}" ] && [ -n "${POSTGRES_NON_ROOT_PASSWORD:-}" ]; then # echo $N8N_SCHEMA $POSTGRES_USER $POSTGRES_NON_ROOT_USER; psql -v ON_ERROR_STOP=1 -U "$POSTGRES_USER" -d "$POSTGRES_DB" <<-EOSQL CREATE DATABASE ${N8N_DB:-n8n}; GRANT ALL PRIVILEGES ON DATABASE ${N8N_DB:-n8n} TO $POSTGRES_NON_ROOT_USER; EOSQL - echo "SETUP n8n database: $N8N_DB" + echo "CREATE $N8N_DB database" fi -# Create umami table +# Create umami database if [ -n "$UMAMI_DB" ] && [ -n "${POSTGRES_NON_ROOT_USER:-}" ] && [ -n "${POSTGRES_NON_ROOT_PASSWORD:-}" ]; then psql -v ON_ERROR_STOP=1 -U "$POSTGRES_USER" -d "$POSTGRES_DB" <<-EOSQL CREATE DATABASE ${UMAMI_DB}; GRANT ALL PRIVILEGES ON DATABASE ${UMAMI_DB} TO $POSTGRES_NON_ROOT_USER; EOSQL - echo "SETUP umami database: $UMAMI_DB" + echo "CREATE $UMAMI_DB database" +fi + +# Create listmonk database +if [ -n "$LISTMONK_DB" ] && [ -n "${POSTGRES_NON_ROOT_USER:-}" ] && [ -n "${POSTGRES_NON_ROOT_PASSWORD:-}" ]; then + psql -v ON_ERROR_STOP=1 -U "$POSTGRES_USER" -d "$POSTGRES_DB" <<-EOSQL + CREATE DATABASE ${LISTMONK_DB}; + GRANT ALL PRIVILEGES ON DATABASE ${LISTMONK_DB} TO $POSTGRES_NON_ROOT_USER; + EOSQL + echo "CREATE $LISTMONK_DB database" fi \ No newline at end of file diff --git a/composes/postgres/postgres.yml b/composes/postgres/postgres.yml index 86c89e6..aec261f 100644 --- a/composes/postgres/postgres.yml +++ b/composes/postgres/postgres.yml @@ -13,6 +13,7 @@ services: - POSTGRES_NON_ROOT_PASSWORD=${POSTGRES_NON_ROOT_PASSWORD:-$POSTGRES_PASSWORD} - N8N_DB - UMAMI_DB + - LISTMONK_DB volumes: - postgres_storage:/var/lib/postgresql/data - ./init-data.sh:/docker-entrypoint-initdb.d/init-data.sh diff --git a/composes/umami/umami.yml b/composes/umami/umami.yml index dbfcd21..24f87fb 100644 --- a/composes/umami/umami.yml +++ b/composes/umami/umami.yml @@ -2,7 +2,7 @@ services: umami: image: ghcr.io/umami-software/umami:postgresql-latest ports: - - 3000:3000 + - 3333:3000 environment: DATABASE_URL: postgres://${POSTGRES_NON_ROOT_USER:-$ADMIN_USER}:${POSTGRES_NON_ROOT_PASSWORD:-$POSTGRES_PASSWORD}@postgres:5432/${UMAMI_DB:-umami} DATABASE_TYPE: postgresql diff --git a/docker-compose.yml b/docker-compose.yml index dcbda27..56c764d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -37,6 +37,11 @@ services: file: composes/umami/umami.yml service: umami + listmonk: + extends: + file: composes/listmonk/listmonk.yml + service: listmonk + volumes: postgres_storage: redis_storage: