mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-06-11 10:05:14 +02:00
Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b22f1a22b6 | |||
| 4066da1446 | |||
| cd65eaedc0 | |||
| 8012553578 | |||
| da33106e59 | |||
| e4c320f4d1 | |||
| 2ce26925ea | |||
| 2cfd82f2d6 | |||
| c65f19bfc1 | |||
| a289140712 | |||
| a171dea170 | |||
| 8917549436 | |||
| 40f08f3f70 | |||
| 5fd6f67a58 |
@@ -480,6 +480,42 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
</details>
|
||||
|
||||
## 2026-06-11
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Fix for cross-seed after node upgrade [@TorinFrancis](https://github.com/TorinFrancis) ([#15025](https://github.com/community-scripts/ProxmoxVE/pull/15025))
|
||||
|
||||
## 2026-06-10
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Baserow ([#14968](https://github.com/community-scripts/ProxmoxVE/pull/14968))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Koillection: Fix update procedure [@tremor021](https://github.com/tremor021) ([#15033](https://github.com/community-scripts/ProxmoxVE/pull/15033))
|
||||
|
||||
## 2026-06-09
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- paperclip ([#14990](https://github.com/community-scripts/ProxmoxVE/pull/14990))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- endurain: Install pytz package during backend setup [@MickLesk](https://github.com/MickLesk) ([#15014](https://github.com/community-scripts/ProxmoxVE/pull/15014))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: Proxmox Backup Server - use deb822 [@MickLesk](https://github.com/MickLesk) ([#15013](https://github.com/community-scripts/ProxmoxVE/pull/15013))
|
||||
|
||||
## 2026-06-08
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/baserow/baserow
|
||||
|
||||
APP="Baserow"
|
||||
var_tags="${var_tags:-database;nocode;spreadsheet}"
|
||||
var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-10240}"
|
||||
var_disk="${var_disk:-15}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_arm64="${var_arm64:-no}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /opt/baserow ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "baserow" "baserow/baserow"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop baserow-backend baserow-celery baserow-celery-beat baserow-celery-export baserow-frontend
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
msg_info "Backing up Data"
|
||||
cp /opt/baserow/.env /opt/baserow.env.bak
|
||||
msg_ok "Backed up Data"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "baserow" "baserow/baserow" "tarball"
|
||||
|
||||
msg_info "Restoring Configuration"
|
||||
cp /opt/baserow.env.bak /opt/baserow/.env
|
||||
rm -f /opt/baserow.env.bak
|
||||
msg_ok "Restored Configuration"
|
||||
|
||||
msg_info "Updating Backend Dependencies"
|
||||
cd /opt/baserow/backend
|
||||
$STD uv sync --frozen --no-dev
|
||||
msg_ok "Updated Backend Dependencies"
|
||||
|
||||
msg_info "Updating Frontend"
|
||||
cd /opt/baserow/web-frontend
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
msg_ok "Updated Frontend"
|
||||
|
||||
msg_info "Running Migrations"
|
||||
cd /opt/baserow/backend
|
||||
set -a && source /opt/baserow/.env && set +a
|
||||
export PYTHONPATH="/opt/baserow/backend/src:/opt/baserow/premium/backend/src:/opt/baserow/enterprise/backend/src"
|
||||
$STD /opt/baserow/backend/.venv/bin/python src/baserow/manage.py migrate
|
||||
msg_ok "Ran Migrations"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start baserow-backend baserow-celery baserow-celery-beat baserow-celery-export baserow-frontend
|
||||
msg_ok "Started Services"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||
+1
-1
@@ -25,7 +25,7 @@ function update_script() {
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
NODE_VERSION="26" setup_nodejs
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
ensure_dependencies build-essential
|
||||
|
||||
if command -v cross-seed &>/dev/null; then
|
||||
|
||||
@@ -64,6 +64,7 @@ function update_script() {
|
||||
$STD poetry export -f requirements.txt --output requirements.txt --without-hashes
|
||||
$STD uv venv --clear
|
||||
$STD uv pip install -r requirements.txt
|
||||
$STD uv pip install pytz
|
||||
msg_ok "Backend Updated"
|
||||
|
||||
msg_info "Starting Service"
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
____
|
||||
/ __ )____ _________ _________ _ __
|
||||
/ __ / __ `/ ___/ _ \/ ___/ __ \ | /| / /
|
||||
/ /_/ / /_/ (__ ) __/ / / /_/ / |/ |/ /
|
||||
/_____/\__,_/____/\___/_/ \____/|__/|__/
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
____ ___
|
||||
/ __ \____ _____ ___ __________/ (_)___
|
||||
/ /_/ / __ `/ __ \/ _ \/ ___/ ___/ / / __ \
|
||||
/ ____/ /_/ / /_/ / __/ / / /__/ / / /_/ /
|
||||
/_/ \__,_/ .___/\___/_/ \___/_/_/ .___/
|
||||
/_/ /_/
|
||||
+4
-4
@@ -43,10 +43,9 @@ function update_script() {
|
||||
fetch_and_deploy_gh_release "koillection" "benjaminjonard/koillection" "tarball"
|
||||
|
||||
msg_info "Updating Koillection"
|
||||
cd /opt/koillection
|
||||
cp -r /opt/koillection-backup/.env.local /opt/koillection
|
||||
cp -r /opt/koillection-backup/public/uploads/. /opt/koillection/public/uploads/
|
||||
|
||||
|
||||
# Ensure APP_RUNTIME is in .env.local for CLI commands (upgrades from older versions)
|
||||
if ! grep -q "APP_RUNTIME" /opt/koillection/.env.local 2>/dev/null; then
|
||||
# Ensure file ends with newline before appending to avoid concatenation
|
||||
@@ -54,12 +53,13 @@ function update_script() {
|
||||
echo 'APP_RUNTIME="Symfony\Component\Runtime\SymfonyRuntime"' >>/opt/koillection/.env.local
|
||||
fi
|
||||
NODE_VERSION="26" NODE_MODULE="yarn" setup_nodejs
|
||||
cd /opt/koillection
|
||||
export COMPOSER_ALLOW_SUPERUSER=1
|
||||
export APP_RUNTIME='Symfony\Component\Runtime\SymfonyRuntime'
|
||||
$STD composer install --no-dev -o --no-interaction --classmap-authoritative
|
||||
$STD php bin/console doctrine:migrations:migrate --no-interaction
|
||||
$STD php bin/console app:translations:dump
|
||||
cd assets/
|
||||
cd assets/
|
||||
$STD yarn install
|
||||
$STD yarn build
|
||||
mkdir -p /opt/koillection/public/uploads
|
||||
@@ -67,7 +67,7 @@ function update_script() {
|
||||
chown -R www-data:www-data /opt/koillection/var/log
|
||||
chown -R www-data:www-data /opt/koillection/public/uploads
|
||||
rm -r /opt/koillection-backup
|
||||
|
||||
|
||||
# Ensure APP_RUNTIME is set in Apache config (for upgrades from older versions)
|
||||
if ! grep -q "APP_RUNTIME" /etc/apache2/sites-available/koillection.conf 2>/dev/null; then
|
||||
sed -i '/<VirtualHost/a\ SetEnv APP_RUNTIME "Symfony\\Component\\Runtime\\SymfonyRuntime"' /etc/apache2/sites-available/koillection.conf
|
||||
|
||||
+1
-1
@@ -43,7 +43,7 @@ function update_script() {
|
||||
msg_info "Updating Open Archiver"
|
||||
cd /opt/openarchiver
|
||||
$STD pnpm install --shamefully-hoist --frozen-lockfile --prod=false
|
||||
$STD pnpm approve-builds --yes
|
||||
$STD pnpm rebuild
|
||||
$STD pnpm run build:oss
|
||||
$STD pnpm db:migrate
|
||||
msg_ok "Updated Open Archiver"
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: Fabian Pulch (fpulch)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/paperclipai/paperclip
|
||||
|
||||
APP="Paperclip"
|
||||
var_tags="${var_tags:-ai;automation;dev-tools}"
|
||||
var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-8192}"
|
||||
var_disk="${var_disk:-20}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_arm64="${var_arm64:-no}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /opt/paperclip-ai ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "paperclip-ai" "paperclipai/paperclip"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop paperclip
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Backing up Configuration"
|
||||
cp /opt/paperclip-ai/.env /opt/paperclip.env.bak
|
||||
msg_ok "Backed up Configuration"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "paperclip-ai" "paperclipai/paperclip" "tarball"
|
||||
|
||||
msg_info "Restoring Configuration"
|
||||
mv /opt/paperclip.env.bak /opt/paperclip-ai/.env
|
||||
msg_ok "Restored Configuration"
|
||||
|
||||
msg_info "Rebuilding Paperclip"
|
||||
cd /opt/paperclip-ai
|
||||
export HUSKY=0
|
||||
export NODE_OPTIONS="--max-old-space-size=8192"
|
||||
$STD pnpm install --frozen-lockfile
|
||||
$STD pnpm build
|
||||
unset NODE_OPTIONS
|
||||
msg_ok "Rebuilt Paperclip"
|
||||
|
||||
msg_info "Updating Agent CLIs"
|
||||
$STD npm install -g \
|
||||
@anthropic-ai/claude-code@latest \
|
||||
@openai/codex@latest
|
||||
msg_ok "Updated Agent CLIs"
|
||||
|
||||
msg_info "Running Database Migrations"
|
||||
set -a && source /opt/paperclip-ai/.env && set +a
|
||||
$STD pnpm db:migrate
|
||||
msg_ok "Ran Database Migrations"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start paperclip
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3100${CL}"
|
||||
@@ -0,0 +1,194 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/baserow/baserow
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
build-essential \
|
||||
libpq-dev \
|
||||
redis-server \
|
||||
gettext \
|
||||
xmlsec1 \
|
||||
git \
|
||||
libffi-dev \
|
||||
libssl-dev \
|
||||
zlib1g-dev \
|
||||
libjpeg-dev \
|
||||
libxml2-dev \
|
||||
libxslt-dev \
|
||||
python3-dev
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql
|
||||
PG_DB_NAME="baserow" PG_DB_USER="baserow" setup_postgresql_db
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
setup_uv
|
||||
|
||||
fetch_and_deploy_gh_release "baserow" "baserow/baserow" "tarball"
|
||||
|
||||
msg_info "Installing Backend Dependencies"
|
||||
cd /opt/baserow/backend
|
||||
UV_LINK_MODE="copy"
|
||||
$STD uv sync --frozen --no-dev
|
||||
msg_ok "Installed Backend Dependencies"
|
||||
|
||||
msg_info "Building Frontend"
|
||||
cd /opt/baserow/web-frontend
|
||||
NODE_OPTIONS="--max-old-space-size=4096" $STD npm install --legacy-peer-deps
|
||||
NODE_OPTIONS="--max-old-space-size=4096" $STD npm run build
|
||||
msg_ok "Built Frontend"
|
||||
|
||||
msg_info "Configuring Baserow"
|
||||
SECRET_KEY=$(openssl rand -base64 64 | tr -dc 'a-zA-Z0-9' | head -c50)
|
||||
cat <<EOF >/opt/baserow/.env
|
||||
DATABASE_HOST=localhost
|
||||
DATABASE_PORT=5432
|
||||
DATABASE_NAME=${PG_DB_NAME}
|
||||
DATABASE_USER=${PG_DB_USER}
|
||||
DATABASE_PASSWORD=${PG_DB_PASS}
|
||||
SECRET_KEY=${SECRET_KEY}
|
||||
BASEROW_JWT_SIGNING_KEY=${SECRET_KEY}
|
||||
REDIS_HOST=localhost
|
||||
REDIS_PORT=6379
|
||||
REDIS_PASSWORD=
|
||||
REDIS_PROTOCOL=redis
|
||||
BASEROW_PUBLIC_URL=http://${LOCAL_IP}
|
||||
PUBLIC_BACKEND_URL=http://${LOCAL_IP}:8000
|
||||
PUBLIC_WEB_FRONTEND_URL=http://${LOCAL_IP}:3000
|
||||
PRIVATE_BACKEND_URL=http://localhost:8000
|
||||
PRIVATE_WEB_FRONTEND_URL=http://localhost:3000
|
||||
BASEROW_DISABLE_PUBLIC_URL_CHECK=true
|
||||
DJANGO_SETTINGS_MODULE=baserow.config.settings.base
|
||||
BASEROW_AMOUNT_OF_WORKERS=2
|
||||
MEDIA_ROOT=/opt/baserow/media
|
||||
EOF
|
||||
mkdir -p /opt/baserow/media
|
||||
msg_ok "Configured Baserow"
|
||||
|
||||
msg_info "Running Migrations"
|
||||
cd /opt/baserow/backend
|
||||
set -a && source /opt/baserow/.env && set +a
|
||||
export PYTHONPATH="/opt/baserow/backend/src:/opt/baserow/premium/backend/src:/opt/baserow/enterprise/backend/src"
|
||||
$STD /opt/baserow/backend/.venv/bin/python src/baserow/manage.py migrate
|
||||
$STD /opt/baserow/backend/.venv/bin/python src/baserow/manage.py sync_templates
|
||||
msg_ok "Ran Migrations"
|
||||
|
||||
msg_info "Creating Services"
|
||||
cat <<EOF >/etc/systemd/system/baserow-backend.service
|
||||
[Unit]
|
||||
Description=Baserow Backend
|
||||
After=network.target postgresql.service redis-server.service
|
||||
Requires=postgresql.service redis-server.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/baserow/backend
|
||||
EnvironmentFile=/opt/baserow/.env
|
||||
Environment=PYTHONPATH=/opt/baserow/backend/src:/opt/baserow/premium/backend/src:/opt/baserow/enterprise/backend/src
|
||||
ExecStart=/opt/baserow/backend/.venv/bin/gunicorn baserow.config.asgi:application -w 2 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
cat <<EOF >/etc/systemd/system/baserow-celery.service
|
||||
[Unit]
|
||||
Description=Baserow Celery Worker
|
||||
After=network.target postgresql.service redis-server.service
|
||||
Requires=postgresql.service redis-server.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/baserow/backend
|
||||
EnvironmentFile=/opt/baserow/.env
|
||||
Environment=PYTHONPATH=/opt/baserow/backend/src:/opt/baserow/premium/backend/src:/opt/baserow/enterprise/backend/src
|
||||
ExecStart=/opt/baserow/backend/.venv/bin/celery -A baserow worker -l INFO
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
cat <<EOF >/etc/systemd/system/baserow-celery-export.service
|
||||
[Unit]
|
||||
Description=Baserow Celery Export Worker
|
||||
After=network.target postgresql.service redis-server.service
|
||||
Requires=postgresql.service redis-server.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/baserow/backend
|
||||
EnvironmentFile=/opt/baserow/.env
|
||||
Environment=PYTHONPATH=/opt/baserow/backend/src:/opt/baserow/premium/backend/src:/opt/baserow/enterprise/backend/src
|
||||
ExecStart=/opt/baserow/backend/.venv/bin/celery -A baserow worker -l INFO -Q export
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
cat <<EOF >/etc/systemd/system/baserow-celery-beat.service
|
||||
[Unit]
|
||||
Description=Baserow Celery Beat Scheduler
|
||||
After=network.target postgresql.service redis-server.service
|
||||
Requires=postgresql.service redis-server.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/baserow/backend
|
||||
EnvironmentFile=/opt/baserow/.env
|
||||
Environment=PYTHONPATH=/opt/baserow/backend/src:/opt/baserow/premium/backend/src:/opt/baserow/enterprise/backend/src
|
||||
ExecStart=/opt/baserow/backend/.venv/bin/celery -A baserow beat -l INFO -S redbeat.RedBeatScheduler
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
KillSignal=SIGQUIT
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-target.target
|
||||
EOF
|
||||
|
||||
cat <<EOF >/etc/systemd/system/baserow-frontend.service
|
||||
[Unit]
|
||||
Description=Baserow Web Frontend
|
||||
After=network.target baserow-backend.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/baserow/web-frontend
|
||||
EnvironmentFile=/opt/baserow/.env
|
||||
Environment=HOST=0.0.0.0
|
||||
Environment=PORT=3000
|
||||
ExecStart=/usr/bin/node --import ./env-remap.mjs .output/server/index.mjs
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
systemctl enable -q --now redis-server baserow-backend baserow-celery baserow-celery-export baserow-celery-beat baserow-frontend
|
||||
msg_ok "Created Services"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -17,7 +17,7 @@ msg_info "Installing Dependencies"
|
||||
$STD apt install -y build-essential
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="26" setup_nodejs
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
|
||||
msg_info "Setup Cross-Seed"
|
||||
$STD npm install cross-seed@latest -g
|
||||
|
||||
@@ -88,6 +88,7 @@ $STD poetry self add poetry-plugin-export
|
||||
$STD poetry export -f requirements.txt --output requirements.txt --without-hashes
|
||||
$STD uv venv --clear
|
||||
$STD uv pip install -r requirements.txt
|
||||
$STD uv pip install pytz
|
||||
msg_ok "Setup Backend"
|
||||
|
||||
msg_info "Creating Service"
|
||||
|
||||
@@ -46,7 +46,7 @@ sed -i "s|^ENCRYPTION_KEY=.*|ENCRYPTION_KEY=$SECRET_KEY|g" /opt/openarchiver/.en
|
||||
sed -i "s|^TIKA_URL=.*|TIKA_URL=|g" /opt/openarchiver/.env
|
||||
sed -i "s|^ORIGIN=.*|ORIGIN=http://$LOCAL_IP:3000|g" /opt/openarchiver/.env
|
||||
$STD pnpm install --shamefully-hoist --frozen-lockfile --prod=false
|
||||
$STD pnpm approve-builds
|
||||
$STD pnpm rebuild
|
||||
$STD pnpm run build:oss
|
||||
$STD pnpm db:migrate
|
||||
msg_ok "Setup Open Archiver"
|
||||
|
||||
@@ -0,0 +1,162 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: Fabian Pulch (fpulch)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/paperclipai/paperclip
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
build-essential \
|
||||
git \
|
||||
ripgrep
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="paperclip" PG_DB_USER="paperclip" setup_postgresql_db
|
||||
|
||||
fetch_and_deploy_gh_release "paperclip-ai" "paperclipai/paperclip" "tarball"
|
||||
|
||||
msg_info "Building Paperclip"
|
||||
cd /opt/paperclip-ai
|
||||
export HUSKY=0
|
||||
export NODE_OPTIONS="--max-old-space-size=8192"
|
||||
$STD pnpm install --frozen-lockfile
|
||||
$STD pnpm build
|
||||
unset NODE_OPTIONS
|
||||
msg_ok "Built Paperclip"
|
||||
|
||||
msg_info "Installing Agent CLIs"
|
||||
$STD npm install -g \
|
||||
@anthropic-ai/claude-code@latest \
|
||||
@openai/codex@latest
|
||||
msg_ok "Installed Agent CLIs"
|
||||
|
||||
msg_info "Configuring Paperclip"
|
||||
PAPERCLIP_HOME="/opt/paperclip-data"
|
||||
PAPERCLIP_CONFIG="${PAPERCLIP_HOME}/instances/default/config.json"
|
||||
|
||||
mkdir -p /opt/paperclip-data
|
||||
mkdir -p /root/.claude /root/.codex
|
||||
BETTER_AUTH_SECRET=$(openssl rand -hex 32)
|
||||
cat <<EOF >/opt/paperclip-ai/.env
|
||||
DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@127.0.0.1:5432/${PG_DB_NAME}
|
||||
HOST=0.0.0.0
|
||||
PORT=3100
|
||||
SERVE_UI=true
|
||||
PAPERCLIP_HOME=${PAPERCLIP_HOME}
|
||||
PAPERCLIP_CONFIG=${PAPERCLIP_CONFIG}
|
||||
PAPERCLIP_INSTANCE_ID=default
|
||||
PAPERCLIP_DEPLOYMENT_MODE=authenticated
|
||||
PAPERCLIP_DEPLOYMENT_EXPOSURE=private
|
||||
PAPERCLIP_PUBLIC_URL=http://${LOCAL_IP}:3100
|
||||
BETTER_AUTH_SECRET=${BETTER_AUTH_SECRET}
|
||||
EOF
|
||||
msg_ok "Configured Paperclip"
|
||||
|
||||
msg_info "Running Database Migrations"
|
||||
set -a && source /opt/paperclip-ai/.env && set +a
|
||||
$STD pnpm db:migrate
|
||||
msg_ok "Ran Database Migrations"
|
||||
|
||||
msg_info "Bootstrapping Paperclip"
|
||||
PAPERCLIP_ONBOARD_LOG=/opt/paperclip-ai/paperclip-onboard.log
|
||||
PAPERCLIP_BOOTSTRAP_LOG=/opt/paperclip-ai/paperclip-bootstrap.log
|
||||
|
||||
for PAPERCLIP_ONBOARD_CMD in \
|
||||
"pnpm paperclipai onboard --yes --bind lan" \
|
||||
"pnpm paperclipai onboard --yes"; do
|
||||
rm -f "$PAPERCLIP_ONBOARD_LOG"
|
||||
setsid env \
|
||||
PAPERCLIP_HOME="$PAPERCLIP_HOME" \
|
||||
PAPERCLIP_CONFIG="$PAPERCLIP_CONFIG" \
|
||||
bash -c 'cd /opt/paperclip-ai && exec "$@"' _ $PAPERCLIP_ONBOARD_CMD \
|
||||
>"$PAPERCLIP_ONBOARD_LOG" 2>&1 &
|
||||
PAPERCLIP_ONBOARD_PID=$!
|
||||
for _ in {1..60}; do
|
||||
if [[ -f "$PAPERCLIP_CONFIG" ]]; then
|
||||
break
|
||||
fi
|
||||
if ! kill -0 "$PAPERCLIP_ONBOARD_PID" 2>/dev/null; then
|
||||
break
|
||||
fi
|
||||
sleep 2
|
||||
done
|
||||
if kill -0 "$PAPERCLIP_ONBOARD_PID" 2>/dev/null; then
|
||||
kill -- -"${PAPERCLIP_ONBOARD_PID}" >/dev/null 2>&1 || true
|
||||
wait "$PAPERCLIP_ONBOARD_PID" 2>/dev/null || true
|
||||
fi
|
||||
[[ -f "$PAPERCLIP_CONFIG" ]] && break
|
||||
if ! grep -q "unknown option '--bind'" "$PAPERCLIP_ONBOARD_LOG"; then
|
||||
break
|
||||
fi
|
||||
msg_info "Retrying Paperclip Onboarding"
|
||||
done
|
||||
|
||||
if [[ ! -f "$PAPERCLIP_CONFIG" ]]; then
|
||||
msg_error "Failed to bootstrap Paperclip"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if grep -q 'authenticated' $PAPERCLIP_CONFIG; then
|
||||
pnpm paperclipai auth bootstrap-ceo >"$PAPERCLIP_BOOTSTRAP_LOG" 2>&1 || true
|
||||
PAPERCLIP_INVITE_URL=$(awk -F'Invite URL: ' '/Invite URL:/ {print $2; exit}' "$PAPERCLIP_BOOTSTRAP_LOG")
|
||||
PAPERCLIP_INVITE_EXPIRY=$(awk -F'Expires: ' '/Expires:/ {print $2; exit}' "$PAPERCLIP_BOOTSTRAP_LOG")
|
||||
if [[ -n "$PAPERCLIP_INVITE_URL" ]]; then
|
||||
cat <<EOF >>~/paperclip.creds
|
||||
|
||||
Paperclip Admin Invite
|
||||
Invite URL: ${PAPERCLIP_INVITE_URL}
|
||||
Expires: ${PAPERCLIP_INVITE_EXPIRY}
|
||||
EOF
|
||||
msg_ok "Generated Paperclip CEO Invite"
|
||||
echo -e "${INFO}${YW} Open this invite URL to finish Paperclip admin setup:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}${PAPERCLIP_INVITE_URL}${CL}"
|
||||
[[ -n "$PAPERCLIP_INVITE_EXPIRY" ]] && echo -e "${TAB}${INFO}${YW}Invite expires: ${PAPERCLIP_INVITE_EXPIRY}${CL}"
|
||||
else
|
||||
msg_warn "Paperclip authenticated mode is enabled, but no CEO invite was generated automatically"
|
||||
fi
|
||||
else
|
||||
msg_info "Paperclip Bootstrapped in Local Trusted Mode"
|
||||
fi
|
||||
rm -f "$PAPERCLIP_ONBOARD_LOG" "$PAPERCLIP_BOOTSTRAP_LOG"
|
||||
msg_ok "Bootstrapped Paperclip"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/paperclip.service
|
||||
[Unit]
|
||||
Description=Paperclip
|
||||
After=network.target postgresql.service
|
||||
Requires=postgresql.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/paperclip-ai
|
||||
EnvironmentFile=/opt/paperclip-ai/.env
|
||||
Environment=HOME=/root
|
||||
Environment=CODEX_HOME=/root/.codex
|
||||
Environment=PATH=/root/.local/bin:/usr/local/bin:/usr/bin:/bin
|
||||
Environment=DISABLE_AUTOUPDATER=1
|
||||
ExecStart=/usr/bin/env pnpm paperclipai run
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now paperclip
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -14,11 +14,12 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Proxmox Backup Server"
|
||||
curl -fsSL "https://enterprise.proxmox.com/debian/proxmox-release-trixie.gpg" -o "/etc/apt/trusted.gpg.d/proxmox-release-trixie.gpg"
|
||||
cat <<EOF >>/etc/apt/sources.list
|
||||
deb https://download.proxmox.com/debian/pbs trixie pbs-no-subscription
|
||||
EOF
|
||||
$STD apt update
|
||||
setup_deb822_repo \
|
||||
"proxmox-backup-server" \
|
||||
"https://enterprise.proxmox.com/debian/proxmox-archive-keyring-trixie.gpg" \
|
||||
"http://download.proxmox.com/debian/pbs" \
|
||||
"trixie" \
|
||||
"pbs-no-subscription"
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
export IFUPDOWN2_NO_IFRELOAD=1
|
||||
$STD apt install -y proxmox-backup-server
|
||||
|
||||
Reference in New Issue
Block a user