Concepts d'architecture
Introduction
Lorsqu'on utilise un outil dans le monde réel, la compréhension de son fonctionnement renforce la confiance. Le développement d'applications ne fait pas exception. En maîtrisant vos outils de développement, vous gagnez en assurance et en aisance dans leur utilisation.
L'objectif de cette documentation est de vous donner un bon aperçu du fonction des services et leurs intérations. En apprenant à mieux connaître notre assemblage dans son ensemble, tout semble moins « magique » et vous serez plus confiant dans la création de vos applications. Si vous ne comprenez pas tous les termes tout de suite, ne perdez pas courage ! Essayez simplement d'avoir une compréhension de base de ce qui se passe, et vos connaissances augmenteront à mesure que vous explorerez d'autres sections de la documentation.
Concept
Envelapp a été conçu pour offrir une enveloppe de développement web prête à l'emploi, performante et gratuite. Il vous permet de disposer du même environnement sur toutes vos plateformes, unifiant ainsi les postes de travail des équipes, les serveurs et les espaces cloud avec une configuration identique. Installez et commencez immédiatement à bénéficier d'une expérience de développement harmonisée.
Vous êtes libre d'utiliser Envelapp comme bon vous semble. Cependant, nous apprécierions une mention de notre projet avec un lien dans vos fork. Nous sommes également ouverts à ajouter des versions pour d'autres langages de programmation tels que Node.js, Python, etc.
Architecture
Ci-dessous, un schéma de notre orchestration de service pour que vous puissiez voir toutes les interactions entre eux.
Services et rôles
Nginx
Nginx est un serveur web open-source, connu pour sa haute performance, sa stabilité et sa faible consommation de ressources.
Sa capacité à gérer simultanément un grand nombre de connexions grâce à son architecture asynchrone et événementielle. Contrairement aux serveurs web traditionnels qui créent un nouveau processus pour chaque requête, Nginx utilise un nombre fixe de processus travailleurs pour gérer des milliers de connexions en parallèle. Cela le rend particulièrement efficace pour les sites à fort trafic.
Les règles de configuration de vos URLs projet doivent être ajoutées dans un fichier /docker/nginx/site/app.conf
mais nous vous recomandons de créer un fichier /docker/nginx/site/my_project.conf
par projet.
En local, si vous avez besoin de modifier la configuration par défaut, éditez les fichiers dans /docker/nginx/site/stubs
et redémarrez le service en utilisant la commande sail restart nginx
.
Voici un exemple de code à ajouter:
# HTTP server configuration for redirecting traffic to HTTPS et challenge certbot
server {
listen 80; # Listen on port 80 for IPv4
listen [::]:80; # Listen on port 80 for IPv6
root /envelapp/app/certbot; # Set root directory for ACME challenge
server_name larapp.re; # Define the server name
server_tokens off; # Disable server tokens
# Location block for ACME challenge
location /.well-known/acme-challenge/ {
root /envelapp/app/certbot; # Serve files from this directory
}
# Redirect all HTTP traffic to HTTPS
location / {
return 301 https://$host$request_uri; # Perform a 301 redirect to HTTPS
}
}
# HTTPS server configuration
server {
server_name larapp.re; # Define the server name
root /envelapp/app/demat/public; # Set root directory for the website
index index.php; # Define the default index file
listen 443 ssl; # Listen on port 443 for IPv4 with SSL
listen [::]:443 ssl; # Listen on port 443 for IPv6 with SSL
ssl_certificate /etc/nginx/conf.d/ssl/live/larapp.re/fullchain.pem; # SSL certificate file
ssl_certificate_key /etc/nginx/conf.d/ssl/live/larapp.re/privkey.pem; # SSL certificate key file
# Include security configurations
include /etc/nginx/config/security.conf;
error_log /var/log/nginx/web_error.log error; # Error log file
access_log /var/log/nginx/web_access.log combined buffer=512k flush=1m; # Access log file
# Include additional configurations
include /etc/nginx/config/general.conf;
# security
include /etc/nginx/config/security.conf;
# Location block for the root directory
location / {
try_files $uri /index.php$is_args$args; # Try to serve the file directly, fallback to index.php
}
error_page 404 /index.php; # Custom 404 error page
# Deny access to .htaccess and .htpasswd files
location ~ /\.ht {
deny all; # Deny all access
}
# Location block for static files with caching
location ~* \.(svg|gif|otf|jpg|jpeg|png|css|js|ttf|eot|woff|woff2|webp)$ {
add_header Cache-Control public; # Cache control header for browsers
add_header Pragma public; # Cache control header for browsers
add_header Vary Accept-Encoding; # Vary header for browsers
expires max; # Set maximum expiration time
}
# Location block for PHP files
location ~ \.php$ {
fastcgi_pass php:9000; # FastCGI server
fastcgi_buffers 16 16k; # Configure FastCGI buffers
fastcgi_buffer_size 32k; # Configure FastCGI buffer size
fastcgi_split_path_info ^(.+\.php)(/.*)$; # Split path info for FastCGI
include fastcgi_params; # Include FastCGI parameters
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # Define FastCGI script filename
fastcgi_param DOCUMENT_ROOT $realpath_root; # Define FastCGI document root
fastcgi_read_timeout 600; # Increase read timeout for FastCGI
fastcgi_param HTTPS off; # Disable HTTPS parameter
internal; # Internal location
}
}
La règle
location ~ .php{ ...
compile tous les fichiers PHP en utilisant le service PHP Docker.
Si vous avez deux services nommés "php" sur le port 9000 et "php7" sur le port 9001,
pour compiler vos fichiers avec PHP version 7, il faudra remplacerfastcgi_pass php:9000;
parfastcgi_pass php7:9001;
.
PHP
PHP est un langage de script open-source largement utilisé pour le développement web. Ce qui fait de PHP un choix privilégié, c'est sa simplicité et sa courbe d'apprentissage douce, permettant de créer d'applications web robustes et évolutives.
PHP bénéficie d'une vaste communauté qui contribue à une riche bibliothèque de frameworks et de composants, comme Laravel et Symfony, facilitant le développement rapide et sécurisé.
MySQL & phpMyAdmin
MySQL est un système de gestion de bases de données relationnelles open-source très populaire. Connu pour sa fiabilité, sa rapidité et sa facilité d'utilisation, MySQL est souvent le choix privilégié pour les applications web, notamment grâce à son excellente performance et à sa capacité à gérer de grandes quantités de données. De plus, son intégration transparente avec des outils comme phpMyAdmin simplifie grandement la gestion des bases de données.
Il permet d'exécuter des requêtes SQL, de gérer les tables, les bases de données et les utilisateurs, le tout à travers une interface intuitive. Cette combinaison de MySQL et phpMyAdmin offre une solution puissante et facile à utiliser pour le développement et la gestion de bases de données, faisant de ce duo un choix de premier plan pour les développeurs web.
Le fichier docker-compose.yml
Le fichier docker-compose.yml
est le fichier de configuration de votre environnement. C'est là que sont définis tous les services, et où vous pouvez ajouter de nouveaux services selon vos besoins.
Redis
Redis est une base de données open-source en mémoire, renommée pour ses performances exceptionnelles et sa polyvalence. Redis est couramment utilisée comme cache, file d'attente de messages et magasin de données en temps réel. Sa capacité à gérer des structures de données variées, telles que les chaînes, les listes, les ensembles et les hachages, directement en mémoire, permet des temps de réponse ultra-rapides, souvent mesurés en microsecondes.
Redis est le meilleur choix pour les développeurs cherchant à optimiser les performances de leurs applications grâce à une gestion rapide et efficace des données en mémoire.
Certbot
Certbot est un outil open-source développé par l'Electronic Frontier Foundation (EFF) pour automatiser l'obtention et le renouvellement de certificats SSL/TLS gratuits via Let’s Encrypt. Il simplifie la sécurisation des sites web en fournissant des certificats qui chiffrent les communications entre serveurs et utilisateurs.
Typesense
Typesense est un moteur de recherche open-source conçu pour offrir des résultats de recherche ultra-rapides et pertinents. Typesense se distingue par sa simplicité d'installation et de configuration, ainsi que par sa performance exceptionnelle.
Il est optimisé pour des recherches en temps réel, rendant les réponses quasi instantanées, même avec des volumes de données importants. Typesense supporte la tolérance aux fautes de frappe, offrant une expérience utilisateur améliorée.
Selenium
Selenium est un outil open-source puissant pour l'automatisation des navigateurs web. Selenium est largement utilisé pour tester des applications web, garantissant leur bon fonctionnement sur différents navigateurs et plateformes.
Sa capacité à simuler des interactions complexes de l'utilisateur, comme les clics, les frappes et les soumissions de formulaires, ce qui en fait un choix idéal pour les tests fonctionnels et de régression.
Mailpit
Mailpit est une solution innovante de gestion des emails, idéale pour les particuliers et les entreprises. Elle se distingue par son interface intuitive et ses fonctionnalités avancées, permettant une organisation efficace des boîtes de réception et une recherche rapide des emails. Avec des outils de sécurité robustes, Mailpit protège contre les spams et les menaces malveillantes, assurant la confidentialité des utilisateurs. Ses options de collaboration facilitent le partage de fichiers et la gestion de projets.