Docker Installation (External Nginx)
In this setup, the NocoBase app container and the Nginx container run separately. You can start with Docker Installation (Built-in Nginx) and then switch the entry service to an external Nginx container.
When to use this setup
- You want to deploy NocoBase and the web server separately
- You want to manage the Nginx config and exposed ports yourself
- You want to expose only the proxy container to the public network
docker-compose.yml example
If you need the full image, replace latest-no-nginx with latest-full-no-nginx.
The 13000:80 mapping is only for convenient local testing, so it does not occupy the standard host ports directly. In production, you usually do not keep using 13000:80; instead, let the external Nginx container map directly to the host 80 and 443 ports.
Key points
NOCOBASE_EXTRACT_CLIENT_ASSETS=trueextracts client assets and generates proxy configNOCOBASE_PROXY_PROVIDER=nginxtells the app to generate Nginx configNOCOBASE_PROXY_UPSTREAM_HOST=applets the Nginx container reach theappservice through the Compose network./storagemust be mounted into both theappandnginxcontainers so they can share proxy config, static assets, and uploaded files- The
nginxcontainer should wait untilnocobase.confis generated, then link it to/etc/nginx/conf.d/default.confwithln -sf - The generated config forwards both the
/files/route underAPP_PUBLIC_PATHand the root-level/files/route to NocoBase for authenticated file previews and downloads - If you use an external Nginx container, let the
nginxcontainer handle the host port mapping. For testing, you can start with13000:80; in production, you usually expose the host80and443ports directly, while theappservice does not need to expose its port to the host
If you use a local host Nginx
If your Nginx is installed directly on the host instead of running in a Docker container, it is better to use a separate docker-compose.yml. In this setup, the app service must expose a host port directly, and the proxy-related environment variables should use host-side values.
You can use a docker-compose.yml like this:
In this variant:
NOCOBASE_PROXY_STORAGE_PATHshould be the absolute host path of yourstoragedirectoryNOCOBASE_PROXY_UPSTREAM_HOSTshould be127.0.0.1- The
appservice must keepports, so the local Nginx can reach the app through127.0.0.1:13000
After the app container starts, wait for the config file to be generated, then link it into the local Nginx config directory:
If your host Nginx does not use the conf.d directory, replace the link target with your own config path. Usually it is safer to keep nocobase.conf as a file included from the http {} context instead of copying its content manually.
If you maintain Nginx yourself instead of using the generated config, make sure /files/ and the corresponding route under APP_PUBLIC_PATH are forwarded to NocoBase before the SPA fallback rules. See Nginx Reverse Proxy for a complete example.
Related links
- Docker Installation (Built-in Nginx) — Start with the single-container setup
- Nginx Static Resource Proxy — Learn more about the generated Nginx config

