Main Docker Compose deployment for the IMDB App, built for the Mobile Development college course. It wires together the auth, user and movies microservices (consumed by uru-mobiles-imdb-app), an internal mailer worker, a public Nginx edge, and a full observability stack, behind a Cloudflare Tunnel.
Each application service is its own repository, pulled in as a git submodule: auth (connect-auth, JWT Ed25519 + 2FA), user (connect-user), movies (connect-movies, backed by the TMDB API), internal-mailer (connect-internal-mailer, RabbitMQ consumer for transactional email), api.ralvarez.app (Nginx edge), plus sql-auth/sql-user/sql-movies migration files.
Infrastructure declared directly in docker-compose.yml: PostgreSQL (per-service databases/users), Redis (token storage with per-service ACLs), RabbitMQ (mail exchange/queues), and Grafana + Prometheus + Loki + Promtail + Node Exporter + cAdvisor (Grafana public, the rest on the internal monitoring network).
| Container | Port | Notes |
|---|---|---|
api-ralvarez-app |
9000 | Public Nginx edge |
auth |
9001 | gRPC (8080) + HTTP |
user |
9002 | depends on auth |
movies |
9003 | depends on auth, calls TMDB |
worker-internal-mailer |
— | RabbitMQ consumer, no inbound port |
grafana |
3000 | public dashboard |
postgres, redis, rabbitmq, prometheus, node-exporter, cadvisor, loki, promtail |
internal only |
Copy .env.example to .env. Groups: general mode flags and DOMAIN; Postgres superuser + per-service POSTGRES_{AUTH,USER,MOVIES}_DB_*; Redis default password + per-service users; RabbitMQ users and mail queue names; JWT token durations; internal mailer (MailerSend/Resend keys, INTERNAL_MAILER_MAILER); auth settings (bootstrap admin, 2FA, password policy); MOVIES_TMDB_API_KEY; Grafana admin credentials.
A GITHUB_TOKEN build secret (file ./.github_token) is required to build the private submodule images.
git submodule update --init --recursive(orupdate_submodules.sh).- Generate the JWT key pair:
./generate_keys.sh. - Prepare SQL init files:
./prepare.sh. - Create
.envfrom.env.exampleand fill in every variable. docker compose up --build.
Cloudflare Tunnel ingress is configured via cloudflared/config.yml.example — copy it, fill in your tunnel ID/credentials, and never commit the real file.
uru-mobiles-imdb-app— matching application.
GNU General Public License v3.0 (see LICENSE).