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)
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
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
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
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
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.