Skip to content

Gogs, un serveur Git avec Docker

gogs

Dans cet article, je vais vous expliquer comment déployer Gogs, un serveur Git avec interface web, écrit en Go et bien plus léger que Gitlab. Nous utiliserons donc l’outils Docker-compose pour lancer Gogs et Nginx avec de l’HTTPS via Let’s Encrypt.

Gogs (Go Git Service) is a painless self-hosted Git service.

Pour commencer, on va préparer un dossier afin de recevoir notre stack Gogs :

mkdir /srv/Gogs
mkdir -p /srv/Gogs/etc/nginx
mkdir -p /srv/Gogs/etc/certs

Pour continuer, il faut que Docker soit installé sur votre serveur !
Pour cela, tapez ces commandes si ce n’est pas déjà fait (sur Debian jessie) :

On va ensuite générer nos certificats Let’s Encrypt en lançant un container. Il faudra choisir « Temporary Server » et renseigner finalement votre nom de domaine :

docker run -it --rm -p 443:443 -p 80:80 --name letsencrypt \
            -v "/etc/letsencrypt:/etc/letsencrypt" \
            -v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
            quay.io/letsencrypt/letsencrypt:latest auth

Voilà, vos certificats sont correctement générés. On va les copier dans notre dossier Gogs :

cp -r /etc/letsencrypt/ /srv/Gogs/etc/

Il nous reste le DHParam à générer à l’aide d’OpenSSL :

cd /srv/Gogs/etc/nginx/certs/ ; openssl dhparam -out dhparam.pem 2048

Il vous faut maintenant le fichier de configuration de Nginx, copiez le dans /srv/Gogs/etc/nginx/nginx.conf :

N’oubliez pas de remplacer git.domain.com par le nom de domaine que vous allez utiliser.

On peut désormais créer notre fichier docker-compose.yml qui va lancer nos deux containers :

vim /srv/Gogs/docker-compose.yml
gogs_web:
  image: nginx
  restart: always
  ports:
    - 443:443
    - 80:80
  volumes:
     - ./etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
     - ./var/log/nginx:/var/log/nginx
     - ./etc/letsencrypt:/etc/letsencrypt
     - ./etc/nginx/certs:/etc/nginx/certs
  links:
    - gogs_engine
gogs_engine:
  image: gogs/gogs:latest
  restart: always
  ports:
    - 2222:22
  expose: 
    - "3000"
  volumes:
    - ./var/gogs:/data

Pour expliquer rapidement, il lance un premier container Nginx nommé gogs_web qui écoute sur les ports 80 et 443 avec plusieurs volumes (conf / certs) et relié à Gogs (link). Le second container est Gogs, se nomme gogs_engine et écoute sur le port 2222 pour SSH. Il expose son port 3000 (web) à Nginx (grâce au link). Il possède également un volume qui contiendra ses données comme les dépôts, la configuration…

Si vous êtes prêt, il y a plus qu’à démarrer notre Stack !

docker-compose up -d

Cette commande lance nos deux containers en mode détachés, utilisez docker-compose logs si il y a un soucis. On se rend enfin sur le port 443 de notre serveur et on arrive sur la page d’installation de Gogs :

gogs-config

Je vous suggère SQLite si vous ne voulez pas de base de données externe, sinon vous pouvez aisément ajouté un MariaDB à votre docker-compose.

Votre serveur Git est maintenant dispo, sécurisé et prêt à l’emploi !

gogs_interface

 

 

 

 

 

 

 

Published inDebianDockerGitLinuxTLSTutorielWeb server

8 Comments

  1. jeancloud jeancloud

    Je viens de découvrir ton blog. Tes articles sont de qualité. Bonne continuation !

    • valentin valentin

      Merci, ça fait très plaisir !

  2. Pascal OBSTETAR Pascal OBSTETAR

    Bonjour,
    Meric pour ce tuto, mais j’obtiens cette erreur au lancement du docker-compose :

    Status: Downloaded newer image for gogs/gogs:latest
    Creating gogs_gogs_engine_1

    ERROR: for gogs_engine Invalid port specification: « 601342 »

    • valentin valentin

      Hello,
      Essaie de mettre des quotes entre les numéros de port, exemple :
      ports:
      - "10443:443"

  3. David David

    Très clair et franchement pour l’utiliser depuis plusieurs moi, c’est LE serveur git. De plus les mises a jours se font très simplement en mettant a jour l’image et en relançant le projet (up). Juste 2 petites choses

    – il faudrait penser a utiliser la version 2 de la syntaxe de compose (beaucoup mieux structurée)
    – il faudrait également utiliser les volumes docker ce qui rendra un grand service lors du passage a swarm (portabilité des data entre hôtes docker)

    • valentin valentin

      Salut, merci pour ton commentaire.
      Pour la v2, il faudra que je jette un oeil à la doc ^^
      Pour les volumes, j’ai l’impression de les utiliser dans mes deux containers (Nginx et Gogs), n’est-ce pas le cas ?

  4. Antoine Antoine

    Salut ! Très bon tutoriel que j’ai réaliser sur mon serveur, marche impec ! Juste une chose :
    dans le nginx.conf, j’ai été obliger d’ajouter :
    « client_max_body_size 20m; »
    Car lors d’un git push de l’un de mes projets, je suis rester bloquer à 2mo d’up, ce qui pour un gros projet c’est révélé un peu juste.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Proudly hosted with Open-sources Softwares.