A Docker setup for running ArcGIS Experience Builder v1.17 using Bun runtime in a single container, following best practices from the community.
This setup includes:
- A single Docker container for the complete ArcGIS Experience Builder (client and server components)
- A docker-compose configuration for easy management
- Docker native volumes for data persistence
- Automatic dependency resolution using Bun runtime
- Built-in fallback handling for the fs-extra module issue
- Docker and Docker Compose installed
- Downloaded and extracted ArcGIS Experience Builder v1.17
- ArcGIS Portal URL and App ID (register the app in your ArcGIS portal)
ArcGIS Experience Builder requires authentication to download from Esri's website:
- Go to ArcGIS Experience Builder Downloads
- Log in with your ArcGIS developer account
- Download the Experience Builder Developer Edition v1.17
- Extract the zip file to a directory named
arcgis-experience-builder
in this project
# Create the arcgis-experience-builder directory
mkdir -p arcgis-experience-builder
# Extract the zip file you downloaded from Esri (avoids nested directories)
unzip arcgis-experience-builder-1.17.zip
experience-builder/
├── arcgis-experience-builder/ # Extracted Experience Builder files
│ ├── server/ # Mounted to container
│ └── client/ # Mounted to container
├── Dockerfile # Container definition using Bun runtime
├── start.sh # Startup script
└── docker-compose.yml # Docker Compose definition with native volumes
- Create an
.env
file with your configuration:
EXB_PORT_HTTP=3000
EXB_PORT_HTTPS=3001
PORTAL_URL=https://www.arcgis.com
APP_ID=your_app_id_here
- Start the container:
docker compose up -d
The container:
- Uses Bun runtime for improved performance and dependency handling
- Mounts both the Experience Builder server and client files from your extracted download
- Automatically installs required dependencies
- Runs the server component on ports 3000 (HTTP) and 3001 (HTTPS)
- Uses Docker native volumes for data persistence
This setup uses Bun instead of Node.js because:
- Better dependency resolution - fixes the notorious fs-extra module issue
- Faster startup and package installation
- Improved compatibility with the Experience Builder codebase
- Built-in fallback mechanism for missing modules
Variable | Description | Default |
---|---|---|
EXB_PORT_HTTP | HTTP port | 3000 |
EXB_PORT_HTTPS | HTTPS port | 3001 |
PORTAL_URL | ArcGIS Portal URL | https://www.arcgis.com |
APP_ID | Your registered app ID | - |
Mount Point | Description |
---|---|
./arcgis-experience-builder/server | REQUIRED: Experience Builder server files |
./arcgis-experience-builder/client | REQUIRED: Experience Builder client files |
exb-public-data | Server public files (Docker volume) |
exb-config-data | Server configuration (Docker volume) |
exb-logs-data | Server logs (Docker volume) |
- Use a reverse proxy like Nginx or Traefik for SSL termination
- Docker volumes are used for data persistence, which is better for production environments
- Monitor container health with the built-in healthcheck
- Ensure your APP_ID is properly configured in Esri Portal