#!/usr/bin/env bash # Copyright (c) 2021-2026 community-scripts ORG # Author: MickLesk (CanbiZ) # License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE # Source: https://www.papermark.com/ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 catch_errors setting_up_container network_check update_os NODE_VERSION="22" setup_nodejs PG_VERSION="17" setup_postgresql PG_DB_NAME="papermark" PG_DB_USER="papermark" setup_postgresql_db fetch_and_deploy_gh_release "papermark" "mfts/papermark" "tarball" msg_info "Setting up Papermark" cd /opt/papermark DB_URL="postgresql://${PG_DB_USER}:${PG_DB_PASS}@127.0.0.1:5432/${PG_DB_NAME}" cat </opt/papermark/.env DATABASE_URL=${DB_URL} POSTGRES_PRISMA_URL=${DB_URL} POSTGRES_PRISMA_URL_NON_POOLING=${DB_URL} NEXTAUTH_SECRET=$(openssl rand -base64 32) NEXTAUTH_URL=http://${LOCAL_IP}:3000 NEXT_PUBLIC_BASE_URL=http://${LOCAL_IP}:3000 NEXT_PUBLIC_APP_BASE_HOST=app.example.local NEXT_PUBLIC_WEBHOOK_BASE_HOST=webhooks.example.local HANKO_API_KEY=placeholder NEXT_PUBLIC_HANKO_TENANT_ID=placeholder QSTASH_TOKEN=placeholder SLACK_CLIENT_ID=placeholder SLACK_CLIENT_SECRET=placeholder NEXT_PRIVATE_DOCUMENT_PASSWORD_KEY=$(openssl rand -hex 32) NEXT_PRIVATE_VERIFICATION_SECRET=$(openssl rand -hex 32) RESEND_API_KEY= NODE_ENV=production EOF $STD npm install $STD npx prisma generate $STD npx prisma migrate deploy # Patch middleware to treat IP addresses as app host (not custom domains) # Without this, accessing via IP redirects to https://www.papermark.com node -e " const fs = require('fs'); let c = fs.readFileSync('middleware.ts', 'utf8'); c = c.replace( 'host?.endsWith(\".vercel.app\")', 'host?.endsWith(\".vercel.app\") || /^[\\\\d.:]+\$/.test(host || \"\")' ); fs.writeFileSync('middleware.ts', c); " NODE_OPTIONS="--max-old-space-size=3584" $STD npm run build msg_ok "Set up Papermark" msg_info "Creating Service" cat </etc/systemd/system/papermark.service [Unit] Description=Papermark Document Sharing After=network.target postgresql.service [Service] Type=simple User=root WorkingDirectory=/opt/papermark EnvironmentFile=/opt/papermark/.env ExecStart=/usr/bin/npm start Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target EOF systemctl enable -q --now papermark msg_ok "Created Service" motd_ssh customize cleanup_lxc