Exemple de comment créer une simple page de maintenance pour un site en django (déployé avec Nginx, Gunicorn) sur Ubuntu (digitalocean):
Remplacer site_name par le nom de domaine du site
Créer une simple page
Allez sous le répertoire:
cd /var/www/
Créez le dossier site_name_maintenance_page
mkdir site_name_maintenance_page
puis:
mkdir html
le chemin est alors: /var/www/site_name_maintenance_page/html/
Et créez le fichier index.html
nano index.html
avec les lignes suivantes
<html><head><title>site_name</title></head><body><h1>The site is under maintenance ! </h1></body></html>
Remarque: il s'agit d'un exemple minimaliste, il existe de nombreux modèles gratuits de pages de maintenance disponibles sur le Web.
Modifier le fichier nginx sites-enabled
Si le site django fonctionne avec Nginx, le fichier
vi /etc/nginx/sites-enabled/site_name
devrait ressembler a
server {listen 80;listen [::]:80;server_name site_name.com www.site_name.com;return 301 https://site_name.com$request_uri;}server {listen 443 ssl;server_name site_name.com www.site_name.com;ssl_certificate /root/ssl_certificates/site_name/site_name_com.chained.crt;ssl_certificate_key /root/ssl_certificates/site_name/site_name_com.key;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;ssl_ciphers '***********************';location = /favicon.ico { access_log off; log_not_found off; }location /static {alias /home/username/webapps/site_name_static;}location /media {alias /home/username/webapps/site_name_media;}location / {include proxy_params;proxy_pass http://unix:/run/gunicorn.sock;}}
pour rediriger le site vers la page de maintenance. Supprimez toutes les lignes du fichier ci-dessus
:1,$d
et remplacez-le par
server {listen 80;listen [::]:80;server_name site_name.com www.site_name.com;return 301 https://site_name.com$request_uri;}server {listen 443 ssl;server_name site_name.com www.site_name.com;ssl_certificate /root/ssl_certificates/site_name/site_name_com.crt;ssl_certificate_key /root/ssl_certificates/site_name/site_name.com.key;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;ssl_ciphers '*******************';root /var/www/site_name_maintenance_page/html;index index.html index.htm index.nginx-debian.html;location / {try_files $uri $uri/ =404;}}
Redémarrez ensuite Nginx
sudo service nginx restart
Créer a python script
Créez maintenant un script python simple (appelé par exemple 'site_name_status.py') pour rendre l'opération quasi automatique:
python site_name_status.py on
pour afficher: django-based website
python site_name_status.py off
pour afficher la page de maintenance
import sysimport osarg_list = sys.argv#print(arg_list)file = '/etc/nginx/sites-available/site_name'#----------------------------------------------------------------------------------------#if arg_list[1]=='off':open(file, 'w').close() # clean the filef = open(file,"w")str = '''server {listen 80;listen [::]:80;server_name site_name.com www.site_name.com;return 301 https://site_name.com$request_uri;}server {listen 443 ssl;server_name site_name.com www.site_name.com;ssl_certificate /root/ssl_certificates/site_name/site_name_com.chained.crt;ssl_certificate_key /root/ssl_certificates/site_name/site_name_com.key;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;ssl_ciphers '******************';root /var/www/site_name_maintenance_page/html;index index.html index.htm index.nginx-debian.html;location / {try_files $uri $uri/ =404;}}'''f.write(str)f.close#----------------------------------------------------------------------------------------#if arg_list[1]=='on':open(file, 'w').close() # clean the filef = open(file,"w")str = '''server {listen 80;listen [::]:80;server_name site_name.com www.site_name.com;return 301 https://site_name.com$request_uri;}server {listen 443 ssl;server_name site_name.com www.site_name.com;ssl_certificate /root/ssl_certificates/site_name/site_name_com.chained.crt;ssl_certificate_key /root/ssl_certificates/site_name/site_name_com.key;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;ssl_ciphers '***********************';location = /favicon.ico { access_log off; log_not_found off; }location /static {alias /home/username/webapps/site_name_static;}location /media {alias /home/username/webapps/site_name_media;}location / {include proxy_params;proxy_pass http://unix:/run/gunicorn.sock;}}'''f.write(str)f.close#----------------------------------------------------------------------------------------#
Redémarrer Nginx
sudo service nginx restart
Références
| Liens | Site |
|---|---|
| How to erase the file contents of text file in Python? | stackoverflow |
| Reading and Writing to text files in Python | stackoverflow |
| Python - Command Line Arguments | stackoverflow |
