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