4881907c28
JWT-based auth (hono/jwt + bcrypt), anonymous-first flow preserved. Registration requires invite code when REQUIRE_INVITE=true. Admin user seeded on startup (admin/admin, forced password reset). Login accepts email or username. Admin invitations management page in sidebar. Regular users get invite-a-friend button when USER_INVITATIONS > 0. Frontend gate screen blocks game access for unregistered users with invite code entry, registration, login, and password reset flows. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
43 lines
977 B
YAML
43 lines
977 B
YAML
services:
|
|
web:
|
|
image: gitea.thewrightserver.net/josh/aihostingtycoon/web:latest
|
|
ports:
|
|
- "80:80"
|
|
depends_on:
|
|
- server
|
|
restart: unless-stopped
|
|
|
|
server:
|
|
image: gitea.thewrightserver.net/josh/aihostingtycoon/server:latest
|
|
ports:
|
|
- "3001:3001"
|
|
environment:
|
|
- DATABASE_URL=postgresql://aitycoon:aitycoon@db:5432/aitycoon
|
|
- PORT=3001
|
|
- CORS_ORIGIN=*
|
|
- JWT_SECRET=change-me-to-a-random-secret
|
|
- REQUIRE_INVITE=true
|
|
- USER_INVITATIONS=0
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
restart: unless-stopped
|
|
|
|
db:
|
|
image: postgres:17-alpine
|
|
environment:
|
|
- POSTGRES_USER=aitycoon
|
|
- POSTGRES_PASSWORD=aitycoon
|
|
- POSTGRES_DB=aitycoon
|
|
volumes:
|
|
- pgdata:/var/lib/postgresql/data
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U aitycoon"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 5
|
|
restart: unless-stopped
|
|
|
|
volumes:
|
|
pgdata:
|