diff --git a/composes/hasura/hasura.yml b/composes/hasura/hasura.yml index 2a1f0f6..5578a96 100644 --- a/composes/hasura/hasura.yml +++ b/composes/hasura/hasura.yml @@ -2,23 +2,23 @@ services: hasura: container_name: $APP_NAME-hasura image: hasura/graphql-engine:v2.13.0 #.cli-migrations-v3 + restart: always ports: - - 8080:8080 + - 8080:8080 depends_on: postgres: condition: service_healthy - restart: always # volumes: # - ../../hasura/migrations:/hasura-migrations # - ../../hasura/metadata:/hasura-metadata environment: - HASURA_GRAPHQL_DATABASE_URL: postgres://${ADMIN_USER}:${ADMIN_PASSWORD}@postgres:5432/${POSTGRES_DB:-$APP_NAME} + - HASURA_GRAPHQL_DATABASE_URL=postgres://${POSTGRES_NON_ROOT_USER:-$ADMIN_USER}:${POSTGRES_NON_ROOT_PASSWORD:-$POSTGRES_PASSWORD}@postgres:5432/${HASURA_DB:-postgres} ## enable the console served by server - HASURA_GRAPHQL_ENABLE_CONSOLE: "true" # set to "false" to disable console + - HASURA_GRAPHQL_ENABLE_CONSOLE=true # set to "false" to disable console ## enable debugging mode. It is recommended to disable this in production - HASURA_GRAPHQL_DEV_MODE: "true" - HASURA_GRAPHQL_ENABLED_LOG_TYPES: startup, http-log, webhook-log, websocket-log, query-log - HASURA_GRAPHQL_ADMIN_SECRET: ${HASURA_GRAPHQL_ADMIN_SECRET:-$ADMIN_PASSWORD} - HASURA_GRAPHQL_EXPERIMENTAL_FEATURES: "apollo_federation" + - HASURA_GRAPHQL_DEV_MODE=true + - HASURA_GRAPHQL_ENABLED_LOG_TYPES=startup, http-log, webhook-log, websocket-log, query-log + - HASURA_GRAPHQL_ADMIN_SECRET=${HASURA_GRAPHQL_ADMIN_SECRET:-$ADMIN_PASSWORD} + - HASURA_GRAPHQL_EXPERIMENTAL_FEATURES=apollo_federation - # N8N_DATABASE_URL: postgres://${POSTGRES_NON_ROOT_USER}:${POSTGRES_NON_ROOT_PASSWORD}@postgres:5432/n8n \ No newline at end of file + - N8N_DATABASE_URL=postgres://${POSTGRES_NON_ROOT_USER:-$ADMIN_USER}:${POSTGRES_NON_ROOT_PASSWORD:-$POSTGRES_PASSWORD}@postgres:5432/${N8N_DB:-n8n} diff --git a/composes/n8n/init-data.sh b/composes/n8n/init-data.sh new file mode 100644 index 0000000..9fee3a6 --- /dev/null +++ b/composes/n8n/init-data.sh @@ -0,0 +1,11 @@ +#!/bin/bash +set -e; + +if [ -n "${POSTGRES_NON_ROOT_USER:-}" ] && [ -n "${POSTGRES_NON_ROOT_PASSWORD:-}" ]; then + psql -v ON_ERROR_STOP=1 -U "$POSTGRES_USER" -d "$POSTGRES_DB" -p 5433 <<-EOSQL + CREATE USER ${POSTGRES_NON_ROOT_USER} WITH PASSWORD '${POSTGRES_NON_ROOT_PASSWORD}'; + GRANT ALL PRIVILEGES ON DATABASE ${POSTGRES_DB} TO ${POSTGRES_NON_ROOT_USER}; + EOSQL +else + echo "SETUP INFO: No Environment variables given!" +fi \ No newline at end of file diff --git a/composes/n8n/n8n.yml b/composes/n8n/n8n.yml new file mode 100644 index 0000000..0a5e138 --- /dev/null +++ b/composes/n8n/n8n.yml @@ -0,0 +1,49 @@ +x-shared: &shared + image: n8nio/n8n + restart: always + environment: + - DB_TYPE=postgresdb + - DB_POSTGRESDB_HOST=postgres + - DB_POSTGRESDB_PORT=5432 + - DB_POSTGRESDB_DATABASE=${N8N_DB:-n8n} + - DB_POSTGRESDB_USER=${POSTGRES_NON_ROOT_USER:-$ADMIN_USER} + - DB_POSTGRESDB_PASSWORD=${POSTGRES_NON_ROOT_PASSWORD:-$POSTGRES_PASSWORD} + - EXECUTIONS_MODE=queue + - QUEUE_BULL_REDIS_HOST=redis + - QUEUE_HEALTH_CHECK_ACTIVE=true + - N8N_BASIC_AUTH_ACTIVE=true + - N8N_BASIC_AUTH_USER=${N8N_BASIC_AUTH_USER:-$ADMIN_USER} + - N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD:-$ADMIN_PASSWORD} + - WEBHOOK_URL=${N8N_WEBHOOK_URL:-} + - N8N_EMAIL_MODE=smtp + - N8N_SMTP_HOST=${SMTP_HOST} + - N8N_SMTP_USER=${SMTP_USER} + - N8N_SMTP_PASS=${SMTP_PASS} + - N8N_SMTP_SENDER=${SMTP_SENDER} + - GENERIC_TIMEZONE=${GENERIC_TIMEZONE} + links: + - postgres + - redis + volumes: + - n8n_storage:/home/node/ + - n8n_storage:/files + depends_on: + redis: + condition: service_healthy + postgres: + condition: service_healthy + +services: + n8n: + <<: *shared + container_name: $APP_NAME-n8n + command: /bin/sh -c "n8n start --tunnel" + ports: + - 5678:5678 + + n8n-worker: + <<: *shared + container_name: $APP_NAME-n8n-worker + command: /bin/sh -c "sleep 5; n8n worker" + depends_on: + - n8n diff --git a/composes/pgadmin/pgadmin.yml b/composes/pgadmin/pgadmin.yml index 0d1bd42..68e9746 100644 --- a/composes/pgadmin/pgadmin.yml +++ b/composes/pgadmin/pgadmin.yml @@ -10,4 +10,4 @@ services: restart: always depends_on: postgres: - condition: service_healthy \ No newline at end of file + condition: service_healthy diff --git a/composes/postgres/init-data.sh b/composes/postgres/init-data.sh index 779b0b5..e2e8257 100644 --- a/composes/postgres/init-data.sh +++ b/composes/postgres/init-data.sh @@ -2,15 +2,28 @@ set -e; # Add postgis -psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL - CREATE EXTENSION postgis; +psql -v ON_ERROR_STOP=1 -U "$POSTGRES_USER" -d "$POSTGRES_DB" <<-EOSQL + CREATE EXTENSION IF NOT EXISTS postgis; + CREATE EXTENSION IF NOT EXISTS postgis_topology; EOSQL +# Create non root user and add privileges if [ -n "${POSTGRES_NON_ROOT_USER:-}" ] && [ -n "${POSTGRES_NON_ROOT_PASSWORD:-}" ]; then - psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL - CREATE USER ${POSTGRES_NON_ROOT_USER} WITH PASSWORD '${POSTGRES_NON_ROOT_PASSWORD}'; - GRANT ALL PRIVILEGES ON DATABASE ${POSTGRES_DB} TO ${POSTGRES_NON_ROOT_USER}; + psql -v ON_ERROR_STOP=1 -U "$POSTGRES_USER" -d "$POSTGRES_DB" <<-EOSQL + CREATE USER $POSTGRES_NON_ROOT_USER WITH PASSWORD '$POSTGRES_NON_ROOT_PASSWORD'; + GRANT ALL PRIVILEGES ON DATABASE $POSTGRES_DB TO $POSTGRES_NON_ROOT_USER; EOSQL else echo "SETUP INFO: No Environment variables given!" +fi + +# Create n8n table +if [ -n "${N8N_DB:-n8n}" ] && [ -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 +else + echo "SETUP INFO: No N8N_DB given!" fi \ No newline at end of file diff --git a/composes/postgres/postgres.yml b/composes/postgres/postgres.yml index 0ce1a2d..32279c7 100644 --- a/composes/postgres/postgres.yml +++ b/composes/postgres/postgres.yml @@ -6,11 +6,11 @@ services: dockerfile: Dockerfile restart: always environment: - - POSTGRES_DB=${POSTGRES_DB:-$APP_NAME} - - POSTGRES_USER=${POSTGRES_USER:-$ROOT_USER} - - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-$ROOT_PASSWORD} + - POSTGRES_DB=${POSTGRES_DB:-postgres} + - POSTGRES_USER=${POSTGRES_USER:-postgres} + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - POSTGRES_NON_ROOT_USER=${POSTGRES_NON_ROOT_USER:-$ADMIN_USER} - - POSTGRES_NON_ROOT_PASSWORD=${POSTGRES_NON_ROOT_PASSWORD:-$ADMIN_PASSWORD} + - POSTGRES_NON_ROOT_PASSWORD=${POSTGRES_NON_ROOT_PASSWORD:-$POSTGRES_PASSWORD} volumes: - postgres_storage:/var/lib/postgresql/data - ./init-data.sh:/docker-entrypoint-initdb.d/init-data.sh @@ -18,7 +18,7 @@ services: test: [ 'CMD-SHELL', - 'pg_isready -h localhost -U ${POSTGRES_USER:-$ROOT_USER} -d ${POSTGRES_DB:-$APP_NAME}', + 'pg_isready -h localhost -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-postgres}', ] interval: 5s timeout: 5s diff --git a/composes/redis/redis.yml b/composes/redis/redis.yml new file mode 100644 index 0000000..d18114f --- /dev/null +++ b/composes/redis/redis.yml @@ -0,0 +1,11 @@ +services: + redis: + image: redis:6-alpine + restart: always + volumes: + - redis_storage:/data + healthcheck: + test: ['CMD', 'redis-cli', 'ping'] + interval: 5s + timeout: 5s + retries: 10 diff --git a/docker-compose.yml b/docker-compose.yml index b654bfa..dbc6e4c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -18,5 +18,21 @@ services: file: composes/hasura/hasura.yml service: hasura + redis: + extends: + file: composes/redis/redis.yml + service: redis + + n8n: + extends: + file: composes/n8n/n8n.yml + service: n8n + n8n-worker: + extends: + file: composes/n8n/n8n.yml + service: n8n-worker + volumes: postgres_storage: + redis_storage: + n8n_storage: