personal_infra/ansible/services/lnbits/deploy_lnbits_playbook.yml

154 lines
4.3 KiB
YAML
Raw Normal View History

2025-08-20 16:02:48 +02:00
- name: Deploy LNBits with Poetry and configure Caddy reverse proxy
hosts: edge
2025-08-20 16:02:48 +02:00
become: yes
vars_files:
- ./lnbits_vars.yml
vars:
2025-11-06 23:09:44 +01:00
lnbits_subdomain: "{{ subdomains.lnbits }}"
2025-08-20 16:02:48 +02:00
lnbits_domain: "{{ lnbits_subdomain }}.{{ root_domain }}"
tasks:
- name: Create lnbits directory
file:
path: "{{ lnbits_dir }}"
state: directory
owner: "{{ ansible_user }}"
group: "{{ ansible_user }}"
mode: '0755'
- name: Install required system packages
apt:
name:
2025-11-03 16:51:53 +01:00
- python3
2025-08-20 16:02:48 +02:00
- python3-pip
2025-11-06 23:09:44 +01:00
- python3-venv
- python3-dev
2025-08-20 16:02:48 +02:00
- git
- curl
- pkg-config
2025-11-06 23:09:44 +01:00
- build-essential
- libsecp256k1-dev
2025-08-20 16:02:48 +02:00
- libffi-dev
2025-11-06 23:09:44 +01:00
- libgmp-dev
- libpq-dev
- automake
- autoconf
- libtool
- m4
- gawk
2025-08-20 16:02:48 +02:00
state: present
update_cache: yes
2025-11-06 23:09:44 +01:00
- name: Install uv packaging tool
2025-08-20 16:02:48 +02:00
shell: |
2025-11-06 23:09:44 +01:00
curl -LsSf https://astral.sh/uv/install.sh | sh
2025-08-20 16:02:48 +02:00
args:
2025-11-06 23:09:44 +01:00
creates: "/home/{{ ansible_user }}/.local/bin/uv"
2025-08-20 16:02:48 +02:00
become: yes
become_user: "{{ ansible_user }}"
2025-11-03 16:51:53 +01:00
environment:
HOME: "/home/{{ ansible_user }}"
2025-08-20 16:02:48 +02:00
- name: Clone LNBits repository
git:
repo: https://github.com/lnbits/lnbits.git
dest: "{{ lnbits_dir }}/lnbits"
2025-11-06 23:09:44 +01:00
version: "v1.3.1"
2025-08-20 16:02:48 +02:00
accept_hostkey: yes
- name: Change ownership of LNBits directory to user
file:
path: "{{ lnbits_dir }}/lnbits"
owner: "{{ ansible_user }}"
group: "{{ ansible_user }}"
recurse: yes
2025-11-06 23:09:44 +01:00
- name: Install LNBits dependencies with uv (Python 3.12)
command: /home/{{ ansible_user }}/.local/bin/uv sync --python 3.12 --all-extras --no-dev
2025-08-20 16:02:48 +02:00
args:
chdir: "{{ lnbits_dir }}/lnbits"
2025-11-03 16:51:53 +01:00
become: yes
become_user: "{{ ansible_user }}"
environment:
HOME: "/home/{{ ansible_user }}"
2025-11-06 23:09:44 +01:00
PATH: "/home/{{ ansible_user }}/.local/bin:/usr/local/bin:/usr/bin:/bin"
SECP_BUNDLED: "0"
PKG_CONFIG_PATH: "/usr/lib/x86_64-linux-gnu/pkgconfig"
ACLOCAL: "aclocal"
AUTOMAKE: "automake"
2025-08-20 16:02:48 +02:00
- name: Copy .env.example to .env
copy:
src: "{{ lnbits_dir }}/lnbits/.env.example"
dest: "{{ lnbits_dir }}/lnbits/.env"
remote_src: yes
owner: "{{ ansible_user }}"
group: "{{ ansible_user }}"
mode: '0644'
- name: Configure LNBits environment variables
lineinfile:
path: "{{ lnbits_dir }}/lnbits/.env"
regexp: "^{{ item.key }}="
line: "{{ item.key }}={{ item.value }}"
state: present
loop:
- key: "LNBITS_BACKEND_WALLET_CLASS"
value: "FakeWallet"
- key: "LNBITS_ADMIN_UI"
value: "true"
- key: "HOST"
value: "0.0.0.0"
- key: "PORT"
value: "{{ lnbits_port }}"
- key: "LNBITS_DATA_FOLDER"
value: "{{ lnbits_data_dir }}"
- key: "LNBITS_EXTENSIONS_PATH"
value: "{{ lnbits_data_dir }}/extensions"
- name: Create systemd service file for LNBits
copy:
dest: /etc/systemd/system/lnbits.service
content: |
[Unit]
Description=LNBits
After=network.target
[Service]
Type=simple
User={{ ansible_user }}
WorkingDirectory={{ lnbits_dir }}/lnbits
2025-11-06 23:09:44 +01:00
ExecStart=/home/{{ ansible_user }}/.local/bin/uv run --python 3.12 lnbits
2025-08-20 16:02:48 +02:00
Restart=always
RestartSec=30
Environment=PYTHONUNBUFFERED=1
2025-11-06 23:09:44 +01:00
Environment="PATH=/home/{{ ansible_user }}/.local/bin:/usr/local/bin:/usr/bin:/bin"
Environment=SECP_BUNDLED=0
2025-08-20 16:02:48 +02:00
[Install]
WantedBy=multi-user.target
owner: "{{ ansible_user }}"
group: "{{ ansible_user }}"
mode: '0644'
- name: Reload systemd
systemd:
daemon_reload: yes
- name: Enable and start LNBits service
systemd:
name: lnbits
enabled: yes
state: started
- name: Publish LNBits through Caddy
ansible.builtin.include_role:
name: caddy_site
vars:
caddy_site_name: lnbits
caddy_site_domain: "{{ lnbits_domain }}"
caddy_site_upstream: "localhost:{{ lnbits_port }}"
caddy_site_headers_up:
X-Forwarded-Host: "{{ lnbits_domain }}"