**Ceci est une ancienne révision du document !**
Ajouter un site web sur le domaine Picasoft
Généralités
Historiquement, nous utilisions une image Nginx maison intégrant PHP afin de publier nos sites. Nous avons décidé de changer pour utiliser les images officielles Nginx et PHP afin d’avoir moins d’images à maintenir ainsi que pour respecter les philosophie Docker.
Deploy your applications in separate containers independently and in different languages. Reduce the risk of conflict between languages, libraries or frameworks.
Il faut donc créer un nouveau projet sur Gitlab dans Picasoft/Technique/Services
. On pourra se baser sur les exemples existants (website
, culture
, uploads
et stiegler
par exemple).
Le lancement d’un nouveau site peut s’expérimenter sur pica01-test
.
Déploiement d'un site de base
Un site de base peut être déployé à partir de ce docker-compose :
- snippet.yaml
version: "3.7" volumes: monbeausite: name: monbeausite networks: proxy: external: true services: school: container_name: monbeausite image: nginx:1.21-alpine volumes: - monbeausite:/usr/share/nginx/html:ro labels: traefik.http.routers.school.entrypoints: websecure traefik.http.routers.school.rule: Host(`monbeausite.picasoft.net`) traefik.http.services.school.loadbalancer.server.port: 80 traefik.enable: true networks: - proxy restart: unless-stopped
Personnaliser la configuration
La configuration de Nginx se trouve dans le fichier /etc/nginx/nginx.conf
, pour la modifier nous créons le fichier dans le dossier du service et nous montons ce fichier dans le conteneur :
- snippet.yaml
version: "3.7" volumes: culture: name: culture networks: proxy: external: true services: culture: container_name: culture image: nginx:1.21-alpine volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro - culture:/var/www/html:ro labels: traefik.http.routers.culture.entrypoints: websecure traefik.http.routers.culture.rule: Host(`culture.picasoft.net`) traefik.http.services.culture.loadbalancer.server.port: 80 traefik.enable: true networks: - proxy restart: unless-stopped
Une première chose que nous pouvons faire, c’est de changer l’emplacement de la racine du contenu web. En effet, il se trouve par défaut dans /usr/share/nginx/html
, or l’emplacement traditionnellement utilisé est /var/www/html
. Pour cela nous pouvons donc utiliser la configuration suivante :
worker_processes auto; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; server { listen 80; root /var/www/html; index index.html index.htm; } }
Attention:
Il faudra bien penser à changer le point de montage du volume dédié au contenu web pour /var/www/html
Ici, la directive root /var/www/html;
indique que le contenu web se trouve dans le dossier /var/www/html
.
Activer la compression
La compression permet de réduire la taille des réponses du serveur web, cela permet donc d’améliorer les vitesses de communications. Nous pouvons donc vouloir activer cette compression, pour cela nous modifier le fichier nginx.conf
worker_processes auto; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; gzip on; gzip_vary on; gzip_comp_level 4; gzip_min_length 256; gzip_types application/pdf application/octet-stream application/atom+xml application/javascript audio/mpeg application/rss+xml image/bmp image/png image/jpeg image/svg+xml image/x-icon text/css text/plain text/html; server { listen 80; root /var/www/html; index index.html index.htm; } }
La directive gzip on;
permet d’activer le module de compression. Les autres directives permettent de configurer cette compression (niveau, comportement avec les caches, taille minimum pour activer la compression et types compressés).
Activer l'indexation
Par défaut, l’indexation des fichiers sur le serveur n’est pas activée. Cela pourrait en effet permettre de parcourir les dossiers et éventuellement en cas de mauvaise configuration, d’erreur lors de la publication ou de faille, de découvrir des fichiers qui ne devraient pas être publics. Nous pouvons néanmoins vouloir activer cette indexation pour un serveur offrant du contenu culturel par exemple. Dans ce cas nous pouvons modifier notre configuration comme suit.
worker_processes auto; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; gzip on; gzip_vary on; gzip_comp_level 4; gzip_min_length 256; gzip_types application/pdf application/octet-stream application/atom+xml application/javascript audio/mpeg application/rss+xml image/bmp image/png image/jpeg image/svg+xml image/x-icon text/css text/plain text/html; server { listen 80; autoindex on; root /var/www/html; index index.html index.htm; } }
La directive autoindex on;
permet de dire à Nginx, que quand le client demande un dossier, il ne faut pas lui répondre que la demande est interdite mais lui afficher une liste du contenu disponible dans le dossier.
Configurer PHP
Ajout du contenu
On synchronise le contenu du site dans /tmp/site
, sur pica01
, par exemple.
Ensuite, on copie simplement les fichiers dans le conteneur :
- snippet.bash
docker cp /tmp/site/* aomame:/var/www/html
À ce stade, le site est prêt à être servi, il ne reste plus qu’à ajouter l’entrée DNS.
Ajout du sous domaine
En filant l’exemple aomame
, il faut ajouter une entrée pour aomame.picasoft.net
dans le fichier de zone DNS.
Pour ce faire, on se référera à la documentation sur la gestion des noms de domaine de Picasoft, en particulier sur la partie d’ajout de sous-domaine.