semaphore-playbooks/debian12-forgejo/playbook.yml

172 lines
4.1 KiB
YAML
Raw Normal View History

2023-08-05 19:11:17 +02:00
---
- name: Update web servers
hosts: all
remote_user: root
2023-08-05 19:46:41 +02:00
vars:
2025-03-12 15:34:40 +00:00
forgejo: 10.0.1
2023-08-06 22:28:13 +02:00
domain: git.keks.cloud
2023-08-05 20:06:35 +02:00
sslmail: admin@keks.cloud
2023-08-05 19:51:01 +02:00
handlers:
- name: Restart forgejo
ansible.builtin.service:
name: "forgejo"
state: restarted
2023-08-05 20:15:52 +02:00
- name: Restart nginx
ansible.builtin.service:
name: "nginx"
state: restarted
2023-08-05 19:11:17 +02:00
tasks:
- name: Install a list of packages
2023-08-05 19:27:30 +02:00
ansible.builtin.apt:
pkg:
- mariadb-server
2023-08-05 19:34:22 +02:00
- python3-pymysql
2023-08-05 20:06:35 +02:00
- nginx
- certbot
- python3-certbot-nginx
2023-08-06 19:49:09 +02:00
- git
2023-08-05 19:27:30 +02:00
2023-08-05 19:11:17 +02:00
- name: Add the user 'git'
ansible.builtin.user:
name: git
comment: Git Username
home: /home/git
shell: /bin/bash
- name: Create /var/lib/forgejo
ansible.builtin.file:
path: /var/lib/forgejo
state: directory
2023-08-05 19:28:50 +02:00
owner: git
2023-08-05 19:11:17 +02:00
group: git
mode: '0750'
- name: Create /etc/forgejo
ansible.builtin.file:
path: /etc/forgejo
state: directory
2023-08-05 19:28:50 +02:00
owner: git
2023-08-05 19:11:17 +02:00
group: git
2023-08-05 19:33:14 +02:00
mode: '0500'
2023-08-05 19:46:41 +02:00
- name: Create /usr/local/bin/
ansible.builtin.file:
path: /usr/local/bin/
state: directory
owner: git
group: git
mode: '0500'
2023-08-07 00:04:32 +02:00
- name: Check if forgejo version is already downloaded
stat:
path: "/usr/local/bin/forgejo-{{forgejo}}-linux-amd64"
register: forgejo_result
2023-08-05 19:53:24 +02:00
- name: Download Forgejo
2023-08-05 19:46:41 +02:00
get_url:
url: "https://codeberg.org/forgejo/forgejo/releases/download/v{{ forgejo }}/forgejo-{{ forgejo }}-linux-amd64"
dest: "/usr/local/bin/forgejo-{{forgejo}}-linux-amd64"
mode: '0755'
2023-08-07 00:04:32 +02:00
when: not forgejo_result.stat.exists
2023-08-05 19:46:41 +02:00
- name: Create a symbolic link
ansible.builtin.file:
src: "/usr/local/bin/forgejo-{{forgejo}}-linux-amd64"
2023-08-05 19:53:24 +02:00
dest: "/usr/local/bin/forgejo"
2023-08-05 19:46:41 +02:00
state: link
2023-08-05 19:47:48 +02:00
notify:
- Restart forgejo
2023-08-05 19:46:41 +02:00
2023-08-05 20:06:35 +02:00
#NGINX + Certbot
- name: NGINX Check that the forgejo.conf exists
stat:
path: /etc/nginx/sites-enabled/forgejo.conf
register: stat_result
- name: NGINX Template forgejo.service
ansible.builtin.template:
src: forgejo.conf
dest: /etc/nginx/sites-enabled/forgejo.conf
when: not stat_result.stat.exists
2023-08-05 20:15:52 +02:00
notify:
- Restart nginx
2023-08-05 20:16:27 +02:00
- name: Allow all access to tcp port 80
2023-08-05 20:15:52 +02:00
community.general.ufw:
rule: allow
port: '80'
proto: tcp
- name: Allow all access to tcp port 443
community.general.ufw:
rule: allow
port: '443'
proto: tcp
2023-08-05 20:06:35 +02:00
- name: NGINX Check that the forgejo.conf exists
stat:
path: "/etc/letsencrypt/live/{{ domain }}/fullchain.pem"
register: ssl_file_result
- name: Return motd to registered var
2023-08-06 22:28:13 +02:00
ansible.builtin.command: certbot -n --nginx --agree-tos -m {{ sslmail }} -d {{ domain }}
2023-08-05 20:06:35 +02:00
when: not ssl_file_result.stat.exists
2023-08-05 20:20:04 +02:00
notify:
- Restart nginx
2023-08-05 20:06:35 +02:00
2023-08-05 19:33:14 +02:00
#Database
- name: Create a new database with name 'forgejo'
community.mysql.mysql_db:
name: forgejo
state: present
login_unix_socket: /run/mysqld/mysqld.sock
- name: Removes anonymous user account for localhost
community.mysql.mysql_user:
name: ''
host: localhost
state: absent
login_unix_socket: /run/mysqld/mysqld.sock
- name: Removes all anonymous user accounts
community.mysql.mysql_user:
name: ''
host_all: true
state: absent
2023-08-05 19:35:21 +02:00
login_unix_socket: /run/mysqld/mysqld.sock
2023-08-05 19:33:14 +02:00
- name: Create database user forgejo
community.mysql.mysql_user:
name: forgejo
2023-08-06 19:49:09 +02:00
password: "{{ mariadbpassword }}"
2023-08-05 19:33:14 +02:00
priv: 'forgejo.*:ALL'
2023-08-05 19:35:21 +02:00
state: present
login_unix_socket: /run/mysqld/mysqld.sock
2023-08-05 19:46:41 +02:00
- name: Template forgejo.service
ansible.builtin.template:
src: forgejo.service
dest: /etc/systemd/system/forgejo.service
2023-08-06 20:23:51 +02:00
2023-08-06 22:11:57 +02:00
- name: Template forgejo.service
2023-08-06 20:23:51 +02:00
ansible.builtin.template:
src: app.ini
dest: /etc/forgejo/app.ini
notify:
2023-08-07 01:03:59 +02:00
- Restart forgejo
#Backup
- name: backup script
ansible.builtin.template:
src: backup.sh
dest: /usr/local/bin/backup.sh
mode: '0770'
- name: Backup
ansible.builtin.cron:
name: "backup"
minute: "0"
hour: "3"
2023-08-21 21:23:20 +02:00
job: "/usr/local/bin/backup.sh > /dev/null"