Compare commits

...
Sign in to create a new pull request.

31 commits

Author SHA1 Message Date
944c8cde82
onlyoffice(host): move to new network and hostname 2025-12-17 03:34:39 +01:00
366456eff8
keycloak(host): move to new network and hostname
Also just listen on port 8443 for keycloak-admin proxy protocol.
2025-12-16 21:50:40 +01:00
1ca71a053e
pad(host): move to new network and hostname 2025-12-16 21:12:21 +01:00
b9add5bda3
cloud(host): set correct new proxy protocol reverse proxy ip 2025-12-16 20:59:15 +01:00
570600fce3
eh22-wiki(host): move to new network and hostname 2025-12-16 20:58:05 +01:00
5a476f2103
cloud(host): move to new network and hostname 2025-12-16 20:47:44 +01:00
b72dee0d6d
wiki(host): actually have nginx listen on v6 2025-12-16 19:52:24 +01:00
8b94a49f5e
wiki(host): move to new network and internal hostname 2025-12-16 19:23:33 +01:00
5f98dca56c
router(host): expose public v6 networks
Also prepare for exposing public v4 networks later.
2025-12-16 19:03:36 +01:00
66ee44366b public-reverse-proxy: New IP of wiki VM 2025-12-14 15:39:03 +01:00
183b91b9f2
router(host): add nftables config for basic router functionality 2025-12-13 22:07:38 +01:00
d0618e3820
nftables(role): introduce role for deploying nftables 2025-12-13 22:07:37 +01:00
a9e394da06
router(host): add systemd-networkd-based network config 2025-12-13 22:07:37 +01:00
d6ba70523c
systemd_networkd(role): introd. role for deploy. systemd-networkd config 2025-12-13 22:07:35 +01:00
766aa125c4
router(host): introduce router 2025-12-13 22:07:07 +01:00
c39cb0e390
we dont need to set a specific alloy version 2025-12-06 22:11:53 +01:00
df3710f019
grafana: set alloy to version v1.11.3
1.12.0 is buggy
2025-12-02 22:55:29 +01:00
0eaaf9227c Update all stable non-major dependencies 2025-11-19 13:30:39 +00:00
ddab157600
don't pin digests anymore
The benefit of digest pinning isn't that great for this project really
and it comes at the cost of more issues and additional renovate noise,
so just don't anymore.
Adjust renovate config accordingly as well.
2025-11-18 14:24:21 +01:00
80acd5fdc6
grafana: store date for up to 28 days 2025-11-11 23:03:59 +01:00
5f6000adca
ssh_config: also enable sntrup761x25519-sha512 for Debain 13
tldr: PQC algorithms are complex but sntrup still is not brocken
2025-11-11 22:47:42 +01:00
6fea98ffd2 Redirect to 39c3 instead of eh22 2025-11-07 20:09:02 +01:00
63917722ff
fix foobazdmx role
poetry is available via apt now so we install it that way
2025-11-06 21:19:20 +01:00
aeec08fce8
remove distribution checks
Signed-Off-By: june
2025-11-06 21:16:42 +01:00
cffe5c2b16
dooris: use hostname instead of IP 2025-11-06 18:25:29 +01:00
d690f81e3d
deploy_ssh_server_config: setup ssh pq cryptography 2025-11-05 23:08:28 +01:00
ae60d6fea6
docker_compose(role): use community.docker.docker_compose_v2 module
Use the community.docker.docker_compose_v2 module as it supports proper
changed handling out of the box, making the roles code more
straightforward and work. Also just do a docker compose restart instead
of having the custom docker compose reload script.

https://docs.ansible.com/ansible/latest/collections/community/docker/docker_compose_v2_module.html
2025-11-02 23:13:20 +01:00
9f8d2d89cd
docker_compose(role): move argument documentation to README
Do this to match newer roles and since reading documentation from
argument_specs is quite unergonomic.
2025-11-02 22:32:20 +01:00
e390b7c202
docker_compose(role): remove unnecessary hosts section from README
The hosts section isn't really relevant for that role, so remove it.
2025-11-02 22:32:20 +01:00
8cefd07618
docker_compose(role): remove distribution check
The distribution check isn't really needed in our setup anyway and just
adds unnecessary noise.
2025-11-02 22:32:20 +01:00
c3f71b1f08 sunders: replace password in healthcheck with dynamic secret
CCCHH/ansible-infra#55

Co-authored-by: ViMaSter <vincent@mahn.ke>
Co-committed-by: ViMaSter <vincent@mahn.ke>
2025-11-02 20:24:55 +01:00
62 changed files with 427 additions and 185 deletions

View file

@ -10,7 +10,7 @@ jobs:
name: Ansible Lint name: Ansible Lint
runs-on: docker runs-on: docker
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 - uses: actions/checkout@v5
- name: Install pip - name: Install pip
run: | run: |
apt update apt update
@ -24,7 +24,7 @@ jobs:
# work in our environmnet. # work in our environmnet.
# Rather manually setup python (pip) before instead. # Rather manually setup python (pip) before instead.
- name: Run ansible-lint - name: Run ansible-lint
uses: https://github.com/ansible/ansible-lint@d7cd7cfa2469536527aceaef9ef2ec6f2fb331cb # v25.9.2 uses: https://github.com/ansible/ansible-lint@v25.11.0
with: with:
setup_python: "false" setup_python: "false"
requirements_file: "requirements.yml" requirements_file: "requirements.yml"

View file

@ -1,11 +1,11 @@
# renovate: datasource=docker depName=git.hamburg.ccc.de/ccchh/oci-images/nextcloud # renovate: datasource=docker depName=git.hamburg.ccc.de/ccchh/oci-images/nextcloud
nextcloud__version: 32 nextcloud__version: 32
# renovate: datasource=docker depName=docker.io/library/postgres # renovate: datasource=docker depName=docker.io/library/postgres
nextcloud__postgres_version: 15.14 nextcloud__postgres_version: 15.15
nextcloud__fqdn: cloud.hamburg.ccc.de nextcloud__fqdn: cloud.hamburg.ccc.de
nextcloud__data_dir: /data/nextcloud nextcloud__data_dir: /data/nextcloud
nextcloud__extra_configuration: "{{ lookup('ansible.builtin.template', 'resources/chaosknoten/cloud/nextcloud/extra_configuration.config.php.j2') }}" nextcloud__extra_configuration: "{{ lookup('ansible.builtin.template', 'resources/chaosknoten/cloud/nextcloud/extra_configuration.config.php.j2') }}"
nextcloud__use_custom_new_user_skeleton: true nextcloud__use_custom_new_user_skeleton: true
nextcloud__custom_new_user_skeleton_directory: "resources/chaosknoten/cloud/nextcloud/new_user_skeleton_directory/" nextcloud__custom_new_user_skeleton_directory: "resources/chaosknoten/cloud/nextcloud/new_user_skeleton_directory/"
nextcloud__proxy_protocol_reverse_proxy_ip: 172.31.17.140 nextcloud__proxy_protocol_reverse_proxy_ip: "2a00:14b0:4200:3000:125::1"
nextcloud__certbot_acme_account_email_address: le-admin@hamburg.ccc.de nextcloud__certbot_acme_account_email_address: le-admin@hamburg.ccc.de

View file

@ -53,7 +53,6 @@ nginx__configurations:
- name: metrics.hamburg.ccc.de - name: metrics.hamburg.ccc.de
content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/grafana/nginx/metrics.hamburg.ccc.de.conf') }}" content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/grafana/nginx/metrics.hamburg.ccc.de.conf') }}"
alloy_config: | alloy_config: |
prometheus.remote_write "default" { prometheus.remote_write "default" {
endpoint { endpoint {

View file

@ -1,5 +1,5 @@
# renovate: datasource=github-releases depName=netbox packageName=netbox-community/netbox # renovate: datasource=github-releases depName=netbox packageName=netbox-community/netbox
netbox__version: "v4.4.5" netbox__version: "v4.4.6"
netbox__config: "{{ lookup('ansible.builtin.template', 'resources/chaosknoten/netbox/netbox/configuration.py.j2') }}" netbox__config: "{{ lookup('ansible.builtin.template', 'resources/chaosknoten/netbox/netbox/configuration.py.j2') }}"
netbox__custom_pipeline_oidc_group_and_role_mapping: true netbox__custom_pipeline_oidc_group_and_role_mapping: true

View file

@ -0,0 +1,2 @@
systemd_networkd__config_dir: 'resources/chaosknoten/router/systemd_networkd/'
nftables__config: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/router/nftables/nftables.conf') }}"

View file

@ -7,13 +7,13 @@ all:
chaosknoten: chaosknoten:
ansible_host: chaosknoten.hamburg.ccc.de ansible_host: chaosknoten.hamburg.ccc.de
cloud: cloud:
ansible_host: cloud-intern.hamburg.ccc.de ansible_host: cloud.hosts.hamburg.ccc.de
ansible_user: chaos ansible_user: chaos
ansible_ssh_common_args: -J ssh://chaos@public-reverse-proxy.hamburg.ccc.de ansible_ssh_common_args: -J ssh://chaos@router.hamburg.ccc.de
eh22-wiki: eh22-wiki:
ansible_host: eh22-wiki-intern.hamburg.ccc.de ansible_host: eh22-wiki.hosts.hamburg.ccc.de
ansible_user: chaos ansible_user: chaos
ansible_ssh_common_args: -J ssh://chaos@public-reverse-proxy.hamburg.ccc.de ansible_ssh_common_args: -J ssh://chaos@router.hamburg.ccc.de
grafana: grafana:
ansible_host: grafana-intern.hamburg.ccc.de ansible_host: grafana-intern.hamburg.ccc.de
ansible_user: chaos ansible_user: chaos
@ -23,9 +23,9 @@ all:
ansible_user: chaos ansible_user: chaos
ansible_ssh_common_args: -J ssh://chaos@public-reverse-proxy.hamburg.ccc.de ansible_ssh_common_args: -J ssh://chaos@public-reverse-proxy.hamburg.ccc.de
keycloak: keycloak:
ansible_host: keycloak-intern.hamburg.ccc.de ansible_host: keycloak.hosts.hamburg.ccc.de
ansible_user: chaos ansible_user: chaos
ansible_ssh_common_args: -J ssh://chaos@public-reverse-proxy.hamburg.ccc.de ansible_ssh_common_args: -J ssh://chaos@router.hamburg.ccc.de
lists: lists:
ansible_host: lists.hamburg.ccc.de ansible_host: lists.hamburg.ccc.de
ansible_user: chaos ansible_user: chaos
@ -37,13 +37,13 @@ all:
ansible_user: chaos ansible_user: chaos
ansible_ssh_common_args: -J ssh://chaos@public-reverse-proxy.hamburg.ccc.de ansible_ssh_common_args: -J ssh://chaos@public-reverse-proxy.hamburg.ccc.de
onlyoffice: onlyoffice:
ansible_host: onlyoffice-intern.hamburg.ccc.de ansible_host: onlyoffice.hosts.hamburg.ccc.de
ansible_user: chaos ansible_user: chaos
ansible_ssh_common_args: -J ssh://chaos@public-reverse-proxy.hamburg.ccc.de ansible_ssh_common_args: -J ssh://chaos@router.hamburg.ccc.de
pad: pad:
ansible_host: pad-intern.hamburg.ccc.de ansible_host: pad.hosts.hamburg.ccc.de
ansible_user: chaos ansible_user: chaos
ansible_ssh_common_args: -J ssh://chaos@public-reverse-proxy.hamburg.ccc.de ansible_ssh_common_args: -J ssh://chaos@router.hamburg.ccc.de
pretalx: pretalx:
ansible_host: pretalx-intern.hamburg.ccc.de ansible_host: pretalx-intern.hamburg.ccc.de
ansible_user: chaos ansible_user: chaos
@ -51,10 +51,13 @@ all:
public-reverse-proxy: public-reverse-proxy:
ansible_host: public-reverse-proxy.hamburg.ccc.de ansible_host: public-reverse-proxy.hamburg.ccc.de
ansible_user: chaos ansible_user: chaos
wiki: router:
ansible_host: wiki-intern.hamburg.ccc.de ansible_host: router.hamburg.ccc.de
ansible_user: chaos ansible_user: chaos
ansible_ssh_common_args: -J ssh://chaos@public-reverse-proxy.hamburg.ccc.de wiki:
ansible_host: wiki.hosts.hamburg.ccc.de
ansible_user: chaos
ansible_ssh_common_args: -J ssh://chaos@router.hamburg.ccc.de
zammad: zammad:
ansible_host: zammad-intern.hamburg.ccc.de ansible_host: zammad-intern.hamburg.ccc.de
ansible_user: chaos ansible_user: chaos
@ -88,12 +91,19 @@ base_config_hosts:
pad: pad:
pretalx: pretalx:
public-reverse-proxy: public-reverse-proxy:
router:
tickets: tickets:
wiki: wiki:
zammad: zammad:
ntfy: ntfy:
sunders: sunders:
renovate: renovate:
systemd_networkd_hosts:
hosts:
router:
nftables_hosts:
hosts:
router:
docker_compose_hosts: docker_compose_hosts:
hosts: hosts:
ccchoir: ccchoir:
@ -173,6 +183,7 @@ infrastructure_authorized_keys_hosts:
pad: pad:
pretalx: pretalx:
public-reverse-proxy: public-reverse-proxy:
router:
wiki: wiki:
zammad: zammad:
ntfy: ntfy:

View file

@ -6,4 +6,3 @@ docker_compose__configuration_files:
content: "{{ lookup('ansible.builtin.template', 'resources/z9/yate/docker_compose/regexroute.conf.j2') }}" content: "{{ lookup('ansible.builtin.template', 'resources/z9/yate/docker_compose/regexroute.conf.j2') }}"
- name: regfile.conf - name: regfile.conf
content: "{{ lookup('ansible.builtin.template', 'resources/z9/yate/docker_compose/regfile.conf.j2') }}" content: "{{ lookup('ansible.builtin.template', 'resources/z9/yate/docker_compose/regfile.conf.j2') }}"
docker_compose__restart_cmd: "exec yate sh -c 'kill -1 1'"

View file

@ -4,7 +4,7 @@ all:
ansible_host: authoritative-dns.z9.ccchh.net ansible_host: authoritative-dns.z9.ccchh.net
ansible_user: chaos ansible_user: chaos
dooris: dooris:
ansible_host: 10.31.208.201 ansible_host: dooris.z9.ccchh.net
ansible_user: chaos ansible_user: chaos
light: light:
ansible_host: light.z9.ccchh.net ansible_host: light.z9.ccchh.net

View file

@ -4,6 +4,16 @@
roles: roles:
- base_config - base_config
- name: Ensure systemd-networkd config deployment on systemd_networkd_hosts
hosts: systemd_networkd_hosts
roles:
- systemd_networkd
- name: Ensure nftables deployment on nftables_hosts
hosts: nftables_hosts
roles:
- nftables
- name: Ensure deployment of infrastructure authorized keys - name: Ensure deployment of infrastructure authorized keys
hosts: infrastructure_authorized_keys_hosts hosts: infrastructure_authorized_keys_hosts
roles: roles:

View file

@ -1,13 +1,17 @@
{ {
"$schema": "https://docs.renovatebot.com/renovate-schema.json", "$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [ "extends": [
"config:recommended", // Included in config:best-practices anyway, but added for clarity. "config:recommended",
"config:best-practices", // Parts from config:best-practices:
// https://docs.renovatebot.com/presets-config/#configbest-practices
":configMigration",
"abandonments:recommended",
"security:minimumReleaseAgeNpm",
":ignoreUnstable", ":ignoreUnstable",
":disableRateLimiting", ":disableRateLimiting",
":rebaseStalePrs", ":rebaseStalePrs",
":label(renovate)", ":label(renovate)"
"group:allDigest"
], ],
"semanticCommits": "disabled", "semanticCommits": "disabled",
"packageRules": [ "packageRules": [
@ -28,12 +32,6 @@
"matchDatasources": ["docker"], "matchDatasources": ["docker"],
"matchPackageNames": ["docker.io/pretix/standalone"], "matchPackageNames": ["docker.io/pretix/standalone"],
"versioning": "regex:^(?<major>\\d+\\.\\d+)(?:\\.(?<minor>\\d+))$" "versioning": "regex:^(?<major>\\d+\\.\\d+)(?:\\.(?<minor>\\d+))$"
},
// Since Forgejo seems to clean up older tag versions, so older digests, disable digest pinning for our images.
{
"matchDatasources": ["docker"],
"matchPackageNames": ["git.hamburg.ccc.de/*"],
"pinDigests": false
} }
], ],
"customManagers": [ "customManagers": [

View file

@ -6,3 +6,6 @@ collections:
- name: community.sops - name: community.sops
version: ">=2.2.4" version: ">=2.2.4"
source: https://galaxy.ansible.com source: https://galaxy.ansible.com
- name: community.docker
version: ">=5.0.0"
source: https://galaxy.ansible.com

View file

@ -3,7 +3,7 @@
services: services:
database: database:
image: docker.io/library/mariadb:11@sha256:ae6119716edac6998ae85508431b3d2e666530ddf4e94c61a10710caec9b0f71 image: docker.io/library/mariadb:11
environment: environment:
- "MARIADB_DATABASE=wordpress" - "MARIADB_DATABASE=wordpress"
- "MARIADB_ROOT_PASSWORD={{ secret__mariadb_root_password }}" - "MARIADB_ROOT_PASSWORD={{ secret__mariadb_root_password }}"
@ -17,7 +17,7 @@ services:
restart: unless-stopped restart: unless-stopped
app: app:
image: docker.io/library/wordpress:6-php8.1@sha256:75f79f9c45a587b283e47fd21c6e51077d0c9dbbba529377faaa0c28d5b8f5a4 image: docker.io/library/wordpress:6-php8.1
environment: environment:
- "WORDPRESS_DB_HOST=database" - "WORDPRESS_DB_HOST=database"
- "WORDPRESS_DB_NAME=wordpress" - "WORDPRESS_DB_NAME=wordpress"

View file

@ -3,11 +3,12 @@
server { server {
# Listen on a custom port for the proxy protocol. # Listen on a custom port for the proxy protocol.
listen 8443 ssl http2 proxy_protocol; listen 8443 ssl http2 proxy_protocol;
listen [::]:8443 ssl http2 proxy_protocol;
# Make use of the ngx_http_realip_module to set the $remote_addr and # Make use of the ngx_http_realip_module to set the $remote_addr and
# $remote_port to the client address and client port, when using proxy # $remote_port to the client address and client port, when using proxy
# protocol. # protocol.
# First set our proxy protocol proxy as trusted. # First set our proxy protocol proxy as trusted.
set_real_ip_from 172.31.17.140; set_real_ip_from 2a00:14b0:4200:3000:125::1;
# Then tell the realip_module to get the addreses from the proxy protocol # Then tell the realip_module to get the addreses from the proxy protocol
# header. # header.
real_ip_header proxy_protocol; real_ip_header proxy_protocol;

View file

@ -2,12 +2,13 @@
services: services:
prometheus: prometheus:
image: docker.io/prom/prometheus:v3.7.2@sha256:23031bfe0e74a13004252caaa74eccd0d62b6c6e7a04711d5b8bf5b7e113adc7 image: docker.io/prom/prometheus:v3.7.3
container_name: prometheus container_name: prometheus
command: command:
- '--config.file=/etc/prometheus/prometheus.yml' - '--config.file=/etc/prometheus/prometheus.yml'
- '--web.enable-remote-write-receiver' - '--web.enable-remote-write-receiver'
- '--enable-feature=promql-experimental-functions' - '--enable-feature=promql-experimental-functions'
- '--storage.tsdb.retention.time=28d'
ports: ports:
- 9090:9090 - 9090:9090
restart: unless-stopped restart: unless-stopped
@ -18,7 +19,7 @@ services:
- prom_data:/prometheus - prom_data:/prometheus
alertmanager: alertmanager:
image: docker.io/prom/alertmanager:v0.28.1@sha256:27c475db5fb156cab31d5c18a4251ac7ed567746a2483ff264516437a39b15ba image: docker.io/prom/alertmanager:v0.29.0
container_name: alertmanager container_name: alertmanager
command: command:
- '--config.file=/etc/alertmanager/alertmanager.yaml' - '--config.file=/etc/alertmanager/alertmanager.yaml'
@ -31,7 +32,7 @@ services:
- alertmanager_data:/alertmanager - alertmanager_data:/alertmanager
grafana: grafana:
image: docker.io/grafana/grafana:12.2.1@sha256:35c41e0fd0295f5d0ee5db7e780cf33506abfaf47686196f825364889dee878b image: docker.io/grafana/grafana:12.3.0
container_name: grafana container_name: grafana
ports: ports:
- 3000:3000 - 3000:3000
@ -45,7 +46,7 @@ services:
- graf_data:/var/lib/grafana - graf_data:/var/lib/grafana
pve-exporter: pve-exporter:
image: docker.io/prompve/prometheus-pve-exporter:3.5.5@sha256:79a5598906697b1a5a006d09f0200528a77c6ff1568faf018539ac65824454df image: docker.io/prompve/prometheus-pve-exporter:3.5.5
container_name: pve-exporter container_name: pve-exporter
ports: ports:
- 9221:9221 - 9221:9221
@ -58,7 +59,7 @@ services:
- /dev/null:/etc/prometheus/pve.yml - /dev/null:/etc/prometheus/pve.yml
loki: loki:
image: docker.io/grafana/loki:3.5.7@sha256:0eaee7bf39cc83aaef46914fb58f287d4f4c4be6ec96b86c2ed55719a75e49c8 image: docker.io/grafana/loki:3.6.0
container_name: loki container_name: loki
ports: ports:
- 13100:3100 - 13100:3100
@ -69,7 +70,7 @@ services:
- loki_data:/var/loki - loki_data:/var/loki
ntfy-alertmanager-ccchh-critical: ntfy-alertmanager-ccchh-critical:
image: docker.io/xenrox/ntfy-alertmanager:0.5.0@sha256:5fea88db3bf0257d98c007ab0c4ef064c6d67d7b7ceead7d6956dfa0a5cb333b image: docker.io/xenrox/ntfy-alertmanager:0.5.0
container_name: ntfy-alertmanager-ccchh-critical container_name: ntfy-alertmanager-ccchh-critical
volumes: volumes:
- ./configs/ntfy-alertmanager-ccchh-critical:/etc/ntfy-alertmanager/config - ./configs/ntfy-alertmanager-ccchh-critical:/etc/ntfy-alertmanager/config
@ -78,7 +79,7 @@ services:
restart: unless-stopped restart: unless-stopped
ntfy-alertmanager-fux-critical: ntfy-alertmanager-fux-critical:
image: docker.io/xenrox/ntfy-alertmanager:0.5.0@sha256:5fea88db3bf0257d98c007ab0c4ef064c6d67d7b7ceead7d6956dfa0a5cb333b image: docker.io/xenrox/ntfy-alertmanager:0.5.0
container_name: ntfy-alertmanager-fux-critical container_name: ntfy-alertmanager-fux-critical
volumes: volumes:
- ./configs/ntfy-alertmanager-fux-critical:/etc/ntfy-alertmanager/config - ./configs/ntfy-alertmanager-fux-critical:/etc/ntfy-alertmanager/config
@ -87,7 +88,7 @@ services:
restart: unless-stopped restart: unless-stopped
ntfy-alertmanager-ccchh: ntfy-alertmanager-ccchh:
image: docker.io/xenrox/ntfy-alertmanager:0.5.0@sha256:5fea88db3bf0257d98c007ab0c4ef064c6d67d7b7ceead7d6956dfa0a5cb333b image: docker.io/xenrox/ntfy-alertmanager:0.5.0
container_name: ntfy-alertmanager-ccchh container_name: ntfy-alertmanager-ccchh
volumes: volumes:
- ./configs/ntfy-alertmanager-ccchh:/etc/ntfy-alertmanager/config - ./configs/ntfy-alertmanager-ccchh:/etc/ntfy-alertmanager/config
@ -96,7 +97,7 @@ services:
restart: unless-stopped restart: unless-stopped
ntfy-alertmanager-fux: ntfy-alertmanager-fux:
image: docker.io/xenrox/ntfy-alertmanager:0.5.0@sha256:5fea88db3bf0257d98c007ab0c4ef064c6d67d7b7ceead7d6956dfa0a5cb333b image: docker.io/xenrox/ntfy-alertmanager:0.5.0
container_name: ntfy-alertmanager-fux container_name: ntfy-alertmanager-fux
volumes: volumes:
- ./configs/ntfy-alertmanager-fux:/etc/ntfy-alertmanager/config - ./configs/ntfy-alertmanager-fux:/etc/ntfy-alertmanager/config

View file

@ -46,7 +46,7 @@ services:
- "8080:8080" - "8080:8080"
db: db:
image: docker.io/library/postgres:15.14@sha256:424e79b81868f5fc5cf515eaeac69d288692ebcca7db86d98f91b50d4bce64bb image: docker.io/library/postgres:15.15
restart: unless-stopped restart: unless-stopped
networks: networks:
- keycloak - keycloak

View file

@ -4,11 +4,12 @@
server { server {
# Listen on a custom port for the proxy protocol. # Listen on a custom port for the proxy protocol.
listen 8443 ssl http2 proxy_protocol; listen 8443 ssl http2 proxy_protocol;
listen [::]:8443 ssl http2 proxy_protocol;
# Make use of the ngx_http_realip_module to set the $remote_addr and # Make use of the ngx_http_realip_module to set the $remote_addr and
# $remote_port to the client address and client port, when using proxy # $remote_port to the client address and client port, when using proxy
# protocol. # protocol.
# First set our proxy protocol proxy as trusted. # First set our proxy protocol proxy as trusted.
set_real_ip_from 172.31.17.140; set_real_ip_from 2a00:14b0:4200:3000:125::1;
# Then tell the realip_module to get the addreses from the proxy protocol # Then tell the realip_module to get the addreses from the proxy protocol
# header. # header.
real_ip_header proxy_protocol; real_ip_header proxy_protocol;

View file

@ -4,11 +4,12 @@
server { server {
# Listen on a custom port for the proxy protocol. # Listen on a custom port for the proxy protocol.
listen 8443 ssl http2 proxy_protocol; listen 8443 ssl http2 proxy_protocol;
listen [::]:8443 ssl http2 proxy_protocol;
# Make use of the ngx_http_realip_module to set the $remote_addr and # Make use of the ngx_http_realip_module to set the $remote_addr and
# $remote_port to the client address and client port, when using proxy # $remote_port to the client address and client port, when using proxy
# protocol. # protocol.
# First set our proxy protocol proxy as trusted. # First set our proxy protocol proxy as trusted.
set_real_ip_from 172.31.17.140; set_real_ip_from 2a00:14b0:4200:3000:125::1;
# Then tell the realip_module to get the addreses from the proxy protocol # Then tell the realip_module to get the addreses from the proxy protocol
# header. # header.
real_ip_header proxy_protocol; real_ip_header proxy_protocol;

View file

@ -7,12 +7,13 @@ server {
##listen [::]:443 ssl http2; ##listen [::]:443 ssl http2;
# Listen on a custom port for the proxy protocol. # Listen on a custom port for the proxy protocol.
listen 8444 ssl http2 proxy_protocol; listen 8443 ssl http2 proxy_protocol;
listen [::]:8443 ssl http2 proxy_protocol;
# Make use of the ngx_http_realip_module to set the $remote_addr and # Make use of the ngx_http_realip_module to set the $remote_addr and
# $remote_port to the client address and client port, when using proxy # $remote_port to the client address and client port, when using proxy
# protocol. # protocol.
# First set our proxy protocol proxy as trusted. # First set our proxy protocol proxy as trusted.
set_real_ip_from 172.31.17.140; set_real_ip_from 2a00:14b0:4200:3000:125::1;
# Then tell the realip_module to get the addreses from the proxy protocol # Then tell the realip_module to get the addreses from the proxy protocol
# header. # header.
real_ip_header proxy_protocol; real_ip_header proxy_protocol;

View file

@ -1,7 +1,7 @@
services: services:
mailman-core: mailman-core:
restart: unless-stopped restart: unless-stopped
image: docker.io/maxking/mailman-core:0.5@sha256:cb8e412bb18d74480f996da68f46e92473b6103995e71bc5aeba139b255cc3d2 # Use a specific version tag (tag latest is not published) image: docker.io/maxking/mailman-core:0.5 # Use a specific version tag (tag latest is not published)
container_name: mailman-core container_name: mailman-core
hostname: mailman-core hostname: mailman-core
volumes: volumes:
@ -25,7 +25,7 @@ services:
mailman-web: mailman-web:
restart: unless-stopped restart: unless-stopped
image: docker.io/maxking/mailman-web:0.5@sha256:014726db85586fb53541f66f6ce964bf07e939791cfd5ffc796cd6d243696a18 # Use a specific version tag (tag latest is not published) image: docker.io/maxking/mailman-web:0.5 # Use a specific version tag (tag latest is not published)
container_name: mailman-web container_name: mailman-web
hostname: mailman-web hostname: mailman-web
depends_on: depends_on:
@ -56,7 +56,7 @@ services:
- POSTGRES_DB=mailmandb - POSTGRES_DB=mailmandb
- POSTGRES_USER=mailman - POSTGRES_USER=mailman
- POSTGRES_PASSWORD=wvQjbMRnwFuxGEPz - POSTGRES_PASSWORD=wvQjbMRnwFuxGEPz
image: docker.io/library/postgres:12-alpine@sha256:7c8f4870583184ebadf7f17a6513620aac5f365a7938dc6a6911c1d5df2f481a image: docker.io/library/postgres:12-alpine
volumes: volumes:
- /opt/mailman/database:/var/lib/postgresql/data - /opt/mailman/database:/var/lib/postgresql/data
networks: networks:

View file

@ -1,7 +1,7 @@
--- ---
services: services:
ntfy: ntfy:
image: docker.io/binwiederhier/ntfy:v2.14.0@sha256:5a051798d14138c3ecb12c038652558ab6a077e1aceeb867c151cbf5fa8451ef image: docker.io/binwiederhier/ntfy:v2.15.0
container_name: ntfy container_name: ntfy
command: command:
- serve - serve

View file

@ -4,7 +4,7 @@
services: services:
onlyoffice: onlyoffice:
image: docker.io/onlyoffice/documentserver:9.1.0@sha256:34b92f4a67bfd939bd6b75893e8217556e3b977f81e49472f7e28737b741ba1d image: docker.io/onlyoffice/documentserver:9.1.0
restart: unless-stopped restart: unless-stopped
volumes: volumes:
- "./onlyoffice/DocumentServer/logs:/var/log/onlyoffice" - "./onlyoffice/DocumentServer/logs:/var/log/onlyoffice"

View file

@ -3,11 +3,13 @@
server { server {
# Listen on a custom port for the proxy protocol. # Listen on a custom port for the proxy protocol.
listen 8443 ssl http2 proxy_protocol; listen 8443 ssl http2 proxy_protocol;
listen [::]:8443 ssl http2 proxy_protocol;
# Make use of the ngx_http_realip_module to set the $remote_addr and # Make use of the ngx_http_realip_module to set the $remote_addr and
# $remote_port to the client address and client port, when using proxy # $remote_port to the client address and client port, when using proxy
# protocol. # protocol.
# First set our proxy protocol proxy as trusted. # First set our proxy protocol proxy as trusted.
set_real_ip_from 172.31.17.140; set_real_ip_from 2a00:14b0:4200:3000:125::1;
# Then tell the realip_module to get the addreses from the proxy protocol # Then tell the realip_module to get the addreses from the proxy protocol
# header. # header.
real_ip_header proxy_protocol; real_ip_header proxy_protocol;

View file

@ -3,7 +3,7 @@
services: services:
database: database:
image: docker.io/library/postgres:15-alpine@sha256:64583b3cb4f2010277bdd9749456de78e5c36f8956466ba14b0b96922e510950 image: docker.io/library/postgres:15-alpine
environment: environment:
- "POSTGRES_USER=hedgedoc" - "POSTGRES_USER=hedgedoc"
- "POSTGRES_PASSWORD={{ secret__hedgedoc_db_password }}" - "POSTGRES_PASSWORD={{ secret__hedgedoc_db_password }}"
@ -13,7 +13,7 @@ services:
restart: unless-stopped restart: unless-stopped
app: app:
image: quay.io/hedgedoc/hedgedoc:1.10.3@sha256:ca58fd73ecf05c89559b384fb7a1519c18c8cbba5c21a0018674ed820b9bdb73 image: quay.io/hedgedoc/hedgedoc:1.10.3
environment: environment:
- "CMD_DB_URL=postgres://hedgedoc:{{ secret__hedgedoc_db_password }}@database:5432/hedgedoc" - "CMD_DB_URL=postgres://hedgedoc:{{ secret__hedgedoc_db_password }}@database:5432/hedgedoc"
- "CMD_DOMAIN=pad.hamburg.ccc.de" - "CMD_DOMAIN=pad.hamburg.ccc.de"

View file

@ -3,11 +3,12 @@
server { server {
# Listen on a custom port for the proxy protocol. # Listen on a custom port for the proxy protocol.
listen 8443 ssl http2 proxy_protocol; listen 8443 ssl http2 proxy_protocol;
listen [::]:8443 ssl http2 proxy_protocol;
# Make use of the ngx_http_realip_module to set the $remote_addr and # Make use of the ngx_http_realip_module to set the $remote_addr and
# $remote_port to the client address and client port, when using proxy # $remote_port to the client address and client port, when using proxy
# protocol. # protocol.
# First set our proxy protocol proxy as trusted. # First set our proxy protocol proxy as trusted.
set_real_ip_from 172.31.17.140; set_real_ip_from 2a00:14b0:4200:3000:125::1;
# Then tell the realip_module to get the addreses from the proxy protocol # Then tell the realip_module to get the addreses from the proxy protocol
# header. # header.
real_ip_header proxy_protocol; real_ip_header proxy_protocol;

View file

@ -3,7 +3,7 @@
services: services:
database: database:
image: docker.io/library/postgres:15-alpine@sha256:64583b3cb4f2010277bdd9749456de78e5c36f8956466ba14b0b96922e510950 image: docker.io/library/postgres:15-alpine
environment: environment:
- "POSTGRES_USER=pretalx" - "POSTGRES_USER=pretalx"
- "POSTGRES_PASSWORD={{ secret__pretalx_db_password }}" - "POSTGRES_PASSWORD={{ secret__pretalx_db_password }}"
@ -15,7 +15,7 @@ services:
- pretalx_net - pretalx_net
redis: redis:
image: docker.io/library/redis:8.2.2@sha256:4521b581dbddea6e7d81f8fe95ede93f5648aaa66a9dacd581611bf6fe7527bd image: docker.io/library/redis:8.4.0
restart: unless-stopped restart: unless-stopped
volumes: volumes:
- redis:/data - redis:/data
@ -23,7 +23,7 @@ services:
- pretalx_net - pretalx_net
static: static:
image: docker.io/library/nginx:1.29.3@sha256:f547e3d0d5d02f7009737b284abc87d808e4252b42dceea361811e9fc606287f image: docker.io/library/nginx:1.29.3
restart: unless-stopped restart: unless-stopped
volumes: volumes:
- public:/usr/share/nginx/html - public:/usr/share/nginx/html
@ -33,7 +33,7 @@ services:
- pretalx_net - pretalx_net
pretalx: pretalx:
image: docker.io/pretalx/standalone:v2025.1.0@sha256:fb2d15f11bcae8bb15430084ed81a150cfdf7c79705450583b51e352ba486e8e image: docker.io/pretalx/standalone:v2025.1.0
entrypoint: gunicorn entrypoint: gunicorn
command: command:
- "pretalx.wsgi" - "pretalx.wsgi"
@ -78,7 +78,7 @@ services:
- pretalx_net - pretalx_net
celery: celery:
image: docker.io/pretalx/standalone:v2025.1.0@sha256:fb2d15f11bcae8bb15430084ed81a150cfdf7c79705450583b51e352ba486e8e image: docker.io/pretalx/standalone:v2025.1.0
command: command:
- taskworker - taskworker
restart: unless-stopped restart: unless-stopped

View file

@ -6,27 +6,27 @@ map $host $upstream_acme_challenge_host {
staging.c3cat.de 172.31.17.151:31820; staging.c3cat.de 172.31.17.151:31820;
ccchoir.de ccchoir-intern.hamburg.ccc.de:31820; ccchoir.de ccchoir-intern.hamburg.ccc.de:31820;
www.ccchoir.de ccchoir-intern.hamburg.ccc.de:31820; www.ccchoir.de ccchoir-intern.hamburg.ccc.de:31820;
cloud.hamburg.ccc.de 172.31.17.143:31820; cloud.hamburg.ccc.de cloud.hosts.hamburg.ccc.de:31820;
element.hamburg.ccc.de 172.31.17.151:31820; element.hamburg.ccc.de 172.31.17.151:31820;
git.hamburg.ccc.de 172.31.17.154:31820; git.hamburg.ccc.de 172.31.17.154:31820;
grafana.hamburg.ccc.de 172.31.17.145:31820; grafana.hamburg.ccc.de 172.31.17.145:31820;
hackertours.hamburg.ccc.de 172.31.17.151:31820; hackertours.hamburg.ccc.de 172.31.17.151:31820;
staging.hackertours.hamburg.ccc.de 172.31.17.151:31820; staging.hackertours.hamburg.ccc.de 172.31.17.151:31820;
hamburg.ccc.de 172.31.17.151:31820; hamburg.ccc.de 172.31.17.151:31820;
id.hamburg.ccc.de 172.31.17.144:31820; id.hamburg.ccc.de keycloak.hosts.hamburg.ccc.de:31820;
invite.hamburg.ccc.de 172.31.17.144:31820; invite.hamburg.ccc.de keycloak.hosts.hamburg.ccc.de:31820;
keycloak-admin.hamburg.ccc.de 172.31.17.144:31820; keycloak-admin.hamburg.ccc.de keycloak.hosts.hamburg.ccc.de:31820;
matrix.hamburg.ccc.de 172.31.17.150:31820; matrix.hamburg.ccc.de 172.31.17.150:31820;
mas.hamburg.ccc.de 172.31.17.150:31820; mas.hamburg.ccc.de 172.31.17.150:31820;
element-admin.hamburg.ccc.de 172.31.17.151:31820; element-admin.hamburg.ccc.de 172.31.17.151:31820;
netbox.hamburg.ccc.de 172.31.17.167:31820; netbox.hamburg.ccc.de 172.31.17.167:31820;
onlyoffice.hamburg.ccc.de 172.31.17.147:31820; onlyoffice.hamburg.ccc.de onlyoffice.hosts.hamburg.ccc.de:31820;
pad.hamburg.ccc.de 172.31.17.141:31820; pad.hamburg.ccc.de pad.hosts.hamburg.ccc.de:31820;
pretalx.hamburg.ccc.de 172.31.17.157:31820; pretalx.hamburg.ccc.de 172.31.17.157:31820;
spaceapi.hamburg.ccc.de 172.31.17.151:31820; spaceapi.hamburg.ccc.de 172.31.17.151:31820;
staging.hamburg.ccc.de 172.31.17.151:31820; staging.hamburg.ccc.de 172.31.17.151:31820;
wiki.ccchh.net 172.31.17.146:31820; wiki.ccchh.net wiki.hosts.hamburg.ccc.de:31820;
wiki.hamburg.ccc.de 172.31.17.146:31820; wiki.hamburg.ccc.de wiki.hosts.hamburg.ccc.de:31820;
www.hamburg.ccc.de 172.31.17.151:31820; www.hamburg.ccc.de 172.31.17.151:31820;
tickets.hamburg.ccc.de 172.31.17.148:31820; tickets.hamburg.ccc.de 172.31.17.148:31820;
sunders.hamburg.ccc.de 172.31.17.170:31820; sunders.hamburg.ccc.de 172.31.17.170:31820;
@ -38,7 +38,7 @@ map $host $upstream_acme_challenge_host {
eh11.easterhegg.eu 172.31.17.151:31820; eh11.easterhegg.eu 172.31.17.151:31820;
eh20.easterhegg.eu 172.31.17.151:31820; eh20.easterhegg.eu 172.31.17.151:31820;
www.eh20.easterhegg.eu 172.31.17.151:31820; www.eh20.easterhegg.eu 172.31.17.151:31820;
eh22.easterhegg.eu 172.31.17.165:31820; eh22.easterhegg.eu eh22-wiki.hosts.hamburg.ccc.de:31820;
easterheggxxxx.hamburg.ccc.de 172.31.17.151:31820; easterheggxxxx.hamburg.ccc.de 172.31.17.151:31820;
eh2003.hamburg.ccc.de 172.31.17.151:31820; eh2003.hamburg.ccc.de 172.31.17.151:31820;
www.eh2003.hamburg.ccc.de 172.31.17.151:31820; www.eh2003.hamburg.ccc.de 172.31.17.151:31820;

View file

@ -20,16 +20,16 @@ stream {
map $ssl_preread_server_name $address { map $ssl_preread_server_name $address {
ccchoir.de ccchoir-intern.hamburg.ccc.de:8443; ccchoir.de ccchoir-intern.hamburg.ccc.de:8443;
www.ccchoir.de ccchoir-intern.hamburg.ccc.de:8443; www.ccchoir.de ccchoir-intern.hamburg.ccc.de:8443;
cloud.hamburg.ccc.de cloud-intern.hamburg.ccc.de:8443; cloud.hamburg.ccc.de cloud.hosts.hamburg.ccc.de:8443;
pad.hamburg.ccc.de pad-intern.hamburg.ccc.de:8443; pad.hamburg.ccc.de pad.hosts.hamburg.ccc.de:8443;
pretalx.hamburg.ccc.de pretalx-intern.hamburg.ccc.de:8443; pretalx.hamburg.ccc.de pretalx-intern.hamburg.ccc.de:8443;
id.hamburg.ccc.de 172.31.17.144:8443; id.hamburg.ccc.de keycloak.hosts.hamburg.ccc.de:8443;
invite.hamburg.ccc.de 172.31.17.144:8443; invite.hamburg.ccc.de keycloak.hosts.hamburg.ccc.de:8443;
keycloak-admin.hamburg.ccc.de 172.31.17.144:8444; keycloak-admin.hamburg.ccc.de keycloak.hosts.hamburg.ccc.de:8443;
grafana.hamburg.ccc.de 172.31.17.145:8443; grafana.hamburg.ccc.de 172.31.17.145:8443;
wiki.ccchh.net 172.31.17.146:8443; wiki.ccchh.net wiki.hosts.hamburg.ccc.de:8443;
wiki.hamburg.ccc.de 172.31.17.146:8443; wiki.hamburg.ccc.de wiki.hosts.hamburg.ccc.de:8443;
onlyoffice.hamburg.ccc.de 172.31.17.147:8443; onlyoffice.hamburg.ccc.de onlyoffice.hosts.hamburg.ccc.de:8443;
hackertours.hamburg.ccc.de 172.31.17.151:8443; hackertours.hamburg.ccc.de 172.31.17.151:8443;
staging.hackertours.hamburg.ccc.de 172.31.17.151:8443; staging.hackertours.hamburg.ccc.de 172.31.17.151:8443;
netbox.hamburg.ccc.de 172.31.17.167:8443; netbox.hamburg.ccc.de 172.31.17.167:8443;
@ -56,7 +56,7 @@ stream {
eh11.easterhegg.eu 172.31.17.151:8443; eh11.easterhegg.eu 172.31.17.151:8443;
eh20.easterhegg.eu 172.31.17.151:8443; eh20.easterhegg.eu 172.31.17.151:8443;
www.eh20.easterhegg.eu 172.31.17.151:8443; www.eh20.easterhegg.eu 172.31.17.151:8443;
eh22.easterhegg.eu 172.31.17.165:8443; eh22.easterhegg.eu eh22-wiki.hosts.hamburg.ccc.de:8443;
easterheggxxxx.hamburg.ccc.de 172.31.17.151:8443; easterheggxxxx.hamburg.ccc.de 172.31.17.151:8443;
eh2003.hamburg.ccc.de 172.31.17.151:8443; eh2003.hamburg.ccc.de 172.31.17.151:8443;
www.eh2003.hamburg.ccc.de 172.31.17.151:8443; www.eh2003.hamburg.ccc.de 172.31.17.151:8443;

View file

@ -0,0 +1,79 @@
#!/usr/sbin/nft -f
## Variables
# Interfaces
define if_net1_v4_wan = "net1"
define if_net2_v6_wan = "net2"
define if_net0_2_v4_nat = "net0.2"
define if_net0_3_ci_runner = "net0.3"
# Interface Groups
define wan_ifs = { $if_net1_v4_wan,
$if_net2_v6_wan }
define lan_ifs = { $if_net0_2_v4_nat,
$if_net0_3_ci_runner }
# define v4_exposed_ifs = { }
define v6_exposed_ifs = { $if_net0_2_v4_nat }
## Rules
table inet reverse-path-forwarding {
chain rpf-filter {
type filter hook prerouting priority mangle + 10; policy drop;
# Only allow packets if their source address is routed via their incoming interface.
# https://github.com/NixOS/nixpkgs/blob/d9d87c51960050e89c79e4025082ed965e770d68/nixos/modules/services/networking/firewall-nftables.nix#L100
fib saddr . mark . iif oif exists accept
}
}
table inet host {
chain input {
type filter hook input priority filter; policy drop;
iifname "lo" accept comment "allow loopback"
ct state invalid drop
ct state established,related accept
ip protocol icmp accept
ip6 nexthdr icmpv6 accept
# Allow SSH access.
tcp dport 22 accept comment "allow ssh access"
# Allow DHCP server access.
iifname $if_net0_3_ci_runner udp dport 67 accept comment "allow dhcp server access"
}
}
table ip v4nat {
chain prerouting {
type nat hook prerouting priority dstnat; policy accept;
}
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
oifname $if_net1_v4_wan masquerade
}
}
table inet forward {
chain forward {
type filter hook forward priority filter; policy drop;
ct state invalid drop
ct state established,related accept
# Allow internet access.
meta nfproto ipv6 iifname $lan_ifs oifname $if_net2_v6_wan accept comment "allow v6 internet access"
meta nfproto ipv4 iifname $lan_ifs oifname $if_net1_v4_wan accept comment "allow v4 internet access"
# Allow access to exposed networks from internet.
# meta nfproto ipv4 oifname $v4_exposed_ifs accept comment "allow v4 exposed network access"
meta nfproto ipv6 oifname $v6_exposed_ifs accept comment "allow v6 exposed network access"
}
}

View file

@ -0,0 +1,6 @@
[Match]
MACAddress=BC:24:11:54:11:15
Type=ether
[Link]
Name=net0

View file

@ -0,0 +1,6 @@
[Match]
MACAddress=BC:24:11:9A:FB:34
Type=ether
[Link]
Name=net1

View file

@ -0,0 +1,6 @@
[Match]
MACAddress=BC:24:11:AE:C7:04
Type=ether
[Link]
Name=net2

View file

@ -0,0 +1,7 @@
[NetDev]
Name=net0.2
Kind=vlan
[VLAN]
Id=2

View file

@ -0,0 +1,7 @@
[NetDev]
Name=net0.3
Kind=vlan
[VLAN]
Id=3

View file

@ -0,0 +1,12 @@
[Match]
Name=net0
[Link]
RequiredForOnline=no
[Network]
VLAN=net0.2
VLAN=net0.3
LinkLocalAddressing=no

View file

@ -0,0 +1,14 @@
[Match]
Name=net1
[Network]
DNS=212.12.50.158
IPForward=ipv4
IPv6AcceptRA=no
[Address]
Address=212.12.48.123/24
[Route]
Gateway=212.12.48.55

View file

@ -0,0 +1,14 @@
[Match]
Name=net2
[Network]
#DNS=212.12.50.158
IPForward=ipv6
IPv6AcceptRA=no
[Address]
Address=2a00:14b0:4200:3500::130:2/112
[Route]
Gateway=2a00:14b0:4200:3500::130:1

View file

@ -0,0 +1,23 @@
[Match]
Name=net0.2
Type=vlan
[Link]
RequiredForOnline=no
[Network]
Description=v4-NAT
# Masquerading done in nftables (nftables.conf).
IPv6SendRA=yes
[Address]
Address=10.32.2.1/24
[IPv6SendRA]
UplinkInterface=net2
[IPv6Prefix]
Prefix=2a00:14b0:42:102::/64
Assign=true
Token=static:::1

View file

@ -0,0 +1,29 @@
[Match]
Name=net0.3
Type=vlan
[Link]
RequiredForOnline=no
[Network]
Description=ci-runners
# Masquerading done in nftables (nftables.conf).
IPv6SendRA=yes
DHCPServer=true
[DHCPServer]
PoolOffset=100
PoolSize=150
[Address]
Address=10.32.3.1/24
[IPv6SendRA]
UplinkInterface=net2
[IPv6Prefix]
Prefix=2a00:14b0:42:103::/64
Assign=true
Token=static:::1

View file

@ -13,7 +13,7 @@ services:
volumes: volumes:
- mariadb:/var/lib/mysql - mariadb:/var/lib/mysql
healthcheck: healthcheck:
test: ["CMD", "mariadb-admin", "ping", "-h", "localhost", "-uroot", "-prootpassword"] test: ["CMD", "mariadb-admin", "ping", "-h", "localhost", "-uroot", "-p{{ secret__sunders_db_root_password }}"]
interval: 10s interval: 10s
timeout: 5s timeout: 5s
start_period: 30s start_period: 30s

View file

@ -1,7 +1,7 @@
--- ---
services: services:
database: database:
image: docker.io/library/postgres:15-alpine@sha256:64583b3cb4f2010277bdd9749456de78e5c36f8956466ba14b0b96922e510950 image: docker.io/library/postgres:15-alpine
environment: environment:
- "POSTGRES_USER=pretix" - "POSTGRES_USER=pretix"
- "POSTGRES_PASSWORD={{ secret__pretix_db_password }}" - "POSTGRES_PASSWORD={{ secret__pretix_db_password }}"
@ -13,7 +13,7 @@ services:
restart: unless-stopped restart: unless-stopped
redis: redis:
image: docker.io/library/redis:7.4.6@sha256:a9cc41d6d01da2aa26c219e4f99ecbeead955a7b656c1c499cce8922311b2514 image: docker.io/library/redis:7.4.7
ports: ports:
- "6379:6379" - "6379:6379"
volumes: volumes:
@ -25,7 +25,7 @@ services:
backend: backend:
pretix: pretix:
image: docker.io/pretix/standalone:2024.8@sha256:110bac37efa5f736227f158f38e421ed738d03dccc274dfb415b258ab0f75cfe image: docker.io/pretix/standalone:2024.8
command: ["all"] command: ["all"]
ports: ports:
- "8345:80" - "8345:80"

View file

@ -38,11 +38,7 @@ server {
location = / { location = / {
#return 302 https://wiki.hamburg.ccc.de/infrastructure:service-overview#tickets_pretix; #return 302 https://wiki.hamburg.ccc.de/infrastructure:service-overview#tickets_pretix;
return 302 https://tickets.hamburg.ccc.de/hackertours/eh22ht/; return 302 https://tickets.hamburg.ccc.de/hackertours/39c3ht/;
}
location = /hackertours/eh22/ {
return 302 https://tickets.hamburg.ccc.de/hackertours/eh22ht/;
} }
location / { location / {

View file

@ -3,11 +3,12 @@
server { server {
# Listen on a custom port for the proxy protocol. # Listen on a custom port for the proxy protocol.
listen 8443 ssl http2 proxy_protocol; listen 8443 ssl http2 proxy_protocol;
listen [::]:8443 ssl http2 proxy_protocol;
# Make use of the ngx_http_realip_module to set the $remote_addr and # Make use of the ngx_http_realip_module to set the $remote_addr and
# $remote_port to the client address and client port, when using proxy # $remote_port to the client address and client port, when using proxy
# protocol. # protocol.
# First set our proxy protocol proxy as trusted. # First set our proxy protocol proxy as trusted.
set_real_ip_from 172.31.17.140; set_real_ip_from 2a00:14b0:4200:3000:125::1;
# Then tell the realip_module to get the addreses from the proxy protocol # Then tell the realip_module to get the addreses from the proxy protocol
# header. # header.
real_ip_header proxy_protocol; real_ip_header proxy_protocol;

View file

@ -3,11 +3,12 @@
server { server {
# Listen on a custom port for the proxy protocol. # Listen on a custom port for the proxy protocol.
listen 8443 ssl http2 proxy_protocol; listen 8443 ssl http2 proxy_protocol;
listen [::]:8443 ssl http2 proxy_protocol;
# Make use of the ngx_http_realip_module to set the $remote_addr and # Make use of the ngx_http_realip_module to set the $remote_addr and
# $remote_port to the client address and client port, when using proxy # $remote_port to the client address and client port, when using proxy
# protocol. # protocol.
# First set our proxy protocol proxy as trusted. # First set our proxy protocol proxy as trusted.
set_real_ip_from 172.31.17.140; set_real_ip_from 2a00:14b0:4200:3000:125::1;
# Then tell the realip_module to get the addreses from the proxy protocol # Then tell the realip_module to get the addreses from the proxy protocol
# header. # header.
real_ip_header proxy_protocol; real_ip_header proxy_protocol;

View file

@ -1,7 +1,7 @@
services: services:
# https://github.com/richardg867/WaybackProxy # https://github.com/richardg867/WaybackProxy
waybackproxy: waybackproxy:
image: cttynul/waybackproxy:latest@sha256:e001d5b1d746522cd1ab2728092173c0d96f08086cbd3e49cdf1e298b8add22e image: cttynul/waybackproxy:latest
environment: environment:
DATE: 19990101 DATE: 19990101
DATE_TOLERANCE: 730 DATE_TOLERANCE: 730

View file

@ -17,7 +17,15 @@ HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ecdsa_key
{% if ansible_facts["distribution"] == "Debian" and ansible_facts["distribution_major_version"] == "13" %}
KexAlgorithms sntrup761x25519-sha512,mlkem768x25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256
{% elif ansible_facts["distribution"] == "Debian" and ansible_facts["distribution_major_version"] == "12" %}
KexAlgorithms sntrup761x25519-sha512,curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256
{% else %}
KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256 KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256
{% endif %}
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr

View file

@ -7,17 +7,18 @@ A use case for the deployment of the additional configuration files is Composes
## Supported Distributions ## Supported Distributions
The following distributions are supported: Should work on Debian-based distributions.
- Debian 11
## Required Arguments ## Required Arguments
For the required arguments look at the [`argument_specs.yaml`](./meta/argument_specs.yaml). - `docker_compose__compose_file_content`: The content to deploy to the Compose file at `/ansible_docker_compose/compose.yaml`.
## `hosts` ## Optional Arguments
The `hosts` for this role need to be the machines, for which you want to make sure the given Compose file is deployed and all services of it are up-to-date and running. - `docker_compose__env_file_content`: The content to deploy to the `.env` file at `/ansible_docker_compose/.env`.
- `docker_compose__configuration_files`: A list of configuration files to deploy to the `/ansible_docker_compose/configs/` directory.
- `docker_compose__configuration_files.*.name`: The name of the configuration file.
- `docker_compose__configuration_files.*.content`: The content to deploy to the configuration file.
## Links & Resources ## Links & Resources

View file

@ -1,2 +1 @@
docker_compose__configuration_files: [ ] docker_compose__configuration_files: [ ]
docker_compose__restart_cmd: ""

View file

@ -1,13 +1,11 @@
- name: docker compose down - name: docker compose down
ansible.builtin.command: community.docker.docker_compose_v2:
cmd: /usr/bin/docker compose down project_src: /ansible_docker_compose
chdir: /ansible_docker_compose state: absent
become: true become: true
changed_when: true # This is always changed.
- name: docker compose reload script - name: docker compose restart
ansible.builtin.command: community.docker.docker_compose_v2:
cmd: /usr/bin/docker compose {{ docker_compose__restart_cmd }} project_src: /ansible_docker_compose
chdir: /ansible_docker_compose state: restarted
become: true become: true
changed_when: true # Mark this as always changed (for now?).
when: docker_compose__restart_cmd != ""

View file

@ -2,31 +2,20 @@ argument_specs:
main: main:
options: options:
docker_compose__compose_file_content: docker_compose__compose_file_content:
description: >-
The content of the Compose file at
`/ansible_docker_compose/compose.yaml`.
type: str type: str
required: true required: true
docker_compose__env_file_content: docker_compose__env_file_content:
description: >-
The content of the .env file at
`/ansible_docker_compose/.env`.
type: str type: str
required: false required: false
docker_compose__configuration_files: docker_compose__configuration_files:
description: >-
A list of configuration files to be deployed in the
`/ansible_docker_compose/configs/` directory.
type: list type: list
elements: dict elements: dict
required: false required: false
default: [ ] default: [ ]
options: options:
name: name:
description: The name of the configuration file.
type: str type: str
required: true required: true
content: content:
description: The content of the configuration file.
type: str type: str
required: true required: true

View file

@ -1,10 +1,3 @@
--- ---
dependencies: dependencies:
- role: distribution_check
vars:
distribution_check__distribution_support_spec:
- name: Debian
major_versions:
- 11
- 12
- role: docker - role: docker

View file

@ -59,7 +59,7 @@
state: absent state: absent
become: true become: true
loop: "{{ docker_compose__config_files_to_remove.files }}" loop: "{{ docker_compose__config_files_to_remove.files }}"
# notify: docker compose down notify: docker compose restart
- name: make sure all given configuration files are deployed - name: make sure all given configuration files are deployed
ansible.builtin.copy: ansible.builtin.copy:
@ -70,45 +70,19 @@
group: root group: root
become: true become: true
loop: "{{ docker_compose__configuration_files }}" loop: "{{ docker_compose__configuration_files }}"
# notify: docker compose down notify: docker compose restart
notify: docker compose reload script
- name: Flush handlers to make "docker compose down" handler run now - name: Flush handlers to make "docker compose down" and "docker compose restart" handlers run now
ansible.builtin.meta: flush_handlers ansible.builtin.meta: flush_handlers
- name: docker compose ps --format json before docker compose up - name: docker compose up
ansible.builtin.command: community.docker.docker_compose_v2:
cmd: /usr/bin/docker compose ps --format json project_src: /ansible_docker_compose
chdir: /ansible_docker_compose state: present
build: always
pull: always
remove_orphans: true
become: true become: true
changed_when: false
register: docker_compose__ps_json_before_up
- name: docker compose up --detach --pull always --build
ansible.builtin.command:
cmd: /usr/bin/docker compose up --detach --pull always --build --remove-orphans
chdir: /ansible_docker_compose
become: true
changed_when: false
# The changed for this task is tried to be determined by the "potentially
# report changed" task together with the "docker compose ps --format json
# [...]" tasks.
- name: docker compose ps --format json after docker compose up
ansible.builtin.command:
cmd: /usr/bin/docker compose ps --format json
chdir: /ansible_docker_compose
become: true
changed_when: false
register: docker_compose__ps_json_after_up
# Doesn't work anymore. Dunno why.
# TODO: Fix
# - name: potentially report changed
# ansible.builtin.debug:
# msg: "If this reports changed, then the docker compose containers changed."
# changed_when: (docker_compose__ps_json_before_up.stdout | from_json | community.general.json_query('[].ID') | sort)
# != (docker_compose__ps_json_after_up.stdout | from_json | community.general.json_query('[].ID') | sort)
- name: Make sure anacron is installed - name: Make sure anacron is installed
become: true become: true

View file

@ -1,8 +0,0 @@
---
dependencies:
- role: distribution_check
vars:
distribution_check__distribution_support_spec:
- name: Debian
major_versions:
- "11"

View file

@ -7,11 +7,7 @@
- python3 - python3
- python3-pip - python3-pip
- python3-setuptools - python3-setuptools
- python3-poetry
- name: Ensure python peotry is installed
become: true
ansible.builtin.pip:
name: poetry
- name: Ensure foobazdmx user exists - name: Ensure foobazdmx user exists
become: true become: true

View file

@ -4,6 +4,7 @@
server { server {
# Listen on a custom port for the proxy protocol. # Listen on a custom port for the proxy protocol.
listen 8443 ssl http2 proxy_protocol; listen 8443 ssl http2 proxy_protocol;
listen [::]:8443 ssl http2 proxy_protocol;
# Make use of the ngx_http_realip_module to set the $remote_addr and # Make use of the ngx_http_realip_module to set the $remote_addr and
# $remote_port to the client address and client port, when using proxy # $remote_port to the client address and client port, when using proxy
# protocol. # protocol.

11
roles/nftables/README.md Normal file
View file

@ -0,0 +1,11 @@
# Role `nftables`
Deploys nftables.
## Support Distributions
Should work on Debian-based distributions.
## Required Arguments
- `nftables__config`: nftables configuration to deploy.

View file

@ -0,0 +1,5 @@
- name: Restart nftables service
ansible.builtin.systemd_service:
name: nftables
state: restarted
become: true

View file

@ -0,0 +1,6 @@
argument_specs:
main:
options:
nftables__config:
type: str
required: true

View file

@ -0,0 +1,15 @@
- name: ensure nftables is installed
ansible.builtin.apt:
name: nftables
state: present
become: true
- name: deploy nftables configuration
ansible.builtin.copy:
content: "{{ nftables__config }}"
dest: "/etc/nftables.conf"
mode: "0644"
owner: root
group: root
become: true
notify: Restart nftables service

View file

@ -1,8 +0,0 @@
---
dependencies:
- role: distribution_check
vars:
distribution_check__distribution_support_spec:
- name: Debian
major_versions:
- "11"

View file

@ -0,0 +1,11 @@
# Role `systemd_networkd`
Deploys the given systemd-networkd configuration files.
## Support Distributions
Should work on Debian-based distributions.
## Required Arguments
- `systemd_networkd__config_dir`: Directory with systemd-networkd configs to deploy.

View file

@ -0,0 +1,6 @@
argument_specs:
main:
options:
systemd_networkd__config_dir:
type: path
required: true

View file

@ -0,0 +1,14 @@
- name: ensure rsync is installed
ansible.builtin.apt:
name: rsync
state: present
become: true
- name: synchronize systemd-networkd configs
ansible.posix.synchronize:
src: "{{ systemd_networkd__config_dir }}"
dest: "/etc/systemd/network"
archive: false
recursive: true
delete: true
become: true