Gitea sous Apache

De EjnTricks

Gitea étant une application indépendante qui démarre une serveur d'application sur le port 3000 par défaut.

Cet article présente la configuration Apache mise en place pour exposer le serveur sur un site internet, en tant que sous domaine et en forçant l'accès par HTTPS avec utilisation d'un certificat fourni par Let's Encrypt.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


System-Install-icon.png Préparation environnement

Certbot sera utilisé pour demander et renouveler le certificat du site. Dans son fonctionnement, le process essaye d'accéder à un .well-known à la racine du site. De plus, une bonne pratique consiste à fournir un répertoire racine pour les sites déployés sous Apache. Le répertoire /var/www/git est alors créé, ainsi que le sous répertoire .well-known.

#sudo mkdir -p /var/www/git/.well-known
#sudo chown -R www-data:www-data /var/www/git


Configuration-icon.png Configuration HTTP

Dans un premier temps, une configuration temporaire est mise en place pour accéder de façon non sécurisé. Un fichier git est créé dans le répertoire /etc/apache2/sites-available avec le contenu suivant.

<VirtualHost *:80>
    ServerAdmin ejouvin@free.fr
    ServerName www.git.dummy.net
    DocumentRoot /var/www/git
    DirectoryIndex index.html

    <Directory /var/www/git>
        Options -Indexes +FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>

    LogLevel warn
    ErrorLog ${APACHE_LOG_DIR}/git_error.log
    CustomLog ${APACHE_LOG_DIR}/git_access.log combined

    Alias /.well-known "/var/www/git/.well-known"
    <Directory "/var/www/git/.well-known">
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

</VirtualHost>

Cette configuration doit être mise à disposition en plaçant un lien dans /etc/apache2/sites-enabled.

#sudo ln -s /etc/apache2/sites-available/git /etc/apache2/sites-enabled/008-git.conf

Le nom du lien, à savoir 008-git.conf, respecte une incrémentation sur la machine utilisée, il peut être remplacé pour tout autre nom valide pour Apache.

Il suffit de relancer la configuration d'Apache pour qu'elle soit prise en compte.

#sudo apache2ctl graceful


Certificate Server icon.png Certificat

L'application est à présent disponible avec l'URL http://www.git.dummy.net. Un certificat va être demandé à l'aide de Certbot.

#sudo certbot certonly --webroot -w /var/www/git -d www.git.dummy.net --email contact-email@dummy.net
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for www.git.dummy.net
Using the webroot path /var/www/git for all unmatched domains.
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/www.git.dummy.net/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/www.git.dummy.net/privkey.pem
   Your cert will expire on 2018-05-09. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Le certificat est stocké dans le répertoire /etc/letsencrypt/live/www.git.dummy.net/.


Lock-icon.png Configuration HTTPS

Le certificat étant disponible, la configuration HTTPS peut être mise en place. Un fichier selfpwd-dummy-ssl est créé dans le répertoire /etc/apache2/sites-available avec le contenu suivant.

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin ejouvin@free.fr
    ServerName www.git.dummy.net
    DocumentRoot /var/www/git
    DirectoryIndex index.html

    <Directory /var/www/git>
        Options -Indexes +FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>

    LogLevel warn
    ErrorLog ${APACHE_LOG_DIR}/git_ssl_error.log
    CustomLog ${APACHE_LOG_DIR}/git_ssl_access.log combined

    SSLEngine on
    SSLCertificateFile         /etc/letsencrypt/live/www.git.dummy.net/cert.pem
    SSLCertificateKeyFile      /etc/letsencrypt/live/www.git.dummy.net/privkey.pem
    SSLCertificateChainFile    /etc/letsencrypt/live/www.git.dummy.net/chain.pem
    SSLProtocol all -SSLv2 -SSLv3
    SSLHonorCipherOrder on
    SSLCompression off
    SSLOptions +StrictRequire
    SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

    Alias /.well-known "/var/www/git/.well-known"
    <Directory "/var/www/git/.well-known">
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ProxyPreserveHost On
    ProxyRequests off
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/

</VirtualHost>
</IfModule>

A noter l'alias sur .well-known est remis en prévision des renouvellements du certificat.

Le paramétrage sur ProxyPass permet de redirigé vers le serveur démarré par Gitea.

Cette configuration doit être mise à disposition en plaçant un lien dans /etc/apache2/sites-enabled.

#sudo ln -s /etc/apache2/sites-available/git-dummy-ssl /etc/apache2/sites-enabled/009-git-ssl.conf

Le nom du lien, à savoir 009-igt-ssl.conf, respecte une incrémentation sur la machine utilisée, il peut être remplacé pour tout autre nom valide poru Apache.

Enfin la configuration HTTP, sur le port 80, est modifiée pour forcer la redirection sur l'accès en HTTPS. Le précédent fichier selfpwd est modifié avec lu contenu suivant.

<VirtualHost *:80>
	ServerAdmin ejouvin@free.fr
	ServerName www.git.dummy.net

	RewriteEngine on
	RewriteCond %{HTTPS} !on
	RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

        LogLevel warn
        ErrorLog ${APACHE_LOG_DIR}/git_error.log
        CustomLog ${APACHE_LOG_DIR}/git_access.log combined

</VirtualHost>

Il suffit de relancer la configuration d'Apache pour que les modifications soient prises en compte.

#sudo apache2ctl graceful