Gitea Podman-Container unbeaufsichtigt via Ansible bereitstellen

Gitea Installationsassistent

Gitea ist ein beliebtes, schlankes Git-Frontend, welches sich - dank Docker-Image - auch schnell bereitstellen lässt. Nachdem der Container gestartet wurde, erfolgt die initialie Konfiguration (Netzwerkoptionen, Berechtigungen, Datenbank) jedoch standardmäßig per Web-Oberfläche. Das ist unschön, wenn man eine unbeaufsichtigte und automatisierte Installation wünscht - beispielsweise, weil man viele Gitea-Instanzen einrichtet.

Glücklicherweise können dem Gitea-Container verschiedene Umgebungsvariablen zugewiesen werden, um die meisten der Einstellungen zu definieren - eine vollständige Liste mit Variablen-Fragmenten findet sich in der Dokumentation.

Im Zusammenhang mit Podman ist noch zu beachten, dass das Benutzerkonto, welches den Container ausführt, nach dem Logout weiterhin Kommandos ausführen dürfen muss (linger). Diese Einstellung muss erst noch vorgenommen werden - andernfalls wird der Container nach einigen Sekunden gestoppt. Wenn Docker zum Einsatz kommt, entfällt dieser Schritt, da Docker einen Hintergrunddienst nutzt. Auch ist es notwendig, falls noch nicht geschehen, die containers.podman Ansible-Collection zu installieren:

1$ ansible-galaxy collection install containers.podman

Die Anlage des ersten Benutzers erfordert das Ausführen eines Kommandos als git-Benutzer im Gitea-Container - mittels angepasster changed_when- und failed_when-Bedingungen lässt sich dieser Schritt auch idempotent umsetzen.

Die gesamte Installation lässt sich dann wie folgt umsetzen:

 1---
 2- name: Deploy Gitea
 3  hosts: podman-hosts
 4  become: true
 5  vars:
 6    gitea_user: svc-gitea
 7    gitea_admin: fmulder
 8    gitea_password: trustno1
 9
10  tasks:
11    - name: Enable linger
12      command: loginctl enable-linger "{{ gitea_user }}"
13      changed_when: false
14
15    - name: Create Gitea data directory
16      file:
17        path: "/home/{{ gitea_user }}/gitea"
18        state: directory
19        owner: "{{ gitea_user }}"
20        group: "{{ gitea_user }}"
21        mode: '0755'
22      become: false
23
24    - name: Start Gitea
25      containers.podman.podman_container:
26        name: gitea
27        image: docker.io/gitea/gitea:1.16
28        volume:
29          - "/home/{{ gitea_user }}/gitea:/data"
30        ports:
31          - "3000:3000"
32          - "10022:22"
33        env:
34          APP_NAME: "Pinkepank Gitea"
35          GITEA__DEFAULT__RUN_MODE: prod
36          GITEA__server__DOMAIN: "{{ ansible_fqdn }}"
37          GITEA__server__SSH_DOMAIN: "{{ ansible_fqdn }}"
38          GITEA__server__ROOT_URL: "http://{{ ansible_fqdn }}:3000"
39          GITEA__server__OFFLINE_MODE: true
40          GITEA__database__PATH: /data/gitea/gitea.db
41          GITEA__database__DB_TYPE: sqlite3
42          GITEA__picture__DISABLE_GRAVATAR: true
43          GITEA__service__DISABLE_REGISTRATION: true
44          GITEA__service__REQUIRE_SIGNIN_VIEW: true
45          GITEA__security__INSTALL_LOCK: true
46      become: false
47
48    - name: Create Gitea admin user
49      command: "podman exec -u git gitea /usr/local/bin/gitea admin user create --admin --username {{ gitea_admin }} --password {{ gitea_password }} --email root@localhost"
50      register: create_user
51      changed_when:
52        - create_user.rc != 1
53        - '"already exists" not in create_user.stdout'
54      failed_when:
55        - create_user.rc != 0
56        - '"already exists" not in create_user.stdout'
57      become: false
Note

Die Container-Version 1.16 war zum Zeitpunkt der Veröffentlichung aktuell - bitte überprüfen, ob es eine neuere Version gibt!

Übersetzungen: