Initial infra setup: Terraform, Ansible, backup roles
This commit is contained in:
10
ansible/roles/gitea/defaults/main.yml
Normal file
10
ansible/roles/gitea/defaults/main.yml
Normal file
@@ -0,0 +1,10 @@
|
||||
---
|
||||
gitea_version: "1.22.3"
|
||||
gitea_domain: "git.example.com"
|
||||
gitea_http_port: 3000
|
||||
gitea_ssh_port: 2222
|
||||
gitea_data_dir: /var/lib/gitea
|
||||
|
||||
# Cloudflare Origin Certificate
|
||||
cf_origin_cert: ""
|
||||
cf_origin_key: ""
|
||||
11
ansible/roles/gitea/handlers/main.yml
Normal file
11
ansible/roles/gitea/handlers/main.yml
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
- name: Restart gitea
|
||||
community.docker.docker_compose_v2:
|
||||
project_src: "{{ gitea_data_dir }}"
|
||||
state: present
|
||||
recreate: always
|
||||
|
||||
- name: Reload nginx
|
||||
systemd:
|
||||
name: nginx
|
||||
state: reloaded
|
||||
88
ansible/roles/gitea/tasks/main.yml
Normal file
88
ansible/roles/gitea/tasks/main.yml
Normal file
@@ -0,0 +1,88 @@
|
||||
---
|
||||
- name: Install dependencies
|
||||
apt:
|
||||
name: [nginx, docker.io, docker-compose-v2]
|
||||
state: present
|
||||
update_cache: true
|
||||
|
||||
- name: Enable and start Docker
|
||||
systemd:
|
||||
name: docker
|
||||
enabled: true
|
||||
state: started
|
||||
|
||||
- name: Create gitea data directory
|
||||
file:
|
||||
path: "{{ gitea_data_dir }}"
|
||||
state: directory
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0700"
|
||||
|
||||
- name: Deploy docker-compose file
|
||||
template:
|
||||
src: docker-compose.yml.j2
|
||||
dest: "{{ gitea_data_dir }}/docker-compose.yml"
|
||||
mode: "0600"
|
||||
notify: Restart gitea
|
||||
|
||||
- name: Start gitea
|
||||
community.docker.docker_compose_v2:
|
||||
project_src: "{{ gitea_data_dir }}"
|
||||
state: present
|
||||
|
||||
# ─── Cloudflare Origin Certificate ───────────────────────────────────────────
|
||||
|
||||
- name: Create SSL directory
|
||||
file:
|
||||
path: /etc/nginx/ssl
|
||||
state: directory
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0700"
|
||||
|
||||
- name: Install Cloudflare origin certificate
|
||||
copy:
|
||||
content: "{{ cf_origin_cert }}"
|
||||
dest: /etc/nginx/ssl/cf-origin.pem
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0600"
|
||||
notify: Reload nginx
|
||||
|
||||
- name: Install Cloudflare origin key
|
||||
copy:
|
||||
content: "{{ cf_origin_key }}"
|
||||
dest: /etc/nginx/ssl/cf-origin.key
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0600"
|
||||
notify: Reload nginx
|
||||
|
||||
# ─── nginx ────────────────────────────────────────────────────────────────────
|
||||
|
||||
- name: Deploy nginx config
|
||||
template:
|
||||
src: nginx.conf.j2
|
||||
dest: /etc/nginx/sites-available/gitea
|
||||
mode: "0644"
|
||||
notify: Reload nginx
|
||||
|
||||
- name: Enable nginx site
|
||||
file:
|
||||
src: /etc/nginx/sites-available/gitea
|
||||
dest: /etc/nginx/sites-enabled/gitea
|
||||
state: link
|
||||
notify: Reload nginx
|
||||
|
||||
- name: Remove nginx default site
|
||||
file:
|
||||
path: /etc/nginx/sites-enabled/default
|
||||
state: absent
|
||||
notify: Reload nginx
|
||||
|
||||
- name: Ensure nginx is started
|
||||
systemd:
|
||||
name: nginx
|
||||
enabled: true
|
||||
state: started
|
||||
29
ansible/roles/gitea/templates/docker-compose.yml.j2
Normal file
29
ansible/roles/gitea/templates/docker-compose.yml.j2
Normal file
@@ -0,0 +1,29 @@
|
||||
services:
|
||||
gitea:
|
||||
image: gitea/gitea:{{ gitea_version }}
|
||||
container_name: gitea
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- {{ gitea_data_dir }}/data:/data
|
||||
environment:
|
||||
USER_UID: 1000
|
||||
USER_GID: 1000
|
||||
GITEA__server__DOMAIN: "{{ gitea_domain }}"
|
||||
GITEA__server__ROOT_URL: "https://{{ gitea_domain }}/"
|
||||
GITEA__server__HTTP_PORT: 3000
|
||||
GITEA__server__SSH_DOMAIN: "{{ gitea_domain }}"
|
||||
GITEA__server__SSH_PORT: "{{ gitea_ssh_port }}"
|
||||
GITEA__server__SSH_LISTEN_PORT: 2222
|
||||
GITEA__server__START_SSH_SERVER: "true"
|
||||
GITEA__service__DISABLE_REGISTRATION: "true"
|
||||
{% if gitea_db_url is defined and gitea_db_url %}
|
||||
GITEA__database__DB_TYPE: "postgres"
|
||||
GITEA__database__HOST: "{{ gitea_db_host }}"
|
||||
GITEA__database__NAME: "gitea"
|
||||
GITEA__database__USER: "{{ gitea_db_user }}"
|
||||
GITEA__database__PASSWD: "{{ gitea_db_password }}"
|
||||
GITEA__database__SSL_MODE: "require"
|
||||
{% endif %}
|
||||
ports:
|
||||
- "127.0.0.1:{{ gitea_http_port }}:3000"
|
||||
- "{{ gitea_ssh_port }}:2222"
|
||||
24
ansible/roles/gitea/templates/nginx.conf.j2
Normal file
24
ansible/roles/gitea/templates/nginx.conf.j2
Normal file
@@ -0,0 +1,24 @@
|
||||
server {
|
||||
listen 80;
|
||||
server_name {{ gitea_domain }};
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name {{ gitea_domain }};
|
||||
|
||||
ssl_certificate /etc/nginx/ssl/cf-origin.pem;
|
||||
ssl_certificate_key /etc/nginx/ssl/cf-origin.key;
|
||||
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_ciphers HIGH:!aNULL:!MD5;
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:{{ gitea_http_port }};
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user