Aller au contenu principal
Version: 5.x

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/ et public/

Configuration du serveur web

Apache

Créez ou modifiez le fichier .htaccess dans le dossier public/ :

public/.htaccess
<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 :

/etc/apache2/sites-available/domain.conf
<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

/etc/nginx/sites-available/domain
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

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

docker-compose.yml
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
docker/nginx/default.conf
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 :

.env.json
{
"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"
}
Important
  • Mettez APP_DEBUG à false en production
  • Utilisez des mots de passe forts et uniques
  • Générez une nouvelle APP_KEY pour 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.) :

  1. Uploadez votre projet via FTP ou Git
  2. Pointez le domaine vers le dossier public/
  3. Configurez le fichier .env.json avec vos paramètres
  4. Exécutez Composer via SSH si disponible :
cd /home/user/www/domain
composer install --no-dev --optimize-autoloader
Configuration du Document Root

Si vous ne pouvez pas modifier le document root, déplacez le contenu de public/ à la racine et ajustez les chemins dans index.php.