Tutoriel, installation de Gogs sur Debian

gogs.png

Gogs est un logiciel de "forge logicielle" écrit en Golang. Dans ce tutoriel je vous détaille son installation:

  • sur un serveur ayant MariaDB et Nginx déjà installés (le serveur dédié qui héberge ce blog en fait),
  • sans containérisation Docker[1],
  • avec un port pour le "git over ssh" différent du port de l'administration du serveur qui lui a été durci [2].

Si jamais vous souhaitez dédier un serveur (ou une VM) uniquement à gogs, je vous recommande de ne pas faire comme sur ce billet, et vous passer du reverse proxy Nginx. Gogs sait fournir lui même du https.

Je stocke toute l'installation dans /data/git. N'hésitez pas à adapter ce chemin en fonction de vos contraintes, votre partitionnement, vos points de montage serveur etc....

Installer GO

#Les commandes suivantes sont à éxécuter avec le compte root (su ou sudo su)
#Installer git
apt-get install git
#Créer l'user git qui fera tourner gogs
adduser --home /data/git --disabled-login --gecos 'Gogs' git
#Les commandes suivantes sont à éxécuter avec le compte git
su - git
#Creer le dossier pour accueillir go
mkdir $HOME/local && cd $_
#Installer GO
wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz
tar -C /data/git/local -xvzf go1.10.3.linux-amd64.tar.gz
#Placer les variables d'environnement dans le .bashrc de l'user git.
echo 'export GOROOT=$HOME/local/go' >> $HOME/.bashrc
echo 'export GOPATH=$HOME/go' >> $HOME/.bashrc
echo 'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' >> $HOME/.bashrc
source $HOME/.bashrc
#Vérifier que go fonctionne:
go version
#doit retourner:
# go version go1.10.3 linux/amd64

Installer Gogs:

#Les commandes suivantes sont à exécuter avec l'user git (su - git)
#L'environnement go possède des outils pour installer 
#des sources directement depuis des dépôts git
go get -u github.com/gogs/gogs
cd $GOPATH/src/github.com/gogs/gogs
#Compiler gogs
go build
#démarer gogs pour le test
./gogs web

Il retourne ceci:

2018/06/18 11:11:56 [ WARN] Custom config '/data/git/go/src/github.com/gogs/gogs/custom/conf/app.ini' not found, ignore this if you're running first time
2018/06/18 11:11:56 [TRACE] Custom path: /data/git/go/src/github.com/gogs/gogs/custom
2018/06/18 11:11:56 [TRACE] Log path: /data/git/go/src/github.com/gogs/gogs/log
2018/06/18 11:11:56 [TRACE] Log Mode: Console (Trace)
2018/06/18 11:11:56 [ INFO] Gogs 0.11.56.0613
2018/06/18 11:11:56 [ INFO] Cache Service Enabled
2018/06/18 11:11:56 [ INFO] Session Service Enabled
2018/06/18 11:11:56 [ INFO] Run Mode: Development
2018/06/18 11:11:56 [ INFO] Listen: http://0.0.0.0:3000

Dans mon cas, ça fonctionne, il écoute bien sur le port 3000. crtl +C pour arréter gogs, puis exit pour sortir de l'user git.

Bases de données.

Comme indiqué, je suppose que vous avez MariaDB (avec les connecteurs mysql) ou MySQL sur le serveur.

mysql -u root -p

Dans le prompt Mariadb ou MySQL:

CREATE DATABASE gogs;
GRANT ALL ON gogs.* TO 'gogs'@'localhost' IDENTIFIED BY 'YourThugPassword';
FLUSH PRIVILEGES;
exit

Charger la structure de la base[3]:

mysql -u root -p gogs < /data/git/go/src/github.com/gogs/gogs/scripts/mysql.sql

Configuration de Nginx

Notez que la directive client_max_body_size 500m; est un ajout de ma part, totalement arbitraire. Les valeurs par défaut de Nginx sont cependant bloquantes pour des gros push en https.

Adaptez le server_name, les chemins de vos certificats dans l'exemple ci dessous.

server {
    listen 80;
    server_name example.com;
    return 302 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/certificate_key.key;

    client_max_body_size 500m;
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://localhost:3000;
    }
}
#tester la configuration
nginx -t
# si ok redémarrer nginx
service nginx restart

Script de démarrage automatique de gogs.

Créez le fichier /etc/systemd/system/gogs.service

Il est probable que vous ayez à changer dans l'exemple ci dessous:

  • mariadb.service par mysql.service
  • Tous les chemins /data/git par le chemin de votre architecture.
[Unit]
Description=Gogs (Go Git Service)
After=syslog.target
After=network.target
After=mariadb.service
After=nginx.service

[Service]
Type=simple
User=git
Group=git
WorkingDirectory=/data/git/go/src/github.com/gogs/gogs
ExecStart=/data/git/go/src/github.com/gogs/gogs/gogs web
Restart=always
Environment=USER=git HOME=/data/git

[Install]
WantedBy=multi-user.target

Activer le script:

systemctl enable gogs
systemctl start gogs

Paramétrages de Gogs.

Rendez-vous à l'adresse https://VotreServeurGogs.[4]

Voila, la page que vous devriez obtenir: gogs-setup.PNG

Les champs que je ne mentionne pas, c'est parceque c'est du bon sens (et de toutes façons, on reprendra certains points de paramétrage plus loin avec le fichier de config).

  • Type de base: Mysql
  • Hôte: 127.0.0.1:3306
  • Utilisateur: gogs
  • Mot de Passe: YourThugPassword
  • (...)
  • Domaine your.serveur.tld (Le full qualified domain name de votre serveur)
  • Port SSH 2222
  • Cocher "Utiliser le serveur SSH incorporé"
  • Port: 3000 (laisser le port 3000 même si on le le met pas dans l'URL vu qu'on utilise un reverse proxy
  • URL: https://your.serveur.tld/

On ne remplit pas les blocs "Paramètres du service de messagerie ", "Paramètres du serveur et des autres services ", " Paramètres du compte administrateur " maintenant.

Click sur "installer gogs"

gogs-first-screen.PNG

On s'inscrit (le premier compte inscrit sera administrateur) puis on se connecte, et ça marche:

gogs-first-conn.PNG

Mais ce n'est pas fini, non non, il reste à faire:

  • Régler le smtp
  • Fermer l'écoute sur le port 3000

Post configuration

un petit tour dans le fichier /data/git/go/src/github.com/gogits/gogs/custom/conf/app.ini

  • HTTP_ADDR = 172.0.0.1 sert à indiquer à gogs qu'il ne doit répondre qu'aux connexions locales (le reverse proxy nginx).
  • Le bloc [mailer] , je vous laisse prendre exemple pour tu smtp authentifié avec STARTTLS

Avec des mots de passe bidons, voici celui qui sert au gogs du Hackerspace ventres mous.

APP_NAME = VentresMousGit
RUN_USER = git
RUN_MODE = prod

[database]
DB_TYPE  = mysql
HOST     = 127.0.0.1:3306
NAME     = gogs
USER     = gogs
PASSWD   = YourThugPassword
SSL_MODE = disable
PATH     = data/gogs.db

[repository]
ROOT = /data/git/gogs-repositories

[server]
DOMAIN           = git.ventresmous.fr
HTTP_PORT        = 3000
HTTP_ADDR 	 	 = 127.0.0.1
ROOT_URL         = https://git.ventresmous.fr/
DISABLE_SSH      = false
SSH_PORT         = 2222
START_SSH_SERVER = true
SSH_LISTEN_PORT  = 2222
OFFLINE_MODE     = false

[mailer]
ENABLED = true
HOST	= new.tinad.fr:587
USER	= git@ventresmous.fr
PASSWD	= YourThugEmailPassword
FROM	= git@ventresmous.fr

[service]
REGISTER_EMAIL_CONFIRM = true
ENABLE_NOTIFY_MAIL     = true
DISABLE_REGISTRATION   = false
ENABLE_CAPTCHA         = true
REQUIRE_SIGNIN_VIEW    = false

[picture]
DISABLE_GRAVATAR        = false
ENABLE_FEDERATED_AVATAR = false

[session]
PROVIDER = file

[log]
MODE      = file
LEVEL     = Info
ROOT_PATH = /data/git/go/src/github.com/gogs/gogs/log

[security]
INSTALL_LOCK = true
SECRET_KEY   = fghsdfghsdfghdf

Pour que vos modifications dans ce fichier soient prises en compte:

systemctl restart gogs

Mettre à jour golang et gogs.

Mettre à jour go.

#Les commandes suivantes sont à exécuter en tant que "git"
su - git
#faire un backup avant
tar -zcvf ~/local/go-old.tar.gz ~/local/go/
#purger l'ancienne version
rm -rf ~/local/go
cd   ~/local
#télécharger et décompression la nouvelle version
wget https://dl.google.com/go/LastVersionDeGo.linux.amd64.tar.gz
tar -C /data/git/local -xvzf LastVersionDeGo.linux.amd64.tar.gz
# Vérifier
go version
#recompiler gogs
cd ~/go/src/github.com/gogs/gogs/
go build
#repasser root
exit
#Redémarrer le service gogs
service gogs restart

Mettre à jour Gogs

#Les commandes suivantes sont à exécuter en tant que "git"
su - git
go get -u github.com/gogs/gogs
cd $GOPATH/src/github.com/gogs/gogs
#Compiler gogs
go build
#repasser root
exit
service gogs restart

Liens et conclusion

Voilà, j'ai tout ce qu'il faut pour quitter Ms Github.

Je vous laisse découvrir les fonctionnalités sur l'interface de gogs. Pour écrire ce tutoriel, je me suis basé sur:

Notes

[1] Why? J'utilise docker pour certains services sur le serveur, mais là j'ai préféré m'en passer parce que Hormis Golang et gogs tous les éléments sont déjà fournis par le serveur. Et la mappage de l'image Docker avec un serveur postgre ou mysql et avec les dossier repository, au final, ça donne un truc plus compliqué que de l'installer à l'ancienne.

[2] Et je pense que c'est sécurisant. Laisser Gogs gérer son SSH qui du coup ne permettra que les commandes git sans risque de débordement

[3] Lors de l'installation plus loin, il est censé créer la structure, mais il semble y avoir un bug. Il faut le faire maintenant, c'est plus simple.

[4] Si jamais ça ne fonctionnait pas, allez y sur http://VotreServeurGogs:3000 et je vous laisse voir si le problème vient de gogs ou du reverse proxy

Page top