Installation de Satis

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.