Deploying WDS API Server in Docker Compose
Recommended for evaluation and development: run the API Server plus dependencies locally via Compose. The API binds to port 2807 at http://localhost:2807. See Plans for feature availability.
To make use of this deployment type, docker-compose needs to be installed locally. Use the following command to check if it’s already installed:
docker compose version
the result should be like this:
Docker Compose version <version>
If the result shows that docker-compose is not installed, please review the installation documentation on its official website
Auxiliary containers
The Compose topologies include two optional companion containers that are not WDS server services:
- Playground serves stable test pages on http://localhost:2808 so documentation examples can crawl and scrape repeatable content.
- Docs serves the release documentation on http://localhost:2809, including in air-gapped environments.
Deployment Options
Taking into account that the API Server requires third-party components, there are several deployment options:
- BOX (Free) - intended to run Solidstack with bundled supporting infrastructure and the auxiliary containers; its release example is pending reconciliation.
- MINI (Free) - runs Solidstack and the auxiliary containers while using external MongoDB and embedding infrastructure.
- OEM (Business) - runs the multi-service topology and auxiliary containers while using external database, search, cache, and embedding infrastructure.
- BOX (Business) - intended to run the complete multi-service topology with bundled supporting infrastructure and auxiliary containers; its release example is pending reconciliation.
Pending reconciliation. This release snippet does not yet contain the current canonical infrastructure and support files and is not ready to run.
IMPORTANT! MongoDB connection string must contain a database name. It might be Solidstack as in the example connection string or anything else.
services:
mongodb-primary:
image: docker.io/zcube/bitnami-compat-mongodb:6.0
restart: always
hostname: mongodb-primary
environment:
- MONGODB_ADVERTISED_HOSTNAME=mongodb-primary
- MONGODB_ROOT_USER=root
- MONGODB_ROOT_PASSWORD=TestPassword
- MONGODB_REPLICA_SET_MODE=primary
- MONGODB_REPLICA_SET_KEY=TestReplicasetKey
mongodb-secondary:
image: docker.io/zcube/bitnami-compat-mongodb:6.0
restart: always
hostname: mongodb-secondary
depends_on:
- mongodb-primary
environment:
- MONGODB_ADVERTISED_HOSTNAME=mongodb-secondary
- MONGODB_REPLICA_SET_MODE=secondary
- MONGODB_INITIAL_PRIMARY_HOST=mongodb-primary
- MONGODB_REPLICA_SET_KEY=TestReplicasetKey
- MONGODB_INITIAL_PRIMARY_ROOT_PASSWORD=TestPassword
mongodb-arbiter:
image: docker.io/zcube/bitnami-compat-mongodb:6.0
restart: always
hostname: mongodb-arbiter
depends_on:
- mongodb-primary
environment:
- MONGODB_ADVERTISED_HOSTNAME=mongodb-arbiter
- MONGODB_REPLICA_SET_MODE=arbiter
- MONGODB_INITIAL_PRIMARY_HOST=mongodb-primary
- MONGODB_REPLICA_SET_KEY=TestReplicasetKey
- MONGODB_INITIAL_PRIMARY_ROOT_PASSWORD=TestPassword
wds.solidstack:
image: docker.io/webdatasource/solidstack:v3.0.0
restart: always
hostname: solidstack
environment:
- EXTERNAL_IP_ADDRESS_CONFIGS=intranet
- JOB_TYPES=intranet
- MONGODB_CONNECTION_STRING=mongodb://root:TestPassword@mongodb-primary,mongodb-secondary/Solidstack?authSource=admin&replicaSet=replicaset&readPreference=secondary
ports:
- 2807:8080
wds.playground:
image: docker.io/webdatasource/playground:v3.0.0
restart: always
hostname: playground
ports:
- 2808:80
wds.docs:
image: docker.io/webdatasource/docs:3.0.0
restart: always
ports:
- 2809:80
MONGODB_CONNECTION_STRING in wds.solidstack with a real connection string.
Replace the value of the EMBEDDING_SERVICE_URL with a URL to an embedding service. For evaluation purposes, this service can be hosted locally:
If it’s a SaaS, the API Key can be set in the EMBEDDING_SERVICE_API_KEY environment variable
IMPORTANT! MongoDB connection string must contain a database name. It might be Solidstack as in the example connection string or anything else.
services:
wds.solidstack:
image: docker.io/webdatasource/solidstack:v3.0.0
restart: unless-stopped
hostname: solidstack
environment:
- MONGODB_CONNECTION_STRING=mongodb+srv://<user>:<password>@<host>/Solidstack?appName=<cluster>&readPreference=secondary
- MONGODB_DATABASE_NAME=Solidstack
- EXTERNAL_IP_ADDRESS_CONFIGS=intranet
- JOB_TYPES=intranet
- FEATURE_FLAG_RETRIEVAL_ENABLED=true
- SEARCH_MODE=FullTextAndVector
- EMBEDDING_SERVICE_URL=http://<host>:<port>/api/embed
ports:
- 0.0.0.0:2807:8080
wds.playground:
image: docker.io/webdatasource/playground:v3.0.0
restart: unless-stopped
hostname: playground
ports:
- 0.0.0.0:2808:80
wds.docs:
image: docker.io/webdatasource/docs:3.0.0
restart: unless-stopped
ports:
- 0.0.0.0:2809:80
Replace the value of the EMBEDDING_SERVICE_URL with a URL to an embedding service. For evaluation purposes, this service can be hosted locally:
If it’s a SaaS, the API Key can be set in the EMBEDDING_SERVICE_API_KEY environment variable
By default, system DB (MongoDB) is used to cache web pages. This behavior can be changed by providing the wds.datakeeper service with a CACHE_CONNECTION_STRING.
IMPORTANT! MongoDB connection strings must contain a database name. The names might be the same as values in the example connection strings or others. IMPORTANT! This feature is available starting from the Business Plan
services:
wds.crawler:
image: docker.io/webdatasource/crawler:v3.0.0
restart: unless-stopped
hostname: crawler
environment:
- DATAKEEPER_ORIGIN=http://datakeeper
- SERVICE_HOST=crawler
- EXTERNAL_IP_ADDRESS_CONFIGS=intranet
- LICENSE_KEY=[LICENSE]
wds.dapi:
image: docker.io/webdatasource/dapi:v3.0.0
restart: unless-stopped
hostname: dapi
environment:
- MONGODB_CONNECTION_STRING=mongodb+srv://<user>:<password>@<host>/Dapi?appName=<cluster>&readPreference=secondary
- DATAKEEPER_ORIGIN=http://datakeeper
- SCRAPER_ORIGIN=http://scraper
- IDEALER_ORIGIN=http://idealer
- JOBER_ORIGIN=http://jober
- RETRIEVER_ORIGIN=http://retriever
- JOB_TYPES=intranet
- LICENSE_KEY=[LICENSE]
ports:
- 0.0.0.0:2807:8080
wds.jober:
image: docker.io/webdatasource/jober:v3.0.0
restart: unless-stopped
hostname: jober
environment:
- MONGODB_CONNECTION_STRING=mongodb+srv://<user>:<password>@<host>/Jober?appName=<cluster>&readPreference=secondary
- DATAKEEPER_ORIGIN=http://datakeeper
- SCRAPER_ORIGIN=http://scraper
- DAPI_ORIGIN=http://dapi
- LICENSE_KEY=[LICENSE]
wds.datakeeper:
image: docker.io/webdatasource/datakeeper:v3.0.0
restart: unless-stopped
hostname: datakeeper
environment:
- MONGODB_CONNECTION_STRING=mongodb+srv://<user>:<password>@<host>/Datakeeper?appName=<cluster>&readPreference=secondary
- CACHE_CONNECTION_STRING=s3://<access-key>:<secret-key>@<host>:<port>/<bucket>?ssl=true
- IDEALER_ORIGIN=http://idealer
- LICENSE_KEY=[LICENSE]
wds.idealer:
image: docker.io/webdatasource/idealer:v3.0.0
restart: unless-stopped
hostname: idealer
environment:
- MONGODB_CONNECTION_STRING=mongodb+srv://<user>:<password>@<host>/Idealer?appName=<cluster>&readPreference=secondary
- LICENSE_KEY=[LICENSE]
wds.scraper:
image: docker.io/webdatasource/scraper:v3.0.0
restart: unless-stopped
hostname: scraper
environment:
- MONGODB_CONNECTION_STRING=mongodb+srv://<user>:<password>@<host>/Scraper?appName=<cluster>&readPreference=secondary
- IDEALER_ORIGIN=http://idealer
- LICENSE_KEY=[LICENSE]
wds.retriever:
image: docker.io/webdatasource/retriever:v3.0.0
restart: unless-stopped
hostname: retriever
environment:
- MONGODB_CONNECTION_STRING=mongodb+srv://<user>:<password>@<host>/Retriever?appName=<cluster>&readPreference=secondary
- SEARCH_DB_CONNECTION_STRING=mongodb://<user>:<password>@<host>:<port>/Retriever?authSource=admin&directConnection=true
- EMBEDDING_SERVICE_URL=http://<host>:<port>/api/embed
- IDEALER_ORIGIN=http://idealer
- SEARCH_MODE=FullTextAndVector
- LICENSE_KEY=[LICENSE]
wds.playground:
image: docker.io/webdatasource/playground:v3.0.0
restart: unless-stopped
hostname: playground
ports:
- 0.0.0.0:2808:80
wds.docs:
image: docker.io/webdatasource/docs:3.0.0
restart: unless-stopped
ports:
- 0.0.0.0:2809:80
Pending reconciliation. This release snippet does not yet match the complete canonical topology and is not ready to run.
IMPORTANT! This feature is available starting from the Business Plan
services:
mongodb-primary:
image: docker.io/zcube/bitnami-compat-mongodb:6.0
restart: always
hostname: mongodb-primary
environment:
- MONGODB_ADVERTISED_HOSTNAME=mongodb-primary
- MONGODB_ROOT_USER=root
- MONGODB_ROOT_PASSWORD=TestPassword
- MONGODB_REPLICA_SET_MODE=primary
- MONGODB_REPLICA_SET_KEY=TestReplicasetKey
mongodb-secondary:
image: docker.io/zcube/bitnami-compat-mongodb:6.0
restart: always
hostname: mongodb-secondary
depends_on:
- mongodb-primary
environment:
- MONGODB_ADVERTISED_HOSTNAME=mongodb-secondary
- MONGODB_REPLICA_SET_MODE=secondary
- MONGODB_INITIAL_PRIMARY_HOST=mongodb-primary
- MONGODB_REPLICA_SET_KEY=TestReplicasetKey
- MONGODB_INITIAL_PRIMARY_ROOT_PASSWORD=TestPassword
mongodb-arbiter:
image: docker.io/zcube/bitnami-compat-mongodb:6.0
restart: always
hostname: mongodb-arbiter
depends_on:
- mongodb-primary
environment:
- MONGODB_ADVERTISED_HOSTNAME=mongodb-arbiter
- MONGODB_REPLICA_SET_MODE=arbiter
- MONGODB_INITIAL_PRIMARY_HOST=mongodb-primary
- MONGODB_REPLICA_SET_KEY=TestReplicasetKey
- MONGODB_INITIAL_PRIMARY_ROOT_PASSWORD=TestPassword
minio:
image: docker.io/bitnami/minio:2024
restart: always
hostname: minio
environment:
- MINIO_DEFAULT_BUCKETS=pages-cache
- MINIO_ROOT_USER=TestAccessKey
- MINIO_ROOT_PASSWORD=TestSecretKey
- MINIO_FORCE_NEW_KEYS=no
wds.crawler:
image: docker.io/webdatasource/crawler:v3.0.0
restart: always
hostname: crawler
environment:
- DATAKEEPER_ORIGIN=http://datakeeper
- SERVICE_HOST=crawler
- EXTERNAL_IP_ADDRESS_CONFIGS=intranet
- LICENSE_KEY=[LICENSE]
wds.datakeeper:
image: docker.io/webdatasource/datakeeper:v3.0.0
restart: always
hostname: datakeeper
environment:
- MONGODB_CONNECTION_STRING=mongodb://root:TestPassword@mongodb-primary,mongodb-secondary/Datakeeper?authSource=admin&replicaSet=replicaset&readPreference=secondary
- CACHE_CONNECTION_STRING=s3://TestAccessKey:TestSecretKey@minio:9000/pages-cache?ssl=false
- IDEALER_ORIGIN=http://idealer
- LICENSE_KEY=[LICENSE]
wds.idealer:
image: docker.io/webdatasource/idealer:v3.0.0
restart: always
hostname: idealer
environment:
- MONGODB_CONNECTION_STRING=mongodb://root:TestPassword@mongodb-primary,mongodb-secondary/Idealer?authSource=admin&replicaSet=replicaset&readPreference=secondary
- LICENSE_KEY=[LICENSE]
wds.scraper:
image: docker.io/webdatasource/scraper:v3.0.0
restart: always
hostname: scraper
environment:
- MONGODB_CONNECTION_STRING=mongodb://root:TestPassword@mongodb-primary,mongodb-secondary/Scraper?authSource=admin&replicaSet=replicaset&readPreference=secondary
- IDEALER_ORIGIN=http://idealer
- LICENSE_KEY=[LICENSE]
wds.dapi:
image: docker.io/webdatasource/dapi:v3.0.0
restart: always
hostname: dapi
environment:
- MONGODB_CONNECTION_STRING=mongodb://root:TestPassword@mongodb-primary,mongodb-secondary/Dapi?authSource=admin&replicaSet=replicaset&readPreference=secondary
- DATAKEEPER_ORIGIN=http://datakeeper
- SCRAPER_ORIGIN=http://scraper
- IDEALER_ORIGIN=http://idealer
- JOBER_ORIGIN=http://jober
- RETRIEVER_ORIGIN=http://retriever
- JOB_TYPES=intranet
- LICENSE_KEY=[LICENSE]
ports:
- 2807:8080
wds.jober:
image: docker.io/webdatasource/jober:v3.0.0
restart: always
hostname: jober
environment:
- MONGODB_CONNECTION_STRING=mongodb://root:TestPassword@mongodb-primary,mongodb-secondary/Jober?authSource=admin&replicaSet=replicaset&readPreference=secondary
- DATAKEEPER_ORIGIN=http://datakeeper
- SCRAPER_ORIGIN=http://scraper
- DAPI_ORIGIN=http://dapi
- LICENSE_KEY=[LICENSE]
wds.retriever:
image: docker.io/webdatasource/retriever:v3.0.0
restart: always
hostname: retriever
environment:
- MONGODB_CONNECTION_STRING=mongodb://root:TestPassword@mongodb-primary,mongodb-secondary/Retriever?authSource=admin&replicaSet=replicaset&readPreference=secondary
- SEARCH_DB_CONNECTION_STRING=mongodb://root:TestPassword@mongodb-primary,mongodb-secondary/Retriever?authSource=admin&replicaSet=replicaset&readPreference=secondary
- EMBEDDING_SERVICE_URL=http://host.docker.internal:11434/api/embed
- IDEALER_ORIGIN=http://idealer
- SEARCH_MODE=FullTextAndVector
- LICENSE_KEY=[LICENSE]
wds.playground:
image: docker.io/webdatasource/playground:v3.0.0
restart: always
hostname: playground
ports:
- 2808:80
wds.docs:
image: docker.io/webdatasource/docs:3.0.0
restart: always
ports:
- 2809:80
Running Docker Compose
After an appropriate deployment option is selected and a docker-compose configuration has been copied to a file (e.g., wds-docker-compose.yml), there are two types of scripts to run docker-compose:
- Windows - for Windows OS
- Linux - for Linux-based OS including MacOS
NOTE_ If another version is currently running, just replace the old docker-compose configuration with the new one (of the same option) and execute the selected script. The only services with changed versions will be recreated. If the new version is of a different option, execute the docker compose down command beforehand.
set COMPOSE_FILE=wds-docker-compose.yml && docker compose up -d
export COMPOSE_FILE=wds-docker-compose.yml && docker compose up -d