/
/
/
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
77- name: Wait for Forgejo to be healthy
78 uri:
79 url: "http://localhost:{{ forgejo_http_port }}/api/v1/version"
80 method: GET
81 status_code: 200
82 register: forgejo_health
83 until: forgejo_health.status == 200
84 retries: 30
85 delay: 10
86 when: forgejo_start_result is changed
87
88- name: Create SSH key directory for git operations
89 file:
90 path: "{{ forgejo_config_dir }}/ssh"
91 state: directory
92 owner: "{{ runner_user }}"
93 group: "{{ runner_group }}"
94 mode: '0700'
95
96- name: Generate SSH host keys for Forgejo
97 command: ssh-keygen -t {{ item.type }} -f {{ forgejo_config_dir }}/ssh/ssh_host_{{ item.type }}_key -N ""
98 args:
99 creates: "{{ forgejo_config_dir }}/ssh/ssh_host_{{ item.type }}_key"
100 loop:
101 - { type: "rsa" }
102 - { type: "ecdsa" }
103 - { type: "ed25519" }
104
105- name: Set proper permissions on SSH keys
106 file:
107 path: "{{ forgejo_config_dir }}/ssh/ssh_host_{{ item.type }}_key"
108 owner: "{{ runner_user }}"
109 group: "{{ runner_group }}"
110 mode: '0664'
111 loop:
112 - { type: "rsa" }
113 - { type: "ecdsa" }
114 - { type: "ed25519" }
115
116
117- name: Create Forgejo Git hooks directory
118 file:
119 path: "{{ forgejo_config_dir }}/git/hooks"
120 state: directory
121 owner: "{{ runner_user }}"
122 group: "{{ runner_group }}"
123 mode: '0755'
124
125- name: Display Forgejo deployment summary
126 debug:
127 msg: |
128 Forgejo Git Server Deployment:
129 - Status: {{ 'Started' if forgejo_start_result is changed else 'Already running' }}
130 - Web UI: http://{{ ansible_default_ipv4.address }}:{{ forgejo_http_port }}
131 - SSH Clone: ssh://git@{{ ansible_default_ipv4.address }}:{{ forgejo_ssh_port }}/user/repo.git
132 - HTTP Clone: http://{{ ansible_default_ipv4.address }}:{{ forgejo_http_port }}/user/repo.git
133 - API Endpoint: http://{{ ansible_default_ipv4.address }}:{{ forgejo_http_port }}/api/v1
134 - Configuration: {{ forgejo_config_dir }}/config/app.ini
135 - Data Storage: {{ forgejo_data_dir }}
136 - Repository Storage: {{ forgejo_data_dir }}/git/repositories
137 - Database: {{ forgejo_db_type | upper }}
138 - SSH Domain: {{ forgejo_ssh_domain }}
139 {% if forgejo_runner_enabled %}
140 - CI/CD Runner: {{ 'Enabled' if forgejo_runner_enabled else 'Disabled' }}
141 - Runner Token: {{ forgejo_runner_token }}
142 - Runner Name: {{ forgejo_runner_name }}
143 - Runner Data: {{ forgejo_config_dir }}/forgejo-runner-data
144 {% endif %}
145
146 Management Commands:
147 - forgejo-logs.sh - View service logs
148 - forgejo-restart.sh - Restart service
149 - forgejo-status.sh - Check service status
150 - forgejo-backup.sh - Backup repositories and database
151 - forgejo-cli.sh - Administration CLI
152
153 Initial Setup:
154 1. Visit {{ forgejo_domain }}:{{ forgejo_http_port }}
155 2. Complete the installation wizard
156 3. Create admin account
157 4. Configure organization and repository settings
158 {% if forgejo_runner_enabled %}
159 5. Runner will auto-register with the Forgejo instance
160 {% endif %}
161