/
/
/
1---
2# Runner Services - Forgejo Git Server
3
4- name: Create Forgejo configuration directories
5 file:
6 path: "{{ item }}"
7 state: directory
8 owner: "{{ runner_user }}"
9 group: "users"
10 mode: '2775' # setgid bit for inheritance, group writable (umask 002)
11 loop:
12 - "{{ forgejo_config_dir }}"
13 - "{{ forgejo_config_dir }}/data"
14
15- name: Create Forgejo NFS directories
16 file:
17 path: "{{ item }}"
18 state: directory
19 owner: "{{ runner_user }}"
20 group: "users"
21 mode: '2775' # setgid bit for inheritance, group writable (umask 002)
22 loop:
23 - "{{ forgejo_data_dir }}"
24 - "{{ forgejo_data_dir }}/git"
25 - "{{ forgejo_data_dir }}/lfs"
26
27- name: Generate Forgejo environment file
28 template:
29 src: forgejo.env.j2
30 dest: "{{ forgejo_config_dir }}/.env"
31 owner: "{{ runner_user }}"
32 group: "users"
33 mode: '0664'
34 notify: restart forgejo
35
36
37- name: Create Forgejo Docker Compose file
38 template:
39 src: forgejo-compose.yml.j2
40 dest: "{{ forgejo_config_dir }}/docker-compose.yml"
41 owner: "{{ runner_user }}"
42 group: "{{ runner_group }}"
43 mode: '0664'
44 notify: restart forgejo
45
46- name: Check if Forgejo is already running
47 community.docker.docker_compose_v2:
48 project_src: "{{ forgejo_config_dir }}"
49 state: present
50 restarted: false
51 register: forgejo_running
52 changed_when: false
53 failed_when: false
54
55- name: Start Forgejo service
56 community.docker.docker_compose_v2:
57 project_src: "{{ forgejo_config_dir }}"
58 state: present
59 register: forgejo_start_result
60
61- name: Wait for Forgejo to be healthy
62 uri:
63 url: "http://localhost:{{ forgejo_http_port }}/api/v1/version"
64 method: GET
65 status_code: 200
66 register: forgejo_health
67 until: forgejo_health.status == 200
68 retries: 30
69 delay: 10
70 when: forgejo_start_result is changed
71
72- name: Create SSH key directory for git operations
73 file:
74 path: "{{ forgejo_config_dir }}/ssh"
75 state: directory
76 owner: "{{ runner_user }}"
77 group: "{{ runner_group }}"
78 mode: '0700'
79
80- name: Generate SSH host keys for Forgejo
81 command: ssh-keygen -t {{ item.type }} -f {{ forgejo_config_dir }}/ssh/ssh_host_{{ item.type }}_key -N ""
82 args:
83 creates: "{{ forgejo_config_dir }}/ssh/ssh_host_{{ item.type }}_key"
84 loop:
85 - { type: "rsa" }
86 - { type: "ecdsa" }
87 - { type: "ed25519" }
88
89- name: Set proper permissions on SSH keys
90 file:
91 path: "{{ forgejo_config_dir }}/ssh/ssh_host_{{ item.type }}_key"
92 owner: "{{ runner_user }}"
93 group: "{{ runner_group }}"
94 mode: '0664'
95 loop:
96 - { type: "rsa" }
97 - { type: "ecdsa" }
98 - { type: "ed25519" }
99
100
101- name: Create Forgejo Git hooks directory
102 file:
103 path: "{{ forgejo_config_dir }}/git/hooks"
104 state: directory
105 owner: "{{ runner_user }}"
106 group: "{{ runner_group }}"
107 mode: '0755'
108
109- name: Display Forgejo deployment summary
110 debug:
111 msg: |
112 Forgejo Git Server Deployment:
113 - Status: {{ 'Started' if forgejo_start_result is changed else 'Already running' }}
114 - Web UI: http://{{ ansible_default_ipv4.address }}:{{ forgejo_http_port }}
115 - SSH Clone: ssh://git@{{ ansible_default_ipv4.address }}:{{ forgejo_ssh_port }}/user/repo.git
116 - HTTP Clone: http://{{ ansible_default_ipv4.address }}:{{ forgejo_http_port }}/user/repo.git
117 - API Endpoint: http://{{ ansible_default_ipv4.address }}:{{ forgejo_http_port }}/api/v1
118 - Configuration: {{ forgejo_config_dir }}/config/app.ini
119 - Data Storage: {{ forgejo_data_dir }}
120 - Repository Storage: {{ forgejo_data_dir }}/git/repositories
121 - Database: {{ forgejo_db_type | upper }}
122 - SSH Domain: {{ forgejo_ssh_domain }}
123
124 Management Commands:
125 - forgejo-logs.sh - View service logs
126 - forgejo-restart.sh - Restart service
127 - forgejo-status.sh - Check service status
128 - forgejo-backup.sh - Backup repositories and database
129 - forgejo-cli.sh - Administration CLI
130
131 Initial Setup:
132 1. Visit {{ forgejo_domain }}:{{ forgejo_http_port }}
133 2. Complete the installation wizard
134 3. Create admin account
135 4. Configure organization and repository settings
136