Skip to content

Commit 381b9bd

Browse files
committed
localdev
1 parent bcf068e commit 381b9bd

4 files changed

Lines changed: 398 additions & 0 deletions

File tree

.env.example

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
# =============================================================================
2+
# SWECC Backend - Local Development Environment Variables
3+
# =============================================================================
4+
# Copy this file to .env and fill in the SENSITIVE values from production
5+
# =============================================================================
6+
7+
# =============================================================================
8+
# Database (PostgreSQL)
9+
# =============================================================================
10+
DB_HOST=swecc-db-instance
11+
DB_NAME=swecc
12+
DB_PORT=5432
13+
DB_USER=swecc
14+
DB_PASSWORD=swecc_dev_password
15+
16+
# =============================================================================
17+
# Redis
18+
# =============================================================================
19+
REDIS_HOST=swecc-redis-instance
20+
REDIS_PORT=6379
21+
22+
# =============================================================================
23+
# RabbitMQ
24+
# =============================================================================
25+
RABBITMQ_USER=guest
26+
RABBITMQ_PASS=guest
27+
RABBIT_HOST=swecc-rabbitmq-instance
28+
RABBIT_PORT=5672
29+
RABBIT_VHOST=/
30+
SERVER_RABBIT_USER=guest
31+
SERVER_RABBIT_PASS=guest
32+
BOT_RABBIT_USER=guest
33+
BOT_RABBIT_PASS=guest
34+
35+
# =============================================================================
36+
# Django Server
37+
# =============================================================================
38+
DJANGO_DEBUG=true
39+
METRIC_SERVER_URL=http://swecc-chronos:8002
40+
41+
# JWT for session/auth (SENSITIVE - replace with prod value)
42+
JWT_SECRET=dev_jwt_secret_change_in_production
43+
44+
# =============================================================================
45+
# External Services - SENSITIVE (get from prod)
46+
# =============================================================================
47+
SENDGRID_API_KEY=SG.placeholder
48+
SUPABASE_URL=https://placeholder.supabase.co
49+
SUPABASE_KEY=placeholder_key
50+
AWS_ACCESS_KEY_ID=placeholder
51+
AWS_SECRET_ACCESS_KEY=placeholder
52+
AWS_BUCKET_NAME=swecc-dev-bucket
53+
AWS_DEFAULT_REGION=us-west-2
54+
GEMINI_API_KEY=placeholder
55+
56+
# =============================================================================
57+
# Discord Bot - SENSITIVE (get from prod or use test bot)
58+
# =============================================================================
59+
DISCORD_TOKEN=placeholder
60+
SWECC_SERVER=000000000000000000
61+
SWECC_API_KEY=placeholder
62+
63+
# Discord Channel IDs (use placeholder IDs - replace with real ones for bot testing)
64+
ADMIN_CHANNEL=000000000000000000
65+
READING_GROUP_CHANNEL=000000000000000000
66+
LC_CHANNEL_ID=000000000000000000
67+
TRANSCRIPTS_CHANNEL=000000000000000000
68+
SWECC_RESUME_CHANNEL=000000000000000000
69+
INTERNSHIP_CHANNEL_ID=000000000000000000
70+
NEW_GRAD_CHANNEL_ID=000000000000000000
71+
OFF_TOPIC_CHANNEL_ID=000000000000000000
72+
TIMELINE_CHANNEL=000000000000000000
73+
74+
# Discord Role IDs
75+
OFFICER_ROLE_ID=000000000000000000
76+
VERIFIED_ROLE_ID=000000000000000000
77+
VERIFIED_EMAIL_ROLE_ID=000000000000000000
78+
COHORT_CATEGORY_ID=000000000000000000
79+
80+
# Bot misc
81+
PREFIX_COMMAND=!
82+
CALENDAR_URL=https://calendar.google.com/placeholder
83+
84+
# Advent of Code
85+
AOC_LEADERBOARD_ID=0
86+
AOC_SESSION=placeholder
87+
AOC_LEADERBOARD_KEY=placeholder
88+
89+
# =============================================================================
90+
# Scheduler (optional for local dev)
91+
# =============================================================================
92+
DOCKER_NETWORK=swecc-network
93+
SCHEDULER_CONTAINER_NAME=swecc-scheduler
94+
SCHEDULER_LOG_DIR=/app/logs
95+
SCHEDULER_TEMP_DIR=/app/tmp
96+
SCHEDULER_BASE_URL=http://swecc-server:8000
97+
SCHEDULER_REQUEST_TIMEOUT=30
98+
SCHEDULER_MAX_RETRIES=3
99+
SCHEDULER_RETRY_DELAY=5
100+
SCHEDULER_API_KEY=placeholder
101+

.gitignore

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Environment files with secrets
2+
*.env
3+
prod.*.env
4+
5+
# Python
6+
__pycache__/
7+
*.py[cod]
8+
*$py.class
9+
*.so
10+
.Python
11+
venv/
12+
.venv/
13+
env/
14+
.env/
15+
ENV/
16+
17+
# Node
18+
node_modules/
19+
npm-debug.log
20+
yarn-error.log
21+
22+
# IDE
23+
.idea/
24+
.vscode/
25+
*.swp
26+
*.swo
27+
*~
28+
29+
# OS
30+
.DS_Store
31+
Thumbs.db
32+
33+
# Docker
34+
*.log
35+

docker-compose.yml

Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
1+
services:
2+
# =============================================================================
3+
# Infrastructure Services
4+
# =============================================================================
5+
db:
6+
image: postgres:13
7+
container_name: swecc-db-instance
8+
networks:
9+
- swecc-network
10+
volumes:
11+
- postgres_data:/var/lib/postgresql/data
12+
ports:
13+
- "${DB_PORT:-5432}:5432"
14+
environment:
15+
POSTGRES_DB: ${DB_NAME:-swecc}
16+
POSTGRES_USER: ${DB_USER:-swecc}
17+
POSTGRES_PASSWORD: ${DB_PASSWORD:-swecc_dev_password}
18+
healthcheck:
19+
test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-swecc} -d ${DB_NAME:-swecc}"]
20+
interval: 5s
21+
timeout: 5s
22+
retries: 5
23+
24+
redis:
25+
build: ./infra/redis
26+
container_name: swecc-redis-instance
27+
networks:
28+
- swecc-network
29+
ports:
30+
- "${REDIS_PORT:-6379}:6379"
31+
volumes:
32+
- redis_data:/data
33+
healthcheck:
34+
test: ["CMD", "redis-cli", "ping"]
35+
interval: 5s
36+
timeout: 5s
37+
retries: 5
38+
39+
rabbitmq:
40+
image: rabbitmq:3-management
41+
container_name: swecc-rabbitmq-instance
42+
networks:
43+
- swecc-network
44+
ports:
45+
- "5672:5672"
46+
- "15672:15672"
47+
environment:
48+
RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER:-guest}
49+
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASS:-guest}
50+
volumes:
51+
- rabbitmq_data:/var/lib/rabbitmq
52+
healthcheck:
53+
test: ["CMD", "rabbitmq-diagnostics", "check_running"]
54+
interval: 10s
55+
timeout: 10s
56+
retries: 5
57+
58+
# =============================================================================
59+
# Application Services
60+
# =============================================================================
61+
server:
62+
build:
63+
context: ./services/server
64+
target: development
65+
container_name: swecc-server
66+
networks:
67+
- swecc-network
68+
volumes:
69+
- ./services/server:/app
70+
ports:
71+
- "8000:8000"
72+
depends_on:
73+
db:
74+
condition: service_healthy
75+
redis:
76+
condition: service_healthy
77+
env_file:
78+
- .env
79+
environment:
80+
- DB_HOST=swecc-db-instance
81+
- REDIS_HOST=swecc-redis-instance
82+
- RABBIT_HOST=swecc-rabbitmq-instance
83+
command: >
84+
bash -c "cd server && python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
85+
86+
sockets:
87+
build: ./services/sockets
88+
container_name: swecc-sockets
89+
networks:
90+
- swecc-network
91+
volumes:
92+
- ./services/sockets/app:/app/app
93+
ports:
94+
- "8004:8004"
95+
depends_on:
96+
db:
97+
condition: service_healthy
98+
redis:
99+
condition: service_healthy
100+
env_file:
101+
- .env
102+
environment:
103+
- DB_HOST=swecc-db-instance
104+
- REDIS_HOST=swecc-redis-instance
105+
- RABBIT_HOST=swecc-rabbitmq-instance
106+
command: uvicorn app.main:app --host 0.0.0.0 --port 8004 --reload
107+
108+
chronos:
109+
build: ./services/chronos
110+
container_name: swecc-chronos
111+
networks:
112+
- swecc-network
113+
volumes:
114+
- ./services/chronos:/app
115+
- /var/run/docker.sock:/var/run/docker.sock
116+
ports:
117+
- "8002:8002"
118+
env_file:
119+
- .env
120+
command: uvicorn app.main:app --host 0.0.0.0 --port 8002 --reload
121+
122+
ai:
123+
build: ./services/ai
124+
container_name: swecc-ai
125+
networks:
126+
- swecc-network
127+
volumes:
128+
- ./services/ai/app:/app/app
129+
ports:
130+
- "8008:8008"
131+
depends_on:
132+
rabbitmq:
133+
condition: service_healthy
134+
env_file:
135+
- .env
136+
environment:
137+
- RABBIT_HOST=swecc-rabbitmq-instance
138+
command: uvicorn app.main:app --host 0.0.0.0 --port 8008 --reload
139+
140+
bot:
141+
build: ./services/bot
142+
container_name: swecc-bot
143+
networks:
144+
- swecc-network
145+
volumes:
146+
- ./services/bot:/app
147+
depends_on:
148+
rabbitmq:
149+
condition: service_healthy
150+
server:
151+
condition: service_started
152+
env_file:
153+
- .env
154+
environment:
155+
- RABBIT_HOST=swecc-rabbitmq-instance
156+
- SWECC_URL=http://swecc-server:8000
157+
158+
# Scheduler is optional for local dev (uncomment if needed)
159+
# scheduler:
160+
# build:
161+
# context: ./services/scheduler
162+
# args:
163+
# ENV: local
164+
# container_name: swecc-scheduler
165+
# networks:
166+
# - swecc-network
167+
# env_file:
168+
# - .env
169+
# environment:
170+
# - DOCKER_NETWORK=swecc-network
171+
# - SCHEDULER_BASE_URL=http://swecc-server:8000
172+
173+
# =============================================================================
174+
# Reverse Proxy (optional for local dev)
175+
# =============================================================================
176+
nginx:
177+
image: nginx:stable-alpine
178+
container_name: swecc-nginx
179+
networks:
180+
- swecc-network
181+
ports:
182+
- "80:80"
183+
volumes:
184+
- ./infra/nginx.dev.conf:/etc/nginx/nginx.conf:ro
185+
depends_on:
186+
- server
187+
- sockets
188+
profiles:
189+
- with-nginx
190+
191+
volumes:
192+
postgres_data:
193+
redis_data:
194+
rabbitmq_data:
195+
196+
networks:
197+
swecc-network:
198+
name: swecc-network
199+
driver: bridge
200+

0 commit comments

Comments
 (0)