ansible playbook and roles
This commit is contained in:
parent
d061dc39f9
commit
15db356544
7
ansible/gitlab_server.yml
Normal file
7
ansible/gitlab_server.yml
Normal file
@ -0,0 +1,7 @@
|
||||
---
|
||||
- hosts: gitlab_servers
|
||||
roles:
|
||||
- {role: 'docker', tags: ['docker'], become: true}
|
||||
- {role: 'traefik', tags: ['traefik'], become: true}
|
||||
- {role: 'gitlab_server', tags: ['gitlab_server'], become: true}
|
||||
|
67
ansible/roles/docker/defaults/main.yml
Normal file
67
ansible/roles/docker/defaults/main.yml
Normal file
@ -0,0 +1,67 @@
|
||||
---
|
||||
# docker_log_driver: 'json-file'
|
||||
# docker_live_restore: true
|
||||
# docker_json_max_size: '300M'
|
||||
# docker_json_max_file: '3'
|
||||
# docker_json_compress: 'true'
|
||||
# docker_apt_package: 'docker.io'
|
||||
# vm_max_map_count: false
|
||||
# use docker default shutdown timeout by default
|
||||
# docker_shutdown_timeout:
|
||||
|
||||
# Edition can be one of: 'ce' (Community Edition) or 'ee' (Enterprise Edition).
|
||||
docker_edition: 'ce'
|
||||
docker_packages:
|
||||
- "docker-{{ docker_edition }}"
|
||||
- "docker-{{ docker_edition }}-cli"
|
||||
- "docker-{{ docker_edition }}-rootless-extras"
|
||||
- "containerd.io"
|
||||
docker_packages_state: present
|
||||
|
||||
# Service options.
|
||||
docker_service_manage: true
|
||||
docker_service_state: started
|
||||
docker_service_enabled: true
|
||||
docker_restart_handler_state: restarted
|
||||
|
||||
# Docker Compose Plugin options.
|
||||
docker_install_compose_plugin: false
|
||||
docker_compose_package: docker-compose-plugin
|
||||
docker_compose_package_state: present
|
||||
|
||||
# Docker Compose options.
|
||||
docker_install_compose: true
|
||||
docker_compose_version: "v2.11.1"
|
||||
docker_compose_arch: "{{ ansible_architecture }}"
|
||||
docker_compose_url: "https://github.com/docker/compose/releases/download/{{ docker_compose_version }}/docker-compose-linux-{{ docker_compose_arch }}"
|
||||
docker_compose_path: /usr/local/bin/docker-compose
|
||||
|
||||
# Docker repo URL.
|
||||
docker_repo_url: https://download.docker.com/linux
|
||||
|
||||
# Used only for Debian/Ubuntu. Switch 'stable' to 'nightly' if needed.
|
||||
docker_apt_release_channel: stable
|
||||
docker_apt_arch: "{{ 'arm64' if ansible_architecture == 'aarch64' else 'amd64' }}"
|
||||
docker_apt_repository: "deb [arch={{ docker_apt_arch }}] {{ docker_repo_url }}/{{ ansible_distribution | lower }} {{ ansible_distribution_release }} {{ docker_apt_release_channel }}"
|
||||
docker_apt_ignore_key_error: true
|
||||
docker_apt_gpg_key: "{{ docker_repo_url }}/{{ ansible_distribution | lower }}/gpg"
|
||||
|
||||
# Used only for RedHat/CentOS/Fedora.
|
||||
docker_yum_repo_url: "{{ docker_repo_url }}/{{ (ansible_distribution == 'Fedora') | ternary('fedora','centos') }}/docker-{{ docker_edition }}.repo"
|
||||
docker_yum_repo_enable_nightly: '0'
|
||||
docker_yum_repo_enable_test: '0'
|
||||
docker_yum_gpg_key: "{{ docker_repo_url }}/centos/gpg"
|
||||
|
||||
# A list of users who will be added to the docker group.
|
||||
docker_users: [vagrant]
|
||||
|
||||
# Docker daemon options as a dict
|
||||
docker_daemon_options: {
|
||||
"log-driver": "json-file",
|
||||
"log-opts": {
|
||||
"max-size": "300m",
|
||||
"max-file": "3",
|
||||
"compress": "true"
|
||||
},
|
||||
"live-restore": true
|
||||
}
|
7
ansible/roles/docker/handlers/main.yml
Normal file
7
ansible/roles/docker/handlers/main.yml
Normal file
@ -0,0 +1,7 @@
|
||||
---
|
||||
- name: restart docker
|
||||
service:
|
||||
name: docker
|
||||
state: "{{ docker_restart_handler_state }}"
|
||||
ignore_errors: "{{ ansible_check_mode }}"
|
||||
when: docker_service_manage | bool
|
7
ansible/roles/docker/tasks/docker-users.yml
Normal file
7
ansible/roles/docker/tasks/docker-users.yml
Normal file
@ -0,0 +1,7 @@
|
||||
---
|
||||
- name: Ensure docker users are added to the docker group.
|
||||
user:
|
||||
name: "{{ item }}"
|
||||
groups: docker
|
||||
append: true
|
||||
with_items: "{{ docker_users }}"
|
70
ansible/roles/docker/tasks/main.yml
Normal file
70
ansible/roles/docker/tasks/main.yml
Normal file
@ -0,0 +1,70 @@
|
||||
---
|
||||
- include_tasks: setup-RedHat.yml
|
||||
when: ansible_os_family == 'RedHat'
|
||||
|
||||
- include_tasks: setup-Debian.yml
|
||||
when: ansible_os_family == 'Debian'
|
||||
|
||||
- name: Install Docker packages.
|
||||
package:
|
||||
name: "{{ docker_packages }}"
|
||||
state: "{{ docker_packages_state }}"
|
||||
notify: restart docker
|
||||
ignore_errors: "{{ ansible_check_mode }}"
|
||||
when: "ansible_version.full is version_compare('2.12', '<') or ansible_os_family not in ['RedHat', 'Debian']"
|
||||
|
||||
- name: Install Docker packages (with downgrade option).
|
||||
package:
|
||||
name: "{{ docker_packages }}"
|
||||
state: "{{ docker_packages_state }}"
|
||||
allow_downgrade: true
|
||||
notify: restart docker
|
||||
ignore_errors: "{{ ansible_check_mode }}"
|
||||
when: "ansible_version.full is version_compare('2.12', '>=') and ansible_os_family in ['RedHat', 'Debian']"
|
||||
|
||||
- name: Ensure /etc/docker/ directory exists.
|
||||
file:
|
||||
path: /etc/docker
|
||||
state: directory
|
||||
mode: 0755
|
||||
when: docker_daemon_options.keys() | length > 0
|
||||
|
||||
- name: Configure Docker daemon options.
|
||||
copy:
|
||||
content: "{{ docker_daemon_options | to_nice_json }}"
|
||||
dest: /etc/docker/daemon.json
|
||||
mode: 0644
|
||||
when: docker_daemon_options.keys() | length > 0
|
||||
notify: restart docker
|
||||
|
||||
- name: Ensure Docker is started and enabled at boot.
|
||||
service:
|
||||
name: docker
|
||||
state: "{{ docker_service_state }}"
|
||||
enabled: "{{ docker_service_enabled }}"
|
||||
ignore_errors: "{{ ansible_check_mode }}"
|
||||
when: docker_service_manage | bool
|
||||
|
||||
- name: Ensure handlers are notified now to avoid firewall conflicts.
|
||||
meta: flush_handlers
|
||||
|
||||
# On récupère les utilisateurs membres du groupe docker si on a passé des users dans la variable docker_users
|
||||
- name: Get docker group info using getent.
|
||||
getent:
|
||||
database: group
|
||||
key: docker
|
||||
split: ':'
|
||||
when: docker_users | length > 0
|
||||
|
||||
# On vérifie si les users n'exsistent pas. Si c'est le cas on créé une nouvelle variable
|
||||
- name: Check if there are any users to add to the docker group.
|
||||
set_fact:
|
||||
at_least_one_user_to_modify: true
|
||||
when:
|
||||
- docker_users | length > 0
|
||||
- item not in ansible_facts.getent_group["docker"][2] # Permet de récupérer une liste des utilisateurs renseignée dans le troisième champs.
|
||||
with_items: "{{ docker_users }}"
|
||||
|
||||
# Si la nouvelle variable a été définie on exécute la task
|
||||
- include_tasks: docker-users.yml
|
||||
when: at_least_one_user_to_modify is defined
|
55
ansible/roles/docker/tasks/setup-Debian.yml
Normal file
55
ansible/roles/docker/tasks/setup-Debian.yml
Normal file
@ -0,0 +1,55 @@
|
||||
---
|
||||
- name: Ensure old versions of Docker are not installed.
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- docker
|
||||
- docker-engine
|
||||
- docker.io
|
||||
state: absent
|
||||
|
||||
- name: Ensure dependencies are installed.
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- apt-transport-https
|
||||
- ca-certificates
|
||||
state: present
|
||||
|
||||
- name: Ensure additional dependencies are installed (on Ubuntu < 20.04 and any other systems).
|
||||
ansible.builtin.apt:
|
||||
name: gnupg2
|
||||
state: present
|
||||
when: ansible_distribution != 'Ubuntu' or ansible_distribution_version is version('20.04', '<')
|
||||
|
||||
- name: Ensure additional dependencies are installed (on Ubuntu >= 20.04).
|
||||
ansible.builtin.apt:
|
||||
name: gnupg
|
||||
state: present
|
||||
when: ansible_distribution == 'Ubuntu' and ansible_distribution_version is version('20.04', '>=')
|
||||
|
||||
- name: Add Docker apt key.
|
||||
ansible.builtin.get_url:
|
||||
url: "{{ docker_apt_gpg_key }}"
|
||||
dest: /etc/apt/trusted.gpg.d/docker.asc
|
||||
mode: '0644'
|
||||
force: true
|
||||
register: add_repository_key
|
||||
ignore_errors: "{{ docker_apt_ignore_key_error }}"
|
||||
|
||||
- name: Ensure curl is present (on older systems without SNI).
|
||||
ansible.builtin.package:
|
||||
name: curl
|
||||
state: present
|
||||
when: add_repository_key is failed
|
||||
|
||||
- name: Add Docker apt key (alternative for older systems without SNI).
|
||||
shell: >
|
||||
curl -sSL {{ docker_apt_gpg_key }} | apt-key add -
|
||||
args:
|
||||
warn: false
|
||||
when: add_repository_key is failed
|
||||
|
||||
- name: Add Docker repository.
|
||||
apt_repository:
|
||||
repo: "{{ docker_apt_repository }}"
|
||||
state: present
|
||||
update_cache: true
|
34
ansible/roles/docker/tasks/setup-RedHat.yml
Normal file
34
ansible/roles/docker/tasks/setup-RedHat.yml
Normal file
@ -0,0 +1,34 @@
|
||||
---
|
||||
- name: Ensure old versions of Docker are not installed.
|
||||
package:
|
||||
name:
|
||||
- docker
|
||||
- docker-common
|
||||
- docker-engine
|
||||
state: absent
|
||||
|
||||
- name: Add Docker GPG key.
|
||||
rpm_key:
|
||||
key: "{{ docker_yum_gpg_key }}"
|
||||
state: present
|
||||
|
||||
- name: Add Docker repository.
|
||||
get_url:
|
||||
url: "{{ docker_yum_repo_url }}"
|
||||
dest: '/etc/yum.repos.d/docker-{{ docker_edition }}.repo'
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0644
|
||||
|
||||
- name: Configure containerd on RHEL 8.
|
||||
block:
|
||||
- name: Ensure container-selinux is installed.
|
||||
package:
|
||||
name: container-selinux
|
||||
state: present
|
||||
|
||||
- name: Ensure containerd.io is installed.
|
||||
package:
|
||||
name: containerd.io
|
||||
state: present
|
||||
when: ansible_distribution_major_version | int == 8
|
16
ansible/roles/gitlab_server/defaults/main.yml
Normal file
16
ansible/roles/gitlab_server/defaults/main.yml
Normal file
@ -0,0 +1,16 @@
|
||||
---
|
||||
gitlab_image_tag: latest
|
||||
gitlab_server_name:
|
||||
gitlab_pages_server_name:
|
||||
gitlab_services: []
|
||||
gitlab_base_dir: /opt/gitlab
|
||||
gitlab_data_dir: '{{ gitlab_base_dir }}/data'
|
||||
gitlab_backup_dir: '{{ gitlab_data_dir }}/backups'
|
||||
gitlab_logs_dir: '{{ gitlab_base_dir }}/logs'
|
||||
gitlab_conf_dir: '{{ gitlab_base_dir }}/conf'
|
||||
gitlab_bin_dir: '{{ gitlab_base_dir }}/bin'
|
||||
traefik_network: docker.local.fr
|
||||
|
||||
# --- puma dir ---
|
||||
puma_conf_dir: /opt/gitlab/var/puma
|
||||
puma_conf_pid: '{{ puma_conf_dir}}/puma.pid'
|
6
ansible/roles/gitlab_server/handlers/main.yml
Normal file
6
ansible/roles/gitlab_server/handlers/main.yml
Normal file
@ -0,0 +1,6 @@
|
||||
---
|
||||
- name: restart gitlab
|
||||
command: docker exec gitlab gitlab-ctl restart
|
||||
|
||||
- name: reconfigure gitlab
|
||||
command: docker exec gitlab gitlab-ctl reconfigure
|
75
ansible/roles/gitlab_server/tasks/main.yml
Normal file
75
ansible/roles/gitlab_server/tasks/main.yml
Normal file
@ -0,0 +1,75 @@
|
||||
---
|
||||
- name: Install packages
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- jq
|
||||
state: present
|
||||
|
||||
- name: Create directories
|
||||
ansible.builtin.file:
|
||||
path: '{{ item.path }}'
|
||||
owner: '{{ item.owner | default("root") }}'
|
||||
group: '{{ item.group | default("root") }}'
|
||||
mode: '{{ item.mode | default("0755") }}'
|
||||
state: directory
|
||||
loop:
|
||||
- path: '{{ gitlab_base_dir }}'
|
||||
mode: '0700'
|
||||
- path: '{{ gitlab_data_dir }}'
|
||||
- path: '{{ gitlab_conf_dir }}'
|
||||
mode: '0775'
|
||||
- path: '{{ gitlab_logs_dir }}'
|
||||
- path: '{{ gitlab_bin_dir }}'
|
||||
|
||||
- name: Gitlab - Container up
|
||||
community.docker.docker_container:
|
||||
name: gitlab
|
||||
image: 'gitlab/gitlab-ce:{{ gitlab_image_tag }}'
|
||||
state: started
|
||||
restart_policy: unless-stopped
|
||||
volumes:
|
||||
- '{{ gitlab_conf_dir }}:/etc/gitlab'
|
||||
- '{{ gitlab_logs_dir }}:/var/log/gitlab'
|
||||
- '{{ gitlab_data_dir }}:/var/opt/gitlab'
|
||||
network_mode: '{{ traefik_network }}'
|
||||
networks:
|
||||
- name: '{{ traefik_network }}'
|
||||
labels:
|
||||
traefik.enable: 'true'
|
||||
traefik.http.routers.gitlab.rule: 'Host(`gitlab.local.fr`)'
|
||||
traefik.http.routers.gitlab.entrypoints: 'websecure'
|
||||
traefik.http.services.gitlab.loadbalancer.server.port: '80'
|
||||
traefik.http.routers.gitlab.tls: 'true'
|
||||
|
||||
- name: Deploy gitlab config file
|
||||
ansible.builtin.template:
|
||||
src: gitlab.rb.j2
|
||||
dest: '{{ gitlab_conf_dir }}/gitlab.rb'
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0400'
|
||||
notify: reconfigure gitlab
|
||||
|
||||
- name: Modify sysctl values
|
||||
ansible.builtin.sysctl:
|
||||
name: '{{ item.name }}'
|
||||
value: '{{ item.value }}'
|
||||
state: present
|
||||
loop:
|
||||
- name: net.core.somaxconn
|
||||
value: 1024
|
||||
- name: net.ipv4.tcp_max_syn_backlog
|
||||
value: 1024
|
||||
- name: vm.overcommit_memory
|
||||
value: 1
|
||||
|
||||
- name: Get initial root password for gitlab authent
|
||||
ansible.builtin.command: docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
|
||||
register: _password
|
||||
until: "_password is not failed"
|
||||
retries: 3
|
||||
delay: 10
|
||||
|
||||
- name: Print password
|
||||
ansible.builtin.debug:
|
||||
msg: "{{ _password.stdout }}"
|
47
ansible/roles/gitlab_server/templates/gitlab.rb.j2
Normal file
47
ansible/roles/gitlab_server/templates/gitlab.rb.j2
Normal file
@ -0,0 +1,47 @@
|
||||
{{ ansible_managed | comment }}
|
||||
|
||||
external_url 'https://gitlab.local.fr'
|
||||
nginx['listen_port'] = 80
|
||||
nginx['listen_https'] = false
|
||||
nginx['redirect_http_to_https'] = false
|
||||
nginx['http2_enabled'] = false
|
||||
nginx['proxy_set_headers'] = {
|
||||
"Host" => "$http_host",
|
||||
"X-Real-IP" => "$remote_addr",
|
||||
"X-Forwarded-For" => "$proxy_add_x_forwarded_for",
|
||||
"X-Forwarded-Proto" => "https",
|
||||
"X-Forwarded-Ssl" => "on"
|
||||
}
|
||||
nginx['real_ip_trusted_addresses'] = ['172.18.0.0/16']
|
||||
nginx['real_ip_header'] = 'X-Real-IP'
|
||||
nginx['real_ip_recursive'] = 'on'
|
||||
nginx['custom_gitlab_server_config'] = "\nlocation =/robots.txt { alias /etc/gitlab/robots.txt; }\n"
|
||||
|
||||
letsencrypt['enable'] = false
|
||||
prometheus_monitoring['enable'] = false
|
||||
|
||||
gitlab_rails['smtp_enable'] = false
|
||||
|
||||
# gitlab_rails['gitlab_shell_ssh_port'] = 22222
|
||||
|
||||
|
||||
|
||||
# --- Misc ---
|
||||
grafana['enable'] = false
|
||||
|
||||
# --- Puma ---
|
||||
puma['enable'] = true
|
||||
puma['worker_processes'] = 2 # Nb core-1
|
||||
puma['worker_timeout'] = 60
|
||||
|
||||
# Valeur par défaut conseiller 4
|
||||
puma['min_threads'] = 4
|
||||
puma['max_threads'] = 4
|
||||
|
||||
puma['per_worker_max_memory_mb'] = 1024
|
||||
|
||||
puma['pidfile'] = '{{ puma_conf_pid }}'
|
||||
gitlab_rails['env'] = {
|
||||
'GITLAB_RAILS_RACK_TIMEOUT' => 600
|
||||
}
|
||||
|
2
ansible/roles/gitlab_server/templates/robots.txt.j2
Normal file
2
ansible/roles/gitlab_server/templates/robots.txt.j2
Normal file
@ -0,0 +1,2 @@
|
||||
User-Agent: *
|
||||
Disallow: /
|
5
ansible/roles/traefik/defaults/main.yml
Normal file
5
ansible/roles/traefik/defaults/main.yml
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
traefik_dev_version: 'v2.5'
|
||||
traefik_user: 'vagrant' # user
|
||||
traefik_dev_network:
|
||||
- docker.local.fr
|
9
ansible/roles/traefik/files/config/dynamic_conf.toml
Normal file
9
ansible/roles/traefik/files/config/dynamic_conf.toml
Normal file
@ -0,0 +1,9 @@
|
||||
[[tls.certificates]]
|
||||
certFile = "/etc/certs/local.fr.crt"
|
||||
keyFile = "/etc/certs/local.fr.key"
|
||||
|
||||
[tls.stores]
|
||||
[tls.stores.default]
|
||||
[tls.stores.default.defaultCertificate]
|
||||
certFile = "/etc/certs/local.fr.crt"
|
||||
keyFile = "/etc/certs/local.fr.key"
|
7
ansible/roles/traefik/files/config/middlewares.yml
Normal file
7
ansible/roles/traefik/files/config/middlewares.yml
Normal file
@ -0,0 +1,7 @@
|
||||
---
|
||||
http:
|
||||
middlewares:
|
||||
StagingHeader:
|
||||
headers:
|
||||
customRequestHeaders:
|
||||
X-Is-Secure: "true"
|
28
ansible/roles/traefik/files/etc/certs/local.fr.crt
Normal file
28
ansible/roles/traefik/files/etc/certs/local.fr.crt
Normal file
@ -0,0 +1,28 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEvjCCAqagAwIBAgIUA3+jwHAAm1FF+hMbkjpEtp7r5vkwDQYJKoZIhvcNAQEL
|
||||
BQAwQjELMAkGA1UEBhMCRlIxFTATBgNVBAcMDERlZmF1bHQgQ2l0eTEcMBoGA1UE
|
||||
CgwTRGVmYXVsdCBDb21wYW55IEx0ZDAeFw0yMjEwMDgxNTA5MTNaFw0yMzEwMDgx
|
||||
NTA5MTNaMH0xCzAJBgNVBAYTAkZSMQ8wDQYDVQQIDAZGcmFuY2UxETAPBgNVBAcM
|
||||
CFRvdWxvdXNlMREwDwYDVQQKDAhsb2NhbC5mcjEOMAwGA1UECwwFbG9jYWwxDjAM
|
||||
BgNVBAMMBWxvY2FsMRcwFQYJKoZIhvcNAQkBFghsb2NhbC5mcjCCASIwDQYJKoZI
|
||||
hvcNAQEBBQADggEPADCCAQoCggEBANY0jBXHVKKkxCac0+mFit+VcE/KbnfwXuBx
|
||||
cyS0DEQwPTPA0yuzomfmWs/EWoNZKyg4e42HWVoEq1gCXSeDzfg3cvfBNcx5nbhs
|
||||
uVMOLesIcMohmhKCrbeqBRuF1X6KM9qbJUDU0/hwQN0nyUW/yDDH4BqPY8yVYyTD
|
||||
Vjp8s/lDMhiXnKyRT5KonXqwFLxvpiiHbZu8bh6agSj+RDiPJGzidw6HqL1GavBj
|
||||
zwuzjmkJdnQKxqivwTv5BMDaWveX7+WCaTYXY3Dt/JRixlFjn7vXj+huRuOHu9GM
|
||||
vT5a0Zkm524rw2O2hbFK2Gk9upSvo5j5IPJQaH1TuCs2ChShNDMCAwEAAaNxMG8w
|
||||
HwYDVR0jBBgwFoAUZEj1ZQDuf7yPxxLCp0JqiSOM7oUwCQYDVR0TBAIwADALBgNV
|
||||
HQ8EBAMCBPAwFQYDVR0RBA4wDIIKKi5sb2NhbC5mcjAdBgNVHQ4EFgQUx1Tra1AD
|
||||
cKbECcIyyGSy5/6dadkwDQYJKoZIhvcNAQELBQADggIBAHoVo7EDCo++aGu8RsB+
|
||||
Tbufc2nGyLOv9vc+syG00SFE/K0ic0JTuOHQcGnXbsfqaq2b7mtz8UL/bbBq/hmn
|
||||
7xDkbUIigbrTQgRAhXIrv+wfUp0U8Wq6g2uCKFpak29mSfmnNdzYCQxywREwdKwS
|
||||
OzlUZbmxmjNjX3YRJHL1mO/d2Y/5QD/rgZJB3aYnE05v5pVayx+FwHx0nu5OPUFS
|
||||
sJBNjn15As1DREA6jaKYV6AYKy1kyPeo+/YuNPWndX3nlkgq3zvWvAFgwes0Oold
|
||||
TSPH1TZlFpGexUPqJ8ZKUy6nQz6gUkPr4+F7ZvuNJ4djmrm36Osc2nqTdSPapX0c
|
||||
zsI+1J82JnEVzqp4mHAIOF8MX2BZgrKNA6Uc5ftsSMQZ5irqSuNC+U2Mwsz22OBx
|
||||
pcuciW7tAPJf3MBp9yGc35pHFG5F0DcEZhHaELCx6h8+dZ+8ZwRK6Do6HSBpi98W
|
||||
2CuWePV5q9AecYv/gKXGA+N2nH3dh+eDqqPW6dNWLSfQCsoueJthRawBe249XrIG
|
||||
CUREUTr7/nn95DtYpWD4ytxHxeU+6hGHzcv2EPfQkKYSkcayhGWMwN2c6c0B1SFg
|
||||
CcwYB6OXy5mzDMUgWlioW5pdILhLyxLFB5XI4N3KjowgATJc9xgAfA7kR88tKAmM
|
||||
JxD+DMTwrvDbAkQ5iEV9GDRM
|
||||
-----END CERTIFICATE-----
|
17
ansible/roles/traefik/files/etc/certs/local.fr.csr
Normal file
17
ansible/roles/traefik/files/etc/certs/local.fr.csr
Normal file
@ -0,0 +1,17 @@
|
||||
-----BEGIN CERTIFICATE REQUEST-----
|
||||
MIICwjCCAaoCAQAwfTELMAkGA1UEBhMCRlIxDzANBgNVBAgMBkZyYW5jZTERMA8G
|
||||
A1UEBwwIVG91bG91c2UxETAPBgNVBAoMCGxvY2FsLmZyMQ4wDAYDVQQLDAVsb2Nh
|
||||
bDEOMAwGA1UEAwwFbG9jYWwxFzAVBgkqhkiG9w0BCQEWCGxvY2FsLmZyMIIBIjAN
|
||||
BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1jSMFcdUoqTEJpzT6YWK35VwT8pu
|
||||
d/Be4HFzJLQMRDA9M8DTK7OiZ+Zaz8Rag1krKDh7jYdZWgSrWAJdJ4PN+Ddy98E1
|
||||
zHmduGy5Uw4t6whwyiGaEoKtt6oFG4XVfooz2pslQNTT+HBA3SfJRb/IMMfgGo9j
|
||||
zJVjJMNWOnyz+UMyGJecrJFPkqiderAUvG+mKIdtm7xuHpqBKP5EOI8kbOJ3Doeo
|
||||
vUZq8GPPC7OOaQl2dArGqK/BO/kEwNpa95fv5YJpNhdjcO38lGLGUWOfu9eP6G5G
|
||||
44e70Yy9PlrRmSbnbivDY7aFsUrYaT26lK+jmPkg8lBofVO4KzYKFKE0MwIDAQAB
|
||||
oAAwDQYJKoZIhvcNAQELBQADggEBAKKp6AadSiP9tXHckhADHtzGFUpeq+CEC0Nk
|
||||
AoaVMllkZHgEppdOzoj2FfCHdb7wfSOsA1ZjIE5oooEoZjUfb+xM/GnvJcpJT+Tr
|
||||
rLT26DwXnPrsIxvzqIvMx6XsnfPcrr+3bHfW50W/jdNNDtzyeyq6kXCMMbxYat8p
|
||||
flG+SMLeiMWFK6poTNrWh+X4ZzHbmDc+ckNdwilVXAVFgr0alzd6qo4Kc6WHRiQS
|
||||
BTPjPQn9lgkq42S7kojLUXclcVfsvrHSmXTdUHtLFyj5H+7ppgs9wDWLSksOaBg2
|
||||
We9LcIGyuucaJBgbBuJ48WgtJDko0L2bpDFHRDipyQQeUCRkdRk=
|
||||
-----END CERTIFICATE REQUEST-----
|
28
ansible/roles/traefik/files/etc/certs/local.fr.key
Normal file
28
ansible/roles/traefik/files/etc/certs/local.fr.key
Normal file
@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDWNIwVx1SipMQm
|
||||
nNPphYrflXBPym538F7gcXMktAxEMD0zwNMrs6Jn5lrPxFqDWSsoOHuNh1laBKtY
|
||||
Al0ng834N3L3wTXMeZ24bLlTDi3rCHDKIZoSgq23qgUbhdV+ijPamyVA1NP4cEDd
|
||||
J8lFv8gwx+Aaj2PMlWMkw1Y6fLP5QzIYl5yskU+SqJ16sBS8b6Yoh22bvG4emoEo
|
||||
/kQ4jyRs4ncOh6i9RmrwY88Ls45pCXZ0Csaor8E7+QTA2lr3l+/lgmk2F2Nw7fyU
|
||||
YsZRY5+714/obkbjh7vRjL0+WtGZJuduK8NjtoWxSthpPbqUr6OY+SDyUGh9U7gr
|
||||
NgoUoTQzAgMBAAECggEADmsUZYA4ptynBLUDC/GckBbZASXucE2ntT0ts5zC7pwT
|
||||
TTZ/gFjjvPv5GjRspfFh7Ep7q+JzwJFr5Hf+7o1QAeiJk+UCIAoCScsCYSAlNcV9
|
||||
rL1nnN4Fn2/m+XFKwO0V4chrpi+CjR3RNTxbr0GM0hZsyUeO6ihsDKocAG0rGBiu
|
||||
0ucbdCJfxl33QsEXWcFjCoX9eAobPhmM4RPAOK0yXRYrz6wBgbHfFY5A9JhT31zZ
|
||||
xzZh/Wq881FYaBsrUB/mvsBVqCwO4GL76poA574TcHrmjb1ygKwgq6+zRpzEdlej
|
||||
vY8RD2savLlkIOO0EhaCx+t+rBJ95lr3mj6AclPiAQKBgQD/tcJrx/KOaAs/pIf4
|
||||
q+3sRwduKxObJNQL63Aj+UzPIcK5pf7OwlsKmpZyz1ci/2XVF998hFLI2DKYVDNk
|
||||
w85t4MZht+cnjjlRbWux3jzesdsZa/zYCfT0MX38OZsS28nOjJ2mbijtvPbmON+n
|
||||
jw3eqEYfDlRFkYLrYcGpQKBnswKBgQDWcrzV3W8idok7SOyZ3j8i2OPaQkwDmEYI
|
||||
my7M2WNZ62q+MPNAysnni4o04Rkw5TTC0lov9jRdcK4G+h73tqM7wvDGvPUOtemx
|
||||
SfuOwg6fE8Er0cAmQ4rjBvxIVPJ6+Iz9CItyRvt1iCXvWTF9CjO6bkPmLR2QjZkh
|
||||
SgJwpGXBgQKBgCJy3R9iD3ZJ5AIN61d/6gyjwQeBfCGxg3Oboz7lbgiVlsMl7r7y
|
||||
BgvWqaAL+MQ5PgHINo5y0ShHoAFPjqDrlBrPZkpx2Q1GJsimghSzSOYDde3l02lT
|
||||
ZhGjvUJGjHKs83IFFZP/UTo989EuJktPhWHSr6etaYL5yHZndAyWLUXrAoGAfq6b
|
||||
JQ/Bhi9WFEKZGrByxagwug+uDfWXcaASvoqxKT5r+Vy7ZowlR/Zjt6c+FWdhirFu
|
||||
+6RK/OQCujZpstYeicA4Mn8PmRgXrFbTF1tF/e1SkQtAopoF4uWOhUBBWimYSCYT
|
||||
EngiNiUum70qAf7T3g8jZ0dBjtJHIqYw2NAVGIECgYAtJsZZcuqeT4v0SrF3aGuq
|
||||
8TSaNFICQAPuRSeV7RN3Yq/ZzCxG0pt0N6U8/SZmOH+bx98yekRMLgY3A68XdlRi
|
||||
uiyl+RZJIhaU83dhDnfv1/F0y0MmA8mEmUoPQSZkDrwg+IwvD38ob9DQUvaBcn5G
|
||||
QBvZMa2+bHkceOnYRVfgzw==
|
||||
-----END PRIVATE KEY-----
|
33
ansible/roles/traefik/files/traefik.toml
Normal file
33
ansible/roles/traefik/files/traefik.toml
Normal file
@ -0,0 +1,33 @@
|
||||
[accessLog]
|
||||
filePath = "/dev/stdout"
|
||||
|
||||
[log]
|
||||
level = "ERROR"
|
||||
|
||||
[providers.docker]
|
||||
endpoint = "unix:///var/run/docker.sock"
|
||||
watch = true
|
||||
exposedByDefault = false
|
||||
|
||||
[providers.file]
|
||||
directory = "/etc/traefik/config"
|
||||
watch = true
|
||||
|
||||
[entryPoints]
|
||||
[entryPoints.metrics]
|
||||
address = ":8090"
|
||||
[entryPoints.websecure]
|
||||
address = ":443"
|
||||
[entryPoints.web]
|
||||
address = ":80"
|
||||
[entryPoints.web.http.redirections]
|
||||
[entryPoints.web.http.redirections.entryPoint]
|
||||
to = "websecure"
|
||||
scheme = "https"
|
||||
permanent = "true"
|
||||
|
||||
[api]
|
||||
dashboard = true
|
||||
|
||||
[metrics]
|
||||
[metrics.prometheus]
|
17
ansible/roles/traefik/handlers/main.yml
Normal file
17
ansible/roles/traefik/handlers/main.yml
Normal file
@ -0,0 +1,17 @@
|
||||
---
|
||||
- name: reload docker via systemd
|
||||
# reload : set things like "live-restore"
|
||||
ansible.builtin.systemd:
|
||||
name: docker
|
||||
state: reloaded
|
||||
listen: reload docker
|
||||
|
||||
- name: restart service docker
|
||||
# then restart :
|
||||
# - won't be disruptive with "live-restore"
|
||||
# - necessary when changing "log-driver"
|
||||
ansible.builtin.service:
|
||||
name: docker
|
||||
state: restarted
|
||||
when: docker_live_restore
|
||||
listen: reload docker
|
77
ansible/roles/traefik/tasks/main.yml
Normal file
77
ansible/roles/traefik/tasks/main.yml
Normal file
@ -0,0 +1,77 @@
|
||||
---
|
||||
- name: '{{ traefik_user }} | Create user'
|
||||
ansible.builtin.user:
|
||||
name: '{{ traefik_user }}'
|
||||
password: "{{ traefik_user.hash_password | default('!') }}"
|
||||
shell: '/bin/bash'
|
||||
append: true
|
||||
state: present
|
||||
no_log: true
|
||||
|
||||
- name: Ensure /etc/certs exist
|
||||
ansible.builtin.file:
|
||||
path: '{{ item.path }}'
|
||||
state: '{{ item.state }}'
|
||||
owner: '{{ traefik_user }}'
|
||||
group: '{{ traefik_user }}'
|
||||
mode: '0755'
|
||||
loop:
|
||||
- {path: '/home/{{ traefik_user }}/config/traefik/etc/certs', state: directory}
|
||||
- {path: '/home/{{ traefik_user }}/config/traefik/config', state: directory}
|
||||
|
||||
- name: 'Copy cert on {{ inventory_hostname }}.'
|
||||
ansible.builtin.copy:
|
||||
src: 'files/{{ item }}'
|
||||
dest: '/home/{{ traefik_user }}/config/traefik/{{ item }}'
|
||||
owner: '{{ traefik_user }}'
|
||||
group: '{{ traefik_user }}'
|
||||
mode: '0740'
|
||||
loop:
|
||||
- etc/certs/local.fr.crt
|
||||
- etc/certs/local.fr.key
|
||||
- config/dynamic_conf.toml
|
||||
- config/middlewares.yml
|
||||
- traefik.toml
|
||||
|
||||
- name: "Add network for container"
|
||||
community.docker.docker_network:
|
||||
name: "{{ item }}"
|
||||
internal: no
|
||||
ipam_config:
|
||||
- subnet: 172.18.0.0/16
|
||||
gateway: 172.18.0.1
|
||||
loop: "{{ traefik_dev_network }}"
|
||||
|
||||
- name: Create traefik container
|
||||
community.docker.docker_container:
|
||||
name: 'traefik'
|
||||
image: 'traefik:{{ traefik_dev_version }}'
|
||||
state: started
|
||||
restart: true
|
||||
restart_policy: on-failure
|
||||
restart_retries: 3
|
||||
purge_networks: yes
|
||||
networks_cli_compatible: false
|
||||
networks:
|
||||
- name: "{{ traefik_dev_network[0] }}"
|
||||
ipv4_address: 172.18.0.2
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- '/home/{{ traefik_user }}/config/traefik/etc/certs/:/etc/certs:ro'
|
||||
- '/home/{{ traefik_user }}/config/traefik/config:/etc/traefik/config:ro'
|
||||
- '/home/{{ traefik_user }}/config/traefik/traefik.toml:/traefik.toml:ro'
|
||||
labels:
|
||||
traefik.http.routers.api.rule: 'Host(`traefik.local.fr`)'
|
||||
traefik.http.routers.api.service: 'api@internal'
|
||||
traefik.http.middlewares.auth.basicauth.users: 'admin:$apr1$YNIut6CR$IAtMZlvNBBMXe7cRNXDG0.'
|
||||
traefik.http.routers.api.entrypoints: 'websecure'
|
||||
traefik.http.routers.api.tls: 'true'
|
||||
traefik.enable: 'true'
|
||||
ports:
|
||||
- '443:443'
|
||||
- '8090:8090'
|
||||
- '80:80'
|
||||
log_driver: 'json-file'
|
||||
log_opt:
|
||||
max-size: '1m'
|
||||
max-file: '10'
|
Loading…
Reference in New Issue
Block a user