Préparation en vue d'une mise en production


Vous avez deux possibilités

  • Compiler l'application pour en faire un exécutable que vous pourrez lancer sur un serveur sans GO, mais il faudra recompiler à chaque mise à jour
  • L'utiliser avec GO qui le compilera aussi pour pouvoir l'exécuter (le langage créé par Google)

je vais détailler les deux possibilités en commençant par l'utilisation directement avec GO, puis dans la continuité, comment le compiler afin qu'il fonctionne sans prérequis sur tous les serveurs ayant la même architecture que le serveur qui la compilait

Nous allons utiliser une debian 10 et les outils seront en armv6 (GO ainsi que le programme compilé)
Si vous n'utilisez pas une architecture Arm sur votre serveur, il faudra donc choisir les outils adaptés au processeur utilisé
Les commandes seront identiques même si les architectures sont différentes (processeurs)

Mise à jour Debian 10

Commencez par installer debian 10

Mettez-le à jour

apt update && apt upgrade

&& sert à exécuter la commande suivante, si la première s'est bien déroulée

Installation des prérequis

Voici les paquets prérequis depuis une debian sous LXC

apt install curl nano git unzip gcc 
  • Curl va servir pour le téléchargement de GO et du script transfert.sh.
  • Git va servir à la mise en place de transfert.sh
  • unzip pour extraire l'archive téléchargée
  • gcc va permettre de compiler l'outil

Mise en place de GO

Allez sur le site de GO
Dans la liste un peu plus bas, télécharger la version qui correspond à votre architecture

Attention, n'installez pas le paquet GO présent dans la distribution (si vous avez les sources d'APT par défaut), car il est obsolète et ne fonctionne pas avec le script de mise en place de transfersh.

Dans mon cas je prends le paquet suivant : go1.16.3.linux-armv6l.tar.gz, cliquez sur le lien du paquet souhaité puis copiez le lien présent dans this link en haut de la page apparue

Allez sur votre serveur et entrez la commande suivante :

curl -SLO https://golang.org/dl/go1.16.3.linux-armv6l.tar.gz

Voici l'explication des options CURL

  • S affichent les erreurs
  • L suit les redirections pour télécharger le fichier final
  • O garde le nom proposé lors du téléchargement

Entrez la commande suivante pour extraire l'archive dans le dossier des applications

tar -C /usr/local -xzf go1.16.3.linux-armv6l.tar.gz

Vous allez ajouter l'exécutable dans les variables d'environnement du système, ça permettra de faire appel à la commande go

Entrez la commande suivante pour faire les modifications au niveau de /etc/profile (Attention sur Ubuntu la modification se fait dans /etc/environment, faite le à la main car il n'y a qu'une ligne)

sed -i "$(grep -num2 PATH /etc/profile |cut -d':' -f1 | sed -z "s+\n+,+")s+PATH=\"+PATH=\"/usr/local/go/bin:+" /etc/profile

Explication de la commande:
commençons par $(grep -num2 PATH /etc/profile |cut -d':' -f1 | sed -z "s+\n+,+")

  • $() permet d'implémenter le résultat de la commande qui est insérée entre les parenthèses dans une autre commande
  • grep -num2 PATH /etc/profile récupère les deux premières occurrences PATH dans /etc/profile
  • cut -d':' -f1 On récupère la première colonne (-f1), le délimiteur est :
  • sed -z "s+\n+,+ On remplace les retours à la ligne par une virgule. Ce qui donne les deux premières lignes contenant l'occurrence PATH affichées à la suite avec une virgule entre les deux (5,7 par exemple)
    Continuons avec la seconde partie de la commande sed -i "$(grep -num2 PATH /etc/profile |cut -d':' -f1 | sed -z "s+\n+,+")s+PATH=\"+PATH=\"/usr/local/go/bin:+" /etc/profile
  • sed -i modifie le fichier concerné directement
  • s+ fait une comparaison RegEx, le + remplace le / pour éviter les erreurs avec les / de la ligne à remplacer
  • PATH=\"+PATH=\"/usr/local/go/bin:+" remplace les occurrences PATH=\" par PATH=\"/usr/local/go/bin:
  • /etc/profile modifie le fichier indiqué

Cette commande va donc remplacer les 2 premières occurrences PATH=" par PATH="/usr/local/go/bin:. Si vous avez peur de vous tromper, faites les modifications à la main.

Une fois les modifications effectuées, redémarrer votre OS si vous avez modifié /etc/profile

reboot

Pour que la commande go ne soit appliquée qu'à un profil. Entrez la commande suivante

echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profile

Il faudra fermer et réouvrir votre session pour que cela prenne effet.

Après le redémarrage ou la réouverture de session, vérifier si cela fonctionne correctement

go version

Vous devriez avoir la version actuelle de GO

Téléchargement de Transfersh et essais de fonctionnement

Il y à deux façons de faire

Manuel

Allez sur le git de transfertsh pour télécharger l'archive
Cliquez sur l'icône vert (code), faite un clic droite sur download zip et copier l'URL

Sur votre serveur, tapez la commande copiée

curl -SLO https://github.com/dutchcoders/transfer.sh/archive/refs/heads/master.zip

Automatique

git clone https://github.com/dutchcoders/transfer.sh.git

dézipper l'archive

unzip master.zip

Puis entrez dans le dossier dézippé

cd transfer.sh-master/

Trouvez l'IP de la machine si vous ne l'avez pas déjà avec la commande

ip a

Testez le fonctionnement en root. La première fois ça peut prendre un certain temps, car il va télécharger tous les prérequis et compiler le programme

go run main.go --provider=local --listener :8080 --basedir=/tmp/ 

Explication de la commande

  • --provider=local indique que le stockage est local
  • --listener :8080 écoute sur le port 8080 ouvert à tous, si vous avez un reverse proxy sur le même serveur indiqué localhost:8080, pour que seul le serveur en local puisse y accéder
  • --temp-path=/tmp/ --basedir=/tmp/ le répertoire de stockage temporaire et permanent sont /tmp/

Une fois la compilation terminée vous aurez le message suivant : listening on port: :8080

Allez sur le navigateur de votre poste de travail et entrez l'adresse du serveur

IP:8080

Si la page de transfersh apparait, alors c'est que cela fonctionne.

Retournez sur le serveur et faites CTRL + C de votre clavier pour quitter le programme

Compiler le programme

Depuis le dossier dans lequel vous avez lancé le programme, entrez la commande suivante

go build -o transfersh main.go

Dès que vous reprenez la main sur le terminal, lancez la commande suivante pour tester le programme

./transfersh --provider=local --listener :8080 --basedir=/tmp/

Dès que le message suivant apparait listening on port: :8080, connectez-vous à IP:8080 avec un navigateur
Si tout fonctionne, retournez au terminal du serveur et faites un CTRL+C pour quitter le programme

Vous pouvez copier transfersh sur un autre serveur qui à une architecture identique au serveur sur lequel vous l'avez compilé pour la mise en production.