Deployment Architecture
DigitalOcean droplet layout, Docker Compose service graph, and how the relay server is deployed and updated.
Deployment Architecture
Droplet Specs
| Property | Value |
|---|---|
| Provider | DigitalOcean |
| Region | Toronto (TOR1) |
| OS | Ubuntu LTS |
| CPU | 2 vCPU |
| RAM | 4 GB |
| Disk | 120 GB SSD |
| Public IP | 134.122.32.45 |
| Domain | forbiddenlan.foo (DNS not yet pointed) |
Running Services
Currently, teammates connect directly to http://134.122.32.45:3000. nginx is installed and the site config is written (packages/server/nginx/forbiddenlan.foo.conf) but not yet active — waiting for DNS to propagate to the domain.
Deployment Workflow
There is no CI/CD. Deployment is manual:
docker compose up --build rebuilds the server image (TypeScript compile + prisma generate), then restarts the container. Postgres data is preserved in the pgdata volume.
What Happens on Container Start
entrypoint.sh runs before the Fastify server starts:
prisma db push is idempotent — it creates tables if they don't exist or alters them to match the current schema. This means schema changes in prisma/schema.prisma are applied automatically on deploy without a separate migration step.
Port Map
| Service | Internal | External | Notes |
|---|---|---|---|
| Fastify server | 3000 | 3000 | Direct access, all traffic |
| Postgres | 5432 | — | Not published to host |
nginx + SSL (Pending)
The nginx config is ready at packages/server/nginx/forbiddenlan.foo.conf. When the domain DNS is pointed at the droplet:
After this, teammates use https://forbiddenlan.foo and wss://forbiddenlan.foo/ws.
Monitoring
No automated monitoring. To check server health: