Add Paperclip AI deployment playbook
This commit is contained in:
1 parent
f864be59cf
commit
8778a3bbb0
1 file changed
+122
@@ -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
|
||||||
Reference in new issue
Block a user