Rebuild ansible on the project deploy template

- playbook.yml (hosts: monoco) + vars/default.yml, requirements.yml
- roles: network (shared docker network), greatbear (registry pull,
  bind mount /var/lib/greatbear/pb_data, .env upload, health wait),
  caddy (blockinfile snippet into the shared Caddyfile + docker exec reload)
- image honors PB_DATA_DIR and runs as root to match the bind-mount pattern
- frontend on www.greatbear.in (+apex) with /api/* and /_* proxied to
  PocketBase; admin.greatbear.in redirects to the admin UI
This commit is contained in:
2026-09-03 10:14:11 +05:30
parent c03b9c582b
commit 757ec8aee2
23 changed files with 200 additions and 205 deletions
+3
View File
@@ -0,0 +1,3 @@
---
caddy_container: caddy
caddy_caddyfile_path: /var/lib/caddy/conf/Caddyfile
+5
View File
@@ -0,0 +1,5 @@
---
- name: Reload Caddy configuration
ansible.builtin.command: "docker exec -w /etc/caddy {{ caddy_container }} caddy reload"
listen: "Reload Caddy"
changed_when: true
-5
View File
@@ -1,5 +0,0 @@
---
- name: Reload Caddy
ansible.builtin.systemd:
name: "{{ caddy_service }}"
state: reloaded
+26
View File
@@ -0,0 +1,26 @@
---
- name: Read snippet from template file
ansible.builtin.set_fact:
caddy_snippet_block: "{{ lookup('template', 'files/Caddyfile.j2') }}"
- name: Read current Caddyfile
ansible.builtin.slurp:
path: "{{ caddy_caddyfile_path }}"
register: caddy_caddyfile_raw
- name: Decode Caddyfile content
ansible.builtin.set_fact:
caddy_caddyfile_content: "{{ caddy_caddyfile_raw['content'] | b64decode }}"
- name: Check if snippet already exists
ansible.builtin.set_fact:
caddy_snippet_present: "{{ caddy_snippet_block in caddy_caddyfile_content }}"
- name: Add or update snippet in Caddyfile
ansible.builtin.blockinfile:
path: "{{ caddy_caddyfile_path }}"
marker: "# {mark} Ansible managed Caddy snippet for {{ host }}"
block: "{{ caddy_snippet_block }}"
create: true
mode: "0644"
notify: Reload Caddy configuration
-47
View File
@@ -1,47 +0,0 @@
---
# Manage Caddy entries for the site and the PocketBase admin/API host.
- name: Ensure Caddy config include directory exists
ansible.builtin.file:
path: "{{ caddy_config_dir }}"
state: directory
owner: root
group: root
mode: "0755"
- name: Check whether the main Caddyfile exists
ansible.builtin.stat:
path: "{{ caddyfile_path }}"
register: caddyfile_stat
- name: Ensure the main Caddyfile imports conf.d entries
ansible.builtin.lineinfile:
path: "{{ caddyfile_path }}"
line: "import {{ caddy_config_dir }}/*.conf"
insertafter: EOF
state: present
when: caddyfile_stat.stat.exists
notify: Reload Caddy
- name: Install Great Bear Caddy entries
ansible.builtin.template:
src: greatbear.conf.j2
dest: "{{ caddy_config_dir }}/greatbear.conf"
owner: root
group: root
mode: "0644"
notify: Reload Caddy
- name: Validate Caddy configuration
ansible.builtin.command:
cmd: "caddy validate --config {{ caddyfile_path }} --adapter caddyfile"
changed_when: false
when: caddyfile_stat.stat.exists
- name: Flush handlers (reload Caddy now)
ansible.builtin.meta: flush_handlers
- name: Ensure Caddy is enabled and running
ansible.builtin.systemd:
name: "{{ caddy_service }}"
state: started
enabled: true
@@ -1,12 +0,0 @@
# The Great Bear — managed by Ansible. Changes will be overwritten.
# Frontend (TanStack Start)
{{ site_domain }} {
encode zstd gzip
reverse_proxy 127.0.0.1:3000
}
# PocketBase API + admin UI (http://{{ admin_domain }}/_/)
{{ admin_domain }} {
encode zstd gzip
reverse_proxy 127.0.0.1:8090
}