feat: Add paperclip-docker Ansible role for RTX 3090
Deploy Paperclip AI with PostgreSQL, nginx reverse proxy, and Cloudflare SSL/TLS on illuminations.wdw-labs.cloud. Configured for local_trusted mode (LAN-only, no auth) with host networking and auto-generated secrets. Stack: PostgreSQL 16 + Paperclip + nginx + certbot Hostname: muppet-vision.wdw-labs.cloud vLLM endpoint: localhost:8000 (DeepSeek-R1-32B Q4)
This commit is contained in:
1 parent
8778a3bbb0
commit
f701ad823f
13 files changed
+1093
-124
No files matched your search
@@ -1,122 +0,0 @@
|
||||
---
|
||||
- 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
|
||||
@@ -0,0 +1,72 @@
|
||||
---
|
||||
- name: Deploy Paperclip stack with nginx and certbot
|
||||
hosts: illuminations
|
||||
become: true
|
||||
vars_files:
|
||||
- "{{ playbook_dir }}/../group_vars/all/vars"
|
||||
- "{{ playbook_dir }}/../group_vars/all/vault"
|
||||
|
||||
roles:
|
||||
- docker-host
|
||||
- paperclip-docker
|
||||
|
||||
post_tasks:
|
||||
- name: Verify Paperclip stack is running
|
||||
community.docker.docker_container_info:
|
||||
name: "{{ item }}"
|
||||
register: container_status
|
||||
loop:
|
||||
- paperclip
|
||||
- paperclip-nginx
|
||||
- paperclip-certbot
|
||||
failed_when: container_status.containers | length == 0
|
||||
changed_when: false
|
||||
|
||||
- name: Verify Docker is available
|
||||
command: docker --version
|
||||
register: docker_version
|
||||
changed_when: false
|
||||
|
||||
- name: Show Docker version
|
||||
debug:
|
||||
msg: "Docker version: {{ docker_version.stdout }}"
|
||||
|
||||
- name: Verify docker-compose plugin is available
|
||||
command: docker compose version
|
||||
register: compose_version
|
||||
changed_when: false
|
||||
ignore_errors: true
|
||||
|
||||
- name: Show docker-compose version
|
||||
debug:
|
||||
msg: "Docker Compose version: {{ compose_version.stdout | default('docker-compose plugin not found') }}"
|
||||
|
||||
- name: Display deployment summary
|
||||
debug:
|
||||
msg: |
|
||||
Paperclip stack deployed successfully!
|
||||
|
||||
Access points:
|
||||
- HTTPS: https://{{ paperclip_domain }}
|
||||
- HTTP (redirects to HTTPS): http://{{ paperclip_domain }}
|
||||
|
||||
Services:
|
||||
- Paperclip: {{ paperclip_host }}:{{ paperclip_port }}
|
||||
- nginx (reverse proxy): 0.0.0.0:443 / 0.0.0.0:80
|
||||
- certbot: Running certificate renewal checks
|
||||
|
||||
Data location:
|
||||
- {{ paperclip_base_path }}/data
|
||||
|
||||
Certificates:
|
||||
- {{ paperclip_certs_dir }}/live/{{ paperclip_domain }}/
|
||||
|
||||
vLLM endpoint:
|
||||
- {{ vllm_endpoint }}
|
||||
|
||||
Next steps:
|
||||
1. Verify DNS resolution for {{ paperclip_domain }}
|
||||
2. Visit https://{{ paperclip_domain }} to access Paperclip
|
||||
3. Configure Paperclip with OpenCode adapter (should auto-detect vLLM at {{ vllm_endpoint }})
|
||||
4. Set up Hermes Gateway on Mac Studio
|
||||
5. Configure agents and skills
|
||||
Reference in new issue
Block a user