Coolify Self-Hosted PaaS Deployment
Quick Start
Install Coolify on VM
ssh -i <key-file> <user>@<instance-ip>
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo bash
# Access: http://<instance-ip>:8000
Deploy Application
- Access Coolify UI at
http://<instance-ip>:8000
- Create admin account (first visitor gets admin)
- Add GitHub source → Create project → Deploy from repo
- Access app at
http://<container-id>.<instance-ip>.sslip.io
Server Requirements
| Resource |
Minimum |
Recommended |
| CPU |
2 vCPU |
4 vCPU |
| RAM |
2GB |
4GB |
| Storage |
30GB |
50GB |
| OS |
Ubuntu 20.04/22.04/24.04 LTS |
Ubuntu 24.04 LTS |
Required Ports:
- TCP 22 (SSH)
- TCP 80 (HTTP/Let's Encrypt)
- TCP 443 (HTTPS)
- TCP 8000 (Coolify UI)
Cloud VM Deployment
1. Provision Infrastructure
# Create security group with required ports
# - TCP 22 (SSH)
# - TCP 80 (HTTP)
# - TCP 443 (HTTPS)
# - TCP 8000 (Coolify UI)
# Launch instance with:
# - 2+ vCPU, 2GB+ RAM
# - 30GB+ root volume
# - Ubuntu LTS
# - Public IP
# - SSH key pair
2. Install Coolify
# Set key permissions
chmod 400 /path/to/key.pem
# Connect and install
ssh -o StrictHostKeyChecking=no -i /path/to/key.pem <user>@<instance-ip>
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo bash
3. Initial Setup
- Open browser:
http://<instance-ip>:8000
- IMPORTANT: Create admin account immediately
- Complete setup wizard
4. Verify Installation
ssh -i /path/to/key.pem <user>@<instance-ip> \
"sudo docker ps --format 'table {{.Names}}\t{{.Status}}' | grep coolify"
Application Deployment
Supported Build Methods
| Method |
Use Case |
| Dockerfile |
Custom container builds |
| Nixpacks |
Auto-detected language builds |
| Docker Compose |
Multi-container apps |
| Static |
HTML/JS/CSS sites |
Deploy from GitHub
- Add Source: Sources → Add New → GitHub App
- Create Project: Projects → Add New Project
- Add Resource: Add New Resource → Public/Private Repository
- Configure:
- Repository URL
- Branch
- Build pack (Dockerfile/Nixpacks)
- Port to expose
- Deploy: Click Deploy button
Sample Dockerfile Application
app/
├── main.py # Application code
├── requirements.txt # Dependencies
└── Dockerfile # Container definition
Dockerfile:
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8080
CMD ["python", "-m", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"]
Domain Configuration
Auto-generated (sslip.io):
- Format:
<container-id>.<public-ip>.sslip.io
- Works immediately, no DNS required
Custom Domain:
- Add DNS A record → EC2 public IP
- Update domain in Coolify resource settings
- Enable SSL (Let's Encrypt auto-configured)
Verification
Check Container Status
ssh -i /path/to/key.pem <user>@<instance-ip> \
"sudo docker ps --format 'table {{.Names}}\t{{.Ports}}\t{{.Status}}'"
Test Application
# Get app URL from Coolify UI
APP_URL="http://<container-id>.<public-ip>.sslip.io"
curl -s $APP_URL/
curl -s $APP_URL/health
Check Logs
# Application logs
ssh -i /path/to/key.pem <user>@<instance-ip> \
"sudo docker logs <container-name> --tail 50"
# Coolify logs
ssh -i /path/to/key.pem <user>@<instance-ip> \
"sudo docker logs coolify --tail 50"
Configuration Reference
Coolify Containers
| Container |
Purpose |
Port |
| coolify |
Main application |
8000 |
| coolify-proxy |
Traefik reverse proxy |
80, 443 |
| coolify-db |
PostgreSQL database |
5432 |
| coolify-redis |
Redis cache |
6379 |
| coolify-realtime |
WebSocket server |
6001-6002 |
Important Paths
| Path |
Purpose |
/data/coolify/source/.env |
Coolify configuration |
/data/coolify/proxy/dynamic/ |
Traefik dynamic config |
/data/coolify/applications/ |
Application data |
/data/coolify/databases/ |
Database volumes |
Environment Variables (Installation)
| Variable |
Purpose |
Example |
ROOT_USERNAME |
Admin username |
admin |
ROOT_USER_EMAIL |
Admin email |
admin@example.com |
ROOT_USER_PASSWORD |
Admin password |
SecurePass123 |
AUTOUPDATE |
Auto-update toggle |
true/false |
Production Checklist
Troubleshooting
| Issue |
Solution |
| 404 on public IP |
Access via sslip.io domain, not raw IP |
| Cannot access Coolify UI |
Check security group allows port 8000 |
| Deployment fails |
Check Coolify logs and Dockerfile syntax |
| SSL certificate fails |
Ensure port 80 open, DNS configured |
| Container not starting |
Check container logs for errors |
| Out of disk space |
Prune Docker: docker system prune -a |
| Coolify unresponsive |
Restart: docker restart coolify |
Update Coolify
ssh -i /path/to/key.pem <user>@<instance-ip> \
"cd /data/coolify/source && sudo bash upgrade.sh"
Cleanup
# Stop all containers
ssh -i /path/to/key.pem <user>@<instance-ip> \
"cd /data/coolify/source && sudo docker compose down"
# Remove Coolify data (destructive)
ssh -i /path/to/key.pem <user>@<instance-ip> \
"sudo rm -rf /data/coolify"
# Terminate cloud instance
References