6df5549161
Stock neosmemo/memos:stable, port 5230, SQLite at /opt/docker/conf/memos/data/. Joins traefik-net and ships homepage labels (group=Notes) so it auto-appears on the dashboard via docker discovery — no edit to configs/homepage/services.yaml needed. First-run bootstrap is via the UI: visit http://10.250.50.70:5230 and create the Host account through the sign-up form. Playbook idiom note: docker compose pull lines need the literal block scalar (|) when the grep pattern contains colons — bare-string shell value made YAML parse the colon as a mapping separator and elway choked on first try.
89 lines
2.9 KiB
YAML
89 lines
2.9 KiB
YAML
# Deploy memos (https://github.com/usememos/memos) — single-container
|
|
# self-hosted note server — to ana-docker.
|
|
#
|
|
# First-boot creates a fresh SQLite DB at /var/opt/memos/memos_prod.db
|
|
# inside the container (bind-mounted out to ${MEMOS_DATA_DIR} on the
|
|
# host). Visit http://10.250.50.70:5230 immediately after deploy to
|
|
# create the Host account.
|
|
#
|
|
# Usage:
|
|
# scripts/elway ana-docker --playbook playbooks/deploy-memos.yaml
|
|
#
|
|
# Idempotent — safe to rerun.
|
|
|
|
vars:
|
|
compose_dir: /opt/docker/compose/memos
|
|
data_dir: /opt/docker/conf/memos/data
|
|
host_port: "5230"
|
|
|
|
steps:
|
|
# ── host-side dirs (sudo only on first run) ─────────────────────────
|
|
|
|
- name: Ensure compose dir exists
|
|
shell: mkdir -p {{ compose_dir }}
|
|
sudo: true
|
|
creates: "{{ compose_dir }}"
|
|
|
|
- name: Chown compose dir to lkraven
|
|
shell: chown -R lkraven:lkraven {{ compose_dir }}
|
|
sudo: true
|
|
when: "[ \"$(stat -c %U {{ compose_dir }})\" != \"lkraven\" ]"
|
|
|
|
- name: Ensure data dir exists
|
|
shell: mkdir -p {{ data_dir }}
|
|
sudo: true
|
|
creates: "{{ data_dir }}"
|
|
|
|
- name: Chown data dir to lkraven
|
|
shell: chown -R lkraven:lkraven {{ data_dir }}
|
|
sudo: true
|
|
when: "[ \"$(stat -c %U {{ data_dir }})\" != \"lkraven\" ]"
|
|
|
|
# ── deploy compose + env ────────────────────────────────────────────
|
|
|
|
- name: Upload compose.yaml
|
|
upload:
|
|
src: stacks/memos/compose.yaml
|
|
dest: "{{ compose_dir }}/compose.yaml"
|
|
mode: "0644"
|
|
|
|
- name: Seed .env from template (only if absent)
|
|
upload:
|
|
src: stacks/memos/.env.example
|
|
dest: "{{ compose_dir }}/.env"
|
|
mode: "0644"
|
|
when: "[ ! -f {{ compose_dir }}/.env ]"
|
|
|
|
# ── bring up + wait ─────────────────────────────────────────────────
|
|
|
|
- name: docker compose pull (gets latest stable tag)
|
|
shell: |
|
|
set -o pipefail
|
|
cd {{ compose_dir }} && docker compose pull 2>&1 \
|
|
| grep -vE '^(Status|Pulling) |Downloaded'
|
|
|
|
- name: docker compose up -d
|
|
shell: cd {{ compose_dir }} && docker compose up -d
|
|
|
|
- name: Wait for / to respond
|
|
shell: |
|
|
for i in $(seq 1 30); do
|
|
curl -sf -o /dev/null --max-time 3 http://localhost:{{ host_port }}/ && exit 0
|
|
sleep 2
|
|
done
|
|
exit 1
|
|
changed_when: "false"
|
|
|
|
verify:
|
|
- name: / returns 200
|
|
shell: curl -sf -o /dev/null http://localhost:{{ host_port }}/
|
|
changed_when: "false"
|
|
|
|
- name: Container is running
|
|
shell: docker inspect memos --format '{{.State.Status}}' | grep -q running
|
|
changed_when: "false"
|
|
|
|
- name: Container is on traefik-net (so homepage docker discovery sees it)
|
|
shell: docker inspect memos --format '{{json .NetworkSettings.Networks}}' | grep -q traefik-net
|
|
changed_when: "false"
|