Reserve fixed IPs on the lava network so Caddy can always start

lava was created by hand without an ip_range, so any container could be
given Caddy's fixed IP (172.20.0.5). After a reboot the containers race
for the low addresses and Caddy often fails with "Address already in use".

- The docker role now creates lava as 172.20.0.0/16 with dynamic
  addresses limited to 172.20.128.0/17, so 172.20.0.x is free for fixed
  IPs, and warns if the network still has the old layout.
- Gitea gets fixed IP 172.20.0.6 once the network has the reserved range,
  since its ufw-docker SSH rule points at its IP.
- ufw-docker allow rules for Caddy (80, 443) and Gitea SSH are managed by
  the playbook and follow IP changes.
- migrate-lava-network.yml recreates the existing network once: it takes
  down every compose project on lava (volumes kept), recreates the
  network, and brings them back up, Caddy first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Phil
2026-10-29 21:04:22 -06:00
co-authored by Claude Opus 5.5
parent c0145dd5a2
commit e569a56417
7 changed files with 201 additions and 3 deletions
+8 -1
View File
@@ -18,4 +18,11 @@
community.docker.docker_compose_v2:
project_src: /opt/stacks/gitea
files:
- compose.yml
- compose.yml
# Lets git over SSH (host port 222) through. Re-adds the rule if gitea's IP changed.
- name: allow public ssh to gitea
ansible.builtin.command: /usr/local/bin/ufw-docker.sh allow gitea 22/tcp
register: gitea_ufw
changed_when: "'Skipping' not in gitea_ufw.stdout"
when: not ansible_check_mode