134 lines
3.9 KiB
YAML
134 lines
3.9 KiB
YAML
---
|
|
# ================================================================
|
|
# jnss-web Static Site Deployment Playbook
|
|
# ================================================================
|
|
# Deploys the jnss-web SvelteKit static site to jnss.me
|
|
#
|
|
# Usage:
|
|
# ansible-playbook -i inventory/hosts.yml playbooks/deploy-jnss-web.yml
|
|
#
|
|
# This playbook:
|
|
# - Clones the jnss-web repository (deploy branch) to a temp directory
|
|
# - Syncs build artifacts to /var/www/jnss-web
|
|
# - Deploys Caddy configuration for jnss.me with www redirect
|
|
# - Reloads Caddy to serve the new site
|
|
# ================================================================
|
|
|
|
- name: Deploy jnss-web static site
|
|
hosts: homelab
|
|
become: true
|
|
|
|
vars:
|
|
# Git repository configuration
|
|
jnss_web_repo_url: "https://git.jnss.me/joakim/jnss-web.git"
|
|
jnss_web_branch: "deploy"
|
|
|
|
# Server paths
|
|
jnss_web_root: "/var/www/jnss-web"
|
|
|
|
# Domain configuration
|
|
jnss_web_domain: "jnss.me"
|
|
|
|
# Caddy configuration
|
|
caddy_user: "caddy"
|
|
caddy_sites_enabled_dir: "/etc/caddy/sites-enabled"
|
|
|
|
tasks:
|
|
# ============================================================
|
|
# Git Repository Management
|
|
# ============================================================
|
|
|
|
- name: Create temporary directory for git clone
|
|
tempfile:
|
|
state: directory
|
|
suffix: -jnss-web
|
|
register: temp_clone_dir
|
|
tags: [jnss-web, deploy]
|
|
|
|
- name: Clone jnss-web repository to temp directory
|
|
git:
|
|
repo: "{{ jnss_web_repo_url }}"
|
|
dest: "{{ temp_clone_dir.path }}"
|
|
version: "{{ jnss_web_branch }}"
|
|
depth: 1
|
|
tags: [jnss-web, deploy]
|
|
|
|
- name: Verify build directory exists in repository
|
|
stat:
|
|
path: "{{ temp_clone_dir.path }}/index.html"
|
|
register: build_dir
|
|
tags: [jnss-web, deploy]
|
|
|
|
- name: Fail if index.html not found
|
|
fail:
|
|
msg: "Build index.html not found in repository root. Ensure the deploy branch contains the built artifacts."
|
|
when: not build_dir.stat.exists
|
|
tags: [jnss-web, deploy]
|
|
|
|
# ============================================================
|
|
# Web Root Deployment
|
|
# ============================================================
|
|
|
|
- name: Remove old web root
|
|
file:
|
|
path: "{{ jnss_web_root }}"
|
|
state: absent
|
|
tags: [jnss-web, deploy]
|
|
|
|
- name: Create fresh web root directory
|
|
file:
|
|
path: "{{ jnss_web_root }}"
|
|
state: directory
|
|
owner: "{{ caddy_user }}"
|
|
group: "{{ caddy_user }}"
|
|
mode: '0755'
|
|
tags: [jnss-web, deploy]
|
|
|
|
- name: Copy build files to web root
|
|
copy:
|
|
src: "{{ temp_clone_dir.path }}/"
|
|
dest: "{{ jnss_web_root }}/"
|
|
owner: "{{ caddy_user }}"
|
|
group: "{{ caddy_user }}"
|
|
mode: '0755'
|
|
remote_src: true
|
|
tags: [jnss-web, deploy]
|
|
|
|
- name: Clean up temporary clone directory
|
|
file:
|
|
path: "{{ temp_clone_dir.path }}"
|
|
state: absent
|
|
tags: [jnss-web, deploy]
|
|
|
|
# ============================================================
|
|
# Caddy Configuration
|
|
# ============================================================
|
|
|
|
- name: Deploy Caddy configuration for jnss-web
|
|
template:
|
|
src: templates/jnss-web.caddy.j2
|
|
dest: "{{ caddy_sites_enabled_dir }}/jnss-web.caddy"
|
|
owner: root
|
|
group: "{{ caddy_user }}"
|
|
mode: '0644'
|
|
notify: reload caddy
|
|
tags: [jnss-web, caddy]
|
|
|
|
- name: Validate Caddy configuration
|
|
command: caddy validate --config /etc/caddy/Caddyfile
|
|
register: caddy_validate
|
|
changed_when: false
|
|
tags: [jnss-web, caddy]
|
|
|
|
- name: Display Caddy validation result
|
|
debug:
|
|
msg: "Caddy configuration is valid"
|
|
when: caddy_validate.rc == 0
|
|
tags: [jnss-web, caddy]
|
|
|
|
handlers:
|
|
- name: reload caddy
|
|
systemd:
|
|
name: caddy
|
|
state: reloaded
|