Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,6 @@ These are things that I want to implement here.
- [x] Monitoring (prometheus)
- [x] Docker
- [x] CI/CD
- [x] Reverse Proxy (nginx)
- [ ] GraphQL API
- [ ] gRPC Layer
18 changes: 18 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,24 @@ services:
test: ["CMD", "wget", "--spider", "-q", "http://localhost:3001"]
interval: 10s
retries: 5

nginx:
image: nginx:alpine
container_name: nginx
ports:
- "80:80"
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- devtasker
- prometheus
- grafana
networks:
- monitor
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://devtasker:3000/health"] # check if nginx can reach devtasker
interval: 10s
retries: 5

volumes:
db_data:
Expand Down
36 changes: 36 additions & 0 deletions nginx/default.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Limit each IP address can make 10 request/s
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;

server {
listen 80;

# Reverse proxy for devtasker, from localhost:3000/ to localhost/
location / {
proxy_pass http://devtasker:3000;
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_redirect off;
}

# Apply the rate limiter for these endpoint and methods
location /api/task {
limit_req zone=mylimit burst=20;
proxy_pass http://devtasker:3000;
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_redirect off;

}

# Disable logging for /health
location = /health {
proxy_pass http://devtasker:3000;
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_redirect off;
access_log off;
}
}