diff --git a/README.md b/README.md index 959020b..50ae765 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ > *Linderhof* — the smallest and most intimate of Ludwig II's Bavarian palaces, the only one he lived to see completed; built entirely to his own vision as a private retreat. ([Wikipedia](https://en.wikipedia.org/wiki/Linderhof_Palace)) +**[codeberg.org/opennomad/linderhof](https://codeberg.org/opennomad/linderhof)** + a self-hosting stack based on ansible and docker compose that comes with - email diff --git a/roles/caddy/tasks/main.yml b/roles/caddy/tasks/main.yml index db38c66..74e55a4 100644 --- a/roles/caddy/tasks/main.yml +++ b/roles/caddy/tasks/main.yml @@ -38,6 +38,16 @@ mode: "0775" # also allow members of the docker group to write loop: "{{ caddy_sites }}" +- name: Deploy default landing page for empty sites + template: + src: index.html.j2 + dest: "/srv/caddy/sites/{{ item }}/index.html" + owner: root + group: docker + mode: "0644" + force: false # never overwrite real content + loop: "{{ caddy_sites }}" + - name: Install Caddyfile template: src: Caddyfile.j2 diff --git a/roles/caddy/templates/index.html.j2 b/roles/caddy/templates/index.html.j2 new file mode 100644 index 0000000..5dba69b --- /dev/null +++ b/roles/caddy/templates/index.html.j2 @@ -0,0 +1,86 @@ +{# + Adapted from "Coming Soon" by Steven Tang (github.com/YC/coming-soon) + MIT License — https://github.com/YC/coming-soon/blob/master/LICENSE +#} + + + + + + {{ item }} + + + +
+

{{ item }}.

+

Something's on its way.

+
+ + + diff --git a/roles/dns/defaults/main.yml b/roles/dns/defaults/main.yml index 0db6919..2329672 100644 --- a/roles/dns/defaults/main.yml +++ b/roles/dns/defaults/main.yml @@ -1,2 +1,3 @@ --- dns_zones: [] +hcloud_labels: {} # override in config.yml — see config.yml.setup for recommended labels diff --git a/roles/dns/tasks/extra_mail_domain.yml b/roles/dns/tasks/extra_mail_domain.yml index c2bbc41..0996821 100644 --- a/roles/dns/tasks/extra_mail_domain.yml +++ b/roles/dns/tasks/extra_mail_domain.yml @@ -7,6 +7,7 @@ ttl: 300 records: - value: "{{ server_ip }}" + labels: "{{ hcloud_labels }}" api_token: "{{ hcloud_token }}" state: present @@ -18,6 +19,7 @@ ttl: 300 records: - value: "10 {{ mail_hostname }}." + labels: "{{ hcloud_labels }}" api_token: "{{ hcloud_token }}" state: present @@ -29,6 +31,7 @@ ttl: 300 records: - value: "{{ 'v=spf1 mx -all' | hetzner.hcloud.txt_record }}" + labels: "{{ hcloud_labels }}" api_token: "{{ hcloud_token }}" state: present @@ -40,6 +43,7 @@ ttl: 300 records: - value: "{{ ('v=DMARC1; p=none; rua=mailto:dmarc@' + extra_domain) | hetzner.hcloud.txt_record }}" + labels: "{{ hcloud_labels }}" api_token: "{{ hcloud_token }}" state: present @@ -51,6 +55,7 @@ ttl: 300 records: - value: "{{ dkim_keys[extra_domain] | hetzner.hcloud.txt_record }}" + labels: "{{ hcloud_labels }}" api_token: "{{ hcloud_token }}" state: present when: dkim_keys is defined and extra_domain in dkim_keys diff --git a/roles/dns/tasks/main.yml b/roles/dns/tasks/main.yml index 003f616..33da81c 100644 --- a/roles/dns/tasks/main.yml +++ b/roles/dns/tasks/main.yml @@ -3,6 +3,7 @@ hetzner.hcloud.zone: name: "{{ item.zone }}" mode: primary + labels: "{{ hcloud_labels }}" api_token: "{{ hcloud_token }}" state: present loop: "{{ dns_zones }}" @@ -17,6 +18,7 @@ type: "{{ item.1.type }}" ttl: "{{ item.1.ttl | default(300) }}" records: "{{ item.1.records }}" + labels: "{{ hcloud_labels }}" api_token: "{{ hcloud_token }}" state: present loop: "{{ dns_zones | subelements('records') }}" @@ -29,6 +31,7 @@ hetzner.hcloud.zone: name: "{{ item }}" mode: primary + labels: "{{ hcloud_labels }}" api_token: "{{ hcloud_token }}" state: present loop: "{{ mail_domains | difference([domain]) }}" @@ -51,6 +54,7 @@ ttl: 300 records: - value: "{{ item.value | hetzner.hcloud.txt_record }}" + labels: "{{ hcloud_labels }}" api_token: "{{ hcloud_token }}" state: present loop: "{{ dkim_keys | default({}) | dict2items }}" diff --git a/roles/provision/defaults/main.yml b/roles/provision/defaults/main.yml index f542660..17e035e 100644 --- a/roles/provision/defaults/main.yml +++ b/roles/provision/defaults/main.yml @@ -3,3 +3,4 @@ cloud_provider: hetzner hcloud_server_type: cx23 hcloud_image: ubuntu-24.04 hcloud_location: fsn1 +hcloud_labels: {} # override in config.yml — see config.yml.setup for recommended labels diff --git a/setup.sh b/setup.sh index 6d72c3a..98246b8 100755 --- a/setup.sh +++ b/setup.sh @@ -45,6 +45,8 @@ ok "collections installed" echo info "stack setup" prompt stack_name "Stack name" "home" +export stack_name + LINDERHOF_CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/linderhof" STACK_DIR="$LINDERHOF_CONFIG_DIR/$stack_name" @@ -174,7 +176,7 @@ if [[ -f "$CONFIG" ]]; then warn "config.yml already exists — skipping (not overwriting)" else info "writing config.yml..." - envsubst '$admin_user $server_name $server_ip $domain $ssh_key_pub' \ + envsubst '$admin_user $server_name $server_ip $domain $ssh_key_pub $stack_name' \ < "$TEMPLATES/config.yml.setup" > "$CONFIG" ok "config.yml created" fi