oneuptime/docker-compose.base.yml
2023-10-09 19:18:46 +01:00

454 lines
12 KiB
YAML

version: '3.7'
x-common-variables: &common-variables
HOST: ${HOST}
HTTP_PROTOCOL: ${HTTP_PROTOCOL}
NODE_ENV: ${ENVIRONMENT}
BILLING_ENABLED: ${BILLING_ENABLED}
BILLING_PUBLIC_KEY: ${BILLING_PUBLIC_KEY}
SUBSCRIPTION_PLAN_BASIC: ${SUBSCRIPTION_PLAN_BASIC}
SUBSCRIPTION_PLAN_GROWTH: ${SUBSCRIPTION_PLAN_GROWTH}
SUBSCRIPTION_PLAN_SCALE: ${SUBSCRIPTION_PLAN_SCALE}
SUBSCRIPTION_PLAN_ENTERPRISE: ${SUBSCRIPTION_PLAN_ENTERPRISE}
METERED_PLAN_ACTIVE_MONITORING: ${METERED_PLAN_ACTIVE_MONITORING}
ANALYTICS_KEY: ${ANALYTICS_KEY}
ANALYTICS_HOST: ${ANALYTICS_HOST}
SERVER_ACCOUNTS_HOSTNAME: accounts
SERVER_REALTIME_HOSTNAME: realtime
SERVER_DASHBOARD_API_HOSTNAME: dashboard-api
SERVER_WORKFLOW_HOSTNAME: workflow
SERVER_LINK_SHORTENER_HOSTNAME: link-shortener
SERVER_ALERT_HOSTNAME: alert
SERVER_INGESTOR_HOSTNAME: ingestor
SERVER_TEST_SERVER_HOSTNAME: test-server
SERVER_FILE_HOSTNAME: file
SERVER_HOME_HOSTNAME: home
SERVER_IDENTITY_HOSTNAME: identity
SERVER_NOTIFICATION_HOSTNAME: notification
SERVER_WORKERS_HOSTNAME: workers
SERVER_STATUS_PAGE_HOSTNAME: status-page
SERVER_DASHBOARD_HOSTNAME: dashboard
SERVER_ADMIN_DASHBOARD_HOSTNAME: admin-dashboard
SERVER_API_REFERENCE_HOSTNAME: api-reference
#Ports. Usually they don't need to change.
DASHBOARD_API_PORT: ${DASHBOARD_API_PORT}
API_REFERENCE_PORT: ${API_REFERENCE_PORT}
WORKFLOW_PORT: ${WORKFLOW_PORT}
LINK_SHORTENER_PORT: ${LINK_SHORTENER_PORT}
ALERT_PORT: ${ALERT_PORT}
INGESTOR_PORT: ${INGESTOR_PORT}
PROBE_PORT: ${PROBE_PORT}
TEST_SERVER_PORT: ${TEST_SERVER_PORT}
FILE_PORT: ${FILE_PORT}
HOME_PORT: ${HOME_PORT}
IDENTITY_PORT: ${IDENTITY_PORT}
NOTIFICATION_PORT: ${NOTIFICATION_PORT}
REALTIME_PORT: ${REALTIME_PORT}
WORKERS_PORT: ${WORKERS_PORT}
ACCOUNTS_PORT: ${ACCOUNTS_PORT}
STATUS_PAGE_PORT: ${STATUS_PAGE_PORT}
DASHBOARD_PORT: ${DASHBOARD_PORT}
ADMIN_DASHBOARD_PORT: ${ADMIN_DASHBOARD_PORT}
x-common-ui-variables: &common-ui-variables
<<: *common-variables
IS_SERVER: false
STATUS_PAGE_CNAME_RECORD: ${STATUS_PAGE_CNAME_RECORD}
x-common-server-variables: &common-server-variables
<<: *common-variables
ONEUPTIME_SECRET: ${ONEUPTIME_SECRET}
DATABASE_PORT: ${DATABASE_PORT}
DATABASE_USERNAME: ${DATABASE_USERNAME}
DATABASE_PASSWORD: ${DATABASE_PASSWORD}
DATABASE_NAME: ${DATABASE_NAME}
DATABASE_HOST: ${DATABASE_HOST}
DATABASE_SSL_CA: ${DATABASE_SSL_CA}
DATABASE_SSL_KEY: ${DATABASE_SSL_KEY}
DATABASE_SSL_CERT: ${DATABASE_SSL_CERT}
DATABASE_SSL_REJECT_UNAUTHORIZED: ${DATABASE_SSL_REJECT_UNAUTHORIZED}
REDIS_USERNAME: ${REDIS_USERNAME}
REDIS_PASSWORD: ${REDIS_PASSWORD}
REDIS_HOST: ${REDIS_HOST}
REDIS_PORT: ${REDIS_PORT}
REDIS_DB: ${REDIS_DB}
REDIS_TLS_CA: ${REDIS_TLS_CA}
REDIS_TLS_SENTINEL_MODE: ${REDIS_TLS_SENTINEL_MODE}
ENCRYPTION_SECRET: ${ENCRYPTION_SECRET}
BILLING_PRIVATE_KEY: ${BILLING_PRIVATE_KEY}
BILLING_PUBLIC_KEY: ${BILLING_PUBLIC_KEY}
BILLING_ENABLED: ${BILLING_ENABLED}
CLICKHOUSE_USER: ${CLICKHOUSE_USER}
CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD}
CLICKHOUSE_DATABASE: ${CLICKHOUSE_DATABASE}
CLICKHOUSE_HOST: ${CLICKHOUSE_HOST}
CLICKHOUSE_PORT: ${CLICKHOUSE_PORT}
IS_SERVER: true
DISABLE_AUTOMATIC_INCIDENT_CREATION: ${DISABLE_AUTOMATIC_INCIDENT_CREATION}
services:
minio:
networks:
- oneuptime
image: minio/minio:latest
restart: always
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
volumes:
- minio:/data
haraka:
networks:
- oneuptime
image: oneuptime/haraka:${APP_TAG}
restart: always
environment:
SMTP_USERNAME: oneuptime
SMTP_PASSWORD: ${INTERNAL_SMTP_PASSWORD}
DKIM_SELECTOR: oneuptime
DOMAIN: ${INTERNAL_SMTP_SENDING_DOMAIN}
DKIM_PRIVATE_KEY: ${INTERNAL_SMTP_DKIM_PRIVATE_KEY_AS_BASE64}
DKIM_PUBLIC_KEY: ${INTERNAL_SMTP_DKIM_PUBLIC_KEY_AS_BASE64}
redis:
image: redis:7.0.12
restart: always
networks:
- oneuptime
command: redis-server --requirepass "${REDIS_PASSWORD}"
environment:
REDIS_PASSWORD: ${REDIS_PASSWORD}
clickhouse:
image: clickhouse/clickhouse-server:23.7
restart: always
environment:
CLICKHOUSE_USER: ${CLICKHOUSE_USER}
CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD}
CLICKHOUSE_DB: ${CLICKHOUSE_DATABASE}
CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: 1
networks:
- oneuptime
volumes:
- clickhouse:/var/lib/clickhouse/
postgres:
image: postgres:15
restart: always
environment:
POSTGRES_USER: ${DATABASE_USERNAME}
POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
POSTGRES_DB: ${DATABASE_NAME}
networks:
- oneuptime
volumes:
- postgres:/var/lib/postgresql/data
notification:
networks:
- oneuptime
restart: always
environment:
<<: *common-server-variables
PORT: ${NOTIFICATION_PORT}
SMS_DEFAULT_COST_IN_CENTS: ${SMS_DEFAULT_COST_IN_CENTS}
CALL_DEFAULT_COST_IN_CENTS_PER_MINUTE: ${CALL_DEFAULT_COST_IN_CENTS_PER_MINUTE}
INTERNAL_SMTP_EMAIL: ${INTERNAL_SMTP_EMAIL}
INTERNAL_SMTP_PASSWORD: ${INTERNAL_SMTP_PASSWORD}
depends_on:
- haraka
accounts:
networks:
- oneuptime
restart: always
environment:
<<: *common-ui-variables
PORT: ${ACCOUNTS_PORT}
depends_on:
- identity
admin-dashboard:
networks:
- oneuptime
restart: always
environment:
<<: *common-ui-variables
PORT: ${ADMIN_DASHBOARD_PORT}
depends_on:
- identity
- accounts
dashboard:
networks:
- oneuptime
restart: always
environment:
<<: *common-ui-variables
PORT: ${DASHBOARD_PORT}
depends_on:
- identity
- accounts
status-page:
networks:
- oneuptime
restart: always
environment:
<<: *common-ui-variables
PORT: ${STATUS_PAGE_PORT}
depends_on:
- accounts
- dashboard-api
test-server:
networks:
- oneuptime
restart: always
environment:
<<: *common-server-variables
PORT: ${TEST_SERVER_PORT}
dashboard-api:
networks:
- oneuptime
restart: always
environment:
<<: *common-server-variables
PORT: ${DASHBOARD_API_PORT}
depends_on:
- redis
- postgres
- notification
links:
- redis
- postgres
- notification
link-shortener:
networks:
- oneuptime
restart: always
environment:
<<: *common-server-variables
PORT: ${LINK_SHORTENER_PORT}
depends_on:
- redis
- postgres
links:
- redis
- postgres
workflow:
networks:
- oneuptime
restart: always
environment:
<<: *common-server-variables
PORT: ${WORKFLOW_PORT}
depends_on:
- redis
- postgres
- notification
links:
- redis
- postgres
- notification
workers:
networks:
- oneuptime
restart: always
environment:
<<: *common-server-variables
PORT: ${WORKERS_PORT}
ENVIRONMENT: ${ENVIRONMENT}
depends_on:
- postgres
- notification
links:
- postgres
- notification
volumes:
- ./Certs:/usr/src/Certs
probe-1:
networks:
- oneuptime
restart: always
environment:
<<: *common-server-variables
PORT: ${PROBE_PORT}
PROBE_NAME: ${GLOBAL_PROBE_1_NAME}
PROBE_DESCRIPTION: ${GLOBAL_PROBE_1_DESCRIPTION}
PROBE_MONITORING_WORKERS: ${GLOBAL_PROBE_1_MONITORING_WORKERS}
PROBE_KEY: ${GLOBAL_PROBE_1_KEY}
INGESTOR_URL: http://${INGESTOR_HOSTNAME}
PROBE_MONITOR_FETCH_LIMIT: ${GLOBAL_PROBE_1_MONITOR_FETCH_LIMIT}
depends_on:
- ingestor
links:
- ingestor
probe-2:
networks:
- oneuptime
restart: always
environment:
<<: *common-server-variables
PORT: ${PROBE_PORT}
PROBE_NAME: ${GLOBAL_PROBE_2_NAME}
PROBE_DESCRIPTION: ${GLOBAL_PROBE_2_DESCRIPTION}
PROBE_MONITORING_WORKERS: ${GLOBAL_PROBE_2_MONITORING_WORKERS}
PROBE_KEY: ${GLOBAL_PROBE_2_KEY}
INGESTOR_URL: http://${INGESTOR_HOSTNAME}
PROBE_MONITOR_FETCH_LIMIT: ${GLOBAL_PROBE_2_MONITOR_FETCH_LIMIT}
depends_on:
- ingestor
links:
- ingestor
identity:
networks:
- oneuptime
restart: always
environment:
<<: *common-server-variables
PORT: ${IDENTITY_PORT}
depends_on:
- redis
- postgres
- notification
links:
- redis
- postgres
- notification
otel-collector:
networks:
- oneuptime
restart: always
ports:
- 1888:1888 # pprof extension
- 8888:8888 # Prometheus metrics exposed by the collector
- 8889:8889 # Prometheus exporter metrics
- 13133:13133 # health_check extension
- 4317:4317 # OTLP gRPC receiver
- 4318:4318 # OTLP http receiver
- 55679:55679 # zpages extension
depends_on:
- redis
- postgres
- notification
links:
- redis
- postgres
- notification
ingestor:
networks:
- oneuptime
restart: always
environment:
<<: *common-server-variables
PORT: ${INGESTOR_PORT}
depends_on:
- redis
- postgres
- notification
links:
- redis
- postgres
- notification
file:
networks:
- oneuptime
restart: always
environment:
<<: *common-server-variables
PORT: ${FILE_PORT}
depends_on:
- postgres
links:
- postgres
home:
networks:
- oneuptime
environment:
<<: *common-ui-variables
PORT: ${HOME_PORT}
api-reference:
networks:
- oneuptime
restart: always
environment:
<<: *common-ui-variables
PORT: ${API_REFERENCE_PORT}
ingress:
depends_on:
- identity
- accounts
- dashboard-api
- dashboard
- home
- notification
restart: always
networks:
- oneuptime
environment:
<<: *common-variables
ports:
- '${ONEUPTIME_HTTP_PORT}:80'
- '${ONEUPTIME_HTTPS_PORT}:443'
volumes:
- ./Certs:/etc/nginx/certs
volumes:
postgres:
clickhouse:
minio:
networks:
oneuptime:
driver: bridge