/
/
/
Ansible role that deployes services on my runner machine
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 - "{{ forgejo_config_dir }}/forgejo-runner-data"
15 - "{{ forgejo_config_dir }}/forgejo-ansible-runner-data"
16
17- name: Create Forgejo NFS directories
18 file:
19 path: "{{ item }}"
20 state: directory
21 owner: "{{ runner_user }}"
22 group: "users"
23 mode: '2775' # setgid bit for inheritance, group writable (umask 002)
24 loop:
25 - "{{ forgejo_data_dir }}"
26 - "{{ forgejo_data_dir }}/git"
27 - "{{ forgejo_data_dir }}/lfs"
28
29- name: Generate Forgejo environment file
30 template:
31 src: forgejo.env.j2
32 dest: "{{ forgejo_config_dir }}/.env"
33 owner: "{{ runner_user }}"
34 group: "users"
35 mode: '0664'
36 notify: restart forgejo
37
38- name: Create Forgejo runner config
39 template:
40 src: forgejo-runner-config.yaml.j2
41 dest: "{{ forgejo_config_dir }}/forgejo-runner-data/config.yaml"
42 owner: "{{ runner_user }}"
43 group: "{{ runner_group }}"
44 mode: '0664'
45
46- name: Create Forgejo Dockerfile
47 template:
48 src: forgejo-Dockerfile.j2
49 dest: "{{ forgejo_config_dir }}/Dockerfile"
50 owner: "{{ runner_user }}"
51 group: "{{ runner_group }}"
52 mode: '0664'
53
54- name: Create Forgejo Ansible Runner Dockerfile
55 template:
56 src: forgejo-Dockerfile.ansible.j2
57 dest: "{{ forgejo_config_dir }}/Dockerfile.ansible"
58 owner: "{{ runner_user }}"
59 group: "{{ runner_group }}"
60 mode: '0664'
61 when: forgejo_ansible_runner_enabled | default(false)
62
63- name: Create Forgejo Ansible Runner config
64 template:
65 src: forgejo-runner-config.yaml.j2
66 dest: "{{ forgejo_config_dir }}/forgejo-ansible-runner-data/config.yaml"
67 owner: "{{ runner_user }}"
68 group: "{{ runner_group }}"
69 mode: '0664'
70 when: forgejo_ansible_runner_enabled | default(false)
71
72- name: Create Forgejo Docker Compose file
73 template:
74 src: forgejo-compose.yml.j2
75 dest: "{{ forgejo_config_dir }}/docker-compose.yml"
76 owner: "{{ runner_user }}"
77 group: "{{ runner_group }}"
78 mode: '0664'
79 notify: restart forgejo
80
81- name: Check if Forgejo is already running
82 community.docker.docker_compose_v2:
83 project_src: "{{ forgejo_config_dir }}"
84 state: present
85 restarted: false
86 register: forgejo_running
87 changed_when: false
88 failed_when: false
89
90- name: Start Forgejo service
91 community.docker.docker_compose_v2:
92 project_src: "{{ forgejo_config_dir }}"
93 state: present
94 register: forgejo_start_result
95 check_mode: no
96
97- name: Wait for Forgejo to be healthy
98 uri:
99 url: "http://localhost:{{ forgejo_http_port }}/api/v1/version"
100 method: GET
101 status_code: 200
102 register: forgejo_health
103 until: forgejo_health.status == 200
104 retries: 30
105 delay: 10
106 when: forgejo_start_result is changed
107 check_mode: no
108
109- name: Create SSH key directory for git operations
110 file:
111 path: "{{ forgejo_config_dir }}/ssh"
112 state: directory
113 owner: "{{ runner_user }}"
114 group: "{{ runner_group }}"
115 mode: '0700'
116
117- name: Generate SSH host keys for Forgejo
118 command: ssh-keygen -t {{ item.type }} -f {{ forgejo_config_dir }}/ssh/ssh_host_{{ item.type }}_key -N ""
119 args:
120 creates: "{{ forgejo_config_dir }}/ssh/ssh_host_{{ item.type }}_key"
121 loop:
122 - { type: "rsa" }
123 - { type: "ecdsa" }
124 - { type: "ed25519" }
125 check_mode: no
126
127- name: Set proper permissions on SSH keys
128 file:
129 path: "{{ forgejo_config_dir }}/ssh/ssh_host_{{ item.type }}_key"
130 owner: "{{ runner_user }}"
131 group: "{{ runner_group }}"
132 mode: '0664'
133 loop:
134 - { type: "rsa" }
135 - { type: "ecdsa" }
136 - { type: "ed25519" }
137
138
139- name: Create Forgejo Git hooks directory
140 file:
141 path: "{{ forgejo_config_dir }}/git/hooks"
142 state: directory
143 owner: "{{ runner_user }}"
144 group: "{{ runner_group }}"
145 mode: '0755'
146
147- name: Display Forgejo deployment summary
148 debug:
149 msg: |
150 Forgejo Git Server Deployment:
151 - Status: {{ 'Started' if forgejo_start_result is changed else 'Already running' }}
152 - Web UI: http://{{ ansible_default_ipv4.address }}:{{ forgejo_http_port }}
153 - SSH Clone: ssh://git@{{ ansible_default_ipv4.address }}:{{ forgejo_ssh_port }}/user/repo.git
154 - HTTP Clone: http://{{ ansible_default_ipv4.address }}:{{ forgejo_http_port }}/user/repo.git
155 - API Endpoint: http://{{ ansible_default_ipv4.address }}:{{ forgejo_http_port }}/api/v1
156 - Configuration: {{ forgejo_config_dir }}/config/app.ini
157 - Data Storage: {{ forgejo_data_dir }}
158 - Repository Storage: {{ forgejo_data_dir }}/git/repositories
159 - Database: {{ forgejo_db_type | upper }}
160 - SSH Domain: {{ forgejo_ssh_domain }}
161 {% if forgejo_runner_enabled %}
162 - CI/CD Runner: {{ 'Enabled' if forgejo_runner_enabled else 'Disabled' }}
163 - Runner Token: {{ forgejo_runner_token }}
164 - Runner Name: {{ forgejo_runner_name }}
165 - Runner Data: {{ forgejo_config_dir }}/forgejo-runner-data
166 {% endif %}
167
168 Management Commands:
169 - forgejo-logs.sh - View service logs
170 - forgejo-restart.sh - Restart service
171 - forgejo-status.sh - Check service status
172 - forgejo-backup.sh - Backup repositories and database
173 - forgejo-cli.sh - Administration CLI
174
175 Initial Setup:
176 1. Visit {{ forgejo_domain }}:{{ forgejo_http_port }}
177 2. Complete the installation wizard
178 3. Create admin account
179 4. Configure organization and repository settings
180 {% if forgejo_runner_enabled %}
181 5. Runner will auto-register with the Forgejo instance
182 {% endif %}
183