Héberger votre forge Gitea/Drone avec Docker en HTTPS (partie 1)

Posted by Trouverie Joachim on Mon 21 October 2019

Si comme moi vous disposez de votre propre serveur, il vous est peut être venu à l'esprit de migrer l'ensemble de vos dépôts sur une forge bien à vous avec un système d'intégration continue qui colle à vos besoins.

Il existe un certain nombre de forges que vous pouvez héberger sur votre serveur. On va s'intéresser ici au couple Gitea, pour la forge, et Drone, pour la CI.

Les deux s'interfacent facilement ensemble via une authentification OAuth2 et se déploient facilement via Docker.

Pour le reste de l'article je considère que Docker et docker-compose sont installés et configurés sur le serveur. Pour plus d'informations allez sur la documentation de docker

Mise en place des conteneurs

Dans un premier temps, nous allons installer Gitea seul afin de pouvoir configurer l'application OAuth2 nécessaire au bon fonctionnement de Drone.

Nous allons nous baser sur la dernère image de Gitea disponible présente sur le hub de Docker : 1.9.4 lors de la rédaction de cet article

Créons les dossiers nécessaires qui serviront aux stockages persistants de nos images

$ mkdir -p volumes/{gitea,db}

Gitea peut se baser sur plusieurs type de base de données comme stockage. Nous allons utiliser ici une base de données Postgresql qui sera intégrée depuis l'image Docker officielle que l'on trouve sur le hub.

Notre docker-compose.yml pour cette première étape sera donc le suivant

version: '3'

services:
  db:
    image: postgres:9.6
    container_name: db
    restart: always
    environment: 
      - POSTGRES_USER=${DB_USER}
      - POSTGRES_PASSWORD=${DB_PASSWORD}
      - POSTGRES_DB=gitea
    volumes:
      - ./volumes/db:/var/lib/postgresql/data/

  gitea:
    image: gitea/gitea:latest
    container_name: gitea
    restart: always
    ports: 
      - "3000:3000"
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - DB_TYPE=postgres
      - DB_HOST=db:5432
      - DB_NAME=gitea
      - DB_USER=${DB_USER}
      - DB_PASSWORD=${DB_PASSWORD}
      - DISABLE_REGISTRATION=true
    volumes:
      - ./volumes/gitea:/data/
    depends_on:
      - db

Quelques petites explications sur les clés utilisées ici

Clé Valeur
POSTGRES_USER et DB_USER Utilisateur de base de données pour l'application
POSTGRES_PASSWORD et DB_PASSWORD Mot de passe de la base données
POSTGRES_DB et DB_NAME Nom de la base de donnéees
USER_UID et USER_GID Définition l'utlisateur avec lequel sera lancé l'application dans notre conteneur au lieu de root (ici git)
DB_TYPE Le type de notre base de données pour Gitea
DB_HOST Le nom du conteneur et le port sur lesquels tourne notre base de données
DISABLE_REGISTRATION Dans mon cas je ne souhaitais pas permettre à de nouveaux utilisateurs d'utiliser ma forge
depends_on Grâce à cette clé nous nous assurons que notre conteneur de base de données est bien démarré avant de lancer celui de l'application

Les variables d'environnement ${DB_USER} et ${DB_PASSWORD} sont substituées en les renseignant dans un fichier .env que nous viendrons placer dans l'arborescence à la même racine que notre fichier docker-compose.yaml.

Installation de Gitea

Une fois les conteneurs mis en place nous pouvons nous lancer dans l'installation de Gitea

$ docker-compose up -d

Dans la configuration de base, Gitea sert l'application sur le port 3000 du conteneur. Nous avons pris soin de lier ce dernier au port 3000 de notre host dans le fichier docker-compose.yml.

Nous pouvons maintenant utiliser notre navigateur pour terminer l'installation en utilisant l'adresse http://localhost:3000/install.

gitea_screnshot

Renseignez les derniers champs et n'oubliez pas de remplir la partie relative à l'utilisateur admin.

Mise en place de l'authentification pour Drone

Maintenant que Gitea est installé, avant d'aller plus loin, nous allons ajouter une application OAuth2 via les paramètres de l'application.

Pour se faire, rendez vous à l'adresse http://localhost:3000/settings/applications pour rentrer les paramètres relatifs au service Drone que nous allons mettre en place comme suit

gitea_drone

Important

N'oubliez pas le /login dans votre adresse de redirection ou cette dernière ne fonctionnera pas comme souhaitée

Voilà nous avons mis en place notre conteneur Gitea dans la seconde partie nous installerons Drone et mettrons en place l'HTTPS.