Add Sigvild Gallery wedding photo application with automated deployment and improve Caddy plugin management
This commit is contained in:
43
roles/sigvild-gallery/tasks/deploy_backend.yml
Normal file
43
roles/sigvild-gallery/tasks/deploy_backend.yml
Normal file
@@ -0,0 +1,43 @@
|
||||
---
|
||||
# Backend Deployment Tasks
|
||||
|
||||
- name: Build Go binary locally
|
||||
local_action:
|
||||
module: shell
|
||||
cmd: GOOS=linux GOARCH=amd64 go build -o sigvild-gallery .
|
||||
chdir: "{{ sigvild_gallery_local_project_path }}"
|
||||
become: no
|
||||
tags: [backend, build]
|
||||
|
||||
- name: Check if binary was built successfully
|
||||
local_action:
|
||||
module: stat
|
||||
path: "{{ sigvild_gallery_local_project_path }}/sigvild-gallery"
|
||||
register: binary_stat
|
||||
become: no
|
||||
tags: [backend, build]
|
||||
|
||||
- name: Fail if binary doesn't exist
|
||||
fail:
|
||||
msg: "Failed to build sigvild-gallery binary"
|
||||
when: not binary_stat.stat.exists
|
||||
tags: [backend, build]
|
||||
|
||||
- name: Transfer Go binary
|
||||
copy:
|
||||
src: "{{ sigvild_gallery_local_project_path }}/sigvild-gallery"
|
||||
dest: "{{ sigvild_gallery_binary }}"
|
||||
owner: "{{ sigvild_gallery_user }}"
|
||||
group: "{{ sigvild_gallery_user }}"
|
||||
mode: '0755'
|
||||
notify: restart sigvild-gallery
|
||||
tags: [backend]
|
||||
|
||||
- name: Create data directory for PocketBase
|
||||
file:
|
||||
path: "{{ sigvild_gallery_data_dir }}"
|
||||
state: directory
|
||||
owner: "{{ sigvild_gallery_user }}"
|
||||
group: "{{ sigvild_gallery_user }}"
|
||||
mode: '0755'
|
||||
tags: [backend]
|
||||
57
roles/sigvild-gallery/tasks/deploy_frontend.yml
Normal file
57
roles/sigvild-gallery/tasks/deploy_frontend.yml
Normal file
@@ -0,0 +1,57 @@
|
||||
---
|
||||
# Frontend Deployment Tasks
|
||||
|
||||
- name: Check if frontend source exists
|
||||
local_action:
|
||||
module: stat
|
||||
path: "{{ sigvild_gallery_local_project_path }}/sigvild-kit"
|
||||
register: frontend_source
|
||||
become: no
|
||||
tags: [frontend, build]
|
||||
|
||||
- name: Fail if frontend source doesn't exist
|
||||
fail:
|
||||
msg: "Frontend source directory not found at {{ sigvild_gallery_local_project_path }}/sigvild-kit"
|
||||
when: not frontend_source.stat.exists
|
||||
tags: [frontend, build]
|
||||
|
||||
- name: Install frontend dependencies
|
||||
local_action:
|
||||
module: shell
|
||||
cmd: npm install
|
||||
chdir: "{{ sigvild_gallery_local_project_path }}/sigvild-kit"
|
||||
become: no
|
||||
tags: [frontend, build]
|
||||
|
||||
- name: Build frontend for production
|
||||
local_action:
|
||||
module: shell
|
||||
cmd: npm run build:production
|
||||
chdir: "{{ sigvild_gallery_local_project_path }}/sigvild-kit"
|
||||
become: no
|
||||
tags: [frontend, build]
|
||||
|
||||
- name: Check if frontend build exists
|
||||
local_action:
|
||||
module: stat
|
||||
path: "{{ sigvild_gallery_local_project_path }}/sigvild-kit/build"
|
||||
register: frontend_build
|
||||
become: no
|
||||
tags: [frontend, build]
|
||||
|
||||
- name: Fail if frontend build doesn't exist
|
||||
fail:
|
||||
msg: "Frontend build failed - build directory not found"
|
||||
when: not frontend_build.stat.exists
|
||||
become: no
|
||||
tags: [frontend, build]
|
||||
|
||||
- name: Sync frontend files to web root
|
||||
synchronize:
|
||||
src: "{{ sigvild_gallery_local_project_path }}/sigvild-kit/build/"
|
||||
dest: "{{ sigvild_gallery_web_root }}/"
|
||||
delete: yes
|
||||
rsync_opts:
|
||||
- "--exclude=.git"
|
||||
- "--chown={{ sigvild_gallery_user }}:{{ sigvild_gallery_user }}"
|
||||
tags: [frontend]
|
||||
91
roles/sigvild-gallery/tasks/main.yml
Normal file
91
roles/sigvild-gallery/tasks/main.yml
Normal file
@@ -0,0 +1,91 @@
|
||||
---
|
||||
# Sigvild Gallery Deployment Tasks
|
||||
|
||||
- name: Install required packages
|
||||
pacman:
|
||||
name:
|
||||
- rsync
|
||||
state: present
|
||||
- name: Create sigvild gallery user
|
||||
user:
|
||||
name: "{{ sigvild_gallery_user }}"
|
||||
system: yes
|
||||
shell: /bin/bash
|
||||
home: "{{ sigvild_gallery_home }}"
|
||||
create_home: yes
|
||||
|
||||
- name: Create directories
|
||||
file:
|
||||
path: "{{ item }}"
|
||||
state: directory
|
||||
owner: "{{ sigvild_gallery_user }}"
|
||||
group: "{{ sigvild_gallery_user }}"
|
||||
mode: '0755'
|
||||
loop:
|
||||
- "{{ sigvild_gallery_home }}"
|
||||
- "{{ sigvild_gallery_data_dir }}"
|
||||
- "{{ sigvild_gallery_web_root }}"
|
||||
|
||||
- name: Build and deploy backend
|
||||
include_tasks: deploy_backend.yml
|
||||
tags: [backend, build]
|
||||
|
||||
- name: Build and deploy frontend
|
||||
include_tasks: deploy_frontend.yml
|
||||
tags: [frontend, build]
|
||||
|
||||
- name: Deploy systemd service
|
||||
template:
|
||||
src: sigvild-gallery.service.j2
|
||||
dest: /etc/systemd/system/sigvild-gallery.service
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0644'
|
||||
notify:
|
||||
- reload systemd
|
||||
- restart sigvild-gallery
|
||||
tags: [backend, service]
|
||||
|
||||
- name: Deploy Caddy configurations
|
||||
template:
|
||||
src: "{{ item.src }}"
|
||||
dest: "{{ caddy_sites_enabled_dir }}/{{ item.dest }}"
|
||||
owner: root
|
||||
group: "{{ caddy_user }}"
|
||||
mode: '0644'
|
||||
loop:
|
||||
- { src: 'frontend.caddy.j2', dest: 'sigvild-frontend.caddy' }
|
||||
- { src: 'api.caddy.j2', dest: 'sigvild-api.caddy' }
|
||||
notify: reload caddy
|
||||
tags: [caddy, frontend, backend]
|
||||
|
||||
- name: Enable and start sigvild-gallery service
|
||||
systemd:
|
||||
name: sigvild-gallery
|
||||
enabled: "{{ sigvild_gallery_service_enabled }}"
|
||||
state: "{{ sigvild_gallery_service_state }}"
|
||||
daemon_reload: yes
|
||||
tags: [backend, service]
|
||||
|
||||
- name: Create superuser account
|
||||
command: >
|
||||
{{ sigvild_gallery_binary }} superuser upsert
|
||||
"{{ vault_pb_su_email }}"
|
||||
"{{ vault_pb_su_password }}"
|
||||
args:
|
||||
chdir: "{{ sigvild_gallery_home }}"
|
||||
become: yes
|
||||
become_user: "{{ sigvild_gallery_user }}"
|
||||
register: superuser_result
|
||||
failed_when: superuser_result.rc != 0
|
||||
|
||||
- name: Verify gallery health
|
||||
uri:
|
||||
url: "https://{{ sigvild_gallery_api_domain }}/api/health"
|
||||
method: GET
|
||||
status_code: [200, 404] # 404 is ok if health endpoint doesn't exist yet
|
||||
timeout: 15
|
||||
retries: 5
|
||||
delay: 5
|
||||
ignore_errors: yes
|
||||
tags: [verify]
|
||||
Reference in New Issue
Block a user