🚀(paas) add PaaS deployment scripts, tested on Scalingo

add PaaS deployment scripts, tested on Scalingo
This commit is contained in:
Sylvain Zimmer
2025-08-08 10:05:47 +02:00
committed by aleb_the_flash
parent 69c6e58017
commit 117677bd14
8 changed files with 101 additions and 2 deletions

View File

@@ -11,6 +11,7 @@ and this project adheres to
### Added ### Added
- ✨(backend) monitor throttling rate failure through sentry #964 - ✨(backend) monitor throttling rate failure through sentry #964
- 🚀(paas) add PaaS deployment scripts, tested on Scalingo #957
### Changed ### Changed

2
Procfile Normal file
View File

@@ -0,0 +1,2 @@
web: bin/buildpack_start.sh
postdeploy: python manage.py migrate

9
bin/buildpack_postcompile.sh Executable file
View File

@@ -0,0 +1,9 @@
#!/bin/bash
set -o errexit # always exit on error
set -o pipefail # don't ignore exit codes when piping output
echo "-----> Running post-compile script"
# Cleanup
rm -rf docker docs env.d gitlint

16
bin/buildpack_postfrontend.sh Executable file
View File

@@ -0,0 +1,16 @@
#!/bin/bash
set -o errexit # always exit on error
set -o pipefail # don't ignore exit codes when piping output
echo "-----> Running post-frontend script"
# Move the frontend build to the nginx root and clean up
mkdir -p build/
mv src/frontend/dist build/frontend-out
mv src/backend/* ./
mv deploy/paas/* ./
echo "3.13" > .python-version
echo "." > requirements.txt

15
bin/buildpack_start.sh Executable file
View File

@@ -0,0 +1,15 @@
#!/bin/bash
# Start the Django backend server
gunicorn -b 0.0.0.0:8000 meet.wsgi:application --log-file - &
# Start the Nginx server
bin/run &
# if the current shell is killed, also terminate all its children
trap "pkill SIGTERM -P $$" SIGTERM
# wait for a single child to finish,
wait -n
# then kill all the other tasks
pkill -P $$

View File

@@ -0,0 +1,52 @@
# ERB templated nginx configuration
# see https://doc.scalingo.com/platform/deployment/buildpacks/nginx
upstream backend_server {
server localhost:8000 fail_timeout=0;
}
server {
listen <%= ENV["PORT"] %>;
server_name _;
server_tokens off;
root /app/build/frontend-out;
# Django rest framework
location ^~ /api/ {
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
proxy_pass http://backend_server;
}
# Django admin
location ^~ /admin/ {
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
proxy_pass http://backend_server;
}
# Serve static files with caching
location ~* ^/assets/.*\.(css|js|json|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000";
}
# Serve static files
location / {
try_files $uri $uri/ /index.html;
# Add no-cache headers
add_header Cache-Control "no-cache, no-store, must-revalidate";
add_header Pragma "no-cache"; # HTTP 1.0 header for backward compatibility
add_header Expires 0;
}
# Optionally, handle 404 errors by redirecting to index.html
error_page 404 =200 /index.html;
}

View File

@@ -13,11 +13,12 @@ https://docs.djangoproject.com/en/3.1/ref/settings/
# pylint: disable=too-many-lines # pylint: disable=too-many-lines
import json import json
from os import path from os import environ, path
from socket import gethostbyname, gethostname from socket import gethostbyname, gethostname
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
import dj_database_url
import sentry_sdk import sentry_sdk
from configurations import Configuration, values from configurations import Configuration, values
from lasuite.configuration.values import SecretFileValue from lasuite.configuration.values import SecretFileValue
@@ -92,7 +93,9 @@ class Base(Configuration):
# Database # Database
DATABASES = { DATABASES = {
"default": { "default": dj_database_url.config()
if environ.get("DATABASE_URL")
else {
"ENGINE": values.Value( "ENGINE": values.Value(
"django.db.backends.postgresql_psycopg2", "django.db.backends.postgresql_psycopg2",
environ_name="DB_ENGINE", environ_name="DB_ENGINE",

View File

@@ -29,6 +29,7 @@ dependencies = [
"Brotli==1.2.0", "Brotli==1.2.0",
"brevo-python==1.2.0", "brevo-python==1.2.0",
"celery[redis]==5.5.3", "celery[redis]==5.5.3",
"dj-database-url==3.1.0",
"django-configurations==2.5.1", "django-configurations==2.5.1",
"django-cors-headers==4.9.0", "django-cors-headers==4.9.0",
"django-countries==8.0.0", "django-countries==8.0.0",