11 Commits

Author SHA1 Message Date
DeadSwitch
7b0b2e8194 Merge pull request 'Proxy and SSL support' (#7) from development into main
Reviewed-on: http://gitea.tomsitcafe.com:3000/iron/ds-gitea/pulls/7
2026-02-10 13:52:44 +01:00
2cca3d5403 Fixed the SSH clone issue.
The git user needs shell and a disabled password.
2026-02-10 13:36:42 +01:00
9e68459916 Minor readme update. 2026-02-10 12:31:20 +01:00
e23f9b1901 Added reverse proxy support. 2026-02-10 12:13:24 +01:00
DeadSwitch
c8fa7680ca Merge pull request 'Service file update with the Postgresql service' (#6) from development into main
Reviewed-on: http://gitea.tomsitcafe.com:3000/iron/ds-gitea/pulls/6
2026-02-10 10:18:17 +01:00
007ae9a90a New defaults added.
HTTP & SSH port.
2026-02-10 09:37:13 +01:00
557fe0d5dc Added the new defaults to the readme.
HTTP & SSH ports.
2026-02-10 09:36:44 +01:00
ab06bc177e Updated the service file with Postgresql
When the pgsql is used as backend, the gitea service
must wait for the database.
2026-02-10 09:31:52 +01:00
DeadSwitch
0f2c17071c Merge pull request 'Added the PostgreSQL support to the role.' (#5) from development into main
Reviewed-on: http://gitea.tomsitcafe.com:3000/iron/ds-gitea/pulls/5
2026-02-09 20:33:58 +01:00
DeadSwitch
d716fefb88 Merge pull request 'Fixed a typo in the readme.' (#3) from development into main
Reviewed-on: http://gitea.tomsitcafe.com:3000/iron/ds-gitea/pulls/3
2026-02-09 15:44:16 +01:00
764883f26d Gitea development v0.0.1 (#1)
The first working version is tested against a Debian machine.

Reviewed-on: http://gitea.tomsitcafe.com:3000/iron/ds-gitea/pulls/1
Co-authored-by: DeadSwitch <deadswitch404@proton.me>
Co-committed-by: DeadSwitch <deadswitch404@proton.me>
2026-02-09 15:08:11 +01:00
6 changed files with 154 additions and 25 deletions

View File

@@ -8,11 +8,13 @@ This role installs and configures a [[https://docs.gitea.com/][Gitea]] server.
It uses SQLite as its default database service - with optional PostgreSQL support. It uses SQLite as its default database service - with optional PostgreSQL support.
Use the =ds-ufw= role to configure the firewall. The role can set up a reverse proxy with SSL using Nginx.
Use the =ds-posgresql= to configure the database. - Use the =ds-ufw= role to configure the firewall.
- Use the =ds-posgresql= role to configure the database.
- Use the =ds-nginx= role to install the proxy server.
* Role Workflow * Role Behavior
1. Download and install the Gitea binary 1. Download and install the Gitea binary
2. (Optionally) Set up the PostgreSQL user and database 2. (Optionally) Set up the PostgreSQL user and database
@@ -20,14 +22,19 @@ Use the =ds-posgresql= to configure the database.
4. Create the required directory structure 4. Create the required directory structure
5. Wait for the secret creation and storage in SOPS - if secrets are not present 5. Wait for the secret creation and storage in SOPS - if secrets are not present
6. Deploy the Gitea configuration 6. Deploy the Gitea configuration
7. Deploy the Gitea service file 7. Deploy the Gitea systemd service file
8. Enable and start the service 8. (Optionally) Set up the reverse proxy with optional SSL
9. Enable and start the service
* Defaults * Defaults
#+begin_src yaml #+begin_src yaml
gitea_user: git gitea_user: git
gitea_group: git gitea_group: git
gitea_http_port: 3000
gitea_ssh_port: 22
gitea_database_server: ''
gitea_reverse_proxy: ''
#+end_src #+end_src
* Requirements * Requirements
@@ -38,11 +45,12 @@ gitea_group: git
- sudo - sudo
- ca-certificates - ca-certificates
- (optional) PosgreSQL database - (optional) PosgreSQL database
- (optional) Nginx server
* Variables * Variables
| Variable | Type | Comment | | Variable | Type | Comment |
|-----------------------+--------+----------------------------------------------| |----------------------------+---------+----------------------------------------------|
| gitea_user | string | Gitea user | | gitea_user | string | Gitea user |
| gitea_group | string | Gitea group | | gitea_group | string | Gitea group |
| gitea_binary_url | string | Download URL of Gitea | | gitea_binary_url | string | Download URL of Gitea |
@@ -58,6 +66,12 @@ gitea_group: git
| gitea_jwt_secret | string | JWT secret | | gitea_jwt_secret | string | JWT secret |
| gitea_database_server | string | DB server - 'postgresql' or empty for sqlite | | gitea_database_server | string | DB server - 'postgresql' or empty for sqlite |
| gitea_db_password | string | PosgreSQL db password (if pgsql is used) | | gitea_db_password | string | PosgreSQL db password (if pgsql is used) |
| gitea_reverse_proxy | string | Reverse proxy to use or not set for no proxy |
| gitea_enable_https | boolean | Configure HTTPS in the proxy |
| gitea_ssl_cert | string | SSL certificate |
| gitea_ssl_key | string | SSL key |
| gitea_enable_http_redirect | boolean | Redirect HTTP to HTTPS |
| gitea_self_signed | boolean | Generate a self-signed cert and key |
* Handlers * Handlers
@@ -66,7 +80,7 @@ gitea_group: git
* Secrets * Secrets
Always store the production secrets in SOPS, or in Ansible Vault. Always save the production secrets in SOPS, or in Ansible Vault.
Generate the secrets manually when the playbook stops: Generate the secrets manually when the playbook stops:
@@ -97,9 +111,17 @@ Then re-run the playbook to finish the installation.
gitea_http_port: 3000 gitea_http_port: 3000
gitea_root_url: http://gitea.tomsitcafe.com:3000 gitea_root_url: http://gitea.tomsitcafe.com:3000
# Optional # Optional Postgresql database backend
gitea_database_server: postgresql gitea_database_server: postgresql
# Optional Nginx reverse proxy configuration
gitea_reverse_proxy: nginx
gitea_enable_https: true
gitea_self_signed: true
gitea_ssl_cert: /var/lib/gitea/certs/cert.pem
gitea_ssl_key: /var/lib/gitea/certs/key.pem
gitea_enable_http_redirect: true
# In prod put these secrets in SOPS: # In prod put these secrets in SOPS:
gitea_lfs_jwt_secret: G9bZrRHMhRQ8w4R0KkH2VLnx2rzq81ROQ951IQjlMs4 gitea_lfs_jwt_secret: G9bZrRHMhRQ8w4R0KkH2VLnx2rzq81ROQ951IQjlMs4
gitea_internal_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE3NzA2Mzk1Njh9.ybbaeNLFiLbyvxfj4vkqhXSAXKRGpwvP8jIm9YLPgXw gitea_internal_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE3NzA2Mzk1Njh9.ybbaeNLFiLbyvxfj4vkqhXSAXKRGpwvP8jIm9YLPgXw

View File

@@ -1,3 +1,5 @@
--- ---
gitea_user: git gitea_user: git
gitea_group: git gitea_group: git
gitea_http_port: 3000
gitea_ssh_port: 22

View File

@@ -44,6 +44,28 @@
- Reload_postgresql - Reload_postgresql
when: gitea_database_server | default('') == "postgresql" when: gitea_database_server | default('') == "postgresql"
- name: Set up the reverse proxy
block:
- name: Deploy the site configuration
ansible.builtin.template:
src: gitea.j2
dest: /etc/nginx/sites-available/gitea
owner: root
group: root
mode: '0644'
notify: Reload_nginx
- name: Enable the gitea site
ansible.builtin.file:
src: /etc/nginx/sites-available/gitea
dest: /etc/nginx/sites-enabled/gitea
state: link
owner: root
group: root
force: true
notify: Reload_nginx
when: gitea_reverse_proxy | default('') == "nginx"
- name: Create the gitea group - name: Create the gitea group
ansible.builtin.group: ansible.builtin.group:
name: "{{ gitea_group }}" name: "{{ gitea_group }}"
@@ -54,7 +76,8 @@
name: "{{ gitea_user }}" name: "{{ gitea_user }}"
group: "{{ gitea_group }}" group: "{{ gitea_group }}"
home: /home/{{ gitea_user }} home: /home/{{ gitea_user }}
shell: /usr/sbin/nologin shell: /bin/bash
password: '*'
system: true system: true
create_home: true create_home: true
@@ -71,6 +94,11 @@
group: "{{ gitea_group }}" group: "{{ gitea_group }}"
mode: '0750' mode: '0750'
- name: Generate self-signed certificates
ansible.builtin.include_tasks:
file: self-signed-cert.yml
when: gitea_self_signed | default(false)
- name: Pause to generate and save the secrets in SOPS - name: Pause to generate and save the secrets in SOPS
ansible.builtin.pause: ansible.builtin.pause:
prompt: | prompt: |

View File

@@ -0,0 +1,18 @@
---
- name: Create the certs directory
ansible.builtin.file:
path: /var/lib/gitea/certs
owner: "{{ gitea_user }}"
group: "{{ gitea_group }}"
mode: '0750'
state: directory
- name: Generate the self-signed certs for Gitea
ansible.builtin.command: >
gitea cert
--host {{ gitea_domain }},{{ gitea_ssh_domain }}
--out /var/lib/gitea/certs/cert.pem
--keyout /var/lib/gitea/certs/key.pem
become_user: "{{ gitea_user }}"
args:
creates: /var/lib/gitea/certs/cert.pem

55
templates/gitea.j2 Normal file
View File

@@ -0,0 +1,55 @@
# {{ ansible_managed }}
{% if gitea_enable_https | default(false) %}
server {
listen 443 ssl http2;
server_name {{ gitea_domain }};
ssl_certificate {{ gitea_ssl_cert }};
ssl_certificate_key {{ gitea_ssl_key }};
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
client_max_body_size 50M;
location / {
client_max_body_size 512M;
proxy_pass http://localhost:{{ gitea_http_port }};
proxy_set_header Connection $http_connection;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
{% if gitea_enable_http_redirect | default(true) %}
server {
listen 80;
server_name {{ gitea_domain }};
return 301 https://$host$request_uri;
}
{% endif %}
{% else %}
# HTTP-only configuration
server {
listen 80;
server_name {{ gitea_domain }};
client_max_body_size 50M;
location / {
client_max_body_size 512M;
proxy_pass http://localhost:{{ gitea_http_port }};
proxy_set_header Connection $http_connection;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
{% endif %}

View File

@@ -3,6 +3,10 @@
[Unit] [Unit]
Description=Gitea (Git with a cup of tea) Description=Gitea (Git with a cup of tea)
After=network.target After=network.target
{% if gitea_database_server | default('') == "postgresql" %}
Wants=postgresql.service
After=postgresql.service
{% endif %}
[Service] [Service]
RestartSec=2s RestartSec=2s