docs/self-hosting/platform/docker-compose.mdx
One-click deployment is supported in Unix environments (Linux/macOS).
Windows users must run through WSL 2.
The one-click startup script is only for initial deployment; for subsequent deployments, please refer to the Custom Deployment section.
Port occupation check: Ensure that ports 3210, 9000, and 9001 are available.
Execute the following commands to set up the deployment environment; the directory lobehub will be used to store your configuration files and subsequent database files.
mkdir lobehub && cd lobehub
Fetch and execute the deployment script:
bash <(curl -fsSL https://lobe.li/setup.sh) -l en
The script supports the following deployment modes; please choose the appropriate mode based on your needs and read the rest of the documentation.
http access; suitable for no domain or private network use.http/https access with reverse proxy; suitable for personal or team use.Continue pressing enter to use the default configuration.
After the script finishes running, check the configuration generation report which includes service URLs and passwords.
The results of the secure key generation are as follows:
LobeHub:
- URL: http://localhost:3210
RustFS:
- URL: http://localhost:9000
- Username: admin
- Password: 8c82ea41
docker compose up -d
docker logs -f lobehub
If you see the following logs in the container, it means the startup was successful:
[Database] Start to migration...
✅ database migration pass.
-------------------------------------
▲ Next.js 16.x.x
- Local: http://localhost:3210
- Network: http://0.0.0.0:3210
✓ Starting...
✓ Ready in 95ms
Visit your LobeHub service at http://localhost:3210. </Steps>
In port mode, you need to complete the following based on the script prompts:
After the script finishes running, check the configuration generation report which includes service URLs and passwords.
The results of the secure key generation are as follows:
LobeHub:
- URL: http://your_server_ip:3210
RustFS:
- URL: http://your_server_ip:9000
- Username: admin
- Password: dbac8440
docker compose up -d
docker logs -f lobehub
If you see the following logs in the container, it means the startup was successful:
[Database] Start to migration...
✅ database migration pass.
-------------------------------------
▲ Next.js 16.x.x
- Local: http://your_server_ip:3210
- Network: http://0.0.0.0:3210
✓ Starting...
✓ Ready in 95ms
You can access your LobeHub service at http://your_server_ip:3210.
</Steps>
In domain mode, you need to complete the reverse proxy configuration and ensure that the LAN/public can access the following services. Please use a reverse proxy to map the following service ports to the domain names:
| Domain | Proxy Port | Required |
|---|---|---|
lobe.example.com | 3210 | Yes |
s3.example.com | 9000 | Yes |
s3-ui.example.com | 9001 |
In domain mode, you need to complete the following configurations based on script prompts:
lobe.example.coms3.example.comhttp or https- Domain setup for the LobeHub service: `lobe.example.com:${PORT1}`
- Domain setup for the S3 service: `lobe.example.com:${PORT2}`
You need to configure forwarding rules for each port in the reverse proxy.
**Port Mode vs Domain Mode:**
- Port Mode: The script automatically uses default ports (3210/9000/9001)
- Domain Mode: You can customize ports (via reverse proxy configuration)
- The domain configuration here must match the reverse proxy configuration in step `1`.
- If you are using Cloudflare for domain resolution and have activated `full proxy`, please use the `https` protocol.
- If you have used the HTTPS protocol, ensure that your domain certificate is correctly configured; one-click deployment does not support self-signed certificates by default.
After the script finishes running, check the configuration generation report which includes service URLs and passwords.
The results of the secure key generation are as follows:
LobeHub:
- URL: https://lobe.example.com
RustFS:
- URL: https://s3.example.com
- Username: admin
- Password: dbac8440
docker compose up -d
docker logs -f lobehub
If you see the following logs in the container, it indicates a successful startup:
[Database] Start to migration...
✅ database migration pass.
-------------------------------------
▲ Next.js 16.x.x
- Local: https://localhost:3210
- Network: http://0.0.0.0:3210
✓ Starting...
✓ Ready in 95ms
You can access your LobeHub service via https://lobe.example.com.
</Steps>
This section mainly introduces the configurations that need to be modified to customize the deployment of the LobeHub service in different network environments. Before starting, you can download the Docker Compose configuration file and the environment variable configuration file.
curl -O https://raw.githubusercontent.com/lobehub/lobehub/HEAD/docker-compose/deploy/docker-compose.yml
curl -O https://raw.githubusercontent.com/lobehub/lobehub/HEAD/docker-compose/deploy/.env.example
mv .env.example .env
Generally, to fully run the LobeHub database version, you will need at least the following three services:
These services can be combined through self-hosting or online cloud services to meet various deployment needs. In this article, we provide a Docker Compose configuration entirely based on open-source self-hosted services, which can be used directly to start the LobeHub database version or modified to suit your requirements.
We use RustFS as the local S3 object storage service by default. To configure SSO authentication services, please refer to the Authentication Services documentation.
<Callout type="warning"> If your network topology is complex, please make sure these services can communicate properly within your network environment. </Callout>Now, we will introduce the necessary configurations for running these services:
LobeHub needs to provide a public access URL for object files for the LLM service provider, so you need to configure the S3 Endpoint:
<Callout type="tip"> Using `S3_ENDPOINT=http://rustfs:9000` directly will prevent conversation image uploads from working (browser cannot resolve container names), but avatar uploads are not affected. </Callout>S3_ENDPOINT=https://s3.example.com
This configuration is found in the docker-compose.yml file, and you will need to configure the database name and password:
services:
lobe:
environment:
- 'DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@postgresql:5432/${LOBE_DB_NAME}'
INTERNAL_APP_URL)INTERNAL_APP_URL=http://localhost:3210
APP_URL: Used for browser/client access, OAuth callbacks, webhooks, etc.INTERNAL_APP_URL: Used for internal server-to-server communication within the container (bypasses CDN/proxy/host network)You can check the logs using the following command:
docker logs -f lobehub
If you encounter issues during table creation, you can try the following command to forcibly remove the database container and restart:
docker compose down # Stop the service
sudo rm -rf ./data # Remove mounted database data
docker compose up -d # Restart
For production deployments with a custom domain and HTTPS, configure a reverse proxy in front of LobeHub.
Nginx:
server {
listen 443 ssl http2;
server_name lobehub.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:3210;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Caddy (automatically handles HTTPS with Let's Encrypt):
lobehub.example.com {
reverse_proxy localhost:3210
}
Traefik — add labels to the lobe service in docker-compose.yml:
labels:
- "traefik.enable=true"
- "traefik.http.routers.lobehub.rule=Host(`lobehub.example.com`)"
- "traefik.http.routers.lobehub.entrypoints=websecure"
- "traefik.http.routers.lobehub.tls.certresolver=letsencrypt"
# View logs (all services)
docker compose logs -f
# View logs for a specific service
docker compose logs -f lobehub
# Restart all services
docker compose restart
# Restart a specific service
docker compose restart lobehub
# Stop all services
docker compose stop
# Update to the latest version
docker compose pull && docker compose up -d
Database backup:
docker compose exec postgresql pg_dump -U postgres lobechat > backup.sql
Restore from backup:
docker compose exec -T postgresql psql -U postgres lobechat < backup.sql
File storage (RustFS) backup:
docker compose exec rustfs tar czf /tmp/backup.tar.gz /data
docker cp lobe-rustfs:/tmp/backup.tar.gz ./rustfs-backup.tar.gz
Redis — Redis automatically persists data with AOF. To manually save:
docker compose exec redis redis-cli BGSAVE
Minimum (light usage):
Recommended (production):
For high-traffic deployments, consider using managed database (Neon, Supabase, RDS), Redis cluster for caching, and a CDN for static assets.
Service won't start
Check service status and logs:
docker compose ps
docker compose logs [service-name]
Common causes: port already in use (change LOBE_PORT in .env), insufficient disk space, or database connection failure.
Database connection error
Verify PostgreSQL is healthy:
docker compose exec postgresql pg_isready -U postgres
If unhealthy, check its logs: docker compose logs postgresql
File upload fails
Check RustFS service:
docker compose logs rustfs
docker compose logs rustfs-init
Verify the bucket was created: docker compose exec rustfs ls /data/lobe
Running out of disk space
Check usage: docker system df
Clean up unused resources (make sure to back up first):
docker system prune -a --volumes
To configure SSO authentication services (such as Casdoor, Logto, etc.), please refer to the Authentication Services documentation.