198 строки
		
	
	
	
		
			5 КиБ
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			198 строки
		
	
	
	
		
			5 КиБ
		
	
	
	
		
			YAML
		
	
	
	
	
	
| ---
 | |
| - hosts: git.example.com
 | |
|   user: root
 | |
| 
 | |
|   tasks:
 | |
| 
 | |
|   - include_vars: vars/all.yml
 | |
| 
 | |
|   - name: Install Prerequisites
 | |
|     apt:
 | |
|       name: "{{ item }}"
 | |
|       state: present
 | |
|       update_cache: yes
 | |
|     with_items:
 | |
|       - git
 | |
|       - postgresql
 | |
|       - fail2ban
 | |
|       - python-psycopg2
 | |
|       - python3-psycopg2
 | |
|       - nginx
 | |
|       - certbot
 | |
|       - python-certbot-nginx
 | |
| 
 | |
|   - name: Create Gitea Database
 | |
|     become: yes
 | |
|     become_user: postgres
 | |
|     postgresql_db:
 | |
|       name: "{{ gitea_db }}"
 | |
| 
 | |
|   - name: Prepare a Postgresql User
 | |
|     become: yes
 | |
|     become_user: postgres
 | |
|     postgresql_user:
 | |
|       db: "{{ gitea_db }}"
 | |
|       name: "{{ gitea_db_user }}"
 | |
|       password: "{{ lookup('password', '/tmp/{{ gitea_db_user }}.pass chars=ascii_letters,digits length=32') }}"
 | |
|       priv: "ALL"
 | |
|       encrypted: yes
 | |
|       expires: infinity
 | |
|   
 | |
|   - name: Get Gitea checksum file
 | |
|     local_action:
 | |
|       module: get_url
 | |
|       url: "https://dl.gitea.io/gitea/{{ gitea_version }}/gitea-{{ gitea_version }}-linux-amd64.sha256"
 | |
|       dest: "/tmp"
 | |
| 
 | |
|   - name: Get Gitea
 | |
|     get_url:
 | |
|       url: https://dl.gitea.io/gitea/{{ gitea_version }}/gitea-{{ gitea_version }}-linux-amd64
 | |
|       dest: "/usr/local/bin/gitea"
 | |
|       mode: +x
 | |
|       checksum: "sha256:{{ lookup('file', '/tmp/gitea-{{ gitea_version }}-linux-amd64.sha256').split()[0] }}"
 | |
| 
 | |
|   - name: Create git user
 | |
|     user:
 | |
|       name: git
 | |
|       comment: GIT Version Control
 | |
|       shell: /bin/bash
 | |
|       system: yes
 | |
|       home: /home/git
 | |
| 
 | |
|   - name: Create Ditectory Structure
 | |
|     file:
 | |
|       path: "{{ item.path }}"
 | |
|       owner: "{{ item.owner }}"
 | |
|       group: "{{ item.group }}"
 | |
|       mode: "{{ item.mode }}"
 | |
|       state: directory
 | |
|     with_items:
 | |
|       - { path: /var/lib/gitea/custom, owner: root, group: root, mode: 755}
 | |
|       - { path: /var/lib/gitea/public, owner: root, group: root, mode: 755}
 | |
|       - { path: /var/lib/gitea/data, owner: git, group: git, mode: 750}
 | |
|       - { path: /var/lib/gitea/indexers, owner: git, group: git, mode: 750}
 | |
|       - { path: /var/lib/gitea/log, owner: git, group: git, mode: 750}
 | |
|       - { path: /etc/gitea, owner: root, group: git, mode: 770}
 | |
| 
 | |
|   - name: Create a Gitea service
 | |
|     template:
 | |
|       src: templates/gitea.service.j2
 | |
|       dest: /etc/systemd/system/gitea.service
 | |
| 
 | |
|   - name: Reload systemd
 | |
|     command: systemctl daemon-reload
 | |
| 
 | |
|   - name: Start Gitea
 | |
|     service:
 | |
|       name: gitea
 | |
|       enabled: yes
 | |
|       state: started
 | |
| 
 | |
|   - name: Deploy Nginx HTTP vhost
 | |
|     template:
 | |
|       src: "{{ item.source }}"
 | |
|       dest: "{{ item.destination }}"
 | |
|     with_items:
 | |
|       - { source: "templates/nginx_vhost.j2", destination: "/etc/nginx/sites-available/{{ gitea_fqdn }}" }
 | |
| 
 | |
|   - name: Enable Gitea vhost
 | |
|     file: 
 | |
|       src: "/etc/nginx/sites-available/{{ gitea_fqdn }}"
 | |
|       dest: "/etc/nginx/sites-enabled/{{ gitea_fqdn }}"
 | |
|       state: link
 | |
|     notify:
 | |
|       - Disable Default vhost
 | |
|       - Restart Nginx
 | |
| 
 | |
|   - name: Configure UFW
 | |
|     ufw:
 | |
|       rule: allow
 | |
|       proto: tcp
 | |
|       direction: in
 | |
|       to_port: "{{ item }}"
 | |
|       dest: any
 | |
|       src: any
 | |
|     with_items:
 | |
|       - 80
 | |
|       - 443
 | |
| 
 | |
|   - name: Fetch app.ini
 | |
|     fetch:
 | |
|       src: /etc/gitea/app.ini
 | |
|       dest: /tmp/gitea-app.ini
 | |
|       flat: yes
 | |
| 
 | |
|   - name: Get INTERNAL_TOKEN
 | |
|     set_fact:
 | |
|       gitea_internal_token: "{{ (lookup('file', '/tmp/gitea-app.ini')|regex_search('(INTERNAL_TOKEN.*)')).split()[2] }}"
 | |
| 
 | |
|   - name: Deploy Gitea configuration
 | |
|     template:
 | |
|       src: templates/app.ini.j2
 | |
|       dest: /etc/gitea/app.ini
 | |
|     notify:
 | |
|      - Restart Gitea
 | |
| 
 | |
|   - name: Create the .well-known directory
 | |
|     file:
 | |
|       path: /var/www/html/.well-known
 | |
|       owner: www-data
 | |
|       group: www-data
 | |
|       state: directory
 | |
| 
 | |
|   - name: Generate a Let's encrypt certificate
 | |
|     command: |
 | |
|       certbot \
 | |
|       certonly \
 | |
|       --webroot \
 | |
|       --webroot-path /var/www/html/ \
 | |
|       --installer nginx \
 | |
|       --non-interactive \
 | |
|       --quiet \
 | |
|       --domains {{ gitea_fqdn }} \
 | |
|       --agree-tos \
 | |
|       -m theo@theo-andreou.org
 | |
|     args:
 | |
|       creates: "/etc/letsencrypt/live/{{ gitea_fqdn }}/fullchain.pem"
 | |
| 
 | |
|   - name: Deploy Nginx configuration and certificates
 | |
|     template:
 | |
|       src: "{{ item.source }}"
 | |
|       dest: "{{ item.destination }}"
 | |
|     with_items:
 | |
|       - { source: "templates/nginx_vhost_tls.j2", destination: "/etc/nginx/sites-available/{{ gitea_fqdn }}" }
 | |
|     notify:
 | |
|       - Restart Nginx
 | |
| 
 | |
|   - name: Fail2Ban configuration for Gitea
 | |
|     template:
 | |
|       src: "{{ item.source }}"
 | |
|       dest: "{{ item.destination }}"
 | |
|     with_items:
 | |
|       - { source: "templates/f2b-gitea.conf.j2", destination: "/etc/fail2ban/filter.d/gitea.conf" }
 | |
|       - { source: "templates/f2b-gitea.local.j2", destination: "/etc/fail2ban/jail.d/jail.local" }
 | |
|     notify:
 | |
|       - Restart Fail2Ban
 | |
| 
 | |
|   handlers:
 | |
| 
 | |
|   - name: Disable Default vhost
 | |
|     file:
 | |
|       path: /etc/nginx/sites-enabled/default
 | |
|       state: absent
 | |
| 
 | |
|   - name: Restart Nginx
 | |
|     service:
 | |
|       name: nginx
 | |
|       state: restarted
 | |
| 
 | |
|   - name: Restart Gitea
 | |
|     service:
 | |
|       name: gitea
 | |
|       enabled: yes
 | |
|       state: restarted
 | |
| 
 | |
|   - name: Restart Fail2Ban
 | |
|     service:
 | |
|       name: fail2ban
 | |
|       state: restarted
 |