aboutsummaryrefslogtreecommitdiff
path: root/ansible/roles/traefik-server
diff options
context:
space:
mode:
Diffstat (limited to 'ansible/roles/traefik-server')
-rw-r--r--ansible/roles/traefik-server/handlers/main.yml5
-rw-r--r--ansible/roles/traefik-server/tasks/main.yml56
-rw-r--r--ansible/roles/traefik-server/templates/traefik.service.j252
3 files changed, 113 insertions, 0 deletions
diff --git a/ansible/roles/traefik-server/handlers/main.yml b/ansible/roles/traefik-server/handlers/main.yml
new file mode 100644
index 0000000..6e34db4
--- /dev/null
+++ b/ansible/roles/traefik-server/handlers/main.yml
@@ -0,0 +1,5 @@
+- name: systemctl restart traefik
+ systemd:
+ daemon_reload: true
+ unit: traefik
+ state: restarted
diff --git a/ansible/roles/traefik-server/tasks/main.yml b/ansible/roles/traefik-server/tasks/main.yml
new file mode 100644
index 0000000..98d45e5
--- /dev/null
+++ b/ansible/roles/traefik-server/tasks/main.yml
@@ -0,0 +1,56 @@
+- name: Download traefik
+ become: true
+ ansible.builtin.get_url:
+ url: https://github.com/traefik/traefik/releases/download/v{{ traefik_version }}/traefik_v{{ traefik_version }}_linux_amd64.tar.gz
+ dest: /tmp/traefik-{{ traefik_version }}.tar.gz
+ checksum: "{{ traefik_download|default('') }}"
+ register: download
+
+- name: Download checksum
+ debug:
+ msg: download.checksum_src={{ download.checksum_src }}
+ when: download.status_code == 200
+
+- name: mkdir /tmp/traefik-x.y.z
+ become: true
+ file:
+ path: /tmp/traefik-{{ traefik_version }}
+ state: directory
+
+- name: Extract traefik
+ become: true
+ unarchive:
+ remote_src: true
+ src: /tmp/traefik-{{ traefik_version }}.tar.gz
+ dest: /tmp/traefik-{{ traefik_version }}
+
+- name: Install traefik
+ become: true
+ copy:
+ remote_src: true
+ src: /tmp/traefik-{{ traefik_version }}/traefik
+ dest: /usr/local/bin/traefik
+ owner: root
+ group: root
+ mode: 0750
+
+- name: /etc/systemd/services/traefik.service
+ become: true
+ template:
+ src: traefik.service.j2
+ dest: /etc/systemd/system/traefik.service
+ owner: root
+ group: root
+ mode: 0644
+
+- name: mkdir /etc/traefik
+ become: true
+ file:
+ path: /etc/traefik
+ state: directory
+
+- name: mkdir /etc/traefik/acme
+ become: true
+ file:
+ path: /etc/traefik/acme
+ state: directory
diff --git a/ansible/roles/traefik-server/templates/traefik.service.j2 b/ansible/roles/traefik-server/templates/traefik.service.j2
new file mode 100644
index 0000000..14bc403
--- /dev/null
+++ b/ansible/roles/traefik-server/templates/traefik.service.j2
@@ -0,0 +1,52 @@
+[Unit]
+Description=traefik proxy
+After=network-online.target
+Wants=network-online.target systemd-networkd-wait-online.service
+
+AssertFileIsExecutable=/usr/local/bin/traefik
+AssertPathExists=/etc/traefik/traefik.toml
+
+[Service]
+Restart=on-abnormal
+
+#User=traefik
+#Group=traefik
+
+; Always set "-root" to something safe in case it gets forgotten in the traefikfile.
+ExecStart=/usr/local/bin/traefik --configfile=/etc/traefik/traefik.toml
+
+; Limit the number of file descriptors; see `man systemd.exec` for more limit settings.
+LimitNOFILE=1048576
+
+; Use private /tmp and /var/tmp, which are discarded after traefik stops.
+PrivateTmp=true
+
+; Use a minimal /dev (May bring additional security if switched to 'true')
+PrivateDevices=true
+
+; Hide /home, /root, and /run/user. Nobody will steal your SSH-keys.
+ProtectHome=true
+
+; Make /usr, /boot, /etc and possibly some more folders read-only.
+ProtectSystem=full
+
+; ... except /etc/ssl/traefik, because we want Letsencrypt-certificates there.
+; This merely retains r/w access rights, it does not add any new. Must still be writable on the host!
+#ReadWriteDirectories=/etc/traefik/acme
+
+; The following additional security directives only work with systemd v229 or later.
+; They further restrict privileges that can be gained by traefik. Uncomment if you like.
+; Note that you may have to add capabilities required by any plugins in use.
+CapabilityBoundingSet=CAP_NET_BIND_SERVICE
+AmbientCapabilities=CAP_NET_BIND_SERVICE
+NoNewPrivileges=true
+{% set env=traefik_environment.items()|default({}) %}
+{% if env %}
+
+{% for k, v in env %}
+Environment="{{ k }}={{ v }}"
+{% endfor %}
+{% endif %}
+
+[Install]
+WantedBy=multi-user.target