From ecf7f598538bba2f6465c3bb919f3dcf9d9da7dc Mon Sep 17 00:00:00 2001 From: Alex Zaw Date: Mon, 6 Apr 2026 18:04:37 +0000 Subject: [PATCH] Add external database docker-compose variant --- docker-compose.external-db.yml | 144 +++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 docker-compose.external-db.yml diff --git a/docker-compose.external-db.yml b/docker-compose.external-db.yml new file mode 100644 index 0000000..d408527 --- /dev/null +++ b/docker-compose.external-db.yml @@ -0,0 +1,144 @@ +version: "3.9" + +# Alternative configuration with external PostgreSQL and Redis +# Use this for production deployments with higher performance requirements + +services: + onlyoffice-docs: + image: onlyoffice/documentserver:8.2 + container_name: onlyoffice-docs + restart: unless-stopped + depends_on: + onlyoffice-db: + condition: service_healthy + onlyoffice-redis: + condition: service_healthy + onlyoffice-rabbitmq: + condition: service_healthy + ports: + - "${APP_PORT}:80" + environment: + # JWT Configuration + - JWT_ENABLED=${ONLYOFFICE_JWT_ENABLED:-true} + - JWT_SECRET=${ONLYOFFICE_JWT_SECRET} + - JWT_HEADER=${ONLYOFFICE_JWT_HEADER:-Authorization} + - JWT_IN_BODY=${ONLYOFFICE_JWT_IN_BODY:-false} + # Database Configuration + - DB_TYPE=postgres + - DB_HOST=onlyoffice-db + - DB_PORT=5432 + - DB_NAME=onlyoffice + - DB_USER=onlyoffice + - DB_PWD=${ONLYOFFICE_DB_PASSWORD:-onlyoffice} + # Redis Configuration + - REDIS_SERVER_HOST=onlyoffice-redis + - REDIS_SERVER_PORT=6379 + # RabbitMQ Configuration + - AMQP_URI=amqp://guest:guest@onlyoffice-rabbitmq:5672/ + - AMQP_TYPE=rabbitmq + # Storage Configuration + - USE_UNAUTHORIZED_STORAGE=${ONLYOFFICE_USE_UNAUTHORIZED_STORAGE:-false} + # WOPI Configuration + - WOPI_ENABLED=${ONLYOFFICE_WOPI_ENABLED:-false} + # Performance tuning + - NGINX_WORKER_PROCESSES=auto + - NGINX_WORKER_CONNECTIONS=4096 + # Font generation + - GENERATE_FONTS=true + volumes: + # Logs + - ${APP_DATA_DIR}/data/logs:/var/log/onlyoffice + # Certificates and data + - ${APP_DATA_DIR}/data/data:/var/www/onlyoffice/Data + # File cache + - ${APP_DATA_DIR}/data/lib:/var/lib/onlyoffice + # Font cache + - ${APP_DATA_DIR}/data/fonts:/usr/share/fonts/truetype/custom + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.onlyoffice-docs-web-redirect.redirectscheme.scheme: https + traefik.http.services.onlyoffice-docs.loadbalancer.server.port: 80 + # Web + traefik.http.routers.onlyoffice-docs-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.onlyoffice-docs-insecure.entrypoints: web + traefik.http.routers.onlyoffice-docs-insecure.service: onlyoffice-docs + traefik.http.routers.onlyoffice-docs-insecure.middlewares: onlyoffice-docs-web-redirect + # Websecure + traefik.http.routers.onlyoffice-docs.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.onlyoffice-docs.entrypoints: websecure + traefik.http.routers.onlyoffice-docs.service: onlyoffice-docs + traefik.http.routers.onlyoffice-docs.tls.certresolver: myresolver + # Local domain + traefik.http.routers.onlyoffice-docs-local-insecure.rule: Host(`onlyoffice-docs.${LOCAL_DOMAIN}`) + traefik.http.routers.onlyoffice-docs-local-insecure.entrypoints: web + traefik.http.routers.onlyoffice-docs-local-insecure.service: onlyoffice-docs + traefik.http.routers.onlyoffice-docs-local-insecure.middlewares: onlyoffice-docs-web-redirect + # Local domain secure + traefik.http.routers.onlyoffice-docs-local.rule: Host(`onlyoffice-docs.${LOCAL_DOMAIN}`) + traefik.http.routers.onlyoffice-docs-local.entrypoints: websecure + traefik.http.routers.onlyoffice-docs-local.service: onlyoffice-docs + traefik.http.routers.onlyoffice-docs-local.tls: true + # Runtipi managed + runtipi.managed: true + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost/healthcheck"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 60s + + onlyoffice-db: + image: postgres:15-alpine + container_name: onlyoffice-db + restart: unless-stopped + environment: + - POSTGRES_DB=onlyoffice + - POSTGRES_USER=onlyoffice + - POSTGRES_PASSWORD=${ONLYOFFICE_DB_PASSWORD:-onlyoffice} + volumes: + - ${APP_DATA_DIR}/data/postgresql:/var/lib/postgresql/data + networks: + - tipi_main_network + healthcheck: + test: ["CMD-SHELL", "pg_isready -U onlyoffice -d onlyoffice"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 10s + + onlyoffice-redis: + image: redis:7-alpine + container_name: onlyoffice-redis + restart: unless-stopped + volumes: + - ${APP_DATA_DIR}/data/redis:/data + networks: + - tipi_main_network + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 10s + + onlyoffice-rabbitmq: + image: rabbitmq:3-alpine + container_name: onlyoffice-rabbitmq + restart: unless-stopped + volumes: + - ${APP_DATA_DIR}/data/rabbitmq:/var/lib/rabbitmq + networks: + - tipi_main_network + healthcheck: + test: ["CMD", "rabbitmq-diagnostics", "-q", "ping"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 30s + +networks: + tipi_main_network: + external: true