Configuration de seafile avec apache

une des choses qui peut vous ennuyez avec Seafile, ce sont les ports, en effet entre le port 8000 pour le serveur web (Seahub) et le port 8082 pour le serveur de fichier cela peut-être assez facile de se tromper entre les ports.
Ce que je vous propose aujourd'hui, est d'utiliser Apache, peut-être le serveur web le plus utilisé aujourd'hui (cela va déplaire à ceux qui utilise nginx ;-)), donc nous allons activer les FastCGI d'Apache et pour le serveur de fichier nous allons mettre en place un proxy inversé, comme cela fini avec l'embrouille des ports 8000 et 8082 seul le port 80 (voir 443) sera utilisé.

A ce niveau de l'article, je suppose que vous avez Apache et seafile d'installé, dans cette article je suis sur un serveur type Debian
Si, Seafile n'est pas installé

Avant de commencer

Bon votre serveur Apache est installé vous devrez installer le module fastCGI et un package python pour implémenter l'interface de passerelle du serveur Web Python, voici les packages dont vous aurez besoin :
Toujours sur Debian ou équivalent :

apt-get install libapache2-mod-fastcgi python-flup

Cela installé, vous pouvez activer les modules Apache

a2enmod rewrite
a2enmod proxy_fcgi
a2enmod proxy_http
a2enmod fastcgi

Seafile en HTTP

Il vous faudra créer votre hôte virtuel, pour cela nous allons éditer un fichier de configuration dans le répertoire /etc/apache2/sites-available, je l'appel seafile.conf

<VirtualHost *:80>
  ServerName www.mydomain.com
  DocumentRoot /var/www/html
  Alias /media    /opt/seafile/seafile-server-latest/seahub/media
  
  <Location /media>
      Require all granted
  </Location>
  RewriteEngine On
  
  FastCGIExternalServer /var/www/html/seahub.fcgi -host 127.0.0.1:8000
  FastCGIExternalServer /Var/www/html/seafdav.fcgi -host 127.0.0.1:8082
    
  #
  #       seafile fileserver
  #
  ProxyPass /seafhttp http://127.0.0.1:8082
  ProxyPassReverse /seafhttp http://127.0.0.1:8082
  RewriteRule ^/seafhttp - [QSA,L]
  
  #
  #       Sync webdav
  #
  RewriteConf %{HTTP:Authorization} (.+)
  RewriteRule ^(/seafdav.*)$ /seafdav.fcgi$1 [QSA,L,e=HTTP_AUTHORIZATION:%1]
  RewriteRule ^(/seafdav.*)$ /seafdav.fcgi$1 [QSA,L]
      
  # 
  #       Seahub
  #
  RewriteRule ^/(media.*)$ /$1 [QSA,L,PT]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_URI} !(.*/\.well-known/acme-challenge/.*)
  RewriteRule ^(.*)$ /seahub.fcgi$1 [QSA,L,E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
  
  ErrorLog ${APACHE_LOG_DIR}/seafile-error.log
  CustomLog ${APACHE_LOG_DIR}/seafile-access.log combined
</VirtualHost>

Activez votre hôte virtuel :

a2ensite seafile.conf

Rechargez votre configuration d'Apache :

/etc/init.d/apache2 reload

Seafile en HTTPS

Avant de commencer, il faudra installer le package openssl :

apt-get install openssl

Je donne l'étape de création d'un certificat auto-signé, mais vous pouvez utiliser aussi let's encrypt :

openssl genrsa -out privkey.pem 2048
openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095

Il faudra activer le module SSL d'apache :

a2enmod ssl 

Il faudra créer un nouvel hôte virtuel dans /etc/apache2/sites-available, je l'appel seafile-ssl.conf

 <VirtualHost *:443>
  ServerName www.mydomain.com
  DocumentRoot /var/www/html
  Alias /media    /opt/seafile/seafile-server-latest/seahub/media
  
  <Location /media>
      Require all granted
  </Location>
  RewriteEngine On
  
  #
  #       seafile fileserver
  #
  ProxyPass /seafhttp http://127.0.0.1:8082
  ProxyPassReverse /seafhttp http://127.0.0.1:8082
  RewriteRule ^/seafhttp - [QSA,L]
  
  #
  #       Sync webdav
  #
  RewriteConf %{HTTP:Authorization} (.+)
  RewriteRule ^(/seafdav.*)$ /seafdav.fcgi$1 [QSA,L,e=HTTP_AUTHORIZATION:%1]
  RewriteRule ^(/seafdav.*)$ /seafdav.fcgi$1 [QSA,L]
      
  # 
  #       Seahub
  #
  RewriteRule ^/(media.*)$ /$1 [QSA,L,PT]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_URI} !(.*/\.well-known/acme-challenge/.*)
  RewriteRule ^(.*)$ /seahub.fcgi$1 [QSA,L,E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
  
  SSLEngine on
  SSLCertificateFile      /chemin/vers/votre/cacert.pem
  SSLCertificateKeyFile   /chemin/vers/votre/privkey.pem
  
  ErrorLog ${APACHE_LOG_DIR}/seafile-error.log
  CustomLog ${APACHE_LOG_DIR}/seafile-access.log combined
</VirtualHost>

Activez votre hôte virtuel :

a2ensite seafile.conf

Rechargez votre configuration d'Apache :

/etc/init.d/apache2 reload

Voici, 2 lignes pour rediriger proprement vos utilisateurs vers la version ssl de seafile, ces lignes doivent être intégrés dans le fichier de configuration de votre hôte virtuel qui n'a pas ssl d'activer, dans mon cas c'est seafile.conf:

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=301]