Docker Compose Deployment Files

If you are deploying the Nextcloud Exchange Connector via Docker, you will need the deployment files to instruct Docker on how to build your environment.

Below are the official .yml configurations. You can copy the contents of the files you need, save them to your host machine with the exact filenames provided in the headings, and place them all in the same deployment directory.

docker-compose.yml (Base Instance)

This is the mandatory base file for all Docker deployments. It defines the primary synchronization service.

# Main docker-compose file
 
services:
# SendentSynchronizer
primary.sendent.synchronization.service:
image: rg.nl-ams.scw.cloud/sendent-public/sendent-sync:latest
# deploy:
# resources:
# limits:
# memory: 4G # Memory limiting per Instance
# reservations:
# memory: 1G # Memory reservation per Instance
build:
context: .
dockerfile: Dockerfile
restart: on-failure
environment:
# Nextcloud Configuration
- Service__NextcloudConfiguration__NextcloudBaseUrl
- Service__NextcloudConfiguration__NextcloudServiceUsername
- Service__NextcloudConfiguration__NextcloudServicePassword
- Service__NextcloudConfiguration__SharedSecret
 
# Exchange Configuration
- Service__ExchangeConfiguration__ExchangeType
- Service__ExchangeConfiguration__ExchangeOnPremUrl
- Service__ExchangeConfiguration__ExchangeOnPremDomain
- Service__ExchangeConfiguration__ExchangeOnPremAdfsAuthorityUrl
- Service__ExchangeConfiguration__ExchangeTenantId
- Service__ExchangeConfiguration__ExchangeAdminRaw
- Service__ExchangeConfiguration__ExchangeAdminFile
 
# Database Configuration
- DatabaseConfiguration__DatabaseType
- DatabaseConfiguration__DatabaseEncryptionKey
- DatabaseConfiguration__ConnectionString
 
# Concurrency Configuration
- Service__ConcurrencyConfiguration__MaxParallelProcessingUsers
- Service__ConcurrencyConfiguration__MaxUsersPerAdmin
 
# Service Configuration
- Service__IsPrimary=true
- Service__DefaultWorkerName
- Service__BatchLimit
- Service__WorkerIntervalSeconds
- Service__SyncIntervalInSeconds
- Service__CriticalSyncIntervalInSeconds
- Service__BatchSaveSize
- Service__StartWeekend
- Service__SyncMode
- Service__SyncType
 
# Full Synchronization Configuration
- Service__FullSyncConfiguration__ProcessAttachments
 
# Sensitive Synchronization Configuration
- Service__SensitiveSyncConfiguration__SensitiveTitle
- Service__SensitiveSyncConfiguration__SensitiveCategory
 
# Logging Configuration
- Serilog__MinimumLevel__Default
 
- Service__LoggingConfiguration__LogsOutput
- Service__LoggingConfiguration__LogDirectoryPath
- Service__LoggingConfiguration__LogFileSizeLimit
- Service__LoggingConfiguration__LogFileAmountLimit
# Configuration for Loki
- Service__LoggingConfiguration__LokiInternalUrl
 
volumes:
- sendent-logs:/app/logs
- ./exchangeAdmins:/app/settings
 
volumes:
sendent-logs:
driver: local

docker-compose.multiinstances.yml

Use this override file only if you are deploying a Multi-Instance architecture. It defines the secondary worker replicas.

# Multiinstances override
# docker compose -f docker-compose.yml -f docker-compose.multiinstances.yml up
 
services:
secondary.sendent.synchronization.service:
image: rg.nl-ams.scw.cloud/sendent-public/sendent-sync:latest
deploy:
replicas: ${Secondary_Replicas_Amount:-0} # Amount of instances
# resources:
# limits:
# memory: 4G # Memory limiting per Instance
# reservations:
# memory: 1G # Memory reservation per Instance
build:
context: .
dockerfile: Dockerfile
restart: on-failure
environment:
# Nextcloud Configuration
- Service__NextcloudConfiguration__NextcloudBaseUrl
- Service__NextcloudConfiguration__NextcloudServiceUsername
- Service__NextcloudConfiguration__NextcloudServicePassword
- Service__NextcloudConfiguration__SharedSecret
 
# Exchange Configuration
- Service__ExchangeConfiguration__ExchangeType
- Service__ExchangeConfiguration__ExchangeOnPremUrl
- Service__ExchangeConfiguration__ExchangeOnPremDomain
- Service__ExchangeConfiguration__ExchangeOnPremAdfsAuthorityUrl
- Service__ExchangeConfiguration__ExchangeTenantId
- Service__ExchangeConfiguration__ExchangeAdminRaw
- Service__ExchangeConfiguration__ExchangeAdminFile
 
# Database Configuration
- DatabaseConfiguration__DatabaseType
- DatabaseConfiguration__DatabaseEncryptionKey
- DatabaseConfiguration__ConnectionString
 
# Concurrency Configuration
- Service__ConcurrencyConfiguration__MaxParallelProcessingUsers
- Service__ConcurrencyConfiguration__MaxUsersPerAdmin
 
# Service Configuration
- Service__IsPrimary=false
- Service__DefaultWorkerName
- Service__BatchLimit
- Service__WorkerIntervalSeconds
- Service__SyncIntervalInSeconds
- Service__CriticalSyncIntervalInSeconds
- Service__BatchSaveSize
- Service__StartWeekend
- Service__SyncMode
- Service__SyncType
 
# Full Synchronization Configuration
- Service__FullSyncConfiguration__ProcessAttachments
 
# Sensitive Synchronization Configuration
- Service__SensitiveSyncConfiguration__SensitiveTitle
- Service__SensitiveSyncConfiguration__SensitiveCategory
 
# Logging Configuration
- Serilog__MinimumLevel__Default
 
- Service__LoggingConfiguration__LogsOutput
- Service__LoggingConfiguration__LogDirectoryPath
- Service__LoggingConfiguration__LogFileSizeLimit
- Service__LoggingConfiguration__LogFileAmountLimit
# Configuration for Loki
- Service__LoggingConfiguration__LokiInternalUrl
 
volumes:
- sendent-logs:/app/logs
- ./exchangeAdmins:/app/settings
depends_on:
primary.sendent.synchronization.service:
condition: service_started

docker-compose.postgres.yml

Use this file if you want Docker to host a local PostgreSQL database container for you.

# Postgres override
# docker compose -f docker-compose.yml -f docker-compose.postgres.yml up
 
services:
postgres_db:
image: postgres:15
container_name: postgres_db
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: <replace_with_password>
POSTGRES_DB: SendentDB
ports:
- '5432:5432'
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U postgres -d SendentDB']
interval: 5s
timeout: 5s
retries: 5
 
primary.sendent.synchronization.service:
depends_on:
postgres_db:
condition: service_healthy

docker-compose.mysql.yml

Use this file if you want Docker to host a local MySQL database container for you.

# MySQL override
# docker compose -f docker-compose.yml -f docker-compose.mysql.yml up
 
services:
mysql_db:
image: mysql:8.4
container_name: mysql_db
environment:
MYSQL_ROOT_PASSWORD: '<replace_with_password>'
MYSQL_DATABASE: 'SendentDB'
ports:
- '3306:3306'
healthcheck:
test:
[
'CMD-SHELL',
"mysqladmin ping -h localhost -uroot -p'<replace_with_password>' || exit 1",
]
interval: 10s
timeout: 5s
retries: 10
start_period: 15s
 
primary.sendent.synchronization.service:
depends_on:
mysql_db:
condition: service_healthy

docker-compose.mariadb.yml

Use this file if you want Docker to host a local MariaDB container for you.

# MariaDB override
# docker compose -f docker-compose.yml -f docker-compose.mariadb.yml up
 
services:
maria_db:
image: mariadb:10.11
command: ['--max-allowed-packet=128M', '--innodb-buffer-pool-size=512M']
container_name: maria_db
environment:
MARIADB_ROOT_PASSWORD: <replace_with_password>
MARIADB_DATABASE: SendentDB
ports:
- '3306:3306'
healthcheck:
test: ['CMD', 'healthcheck.sh', '--connect', '--innodb_initialized']
interval: 5s
timeout: 5s
retries: 10
 
primary.sendent.synchronization.service:
depends_on:
maria_db:
condition: service_healthy

docker-compose.sqlserver.yml

Use this file if you want Docker to host a local Microsoft SQL Server container for you.

# SQL Server override
# docker compose -f docker-compose.yml -f docker-compose.sqlserver.yml up
 
services:
mssql_db:
image: mcr.microsoft.com/mssql/server:2022-latest
container_name: mssql_db
environment:
SA_PASSWORD: '<replace_with_password>'
ACCEPT_EULA: 'Y'
ports:
- '1433:1433'
healthcheck:
test:
[
'CMD-SHELL',
"/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P '<replace_with_password>' -C -Q 'SELECT 1' || exit 1",
]
interval: 10s
timeout: 5s
retries: 10
start_period: 15s
 
primary.sendent.synchronization.service:
depends_on:
mssql_db:
condition: service_healthy

docker-compose.grafana.yml

Use this file if you are enabling Grafana and Loki for advanced log visualization.

# Loki&Grafana override
# docker compose -f docker-compose.yml -f docker-compose.grafana.yml up
 
services:
# Logger Services
loki:
image: grafana/loki:latest
ports:
- '127.0.0.1:3100:3100'
command: -config.file=/etc/loki/local-config.yaml
 
grafana:
image: grafana/grafana:latest
ports:
- '127.0.0.1:3000:3000'
environment:
- GF_SECURITY_ADMIN_USER=${GRAFANA_USER}
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD}
volumes:
- ./grafana/provisioning/datasources:/etc/grafana/provisioning/datasources
- ./grafana/provisioning/dashboards:/etc/grafana/provisioning/dashboards
depends_on:
loki:
condition: service_started
 
# SendentSynchronizer
primary.sendent.synchronization.service:
depends_on:
loki:
condition: service_started


Was this article helpful?