-
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 1 commit
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 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
@@ -1192,7 +1192,7 @@ jobs: | |||||||||
--timeout=60 \ | ||||||||||
--concurrency=10 \ | ||||||||||
--image=${{ env.REGISTRY_URL }}/${{ env.PROJECT_ID }}/pr-previews/website-pr-previews:${{ github.sha }} \ | ||||||||||
--port=8000 \ | ||||||||||
--port=8080 \ | ||||||||||
--cpu=1000m \ | ||||||||||
--memory=1024Mi \ | ||||||||||
--update-secrets=/etc/env/.env=sta-env-website-backend:latest,/etc/config/google_application_credentials.json=sta-key-analytics-service-account:latest \ | ||||||||||
|
@@ -1221,5 +1221,5 @@ jobs: | |||||||||
issue_number: context.issue.number, | ||||||||||
owner: context.repo.owner, | ||||||||||
repo: context.repo.repo, | ||||||||||
body: 'website changes in this PR available for preview [here](${{ needs.website.outputs.url }})' | ||||||||||
}) | ||||||||||
body: 'website changes in this PR available for preview [here](${needs.website.outputs.url})' | ||||||||||
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. Fix the string interpolation syntax in the comment body. The current syntax Apply this fix: - body: 'website changes in this PR available for preview [here](${needs.website.outputs.url})'
+ body: 'website changes in this PR available for preview [here](${{ needs.website.outputs.url }})' 📝 Committable suggestion
Suggested change
|
||||||||||
}) |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,37 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
version: "3.8" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
services: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
web: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
build: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
context: . | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
dockerfile: Dockerfile | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
env_file: .env | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
expose: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- "8000" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
depends_on: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- db | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
volumes: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- ./staticfiles:/app/staticfiles | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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 Add essential container configurations for production readiness The web service should include restart policy and health check configurations: web:
build:
context: .
dockerfile: Dockerfile
env_file: .env
expose:
- "8000"
depends_on:
- db
+ restart: unless-stopped
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
+ interval: 30s
+ timeout: 10s
+ retries: 3
volumes:
- ./staticfiles:/app/staticfiles 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
nginx: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
build: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
context: ./nginx | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
dockerfile: Dockerfile | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ports: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- "80:80" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
depends_on: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- web | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
volumes: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# Mount the staticfiles into Nginx container | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- ./staticfiles:/usr/share/nginx/html/static | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
db: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
image: postgres:15 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
environment: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POSTGRES_USER: your_user | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POSTGRES_PASSWORD: your_password | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POSTGRES_DB: your_db | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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. Security: Avoid hardcoded database credentials Database credentials should be moved to environment variables or secrets management: environment:
- POSTGRES_USER: your_user
- POSTGRES_PASSWORD: your_password
- POSTGRES_DB: your_db
+ POSTGRES_USER: ${POSTGRES_USER}
+ POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
+ POSTGRES_DB: ${POSTGRES_DB} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
volumes: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- db_data:/var/lib/postgresql/data | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
volumes: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
db_data: |
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..." | ||
echo "Starting Gunicorn..." | ||
exec gunicorn core.wsgi:application --bind 0.0.0.0:8000 --timeout 600 --workers 3 --log-level info |
Original file line number | Diff line number | Diff line change | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,10 @@ | ||||||||||||||||
FROM nginx:alpine | ||||||||||||||||
|
||||||||||||||||
# Remove default configuration | ||||||||||||||||
RUN rm /etc/nginx/conf.d/default.conf | ||||||||||||||||
|
||||||||||||||||
# Copy your custom nginx configuration | ||||||||||||||||
COPY nginx.conf /etc/nginx/nginx.conf | ||||||||||||||||
|
||||||||||||||||
# Expose port 80 for Nginx | ||||||||||||||||
EXPOSE 80 | ||||||||||||||||
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 Add HEALTHCHECK instruction for container health monitoring Consider adding a health check to ensure the Nginx service is running properly: EXPOSE 80
+
+HEALTHCHECK --interval=30s --timeout=3s \
+ CMD wget --quiet --tries=1 --spider http://localhost:80/ || exit 1 📝 Committable suggestion
Suggested change
|
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,51 @@ | ||||||||||||||||||||||||||||||||||||||||||
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; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
# Set client body size limit to 10MB | ||||||||||||||||||||||||||||||||||||||||||
client_max_body_size 10M; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
upstream django_app { | ||||||||||||||||||||||||||||||||||||||||||
# Points to the Django/Gunicorn container service name defined in docker-compose | ||||||||||||||||||||||||||||||||||||||||||
server web:8000; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
server { | ||||||||||||||||||||||||||||||||||||||||||
listen 80; | ||||||||||||||||||||||||||||||||||||||||||
server_name _; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
# Serving static files directly from Nginx | ||||||||||||||||||||||||||||||||||||||||||
# Assuming 'staticfiles' directory is where Django collectstatic places files | ||||||||||||||||||||||||||||||||||||||||||
location /static/ { | ||||||||||||||||||||||||||||||||||||||||||
alias /usr/share/nginx/html/static/; | ||||||||||||||||||||||||||||||||||||||||||
expires 1y; | ||||||||||||||||||||||||||||||||||||||||||
access_log off; | ||||||||||||||||||||||||||||||||||||||||||
add_header Cache-Control "public"; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
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 Enhance security headers for static file serving Add security headers to protect against common web vulnerabilities: location /static/ {
alias /usr/share/nginx/html/static/;
expires 1y;
access_log off;
add_header Cache-Control "public";
+ add_header X-Content-Type-Options "nosniff";
+ add_header X-Frame-Options "DENY";
+ add_header X-XSS-Protection "1; mode=block";
+ add_header Referrer-Policy "strict-origin-origin-when-cross-origin";
} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
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; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} |
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.
💡 Codebase verification
Port change requires additional configuration updates
The port change from 8000 to 8080 in the workflow file requires corresponding updates in the nginx configuration. The nginx.conf still points to port 8000:
src/website/nginx/nginx.conf
needs to be updated to use port 8080 to match the new configuration🔗 Analysis chain
Port configuration change looks good.
The port change from 8000 to 8080 aligns with the website service configuration.
Let's verify the Nginx configuration is consistent with this port:
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
Length of output: 95
Script:
Length of output: 1603
Script:
Length of output: 16101