Composer est certainement l’un des outils PHP les plus connus et utilisé à l’heure actuelle. Il permet en effet de gérer très facilement les dépendances d’un projet PHP. Cependant, (trop) peu de développeurs connaissent ou utilisent Satis, l’outil de création de dépôts Composer.
Pourtant Satis est un outil très pratique et permet de mettre en place une gestion de dépôts privés. On peut également l’utiliser afin de mirrorer nos dépendances Composer provenant de Github/Gitlab, ce qui pourrait permettre de continuer à travailler même si Github/Gitlab venait à ne plus être disponible.
Nous allons donc commencer par installer Satis.
Commencer par installer git s’il n’est pas installer:
christophe@srvdev:/var/www$ sudo apt install git -y
Puis installer composer si le gestionnaire de dépendances n’est pas présent :
Bien entendu, nous allons utiliser Composer pour cela. L’installation de Satis sesrvdev fait en utilisant composer une ligne de commandes :
christophe@srvdev:/home/christophe$ sudo php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" christophe@srvdev:/home/christophe$ sudo php -r "if (hash_file('SHA384', 'composer-setup.php') === '55d6ead61b29c7bdee5cccfb50076874187bd9f21f65d8991d46ec5cc90518f447387fb9f76ebae1fbbacf329e583e30') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlinkchristophe@srvdev:~$('composer-setup.php'); } echo PHP_EOL;" christophe@srvdev:/home/christophe$ sudo php composer-setup.php christophe@srvdev:/home/christophe$ sudo php -r "unlink('composer-setup.php');" christophe@srvdev:/home/christophe$ sudo mv composer.phar /usr/local/bin/composer
sudo mkdir -p /home/satis/dist sudo chown -R $USER:www-data /home/satis/dist
Premier cas : Apache 2
Installer apache2
sudo apt-get install apache2 -y
Paramétrer les fichiers hosts
sudo a2dissite default.conf sudo mkdir -p /etc/apache2/sites-available sudo mkdir -p /etc/apache2/sites-available cd /etc/apache2/sites-available mv default.conf 002-default.conf sudo mkdir -p /var/www/packages.fr/public_html sudo chown -R $USER:www-data /var/www/packages.fr/public_html sudo nano 001-packages.fr.conf
<VirtualHost packages.fr:443> ServerAdmin webmaster@localhost DocumentRoot /var/www/packages.fr/public_html ServerName packages.fr ErrorLog ${APACHE_LOG_DIR}/packages-prod-error.log CustomLog ${APACHE_LOG_DIR}/packages-prod-access.log combined <Directory /var/www/packages.fr/public_html> AllowOverride all Order allow,deny allow from all </Directory> Protocols h2 http/1.1 SSLEngine ON SLCertificateFile /var/lib/acme/live/packages.fr/fullchain SSLCertificateKeyFile /var/lib/acme/live/packages.fr/privkey </VirtualHost>
on publie l’hôte virtuel pour packages :
a2ensite 001-packages.fr
On redémarre le serveur :
sudo service apache2 restart
Second cas : Serveur Nginx
Installation de nginx_ensite
nginx_ensite permet d’activer et désactiver des hôtes vituels sous NGinx facilement.
cd /home/christophe git clone https://github.com/perusio/nginx_ensite.git cd nginx_ensite cd nginx_ensite sudo make install cd .. sudo rm -R nginx_ensite
Installation du serveur
sudo apt install nginx -y
Si tout se passe bien , on doit voir apparaître la page suivante lorsque que l’on tape dans un navigateur l’url suivante: http://127.0.0.1/

Paramétrage du serveur Nginx pour fonctionner avec PHP 7.3 FPM
sudo rm /etc/nginx/sites-available/default sudo nano /etc/nginx/sites-available/default
server { listen 127.0.0.1:80; # SSL configuration # # listen 443 ssl default_server; # listen [::]:443 ssl default_server; # # Self signed certs generated by the ssl-cert package # Don't use them in a production server! # # include snippets/snakeoil.conf; root /var/www/html; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html index.php; christophe@parallels:~$ sudo service nginx restart server_name _; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass 127.0.0.1:9003; } }
Redémarrer le service Nginx
sudo service nginx restart
Se déplacer dans le répertoire : /var/www/html
cd /var/www/html
Créer le fichier phpinfo.php
sudo nano phpinfo.php
<?php phpinfo();
Charger phpinfo.php depuis le navigateur : http://127.0.0.1/phpinfo.php
PHP 7.3 est fonctionnel …
Désactiver l’hôte virtuel par défault:
sudo nginx_dissite /etc/nginx/sites-available/default
Renommer l’hôte virtuel par défault:
mv /etc/nginx/sites-available/default /etc/nginx/sites-available/002-default
Activer l’hôte 002-default
sudo nginx_ensite /etc/nginx/sites-available/002-default
Créer l’hôte : 001-packages.fr
sudo nginx_dissite /etc/nginx/sites-available/001-packages.fr
server { listen 127.0.0.1:443 ssl; root /var/www/packages.fr/public_html; # Add index.php to the list if you are using PHP index index.php index.html index.htm index.nginx-debian.html; server_name packages.fr; # Par défaut les certificats générés avec certbot vont dans /etc/letsencrypt/live/ # Il faut évidement remplacer le chemin par celui correspondant au domaine ssl_certificate /etc/letsencrypt/live/packages.fr/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/packages.fr/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/packages.fr/chain.pem; ssl_protocols TLSv1.2; ## Diffie-Hellman ssl_ecdh_curve secp384r1; ## Ciphers ssl_ciphers EECDH+CHACHA20:EECDH+AESGCM:EECDH+AES; ssl_prefer_server_ciphers on; # OCSP Stapling resolver 80.67.169.12 80.67.169.40 valid=300s; resolver_timeout 5s; ssl_stapling on; ssl_stapling_verify on; ## TLS parameters ssl_session_cache shared:SSL:10m; ssl_session_timeout 5m; ssl_session_tickets off; ## HSTS add_header Strict-Transport-Security "max-age=15552000; includeSubdomains; preload"; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } # pass PHP scripts to FastCGI server # location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass 127.0.0.1:9003; } }
Activer l’hôte 001-packages.fr
sudo nginx_ensite /etc/nginx/sites-available/001-packages.fr
Redémarrer le service Nginx
sudo service nginx restart
Créer le fichier de configuration
Une fois installé, il faut configurer Satis en lui indiquant comment accéder à nos dépôts. Voici le fichier de configuration à écrire :
cd ~/Bureau/satis mkdir config && cd config sudo nano satis.conf
{ "name": "CB Packages", "homepage": "http://packages.fr/", "archive": { "directory": "dist", "absolute-directory" : "/home/satis/dist", "format": "zip", "skip-dev": true }, "repositories": [ { "type": "git", "url": "https://gitlab.com/cbrachet/data-bundle/" } ], "require": { "cb/data-bundle": "1.0" } }
cd ~/Bureau/satis/config
Créer le dépôt satis
Pour démarrer la création du dépôt Satis, il suffit alors d’exécuter la commande suivante:
php bin/satis build ~/Bureau/satis/config /var/www/packages.fr/public_html
Le dépôt est dés lors accesible depuis l’url : https://packages.fr/
Utiliser le dépôt satis
Le dépôt Satis est maintenant configuré et il est possible de l’utiliser dans l’ensemble de vos projets PHP via Composer. Il faudra, au préalable, préciser l’adresse de votre dépôt Satis dans le fichier composer.json en ajoutant la section repositories suivante :
{ "repositories": [{ "type": "composer", "url": "https://packages.fr/" }] }
Ensuite pour récupérer les librairies dans votre projet , de mettre votre composer.json avec la dépendance « cb/data-bundle »: « 1.0 » et d’effectuer la commande suivante :
composer update
La dépendance « cb/data-bundle »: « 1.0 » est alors téléchargée dans le dossier vendor et utilisable dans votre projet.