Docs/Getting Started/Self-Host with Docker

Getting Started

Self-Host with Docker

Run the complete EasyFlow stack on your own server in under 10 minutes. Everything included.

What you need

RequirementVersionCheck
Docker24+docker --version
Docker Composev2+docker compose version
GitAnygit --version
2GB RAMMinimumFor all services running simultaneously

Start the stack

bash
# 1. Clone the repo
git clone https://github.com/your-org/easyflow.git
cd easyflow

# 2. Copy the env template
cp .env.example .env
# Edit .env with your public URLs and secrets

# 3. Start everything
docker compose up -d --build

# That's it. Five services start:
# ✓ web            (Next.js frontend)
# ✓ api            (FastAPI backend)
# ✓ postgres       (database)
# ✓ rabbitmq       (message bus)
# ✓ n8n            (ERP automation)
ℹThe full stack is now included in docker compose. For a free public demo, one Oracle Cloud Always Free VM is enough to run all services.

What starts up

ServiceURLWhat it does
Web app (Next.js)localhost:3000The full EasyFlow product — canvas, dashboards, docs, admin portal
API (FastAPI)localhost:8000REST API, webhooks, access control, data persistence
n8nlocalhost:5678Visual ERP automation — import templates, connect SAP/Oracle/Dynamics
RabbitMQlocalhost:15672Message queue management UI (guest/guest)
PostgreSQLlocalhost:5432Database for API and n8n (easyflow/easyflow)

First-time configuration

1
Set up Google OAuth (optional)

If you want Google sign-in, go to Google Cloud Console → APIs → Credentials → Create OAuth 2.0 Client. Add your app URL callback. Put the client ID and secret into .env. If you skip this, email/password still works for demo use.

2
Generate your secrets

Run: openssl rand -hex 32. Paste the outputs into BETTER_AUTH_SECRET and WEBHOOK_SECRET_KEY in .env.

3
Open the app

Go to http://localhost:3000. Sign in with Google. You'll land on the Globe screen with the demo tenant workspaces preloaded.

4
Create your first tenant

Open Admin Portal (purple shield in sidebar). Click New Tenant and follow the 4-step wizard.

Production checklist

  • Replace WEBHOOK_SECRET_KEY and BETTER_AUTH_SECRET with strong random values (openssl rand -hex 32)
  • Set NEON_DATABASE_URL to a managed Postgres instance (Neon, Supabase, RDS, or self-hosted)
  • Update N8N_HOST and WEBHOOK_URL in docker-compose.yml to your server's public IP or domain
  • Add your domain to Google OAuth's authorized redirect URIs
  • Enable HTTPS with a reverse proxy (nginx + Certbot is the standard setup)
  • Set POSTGRES_PASSWORD to a strong password, not the default
  • Back up the postgres_data Docker volume regularly