Skip to content

Instantly share code, notes, and snippets.

@jonnylink
Created April 8, 2025 00:50
Show Gist options
  • Save jonnylink/24a7c6f7ab48b2f8188aa0dde86b725a to your computer and use it in GitHub Desktop.
Save jonnylink/24a7c6f7ab48b2f8188aa0dde86b725a to your computer and use it in GitHub Desktop.
OnlyOffice docker-compose.yml example (working on Unraid)
networks:
onlyoffice:
driver: bridge
services:
onlyoffice-mysql-server:
container_name: onlyoffice-mysql-server
image: mysql:8.0.29
networks:
- onlyoffice
stdin_open: true
tty: true
restart: always
ports:
- "3316:3306"
deploy:
resources:
limits:
memory: 2G
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:?}
MYSQL_DATABASE: onlyoffice
MYSQL_CONNECTION_LIMIT: 25
MYSQL_SERVER_CONN_LIMIT: 50
volumes:
- /mnt/user/appdata/onlyoffice/mysql/conf.d:/etc/mysql/conf.d
- /mnt/user/appdata/onlyoffice/mysql/data:/var/lib/mysql
- /mnt/user/appdata/onlyoffice/mysql/logs:/var/log/mysql
- /mnt/user/appdata/onlyoffice/mysql/initdb:/docker-entrypoint-initdb.d
onlyoffice-community-server:
container_name: onlyoffice-community-server
image: onlyoffice/communityserver:12.7.1.1942
depends_on:
- onlyoffice-mysql-server
- onlyoffice-document-server
- onlyoffice-elasticsearch
restart: always
privileged: true
stdin_open: true
tty: true
cgroup: host
networks:
- onlyoffice
ports:
- "8081:80"
- "4431:443"
- "5222:5222"
deploy:
resources:
limits:
memory: 4G
environment:
ONLYOFFICE_CORE_MACHINEKEY: ${ONLYOFFICE_CORE_MACHINEKEY:?}
CONTROL_PANEL_PORT_80_TCP_ADDR: onlyoffice-control-panel
MYSQL_SERVER_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:?}
MYSQL_SERVER_DB_NAME: onlyoffice
MYSQL_SERVER_HOST: onlyoffice-mysql-server
MYSQL_SERVER_USER: onlyoffice_user
MYSQL_SERVER_PASS: ${MYSQL_SERVER_PASS:?}
DOCUMENT_SERVER_PORT_80_TCP_ADDR: onlyoffice-document-server
DOCUMENT_SERVER_JWT_ENABLED: true
DOCUMENT_SERVER_JWT_SECRET: ${DOCUMENT_SERVER_JWT_SECRET:?}
DOCUMENT_SERVER_JWT_HEADER: ${DOCUMENT_SERVER_JWT_HEADER:?}
ELASTICSEARCH_SERVER_HOST: onlyoffice-elasticsearch
ELASTICSEARCH_SERVER_HTTPPORT: 9200
MAIL_SERVER_API_PORT: 8082
MAIL_SERVER_API_HOST: onlyoffice-mail-server
MAIL_SERVER_DB_HOST: onlyoffice-mysql-server
MAIL_SERVER_DB_NAME: onlyoffice_mailserver
MAIL_SERVER_DB_USER: mail_admin
MAIL_SERVER_DB_PASS: ${MAIL_SERVER_DB_PASS:?}
volumes:
- /mnt/user/appdata/onlyoffice/CommunityServer/data:/var/www/onlyoffice/Data
- /mnt/user/appdata/onlyoffice/CommunityServer/logs:/var/log/onlyoffice
- /mnt/user/appdata/onlyoffice/CommunityServer/letsencrypt:/etc/letsencrypt
- /mnt/user/appdata/onlyoffice/DocumentServer/data:/var/www/onlyoffice/DocumentServerData
- /sys/fs/cgroup:/sys/fs/cgroup:rw
# - ./certs:/var/www/onlyoffice/Data/certs
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/healthcheck.ashx"]
interval: 30s
timeout: 10s
retries: 3
start_period: 120s
onlyoffice-document-server:
container_name: onlyoffice-document-server
image: onlyoffice/documentserver:8.3
restart: always
stdin_open: true
tty: true
networks:
- onlyoffice
volumes:
- /mnt/user/appdata/onlyoffice/DocumentServer/logs:/var/log/onlyoffice
- /mnt/user/appdata/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data
- /mnt/user/appdata/onlyoffice/DocumentServer/fonts:/usr/share/fonts/truetype/custom
- /mnt/user/appdata/onlyoffice/DocumentServer/forgotten:/var/lib/onlyoffice/documentserver/App_Data/cache/files/forgotten
environment:
- JWT_ENABLED=true
- JWT_SECRET=${DOCUMENT_SERVER_JWT_SECRET:?}
- JWT_HEADER=${DOCUMENT_SERVER_JWT_HEADER:?}
onlyoffice-elasticsearch:
image: onlyoffice/elasticsearch:7.16.3
container_name: onlyoffice-elasticsearch
restart: always
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms1g -Xmx1g -Dlog4j2.formatMsgNoLookups=true"
- "indices.fielddata.cache.size=30%"
- "indices.memory.index_buffer_size=30%"
- "ingest.geoip.downloader.enabled=false"
networks:
- onlyoffice
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65535
hard: 65535
volumes:
- /mnt/user/appdata/onlyoffice/ElasticSearch/data:/usr/share/elasticsearch/data
expose:
- "9200"
- "9300"
# onlyoffice-mail-server:
# container_name: onlyoffice-mail-server
# image: onlyoffice/mailserver:1.6.75
# depends_on:
# - onlyoffice-mysql-server
# hostname: ${MAIL_SERVER_HOSTNAME}
# environment:
# - MYSQL_SERVER=onlyoffice-mysql-server
# - MYSQL_SERVER_PORT=3306
# - MYSQL_ROOT_USER=root
# - MYSQL_ROOT_PASSWD=${MYSQL_ROOT_PASSWORD:?}
# - MYSQL_SERVER_DB_NAME=onlyoffice_mailserver
# networks:
# - onlyoffice
# restart: always
# privileged: true
# ports:
# - '25:25'
# - '143:143'
# - '587:587'
# - '8082:8081'
# - '3317:3306'
# stdin_open: true
# tty: true
# volumes:
# - mail_data:/var/vmail
# - mail_certs:/etc/pki/tls/mailserver
# - mail_log:/var/log
# onlyoffice-control-panel:
# container_name: onlyoffice-control-panel
# depends_on:
# - onlyoffice-document-server
# - onlyoffice-mail-server
# - onlyoffice-community-server
# image: onlyoffice/controlpanel:3.5.2.530
# environment:
# ONLYOFFICE_CORE_MACHINEKEY: ${ONLYOFFICE_CORE_MACHINEKEY:?}
# expose:
# - '80'
# - '443'
# restart: always
# volumes:
# - /var/run/docker.sock:/var/run/docker.sock
# - controlpanel_data:/var/www/onlyoffice/Data
# - controlpanel_log:/var/log/onlyoffice
# networks:
# - onlyoffice
# stdin_open: true
# tty: true
@jonnylink
Copy link
Author

sudo rm -dr "/mnt/user/appdata/onlyoffice";
sudo mkdir -p "/mnt/user/appdata/onlyoffice/mysql/conf.d";
sudo mkdir -p "/mnt/user/appdata/onlyoffice/mysql/data";
sudo mkdir -p "/mnt/user/appdata/onlyoffice/mysql/initdb";
sudo mkdir -p "/mnt/user/appdata/onlyoffice/mysql/logs";
sudo mkdir -p "/mnt/user/appdata/onlyoffice/CommunityServer/data";
sudo mkdir -p "/mnt/user/appdata/onlyoffice/CommunityServer/logs";
sudo mkdir -p "/mnt/user/appdata/onlyoffice/CommunityServer/letsencrypt";
sudo mkdir -p "/mnt/user/appdata/onlyoffice/DocumentServer/data";
sudo mkdir -p "/mnt/user/appdata/onlyoffice/DocumentServer/logs";
sudo mkdir -p "/mnt/user/appdata/onlyoffice/MailServer/data/certs";
sudo mkdir -p "/mnt/user/appdata/onlyoffice/MailServer/logs";
sudo mkdir -p "/mnt/user/appdata/onlyoffice/ControlPanel/data";
sudo mkdir -p "/mnt/user/appdata/onlyoffice/ControlPanel/logs";
sudo mkdir -p "/mnt/user/appdata/onlyoffice/ElasticSearch/data";

echo "[mysqld]
sql_mode = 'NO_ENGINE_SUBSTITUTION'
max_connections = 300
max_allowed_packet = 64M
group_concat_max_len = 2048
innodb_buffer_pool_size = 1G
innodb_flush_log_at_trx_commit = 2
innodb_log_file_size = 256M
innodb_flush_method = O_DIRECT
table_open_cache = 400
#log-error = /var/log/mysql/error.log
" > /mnt/user/appdata/onlyoffice/mysql/conf.d/onlyoffice.cnf

echo "CREATE USER 'onlyoffice_user'@'%' IDENTIFIED BY 'USER_PASSWORD';
CREATE USER 'mail_admin'@'%' IDENTIFIED BY 'MAIL_PASSWORD';
ALTER USER 'root'@'%' IDENTIFIED BY 'ROOT_PASSWORD';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON * . * TO 'onlyoffice_user'@'%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON * . * TO 'mail_admin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;" > /mnt/cache/appdata/onlyoffice/mysql/initdb/setup.sql

chmod 755 /mnt/user/appdata/onlyoffice/mysql/conf.d
chmod 755 /mnt/user/appdata/onlyoffice/mysql/initdb
chmod 755 /mnt/user/appdata/onlyoffice/mysql/logs
chmod -R 777 /mnt/user/appdata/onlyoffice/mysql/data
chown -R 999:999 /mnt/user/appdata/onlyoffice/
chmod 644 /mnt/user/appdata/onlyoffice/mysql/conf.d/*
chown -R root:root /mnt/user/appdata/onlyoffice/ElasticSearch/data
chmod -R 777 /mnt/user/appdata/onlyoffice/ElasticSearch/data

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment