Bootstrap caddy role
This commit is contained in:
commit
91b6cd5a2e
12 changed files with 288 additions and 0 deletions
13
LICENCE
Normal file
13
LICENCE
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||||
|
Version 2, December 2004
|
||||||
|
|
||||||
|
Copyright (C) 2019 Wilfried OLLIVIER <wollivier@fdn.fr>
|
||||||
|
|
||||||
|
Everyone is permitted to copy and distribute verbatim or modified
|
||||||
|
copies of this license document, and changing it is allowed as long
|
||||||
|
as the name is changed.
|
||||||
|
|
||||||
|
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. You just DO WHAT THE FUCK YOU WANT TO.
|
47
README.md
Normal file
47
README.md
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
galaxy-caddy
|
||||||
|
============
|
||||||
|
|
||||||
|
Install and update Caddy webserver on Debian
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Role Variables
|
||||||
|
--------------
|
||||||
|
|
||||||
|
- caddy_home: home of caddy user
|
||||||
|
- caddy_logs: logs directory
|
||||||
|
- caddy_conf: conf directory
|
||||||
|
- caddy_confd: confd directory
|
||||||
|
- caddy_www: directory used to store websites sources
|
||||||
|
- caddy_email: email used to register ACME/Let's Encrypt stuff
|
||||||
|
- caddy_update: yes/no - activate caddy updates
|
||||||
|
|
||||||
|
- test_url: url used for the test page
|
||||||
|
- test_https: should the test page use https
|
||||||
|
- test_name: name of the test
|
||||||
|
- test_code: test page source code directory
|
||||||
|
- test_www: yes/no - enable redirection from www. to .
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Example Playbook
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too:
|
||||||
|
|
||||||
|
- hosts: servers
|
||||||
|
roles:
|
||||||
|
- { role: galaxy-caddy, test_url: test.io }
|
||||||
|
|
||||||
|
Run tests
|
||||||
|
---------
|
||||||
|
|
||||||
|
Ensure galaxy-vagrant is up
|
||||||
|
|
||||||
|
ansible-playbook -i tests/inventory tests/test.yml
|
16
defaults/main.yml
Normal file
16
defaults/main.yml
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
---
|
||||||
|
# defaults file for galaxy-caddy
|
||||||
|
|
||||||
|
caddy_home: /srv/caddy
|
||||||
|
caddy_logs: /srv/caddy/logs
|
||||||
|
caddy_conf: /etc/caddy
|
||||||
|
caddy_confd: /etc/caddy/conf.d
|
||||||
|
caddy_www: /var/www/caddy
|
||||||
|
caddy_email: none@none.com
|
||||||
|
caddy_update: yes
|
||||||
|
|
||||||
|
test_url: none.none
|
||||||
|
test_https: no
|
||||||
|
test_name: test
|
||||||
|
test_code: /var/www/caddy/test
|
||||||
|
test_www: no
|
31
files/test.html
Normal file
31
files/test.html
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
|
||||||
|
<title>Awo !</title>
|
||||||
|
</head>
|
||||||
|
<body bgcolor="white">
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
@@@@@@@@@@@@@@@@@@@@@@@'~~~ ~~~`@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
@@@@@@@@@@@@@@@@@@' `@@@@@@@@@@@@@@@@@@@@
|
||||||
|
@@@@@@@@@@@@@@@' `@@@@@@@@@@@@@@@@@
|
||||||
|
@@@@@@@@@@@@@' `@@@@@@@@@@@@@@@
|
||||||
|
@@@@@@@@@@@' `@@@@@@@@@@@@@
|
||||||
|
@@@@@@@@@@' `@@@@@@@@@@@@
|
||||||
|
@@@@@@@@@' `@@@@@@@@@@@
|
||||||
|
@@@@@@@@@ @@@@@@@@@@@
|
||||||
|
@@@@@@@@' n, `@@@@@@@@@@
|
||||||
|
@@@@@@@@ _/ | _ @@@@@@@@@@
|
||||||
|
@@@@@@@@ /' `'/ @@@@@@@@@@
|
||||||
|
@@@@@@@@a <~ .' a@@@@@@@@@@
|
||||||
|
@@@@@@@@@ .' | @@@@@@@@@@@
|
||||||
|
@@@@@@@@@a _/ | a@@@@@@@@@@@
|
||||||
|
@@@@@@@@@@a _/ `.`. a@@@@@@@@@@@@
|
||||||
|
@@@@@@@@@@@a ____/ ' \__ | |______ a@@@@@@@@@@@@@
|
||||||
|
@@@@@@@@@@@@@a__/___/ /__\ \ \ \___.a@@@@@@@@@@@@@@@
|
||||||
|
@@@@@@@@@@@@@/ (___.'\_______)\_|_| \@@@@@@@@@@@@@@@@
|
||||||
|
@@@@@@@@@@@@|\________ ~~~~~\@@@@@@@@@@
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
13
handlers/main.yml
Normal file
13
handlers/main.yml
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
---
|
||||||
|
# handlers file for galaxy-caddy
|
||||||
|
|
||||||
|
- name: start caddy
|
||||||
|
service: name=caddy
|
||||||
|
state=started
|
||||||
|
enabled=yes
|
||||||
|
daemon_reload=yes
|
||||||
|
|
||||||
|
- name: restart caddy
|
||||||
|
service: name=caddy
|
||||||
|
state=restarted
|
||||||
|
enabled=yes
|
15
meta/main.yml
Normal file
15
meta/main.yml
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
galaxy_info:
|
||||||
|
author: Wilfried OLLIVIER
|
||||||
|
description: Install Caddy webserver on Debian
|
||||||
|
company: none
|
||||||
|
|
||||||
|
license: WTFPL
|
||||||
|
|
||||||
|
min_ansible_version: 2.4
|
||||||
|
|
||||||
|
galaxy_tags:
|
||||||
|
- caddy
|
||||||
|
- debian
|
||||||
|
- webserver
|
||||||
|
|
||||||
|
dependencies: []
|
85
tasks/main.yml
Normal file
85
tasks/main.yml
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
---
|
||||||
|
# tasks file for galaxy-caddy
|
||||||
|
|
||||||
|
- name: Create Caddy user
|
||||||
|
user: name=caddy
|
||||||
|
system=yes
|
||||||
|
createhome=yes
|
||||||
|
home={{ caddy_home }}
|
||||||
|
shell=/bin/nologin
|
||||||
|
tags: user
|
||||||
|
|
||||||
|
- name: Get all Caddy releases
|
||||||
|
get_url: url=https://api.github.com/repos/mholt/caddy/git/refs/tags
|
||||||
|
dest={{ caddy_home }}/releases
|
||||||
|
force=yes
|
||||||
|
when: caddy_update
|
||||||
|
register: caddy_releases_cache
|
||||||
|
|
||||||
|
- name: Download new Caddy version or build
|
||||||
|
get_url: url=https://caddyserver.com/download/linux/amd64?license=personal
|
||||||
|
dest=/tmp/caddy.tar.gz
|
||||||
|
force=yes
|
||||||
|
when: caddy_releases_cache.changed
|
||||||
|
register: caddy_binary_cache
|
||||||
|
|
||||||
|
- name: Extract new Caddy version or build
|
||||||
|
unarchive: src=/tmp/caddy.tar.gz
|
||||||
|
dest=/usr/bin/
|
||||||
|
copy=no
|
||||||
|
when: caddy_binary_cache.changed
|
||||||
|
|
||||||
|
- name: Ensure setcap bin
|
||||||
|
apt: name=libcap2-bin
|
||||||
|
state=present
|
||||||
|
|
||||||
|
- name: Check if the binary can bind to TCP port <1024
|
||||||
|
shell: getcap /usr/bin/caddy | grep cap_net_bind_service
|
||||||
|
failed_when: False
|
||||||
|
changed_when: False
|
||||||
|
register: caddy_bind_cap
|
||||||
|
|
||||||
|
- name: Set capability on the binary file to be able to bind to TCP port <1024
|
||||||
|
command: setcap cap_net_bind_service=+ep /usr/bin/caddy
|
||||||
|
when: caddy_bind_cap.rc > 0
|
||||||
|
|
||||||
|
- name: Create caddy needed directories
|
||||||
|
file: path={{ item }}
|
||||||
|
state=directory
|
||||||
|
owner=caddy
|
||||||
|
with_items:
|
||||||
|
- "{{ caddy_conf }}"
|
||||||
|
- "{{ caddy_confd }}"
|
||||||
|
- "{{ caddy_home }}/logs"
|
||||||
|
- "{{ caddy_www }}"
|
||||||
|
|
||||||
|
- name: Caddyfile
|
||||||
|
template: src=caddyfile.j2
|
||||||
|
dest={{ caddy_conf }}/Caddyfile
|
||||||
|
notify: restart caddy
|
||||||
|
|
||||||
|
- name: Push vhost test page caddy config
|
||||||
|
template: src=http.caddy.j2
|
||||||
|
dest={{ caddy_confd }}/test.caddy
|
||||||
|
notify: restart caddy
|
||||||
|
|
||||||
|
- name: Create test www dir
|
||||||
|
file: path={{ caddy_www }}/test
|
||||||
|
state=directory
|
||||||
|
owner=caddy
|
||||||
|
group=caddy
|
||||||
|
|
||||||
|
- name: Push test page source
|
||||||
|
copy: src=test.html
|
||||||
|
dest={{ caddy_www }}/test/index.html
|
||||||
|
|
||||||
|
- name: Create Test page logs dir
|
||||||
|
file: path={{ caddy_home }}/logs/test
|
||||||
|
state=directory
|
||||||
|
owner=caddy
|
||||||
|
|
||||||
|
- name: Systemd service
|
||||||
|
template: src=caddy.service.j2
|
||||||
|
dest=/etc/systemd/system/caddy.service
|
||||||
|
notify:
|
||||||
|
- start caddy
|
17
templates/caddy.service.j2
Executable file
17
templates/caddy.service.j2
Executable file
|
@ -0,0 +1,17 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Caddy HTTP/2 web server
|
||||||
|
Documentation=https://caddyserver.com/docs
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
WorkingDirectory={{ caddy_home }}
|
||||||
|
User=caddy
|
||||||
|
LimitNOFILE=8192
|
||||||
|
PIDFile={{ caddy_home }}/caddy.pid
|
||||||
|
ExecStart=/usr/bin/caddy -agree=true -email={{ caddy_email }} -conf=/etc/caddy/Caddyfile -pidfile={{ caddy_home }}/caddy.pid
|
||||||
|
ExecReload=/bin/kill -USR1 $MAINPID
|
||||||
|
Restart=on-failure
|
||||||
|
StartLimitInterval=600
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
1
templates/caddyfile.j2
Executable file
1
templates/caddyfile.j2
Executable file
|
@ -0,0 +1 @@
|
||||||
|
import {{ caddy_confd }}/*
|
44
templates/http.caddy.j2
Normal file
44
templates/http.caddy.j2
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
{% if test_https %}
|
||||||
|
{{ test_url }} {
|
||||||
|
{% else %}
|
||||||
|
http://{{ test_url }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if test_https %}
|
||||||
|
header / {
|
||||||
|
# Enable HTTP Strict Transport Security (HSTS) to force clients to always
|
||||||
|
# connect via HTTPS (do not use if only testing)
|
||||||
|
Strict-Transport-Security "max-age=31536000;"
|
||||||
|
# Enable cross-site filter (XSS) and tell browser to block detected attacks
|
||||||
|
X-XSS-Protection "1; mode=block"
|
||||||
|
# Prevent some browsers from MIME-sniffing a response away from the declared Content-Type
|
||||||
|
X-Content-Type-Options "nosniff"
|
||||||
|
# Disallow the site to be rendered within a frame (clickjacking protection)
|
||||||
|
X-Frame-Options "DENY"
|
||||||
|
}
|
||||||
|
{% else %}
|
||||||
|
tls off
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
log {{ caddy_logs }}/{{ test_name }}/access.log {
|
||||||
|
rotate_size 100
|
||||||
|
rotate_age 30
|
||||||
|
rotate_keep 10
|
||||||
|
}
|
||||||
|
|
||||||
|
root {{ test_code }}/
|
||||||
|
|
||||||
|
gzip {
|
||||||
|
ext .jpg
|
||||||
|
level 9
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
{% if test_www %}
|
||||||
|
www.{{ test_url }} {
|
||||||
|
|
||||||
|
redir https://{{ test_url }}
|
||||||
|
|
||||||
|
}
|
||||||
|
{% endif %}
|
1
tests/inventory
Normal file
1
tests/inventory
Normal file
|
@ -0,0 +1 @@
|
||||||
|
galaxy-vagrant.example.com
|
5
tests/test.yml
Normal file
5
tests/test.yml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
- hosts: galaxy-vagrant.example.com
|
||||||
|
remote_user: root
|
||||||
|
roles:
|
||||||
|
- { role: ../galaxy-caddy, test_url: test.none }
|
Loading…
Reference in a new issue