Hébergement et Déploiement
Introduction
Ce guide couvre les différentes options d'hébergement et de déploiement pour votre application Bow Framework. Que vous utilisiez un serveur traditionnel ou des conteneurs, vous trouverez ici les configurations nécessaires.
Prérequis de production
Avant de déployer, assurez-vous que votre environnement de production dispose de :
- PHP >= 8.1 avec les extensions requises
- Un serveur web (Apache, Nginx)
- Composer pour la gestion des dépendances
- Accès en écriture aux dossiers
var/etpublic/
Configuration du serveur web
Apache
Créez ou modifiez le fichier .htaccess dans le dossier public/ :
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Rediriger vers HTTPS (optionnel)
# RewriteCond %{HTTPS} off
# RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Gestion des fichiers existants
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
Configuration du Virtual Host :
<VirtualHost *:80>
ServerName domain.com
ServerAlias www.domain.com
DocumentRoot /var/www/domain/public
<Directory /var/www/domain/public>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Activez le site et les modules nécessaires :
sudo a2enmod rewrite
sudo a2ensite domain.conf
sudo systemctl restart apache2
Nginx
server {
listen 80;
listen [::]:80;
server_name domain.com www.domain.com;
root /var/www/domain/public;
index index.php;
# Logs
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# Gestion des fichiers statiques
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# Routage vers index.php
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# Traitement PHP
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_hide_header X-Powered-By;
}
# Sécurité : bloquer l'accès aux fichiers sensibles
location ~ /\.(env|git|htaccess) {
deny all;
}
}
Activez le site :
sudo ln -s /etc/nginx/sites-available/domain /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
Déploiement avec Docker
Dockerfile
FROM php:8.2-fpm-alpine
# Installation des extensions PHP
RUN docker-php-ext-install pdo pdo_mysql opcache
# Installation de Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Dossier de travail
WORKDIR /var/www/html
# Copie des fichiers
COPY . .
# Installation des dépendances
RUN composer install --no-dev --optimize-autoloader
# Permissions
RUN chown -R www-data:www-data /var/www/html \
&& chmod -R 755 /var/www/html/var \
&& chmod -R 755 /var/www/html/public
EXPOSE 9000
CMD ["php-fpm"]
Docker Compose
version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile
volumes:
- .:/var/www/html
depends_on:
- database
networks:
- bow-network
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- .:/var/www/html
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- app
networks:
- bow-network
database:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: bow_app
MYSQL_USER: bow
MYSQL_PASSWORD: secret
volumes:
- db-data:/var/lib/mysql
networks:
- bow-network
volumes:
db-data:
networks:
bow-network:
driver: bridge
server {
listen 80;
index index.php;
root /var/www/html/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass app:9000;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}
Démarrez les conteneurs :
docker-compose up -d
Configuration de production
Variables d'environnement
Configurez votre fichier .env.json pour la production :
{
"APP_NAME": "Mon Application",
"APP_ENV": "production",
"APP_DEBUG": false,
"APP_KEY": "votre-cle-secrete-generee",
"APP_URL": "https://domain.com",
"DB_CONNECTION": "mysql",
"DB_HOST": "localhost",
"DB_PORT": 3306,
"DB_DATABASE": "production_db",
"DB_USERNAME": "prod_user",
"DB_PASSWORD": "mot-de-passe-securise"
}
- Mettez
APP_DEBUGàfalseen production - Utilisez des mots de passe forts et uniques
- Générez une nouvelle
APP_KEYpour chaque environnement
Optimisations
Après le déploiement, exécutez ces commandes pour optimiser les performances :
# Installer les dépendances sans les dev
composer install --no-dev --optimize-autoloader
# Vider et préchauffer le cache
php bow cache:clear
php bow config:cache
# Optimiser l'autoloader
composer dump-autoload --optimize
Permissions des dossiers
# Propriétaire www-data pour le serveur web
sudo chown -R www-data:www-data /var/www/domain
# Permissions d'écriture pour les dossiers nécessaires
sudo chmod -R 755 /var/www/domain
sudo chmod -R 775 /var/www/domain/var
sudo chmod -R 775 /var/www/domain/public
Hébergement mutualisé
Pour les hébergeurs mutualisés (OVH, o2switch, etc.) :
- Uploadez votre projet via FTP ou Git
- Pointez le domaine vers le dossier
public/ - Configurez le fichier
.env.jsonavec vos paramètres - Exécutez Composer via SSH si disponible :
cd /home/user/www/domain
composer install --no-dev --optimize-autoloader
Si vous ne pouvez pas modifier le document root, déplacez le contenu de public/ à la racine et ajustez les chemins dans index.php.