personal_infra/ansible/services/memos/deploy_memos_playbook.yml

155 lines
3.9 KiB
YAML
Raw Normal View History

2025-12-15 19:28:02 +01:00
- name: Deploy Memos on memos-box
hosts: memos
2025-11-06 23:09:44 +01:00
become: yes
vars_files:
- ./memos_vars.yml
vars:
memos_subdomain: "{{ subdomains.memos }}"
memos_domain: "{{ memos_subdomain }}.{{ root_domain }}"
tasks:
2025-12-15 19:28:02 +01:00
- name: Ensure required packages are installed
2025-11-06 23:09:44 +01:00
apt:
name:
- wget
2025-12-15 19:28:02 +01:00
- tar
2025-11-06 23:09:44 +01:00
state: present
2025-12-15 19:28:02 +01:00
update_cache: true
2025-11-06 23:09:44 +01:00
2025-12-15 19:28:02 +01:00
- name: Create memos system user
user:
name: "{{ memos_user }}"
system: yes
shell: /bin/false
home: "{{ memos_data_dir }}"
create_home: no
comment: "Memos Service"
2025-11-06 23:09:44 +01:00
2025-12-15 19:28:02 +01:00
- name: Create memos data directory
file:
path: "{{ memos_data_dir }}"
state: directory
owner: "{{ memos_user }}"
group: "{{ memos_user }}"
mode: '0750'
2025-11-06 23:09:44 +01:00
2025-12-15 19:28:02 +01:00
- name: Create memos config directory
file:
path: "{{ memos_config_dir }}"
state: directory
owner: root
group: root
mode: '0755'
2025-11-06 23:09:44 +01:00
2025-12-15 19:28:02 +01:00
- name: Download memos binary archive
2025-11-06 23:09:44 +01:00
get_url:
2025-12-15 19:28:02 +01:00
url: "{{ memos_url }}"
dest: "/tmp/memos.tar.gz"
2025-11-06 23:09:44 +01:00
mode: '0644'
- name: Extract memos binary
unarchive:
2025-12-15 19:28:02 +01:00
src: "/tmp/memos.tar.gz"
dest: "/tmp"
2025-11-06 23:09:44 +01:00
remote_src: yes
2025-12-15 19:28:02 +01:00
- name: Move memos binary to /usr/local/bin
2025-11-06 23:09:44 +01:00
copy:
2025-12-15 19:28:02 +01:00
src: "/tmp/memos"
dest: "{{ memos_bin_path }}"
2025-11-06 23:09:44 +01:00
remote_src: yes
2025-12-15 19:28:02 +01:00
mode: '0755'
owner: root
group: root
2025-11-06 23:09:44 +01:00
2025-12-15 19:28:02 +01:00
- name: Create memos environment file
copy:
dest: "{{ memos_config_dir }}/memos.env"
content: |
MEMOS_MODE=prod
MEMOS_ADDR=0.0.0.0
MEMOS_PORT={{ memos_port }}
MEMOS_DATA={{ memos_data_dir }}
MEMOS_DRIVER=sqlite
owner: root
group: root
mode: '0644'
notify: Restart memos
2025-11-06 23:09:44 +01:00
2025-12-15 19:28:02 +01:00
- name: Create memos systemd service
2025-11-06 23:09:44 +01:00
copy:
dest: /etc/systemd/system/memos.service
content: |
[Unit]
2025-12-15 19:28:02 +01:00
Description=Memos - A privacy-first, lightweight note-taking service
2025-11-06 23:09:44 +01:00
After=network.target
[Service]
Type=simple
2025-12-15 19:28:02 +01:00
User={{ memos_user }}
Group={{ memos_user }}
WorkingDirectory={{ memos_data_dir }}
EnvironmentFile={{ memos_config_dir }}/memos.env
ExecStart={{ memos_bin_path }}
Restart=always
RestartSec=3
StandardOutput=journal
StandardError=journal
2025-11-06 23:09:44 +01:00
[Install]
WantedBy=multi-user.target
owner: root
group: root
mode: '0644'
notify: Restart memos
2025-12-15 19:28:02 +01:00
- name: Reload systemd daemon
systemd:
daemon_reload: yes
2025-11-06 23:09:44 +01:00
- name: Enable and start memos service
systemd:
name: memos
enabled: yes
state: started
- name: Wait for memos to be ready
uri:
2025-12-15 19:28:02 +01:00
url: "http://127.0.0.1:{{ memos_port }}/healthz"
method: GET
2025-11-06 23:09:44 +01:00
status_code: 200
2025-12-15 19:28:02 +01:00
register: memos_health
retries: 10
delay: 3
until: memos_health.status == 200
- name: Display memos status
debug:
msg: "Memos is running on port {{ memos_port }}. Access via Tailscale at http://{{ memos_tailscale_hostname }}:{{ memos_port }}"
handlers:
- name: Restart memos
systemd:
name: memos
state: restarted
2025-11-06 23:09:44 +01:00
- name: Configure Caddy reverse proxy for Memos on the edge host (via Tailscale)
hosts: edge
2025-12-15 19:28:02 +01:00
become: yes
vars_files:
- ./memos_vars.yml
vars:
memos_subdomain: "{{ subdomains.memos }}"
memos_domain: "{{ memos_subdomain }}.{{ root_domain }}"
2025-11-06 23:09:44 +01:00
2025-12-15 19:28:02 +01:00
tasks:
- name: Publish Memos through Caddy (via Tailscale)
ansible.builtin.include_role:
name: caddy_site
vars:
caddy_site_name: memos
caddy_site_domain: "{{ memos_domain }}"
caddy_site_upstream: "{{ memos_tailscale_hostname }}:{{ memos_port }}"
caddy_site_resolvers: "100.100.100.100"