-
Notifications
You must be signed in to change notification settings - Fork 22
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
updated deploy preview workflow and docker files accordingly (test Nginx config) #4045
base: staging
Are you sure you want to change the base?
Changes from 2 commits
8b99e73
e870447
f68fde6
743f2e1
91d2ba6
c05f399
e506d04
19dd69c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,16 +1,13 @@ | ||
#!/bin/sh | ||
|
||
# Exit immediately if a command exits with a non-zero status | ||
# Exit on error | ||
set -e | ||
|
||
# Run Django migrations | ||
echo "Running migrations..." | ||
python manage.py migrate --noinput | ||
|
||
# Collect static files (ensure the static files directory exists) | ||
echo "Collecting static files..." | ||
python manage.py collectstatic --noinput | ||
|
||
# Start Gunicorn server to serve the Django application | ||
echo "Starting Gunicorn server..." | ||
exec gunicorn core.wsgi:application --bind 0.0.0.0:8000 --timeout 600 --workers 3 --log-level info | ||
echo "Starting Supervisor (which runs Nginx + Gunicorn)..." | ||
exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
user nginx; | ||
worker_processes auto; | ||
pid /var/run/nginx.pid; | ||
|
||
events { | ||
worker_connections 1024; | ||
} | ||
|
||
http { | ||
sendfile on; | ||
tcp_nopush on; | ||
tcp_nodelay on; | ||
keepalive_timeout 65; | ||
types_hash_max_size 2048; | ||
|
||
include /etc/nginx/mime.types; | ||
default_type application/octet-stream; | ||
|
||
access_log /var/log/nginx/access.log; | ||
error_log /var/log/nginx/error.log; | ||
|
||
client_max_body_size 10M; | ||
|
||
upstream django_app { | ||
# Gunicorn will be running on 127.0.0.1:8000 inside the same container | ||
server 127.0.0.1:8000; | ||
} | ||
|
||
server { | ||
listen ${PORT}; | ||
server_name _; | ||
|
||
location /static/ { | ||
alias /usr/share/nginx/html/static/; | ||
expires 1y; | ||
access_log off; | ||
add_header Cache-Control "public"; | ||
} | ||
|
||
location / { | ||
proxy_pass http://django_app; | ||
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_set_header X-Forwarded-Proto $scheme; | ||
} | ||
Comment on lines
+43
to
+49
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add security headers and rate limiting The proxy configuration looks good, but missing important security headers and rate limiting. Add these security enhancements: # Add before the location blocks
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
# Add inside the location / block
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
limit_req zone=one burst=5 nodelay; |
||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
[supervisord] | ||
nodaemon=true | ||
|
||
[program:gunicorn] | ||
command=gunicorn core.wsgi:application --bind 0.0.0.0:8000 --timeout 600 --workers 3 --log-level info | ||
directory=/app | ||
autostart=true | ||
autorestart=true | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Review Gunicorn worker configuration and timeout A few considerations for the Gunicorn configuration:
Consider these adjustments: -command=gunicorn core.wsgi:application --bind 0.0.0.0:8000 --timeout 600 --workers 3 --log-level info
+command=gunicorn core.wsgi:application --bind 0.0.0.0:8000 --timeout 120 --workers %(ENV_GUNICORN_WORKERS)s --log-level info --access-logfile - --error-logfile - And add environment variable in your deployment configuration: GUNICORN_WORKERS=3 # adjust based on: (2 * cpu_cores) + 1 |
||
|
||
[program:nginx] | ||
command=/usr/sbin/nginx -g "daemon off;" | ||
autostart=true | ||
autorestart=true |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix the string interpolation syntax in the comment body.
The current syntax
${needs.website.outputs.url}
won't work in GitHub Actions. GitHub Actions requires the${{ }}
expression syntax for variable interpolation.Apply this fix:
📝 Committable suggestion