Comment installer Forgejo

Publié le 15 décembre 2024.

Pour installer Forgejo (version 9.0.3 au moment où j'écris ces lignes), nous allons utiliser Docker et Docker Compose.

Nous allons principalement nous baser sur la documentation officielle de Forgejo.

Préparer l'installation

Avant tout, il faut configurer un serveur et installer Docker et Docker Compose dessus.

Ensuite, à partir d'un dossier de notre choix, créer l'arborescence suivante :

/my-forgejo-instance/
|-- /forgejo/
|-- /forgejo-runner/

Installer Forgejo

Dans le dossier forgejo, créer un fichier docker-compose.yml (cf. documentation officielle) :

networks:
  forgejo:
    external: false

services:
  server:
    image: codeberg.org/forgejo/forgejo:9
    container_name: forgejo
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - FORGEJO__database__DB_TYPE=mysql
      - FORGEJO__database__HOST=db:3306
      - FORGEJO__database__NAME=forgejo
      - FORGEJO__database__USER=forgejo
      - FORGEJO__database__PASSWD=forgejo
    restart: always
    networks:
      - forgejo
    volumes:
      - ./forgejo:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - '3000:3000'
      - '222:22'
    depends_on:
      - db
  db:
    image: mysql:8
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=forgejo
      - MYSQL_USER=forgejo
      - MYSQL_PASSWORD=forgejo
      - MYSQL_DATABASE=forgejo
    networks:
      - forgejo
    volumes:
      - ./mysql:/var/lib/mysql

Remplacer les identifiants et chemins par ceux qu'on souhaite.

Lancer la commande docker compose up et suivre les étapes d'installation de Forgejo.

Configurer Forgejo

Une fois Forgejo installé, on peut changer sa configuration depuis le chemin suivant : ./forgejo/gitea/conf/app.ini.

Installer Forgejo Runner (pour exécuter des actions)

Une fois Forgejo installé et configuré, on peut installer Forgejo Runner (voir la documentation).

Dans le dossier forgejo-runner, créer un fichier docker-compose.yml :

services:
  docker-in-docker:
    image: docker:dind
    container_name: 'docker_dind'
    privileged: 'true'
    command: ['dockerd', '-H', 'tcp://0.0.0.0:2375', '--tls=false']
    restart: 'unless-stopped'

  gitea:
    image: 'code.forgejo.org/forgejo/runner:4.0.0'
    links:
      - docker-in-docker
    depends_on:
      docker-in-docker:
        condition: service_started
    container_name: 'runner'
    environment:
      DOCKER_HOST: tcp://docker-in-docker:2375
    # User without root privileges, but with access to `./data`.
    user: 1001:1001
    volumes:
      - ./data:/data
    restart: 'unless-stopped'
    extra_hosts:
      - "host.docker.internal:host-gateway"

    command: '/bin/sh -c "while : ; do sleep 1 ; done ;"'

Par rapport à l'exemple de la documentation officielle, j'ai rajouté les lignes suivantes dans la configuration Docker :

extra_hosts:
  - "host.docker.internal:host-gateway"

Cela permet, dans le cas où on le souhaite, de faire communiquer Forgejo et Forgejo Runner depuis la même machine avec des ports différents (à noter cependant que ce n'est pas conseillé, cf. la documentation).

Ensuite, exécuter la commande docker compose up.

Ensuite, exécuter la commande docker exec -it runner /bin/sh.

Depuis le conteneur, excuter la commande forgejo-runner register.

À partir de là, suivre les instructions. Pour l'URL de l'instance, si Forgejo et Forgejo Runner sont sur la même machine, renseigner http://host.docker.internal:3000/. Pour le jeton (token), on le retrouve depuis l'interface d'administration de Forgejo, dans « Actions » puis dans « Exécuteurs » puis en cliquant sur « Créer un nouvel exécuteur ».