diff --git a/ansible/roles/devpi/defaults/main.yml b/ansible/roles/devpi/defaults/main.yml index 358a6bc..0fc0569 100644 --- a/ansible/roles/devpi/defaults/main.yml +++ b/ansible/roles/devpi/defaults/main.yml @@ -3,3 +3,5 @@ devpi_port: 3141 devpi_serverdir: /Users/erichblume/devpi devpi_log_dir: /Users/erichblume/Library/Logs devpi_host: 0.0.0.0 # Listen on all interfaces for Tailscale +devpi_outside_url: https://pypi.tail8d86e.ts.net # URL for Tailscale proxy +devpi_secretfile: /Users/erichblume/devpi/.secret # Persistent auth secret diff --git a/ansible/roles/devpi/tasks/main.yml b/ansible/roles/devpi/tasks/main.yml index cb25e0e..b35989c 100644 --- a/ansible/roles/devpi/tasks/main.yml +++ b/ansible/roles/devpi/tasks/main.yml @@ -1,13 +1,22 @@ --- # Note: devpi is installed via mise (pipx/uvx), not managed here. -# Add to ~/.config/mise/config.toml on indri: # -# [tools] -# "pipx:devpi-server" = { version = "latest", uvx = "true", uvx_args = "--with devpi-web" } -# "pipx:devpi-client" = { version = "latest", uvx = "true" } +# ONE-TIME SETUP (before running ansible): # -# Then run: mise install -# Initialize: mise x -- devpi-init --serverdir {{ devpi_serverdir }} +# 1. Add to ~/.config/mise/config.toml on indri: +# +# [tools] +# "pipx:devpi-server" = { version = "latest", uvx = "true", uvx_args = "--with devpi-web" } +# "pipx:devpi-client" = { version = "latest", uvx = "true" } +# +# 2. Install: mise install +# +# 3. Initialize with root password (generate password in 1password): +# mise x -- devpi-init --serverdir {{ devpi_serverdir }} --root-passwd YOUR_PASSWORD +# +# 4. Run ansible to deploy LaunchAgent +# +# 5. Set up Tailscale service (see management log) - name: Ensure devpi data directory exists ansible.builtin.file: @@ -15,6 +24,17 @@ state: directory mode: '0755' +- name: Generate devpi secret file if not exists + ansible.builtin.shell: | + openssl rand -hex 32 > "{{ devpi_secretfile }}" + args: + creates: "{{ devpi_secretfile }}" + +- name: Ensure devpi secret file has secure permissions + ansible.builtin.file: + path: "{{ devpi_secretfile }}" + mode: '0600' + - name: Deploy devpi LaunchAgent plist ansible.builtin.template: src: devpi.plist.j2 diff --git a/ansible/roles/devpi/templates/devpi.plist.j2 b/ansible/roles/devpi/templates/devpi.plist.j2 index 3ab572f..b2ed6aa 100644 --- a/ansible/roles/devpi/templates/devpi.plist.j2 +++ b/ansible/roles/devpi/templates/devpi.plist.j2 @@ -24,6 +24,10 @@ {{ devpi_host }} --port {{ devpi_port }} + --outside-url + {{ devpi_outside_url }} + --secretfile + {{ devpi_secretfile }} RunAtLoad