Docker Compose Installation
Installation of Sync-in with Docker Compose.
Sync-in is distributed as an official Docker image, available on Docker Hub: https://hub.docker.com/r/syncin/server
This image is specifically designed to be deployed and run in a Docker Compose environment.
📋 Prerequisites
⚙️ Minimum hardware requirements
- RAM: 1 GB
- CPU: 1 core/vCPU
- Disk space: 2 GB
🐳 Docker Compose
This configuration relies on Docker Compose files using the x-include extension.
You will need:
- Docker Engine version 24 or higher
- Docker Compose version 2.20 or higher
✅ You can check the installed versions with:
docker --version
docker compose version
🔗 If Docker is not installed, follow the official Docker installation guide.
📦 Configuration files
To retrieve the Sync-in Docker Compose files (sync-in-docker) from https://github.com/Sync-in/server/releases, use one of the following methods:
curlandunzip:curl -L -o sync-in-docker.zip \https://github.com/Sync-in/server/releases/latest/download/sync-in-docker.zip && \unzip sync-in-docker.zip- or with
curlandtar:curl -L -o sync-in-docker.tar.gz \https://github.com/Sync-in/server/releases/latest/download/sync-in-docker.tar.gz && \tar zxvf sync-in-docker.tar.gz
You should get the following structure in the sync-in-docker directory:
├── config
│ ├── collabora
│ │ └── docker-compose.collabora.yaml
│ ├── drawio
│ │ └── docker-compose.drawio.yaml
│ ├── nginx
│ │ ├── collabora.conf
│ │ ├── docker-compose.nginx.yaml
│ │ ├── drawio.conf
│ │ ├── nginx.conf
│ │ ├── onlyoffice.conf
│ │ └── eurooffice.conf
│ ├── onlyoffice
│ │ └── docker-compose.onlyoffice.yaml
│ ├── eurooffice
│ │ └── docker-compose.eurooffice.yaml
│ └── sync-in-desktop-releases
│ ├── docker-compose.sync-in-desktop-releases.yaml
│ └── update.sh
├── docker-compose.yaml
└── environment.yaml
You can check the structure and content from the GitHub repository.
🚀 Quick start
1. Configure required secrets
Navigate to the Docker Compose directory:
cd sync-in-docker
Before starting the server, define the required access-token and refresh-token secrets, and configure a dedicated encryption key.
Edit the environment.yaml file:
server:
# Optional for now; required in the next major release
publicUrl: 'https://sync-in.domain.com'
mysql:
# Use the root password defined in docker-compose.yaml
url: 'mysql://root:MySQLRootPassword@mariadb:3306/sync_in'
auth:
encryptionKey: 'REPLACE_WITH_LONG_RANDOM_ENCRYPTION_KEY'
token:
access:
secret: 'REPLACE_WITH_LONG_RANDOM_ACCESS_SECRET'
refresh:
secret: 'REPLACE_WITH_LONG_RANDOM_REFRESH_SECRET'
publicUrl must match the address exposed to users, including the scheme and any non-standard port. It remains optional until the next major release.
The URL must be reachable from users' browsers and, for office editors that communicate with Sync-in, from their containers. When publicUrl is
omitted, editors use the request origin as a compatibility fallback. For security, it will become required in the next major release so editor
endpoints are built from a trusted origin controlled by the administrator rather than from request headers.
Then, edit the docker-compose.yaml file to ensure the MySQL password matches:
services:
mariadb:
environment:
MYSQL_ROOT_PASSWORD: 'MySQLRootPassword'
Use long, randomly generated strings for your secrets to ensure maximum security.
In YAML files, use single quotes for passwords containing special characters.
You can use environment variables to configure the previously defined secrets. See the Environment variables section for more details
2. Configure data storage
Data from Sync-in and MariaDB is already persisted in named Docker volumes. No changes are required for a test installation. In production, you can mount host directories to directly control where the data is stored and how it is backed up. The examples below show how to replace each volume with a host directory.
Sync-in
The data volume, mounted at /app/data, stores the files managed by Sync-in.
services:
sync_in:
volumes:
# Default Docker volume
# - data:/app/data
# Host directory
- '/home/sync-in-data:/app/data'
The Docker entrypoint always forces applications.files.dataPath to /app/data. Do not add dataPath to environment.yaml or try to override it
with SYNCIN_APPLICATIONS_FILES_DATAPATH: any value provided to the container is replaced. To choose where data is stored, configure only the
source of the volume mounted at /app/data.
MariaDB
The mariadb_data volume, mounted at /var/lib/mysql, stores the MariaDB database data.
services:
mariadb:
volumes:
# Default Docker volume
# - mariadb_data:/var/lib/mysql
# Host directory
- '/home/sync-in-mariadb:/var/lib/mysql'
3. Start the Sync-in server
To set your own administrator credentials on first launch, use:
INIT_ADMIN=true INIT_ADMIN_LOGIN='user' INIT_ADMIN_PASSWORD='password' docker compose up -d
Replace user and password with your desired credentials.
For Compose-file examples and quote-handling details, see Variables & Secrets.
If you don't set these variables and simply run:
INIT_ADMIN=true docker compose up -d
The server will use the default administrator credentials:
- Login:
sync-in - Password:
sync-in
Important: For security reasons, it is strongly recommended to change these credentials upon your first login.
To check the status of containers: docker compose ps
4. Access the Web interface
Once the server is started, open your browser at the following address:
http://localhost:8080
Log in using the administrator credentials defined in step 3.
To expose Sync-in through the bundled Nginx service on standard HTTP/HTTPS ports, see the Docker reverse proxy configuration.