Add Paperclip AI deployment playbook

This commit is contained in:
Hermes Agent service account committed 2026-09-25 17:45:11 -05:00
1 parent f864be59cf
commit 8778a3bbb0
1 file changed
+122
+122
View File
@@ -0,0 +1,122 @@
---
- name: Deploy Paperclip AI via Podman Quadlets
hosts: paperclip_server
become: false
vars:
deploy_dir: "/home/{{ ansible_user }}/paperclip-deploy"
quadlet_dir: "/home/{{ ansible_user }}/.config/containers/systemd"
db_user: "paperclip"
db_password: "paperclip_password_change_me"
db_name: "paperclip"
better_auth_secret: "super_secret_better_auth_key_change_me"
paperclip_public_url: "http://muppet-vision.local:3100"
tasks:
- name: "Ensure deployment and quadlet directories exist"
file:
path: "{{ item }}"
state: directory
mode: '0755'
loop:
- "{{ deploy_dir }}"
- "{{ quadlet_dir }}"
- name: "Clone Paperclip repository"
git:
repo: 'https://github.com/paperclipai/paperclip.git'
dest: "{{ deploy_dir }}/source"
version: master
force: yes
- name: "Build paperclip-local image"
shell: |
podman build -t paperclip-local {{ deploy_dir }}/source
args:
chdir: "{{ deploy_dir }}"
- name: "Create environment file (paperclip.env)"
copy:
dest: "{{ quadlet_dir }}/paperclip.env"
content: |
POSTGRES_USER={{ db_user }}
POSTGRES_PASSWORD={{ db_password }}
POSTGRES_DB={{ db_name }}
BETTER_AUTH_SECRET={{ better_auth_secret }}
PAPERCLIP_PUBLIC_URL={{ paperclip_public_url }}
mode: '0600'
- name: "Deploy Quadlet: paperclip.pod"
copy:
dest: "{{ quadlet_dir }}/paperclip.pod"
content: |
[Unit]
Description=Paperclip Pod
[Pod]
PodName=paperclip
PublishPort=3100:3100
mode: '0644'
- name: "Deploy Quadlet: paperclip-db.container"
copy:
dest: "{{ quadlet_dir }}/paperclip-db.container"
content: |
[Unit]
Description=PostgreSQL for Paperclip
[Container]
Image=docker.io/library/postgres:17-alpine
ContainerName=paperclip-db
Pod=paperclip.pod
Volume=paperclip-pgdata:/var/lib/postgresql/data
EnvironmentFile=%h/.config/containers/systemd/paperclip.env
HealthCmd=pg_isready -U $POSTGRES_USER -d $POSTGRES_DB -h localhost || exit 1
HealthInterval=15s
HealthTimeout=5s
HealthRetries=5
[Service]
Restart=on-failure
TimeoutStartSec=60
[Install]
WantedBy=default.target
mode: '0644'
- name: "Deploy Quadlet: paperclip.container"
copy:
dest: "{{ quadlet_dir }}/paperclip.container"
content: |
[Unit]
Description=Paperclip AI Agent Orchestrator
Requires=paperclip-db.service
After=paperclip-db.service
[Container]
Image=paperclip-local
ContainerName=paperclip
Pod=paperclip.pod
Volume=%h/.local/share/paperclip:/paperclip:Z
Environment=HOST=0.0.0.0
Environment=PAPERCLIP_HOME=/paperclip
Environment=PAPERCLIP_DEPLOYMENT_MODE=authenticated
Environment=PAPERCLIP_DEPLOYMENT_EXPOSURE=private
Environment=PAPERCLIP_PUBLIC_URL={{ paperclip_public_url }}
EnvironmentFile=%h/.config/containers/systemd/paperclip.env
[Service]
Restart=on-failure
TimeoutStartSec=120
[Install]
WantedBy=default.target
mode: '0644'
- name: "Reload systemd daemon"
shell: systemctl --user daemon-reload
- name: "Start Paperclip services"
systemd:
name: paperclip.service
state: started
scope: user