Commit initial
This commit is contained in:
commit
3fcebb77a6
8 changed files with 180 additions and 0 deletions
12
CHANGELOG.md
Normal file
12
CHANGELOG.md
Normal file
|
@ -0,0 +1,12 @@
|
|||
# **Change Log** 📜📝
|
||||
|
||||
Les changements notables apportés au projet sont notés ici.
|
||||
|
||||
Document au format basé sur [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||
|
||||
Le projet suit les préconisations de [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
---
|
||||
## [**v0.1.0**] - 2024-11-12
|
||||
|
||||
* Première version - séparation des roles host et traefik
|
18
LICENSE
Normal file
18
LICENSE
Normal file
|
@ -0,0 +1,18 @@
|
|||
Copyright (c) Libretic
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software is provided "as is", without warranty of any kind, express or
|
||||
implied, including but not limited to the warranties of merchantability, fitness
|
||||
for a particular purpose and noninfringement. In no event shall the authors or
|
||||
copyright holders be liable for any claim, damages or other liability, whether
|
||||
in an action of contract, tort or otherwise, arising from, out of or in
|
||||
connection with the Software or the use or other dealings in the Software.
|
72
README.md
Normal file
72
README.md
Normal file
|
@ -0,0 +1,72 @@
|
|||
Role : docker_traefik
|
||||
=====================
|
||||
|
||||
Configure un conteneur traefik sur un serveur préparé avec docker_host prêt à servir de reverse proxy local pour les applications web.
|
||||
|
||||
|
||||
Prérequis et dépendances
|
||||
------------------------
|
||||
|
||||
- Rôle : docker_host
|
||||
|
||||
|
||||
Variables
|
||||
---------
|
||||
|
||||
Le rôle nécessite que soit fourni le paramètre suivant :
|
||||
|
||||
```yaml
|
||||
# Chaine user + mdp chiffré pour l'accès à l'interface de traefik sur le port 8443
|
||||
docker_traefik_admin: "admin:$$apr1$$HWiac5ae$$fBaMfNze1G96R2d5ntiID/"
|
||||
```
|
||||
|
||||
Les autres variables utilisables sont précisées ci-dessous (cf. defaults/main.yml) :
|
||||
|
||||
```yaml
|
||||
# Liste des reverse proxy de confiance pour traefik, pour la récupération des entêtes http
|
||||
docker_traefik_trusted_ips: []
|
||||
# Chemin d'installation
|
||||
docker_traefik_install_dir: /opt/traefik/
|
||||
# Interface d'écoute pour les flux entrants
|
||||
docker_traefik_listen_ip: "0.0.0.0"
|
||||
# Interface d'écoute pour l'administration de traefik
|
||||
docker_traefik_admin_listen_ip: "{{ docker_traefik_listen_ip }}"
|
||||
# Port d'écoute pour les flux http
|
||||
docker_traefik_web_port: 80
|
||||
# Port d'écoute pour les flux https
|
||||
docker_traefik_websecure_port: 443
|
||||
# Port d'écoute pour l'interface d'administration'
|
||||
docker_traefik_admin_port: 8443
|
||||
```
|
||||
|
||||
Par exemple :
|
||||
```yaml
|
||||
docker_host_traefik_admin: "admin:$$apr1$$HWiac5ae$$fBaMfNze1G96R2d5ntiID/"
|
||||
docker_host_traefik_trusted_ips: [ 10.1.2.3 ]
|
||||
```
|
||||
|
||||
A noter : la valeur de docker_host_traefik_admin pour un compte d'accès "admin" avec mot de passe "4dm1n" s'obtient par :
|
||||
```sh
|
||||
echo $(htpasswd -nb admin 4dm1n) | sed -e s/\\$/\\$\\$/g
|
||||
```
|
||||
|
||||
Exemple de Playbook
|
||||
-------------------
|
||||
|
||||
Le rôle peut s'utiliser sans paramètre particulier sur un serveur préparé avec docker_host.
|
||||
|
||||
```yaml
|
||||
- hosts: servers
|
||||
vars:
|
||||
docker_host_traefik_admin: "admin:$$apr1$$HWiac5ae$$fBaMfNze1G96R2d5ntiID/"
|
||||
|
||||
roles:
|
||||
- docker_host
|
||||
- docker_traefik
|
||||
```
|
||||
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
MIT
|
8
defaults/main.yml
Normal file
8
defaults/main.yml
Normal file
|
@ -0,0 +1,8 @@
|
|||
docker_traefik_trusted_ips: []
|
||||
docker_traefik_listen_ip: "0.0.0.0"
|
||||
docker_traefik_install_dir: /opt/traefik/
|
||||
docker_traefik_admin_listen_ip: "{{ docker_traefik_listen_ip }}"
|
||||
|
||||
docker_traefik_web_port: 80
|
||||
docker_traefik_websecure_port: 443
|
||||
docker_traefik_admin_port: 8443
|
4
handlers/main.yml
Normal file
4
handlers/main.yml
Normal file
|
@ -0,0 +1,4 @@
|
|||
- name: Docker-compose-up # noqa: no-changed-when
|
||||
ansible.builtin.command: docker compose up -d
|
||||
args:
|
||||
chdir: /opt/{{ docker_traefik_install_dir }}/
|
6
meta/main.yml
Normal file
6
meta/main.yml
Normal file
|
@ -0,0 +1,6 @@
|
|||
galaxy_info:
|
||||
author: Olivier Navas
|
||||
description: Prepare traefik sur un serveur avec docker_host
|
||||
license: MIT
|
||||
min_ansible_version: 2.9
|
||||
galaxy_tags: []
|
16
tasks/main.yml
Normal file
16
tasks/main.yml
Normal file
|
@ -0,0 +1,16 @@
|
|||
- name: Traefik network
|
||||
community.docker.docker_network:
|
||||
name: traefik
|
||||
|
||||
- name: Traefik dir
|
||||
ansible.builtin.file:
|
||||
path: "{{ docker_traefik_install_dir }}"
|
||||
state: directory
|
||||
mode: u=rwx,g=rx,o=
|
||||
|
||||
- name: Traefik compose
|
||||
ansible.builtin.template:
|
||||
src: traefik-docker-compose.yml.j2
|
||||
dest: "{{ docker_traefik_install_dir }}/docker-compose.yml"
|
||||
mode: u=rw,g=r,o=r
|
||||
notify: Docker-compose-up
|
44
templates/traefik-docker-compose.yml.j2
Normal file
44
templates/traefik-docker-compose.yml.j2
Normal file
|
@ -0,0 +1,44 @@
|
|||
# {{ ansible_managed }}
|
||||
|
||||
networks:
|
||||
traefik:
|
||||
external: true
|
||||
|
||||
services:
|
||||
traefik:
|
||||
image: traefik:v3
|
||||
restart: always
|
||||
command:
|
||||
- "--log.level=INFO"
|
||||
- "--accesslog=true"
|
||||
- "--accesslog.fields.names.StartUTC=drop"
|
||||
- "--api=true"
|
||||
- "--api.dashboard=true"
|
||||
- "--providers.docker=true"
|
||||
- "--providers.docker.exposedbydefault=false"
|
||||
- "--entrypoints.web.address=:{{ docker_traefik_web_port }}"
|
||||
- "--entryPoints.web.forwardedHeaders.trustedIPs={{ docker_traefik_trusted_ips }}"
|
||||
- "--entrypoints.websecure.address=:{{ docker_traefik_websecure_port }}"
|
||||
- "--entryPoints.websecure.forwardedHeaders.trustedIPs={{ docker_traefik_trusted_ips }}"
|
||||
- "--entrypoints.api.address=:{{ docker_traefik_admin_port }}"
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.docker.network=traefik"
|
||||
- "traefik.port={{ docker_traefik_admin_port }}"
|
||||
- "traefik.http.routers.api.entrypoints=api"
|
||||
- "traefik.http.routers.api.rule=(PathPrefix(`/api`) || PathPrefix(`/dashboard`))"
|
||||
- "traefik.http.routers.api.service=api@internal"
|
||||
- "traefik.http.routers.api.middlewares=auth"
|
||||
- "traefik.http.routers.api.tls"
|
||||
- "traefik.http.middlewares.auth.basicauth.users={{ docker_traefik_admin }}"
|
||||
ports:
|
||||
- "{{ docker_traefik_listen_ip }}:{{ docker_traefik_web_port }}:{{ docker_traefik_web_port }}"
|
||||
- "{{ docker_traefik_listen_ip }}:{{ docker_traefik_websecure_port }}:{{ docker_traefik_websecure_port }}"
|
||||
- "{{ docker_traefik_admin_listen_ip }}:{{ docker_traefik_admin_port }}:{{ docker_traefik_admin_port }}"
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
environment:
|
||||
- TZ=Europe/Paris
|
||||
networks:
|
||||
- traefik
|
||||
userns_mode: "host"
|
Loading…
Reference in a new issue