Dokploy

Discourse

Discourse is a modern forum software for your community. Use it as a mailing list, discussion forum, or long-form chat room.

Discourse logo

Configuration

services:
  discourse-db:
    image: pgvector/pgvector:pg16
    volumes:
      - discourse-postgresql-data:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: discourse
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: discourse
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U discourse -d discourse"]
      interval: 10s
      timeout: 5s
      retries: 5
    restart: unless-stopped

  discourse-redis:
    image: redis:7-alpine
    volumes:
      - discourse-redis-data:/data
    command: redis-server --requirepass ${REDIS_PASSWORD}
    healthcheck:
      test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5
    restart: unless-stopped

  discourse-app:
    image: discourse/discourse:2026.1.4
    volumes:
      - discourse-data:/shared
    depends_on:
      discourse-db:
        condition: service_healthy
      discourse-redis:
        condition: service_healthy
    environment:
      DISCOURSE_HOSTNAME: ${DISCOURSE_HOST}
      DISCOURSE_DB_HOST: discourse-db
      DISCOURSE_DB_PORT: 5432
      DISCOURSE_DB_USERNAME: discourse
      DISCOURSE_DB_PASSWORD: ${POSTGRES_PASSWORD}
      DISCOURSE_DB_NAME: discourse
      DISCOURSE_REDIS_HOST: discourse-redis
      DISCOURSE_REDIS_PORT: 6379
      DISCOURSE_REDIS_PASSWORD: ${REDIS_PASSWORD}
      DISCOURSE_DEVELOPER_EMAILS: ${DISCOURSE_ADMIN_EMAIL}
      # Required for email delivery - Discourse will not function correctly without SMTP
      # DISCOURSE_SMTP_ADDRESS: ${SMTP_HOST}
      # DISCOURSE_SMTP_PORT: ${SMTP_PORT}
      # DISCOURSE_SMTP_USER_NAME: ${SMTP_USER}
      # DISCOURSE_SMTP_PASSWORD: ${SMTP_PASSWORD}
      # DISCOURSE_SMTP_ENABLE_START_TLS: "true"
      # DISCOURSE_NOTIFICATION_EMAIL: [email protected]
      # DISCOURSE_DEVELOPER_EMAILS: [email protected]
    ports:
      - 80
    restart: unless-stopped

volumes:
  discourse-postgresql-data:
  discourse-redis-data:
  discourse-data:
[variables]
main_domain = "${domain}"
admin_email = "${email}"
postgres_password = "${password}"
redis_password = "${password}"

[config]
env = [
  "DISCOURSE_HOST=${main_domain}",
  "DISCOURSE_ADMIN_EMAIL=${admin_email}",
  "POSTGRES_PASSWORD=${postgres_password}",
  "REDIS_PASSWORD=${redis_password}",
]
mounts = []

[[config.domains]]
serviceName = "discourse-app"
port = 80
host = "${main_domain}"

Base64

To import this template in Dokploy: create a Compose service → AdvancedBase64 import and paste the content below:

ewogICJjb21wb3NlIjogInNlcnZpY2VzOlxuICBkaXNjb3Vyc2UtZGI6XG4gICAgaW1hZ2U6IHBndmVjdG9yL3BndmVjdG9yOnBnMTZcbiAgICB2b2x1bWVzOlxuICAgICAgLSBkaXNjb3Vyc2UtcG9zdGdyZXNxbC1kYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YVxuICAgIGVudmlyb25tZW50OlxuICAgICAgUE9TVEdSRVNfVVNFUjogZGlzY291cnNlXG4gICAgICBQT1NUR1JFU19QQVNTV09SRDogJHtQT1NUR1JFU19QQVNTV09SRH1cbiAgICAgIFBPU1RHUkVTX0RCOiBkaXNjb3Vyc2VcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6IFtcIkNNRC1TSEVMTFwiLCBcInBnX2lzcmVhZHkgLVUgZGlzY291cnNlIC1kIGRpc2NvdXJzZVwiXVxuICAgICAgaW50ZXJ2YWw6IDEwc1xuICAgICAgdGltZW91dDogNXNcbiAgICAgIHJldHJpZXM6IDVcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuXG4gIGRpc2NvdXJzZS1yZWRpczpcbiAgICBpbWFnZTogcmVkaXM6Ny1hbHBpbmVcbiAgICB2b2x1bWVzOlxuICAgICAgLSBkaXNjb3Vyc2UtcmVkaXMtZGF0YTovZGF0YVxuICAgIGNvbW1hbmQ6IHJlZGlzLXNlcnZlciAtLXJlcXVpcmVwYXNzICR7UkVESVNfUEFTU1dPUkR9XG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OiBbXCJDTURcIiwgXCJyZWRpcy1jbGlcIiwgXCItYVwiLCBcIiR7UkVESVNfUEFTU1dPUkR9XCIsIFwicGluZ1wiXVxuICAgICAgaW50ZXJ2YWw6IDEwc1xuICAgICAgdGltZW91dDogNXNcbiAgICAgIHJldHJpZXM6IDVcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuXG4gIGRpc2NvdXJzZS1hcHA6XG4gICAgaW1hZ2U6IGRpc2NvdXJzZS9kaXNjb3Vyc2U6MjAyNi4xLjRcbiAgICB2b2x1bWVzOlxuICAgICAgLSBkaXNjb3Vyc2UtZGF0YTovc2hhcmVkXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIGRpc2NvdXJzZS1kYjpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICAgIGRpc2NvdXJzZS1yZWRpczpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIERJU0NPVVJTRV9IT1NUTkFNRTogJHtESVNDT1VSU0VfSE9TVH1cbiAgICAgIERJU0NPVVJTRV9EQl9IT1NUOiBkaXNjb3Vyc2UtZGJcbiAgICAgIERJU0NPVVJTRV9EQl9QT1JUOiA1NDMyXG4gICAgICBESVNDT1VSU0VfREJfVVNFUk5BTUU6IGRpc2NvdXJzZVxuICAgICAgRElTQ09VUlNFX0RCX1BBU1NXT1JEOiAke1BPU1RHUkVTX1BBU1NXT1JEfVxuICAgICAgRElTQ09VUlNFX0RCX05BTUU6IGRpc2NvdXJzZVxuICAgICAgRElTQ09VUlNFX1JFRElTX0hPU1Q6IGRpc2NvdXJzZS1yZWRpc1xuICAgICAgRElTQ09VUlNFX1JFRElTX1BPUlQ6IDYzNzlcbiAgICAgIERJU0NPVVJTRV9SRURJU19QQVNTV09SRDogJHtSRURJU19QQVNTV09SRH1cbiAgICAgIERJU0NPVVJTRV9ERVZFTE9QRVJfRU1BSUxTOiAke0RJU0NPVVJTRV9BRE1JTl9FTUFJTH1cbiAgICAgICMgUmVxdWlyZWQgZm9yIGVtYWlsIGRlbGl2ZXJ5IC0gRGlzY291cnNlIHdpbGwgbm90IGZ1bmN0aW9uIGNvcnJlY3RseSB3aXRob3V0IFNNVFBcbiAgICAgICMgRElTQ09VUlNFX1NNVFBfQUREUkVTUzogJHtTTVRQX0hPU1R9XG4gICAgICAjIERJU0NPVVJTRV9TTVRQX1BPUlQ6ICR7U01UUF9QT1JUfVxuICAgICAgIyBESVNDT1VSU0VfU01UUF9VU0VSX05BTUU6ICR7U01UUF9VU0VSfVxuICAgICAgIyBESVNDT1VSU0VfU01UUF9QQVNTV09SRDogJHtTTVRQX1BBU1NXT1JEfVxuICAgICAgIyBESVNDT1VSU0VfU01UUF9FTkFCTEVfU1RBUlRfVExTOiBcInRydWVcIlxuICAgICAgIyBESVNDT1VSU0VfTk9USUZJQ0FUSU9OX0VNQUlMOiBbZW1haWwgcHJvdGVjdGVkXVxuICAgICAgIyBESVNDT1VSU0VfREVWRUxPUEVSX0VNQUlMUzogW2VtYWlsIHByb3RlY3RlZF1cbiAgICBwb3J0czpcbiAgICAgIC0gODBcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuXG52b2x1bWVzOlxuICBkaXNjb3Vyc2UtcG9zdGdyZXNxbC1kYXRhOlxuICBkaXNjb3Vyc2UtcmVkaXMtZGF0YTpcbiAgZGlzY291cnNlLWRhdGE6XG4iLAogICJjb25maWciOiAiW3ZhcmlhYmxlc11cbm1haW5fZG9tYWluID0gXCIke2RvbWFpbn1cIlxuYWRtaW5fZW1haWwgPSBcIiR7ZW1haWx9XCJcbnBvc3RncmVzX3Bhc3N3b3JkID0gXCIke3Bhc3N3b3JkfVwiXG5yZWRpc19wYXNzd29yZCA9IFwiJHtwYXNzd29yZH1cIlxuXG5bY29uZmlnXVxuZW52ID0gW1xuICBcIkRJU0NPVVJTRV9IT1NUPSR7bWFpbl9kb21haW59XCIsXG4gIFwiRElTQ09VUlNFX0FETUlOX0VNQUlMPSR7YWRtaW5fZW1haWx9XCIsXG4gIFwiUE9TVEdSRVNfUEFTU1dPUkQ9JHtwb3N0Z3Jlc19wYXNzd29yZH1cIixcbiAgXCJSRURJU19QQVNTV09SRD0ke3JlZGlzX3Bhc3N3b3JkfVwiLFxuXVxubW91bnRzID0gW11cblxuW1tjb25maWcuZG9tYWluc11dXG5zZXJ2aWNlTmFtZSA9IFwiZGlzY291cnNlLWFwcFwiXG5wb3J0ID0gODBcbmhvc3QgPSBcIiR7bWFpbl9kb21haW59XCIiCn0=

Tags

forum, community, discussion


Version: 2026.1.4

On this page