Get up and running quickly with a local Community deployment using Docker Compose.
Prerequisites
Stack definition
Save the following sample Docker Compose files:
compose.yml:
name: community
x-common-variables: &common-variables
# Note: The following credentials are for development and testing purposes only.
# Use strong passwords in production and consider using secrets management for sensitive information
MSSQL_HOST: database
MSSQL_SA_USER: SA
MSSQL_SA_PASSWORD: T3ll1g3nt
MSSQL_APP_USER: community_user
MSSQL_APP_PASSWORD: T3ll1g3nt
APP_DB_NAME: ${APP_DB_NAME:-community_app}
REPORTING_DB_NAME: ${REPORTING_DB_NAME:-community_reporting}
DB_FORCE_UPGRADE: ${DB_FORCE_UPGRADE:-false}
ADMIN_USERNAME: admin
ADMIN_PASSWORD: p
ADMIN_EMAIL: admin@example.com
x-app-variables: &app-variables
EVOLUTION_CONFIGURATION_SOURCES: file=~/communitySettings.json;file=/community/config/compose.settings.json;env;command
networks:
community:
name: community-net
volumes:
sql:
name: community-sql
driver: local
cfs:
name: community-cfs
driver: local
solr:
name: community-solr
driver: local
services:
web:
image: af1.verintconnect.com/dfe-community/community/web:14.0.0.644
restart: unless-stopped
networks:
- community
ports:
- 8080:8080
read_only: true
tmpfs:
- /tmp
volumes:
- cfs:/app/cfs
- ./settings.json:/community/config/compose.settings.json:ro
environment:
<<: *app-variables
healthcheck:
test: ["CMD", "/app/tools/healthcheck"]
start_period: 20s
interval: 60s
timeout: 10s
retries: 5
depends_on:
database:
condition: service_healthy
search:
condition: service_healthy
installer:
condition: service_completed_successfully
cfs-init:
condition: service_completed_successfully
job:
image: af1.verintconnect.com/dfe-community/community/job:14.0.0.644
restart: unless-stopped
networks:
- community
read_only: true
tmpfs:
- /tmp
volumes:
- cfs:/app/cfs
- ./settings.json:/community/config/compose.settings.json:ro
environment:
<<: *app-variables
healthcheck:
test: ["CMD", "/app/tools/healthcheck"]
start_period: 20s
interval: 60s
timeout: 10s
retries: 5
depends_on:
database:
condition: service_healthy
search:
condition: service_healthy
installer:
condition: service_completed_successfully
cfs-init:
condition: service_completed_successfully
database:
image: mcr.microsoft.com/mssql/server:2022-CU20-ubuntu-22.04
restart: unless-stopped
networks:
- community
ports:
- 5433:1433
volumes:
- sql:/var/opt/mssql
environment:
<<: *common-variables
ACCEPT_EULA: Y
healthcheck:
test: >-
/opt/mssql-tools18/bin/sqlcmd -C -S localhost -U SA -P "$$MSSQL_SA_PASSWORD" -Q "SELECT 1" || exit 1
interval: 10s
timeout: 3s
retries: 10
start_period: 10s
search:
image: af1.verintconnect.com/dfe-community/community/search:14.0.0.619
restart: unless-stopped
networks:
- community
ports:
- 5983:8983
volumes:
- solr:/var/solr
environment:
CORE_CONTENT: telligent-content
CORE_CONVERSATIONS: telligent-conversations
healthcheck:
test: >-
curl -s -A 'healthcheck' http://localhost:8983/solr/$$CORE_CONTENT/admin/ping?wt=json | grep -q '"status":"OK"'
start_period: 15s
interval: 10s
timeout: 5s
retries: 3
infra:
image: af1.verintconnect.com/dfe-community/community/infra:14.0.0.644
restart: unless-stopped
networks:
- community
ports:
- 5700:8080
read_only: true
tmpfs:
- /tmp
environment:
INFRA_Cache_MemoryLimitMegabytes: 500
INFRA_MessageBus_MaxLengthBytes: 102400
INFRA_MessageBus_IdleSeconds: 60
INFRA_Metrics_EnableOtlp: true
INFRA_Metrics_EnableConsole: false
INFRA_Metrics_OtlpEndpointProtocol: grpc
INFRA_Metrics_OtlpEndpoint: http://telemetry:18889/
INFRA_Logging_EnableOtlp: true
INFRA_Logging_EnableConsole: false
INFRA_Logging_OtlpEndpointProtocol: grpc
INFRA_Logging_OtlpEndpoint: http://telemetry:18889/
INFRA_Logging_MinimumLevel: Information,Microsoft.AspNetCore:Warning
healthcheck:
test: ["CMD", "/app/tools/healthcheck"]
start_period: 20s
interval: 60s
timeout: 10s
retries: 5
telemetry:
image: mcr.microsoft.com/dotnet/aspire-dashboard:9.3.0
restart: unless-stopped
networks:
- community
ports:
- 5888:5888
- 5317:18889
environment:
ASPNETCORE_URLS: http://+:5888
smtp:
image: axllent/mailpit:v1.27
restart: unless-stopped
networks:
- community
ports:
- 5825:8025
- 5025:1025
installer:
image: af1.verintconnect.com/dfe-community/community/installer:14.0.0.644
networks:
- community
environment:
<<: *common-variables
depends_on:
database:
condition: service_healthy
restart: true
# Ensure file storage volume is owned by
# app user (1654) of the web and job services
cfs-init:
image: alpine:3.22.1
volumes:
- cfs:/app/cfs
networks:
- community
entrypoint: chown -R 1654:1654 /app/cfs
settings.json:
{
"Core": {
"EnableDeveloperMode": false,
"DisableEmail": false,
"SiteUrl": "http://localhost:8080",
"ApplicationPort": 8080
},
"ConnectionStrings": {
"SiteSqlServer": "server=database;uid=community_user;pwd=T3ll1g3nt;Trusted_Connection=no;TrustServerCertificate=True;database=community_app",
"Reporting": "server=database;uid=community_user;pwd=T3ll1g3nt;Trusted_Connection=no;TrustServerCertificate=True;database=community_reporting"
},
"CentralizedFileStorage": {
"RootPath": "/app/cfs"
},
"Search": {
"SolrContentUrl": "http://search:8983/solr/telligent-content/",
"SolrConversationsUrl": "http://search:8983/solr/telligent-conversations/"
},
"PluginEnablement": {
"Telligent.Evolution.Infra.Connector.InfraPlugin, Telligent.Evolution.Infra.Connector": true,
"Telligent.Evolution.Platform.Core.Email.SMTPEmailProvider, Telligent.Evolution.Platform": true
},
"PluginConfiguration": {
"Telligent.Evolution.Infra.Connector.InfraPlugin, Telligent.Evolution.Infra.Connector:host": "http://infra:8080",
"Telligent.Evolution.Platform.Core.Email.SMTPEmailProvider, Telligent.Evolution.Platform:server": "smtp",
"Telligent.Evolution.Platform.Core.Email.SMTPEmailProvider, Telligent.Evolution.Platform:port": 1025
},
"Tracing": {
"EnableOtlp": true,
"OtlpEndpointProtocol": "grpc",
"OtlpEndpoint": "http://telemetry:18889/"
},
"Metrics": {
"EnableOtlp": true,
"OtlpEndpointProtocol": "grpc",
"OtlpEndpoint": "http://telemetry:18889/"
},
"Logging": {
"EnableOtlp": true,
"OtlpEndpointProtocol": "grpc",
"OtlpEndpoint": "http://telemetry:18889/"
}
}
They provide:
- One Web container
- One Job container
- Containerized SQL Server
- Search, Infra, Installer, MailPit for email testing, and Aspire Dashboard for telemetry
- Named Docker volumes for SQL, CFS, and Solr data
- Direct HTTP access to
webon port8080
Prepare a Working Directory
Create a directory for the stack with the sample files:
community/
compose.yml
settings.json
Credentials
While not necessary, you may adjust any user names or passwords for database and application accounts at the top of compose.yml as you see fit. These accounts will be created if they don't exist. If you change any Database-related credentials, make sure to also update them in settings.json's ConnectionStrings nodes.
Start the Stack
From the directory containing the copied files, run:
On first startup, expect a longer wait while:
- Images are pulled
- SQL Server initializes
- Solr creates cores
- The installer creates or upgrades databases
Log in
After the stack is healthy, log in to Community at http://localhost:8080 with the admin user name and password configured at the top of your compose.yml.
Endpoints
All endpoints made available:
- Community: http://localhost:8080
- SQL Server: localhost
,5433 - Telemetry dashboard: http://localhost:5888
- You can log in using the generated key written to Aspire's container's logs when it starts.
- MailPit: http://localhost:5825
- Solr admin: http://LOCAL:5983
Stop or Remove the Stack
Stop and remove containers while keeping data:
docker compose down --remove-orphans
Remove containers and volumes:
docker compose down --remove-orphans --volumes
Use volume removal only when you want to remove all SQL, CFS, and Solr data.
What to Customize First
The sample settings.json is the main runtime config layer mounted into web and job.
Common early changes:
- Port or non-default host name by customizing
Core:SiteUrlandCore:ApplicationPortinsettings.jsonand the forwarded port for thewebservice incompose.yml. Restart the stack after these changes. - Email behavior under
PluginConfiguration
Next Steps
- For persistent host folders and file-based mounts, see how do I install a production environment .