initial dump
This commit is contained in:
commit
ca802e834e
23
00_preps.yaml
Normal file
23
00_preps.yaml
Normal file
@ -0,0 +1,23 @@
|
||||
---
|
||||
- name: Preps Playbook
|
||||
hosts: lxd_hosts
|
||||
become: true
|
||||
roles:
|
||||
- fail2ban
|
||||
tasks:
|
||||
- name: PREPS -- install needed packages
|
||||
become: true
|
||||
package:
|
||||
state: present
|
||||
name: '{{ item }}'
|
||||
with_items:
|
||||
- unattended-upgrades
|
||||
- zfsutils-linux # needed for lxd
|
||||
- name: PREPS -- install lxd snap
|
||||
become: true
|
||||
snap:
|
||||
name: lxd
|
||||
- name: Add user 'git'
|
||||
become: true
|
||||
user:
|
||||
name: git
|
11
01_prep_lxd.yaml
Normal file
11
01_prep_lxd.yaml
Normal file
@ -0,0 +1,11 @@
|
||||
---
|
||||
- name: Prep lxd Playbook
|
||||
hosts: lxd_hosts
|
||||
become: true
|
||||
tasks:
|
||||
- name: PREP LXD -- Check if ubuntu minimal repo already added.
|
||||
shell: lxc remote list | grep ubuntu-minimal | wc -l
|
||||
register: ubuntu_minimal_repo
|
||||
- name: PREP LXD -- Add ubuntu minimal repo
|
||||
command: lxc remote add --protocol simplestreams ubuntu-minimal https://cloud-images.ubuntu.com/minimal/releases/
|
||||
when: ubuntu_minimal_repo.stdout != "1"
|
44
02_lxc_containers.yaml
Normal file
44
02_lxc_containers.yaml
Normal file
@ -0,0 +1,44 @@
|
||||
---
|
||||
- name: LXD Playbook
|
||||
hosts: lxd_hosts
|
||||
become: true
|
||||
tasks:
|
||||
- name: Create lxd containers
|
||||
community.general.lxd_container:
|
||||
name: '{{ item }}'
|
||||
state: started
|
||||
source:
|
||||
type: image
|
||||
mode: pull
|
||||
server: https://cloud-images.ubuntu.com/minimal/releases/
|
||||
protocol: simplestreams # if you get a 404, try setting protocol: simplestreams
|
||||
alias: focal
|
||||
profiles: ['default']
|
||||
wait_for_ipv4_addresses: true
|
||||
timeout: 600
|
||||
with_items:
|
||||
- haproxy
|
||||
- gitea
|
||||
- name: Create haproxy port forwards
|
||||
community.general.lxd_container:
|
||||
name: haproxy
|
||||
devices:
|
||||
map_port_80:
|
||||
type: proxy
|
||||
listen: tcp:0.0.0.0:80
|
||||
connect: tcp:127.0.0.1:80
|
||||
proxy_protocol: 'true'
|
||||
map_port_443:
|
||||
type: proxy
|
||||
listen: tcp:0.0.0.0:443
|
||||
connect: tcp:127.0.0.1:443
|
||||
proxy_protocol: 'true'
|
||||
- name: Create gitea port forward(s)
|
||||
community.general.lxd_container:
|
||||
name: gitea
|
||||
devices:
|
||||
map_port_2222:
|
||||
type: proxy
|
||||
listen: tcp:0.0.0.0:2222
|
||||
connect: tcp:127.0.0.1:2222
|
||||
proxy_protocol: 'true'
|
55
03_container_haproxy.yaml
Normal file
55
03_container_haproxy.yaml
Normal file
@ -0,0 +1,55 @@
|
||||
---
|
||||
- name: HAPROXY -- install
|
||||
hosts: haproxy
|
||||
become: true
|
||||
tasks:
|
||||
- name: HAPROXY -- install needed packages
|
||||
become: true
|
||||
package:
|
||||
state: present
|
||||
name: '{{ item }}'
|
||||
with_items:
|
||||
- unattended-upgrades
|
||||
- haproxy
|
||||
- name: HAPROXY -- Generate Diffie-Hellman parameters with the default size (4096 bits)
|
||||
community.crypto.openssl_dhparam:
|
||||
path: /etc/haproxy/dhparam.pem
|
||||
- name: HAPROXY -- create ssl folder
|
||||
become: true
|
||||
file:
|
||||
path: '/etc/haproxy/ssl'
|
||||
state: directory
|
||||
- name: HAPROXY -- new cert script
|
||||
copy:
|
||||
src: 'files/ha_new_cert.sh'
|
||||
dest: '/usr/local/bin/new_certbot'
|
||||
mode: 0755
|
||||
- name: HAPROXY -- cert renew script
|
||||
become: true
|
||||
copy:
|
||||
src: 'files/ha_certbot_renew.sh'
|
||||
dest: '/etc/cron.weekly/certbot_renew.sh'
|
||||
mode: 0755
|
||||
- name: HAPROXY -- config file
|
||||
become: true
|
||||
template:
|
||||
src: files/ha_haproxy.cfg.j2
|
||||
dest: /etc/haproxy/haproxy.cfg
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0644
|
||||
tags:
|
||||
- hot
|
||||
notify:
|
||||
- reload haproxy
|
||||
- name: HAPROXY -- install certbot snap
|
||||
become: true
|
||||
snap:
|
||||
name: certbot
|
||||
classic: yes
|
||||
handlers:
|
||||
- name: reload haproxy
|
||||
service:
|
||||
name: haproxy
|
||||
state: reloaded
|
||||
enabled: yes
|
19
04_container_gitea.yaml
Normal file
19
04_container_gitea.yaml
Normal file
@ -0,0 +1,19 @@
|
||||
---
|
||||
- name: GITEA -- install
|
||||
hosts: gitea
|
||||
roles:
|
||||
- { role: do1jlr.gitea, tags: gitea }
|
||||
vars:
|
||||
gitea_fqdn: 'git.ansol.org'
|
||||
gitea_root_url: 'https://git.ansol.org'
|
||||
gitea_http_listen: '0.0.0.0'
|
||||
gitea_protocol: http
|
||||
gitea_only_allow_external_registration: true
|
||||
gitea_enable_captcha: false
|
||||
gitea_require_signin: false
|
||||
gitea_show_registration_button: false
|
||||
gitea_start_ssh: true
|
||||
gitea_oauth2_extra_config: |
|
||||
ENABLE_AUTO_REGISTRATION = true
|
||||
USERNAME = email
|
||||
ACCOUNT_LINKING = auto
|
30
README.md
Normal file
30
README.md
Normal file
@ -0,0 +1,30 @@
|
||||
# Passos manuais preparatórios
|
||||
|
||||
```bash
|
||||
$ apt install zfsutils-linux snapd
|
||||
$ snap install lxd
|
||||
$ lxd init
|
||||
```
|
||||
```text
|
||||
Would you like to use LXD clustering? (yes/no): NO
|
||||
Do you want to configure a new storage pool? (yes/no): YES
|
||||
Name of the new storage pool: wireguards
|
||||
Name of the storage backend to use (btrfs, dir, lvm, zfs): ZFS
|
||||
Create a new ZFS pool? (yes/no): YES
|
||||
Would you like to use an existing block device? (yes/no): NO
|
||||
Size in GB of the new loop device (1GB minimum): 5 ????
|
||||
Would you like to connect to a MAAS server? (yes/no): NO
|
||||
Would you like to create a new local network bridge? (yes/no): YES
|
||||
What should the new bridge be called?: lxdbr0
|
||||
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”): AUTO
|
||||
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”): AUTO
|
||||
Would you like LXD to be available over the network? (yes/no): NO
|
||||
Would you like stale cached images to be updated automatically? (yes/no): YES
|
||||
Would you like a YAML "lxd init" preseed to be printed? (yes/no): NO
|
||||
```
|
||||
```bash
|
||||
$ lxc config set core.https_address "[::]"
|
||||
$ lxc config set core.trust_password uma_pass
|
||||
|
||||
$ lxc config unset core.trust_password
|
||||
```
|
14
files/ha_certbot_renew.sh
Normal file
14
files/ha_certbot_renew.sh
Normal file
@ -0,0 +1,14 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
CERTS=$(certbot certificates | grep 'Certificate Name'| cut -c 21-)
|
||||
|
||||
# Renew the certificate
|
||||
certbot renew #--force-renewal --tls-sni-01-port=8888
|
||||
|
||||
# Concatenate new cert files, with less output (avoiding the use tee and its output to stdout)
|
||||
for certs in $CERTS; do
|
||||
bash -c "cat /etc/letsencrypt/live/$certs/fullchain.pem /etc/letsencrypt/live/$certs/privkey.pem > /etc/haproxy/ssl/$certs.pem"
|
||||
done
|
||||
|
||||
# Reload HAProxy
|
||||
systemctl reload haproxy
|
84
files/ha_haproxy.cfg.j2
Normal file
84
files/ha_haproxy.cfg.j2
Normal file
@ -0,0 +1,84 @@
|
||||
global
|
||||
log /dev/log local1 notice
|
||||
chroot /var/lib/haproxy
|
||||
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
|
||||
stats timeout 300s
|
||||
|
||||
user haproxy
|
||||
group haproxy
|
||||
daemon
|
||||
|
||||
ulimit-n 120041
|
||||
maxconn 60000
|
||||
pidfile /var/run/haproxy.pid
|
||||
|
||||
# Default SSL material locations
|
||||
ca-base /etc/ssl/certs
|
||||
crt-base /etc/ssl/private
|
||||
|
||||
ssl-default-bind-ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384::ECDHE-ECDSA-AES256-SHA384
|
||||
ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets
|
||||
ssl-default-server-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets
|
||||
|
||||
# curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam.pem
|
||||
ssl-dh-param-file /etc/haproxy/dhparam.pem
|
||||
|
||||
defaults
|
||||
log global
|
||||
mode http
|
||||
retries 3
|
||||
|
||||
option httplog
|
||||
option dontlognull
|
||||
option redispatch
|
||||
option forwardfor except 127.0.0.1
|
||||
|
||||
timeout http-request 10s
|
||||
timeout check 10s
|
||||
timeout client 60s
|
||||
timeout connect 10s
|
||||
timeout server 60s
|
||||
|
||||
maxconn 60000
|
||||
|
||||
errorfile 400 /etc/haproxy/errors/400.http
|
||||
errorfile 403 /etc/haproxy/errors/403.http
|
||||
errorfile 408 /etc/haproxy/errors/408.http
|
||||
errorfile 500 /etc/haproxy/errors/500.http
|
||||
errorfile 502 /etc/haproxy/errors/502.http
|
||||
errorfile 503 /etc/haproxy/errors/503.http
|
||||
errorfile 504 /etc/haproxy/errors/504.http
|
||||
|
||||
# The web frontend
|
||||
|
||||
frontend http_https
|
||||
bind :80 accept-proxy
|
||||
bind :443 accept-proxy ssl crt /etc/haproxy/ssl/ alpn h2,http/1.1
|
||||
|
||||
http-request set-header X-Port %[dst_port]
|
||||
http-request set-header X-Real-Ip %[src]
|
||||
http-request set-header X-Orig-URL %[req.hdr(Host)]%[url]
|
||||
http-request set-header X-Proto SSL if { ssl_fc }
|
||||
http-request set-header X-Forwarded-Proto https if { ssl_fc }
|
||||
http-response set-header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload;"
|
||||
|
||||
# Redirect if HTTPS is *not* used
|
||||
redirect scheme https code 301 if !{ ssl_fc }
|
||||
|
||||
# Test URI to see if its a letsencrypt request
|
||||
acl letsencrypt-acl path_beg /.well-known/acme-challenge/
|
||||
use_backend letsencrypt if letsencrypt-acl
|
||||
|
||||
# Gitea
|
||||
acl git-ansol-org hdr(host) -i git.ansol.org
|
||||
use_backend git-ansol-org if git-ansol-org
|
||||
|
||||
# Let's Encrypt
|
||||
|
||||
backend letsencrypt
|
||||
server letsencrypt 127.0.0.1:8888
|
||||
|
||||
# Gitea
|
||||
|
||||
backend git-ansol-org
|
||||
server git-ansol-org gitea:3000 check
|
13
files/ha_new_cert.sh
Normal file
13
files/ha_new_cert.sh
Normal file
@ -0,0 +1,13 @@
|
||||
#/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
sudo certbot certonly --standalone -d "$1" \
|
||||
--non-interactive \
|
||||
--agree-tos \
|
||||
--email contacto@ansol.org \
|
||||
--preferred-challenges http \
|
||||
--http-01-address 127.0.0.1 \
|
||||
--http-01-port 8888 \
|
||||
|
||||
cat /etc/letsencrypt/live/"$1"/fullchain.pem /etc/letsencrypt/live/"$1"/privkey.pem > /etc/haproxy/ssl/"$1".pem
|
6
hosts
Normal file
6
hosts
Normal file
@ -0,0 +1,6 @@
|
||||
[lxd_hosts]
|
||||
git.ansol.org ansible_ssh_user=root
|
||||
|
||||
[containers]
|
||||
haproxy ansible_lxd_remote=lxd-ansol ansible_lxd_host=haproxy ansible_connection=community.general.lxd ansible_python_interpreter=/usr/bin/python3
|
||||
gitea ansible_lxd_remote=lxd-ansol ansible_lxd_host=gitea ansible_connection=community.general.lxd ansible_python_interpreter=/usr/bin/python3
|
13
main.yaml
Normal file
13
main.yaml
Normal file
@ -0,0 +1,13 @@
|
||||
---
|
||||
# Preparatory tasks
|
||||
- import_playbook: 00_preps.yaml
|
||||
# README manual steps, then:
|
||||
- import_playbook: 01_prep_lxd.yaml
|
||||
|
||||
# LXD containers
|
||||
- import_playbook: 02_lxc_containers.yaml
|
||||
|
||||
# Container Haproxy
|
||||
- import_playbook: 03_container_haproxy.yaml
|
||||
# Container Gitea
|
||||
- import_playbook: 04_container_gitea.yaml
|
Loading…
Reference in New Issue
Block a user