Self-hosted infrastructure with Cloudflare Tunnel, Nginx reverse proxy, and Docker Compose.
Internet
│
Cloudflare Edge (SSL termination)
│
cloudflared (Tunnel)
│
Nginx Reverse Proxy ─────────────────── aramis_network ───────────────────
│ │
portainer:9000 planka:1337 + postgres:5432
(container management) (project management)
All services communicate over a shared Docker bridge network (aramis_network).
app-aramis/
├── aramis/ # Core infrastructure
│ ├── docker-compose.yml # nginx, portainer, cloudflared
│ ├── .env
│ └── nginx/conf.d/
│ ├── portainer.conf
│ └── management.conf
├── management-apps/ # Management services
│ ├── docker-compose.yml # planka + postgres
│ └── .env
├── example/env/
│ ├── aramis/.env
│ └── management-apps/.env
└── README.md
# 1. Create shared network
docker network create aramis_network
# 2. Copy and fill env files
copy example\env\aramis\.env aramis\.env
copy example\env\management-apps\.env management-apps\.env
# 3. Start stacks
cd aramis && docker compose up -d
cd management-apps && docker compose up -d# your-stack/docker-compose.yml
services:
myservice:
image: myimage:latest
networks:
- aramis_network
networks:
aramis_network:
external: trueThen add a server block in aramis/nginx/conf.d/:
server {
listen 80;
server_name your_domain.com;
location / {
proxy_pass http://myservice:PORT;
proxy_set_header Host $host;
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;
}
}# Start all
cd aramis && docker compose up -d
cd management-apps && docker compose up -d
# Logs
cd aramis && docker compose logs -f
cd management-apps && docker compose logs -f
# Stop
cd aramis && docker compose down
cd management-apps && docker compose down
# Reload nginx (after config change)
docker exec nginx nginx -s reloadStacks pull env vars from their .env file automatically via Docker Compose. Template files are in example/env/.
| File | Key Variables |
|---|---|
aramis/.env |
CLOUDFLARE_TOKEN |
management-apps/.env |
PLANKA_DB_URL, PLANKA_SECRET_KEY, admin credentials |
.envfiles are gitignored. Always useexample/env/templates for new contributors.