semaphore-playbooks/debian12-forgejo/playbook.yml

171 lines
4.1 KiB
YAML
Raw Normal View History

2023-08-05 17:11:17 +00:00
---
- name: Update web servers
hosts: all
remote_user: root
2023-08-05 17:46:41 +00:00
vars:
forgejo: 1.20.2-0
2023-08-06 20:28:13 +00:00
domain: git.keks.cloud
2023-08-05 18:06:35 +00:00
sslmail: admin@keks.cloud
2023-08-05 17:51:01 +00:00
handlers:
- name: Restart forgejo
ansible.builtin.service:
name: "forgejo"
state: restarted
2023-08-05 18:15:52 +00:00
- name: Restart nginx
ansible.builtin.service:
name: "nginx"
state: restarted
2023-08-05 17:11:17 +00:00
tasks:
- name: Install a list of packages
2023-08-05 17:27:30 +00:00
ansible.builtin.apt:
pkg:
- mariadb-server
2023-08-05 17:34:22 +00:00
- python3-pymysql
2023-08-05 18:06:35 +00:00
- nginx
- certbot
- python3-certbot-nginx
2023-08-06 17:49:09 +00:00
- git
2023-08-05 17:27:30 +00:00
2023-08-05 17:11:17 +00: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 17:28:50 +00:00
owner: git
2023-08-05 17:11:17 +00:00
group: git
mode: '0750'
- name: Create /etc/forgejo
ansible.builtin.file:
path: /etc/forgejo
state: directory
2023-08-05 17:28:50 +00:00
owner: git
2023-08-05 17:11:17 +00:00
group: git
2023-08-05 17:33:14 +00:00
mode: '0500'
2023-08-05 17:46:41 +00:00
- name: Create /usr/local/bin/
ansible.builtin.file:
path: /usr/local/bin/
state: directory
owner: git
group: git
mode: '0500'
2023-08-06 22:04:32 +00:00
- name: Check if forgejo version is already downloaded
stat:
path: "/usr/local/bin/forgejo-{{forgejo}}-linux-amd64"
register: forgejo_result
2023-08-05 17:53:24 +00:00
- name: Download Forgejo
2023-08-05 17:46:41 +00: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-06 22:04:32 +00:00
when: not forgejo_result.stat.exists
2023-08-05 17:46:41 +00:00
- name: Create a symbolic link
ansible.builtin.file:
src: "/usr/local/bin/forgejo-{{forgejo}}-linux-amd64"
2023-08-05 17:53:24 +00:00
dest: "/usr/local/bin/forgejo"
2023-08-05 17:46:41 +00:00
state: link
2023-08-05 17:47:48 +00:00
notify:
- Restart forgejo
2023-08-05 17:46:41 +00:00
2023-08-05 18:06:35 +00: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 18:15:52 +00:00
notify:
- Restart nginx
2023-08-05 18:16:27 +00:00
- name: Allow all access to tcp port 80
2023-08-05 18:15:52 +00: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 18:06:35 +00: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 20:28:13 +00:00
ansible.builtin.command: certbot -n --nginx --agree-tos -m {{ sslmail }} -d {{ domain }}
2023-08-05 18:06:35 +00:00
when: not ssl_file_result.stat.exists
2023-08-05 18:20:04 +00:00
notify:
- Restart nginx
2023-08-05 18:06:35 +00:00
2023-08-05 17:33:14 +00: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 17:35:21 +00:00
login_unix_socket: /run/mysqld/mysqld.sock
2023-08-05 17:33:14 +00:00
- name: Create database user forgejo
community.mysql.mysql_user:
name: forgejo
2023-08-06 17:49:09 +00:00
password: "{{ mariadbpassword }}"
2023-08-05 17:33:14 +00:00
priv: 'forgejo.*:ALL'
2023-08-05 17:35:21 +00:00
state: present
login_unix_socket: /run/mysqld/mysqld.sock
2023-08-05 17:46:41 +00:00
- name: Template forgejo.service
ansible.builtin.template:
src: forgejo.service
dest: /etc/systemd/system/forgejo.service
2023-08-06 18:23:51 +00:00
2023-08-06 20:11:57 +00:00
- name: Template forgejo.service
2023-08-06 18:23:51 +00:00
ansible.builtin.template:
src: app.ini
dest: /etc/forgejo/app.ini
notify:
2023-08-06 23:03:59 +00: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"
job: "/usr/local/bin/backup.sh > /dev/null"