Services et serveurs

Send : Une alternative à Wetransfer autohébergée

Table des matières

Introduction



Dans cet article, nous allons voir comment installer Send, un outil style "Wetransfer" autohébergeable.
C'est un fork de Firefox Send qui n'est plus maintenu :

Le projet : https://send.vis.ee et le code source : https://gitlab.com/timvisee/send

Ce tuto est fait sur Red Hat Enterprise Linux 9, mais cela fonctionnera de la même façon quelque soit le système.

Prérequis



Dans un premier temps, on a besoin d'un serveur web apache httpd + les modules SSL, de git, et de nodejs/npm :
Code BASH :
dnf install git httpd mod_ssl nodejs npm


On va ouvrir temporairement le port 1443 qui sera utile pour tester :
Code BASH :
firewall-cmd --add-port=1443/tcp


Installation



On va créer un user send et on va tout faire avec lui :
Code BASH :
useradd -m send


On se connect en tant que send :
Code BASH :
su - send


On clone le projet :
Code BASH :
git clone https://gitlab.com/timvisee/send.git


On va dans le projet
Code BASH :
cd send


On installe toutes les dépendances du projet :
Code BASH :
npm install


On construit l'application :
Code BASH :
npm run build


Tester



Pour tester :
Code BASH :
npm run prod


Dans notre navigateur, on va en http sur l'IP du serveur, port 1443 :

send-wetransfer-test



Un Reverse proxy devant



L'application ne supportant que le HTTP, on va mettre un reverse proxy devant.
Vous savez, j'aime bien apache httpd en tant que reverse-proxy
Donc je vais faire une config apache httpd, mais vous pouvez utiliser ce que vous voulez, comme par exemple nginx !

Ici les commandes sont à faire en tant que root !

On créé une config spécifique :
Code BASH :
vim /etc/httpd/conf.d/send.conf


On y place ceci (adaptez évidemment avec votre domaine pour ServerName, pour les logs et idem pour vos certificats SSL) :
Code :
<VirtualHost *:443>
ServerName send.linuxtricks.fr
DocumentRoot /var/www/html/
ServerAdmin [email protected]
ErrorLog /var/log/httpd/send.linuxtricks.fr-error_log
TransferLog /var/log/httpd/send.linuxtricks.fr-access_log
ServerSignature Off
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
#SSLCertificateFile /etc/letsencrypt/live/send.linuxtricks.fr/fullchain.pem
#SSLCertificateKeyFile /etc/letsencrypt/live/send.linuxtricks.fr/privkey.pem
RewriteEngine on
ProxyPreserveHost on
RequestHeader set X-Forwarded-Proto https
# Si fichier Normal, on le retourne
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]
# Conf Websocket
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://127.0.0.1:1443/$1 [P,L]
RewriteRule ^/(.*)$ http://127.0.0.1:1443/$1 [P,QSA]
# proxy
ProxyPassReverse  "/" "http://127.0.0.1:1443"
ProxyPass  "/" "http://127.0.0.1:1443"
</VirtualHost>


On n'oublie pas avec SELinux d'autoriser le serveur httpd d'accéder au réseau :
Code BASH :
setsebool -P httpd_can_network_connect on


Rechargez le service httpd :
Code BASH :
systemctl reload httpd


On n'oublie pas d'ouvrir le parefeu :
Code BASH :
firewall-cmd --add-service=https --permanent 
firewall-cmd --reload


Ajustements configuration application



Toujours en tant que root, on va créer un service :
Code BASH :
vim /etc/systemd/system/send.service


Voici le contenu classique :
Code :
[Unit]
Description=Service pour send
After=network.target
[Service]
WorkingDirectory=/home/send/send
ExecStart=/usr/bin/npm run prod
User=send
Restart=always
Environment=PATH=/usr/bin:/usr/local/bin
[Install]
WantedBy=multi-user.target


On reload systemd :
Code BASH :
systemctl daemon-reload


Y a un p'tit bug avec les liens générés, je n'ai pas trouvé mieux que d'éditer le fichier de config :
Code BASH :
vim /home/send/send/server/config.js


Et de mettre en dur l'URL :
Code :
  base_url: {
    format: 'url',
    default: 'https://send.linuxtricks.fr',
    env: 'BASE_URL'
  },


Par défaut, les fichiers sont uploadés dans /tmp, prévoyez de la place en conséquence ou on purra changer la destination :
Code :
  file_dir: {
    format: 'String',
    default: `/home/send/upload/`,
    env: 'FILE_DIR'
  },


On créé le dossier qui va bien :
Code BASH :
mkdir /home/send/upload
chown send:send -R /home/send/upload


On démarre le service :
Code BASH :
systemctl start send.service


On active bien tous les services (httpd et send) au reboot :
Code BASH :
systemctl enable send.service httpd.service


Tester



On accède à l'URL en HTTPS :

send-wetransfer-1



On peut envoyer notre fichier :

send-wetransfer-2



Une foi l'envoi terminé, on a le lien généré :

send-wetransfer-2b



Et avec le lien généré, on peut le récupérer :

send-wetransfer-3


Cette page a été vue 1363 fois