2026-AUG-27
This commit is contained in:
@@ -178,6 +178,15 @@ services:
|
||||
dependency:
|
||||
web: "app-public"
|
||||
db: "postgresql"
|
||||
linkwarden:
|
||||
domain:
|
||||
public: "link"
|
||||
internal: "link.app"
|
||||
ports:
|
||||
http: "3005"
|
||||
dependency:
|
||||
web: "app-public"
|
||||
db: "postgresql"
|
||||
gitea:
|
||||
domain:
|
||||
public: "gitea"
|
||||
@@ -329,7 +338,6 @@ services:
|
||||
web: "app-public"
|
||||
db: "postgresql"
|
||||
|
||||
|
||||
version:
|
||||
packages:
|
||||
sops: "3.13.2"
|
||||
@@ -377,3 +385,4 @@ version:
|
||||
romm: "5.1.0"
|
||||
tandoor: "2.6.13"
|
||||
bookstack: "26.5.3"
|
||||
linkwarden: "v2.16.1"
|
||||
|
||||
@@ -35,8 +35,6 @@ hardware:
|
||||
mount_opts: ""
|
||||
data:
|
||||
serials:
|
||||
- "WMC6N0E617S8"
|
||||
- "PN1134P6HVTL0W"
|
||||
- "PN1138P2GH354H"
|
||||
- "PN2131P6GJKSMP"
|
||||
fs:
|
||||
@@ -50,12 +48,14 @@ hardware:
|
||||
- "degraded"
|
||||
- "nofail"
|
||||
btrfs:
|
||||
data_profile: "raid10"
|
||||
metadata_profile: "raid10"
|
||||
min_devices: 4
|
||||
data_profile: "raid1"
|
||||
metadata_profile: "raid1"
|
||||
min_devices: 2
|
||||
backup:
|
||||
serials:
|
||||
- "6261S5G4S75H"
|
||||
- "PN1134P6HVTL0W"
|
||||
# Spare
|
||||
# - "WMC6N0E617S8"
|
||||
fs:
|
||||
type: "btrfs"
|
||||
label: "BACKUP"
|
||||
|
||||
@@ -25,7 +25,7 @@ vm:
|
||||
data_storage:
|
||||
name: "vdb"
|
||||
pool: "data"
|
||||
size: 3.5
|
||||
size: 1.75
|
||||
lan_mac: "0a:49:6e:4d:03:00"
|
||||
lan_net: "lan-net"
|
||||
lan_group: "vlan10-access"
|
||||
|
||||
@@ -21,7 +21,7 @@ vm:
|
||||
data_storage:
|
||||
name: "vdb"
|
||||
pool: "backup"
|
||||
size: 3.5
|
||||
size: 1.75
|
||||
lan_mac: "0a:49:6e:4d:09:00"
|
||||
lan_net: "lan-net"
|
||||
lan_group: "vlan10-access"
|
||||
|
||||
@@ -298,6 +298,14 @@
|
||||
tags: ["site", "romm"]
|
||||
tags: ["site", "romm"]
|
||||
|
||||
- name: Set linkwarden
|
||||
ansible.builtin.include_role:
|
||||
name: "app"
|
||||
tasks_from: "services/set_linkwarden"
|
||||
apply:
|
||||
tags: ["site", "linkwarden"]
|
||||
tags: ["site", "linkwarden"]
|
||||
|
||||
- name: Set homepage
|
||||
ansible.builtin.include_role:
|
||||
name: "app"
|
||||
|
||||
@@ -178,6 +178,7 @@
|
||||
- python3-apt
|
||||
- python3-libvirt
|
||||
- python3-lxml
|
||||
- rsync
|
||||
state: "present"
|
||||
become: true
|
||||
when: "'init' is not in ansible_run_tags"
|
||||
|
||||
@@ -208,3 +208,14 @@
|
||||
changed_when: false
|
||||
listen: "notification_restart_bookstack"
|
||||
ignore_errors: true # noqa: ignore-errors
|
||||
|
||||
- name: Restart linkwarden
|
||||
ansible.builtin.systemd:
|
||||
name: "linkwarden.service"
|
||||
state: "restarted"
|
||||
enabled: true
|
||||
scope: "user"
|
||||
daemon_reload: true
|
||||
changed_when: false
|
||||
listen: "notification_restart_linkwarden"
|
||||
ignore_errors: true # noqa: ignore-errors
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
---
|
||||
- name: Create linkwarden directory
|
||||
ansible.builtin.file:
|
||||
path: "{{ node['home_path'] }}/{{ item }}"
|
||||
state: "directory"
|
||||
owner: "{{ ansible_user }}"
|
||||
group: "{{ node['group'] }}"
|
||||
mode: "0770"
|
||||
loop:
|
||||
- "data/containers/linkwarden"
|
||||
- "data/containers/linkwarden/data"
|
||||
- "containers/linkwarden"
|
||||
- "containers/linkwarden/ssl"
|
||||
|
||||
- name: Deploy root certificate
|
||||
ansible.builtin.copy:
|
||||
content: |
|
||||
{{ hostvars['console']['ca']['root']['crt'] }}
|
||||
dest: "{{ node['home_path'] }}/containers/linkwarden/ssl/{{ root_cert_filename }}"
|
||||
owner: "{{ ansible_user }}"
|
||||
group: "{{ node['group'] }}"
|
||||
mode: "0440"
|
||||
become: true
|
||||
notify: "notification_restart_linkwarden"
|
||||
no_log: true
|
||||
|
||||
- name: Register secret value to podman secret
|
||||
containers.podman.podman_secret:
|
||||
name: "{{ item.name }}"
|
||||
data: "{{ item.value }}"
|
||||
state: "present"
|
||||
force: true
|
||||
loop:
|
||||
- name: "LINKWARDEN_SECRET_KEY"
|
||||
value: "{{ hostvars['console']['linkwarden']['secret_key'] }}"
|
||||
- name: "LINKWARDEN_OIDC_CLIENT_SECRET"
|
||||
value: "{{ hostvars['console']['linkwarden']['oidc']['secret'] }}"
|
||||
- name: "LINKWARDEN_DATABASE_URL"
|
||||
value: "postgresql://linkwarden:{{ hostvars['console']['postgresql']['password']['linkwarden'] | urlencode | replace('/', '%2F') }}\
|
||||
@{{ services['postgresql']['domain']['internal'] }}.{{ domain['internal'] }}/linkwarden_db?sslmode=require&\
|
||||
sslcert=/etc/ssl/linkwarden/{{ root_cert_filename }}&sslaccept=strict"
|
||||
notify: "notification_restart_linkwarden"
|
||||
no_log: true
|
||||
|
||||
- name: Pull image
|
||||
containers.podman.podman_image:
|
||||
name: "ghcr.io/linkwarden/linkwarden"
|
||||
tag: "{{ version['containers']['linkwarden'] }}"
|
||||
state: "present"
|
||||
pull: true
|
||||
|
||||
- name: Deploy container file
|
||||
ansible.builtin.template:
|
||||
src: "{{ hostvars['console']['node']['config_path'] }}/services/containers/app/linkwarden/linkwarden.container.j2"
|
||||
dest: "{{ node['home_path'] }}/.config/containers/systemd/linkwarden.container"
|
||||
owner: "{{ ansible_user }}"
|
||||
group: "{{ node['group'] }}"
|
||||
mode: "0644"
|
||||
notify: "notification_restart_linkwarden"
|
||||
|
||||
- name: Enable linkwarden.service
|
||||
ansible.builtin.systemd:
|
||||
name: "linkwarden.service"
|
||||
state: "started"
|
||||
enabled: true
|
||||
daemon_reload: true
|
||||
scope: "user"
|
||||
|
||||
- name: Check container archive images
|
||||
ansible.builtin.stat:
|
||||
path: "{{ node['home_path'] }}/archives/containers/ghcr.io_linkwarden_linkwarden_{{ version['containers']['linkwarden'] }}.tar"
|
||||
register: container_archive_images
|
||||
|
||||
- name: Save container archive images
|
||||
containers.podman.podman_save:
|
||||
image:
|
||||
- "ghcr.io/linkwarden/linkwarden:{{ version['containers']['linkwarden'] }}"
|
||||
dest: "{{ node['home_path'] }}/archives/containers/ghcr.io_linkwarden_linkwarden_{{ version['containers']['linkwarden'] }}.tar"
|
||||
format: "oci-archive"
|
||||
force: false
|
||||
when: not container_archive_images.stat.exists
|
||||
|
||||
- name: Fetch container archive images
|
||||
ansible.builtin.fetch:
|
||||
src: "{{ node['home_path'] }}/archives/containers/ghcr.io_linkwarden_linkwarden_{{ version['containers']['linkwarden'] }}.tar"
|
||||
dest: "{{ hostvars['console']['node']['data_path'] }}/images/containers/"
|
||||
flat: true
|
||||
@@ -58,7 +58,7 @@
|
||||
- "containers/nextcloud/ini"
|
||||
become: true
|
||||
|
||||
- name: Check data directory empty
|
||||
- name: Check .init file
|
||||
ansible.builtin.stat:
|
||||
path: "{{ node['home_path'] }}/data/containers/nextcloud/.init"
|
||||
register: "is_nextcloud_init"
|
||||
|
||||
@@ -28,10 +28,10 @@
|
||||
|
||||
- name: Check disk number
|
||||
ansible.builtin.fail:
|
||||
msg: "Below 4 disks for RAID10, found {{ data_disk_path.stdout_lines | length }}"
|
||||
msg: "Below 2 disks for RAID, found {{ data_disk_path.stdout_lines | length }}"
|
||||
when: (data_disk_path.stdout_lines | length) < hardware['disk']['data']['fs']['btrfs']['min_devices']
|
||||
|
||||
- name: Set btrfs raid10 volume
|
||||
- name: Set data btrfs volume
|
||||
ansible.builtin.shell: |
|
||||
mkfs.btrfs -f \
|
||||
-L {{ hardware['disk']['data']['fs']['label'] }} \
|
||||
@@ -54,7 +54,7 @@
|
||||
mode: "0711"
|
||||
become: true
|
||||
|
||||
- name: Mount btrfs raid10 volume
|
||||
- name: Mount data btrfs volume
|
||||
ansible.posix.mount:
|
||||
path: "{{ hardware['disk']['data']['fs']['mount_point'] }}"
|
||||
src: "LABEL={{ hardware['disk']['data']['fs']['label'] }}"
|
||||
@@ -92,7 +92,7 @@
|
||||
failed_when: false
|
||||
register: "is_backup_disk_fs"
|
||||
|
||||
- name: Set btrfs volume
|
||||
- name: Set backup btrfs volume
|
||||
ansible.builtin.shell: |
|
||||
mkfs.btrfs -f \
|
||||
-L {{ hardware['disk']['backup']['fs']['label'] }} \
|
||||
@@ -115,7 +115,7 @@
|
||||
mode: "0711"
|
||||
become: true
|
||||
|
||||
- name: Mount btrfs volume
|
||||
- name: Mount backup btrfs volume
|
||||
ansible.posix.mount:
|
||||
path: "{{ hardware['disk']['backup']['fs']['mount_point'] }}"
|
||||
src: "LABEL={{ hardware['disk']['backup']['fs']['label'] }}"
|
||||
|
||||
Reference in New Issue
Block a user