ProxmoxVED/install/pangolin-install.sh
2025-10-26 20:35:58 +01:00

98 lines
2.3 KiB
Bash

#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://pangolin.net/
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 \
sqlite3 \
iptables
msg_ok "Installed Dependencies"
NODE_VERSION="22" setup_nodejs
fetch_and_deploy_gh_release "pangolin" "fosrl/pangolin" "tarball"
fetch_and_deploy_gh_release "gerbil" "fosrl/gerbil" "singlefile" "latest" "/usr/bin" "gerbil_linux_amd64"
IP_ADDR=$(hostname -I | awk '{print $1}')
msg_info "Setup Pangolin (Patience)"
export BUILD=oss
export DATABASE=sqlite
cd /opt/pangolin
$STD npm ci
echo "export * from \"./$DATABASE\";" > server/db/index.ts
echo "export const build = \"$BUILD\" as any;" > server/build.ts
cp tsconfig.oss.json tsconfig.json
mkdir -p dist
$STD npm run next:build
$STD node esbuild.mjs -e server/index.ts -o dist/server.mjs -b $BUILD
$STD node esbuild.mjs -e server/setup/migrationsSqlite.ts -o dist/migrations.mjs
$STD npm run build:cli
cp -R .next/standalone ./
cp ./cli/wrapper.sh /usr/local/bin/pangctl
chmod +x /usr/local/bin/pangctl ./dist/cli.mjs
cp server/db/names.json ./dist/names.json
$STD npm run db:sqlite:generate
$STD npm run db:sqlite:push
msg_ok "Setup Pangolin"
msg_info "Creating Pangolin Service"
cat <<EOF >/etc/systemd/system/pangolin.service
[Unit]
Description=Pangolin Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/pangolin
ExecStart=/usr/bin/npm start
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now pangolin
msg_ok "Created pangolin Service"
msg_info "Setting up gerbil"
mkdir -p /var/config
cat <<EOF >/etc/systemd/system/gerbil.service
[Unit]
Description=Gerbil Service
After=network.target
Requires=pangolin.service
[Service]
Type=simple
User=root
ExecStart=/usr/bin/gerbil --reachableAt=http://$IP_ADDR:3004 --generateAndSaveKeyTo=/var/config/key --remoteConfig=http://$IP_ADDR:3001/api/v1/
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now gerbil
msg_ok "Set up gerbil"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt -y autoremove
$STD apt -y autoclean
$STD apt -y clean
msg_ok "Cleaned"