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