Aller au contenu

Publier un site sur un nom de domaine

Supposons que vous voulez publier un site fait en PHP se situant dans /var/www/html/<votre-projet>

Il y a plusieurs choses à faire

Commander le nom de domaine

Dans un premier temps, il vous faut un nom de domaine. Je vous recommande de prendre votre nom de domaine chez Infomaniak, cependant, ce n'est pas une obligation.

Commandez un nom de domaine si vous n'en avez pas.

Rediriger le nom de domaine

Rendez vous sur le panel de Infomaniak.

Vous allez vous rendre dans la partie Web & Domains et cliquer sur Domaine.

Cliquer ensuite sur le nom de domaine que vous souhaitez utiliser.

Une fois sur ce dernier, à gauche, vous devriez avoir Zone DNS, aller-y.

Vous arriverez sur une page ressemblant à celle-ci :

Zone DNS d'Infomaniak
Figure 12 — Zone DNS d'Infomaniak

Cliquer sur Ajouter un enregistrement

Zone DNS d'Infomaniak pour l'ajout d'enregistrement
Figure 13 — Zone DNS d'Infomaniak pour l'ajout d'enregistrement

Dans notre cas, on veut un enregistrement de type A, il faut juste descendre et cliquer sur continuer.

Zone DNS d'Infomaniak pour l'ajout d'enregistrementd - formulaire
Figure 14 — Zone DNS d'Infomaniak pour l'ajout d'enregistrementd - formulaire

Une fois ici, il faut juste completer le sous nom de domaine que vous souhaitez utilisé, dans mon cas serveur, et l'adresse IP de votre serveur puis il ne vous reste plus qu'à cliquer sur Enregistrer.

IMPORTANT : Ne toucher pas au TTL à moins que vous sachiez ce que cela fait.

Installation de dépendance

Premièrement, il faut installer un autre gestionnaire de paquet pour installer la suite.

Il s'agit de snap et non pas snapchat, hin.

Bash
sudo apt update
sudo apt install snapd -y

Une fois ceci fait, il faut installer certbot

Bash
sudo snap install --classic certbot

Et il faut juste faire une dernière commande :

Bash
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Installation du certificat SSL/TLS

Il faut maintenant configurer le certificat SSL/TLS pour sécuriser votre site web.

IMPORTANT : Il est fortement recommandé de couper votre serveur web pendant ce processus pour éviter toute erreur.

Bash
sudo service apache2 stop
sudo service nginx stop

Maintenant, on peut faire la demande du certificat

Bash
sudo certbot certonly --standalone -d <votre-nom-de-domaine>
Figure 15 — ## Configuration

Apache2

Il vous faut, dans un premier temps, aller dans le dossier suivant :

Bash
cd /etc/apache2

Vous allez créer un fichier, par exemple : website.conf, un truc que vous comprendrez

Bash
sudo nano sites-available/website.conf

Vous allez insérer le contenu suivant :

HTML
<VirtualHost *:80>
    ServerName <domaine>

    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L] 
</VirtualHost>

<VirtualHost *:443>
    ServerName <domaine>
    DocumentRoot "/var/www/html/<votre-projet>"

    AllowEncodedSlashes On

    php_value upload_max_filesize 100M
    php_value post_max_size 100M

    <Directory "/var/www/html/<votre-projet>">
        Require all granted
        AllowOverride all
    </Directory>

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/<domaine>/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/<domaine>/privkey.pem
</VirtualHost>

Remplacez <votre-projet> par le nom du dossier comprenant votre projet dans /var/www/html.

Remplacez aussi <domaine> par le nom de domaine que vous avez utilisé.

Faite la commande suivante :

Bash
sudo apache2ctl -t

Vous DEVEZ avoir la réponse : syntax OK

Vous devrez juste activer quelques mods via la commande suivante :

Bash
sudo a2enmod rewrite
sudo a2enmod ssl

Vous pouvez maintenant activé le site :

Bash
sudo a2ensite website.conf

Pour finir, il ne vous reste plus qu'à démarrer votre Apache2

Bash
sudo service apache2 start

Nginx

Il vous faut, dans un premier temps, aller dans le dossier suivant :

Bash
cd /etc/nginx

Vous allez créer un fichier, par exemple : website.conf, un truc que vous comprendrez

Bash
sudo nano sites-available/website.conf

Vous allez insérer le contenu suivant :

YAML
server {
    listen 80;
    server_name <domaine>;
    return 301 https://$server_name$request_uri;
}

server {
    # Replace the example <domain> with your domain name or IP address
    listen 443 ssl http2;
    server_name <domaine>;

    root /var/www/html/<votre-projet>;
    index index.php;

    access_log /var/log/nginx/website.app-access.log;
    error_log  /var/log/nginx/website.app-error.log error;

    client_max_body_size 100m;
    client_body_timeout 120s;

    sendfile off;
    ssl_certificate /etc/letsencrypt/live/<domaine>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/<domaine>/privkey.pem;
    ssl_session_cache shared:SSL:10m;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
    ssl_prefer_server_ciphers on;

    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header Content-Security-Policy "frame-ancestors 'self'";
    add_header X-Frame-Options DENY;
    add_header Referrer-Policy same-origin;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param PHP_VALUE "upload_max_filesize = 100M \n post_max_size=100M";
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTP_PROXY "";
        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        include /etc/nginx/fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

Remplacez <votre-projet> par le nom du dossier comprenant votre projet dans /var/www/html.

Remplacez aussi <domaine> par le nom de domaine que vous avez utilisé.

Il faut maintenant activer le site en faisant la commande suivante :

Bash
sudo ln -s /etc/nginx/sites-available/website.conf /etc/nginx/sites-enabled/website.conf

Pour finir, il ne vous reste plus qu'à démarrer votre Nginx

Bash
sudo service nginx start