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