mirror of
https://github.com/community-scripts/ProxmoxVED.git
synced 2026-02-25 05:57:26 +00:00
Merge branch 'community-scripts:main' into feature/minthcm
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://almalinux.org/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Copyright (c) 2021-2026 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
|
||||
41
install/alpine-loki-install.sh
Normal file
41
install/alpine-loki-install.sh
Normal file
@@ -0,0 +1,41 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: hoholms
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/grafana/loki
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Loki"
|
||||
$STD apk add loki
|
||||
$STD sed -i '/http_addr/s/127.0.0.1/0.0.0.0/g' /etc/conf.d/loki
|
||||
$STD rc-service loki start
|
||||
$STD rc-update add loki default
|
||||
$STD mkdir /tmp/loki/
|
||||
$STD chown -R loki:grafana /tmp/loki/
|
||||
$STD mkdir /var/log/loki/
|
||||
$STD chown -R loki:grafana /var/log/loki/
|
||||
$STD chmod 755 /etc/loki/loki-local-config.yaml
|
||||
$STD sed -i '/^querier:/,/enable_multi_variant_queries: false/ s/^/#/' /etc/loki/loki-local-config.yaml
|
||||
$STD echo "output_log=\"\${output_log:-/var/log/loki/output.log}\"" >> /etc/init.d/loki
|
||||
$STD echo "error_log=\"\${error_log:-/var/log/loki/error.log}\"" >> /etc/init.d/loki
|
||||
$STD echo "start_stop_daemon_args=\"\${SSD_OPTS} -1 \${output_log} -2 \${error_log}\"" >> /etc/init.d/loki
|
||||
$STD rc-service loki restart
|
||||
msg_ok "Installed Loki"
|
||||
|
||||
msg_info "Installing Promtail"
|
||||
$STD apk add loki-promtail
|
||||
$STD sed -i '/http_addr/s/127.0.0.1/0.0.0.0/g' /etc/conf.d/loki
|
||||
$STD rc-service loki-promtail start
|
||||
$STD rc-update add loki-promtail default
|
||||
msg_ok "Installed Promtail"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: cobalt (cobaltgit)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://ntfy.sh/
|
||||
|
||||
46
install/alpine-rustypaste-install.sh
Normal file
46
install/alpine-rustypaste-install.sh
Normal file
@@ -0,0 +1,46 @@
|
||||
#!/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://github.com/orhun/rustypaste
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
fetch_and_deploy_gh_release "rustypaste" "orhun/rustypaste" "prebuild" "latest" "/opt/rustypaste" "*x86_64-unknown-linux-musl.tar.gz"
|
||||
|
||||
msg_info "Setting up rustypaste"
|
||||
cd /opt/rustypaste
|
||||
sed -i 's|^address = ".*"|address = "0.0.0.0:8000"|' config.toml
|
||||
msg_ok "Set up rustypaste"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<'EOF' >/etc/init.d/rustypaste
|
||||
#!/sbin/openrc-run
|
||||
|
||||
name="rustypaste"
|
||||
description="rustypaste Service"
|
||||
directory="/opt/rustypaste"
|
||||
command="/opt/rustypaste/rustypaste"
|
||||
command_args=""
|
||||
pidfile="/run/${RC_SVCNAME}.pid"
|
||||
command_background="yes"
|
||||
start_stop_daemon_args="--user root"
|
||||
|
||||
depend() {
|
||||
need net
|
||||
}
|
||||
EOF
|
||||
chmod +x /etc/init.d/rustypaste
|
||||
rc-update add rustypaste default
|
||||
rc-service rustypaste start
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
24
install/alpine-valkey-install.sh
Normal file
24
install/alpine-valkey-install.sh
Normal file
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: pshankinclarke (lazarillo)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://valkey.io/
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Valkey"
|
||||
$STD apk add valkey valkey-openrc valkey-cli
|
||||
$STD sed -i 's/^bind .*/bind 0.0.0.0/' /etc/valkey/valkey.conf
|
||||
$STD rc-update add valkey default
|
||||
$STD rc-service valkey start
|
||||
msg_ok "Installed Valkey"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
68
install/ampache-install.sh
Normal file
68
install/ampache-install.sh
Normal file
@@ -0,0 +1,68 @@
|
||||
#!/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/ampache/ampache
|
||||
|
||||
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 \
|
||||
flac \
|
||||
vorbis-tools \
|
||||
lame \
|
||||
ffmpeg \
|
||||
inotify-tools \
|
||||
libavcodec-extra \
|
||||
libmp3lame-dev \
|
||||
libtheora-dev \
|
||||
libvorbis-dev \
|
||||
libvpx-dev
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PHP_VERSION=8.4 PHP_MODULE=bcmath,bz2,curl,gd,imagick,intl,mbstring,mysql,sqlite3,xml,xmlrpc,zip PHP_APACHE=YES setup_php
|
||||
setup_mariadb
|
||||
MARIADB_DB_USER=ampache MARIADB_DB_NAME=ampache setup_mariadb_db
|
||||
|
||||
fetch_and_deploy_gh_release "ampache" "ampache/ampache" "prebuild" "latest" "/opt/ampache" "ampache-*_all_php8.4.zip"
|
||||
|
||||
msg_info "Setup Ampache"
|
||||
rm -rf /var/www/html
|
||||
ln -s /opt/ampache/public /var/www/html
|
||||
mv /opt/ampache/public/rest/.htaccess.dist /opt/ampache/public/rest/.htaccess
|
||||
mv /opt/ampache/public/play/.htaccess.dist /opt/ampache/public/play/.htaccess
|
||||
cp /opt/ampache/config/ampache.cfg.php.dist /opt/ampache/config/ampache.cfg.php
|
||||
chmod 664 /opt/ampache/public/rest/.htaccess /opt/ampache/public/play/.htaccess
|
||||
msg_ok "Set up Ampache"
|
||||
|
||||
msg_info "Configuring Database Connection"
|
||||
sed -i 's|^database_hostname = .*|database_hostname = "localhost"|' /opt/ampache/config/ampache.cfg.php
|
||||
sed -i 's|^database_name = .*|database_name = "ampache"|' /opt/ampache/config/ampache.cfg.php
|
||||
sed -i 's|^database_username = .*|database_username = "ampache"|' /opt/ampache/config/ampache.cfg.php
|
||||
sed -i "s|^database_password = .*|database_password = \"${MARIADB_DB_PASS}\"|" /opt/ampache/config/ampache.cfg.php
|
||||
chown -R www-data:www-data /opt/ampache
|
||||
msg_ok "Configured Database Connection"
|
||||
|
||||
msg_info "Importing Database Schema"
|
||||
mariadb -u ampache -p"${MARIADB_DB_PASS}" ampache </opt/ampache/resources/sql/ampache.sql
|
||||
msg_ok "Imported Database Schema"
|
||||
|
||||
msg_info "Configuring PHP"
|
||||
sed -i 's/upload_max_filesize = .*/upload_max_filesize = 100M/' /etc/php/8.4/apache2/php.ini
|
||||
sed -i 's/post_max_size = .*/post_max_size = 100M/' /etc/php/8.4/apache2/php.ini
|
||||
sed -i 's/max_execution_time = .*/max_execution_time = 600/' /etc/php/8.4/apache2/php.ini
|
||||
sed -i 's/memory_limit = .*/memory_limit = 512M/' /etc/php/8.4/apache2/php.ini
|
||||
$STD a2enmod rewrite
|
||||
$STD systemctl restart apache2
|
||||
msg_ok "Configured PHP"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: luismco
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/ThePhaseless/Byparr
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://www.centos.org/centos-stream/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: Slaviša Arežina (tremor021)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://github.com/fccview/cronmaster
|
||||
@@ -12,6 +12,7 @@ catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
setup_hwaccel
|
||||
|
||||
msg_info "Installing dependencies"
|
||||
$STD apt install -y pciutils
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://github.com/RostislavDugin/postgresus
|
||||
# Source: https://github.com/databasus/databasus
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -19,34 +19,34 @@ msg_ok "Installed Dependencies"
|
||||
|
||||
import_local_ip
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="postgresus" PG_DB_USER="postgresus" setup_postgresql_db
|
||||
PG_DB_NAME="databasus" PG_DB_USER="databasus" setup_postgresql_db
|
||||
setup_go
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
|
||||
fetch_and_deploy_gh_release "postgresus" "RostislavDugin/postgresus" "tarball" "latest" "/opt/postgresus"
|
||||
fetch_and_deploy_gh_release "databasus" "databasus/databasus" "tarball" "latest" "/opt/databasus"
|
||||
|
||||
msg_info "Building Postgresus (Patience)"
|
||||
cd /opt/postgresus/frontend
|
||||
msg_info "Building Databasus (Patience)"
|
||||
cd /opt/databasus/frontend
|
||||
$STD npm ci
|
||||
$STD npm run build
|
||||
cd /opt/postgresus/backend
|
||||
cd /opt/databasus/backend
|
||||
$STD go mod tidy
|
||||
$STD go mod download
|
||||
$STD go install github.com/swaggo/swag/cmd/swag@latest
|
||||
$STD /root/go/bin/swag init -g cmd/main.go -o swagger
|
||||
$STD env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o postgresus ./cmd/main.go
|
||||
mv /opt/postgresus/backend/postgresus /opt/postgresus/postgresus
|
||||
mkdir -p /opt/postgresus_data/{data,backups,logs}
|
||||
mkdir -p /postgresus-data/temp
|
||||
mkdir -p /opt/postgresus/ui/build
|
||||
cp -r /opt/postgresus/frontend/dist/* /opt/postgresus/ui/build/
|
||||
cp -r /opt/postgresus/backend/migrations /opt/postgresus/
|
||||
chown -R postgres:postgres /opt/postgresus
|
||||
chown -R postgres:postgres /opt/postgresus_data
|
||||
chown -R postgres:postgres /postgresus-data
|
||||
msg_ok "Built Postgresus"
|
||||
$STD env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o databasus ./cmd/main.go
|
||||
mv /opt/databasus/backend/databasus /opt/databasus/databasus
|
||||
mkdir -p /opt/databasus_data/{data,backups,logs}
|
||||
mkdir -p /databasus-data/temp
|
||||
mkdir -p /opt/databasus/ui/build
|
||||
cp -r /opt/databasus/frontend/dist/* /opt/databasus/ui/build/
|
||||
cp -r /opt/databasus/backend/migrations /opt/databasus/
|
||||
chown -R postgres:postgres /opt/databasus
|
||||
chown -R postgres:postgres /opt/databasus_data
|
||||
chown -R postgres:postgres /databasus-data
|
||||
msg_ok "Built Databasus"
|
||||
|
||||
msg_info "Configuring Postgresus"
|
||||
msg_info "Configuring Databasus"
|
||||
ADMIN_PASS=$(openssl rand -base64 12)
|
||||
JWT_SECRET=$(openssl rand -hex 32)
|
||||
|
||||
@@ -59,7 +59,7 @@ done
|
||||
$STD go install github.com/pressly/goose/v3/cmd/goose@latest
|
||||
ln -sf /root/go/bin/goose /usr/local/bin/goose
|
||||
|
||||
cat <<EOF >/opt/postgresus/.env
|
||||
cat <<EOF >/opt/databasus/.env
|
||||
# Environment
|
||||
ENV_MODE=production
|
||||
|
||||
@@ -74,7 +74,7 @@ DATABASE_URL=postgres://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}
|
||||
# Migrations
|
||||
GOOSE_DRIVER=postgres
|
||||
GOOSE_DBSTRING=postgres://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}?sslmode=disable
|
||||
GOOSE_MIGRATION_DIR=/opt/postgresus/migrations
|
||||
GOOSE_MIGRATION_DIR=/opt/databasus/migrations
|
||||
|
||||
# Security
|
||||
JWT_SECRET=${JWT_SECRET}
|
||||
@@ -85,23 +85,23 @@ ADMIN_EMAIL=admin@localhost
|
||||
ADMIN_PASSWORD=${ADMIN_PASS}
|
||||
|
||||
# Paths
|
||||
DATA_DIR=/opt/postgresus_data/data
|
||||
BACKUP_DIR=/opt/postgresus_data/backups
|
||||
LOG_DIR=/opt/postgresus_data/logs
|
||||
DATA_DIR=/opt/databasus_data/data
|
||||
BACKUP_DIR=/opt/databasus_data/backups
|
||||
LOG_DIR=/opt/databasus_data/logs
|
||||
|
||||
# PostgreSQL Tools (for creating backups)
|
||||
PG_DUMP_PATH=/usr/lib/postgresql/17/bin/pg_dump
|
||||
PG_RESTORE_PATH=/usr/lib/postgresql/17/bin/pg_restore
|
||||
PSQL_PATH=/usr/lib/postgresql/17/bin/psql
|
||||
EOF
|
||||
chown postgres:postgres /opt/postgresus/.env
|
||||
chmod 600 /opt/postgresus/.env
|
||||
msg_ok "Configured Postgresus"
|
||||
chown postgres:postgres /opt/databasus/.env
|
||||
chmod 600 /opt/databasus/.env
|
||||
msg_ok "Configured Databasus"
|
||||
|
||||
msg_info "Creating Postgresus Service"
|
||||
cat <<EOF >/etc/systemd/system/postgresus.service
|
||||
msg_info "Creating Databasus Service"
|
||||
cat <<EOF >/etc/systemd/system/databasus.service
|
||||
[Unit]
|
||||
Description=Postgresus - PostgreSQL Backup Management
|
||||
Description=Databasus - PostgreSQL Backup Management
|
||||
After=network.target postgresql.service
|
||||
Requires=postgresql.service
|
||||
|
||||
@@ -109,10 +109,10 @@ Requires=postgresql.service
|
||||
Type=simple
|
||||
User=postgres
|
||||
Group=postgres
|
||||
WorkingDirectory=/opt/postgresus
|
||||
WorkingDirectory=/opt/databasus
|
||||
Environment="PATH=/usr/local/bin:/usr/bin:/bin"
|
||||
EnvironmentFile=/opt/postgresus/.env
|
||||
ExecStart=/opt/postgresus/postgresus
|
||||
EnvironmentFile=/opt/databasus/.env
|
||||
ExecStart=/opt/databasus/databasus
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
StandardOutput=journal
|
||||
@@ -122,11 +122,11 @@ StandardError=journal
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
$STD systemctl daemon-reload
|
||||
$STD systemctl enable -q --now postgresus
|
||||
msg_ok "Created Postgresus Service"
|
||||
$STD systemctl enable -q --now databasus
|
||||
msg_ok "Created Databasus Service"
|
||||
|
||||
msg_info "Configuring Nginx"
|
||||
cat <<EOF >/etc/nginx/sites-available/postgresus
|
||||
cat <<EOF >/etc/nginx/sites-available/databasus
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
@@ -147,7 +147,7 @@ server {
|
||||
}
|
||||
}
|
||||
EOF
|
||||
ln -sf /etc/nginx/sites-available/postgresus /etc/nginx/sites-enabled/postgresus
|
||||
ln -sf /etc/nginx/sites-available/databasus /etc/nginx/sites-enabled/databasus
|
||||
rm -f /etc/nginx/sites-enabled/default
|
||||
$STD nginx -t
|
||||
$STD systemctl enable -q --now nginx
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source:
|
||||
|
||||
@@ -1,83 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Author: MickLesk (Canbiz)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies (Patience)"
|
||||
apt-get install -y \
|
||||
apache2 \
|
||||
cron \
|
||||
flac \
|
||||
vorbis-tools \
|
||||
lame \
|
||||
ffmpeg \
|
||||
lsb-release \
|
||||
gosu \
|
||||
wget \
|
||||
curl \
|
||||
git \
|
||||
make \
|
||||
inotify-tools \
|
||||
libavcodec-extra \
|
||||
libev-libevent-dev \
|
||||
libmp3lame-dev \
|
||||
libtheora-dev \
|
||||
libvorbis-dev \
|
||||
libvpx-dev
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PHP_VERSION=8.4
|
||||
PHP_MODULE=bcmath,bz2,cli,common,curl,fpm,gd,imagick,intl,mbstring,mysql,sqlite3,xml,xmlrpc,zip
|
||||
PHP_APACHE=YES
|
||||
setup_php
|
||||
setup_mariadb
|
||||
|
||||
msg_info "Setting up Database"
|
||||
DB_NAME=ampache2
|
||||
DB_USER=ampache2
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
sudo mysql -u root -e "CREATE DATABASE $DB_NAME;"
|
||||
sudo mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED WITH mysql_native_password AS PASSWORD('$DB_PASS');"
|
||||
sudo mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
||||
echo "" >>~/ampache.creds
|
||||
echo -e "Ampache Database User: \e $DB_USER\e" >>~/ampache.creds
|
||||
echo -e "Ampache Database Password: \e$DB_PASS\e" >>~/ampache.creds
|
||||
echo -e "Ampache Database Name: \e$DB_NAME\e" >>~/ampache.creds
|
||||
msg_ok "Set up database"
|
||||
|
||||
msg_info "Installing Ampache(Patience)"
|
||||
cd /opt
|
||||
AMPACHE_VERSION=$(wget -q https://github.com/ampache/ampache/releases/latest -O - | grep "title>Release" | cut -d " " -f 4)
|
||||
wget https://github.com/ampache/ampache/releases/download/${AMPACHE_VERSION}/ampache-${AMPACHE_VERSION}_all_php8.4.zip
|
||||
unzip -q ampache-${AMPACHE_VERSION}_all_php8.4.zip -d ampache
|
||||
rm -rf /var/www/html
|
||||
ln -s /opt/ampache/public /var/www/html
|
||||
sudo mv /opt/ampache/rest/.htaccess.dist /opt/ampache/rest/.htaccess
|
||||
sudo mv /opt/ampache/play/.htaccess.dist /opt/ampache/play/.htaccess
|
||||
sudo mv /opt/ampache/channel/.htaccess.dist /opt/ampache/channel/.htaccess
|
||||
sudo cp /opt/ampache/config/ampache.cfg.php.dist /opt/ampache/config/ampache.cfg.php
|
||||
sudo chmod 664 /opt/ampache/rest/.htaccess /opt/ampache/play/.htaccess
|
||||
sudo sed -i 's/upload_max_filesize = .*/upload_max_filesize = 50M/' /etc/php/8.4/apache2/php.ini &&
|
||||
sudo sed -i 's/post_max_size = .*/post_max_size = 50M/' /etc/php/8.4/apache2/php.ini &&
|
||||
sudo sed -i 's/max_execution_time = .*/max_execution_time = 300/' /etc/php/8.4/apache2/php.ini &&
|
||||
sudo sed -i 's/memory_limit = .*/memory_limit = 256M/' /etc/php/8.4/apache2/php.ini &&
|
||||
sudo systemctl restart apache2
|
||||
msg_ok "Installed Ampache"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get autoremove
|
||||
$STD apt-get autoclean
|
||||
msg_ok "Cleaned"
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (Canbiz)
|
||||
# License: MIT |
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: Nícolas Pastorello (opastorello)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/jumpserver/jumpserver
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://github.com/getmaxun/maxun
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://github.com/Kanba-co/kanba
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Copyright (c) 2021-2026 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://petio.tv/
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Copyright (c) 2021-2026 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://nginxproxymanager.com/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: CrazyWolf13
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/arunavo4/gitea-mirror
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source:
|
||||
|
||||
@@ -1,107 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck
|
||||
# Co-Author: havardthom
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://openwebui.com/
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
ffmpeg
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setup Python3"
|
||||
$STD apt-get install -y --no-install-recommends \
|
||||
python3 \
|
||||
python3-pip
|
||||
msg_ok "Setup Python3"
|
||||
|
||||
setup_nodejs
|
||||
|
||||
msg_info "Installing Open WebUI (Patience)"
|
||||
fetch_and_deploy_gh_release "open-webui/open-webui"
|
||||
cd /opt/openwebui/backend
|
||||
$STD pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
|
||||
$STD pip3 install -r requirements.txt -U
|
||||
cd /opt/openwebui
|
||||
cat <<EOF >/opt/openwebui/.env
|
||||
# Ollama URL for the backend to connect
|
||||
# The path '/ollama' will be redirected to the specified backend URL
|
||||
OLLAMA_BASE_URL=http://0.0.0.0:11434
|
||||
OPENAI_API_BASE_URL=''
|
||||
OPENAI_API_KEY=''
|
||||
# AUTOMATIC1111_BASE_URL="http://localhost:7860"
|
||||
# DO NOT TRACK
|
||||
SCARF_NO_ANALYTICS=true
|
||||
DO_NOT_TRACK=true
|
||||
ANONYMIZED_TELEMETRY=false
|
||||
ENV=prod
|
||||
ENABLE_OLLAMA_API=false
|
||||
EOF
|
||||
$STD npm install
|
||||
export NODE_OPTIONS="--max-old-space-size=3584"
|
||||
sed -i "s/git rev-parse HEAD/openssl rand -hex 20/g" /opt/openwebui/svelte.config.js
|
||||
$STD npm run build
|
||||
msg_ok "Installed Open WebUI"
|
||||
|
||||
read -r -p "${TAB3}Would you like to add Ollama? <y/N> " prompt
|
||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||
msg_info "Installing Ollama"
|
||||
curl -fsSLO https://ollama.com/download/ollama-linux-amd64.tgz
|
||||
tar -C /usr -xzf ollama-linux-amd64.tgz
|
||||
rm -rf ollama-linux-amd64.tgz
|
||||
cat <<EOF >/etc/systemd/system/ollama.service
|
||||
[Unit]
|
||||
Description=Ollama Service
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=exec
|
||||
ExecStart=/usr/bin/ollama serve
|
||||
Environment=HOME=$HOME
|
||||
Environment=OLLAMA_HOST=0.0.0.0
|
||||
Restart=always
|
||||
RestartSec=3
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now ollama
|
||||
sed -i 's/ENABLE_OLLAMA_API=false/ENABLE_OLLAMA_API=true/g' /opt/openwebui/.env
|
||||
msg_ok "Installed Ollama"
|
||||
fi
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/open-webui.service
|
||||
[Unit]
|
||||
Description=Open WebUI Service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=exec
|
||||
WorkingDirectory=/opt/openwebui
|
||||
EnvironmentFile=/opt/openwebui/.env
|
||||
ExecStart=/opt/openwebui/backend/start.sh
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now open-webui
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# 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/agersant/polaris
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: SunFlowerOwl
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/haugene/docker-transmission-openvpn
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (Canbiz)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://vikunja.io/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://www.devuan.org/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Copyright (c) 2021-2026 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://www.docker.com/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/ente-io/ente
|
||||
@@ -14,19 +14,22 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
$STD apt install -y \
|
||||
libsodium23 \
|
||||
libsodium-dev \
|
||||
pkg-config \
|
||||
caddy \
|
||||
gcc \
|
||||
curl \
|
||||
jq
|
||||
gcc
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="ente_db" PG_DB_USER="ente" setup_postgresql_db
|
||||
setup_go
|
||||
NODE_VERSION="24" NODE_MODULE="yarn" setup_nodejs
|
||||
RUST_CRATES="wasm-pack" setup_rust
|
||||
$STD rustup target add wasm32-unknown-unknown
|
||||
import_local_ip
|
||||
|
||||
ENTE_CLI_VERSION=$(curl -s https://api.github.com/repos/ente-io/ente/releases | jq -r '[.[] | select(.tag_name | startswith("cli-v"))][0].tag_name')
|
||||
fetch_and_deploy_gh_release "ente-server" "ente-io/ente" "tarball" "latest" "/opt/ente"
|
||||
fetch_and_deploy_gh_release "ente-cli" "ente-io/ente" "prebuild" "$ENTE_CLI_VERSION" "/usr/local/bin" "ente-$ENTE_CLI_VERSION-linux-amd64.tar.gz"
|
||||
@@ -45,28 +48,15 @@ endpoint:
|
||||
EOF
|
||||
msg_ok "Configured Ente CLI"
|
||||
|
||||
msg_info "Setting up PostgreSQL"
|
||||
DB_NAME="ente_db"
|
||||
DB_USER="ente"
|
||||
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
|
||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
|
||||
msg_info "Saving Ente Credentials"
|
||||
{
|
||||
echo "Ente Credentials"
|
||||
echo "Database Name: $DB_NAME"
|
||||
echo "Database User: $DB_USER"
|
||||
echo "Database Password: $DB_PASS"
|
||||
echo ""
|
||||
echo "Important Configuration Notes:"
|
||||
echo "- Frontend is built with IP: $(hostname -I | awk '{print $1}')"
|
||||
echo "- Frontend is built with IP: $LOCAL_IP"
|
||||
echo "- If IP changes, run: /opt/ente/rebuild-frontend.sh"
|
||||
echo "- Museum API: http://$(hostname -I | awk '{print $1}'):8080"
|
||||
echo "- Photos UI: http://$(hostname -I | awk '{print $1}'):3000"
|
||||
echo "- Accounts UI: http://$(hostname -I | awk '{print $1}'):3001"
|
||||
echo "- Auth UI: http://$(hostname -I | awk '{print $1}'):3003"
|
||||
echo "- Museum API: http://$LOCAL_IP:8080"
|
||||
echo "- Photos UI: http://$LOCAL_IP:3000"
|
||||
echo "- Accounts UI: http://$LOCAL_IP:3001"
|
||||
echo "- Auth UI: http://$LOCAL_IP:3003"
|
||||
echo ""
|
||||
echo "Post-Installation Steps Required:"
|
||||
echo "1. Create your first user account via the web UI"
|
||||
@@ -78,7 +68,7 @@ $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
|
||||
echo ""
|
||||
echo "Note: Email verification requires manual intervention since SMTP is not configured"
|
||||
} >>~/ente.creds
|
||||
msg_ok "Set up PostgreSQL"
|
||||
msg_ok "Saved Ente Credentials"
|
||||
|
||||
msg_info "Building Museum (server)"
|
||||
cd /opt/ente/server
|
||||
@@ -105,14 +95,13 @@ SECRET_JWT=$(go run tools/gen-random-keys/main.go 2>/dev/null | grep "jwt" | awk
|
||||
msg_ok "Generated Secrets"
|
||||
|
||||
msg_info "Creating museum.yaml"
|
||||
CONTAINER_IP=$(hostname -I | awk '{print $1}')
|
||||
cat <<EOF >/opt/ente/server/museum.yaml
|
||||
db:
|
||||
host: 127.0.0.1
|
||||
port: 5432
|
||||
name: $DB_NAME
|
||||
user: $DB_USER
|
||||
password: $DB_PASS
|
||||
name: $PG_DB_NAME
|
||||
user: $PG_DB_USER
|
||||
password: $PG_DB_PASS
|
||||
|
||||
s3:
|
||||
are_local_buckets: true
|
||||
@@ -125,9 +114,9 @@ s3:
|
||||
bucket: ente-dev
|
||||
|
||||
apps:
|
||||
public-albums: http://${CONTAINER_IP}:3002
|
||||
cast: http://${CONTAINER_IP}:3004
|
||||
accounts: http://${CONTAINER_IP}:3001
|
||||
public-albums: http://${LOCAL_IP}:3002
|
||||
cast: http://${LOCAL_IP}:3004
|
||||
accounts: http://${LOCAL_IP}:3001
|
||||
|
||||
key:
|
||||
encryption: $SECRET_ENC
|
||||
@@ -149,26 +138,24 @@ msg_ok "Created museum.yaml"
|
||||
|
||||
read -r -p "Enter the public URL for Ente backend (e.g., https://api.ente.yourdomain.com or http://192.168.1.100:8080) leave empty to use container IP: " backend_url
|
||||
if [[ -z "$backend_url" ]]; then
|
||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
||||
ENTE_BACKEND_URL="http://$LOCAL_IP:8080"
|
||||
msg_info "No URL provided"
|
||||
msg_ok "using local IP: $ENTE_BACKEND_URL\n"
|
||||
ENTE_BACKEND_URL="http://$LOCAL_IP:8080"
|
||||
msg_info "No URL provided"
|
||||
msg_ok "using local IP: $ENTE_BACKEND_URL\n"
|
||||
else
|
||||
ENTE_BACKEND_URL="$backend_url"
|
||||
msg_info "URL provided"
|
||||
msg_ok "Using provided URL: $ENTE_BACKEND_URL\n"
|
||||
ENTE_BACKEND_URL="$backend_url"
|
||||
msg_info "URL provided"
|
||||
msg_ok "Using provided URL: $ENTE_BACKEND_URL\n"
|
||||
fi
|
||||
|
||||
read -r -p "Enter the public URL for Ente albums (e.g., https://albums.ente.yourdomain.com or http://192.168.1.100:3002) leave empty to use container IP: " albums_url
|
||||
if [[ -z "$albums_url" ]]; then
|
||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
||||
ENTE_ALBUMS_URL="http://$LOCAL_IP:3002"
|
||||
msg_info "No URL provided"
|
||||
msg_ok "using local IP: $ENTE_ALBUMS_URL\n"
|
||||
ENTE_ALBUMS_URL="http://$LOCAL_IP:3002"
|
||||
msg_info "No URL provided"
|
||||
msg_ok "using local IP: $ENTE_ALBUMS_URL\n"
|
||||
else
|
||||
ENTE_ALBUMS_URL="$albums_url"
|
||||
msg_info "URL provided"
|
||||
msg_ok "Using provided URL: $ENTE_ALBUMS_URL\n"
|
||||
ENTE_ALBUMS_URL="$albums_url"
|
||||
msg_info "URL provided"
|
||||
msg_ok "Using provided URL: $ENTE_ALBUMS_URL\n"
|
||||
fi
|
||||
|
||||
export NEXT_PUBLIC_ENTE_ENDPOINT=$ENTE_BACKEND_URL
|
||||
@@ -177,6 +164,7 @@ export NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=$ENTE_ALBUMS_URL
|
||||
msg_info "Building Web Applications"
|
||||
cd /opt/ente/web
|
||||
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||
source "$HOME/.cargo/env"
|
||||
$STD yarn install
|
||||
$STD yarn build
|
||||
$STD yarn build:accounts
|
||||
@@ -188,37 +176,38 @@ cp -r apps/accounts/out /var/www/ente/apps/accounts
|
||||
cp -r apps/auth/out /var/www/ente/apps/auth
|
||||
cp -r apps/cast/out /var/www/ente/apps/cast
|
||||
|
||||
# Save build configuration for future rebuilds
|
||||
cat <<REBUILD_EOF >/opt/ente/rebuild-frontend.sh
|
||||
cat <<'EOF' >/opt/ente/rebuild-frontend.sh
|
||||
#!/usr/bin/env bash
|
||||
# Rebuild Ente frontend
|
||||
# Prompt for backend URL
|
||||
read -r -p "Enter the public URL for Ente backend (e.g., https://api.ente.yourdomain.com or http://192.168.1.100:8080) leave empty to use container IP: " backend_url
|
||||
if [[ -z "\$backend_url" ]]; then
|
||||
if [[ -z "$backend_url" ]]; then
|
||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
||||
ENTE_BACKEND_URL="http://\$LOCAL_IP:8080"
|
||||
echo "No URL provided, using local IP: \$ENTE_BACKEND_URL\n"
|
||||
ENTE_BACKEND_URL="http://$LOCAL_IP:8080"
|
||||
echo "No URL provided, using local IP: $ENTE_BACKEND_URL"
|
||||
else
|
||||
ENTE_BACKEND_URL="\$backend_url"
|
||||
echo "Using provided URL: \$ENTE_BACKEND_URL\n"
|
||||
ENTE_BACKEND_URL="$backend_url"
|
||||
echo "Using provided URL: $ENTE_BACKEND_URL"
|
||||
fi
|
||||
|
||||
# Prompt for albums URL
|
||||
read -r -p "Enter the public URL for Ente albums (e.g., https://albums.ente.yourdomain.com or http://192.168.1.100:3002) leave empty to use container IP: " albums_url
|
||||
if [[ -z "\$albums_url" ]]; then
|
||||
LOCAL_IP=\$(hostname -I | awk '{print $1}')
|
||||
ENTE_ALBUMS_URL="http://\$LOCAL_IP:3002"
|
||||
echo "No URL provided, using local IP: \$ENTE_ALBUMS_URL\n"
|
||||
if [[ -z "$albums_url" ]]; then
|
||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
||||
ENTE_ALBUMS_URL="http://$LOCAL_IP:3002"
|
||||
echo "No URL provided, using local IP: $ENTE_ALBUMS_URL"
|
||||
else
|
||||
ENTE_ALBUMS_URL="\$albums_url"
|
||||
echo "Using provided URL: \$ENTE_ALBUMS_URL\n"
|
||||
ENTE_ALBUMS_URL="$albums_url"
|
||||
echo "Using provided URL: $ENTE_ALBUMS_URL"
|
||||
fi
|
||||
|
||||
export NEXT_PUBLIC_ENTE_ENDPOINT=\$ENTE_BACKEND_URL
|
||||
export NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=\$ENTE_ALBUMS_URL
|
||||
export NEXT_PUBLIC_ENTE_ENDPOINT=$ENTE_BACKEND_URL
|
||||
export NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=$ENTE_ALBUMS_URL
|
||||
|
||||
echo "Building Web Applications\n"
|
||||
echo "Building Web Applications..."
|
||||
|
||||
# Ensure Rust/wasm-pack is available for WASM build
|
||||
source "$HOME/.cargo/env"
|
||||
cd /opt/ente/web
|
||||
yarn build
|
||||
yarn build:accounts
|
||||
@@ -231,7 +220,7 @@ cp -r apps/auth/out /var/www/ente/apps/auth
|
||||
cp -r apps/cast/out /var/www/ente/apps/cast
|
||||
systemctl reload caddy
|
||||
echo "Frontend rebuilt successfully!"
|
||||
REBUILD_EOF
|
||||
EOF
|
||||
chmod +x /opt/ente/rebuild-frontend.sh
|
||||
msg_ok "Built Web Applications"
|
||||
|
||||
@@ -253,7 +242,6 @@ systemctl enable -q --now ente-museum
|
||||
msg_ok "Created Museum Service"
|
||||
|
||||
msg_info "Configuring Caddy"
|
||||
CONTAINER_IP=$(hostname -I | awk '{print $1}')
|
||||
cat <<EOF >/etc/caddy/Caddyfile
|
||||
# Ente Photos - Main Application
|
||||
:3000 {
|
||||
@@ -334,18 +322,15 @@ EOF
|
||||
systemctl reload caddy
|
||||
msg_ok "Configured Caddy"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Creating helper scripts"
|
||||
cat <<'HELPER_EOF' >/usr/local/bin/ente-get-verification
|
||||
cat <<'EOF' >/usr/local/bin/ente-get-verification
|
||||
#!/usr/bin/env bash
|
||||
echo "Searching for verification codes in museum logs..."
|
||||
journalctl -u ente-museum --no-pager | grep -i "verification\|verify\|code" | tail -20
|
||||
HELPER_EOF
|
||||
EOF
|
||||
chmod +x /usr/local/bin/ente-get-verification
|
||||
|
||||
cat <<'HELPER_EOF' >/usr/local/bin/ente-upgrade-subscription
|
||||
cat <<'EOF' >/usr/local/bin/ente-upgrade-subscription
|
||||
#!/usr/bin/env bash
|
||||
if [ -z "$1" ]; then
|
||||
echo "Usage: ente-upgrade-subscription <email>"
|
||||
@@ -355,46 +340,11 @@ fi
|
||||
EMAIL="$1"
|
||||
echo "Upgrading subscription for: $EMAIL"
|
||||
ente admin update-subscription -a "$EMAIL" -u "$EMAIL" --no-limit
|
||||
HELPER_EOF
|
||||
EOF
|
||||
chmod +x /usr/local/bin/ente-upgrade-subscription
|
||||
|
||||
msg_ok "Created helper scripts"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD apt -y autoremove
|
||||
$STD apt -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
# Final setup summary
|
||||
CONTAINER_IP=$(hostname -I | awk '{print $1}')
|
||||
echo -e "\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo -e " ${GN}Ente Installation Complete!${CL}"
|
||||
echo -e "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo -e "\n${BL}Access URLs:${CL}"
|
||||
echo -e " Photos: http://${CONTAINER_IP}:3000"
|
||||
echo -e " Accounts: http://${CONTAINER_IP}:3001"
|
||||
echo -e " Albums: ${ENTE_ALBUMS_URL}"
|
||||
echo -e " Auth: http://${CONTAINER_IP}:3003"
|
||||
echo -e " API: ${ENTE_BACKEND_URL}"
|
||||
echo -e "\n${YW}⚠️ Important Post-Installation Steps:${CL}"
|
||||
echo -e "\n${BL}1. Create your first account:${CL}"
|
||||
echo -e " • Open http://${CONTAINER_IP}:3000 in your browser"
|
||||
echo -e " • Click 'Sign Up' and create an account"
|
||||
echo -e "\n${BL}2. Verify your email (required):${CL}"
|
||||
echo -e " • Run: ${GN}ente-get-verification${CL}"
|
||||
echo -e " • Look for the verification code in the output"
|
||||
echo -e " • Enter the code in the web UI to complete registration"
|
||||
echo -e "\n${BL}3. Remove storage limit:${CL}"
|
||||
echo -e " • After email verification is complete"
|
||||
echo -e " • Run: ${GN}ente-upgrade-subscription your@email.com${CL}"
|
||||
echo -e " • This removes the 10GB limit"
|
||||
echo -e "\n${BL}4. If IP changes:${CL}"
|
||||
echo -e " • Run: ${GN}/opt/ente/rebuild-frontend.sh${CL}"
|
||||
echo -e " • This rebuilds the frontend with the new IP"
|
||||
echo -e "\n${YW}Known Limitations:${CL}"
|
||||
echo -e " • Email verification requires checking logs (no SMTP configured)"
|
||||
echo -e " • Account creation must be done manually via web UI"
|
||||
echo -e " • Subscription upgrade requires CLI after account creation"
|
||||
echo -e " • Frontend must be rebuilt if container IP changes"
|
||||
echo -e "\n${BL}Credentials saved to:${CL} ~/ente.creds"
|
||||
echo -e "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"
|
||||
motd_ssh
|
||||
customize
|
||||
#cleanup_lxc
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://fedoraproject.org/
|
||||
|
||||
83
install/forgejo-runner-install.sh
Normal file
83
install/forgejo-runner-install.sh
Normal file
@@ -0,0 +1,83 @@
|
||||
#!/usr/bin/env bash
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: Simon Friedrich
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://forgejo.org/
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
if [[ -z "$var_forgejo_instance" ]]; then
|
||||
read -rp "Forgejo Instance URL (e.g. https://code.forgejo.org): " var_forgejo_instance
|
||||
fi
|
||||
|
||||
if [[ -z "$var_forgejo_runner_token" ]]; then
|
||||
read -rp "Forgejo Runner Registration Token: " var_forgejo_runner_token
|
||||
echo
|
||||
fi
|
||||
|
||||
if [[ -z "$var_forgejo_instance" || -z "$var_forgejo_runner_token" ]]; then
|
||||
echo "❌ Forgejo instance URL and runner token are required."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export FORGEJO_INSTANCE="$var_forgejo_instance"
|
||||
export FORGEJO_RUNNER_TOKEN="$var_forgejo_runner_token"
|
||||
|
||||
msg_info "Installing dependencies"
|
||||
$STD apt install -y \
|
||||
git \
|
||||
podman podman-docker
|
||||
msg_ok "Installed dependencies"
|
||||
|
||||
msg_info "Enabling Podman socket"
|
||||
systemctl enable --now podman.socket
|
||||
msg_ok "Enabled Podman socket"
|
||||
|
||||
msg_info "Installing Forgejo Runner"
|
||||
RUNNER_VERSION=$(curl -fsSL https://data.forgejo.org/api/v1/repos/forgejo/runner/releases/latest | jq -r .name | sed 's/^v//')
|
||||
curl -fsSL "https://code.forgejo.org/forgejo/runner/releases/download/v${RUNNER_VERSION}/forgejo-runner-${RUNNER_VERSION}-linux-amd64" -o /usr/local/bin/forgejo-runner
|
||||
chmod +x /usr/local/bin/forgejo-runner
|
||||
msg_ok "Installed Forgejo Runner"
|
||||
|
||||
msg_info "Registering Forgejo Runner"
|
||||
export DOCKER_HOST="unix:///run/podman/podman.sock"
|
||||
forgejo-runner register \
|
||||
--instance "$FORGEJO_INSTANCE" \
|
||||
--token "$FORGEJO_RUNNER_TOKEN" \
|
||||
--name "$HOSTNAME" \
|
||||
--labels "linux-amd64:docker://node:20-bookworm" \
|
||||
--no-interactive
|
||||
msg_ok "Registered Forgejo Runner"
|
||||
|
||||
msg_info "Creating Services"
|
||||
cat <<EOF >/etc/systemd/system/forgejo-runner.service
|
||||
[Unit]
|
||||
Description=Forgejo Runner
|
||||
Documentation=https://forgejo.org/docs/latest/admin/actions/
|
||||
After=podman.socket
|
||||
Requires=podman.socket
|
||||
|
||||
[Service]
|
||||
User=root
|
||||
WorkingDirectory=/root
|
||||
Environment=DOCKER_HOST=unix:///run/podman/podman.sock
|
||||
ExecStart=/usr/local/bin/forgejo-runner daemon
|
||||
Restart=on-failure
|
||||
RestartSec=10
|
||||
TimeoutSec=0
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now forgejo-runner
|
||||
msg_ok "Created Services"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: Arian Nasr (arian-nasr)
|
||||
# Updated by: Javier Pastor (vsc55)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Authors: MickLesk (CanbiZ)
|
||||
# Co-Authors: remz1337
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: aliaksei135
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/arpanghosh8453/garmin-grafana
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://www.gentoo.org/
|
||||
|
||||
53
install/gwn-manager-install.sh
Normal file
53
install/gwn-manager-install.sh
Normal file
@@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: Slaviša Arežina (tremor021)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://www.grandstream.com/products/networking-solutions/wi-fi-management/product/gwn-manager
|
||||
|
||||
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 \
|
||||
xfonts-utils \
|
||||
fontconfig
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up GWN Manager (Patience)"
|
||||
RELEASE=$(curl -s https://www.grandstream.com/support/tools#gwntools \
|
||||
| grep -oP 'https://firmware\.grandstream\.com/GWN_Manager-[^"]+-Ubuntu\.tar\.gz')
|
||||
download_file "$RELEASE" "/tmp/gwnmanager.tar.gz"
|
||||
cd /tmp
|
||||
tar -xzf gwnmanager.tar.gz --strip-components=1
|
||||
$STD ./install
|
||||
msg_ok "Setup GWN Manager"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/gwnmanager.service
|
||||
[Unit]
|
||||
Description=GWN Manager
|
||||
After=network.target
|
||||
Requires=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/gwn
|
||||
ExecStart=/gwn/gwn start
|
||||
Restart=on-failure
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q gwnmanager
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Copyright (c) 2021-2026 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://heimdall.site/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# 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/homarr-labs/homarr
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://github.com/hudikhq/hoodik
|
||||
@@ -13,46 +13,47 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
pkg-config \
|
||||
libssl-dev \
|
||||
libc6-dev \
|
||||
libpq-dev \
|
||||
clang \
|
||||
llvm \
|
||||
nettle-dev \
|
||||
build-essential \
|
||||
make
|
||||
msg_ok "Installed Dependencies"
|
||||
#msg_info "Installing Dependencies"
|
||||
#$STD apt-get install -y \
|
||||
# pkg-config \
|
||||
# libssl-dev \
|
||||
# libc6-dev \
|
||||
# libpq-dev \
|
||||
# clang \
|
||||
# llvm \
|
||||
# nettle-dev \
|
||||
# build-essential \
|
||||
# make
|
||||
#msg_ok "Installed Dependencies"
|
||||
|
||||
setup_rust
|
||||
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
|
||||
fetch_and_deploy_gh_release "hoodik" "hudikhq/hoodik" "tarball" "latest" "/opt/hoodik"
|
||||
#setup_rust
|
||||
#NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
|
||||
#fetch_and_deploy_gh_release "hoodik" "hudikhq/hoodik" "tarball" "latest" "/opt/hoodik"
|
||||
fetch_and_deploy_gh_release "hoodik" "hudikhq/hoodik" "prebuild" "latest" "/opt/hoodik" "*x86_64.tar.gz"
|
||||
|
||||
msg_info "Installing wasm-pack"
|
||||
$STD cargo install wasm-pack
|
||||
msg_ok "Installed wasm-pack"
|
||||
#msg_info "Installing wasm-pack"
|
||||
#$STD cargo install wasm-pack
|
||||
#msg_ok "Installed wasm-pack"
|
||||
|
||||
msg_info "Building Hoodik Frontend"
|
||||
cd /opt/hoodik
|
||||
$STD yarn install --frozen-lockfile
|
||||
$STD yarn wasm-pack
|
||||
$STD yarn web:build
|
||||
msg_ok "Built Hoodik Frontend"
|
||||
#msg_info "Building Hoodik Frontend"
|
||||
#cd /opt/hoodik
|
||||
#$STD yarn install --frozen-lockfile
|
||||
#$STD yarn wasm-pack
|
||||
#$STD yarn web:build
|
||||
#msg_ok "Built Hoodik Frontend"
|
||||
|
||||
msg_info "Building Hoodik Backend"
|
||||
cd /opt/hoodik
|
||||
$STD cargo build --release
|
||||
cp /opt/hoodik/target/release/hoodik /usr/local/bin/hoodik
|
||||
chmod +x /usr/local/bin/hoodik
|
||||
msg_ok "Built Hoodik Backend"
|
||||
#msg_info "Building Hoodik Backend"
|
||||
#cd /opt/hoodik
|
||||
#$STD cargo build --release
|
||||
#cp /opt/hoodik/target/release/hoodik /usr/local/bin/hoodik
|
||||
#chmod +x /usr/local/bin/hoodik
|
||||
#msg_ok "Built Hoodik Backend"
|
||||
|
||||
msg_info "Cleaning up build artifacts"
|
||||
rm -rf /opt/hoodik/target
|
||||
rm -rf /root/.cargo/registry
|
||||
rm -rf /opt/hoodik/node_modules
|
||||
msg_ok "Cleaned up build artifacts"
|
||||
#msg_info "Cleaning up build artifacts"
|
||||
#rm -rf /opt/hoodik/target
|
||||
#rm -rf /root/.cargo/registry
|
||||
#rm -rf /opt/hoodik/node_modules
|
||||
#msg_ok "Cleaned up build artifacts"
|
||||
|
||||
msg_info "Configuring Hoodik"
|
||||
mkdir -p /opt/hoodik_data
|
||||
@@ -80,7 +81,8 @@ Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/hoodik_data
|
||||
EnvironmentFile=/opt/hoodik/.env
|
||||
ExecStart=/usr/local/bin/hoodik
|
||||
#ExecStart=/usr/local/bin/hoodik
|
||||
ExecStart=/opt/hoodik
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
|
||||
|
||||
76
install/joplin-server-install.sh
Normal file
76
install/joplin-server-install.sh
Normal file
@@ -0,0 +1,76 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: Slaviša Arežina (tremor021)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://joplinapp.org/
|
||||
|
||||
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 \
|
||||
git \
|
||||
rsync
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="joplin" PG_DB_USER="joplin" setup_postgresql_db
|
||||
NODE_VERSION=24 NODE_MODULE="yarn,npm,pm2" setup_nodejs
|
||||
mkdir -p /opt/pm2
|
||||
export PM2_HOME=/opt/pm2
|
||||
$STD pm2 install pm2-logrotate
|
||||
$STD pm2 set pm2-logrotate:max_size 100MB
|
||||
$STD pm2 set pm2-logrotate:retain 5
|
||||
$STD pm2 set pm2-logrotate:compress tr
|
||||
fetch_and_deploy_gh_release "joplin-server" "laurent22/joplin" "tarball"
|
||||
import_local_ip
|
||||
|
||||
msg_info "Setting up Joplin Server (Patience)"
|
||||
cd /opt/joplin-server/packages/server
|
||||
sed -i "/onenote-converter/d" /opt/joplin-server/packages/lib/package.json
|
||||
$STD yarn config set --home enableTelemetry 0
|
||||
$STD yarn install
|
||||
$STD yarn build
|
||||
|
||||
cat <<EOF >/opt/joplin-server/.env
|
||||
PM2_HOME=/opt/pm2
|
||||
NODE_ENV=production
|
||||
APP_BASE_URL=http://$LOCAL_IP:22300
|
||||
APP_PORT=22300
|
||||
DB_CLIENT=pg
|
||||
POSTGRES_PASSWORD=$PG_DB_PASS
|
||||
POSTGRES_DATABASE=$PG_DB_NAME
|
||||
POSTGRES_PORT=5432
|
||||
POSTGRES_HOST=localhost
|
||||
EOF
|
||||
msg_ok "Setup Joplin Server"
|
||||
|
||||
msg_info "Setting up Service"
|
||||
cat <<EOF >/etc/systemd/system/joplin-server.service
|
||||
[Unit]
|
||||
Description=Joplin Server Service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/joplin-server/packages/server
|
||||
EnvironmentFile=/opt/joplin-server/.env
|
||||
ExecStart=/usr/bin/yarn start-prod
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now joplin-server
|
||||
msg_ok "Service Setup"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
131
install/kitchenowl-install.sh
Normal file
131
install/kitchenowl-install.sh
Normal file
@@ -0,0 +1,131 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: snazzybean
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/TomBursch/kitchenowl
|
||||
|
||||
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 \
|
||||
nginx \
|
||||
build-essential \
|
||||
libpq-dev \
|
||||
libffi-dev \
|
||||
libssl-dev
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PYTHON_VERSION="3.14" setup_uv
|
||||
import_local_ip
|
||||
fetch_and_deploy_gh_release "kitchenowl" "TomBursch/kitchenowl" "tarball" "latest" "/opt/kitchenowl"
|
||||
rm -rf /opt/kitchenowl/web
|
||||
fetch_and_deploy_gh_release "kitchenowl-web" "TomBursch/kitchenowl" "prebuild" "latest" "/opt/kitchenowl/web" "kitchenowl_Web.tar.gz"
|
||||
|
||||
msg_info "Setting up KitchenOwl"
|
||||
cd /opt/kitchenowl/backend
|
||||
#rm -f uv.lock
|
||||
$STD uv sync --frozen
|
||||
sed -i 's/default=True/default=False/' /opt/kitchenowl/backend/wsgi.py
|
||||
mkdir -p /nltk_data
|
||||
$STD uv run python -m nltk.downloader -d /nltk_data averaged_perceptron_tagger_eng punkt_tab
|
||||
JWT_SECRET=$(openssl rand -hex 32)
|
||||
mkdir -p /opt/kitchenowl/data
|
||||
cat <<EOF >/opt/kitchenowl/kitchenowl.env
|
||||
STORAGE_PATH=/opt/kitchenowl/data
|
||||
JWT_SECRET_KEY=${JWT_SECRET}
|
||||
NLTK_DATA=/nltk_data
|
||||
FRONT_URL=http://${LOCAL_IP}
|
||||
FLASK_APP=wsgi.py
|
||||
FLASK_ENV=production
|
||||
EOF
|
||||
set -a
|
||||
source /opt/kitchenowl/kitchenowl.env
|
||||
set +a
|
||||
$STD uv run flask db upgrade
|
||||
msg_ok "Set up KitchenOwl"
|
||||
|
||||
msg_info "Creating Systemd Service"
|
||||
cat <<EOF >/etc/systemd/system/kitchenowl.service
|
||||
[Unit]
|
||||
Description=KitchenOwl Backend
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/kitchenowl/backend
|
||||
EnvironmentFile=/opt/kitchenowl/kitchenowl.env
|
||||
ExecStart=/usr/local/bin/uv run wsgi.py
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now kitchenowl
|
||||
msg_ok "Created and Started Service"
|
||||
|
||||
msg_info "Configuring Nginx"
|
||||
rm -f /etc/nginx/sites-enabled/default
|
||||
cat <<'EOF' >/etc/nginx/sites-available/kitchenowl.conf
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
|
||||
root /opt/kitchenowl/web;
|
||||
index index.html;
|
||||
|
||||
client_max_body_size 100M;
|
||||
|
||||
# Security Headers
|
||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
||||
add_header X-Content-Type-Options "nosniff" always;
|
||||
add_header X-XSS-Protection "1; mode=block" always;
|
||||
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
|
||||
location /api {
|
||||
proxy_pass http://127.0.0.1:5000;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_connect_timeout 60s;
|
||||
proxy_send_timeout 60s;
|
||||
proxy_read_timeout 60s;
|
||||
}
|
||||
|
||||
location /socket.io {
|
||||
proxy_pass http://127.0.0.1:5000;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
# WebSocket Timeouts - allow long-lived connections
|
||||
proxy_read_timeout 86400s;
|
||||
proxy_send_timeout 86400s;
|
||||
}
|
||||
}
|
||||
EOF
|
||||
ln -sf /etc/nginx/sites-available/kitchenowl.conf /etc/nginx/sites-enabled/
|
||||
rm -f /etc/nginx/sites-enabled/default
|
||||
$STD systemctl reload nginx
|
||||
msg_ok "Configured Nginx"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
76
install/linkwarden-install.sh
Normal file
76
install/linkwarden-install.sh
Normal file
@@ -0,0 +1,76 @@
|
||||
#!/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://linkwarden.app/
|
||||
|
||||
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
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
PG_VERSION="16" setup_postgresql
|
||||
PG_DB_NAME="linkwardendb" PG_DB_USER="linkwarden" setup_postgresql_db
|
||||
RUST_CRATES="monolith" setup_rust
|
||||
fetch_and_deploy_gh_release "linkwarden" "linkwarden/linkwarden"
|
||||
import_local_ip
|
||||
|
||||
read -r -p "${TAB3}Would you like to add Adminer? <y/N> " prompt
|
||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
setup_adminer
|
||||
fi
|
||||
|
||||
msg_info "Installing Linkwarden (Patience)"
|
||||
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||
export PRISMA_HIDE_UPDATE_MESSAGE=1
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
corepack enable
|
||||
SECRET_KEY="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)"
|
||||
cd /opt/linkwarden
|
||||
$STD yarn workspaces focus linkwarden @linkwarden/web @linkwarden/worker
|
||||
# $STD npx playwright install-deps
|
||||
# $STD yarn playwright install
|
||||
|
||||
cat <<EOF >/opt/linkwarden/.env
|
||||
NEXTAUTH_SECRET=${SECRET_KEY}
|
||||
NEXTAUTH_URL=http://${LOCAL_IP}:3000
|
||||
DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}
|
||||
EOF
|
||||
$STD yarn prisma:generate
|
||||
$STD yarn web:build
|
||||
$STD yarn prisma:deploy
|
||||
rm -rf ~/.cargo/registry ~/.cargo/git ~/.cargo/.package-cache
|
||||
rm -rf /root/.cache/yarn
|
||||
rm -rf /opt/linkwarden/.next/cache
|
||||
msg_ok "Installed Linkwarden"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/linkwarden.service
|
||||
[Unit]
|
||||
Description=Linkwarden Service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=exec
|
||||
Environment=PATH=$PATH
|
||||
WorkingDirectory=/opt/linkwarden
|
||||
ExecStart=/usr/bin/yarn concurrently:start
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now linkwarden
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
37
install/loki-install.sh
Normal file
37
install/loki-install.sh
Normal file
@@ -0,0 +1,37 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: bysinka-95
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/grafana/loki
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Setting up Grafana Repository"
|
||||
setup_deb822_repo \
|
||||
"grafana" \
|
||||
"https://apt.grafana.com/gpg.key" \
|
||||
"https://apt.grafana.com" \
|
||||
"stable" \
|
||||
"main"
|
||||
msg_ok "Grafana Repository setup sucessfully"
|
||||
|
||||
msg_info "Installing Loki"
|
||||
$STD apt install -y loki
|
||||
systemctl enable -q --now loki
|
||||
msg_ok "Installed Loki"
|
||||
|
||||
msg_info "Installing Promtail"
|
||||
$STD apt install -y promtail
|
||||
systemctl enable -q --now promtail
|
||||
msg_ok "Installed Promtail"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -1,68 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Slaviša Arežina (tremor021)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://github.com/s1t5/mail-archiver
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
setup_deb822_repo \
|
||||
"microsoft" \
|
||||
"https://packages.microsoft.com/keys/microsoft-2025.asc" \
|
||||
"https://packages.microsoft.com/debian/13/prod/" \
|
||||
"trixie" \
|
||||
"main"
|
||||
$STD apt install -y \
|
||||
dotnet-sdk-10.0 \
|
||||
aspnetcore-runtime-8.0
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="mailarchiver_db" PG_DB_USER="mailarchiver" setup_postgresql_db
|
||||
fetch_and_deploy_gh_release "mail-archiver" "s1t5/mail-archiver" "tarball"
|
||||
|
||||
msg_info "Setting up Mail-Archiver"
|
||||
mv /opt/mail-archiver /opt/mail-archiver-build
|
||||
cd /opt/mail-archiver-build
|
||||
$STD dotnet restore
|
||||
$STD dotnet publish -c Release -o /opt/mail-archiver
|
||||
cp /opt/mail-archiver-build/appsettings.json /opt/mail-archiver/appsettings.json
|
||||
sed -i "s|\"DefaultConnection\": \"[^\"]*\"|\"DefaultConnection\": \"Host=localhost;Database=mailarchiver_db;Username=mailarchiver;Password=$PG_DB_PASS\"|" /opt/mail-archiver/appsettings.json
|
||||
rm -rf /opt/mail-archiver-build
|
||||
|
||||
cat <<EOF >/opt/mail-archiver/.env
|
||||
ASPNETCORE_URLS=http://+:5000
|
||||
ASPNETCORE_ENVIRONMENT=Production
|
||||
TZ=UTC
|
||||
EOF
|
||||
msg_ok "Setup Mail-Archiver"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/mail-archiver.service
|
||||
[Unit]
|
||||
Description=Mail-Archiver Service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
EnvironmentFile=/opt/mail-archiver/.env
|
||||
WorkingDirectory=/opt/mail-archiver
|
||||
ExecStart=/usr/bin/dotnet MailArchiver.dll
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now mail-archiver
|
||||
msg_info "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -1,7 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: bvdberg01
|
||||
# Co-Author: SunFlowerOwl
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
@@ -14,21 +15,24 @@ update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
lsb-release \
|
||||
rbenv \
|
||||
libpq-dev \
|
||||
libarchive-dev \
|
||||
git \
|
||||
libmariadb-dev \
|
||||
redis-server \
|
||||
nginx \
|
||||
libffi-dev \
|
||||
libyaml-dev
|
||||
libassimp-dev
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
setup_imagemagick
|
||||
|
||||
PG_VERSION="16" setup_postgresql
|
||||
|
||||
msg_info "Setting up PostgreSQL"
|
||||
fetch_and_deploy_gh_release "manyfold" "manyfold3d/manyfold" "tarball" "latest" "/opt/manyfold/app"
|
||||
|
||||
msg_info "Configuring manyfold environment"
|
||||
RUBY_INSTALL_VERSION=$(cat /opt/manyfold/app/.ruby-version)
|
||||
YARN_VERSION=$(grep '"packageManager":' /opt/manyfold/app/package.json | sed -E 's/.*"(yarn@[0-9\.]+)".*/\1/')
|
||||
RELEASE=$(get_latest_github_release "manyfold3d/manyfold")
|
||||
DB_NAME=manyfold
|
||||
DB_USER=manyfold
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
|
||||
@@ -37,32 +41,11 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMP
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
|
||||
{
|
||||
echo "Manyfold Credentials"
|
||||
echo "Manyfold Database User: $DB_USER"
|
||||
echo "Manyfold Database Password: $DB_PASS"
|
||||
echo "Manyfold Database Name: $DB_NAME"
|
||||
} >>~/manyfold.creds
|
||||
msg_ok "Set up PostgreSQL"
|
||||
|
||||
fetch_and_deploy_gh_release "manyfold" "manyfold3d/manyfold" "tarball" "latest" "/opt/manyfold"
|
||||
|
||||
RUBY_INSTALL_VERSION=$(cat /opt/manyfold/.ruby-version)
|
||||
YARN_VERSION=$(grep '"packageManager":' /opt/manyfold/package.json | sed -E 's/.*"(yarn@[0-9\.]+)".*/\1/')
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
|
||||
RUBY_VERSION=${RUBY_INSTALL_VERSION} RUBY_INSTALL_RAILS="true" setup_ruby
|
||||
|
||||
msg_info "Adding manyfold user"
|
||||
useradd -m -s /usr/bin/bash manyfold
|
||||
msg_ok "Added manyfold user"
|
||||
|
||||
msg_info "Setting .env file"
|
||||
cat <<EOF >/opt/.env
|
||||
export APP_VERSION=12345
|
||||
cat <<EOF >/opt/manyfold/.env
|
||||
export APP_VERSION=${RELEASE}
|
||||
export GUID=1002
|
||||
export PUID=1001
|
||||
export PUBLIC_HOSTNAME=subdomain.somehost.org
|
||||
export PUBLIC_PORT=5000
|
||||
export REDIS_URL=redis://127.0.0.1:6379/1
|
||||
export DATABASE_ADAPTER=postgresql
|
||||
@@ -75,53 +58,68 @@ export MULTIUSER=enabled
|
||||
export HTTPS_ONLY=false
|
||||
export RAILS_ENV=production
|
||||
EOF
|
||||
msg_ok ".env file setup"
|
||||
cat <<EOF >/opt/manyfold/user_setup.sh
|
||||
#!/bin/bash
|
||||
|
||||
source /opt/manyfold/.env
|
||||
export PATH="/home/manyfold/.rbenv/bin:\$PATH"
|
||||
eval "\$(/home/manyfold/.rbenv/bin/rbenv init - bash)"
|
||||
cd /opt/manyfold/app
|
||||
rbenv global $RUBY_INSTALL_VERSION
|
||||
gem install bundler
|
||||
bundle install
|
||||
gem install sidekiq
|
||||
gem install foreman
|
||||
corepack enable yarn
|
||||
rm -f /opt/manyfold/app/config/credentials.yml.enc
|
||||
corepack prepare $YARN_VERSION --activate
|
||||
corepack use $YARN_VERSION
|
||||
export VISUAL="code --wait"
|
||||
bin/rails credentials:edit
|
||||
bin/rails db:migrate
|
||||
bin/rails assets:precompile
|
||||
EOF
|
||||
$STD mkdir -p /opt/manyfold/data
|
||||
msg_ok "Configured manyfold environment"
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
|
||||
RUBY_VERSION=${RUBY_INSTALL_VERSION} RUBY_INSTALL_RAILS="true" HOME=/home/manyfold setup_ruby
|
||||
|
||||
msg_info "Installing Manyfold"
|
||||
source /opt/.env
|
||||
cd /opt/manyfold
|
||||
chown -R manyfold:manyfold /home/manyfold/.rbenv
|
||||
chown -R manyfold:manyfold /opt/manyfold
|
||||
$STD gem install bundler
|
||||
$STD rbenv global $RUBY_INSTALL_VERSION
|
||||
$STD bundle install
|
||||
$STD gem install sidekiq
|
||||
$STD npm install --global corepack
|
||||
corepack enable yarn
|
||||
# $STD corepack prepare $YARN_VERSION --activate
|
||||
# $STD corepack use $YARN_VERSION
|
||||
chown manyfold:manyfold /opt/.env
|
||||
rm /opt/manyfold/config/credentials.yml.enc
|
||||
$STD bin/rails credentials:edit
|
||||
$STD bin/rails db:migrate
|
||||
$STD bin/rails assets:precompile
|
||||
chmod +x /opt/manyfold/user_setup.sh
|
||||
npm install --global corepack
|
||||
$STD sudo -u manyfold bash /opt/manyfold/user_setup.sh
|
||||
rm -f /opt/manyfold/user_setup.sh
|
||||
msg_ok "Installed manyfold"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/manyfold.service
|
||||
[Unit]
|
||||
Description=Manyfold3d
|
||||
Requires=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
Group=root
|
||||
WorkingDirectory=/opt/manyfold
|
||||
ExecStart=/usr/bin/bash -lc 'source /opt/.env && /opt/manyfold/bin/rails server -b 127.0.0.1 --port 5000 --environment production'
|
||||
TimeoutSec=30
|
||||
RestartSec=15s
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now manyfold
|
||||
|
||||
msg_info "Creating Services"
|
||||
source /opt/manyfold/.env
|
||||
export PATH="/home/manyfold/.rbenv/shims:/home/manyfold/.rbenv/bin:$PATH"
|
||||
$STD foreman export systemd /etc/systemd/system -a manyfold -u manyfold -f /opt/manyfold/app/Procfile
|
||||
for f in /etc/systemd/system/manyfold-*.service; do
|
||||
sed -i "s|/bin/bash -lc '|/bin/bash -lc 'source /opt/manyfold/.env \&\& |" "$f"
|
||||
done
|
||||
systemctl enable -q --now manyfold.target manyfold-rails.1 manyfold-default_worker.1 manyfold-performance_worker.1
|
||||
cat <<EOF >/etc/nginx/sites-available/manyfold.conf
|
||||
server {
|
||||
listen 80;
|
||||
server_name manyfold;
|
||||
root /opt/manyfold/public;
|
||||
root /opt/manyfold/app/public;
|
||||
|
||||
location /cable {
|
||||
proxy_pass http://127.0.0.1:5000;
|
||||
proxy_set_header Host \$host;
|
||||
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade \$http_upgrade;
|
||||
proxy_set_header Connection "Upgrade";
|
||||
|
||||
proxy_set_header X-Real-IP \$remote_addr;
|
||||
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto \$scheme;
|
||||
}
|
||||
|
||||
location / {
|
||||
try_files \$uri/index.html \$uri @rails;
|
||||
@@ -139,7 +137,7 @@ EOF
|
||||
ln -s /etc/nginx/sites-available/manyfold.conf /etc/nginx/sites-enabled/
|
||||
rm -f /etc/nginx/sites-enabled/default
|
||||
$STD systemctl reload nginx
|
||||
msg_ok "Created Service"
|
||||
msg_ok "Created Services"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
183
install/netbird-install.sh
Normal file
183
install/netbird-install.sh
Normal file
@@ -0,0 +1,183 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: TechHutTV
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://netbird.io/
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Setting up NetBird Repository"
|
||||
setup_deb822_repo \
|
||||
"netbird" \
|
||||
"https://pkgs.netbird.io/debian/public.key" \
|
||||
"https://pkgs.netbird.io/debian" \
|
||||
"stable"
|
||||
msg_ok "Set up NetBird Repository"
|
||||
|
||||
msg_info "Installing NetBird"
|
||||
$STD apt install -y netbird
|
||||
msg_ok "Installed NetBird"
|
||||
|
||||
msg_info "Enabling NetBird Service"
|
||||
$STD systemctl enable -q --now netbird
|
||||
msg_ok "Enabled NetBird Service"
|
||||
|
||||
echo ""
|
||||
echo ""
|
||||
echo -e "${BL}NetBird Deployment Type${CL}"
|
||||
echo "─────────────────────────────────────────"
|
||||
echo "Are you using NetBird Managed or Self-Hosted?"
|
||||
echo ""
|
||||
echo " 1) NetBird Managed (default) - Use NetBird's managed service"
|
||||
echo " 2) Self-Hosted - Use your own NetBird management server"
|
||||
echo ""
|
||||
|
||||
read -r -p "${TAB3}Select deployment type [1]: " DEPLOYMENT_TYPE
|
||||
DEPLOYMENT_TYPE="${DEPLOYMENT_TYPE:-1}"
|
||||
|
||||
NETBIRD_MGMT_URL=""
|
||||
case "$DEPLOYMENT_TYPE" in
|
||||
1)
|
||||
msg_ok "Using NetBird Managed service"
|
||||
;;
|
||||
2)
|
||||
echo ""
|
||||
echo -e "${BL}Self-Hosted Configuration${CL}"
|
||||
echo "─────────────────────────────────────────"
|
||||
echo "Enter your NetBird management server URL."
|
||||
echo "Example: https://management.example.com"
|
||||
echo ""
|
||||
read -r -p "Management URL: " NETBIRD_MGMT_URL
|
||||
|
||||
if [[ -z "$NETBIRD_MGMT_URL" ]]; then
|
||||
msg_warn "No management URL provided. Run 'netbird up --management-url <url>' to connect."
|
||||
else
|
||||
NETBIRD_MGMT_URL="${NETBIRD_MGMT_URL%/}"
|
||||
msg_ok "Management URL configured: ${NETBIRD_MGMT_URL}"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
msg_warn "Invalid selection. Using NetBird Managed service."
|
||||
;;
|
||||
esac
|
||||
|
||||
echo ""
|
||||
echo ""
|
||||
echo -e "${BL}NetBird Connection Setup${CL}"
|
||||
echo "─────────────────────────────────────────"
|
||||
echo "Choose how to connect to your NetBird network:"
|
||||
echo ""
|
||||
if [[ "$DEPLOYMENT_TYPE" == "1" ]]; then
|
||||
echo " 1) Setup Key (default) - Use a pre-generated setup key"
|
||||
echo " 2) SSO Login - Authenticate via browser with your identity provider"
|
||||
echo " 3) Skip - Configure later with 'netbird up'"
|
||||
else
|
||||
echo " 1) Setup Key (default) - Use a pre-generated setup key"
|
||||
echo " 2) Skip - Configure later with 'netbird up'"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
read -r -p "Select authentication method [1]: " AUTH_METHOD
|
||||
AUTH_METHOD="${AUTH_METHOD:-1}"
|
||||
|
||||
if [[ "$DEPLOYMENT_TYPE" == "1" ]]; then
|
||||
case "$AUTH_METHOD" in
|
||||
1)
|
||||
echo ""
|
||||
echo "Enter your NetBird setup key from the NetBird dashboard."
|
||||
echo ""
|
||||
read -r -p "Setup key: " NETBIRD_SETUP_KEY
|
||||
echo ""
|
||||
|
||||
if [[ -z "$NETBIRD_SETUP_KEY" ]]; then
|
||||
msg_warn "No setup key provided. Run 'netbird up -k <key>' to connect."
|
||||
else
|
||||
msg_info "Connecting to NetBird with setup key"
|
||||
if $STD netbird up -k "$NETBIRD_SETUP_KEY"; then
|
||||
msg_ok "Connected to NetBird"
|
||||
else
|
||||
msg_warn "Connection failed. Run 'netbird up -k <key>' to retry."
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
2)
|
||||
echo ""
|
||||
echo -e "${BL}SSO Authentication${CL}"
|
||||
echo "─────────────────────────────────────────"
|
||||
echo "A login URL will appear below."
|
||||
echo "Copy the URL and open it in your browser to authenticate."
|
||||
echo ""
|
||||
|
||||
msg_info "Starting SSO login"
|
||||
netbird login 2>&1 || true
|
||||
echo ""
|
||||
|
||||
msg_info "Connecting to NetBird"
|
||||
if $STD netbird up; then
|
||||
msg_ok "Connected to NetBird"
|
||||
else
|
||||
msg_warn "Connection failed. Run 'netbird up' to retry."
|
||||
fi
|
||||
;;
|
||||
3)
|
||||
msg_ok "Skipped. Run 'netbird up' to connect."
|
||||
;;
|
||||
*)
|
||||
msg_warn "Invalid selection. Run 'netbird up' to connect."
|
||||
;;
|
||||
esac
|
||||
else
|
||||
case "$AUTH_METHOD" in
|
||||
1)
|
||||
echo ""
|
||||
echo "Enter your NetBird setup key from the NetBird dashboard."
|
||||
echo ""
|
||||
read -r -p "Setup key: " NETBIRD_SETUP_KEY
|
||||
echo ""
|
||||
|
||||
if [[ -z "$NETBIRD_SETUP_KEY" ]]; then
|
||||
if [[ -z "$NETBIRD_MGMT_URL" ]]; then
|
||||
msg_warn "No setup key provided. Run 'netbird up -k <key> --management-url <url>' to connect."
|
||||
else
|
||||
msg_warn "No setup key provided. Run 'netbird up -k <key> --management-url $NETBIRD_MGMT_URL' to connect."
|
||||
fi
|
||||
else
|
||||
if [[ -z "$NETBIRD_MGMT_URL" ]]; then
|
||||
msg_error "Management URL is required for self-hosted deployments. Please configure it first."
|
||||
else
|
||||
msg_info "Connecting to NetBird with setup key"
|
||||
if $STD netbird up -k "$NETBIRD_SETUP_KEY" --management-url "$NETBIRD_MGMT_URL"; then
|
||||
msg_ok "Connected to NetBird"
|
||||
else
|
||||
msg_warn "Connection failed. Run 'netbird up -k <key> --management-url $NETBIRD_MGMT_URL' to retry."
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
2)
|
||||
if [[ -z "$NETBIRD_MGMT_URL" ]]; then
|
||||
msg_ok "Skipped. Run 'netbird up --management-url <url>' to connect."
|
||||
else
|
||||
msg_ok "Skipped. Run 'netbird up --management-url $NETBIRD_MGMT_URL' to connect."
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
if [[ -z "$NETBIRD_MGMT_URL" ]]; then
|
||||
msg_warn "Invalid selection. Run 'netbird up --management-url <url>' to connect."
|
||||
else
|
||||
msg_warn "Invalid selection. Run 'netbird up --management-url $NETBIRD_MGMT_URL' to connect."
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: vhsdream
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://github.com/vikramsoni2/nextExplorer
|
||||
@@ -69,6 +69,8 @@ AUTH_MODE=both
|
||||
SESSION_SECRET="${SECRET}"
|
||||
# AUTH_MAX_FAILED=
|
||||
# AUTH_LOCK_MINUTES=
|
||||
# AUTH_USER_EMAIL=
|
||||
# AUTH_USER_PASSWORD=
|
||||
|
||||
# OIDC_ENABLED=
|
||||
# OIDC_ISSUER=
|
||||
@@ -79,6 +81,7 @@ SESSION_SECRET="${SECRET}"
|
||||
# OIDC_CLIENT_SECRET=
|
||||
# OIDC_CALLBACK_URL=
|
||||
# OIDC_SCOPES=
|
||||
# OIDC_AUTO_CREATE_USERS=true
|
||||
|
||||
# SEARCH_DEEP=
|
||||
# SEARCH_RIPGREP=
|
||||
@@ -90,6 +93,12 @@ SESSION_SECRET="${SECRET}"
|
||||
# ONLYOFFICE_FORCE_SAVE=
|
||||
# ONLYOFFICE_FILE_EXTENSIONS=
|
||||
|
||||
# COLLABORA_URL=
|
||||
# COLLABORA_DISCOVERY_URL=
|
||||
# COLLABORA_SECRET=
|
||||
# COLLABORA_LANG=
|
||||
# COLLABORA_FILE_EXTENSIONS=
|
||||
|
||||
SHOW_VOLUME_USAGE=true
|
||||
# USER_DIR_ENABLED=
|
||||
# SKIP_HOME=
|
||||
|
||||
46
install/nodecast-tv-install.sh
Normal file
46
install/nodecast-tv-install.sh
Normal file
@@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: luismco
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://github.com/technomancer702/nodecast-tv
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
fetch_and_deploy_gh_release "nodecast-tv" "technomancer702/nodecast-tv"
|
||||
setup_nodejs
|
||||
|
||||
msg_info "Installing Modules"
|
||||
cd /opt/nodecast-tv
|
||||
$STD npm install
|
||||
msg_ok "Installed Modules"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/nodecast-tv.service
|
||||
[Unit]
|
||||
Description=nodecast-tv
|
||||
After=network.target
|
||||
Wants=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/nodecast-tv
|
||||
ExecStart=/bin/npm run dev
|
||||
Restart=on-failure
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now nodecast-tv
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: vhsdream
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://opencloud.eu
|
||||
@@ -57,11 +57,11 @@ echo "$COOLPASS" >~/.coolpass
|
||||
msg_ok "Installed Collabora Online"
|
||||
|
||||
# OpenCloud
|
||||
fetch_and_deploy_gh_release "opencloud" "opencloud-eu/opencloud" "singlefile" "v4.0.0" "/usr/bin" "opencloud-*-linux-amd64"
|
||||
fetch_and_deploy_gh_release "opencloud" "opencloud-eu/opencloud" "singlefile" "v4.1.0" "/usr/bin" "opencloud-*-linux-amd64"
|
||||
|
||||
msg_info "Configuring OpenCloud"
|
||||
DATA_DIR="/var/lib/opencloud/"
|
||||
CONFIG_DIR="/etc/opencloud"
|
||||
CONFIG_DIR="${CONFIG_DIR}"
|
||||
ENV_FILE="${CONFIG_DIR}/opencloud.env"
|
||||
mkdir -p "$DATA_DIR" "$CONFIG_DIR"/assets/apps
|
||||
|
||||
@@ -77,6 +77,18 @@ OC_CONFIG_DIR=${CONFIG_DIR}
|
||||
OC_BASE_DATA_PATH=${DATA_DIR}
|
||||
STORAGE_SYSTEM_OC_ROOT=${DATA_DIR}/storage/metadata
|
||||
|
||||
## Web
|
||||
WEB_ASSET_CORE_PATH=${CONFIG_DIR}/web/assets
|
||||
WEB_ASSET_APPS_PATH=${CONFIG_DIR}/web/assets/apps
|
||||
WEB_UI_CONFIG_FILE=${CONFIG_DIR}/web/config.json
|
||||
# WEB_ASSET_THEMES_PATH=${CONFIG_DIR}/web/assets/themes
|
||||
# WEB_UI_THEME_PATH=
|
||||
|
||||
## Frontend
|
||||
FRONTEND_DISABLE_RADICALE=true
|
||||
FRONTEND_GROUPWARE_ENABLED=false
|
||||
GRAPH_INCLUDE_OCM_SHAREES=true
|
||||
|
||||
## Proxy
|
||||
PROXY_TLS=false
|
||||
PROXY_CSP_CONFIG_FILE_LOCATION=${CONFIG_DIR}/csp.yaml
|
||||
@@ -91,9 +103,6 @@ COLLABORATION_HTTP_ADDR=0.0.0.0:9300
|
||||
COLLABORATION_WOPI_SRC=https://${WOPI_HOST}
|
||||
COLLABORATION_JWT_SECRET=
|
||||
|
||||
## Applications
|
||||
WEB_ASSET_APPS_PATH=${CONFIG_DIR}/assets/apps
|
||||
|
||||
## Notifications - Email settings
|
||||
# NOTIFICATIONS_SMTP_HOST=
|
||||
# NOTIFICATIONS_SMTP_PORT=
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://www.openeuler.org/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://www.opensuse.org/
|
||||
|
||||
102
install/papra-install.sh
Normal file
102
install/papra-install.sh
Normal file
@@ -0,0 +1,102 @@
|
||||
#!/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://github.com/papra-hq/papra
|
||||
|
||||
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 \
|
||||
tesseract-ocr \
|
||||
tesseract-ocr-all
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/papra-hq/papra/releases | grep -oP '"tag_name":\s*"\K@papra/docker@[^"]+' | head -n1)
|
||||
fetch_and_deploy_gh_release "papra" "papra-hq/papra" "tarball" "${RELEASE}" "/opt/papra"
|
||||
|
||||
msg_info "Setup Papra"
|
||||
cd /opt/papra
|
||||
export COREPACK_ENABLE_NETWORK=1
|
||||
$STD corepack enable
|
||||
$STD corepack prepare pnpm@10.19.0 --activate
|
||||
$STD pnpm install --frozen-lockfile
|
||||
$STD pnpm --filter "@papra/app-client..." run build
|
||||
$STD pnpm --filter "@papra/app-server..." run build
|
||||
msg_ok "Set up Papra"
|
||||
|
||||
msg_info "Configuring Papra"
|
||||
CONTAINER_IP=$(hostname -I | awk '{print $1}')
|
||||
BETTER_AUTH_SECRET=$(openssl rand -hex 32)
|
||||
|
||||
mkdir -p /opt/papra/app-data/db
|
||||
mkdir -p /opt/papra/app-data/documents
|
||||
|
||||
cat >/opt/papra/.env <<EOF
|
||||
NODE_ENV=production
|
||||
SERVER_SERVE_PUBLIC_DIR=true
|
||||
PORT=1221
|
||||
|
||||
# Database Configuration
|
||||
DATABASE_URL=file:./app-data/db/db.sqlite
|
||||
|
||||
# Storage Configuration
|
||||
DOCUMENT_STORAGE_FILESYSTEM_ROOT=./app-data/documents
|
||||
PAPRA_CONFIG_DIR=./app-data
|
||||
|
||||
# Authentication
|
||||
BETTER_AUTH_SECRET=${BETTER_AUTH_SECRET}
|
||||
BETTER_AUTH_TELEMETRY=0
|
||||
|
||||
# Application Configuration
|
||||
CLIENT_BASE_URL=http://${CONTAINER_IP}:1221
|
||||
|
||||
# Email Configuration (dry-run mode)
|
||||
EMAILS_DRY_RUN=true
|
||||
|
||||
# Ingestion Folder
|
||||
INGESTION_FOLDER_ROOT=./ingestion
|
||||
EOF
|
||||
|
||||
mkdir -p /opt/papra/ingestion
|
||||
chown -R root:root /opt/papra
|
||||
msg_ok "Configured Papra"
|
||||
|
||||
msg_info "Creating Papra Service"
|
||||
cat >/etc/systemd/system/papra.service <<EOF
|
||||
[Unit]
|
||||
Description=Papra Document Management
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/papra/apps/papra-server
|
||||
EnvironmentFile=/opt/papra/.env
|
||||
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||
ExecStartPre=/usr/bin/corepack pnpm --silent run migration:apply
|
||||
ExecStart=/usr/bin/corepack pnpm --silent run start
|
||||
Restart=on-failure
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
systemctl enable -q --now papra
|
||||
echo "${RELEASE}" >/opt/Papra_version.txt
|
||||
msg_ok "Created and Started Papra Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://www.mailpiler.org/
|
||||
@@ -22,49 +22,41 @@ $STD apt install -y \
|
||||
poppler-utils \
|
||||
unrtf \
|
||||
tnef \
|
||||
clamav \
|
||||
clamav-daemon \
|
||||
memcached \
|
||||
sysstat \
|
||||
python3 \
|
||||
python3-mysqldb
|
||||
python3-mysqldb \
|
||||
ca-certificates \
|
||||
gnupg
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
import_local_ip
|
||||
setup_mariadb
|
||||
MARIADB_DB_NAME="piler" MARIADB_DB_USER="piler" setup_mysql_db
|
||||
PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="ldap,gd,memcached,pdo,mysql,curl,zip" setup_php
|
||||
MARIADB_DB_NAME="piler" MARIADB_DB_USER="piler" setup_mariadb_db
|
||||
PHP_VERSION="8.3" PHP_FPM="YES" PHP_MODULE="ldap,gd,memcached,pdo,mysql,curl,zip" setup_php
|
||||
|
||||
msg_info "Installing Manticore Search"
|
||||
curl -fsSL https://repo.manticoresearch.com/manticore-repo.noarch.deb -o /tmp/manticore-repo.deb
|
||||
$STD dpkg -i /tmp/manticore-repo.deb
|
||||
cd /tmp
|
||||
wget -q https://repo.manticoresearch.com/manticore-repo.noarch.deb
|
||||
$STD dpkg -i /tmp/manticore-repo.noarch.deb
|
||||
$STD apt update
|
||||
$STD apt install -y manticore manticore-extra
|
||||
rm -f /tmp/manticore-repo.deb
|
||||
$STD apt install -y manticore manticore-columnar-lib manticore-extra
|
||||
rm -f /tmp/manticore-repo.noarch.deb
|
||||
$STD systemctl stop manticore
|
||||
$STD systemctl disable manticore
|
||||
msg_ok "Installed Manticore Search"
|
||||
|
||||
msg_info "Installing Piler"
|
||||
VERSION="1.4.8"
|
||||
cd /tmp
|
||||
curl -fsSL "https://github.com/jsuto/piler/releases/download/piler-${VERSION}/piler_${VERSION}-bookworm_amd64.deb" -o piler.deb
|
||||
curl -fsSL "https://github.com/jsuto/piler/releases/download/piler-${VERSION}/piler-webui_${VERSION}-bookworm_amd64.deb" -o piler-webui.deb
|
||||
|
||||
$STD dpkg -i piler.deb
|
||||
$STD apt-get -f install -y
|
||||
$STD dpkg -i piler-webui.deb
|
||||
$STD apt-get -f install -y
|
||||
|
||||
rm -f piler.deb piler-webui.deb
|
||||
msg_ok "Installed Piler v${VERSION}"
|
||||
fetch_and_deploy_gh_release "piler" "jsuto/piler" "binary" "latest" "/tmp" "piler_*-noble-*_amd64.deb"
|
||||
fetch_and_deploy_gh_release "piler-webui" "jsuto/piler" "binary" "latest" "/tmp" "piler-webui_*-noble-*_amd64.deb"
|
||||
msg_ok "Installed Piler"
|
||||
|
||||
msg_info "Configuring Piler Database"
|
||||
cd /usr/local/share/piler
|
||||
mysql -u root "${MARIADB_DB_NAME}" <db-mysql.sql
|
||||
$STD mariadb -u root "${MARIADB_DB_NAME}" </usr/share/piler/db-mysql.sql 2>/dev/null || true
|
||||
msg_ok "Configured Piler Database"
|
||||
|
||||
msg_info "Configuring Piler"
|
||||
PILER_KEY=$(openssl rand -hex 16)
|
||||
|
||||
cat <<EOF >/etc/piler/piler.conf
|
||||
hostid=piler.${LOCAL_IP}.nip.io
|
||||
update_counters_to_memcached=1
|
||||
@@ -88,9 +80,6 @@ iv=0123456789ABCDEF
|
||||
|
||||
memcached_servers=127.0.0.1
|
||||
|
||||
enable_clamav=1
|
||||
clamd_socket=/var/run/clamav/clamd.ctl
|
||||
|
||||
spam_header_line=X-Spam-Status: Yes
|
||||
|
||||
verbosity=1
|
||||
@@ -157,8 +146,8 @@ msg_info "Creating Piler Service"
|
||||
cat <<EOF >/etc/systemd/system/piler.service
|
||||
[Unit]
|
||||
Description=Piler Email Archiving
|
||||
After=network.target mysql.service manticore.service
|
||||
Requires=mysql.service manticore.service
|
||||
After=network.target mysql.service manticore.service memcached.service
|
||||
Requires=mysql.service
|
||||
|
||||
[Service]
|
||||
Type=forking
|
||||
@@ -176,23 +165,22 @@ EOF
|
||||
$STD systemctl daemon-reload
|
||||
$STD systemctl enable --now manticore
|
||||
$STD systemctl enable --now memcached
|
||||
$STD systemctl enable --now clamav-daemon
|
||||
$STD systemctl enable --now piler
|
||||
msg_ok "Created Piler Service"
|
||||
|
||||
msg_info "Configuring PHP-FPM Pool"
|
||||
cp /etc/php/8.4/fpm/pool.d/www.conf /etc/php/8.4/fpm/pool.d/piler.conf
|
||||
sed -i 's/\[www\]/[piler]/' /etc/php/8.4/fpm/pool.d/piler.conf
|
||||
sed -i 's/^user = www-data/user = piler/' /etc/php/8.4/fpm/pool.d/piler.conf
|
||||
sed -i 's/^group = www-data/group = piler/' /etc/php/8.4/fpm/pool.d/piler.conf
|
||||
sed -i 's|^listen = .*|listen = /run/php/php8.4-fpm-piler.sock|' /etc/php/8.4/fpm/pool.d/piler.conf
|
||||
$STD systemctl restart php8.4-fpm
|
||||
cp /etc/php/8.3/fpm/pool.d/www.conf /etc/php/8.3/fpm/pool.d/piler.conf
|
||||
sed -i 's/\[www\]/[piler]/' /etc/php/8.3/fpm/pool.d/piler.conf
|
||||
sed -i 's/^user = www-data/user = piler/' /etc/php/8.3/fpm/pool.d/piler.conf
|
||||
sed -i 's/^group = www-data/group = piler/' /etc/php/8.3/fpm/pool.d/piler.conf
|
||||
sed -i 's|^listen = .*|listen = /run/php/php8.3-fpm-piler.sock|' /etc/php/8.3/fpm/pool.d/piler.conf
|
||||
$STD systemctl restart php8.3-fpm
|
||||
msg_ok "Configured PHP-FPM Pool"
|
||||
|
||||
msg_info "Configuring Piler Web GUI"
|
||||
cd /var/www/piler
|
||||
|
||||
cat <<EOF >/var/www/piler/config-site.php
|
||||
# Check if config-site.php already exists (created by .deb package)
|
||||
if [ ! -f /var/www/piler/config-site.php ]; then
|
||||
cat <<EOF >/var/www/piler/config-site.php
|
||||
<?php
|
||||
\$config['SITE_NAME'] = 'Piler Email Archive';
|
||||
\$config['SITE_URL'] = 'http://${LOCAL_IP}';
|
||||
@@ -237,6 +225,7 @@ cat <<EOF >/var/www/piler/config-site.php
|
||||
\$config['HEADER_LINE_TO_HIDE'] = 'X-Envelope-To:';
|
||||
?>
|
||||
EOF
|
||||
fi
|
||||
|
||||
chown -R piler:piler /var/www/piler
|
||||
chmod 755 /var/www/piler
|
||||
@@ -260,7 +249,7 @@ server {
|
||||
}
|
||||
|
||||
location ~ \.php$ {
|
||||
fastcgi_pass unix:/run/php/php8.4-fpm-piler.sock;
|
||||
fastcgi_pass unix:/run/php/php8.3-fpm-piler.sock;
|
||||
fastcgi_index index.php;
|
||||
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
|
||||
include fastcgi_params;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://pixelfed.org/
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://www.plex.tv/
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Setting Up Hardware Acceleration"
|
||||
$STD apt -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
||||
if [[ -d /dev/dri ]]; then
|
||||
chgrp video /dev/dri 2>/dev/null || true
|
||||
chmod 755 /dev/dri 2>/dev/null || true
|
||||
chmod 660 /dev/dri/* 2>/dev/null || true
|
||||
$STD adduser "$(id -u -n)" video
|
||||
$STD adduser "$(id -u -n)" render
|
||||
fi
|
||||
msg_ok "Set Up Hardware Acceleration"
|
||||
|
||||
msg_info "Setting Up Plex Media Server Repository"
|
||||
curl -fsSL https://downloads.plex.tv/plex-keys/PlexSign.key | tee /usr/share/keyrings/PlexSign.asc >/dev/null
|
||||
cat <<EOF >/etc/apt/sources.list.d/plexmediaserver.sources
|
||||
Types: deb
|
||||
URIs: https://downloads.plex.tv/repo/deb/
|
||||
Suites: public
|
||||
Components: main
|
||||
Signed-By: /usr/share/keyrings/PlexSign.asc
|
||||
EOF
|
||||
msg_ok "Set Up Plex Media Server Repository"
|
||||
|
||||
msg_info "Installing Plex Media Server"
|
||||
$STD apt update
|
||||
$STD apt -o Dpkg::Options::="--force-confold" install -y plexmediaserver
|
||||
if [[ "$CTTYPE" == "0" ]]; then
|
||||
sed -i -e 's/^ssl-cert:x:104:plex$/render:x:104:root,plex/' -e 's/^render:x:108:root$/ssl-cert:x:108:plex/' /etc/group
|
||||
else
|
||||
sed -i -e 's/^ssl-cert:x:104:plex$/render:x:104:plex/' -e 's/^render:x:108:$/ssl-cert:x:108:/' /etc/group
|
||||
fi
|
||||
msg_ok "Installed Plex Media Server"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -1,41 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://www.plex.tv/
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
setup_hwaccel
|
||||
|
||||
msg_info "Setting Up Plex Media Server Repository"
|
||||
curl -fsSL https://downloads.plex.tv/plex-keys/PlexSign.key | tee /usr/share/keyrings/PlexSign.asc >/dev/null
|
||||
cat <<EOF >/etc/apt/sources.list.d/plexmediaserver.sources
|
||||
Types: deb
|
||||
URIs: https://downloads.plex.tv/repo/deb/
|
||||
Suites: public
|
||||
Components: main
|
||||
Signed-By: /usr/share/keyrings/PlexSign.asc
|
||||
EOF
|
||||
msg_ok "Set Up Plex Media Server Repository"
|
||||
|
||||
msg_info "Installing Plex Media Server"
|
||||
$STD apt update
|
||||
$STD apt -o Dpkg::Options::="--force-confold" install -y plexmediaserver
|
||||
if [[ "$CTTYPE" == "0" ]]; then
|
||||
sed -i -e 's/^ssl-cert:x:104:plex$/render:x:104:root,plex/' -e 's/^render:x:108:root$/ssl-cert:x:108:plex/' /etc/group
|
||||
else
|
||||
sed -i -e 's/^ssl-cert:x:104:plex$/render:x:104:plex/' -e 's/^render:x:108:$/ssl-cert:x:108:/' /etc/group
|
||||
fi
|
||||
msg_ok "Installed Plex Media Server"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
42
install/qui-install.sh
Normal file
42
install/qui-install.sh
Normal file
@@ -0,0 +1,42 @@
|
||||
#!/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/autobrr/qui
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
fetch_and_deploy_gh_release "qui" "autobrr/qui" "prebuild" "latest" "/usr/local/bin" "qui_*_linux_x86_64.tar.gz"
|
||||
chmod +x /usr/local/bin/qui
|
||||
ln -sf /usr/local/bin/qui /usr/bin/qui
|
||||
ln -sf /usr/local/bin/qui /opt/qui
|
||||
|
||||
msg_info "Creating Qui Service"
|
||||
cat <<EOF >/etc/systemd/system/qui.service
|
||||
[Unit]
|
||||
Description=Qui - qBittorrent Web UI
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/usr/local/bin/qui serve
|
||||
Restart=on-failure
|
||||
RestartSec=5s
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now qui
|
||||
msg_ok "Created Qui Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://rockylinux.org/
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: DevelopmentCats
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Co-author: AlphaLawless
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://romm.app
|
||||
# Updated: 03/10/2025
|
||||
# Updated: 25/12/2025
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -16,67 +17,124 @@ update_os
|
||||
|
||||
msg_info "Installing dependencies"
|
||||
$STD apt-get install -y \
|
||||
acl \
|
||||
build-essential \
|
||||
libssl-dev \
|
||||
libffi-dev \
|
||||
python3-dev \
|
||||
python3-pip \
|
||||
python3-venv \
|
||||
libmariadb3 \
|
||||
libmariadb-dev \
|
||||
libpq-dev \
|
||||
redis-tools \
|
||||
p7zip \
|
||||
tzdata \
|
||||
jq
|
||||
msg_ok "Installed core dependencies"
|
||||
acl \
|
||||
build-essential \
|
||||
gcc \
|
||||
g++ \
|
||||
make \
|
||||
libssl-dev \
|
||||
libffi-dev \
|
||||
libmagic-dev \
|
||||
python3-dev \
|
||||
python3-pip \
|
||||
python3-venv \
|
||||
libmariadb3 \
|
||||
libmariadb-dev \
|
||||
libpq-dev \
|
||||
libbz2-dev \
|
||||
libreadline-dev \
|
||||
libsqlite3-dev \
|
||||
zlib1g-dev \
|
||||
liblzma-dev \
|
||||
libncurses5-dev \
|
||||
libncursesw5-dev \
|
||||
redis-server \
|
||||
redis-tools \
|
||||
p7zip-full \
|
||||
tzdata \
|
||||
nginx
|
||||
msg_ok "Installed dependencies"
|
||||
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
NODE_VERSION="22" NODE_MODULE="serve" setup_nodejs
|
||||
UV_VERSION="0.7.19" PYTHON_VERSION="3.13" setup_uv
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
setup_mariadb
|
||||
MARIADB_DB_NAME="romm" MARIADB_DB_USER="romm" setup_mariadb_db
|
||||
|
||||
msg_info "Configuring Database"
|
||||
DB_NAME=romm
|
||||
DB_USER=romm
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
$STD mariadb -u root -e "CREATE DATABASE IF NOT EXISTS $DB_NAME CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
|
||||
$STD mariadb -u root -e "CREATE USER IF NOT EXISTS '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
|
||||
$STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
||||
{
|
||||
echo "RomM-Credentials"
|
||||
echo "RomM Database User: $DB_USER"
|
||||
echo "RomM Database Password: $DB_PASS"
|
||||
echo "RomM Database Name: $DB_NAME"
|
||||
} >~/romm.creds
|
||||
chmod 600 ~/romm.creds
|
||||
msg_ok "Configured Database"
|
||||
|
||||
msg_info "Creating romm user and directories"
|
||||
id -u romm &>/dev/null || useradd -r -m -d /var/lib/romm -s /bin/bash romm
|
||||
msg_info "Creating directories"
|
||||
mkdir -p /opt/romm \
|
||||
/var/lib/romm/config \
|
||||
/var/lib/romm/resources \
|
||||
/var/lib/romm/assets/{saves,states,screenshots} \
|
||||
/var/lib/romm/library/roms/{gba,gbc,ps} \
|
||||
/var/lib/romm/library/bios/{gba,ps}
|
||||
chown -R romm:romm /opt/romm /var/lib/romm
|
||||
msg_ok "Created romm user and directories"
|
||||
/var/lib/romm/config \
|
||||
/var/lib/romm/resources \
|
||||
/var/lib/romm/assets/{saves,states,screenshots} \
|
||||
/var/lib/romm/library/roms \
|
||||
/var/lib/romm/library/bios
|
||||
msg_ok "Created directories"
|
||||
|
||||
msg_info "Configuring Database"
|
||||
DB_NAME=romm
|
||||
DB_USER=romm
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
$STD mariadb -u root -e "CREATE DATABASE $DB_NAME CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
|
||||
$STD mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
|
||||
$STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
||||
{
|
||||
echo "RomM-Credentials"
|
||||
echo "RomM Database User: $DB_USER"
|
||||
echo "RomM Database Password: $DB_PASS"
|
||||
echo "RomM Database Name: $DB_NAME"
|
||||
} >~/romm.creds
|
||||
msg_ok "Configured Database"
|
||||
msg_info "Creating configuration file"
|
||||
cat >/var/lib/romm/config/config.yml <<'CONFIGEOF'
|
||||
# RomM Configuration File
|
||||
# Documentation: https://docs.romm.app/latest/Getting-Started/Configuration-File/
|
||||
# Only uncomment the lines you want to use/modify
|
||||
|
||||
# exclude:
|
||||
# platforms:
|
||||
# - excluded_folder_a
|
||||
# roms:
|
||||
# single_file:
|
||||
# extensions:
|
||||
# - xml
|
||||
# - txt
|
||||
# names:
|
||||
# - '._*'
|
||||
# - '*.nfo'
|
||||
# multi_file:
|
||||
# names:
|
||||
# - downloaded_media
|
||||
# - media
|
||||
|
||||
# system:
|
||||
# platforms:
|
||||
# gc: ngc
|
||||
# ps1: psx
|
||||
|
||||
# The folder name where your roms are located (relative to library path)
|
||||
# filesystem:
|
||||
# roms_folder: 'roms'
|
||||
|
||||
# scan:
|
||||
# priority:
|
||||
# metadata:
|
||||
# - "igdb"
|
||||
# - "moby"
|
||||
# - "ss"
|
||||
# - "ra"
|
||||
# artwork:
|
||||
# - "igdb"
|
||||
# - "moby"
|
||||
# - "ss"
|
||||
# region:
|
||||
# - "us"
|
||||
# - "eu"
|
||||
# - "jp"
|
||||
# language:
|
||||
# - "en"
|
||||
# media:
|
||||
# - box2d
|
||||
# - box3d
|
||||
# - screenshot
|
||||
# - manual
|
||||
|
||||
# emulatorjs:
|
||||
# debug: false
|
||||
# cache_limit: null
|
||||
CONFIGEOF
|
||||
chmod 644 /var/lib/romm/config/config.yml
|
||||
msg_ok "Created configuration file"
|
||||
|
||||
fetch_and_deploy_gh_release "RetroAchievements" "RetroAchievements/RALibretro" "prebuild" "latest" "/opt/RALibretro" "RAHasher-x64-Linux-*.zip"
|
||||
|
||||
msg_info "Building RAHasher (RetroAchievements)"
|
||||
cd /opt/RALibretro
|
||||
sed -i '22a #include <ctime>' ./src/Util.h
|
||||
sed -i '6a #include <unistd.h>' \
|
||||
./src/libchdr/deps/zlib-1.3.1/gzlib.c \
|
||||
./src/libchdr/deps/zlib-1.3.1/gzread.c \
|
||||
./src/libchdr/deps/zlib-1.3.1/gzwrite.c
|
||||
$STD make HAVE_CHD=1 -f ./Makefile.RAHasher
|
||||
cp ./bin64/RAHasher /usr/bin/RAHasher
|
||||
chmod +x /usr/bin/RAHasher
|
||||
cd /tmp
|
||||
rm -rf /tmp/RALibretro
|
||||
msg_ok "Built RAHasher"
|
||||
|
||||
fetch_and_deploy_gh_release "romm" "rommapp/romm"
|
||||
|
||||
@@ -88,13 +146,14 @@ AUTH_SECRET_KEY=$(openssl rand -hex 32)
|
||||
|
||||
cat >/opt/romm/.env <<EOF
|
||||
ROMM_BASE_PATH=/var/lib/romm
|
||||
ROMM_CONFIG_PATH=/var/lib/romm/config/config.yml
|
||||
WEB_CONCURRENCY=4
|
||||
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=3306
|
||||
DB_NAME=$DB_NAME
|
||||
DB_USER=$DB_USER
|
||||
DB_PASSWD=$DB_PASS
|
||||
DB_NAME=$MARIADB_DB_NAME
|
||||
DB_USER=$MARIADB_DB_USER
|
||||
DB_PASSWD=$MARIADB_DB_PASS
|
||||
|
||||
REDIS_HOST=127.0.0.1
|
||||
REDIS_PORT=6379
|
||||
@@ -114,29 +173,96 @@ SCHEDULED_UPDATE_SWITCH_TITLEDB_CRON=0 4 * * *
|
||||
LOGLEVEL=INFO
|
||||
EOF
|
||||
|
||||
chown romm:romm /opt/romm/.env
|
||||
chmod 600 /opt/romm/.env
|
||||
msg_ok "Created environment file"
|
||||
|
||||
msg_info "Installing backend"
|
||||
msg_info "Setup Romm backend"
|
||||
cd /opt/romm
|
||||
uv pip install --all-extras .
|
||||
export UV_CONCURRENT_DOWNLOADS=1
|
||||
$STD uv sync --all-extras
|
||||
cd /opt/romm/backend
|
||||
uv run alembic upgrade head
|
||||
chown -R romm:romm /opt/romm
|
||||
$STD uv run alembic upgrade head
|
||||
msg_ok "Installed backend"
|
||||
|
||||
msg_info "Installing frontend"
|
||||
msg_info "Setup Romm frontend"
|
||||
cd /opt/romm/frontend
|
||||
npm install
|
||||
npm run build
|
||||
ln -sfn /var/lib/romm/resources /opt/romm/frontend/assets/romm/resources
|
||||
ln -sfn /var/lib/romm/assets /opt/romm/frontend/assets/romm/assets
|
||||
chown -R romm:romm /opt/romm
|
||||
msg_ok "Installed frontend"
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
mkdir -p /opt/romm/frontend/dist/assets/romm
|
||||
ln -sfn /var/lib/romm/resources /opt/romm/frontend/dist/assets/romm/resources
|
||||
ln -sfn /var/lib/romm/assets /opt/romm/frontend/dist/assets/romm/assets
|
||||
msg_ok "Setup Romm frontend"
|
||||
msg_info "Configuring nginx"
|
||||
cat >/etc/nginx/sites-available/romm <<'EOF'
|
||||
upstream romm_backend {
|
||||
server 127.0.0.1:5000;
|
||||
}
|
||||
|
||||
map $http_upgrade $connection_upgrade {
|
||||
default upgrade;
|
||||
'' close;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
root /opt/romm/frontend/dist;
|
||||
client_max_body_size 0;
|
||||
|
||||
# Frontend SPA
|
||||
location / {
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
|
||||
# EmulatorJS player - requires COOP/COEP headers for SharedArrayBuffer
|
||||
location ~ ^/rom/.*/ejs$ {
|
||||
add_header Cross-Origin-Embedder-Policy "require-corp";
|
||||
add_header Cross-Origin-Opener-Policy "same-origin";
|
||||
try_files $uri /index.html;
|
||||
}
|
||||
|
||||
# Backend API
|
||||
location /api {
|
||||
proxy_pass http://romm_backend;
|
||||
proxy_buffering off;
|
||||
proxy_request_buffering off;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
# WebSocket and Netplay
|
||||
location ~ ^/(ws|netplay) {
|
||||
proxy_pass http://romm_backend;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection $connection_upgrade;
|
||||
proxy_set_header Host $host;
|
||||
proxy_read_timeout 86400;
|
||||
}
|
||||
|
||||
# OpenAPI docs
|
||||
location = /openapi.json {
|
||||
proxy_pass http://romm_backend;
|
||||
}
|
||||
|
||||
# Internal library file serving
|
||||
location /library/ {
|
||||
internal;
|
||||
alias /var/lib/romm/library/;
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
rm -f /etc/nginx/sites-enabled/default
|
||||
ln -sf /etc/nginx/sites-available/romm /etc/nginx/sites-enabled/romm
|
||||
$STD nginx -t
|
||||
systemctl restart nginx
|
||||
systemctl enable -q nginx
|
||||
msg_ok "Configured nginx"
|
||||
|
||||
msg_info "Creating services"
|
||||
|
||||
cat >/etc/systemd/system/romm-backend.service <<EOF
|
||||
[Unit]
|
||||
Description=RomM Backend
|
||||
@@ -145,27 +271,12 @@ Requires=mariadb.service redis-server.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=romm
|
||||
WorkingDirectory=/opt/romm/backend
|
||||
EnvironmentFile=/opt/romm/.env
|
||||
Environment="PYTHONPATH=/opt/romm"
|
||||
ExecStart=/opt/romm/.venv/bin/uv run gunicorn main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:5000
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
cat >/etc/systemd/system/romm-frontend.service <<EOF
|
||||
[Unit]
|
||||
Description=RomM Frontend
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=romm
|
||||
WorkingDirectory=/opt/romm/frontend
|
||||
ExecStart=$(which serve) -s dist -l 8080
|
||||
ExecStart=/opt/romm/.venv/bin/python main.py
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -173,17 +284,18 @@ EOF
|
||||
|
||||
cat >/etc/systemd/system/romm-worker.service <<EOF
|
||||
[Unit]
|
||||
Description=RomM Worker
|
||||
Description=RomM RQ Worker
|
||||
After=network.target mariadb.service redis-server.service romm-backend.service
|
||||
Requires=mariadb.service redis-server.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=romm
|
||||
WorkingDirectory=/opt/romm/backend
|
||||
Environment="PYTHONPATH=/opt/romm"
|
||||
ExecStart=/opt/romm/.venv/bin/uv run python3 worker.py
|
||||
EnvironmentFile=/opt/romm/.env
|
||||
Environment="PYTHONPATH=/opt/romm/backend"
|
||||
ExecStart=/opt/romm/.venv/bin/rq worker --path /opt/romm/backend --url redis://127.0.0.1:6379/0 high default low
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -191,33 +303,48 @@ EOF
|
||||
|
||||
cat >/etc/systemd/system/romm-scheduler.service <<EOF
|
||||
[Unit]
|
||||
Description=RomM Scheduler
|
||||
Description=RomM RQ Scheduler
|
||||
After=network.target mariadb.service redis-server.service romm-backend.service
|
||||
Requires=mariadb.service redis-server.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=romm
|
||||
WorkingDirectory=/opt/romm/backend
|
||||
Environment="PYTHONPATH=/opt/romm"
|
||||
ExecStart=/opt/romm/.venv/bin/uv run python3 scheduler.py
|
||||
EnvironmentFile=/opt/romm/.env
|
||||
Environment="PYTHONPATH=/opt/romm/backend"
|
||||
Environment="RQ_REDIS_HOST=127.0.0.1"
|
||||
Environment="RQ_REDIS_PORT=6379"
|
||||
ExecStart=/opt/romm/.venv/bin/rqscheduler --path /opt/romm/backend
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
systemctl enable -q --now romm-backend romm-frontend romm-worker romm-scheduler
|
||||
msg_ok "Created services"
|
||||
cat >/etc/systemd/system/romm-watcher.service <<EOF
|
||||
[Unit]
|
||||
Description=RomM Filesystem Watcher
|
||||
After=network.target romm-backend.service
|
||||
Requires=romm-backend.service
|
||||
|
||||
# Install serve globally
|
||||
su - ${ROMM_USER} -c "npm install -g serve"
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/romm/backend
|
||||
EnvironmentFile=/opt/romm/.env
|
||||
Environment="PYTHONPATH=/opt/romm/backend"
|
||||
ExecStart=/opt/romm/.venv/bin/watchfiles --target-type command '/opt/romm/.venv/bin/python watcher.py' /var/lib/romm/library
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
systemctl daemon-reload
|
||||
systemctl enable -q --now romm-backend romm-worker romm-scheduler romm-watcher
|
||||
msg_ok "Created services"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
$STD apt-get -y clean
|
||||
msg_ok "Cleaned up"
|
||||
cleanup_lxc
|
||||
|
||||
42
install/rustypaste-install.sh
Normal file
42
install/rustypaste-install.sh
Normal file
@@ -0,0 +1,42 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: GoldenSpringness | MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://github.com/orhun/rustypaste
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
fetch_and_deploy_gh_release "rustypaste" "orhun/rustypaste" "prebuild" "latest" "/opt/rustypaste" "*x86_64-unknown-linux-gnu.tar.gz"
|
||||
|
||||
msg_info "Setting up rustypaste"
|
||||
cd /opt/rustypaste
|
||||
sed -i 's|^address = ".*"|address = "0.0.0.0:8000"|' config.toml
|
||||
msg_ok "Set up rustypaste"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/rustypaste.service
|
||||
[Unit]
|
||||
Description=rustypaste Service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=/opt/rustypaste
|
||||
ExecStart=/opt/rustypaste/rustypaste
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now rustypaste
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://github.com/rybbit-io/rybbit
|
||||
|
||||
51
install/thingsboard-install.sh
Normal file
51
install/thingsboard-install.sh
Normal file
@@ -0,0 +1,51 @@
|
||||
#!/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://github.com/thingsboard/thingsboard
|
||||
|
||||
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 \
|
||||
libharfbuzz0b \
|
||||
fontconfig \
|
||||
fonts-dejavu-core
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
JAVA_VERSION="17" setup_java
|
||||
PG_VERSION="16" setup_postgresql
|
||||
PG_DB_NAME="thingsboard_db" PG_DB_USER="thingsboard" setup_postgresql_db
|
||||
fetch_and_deploy_gh_release "thingsboard" "thingsboard/thingsboard" "binary" "latest" "/tmp" "thingsboard-*.deb"
|
||||
|
||||
msg_info "Configuring ThingsBoard"
|
||||
cat >/etc/thingsboard/conf/thingsboard.conf <<EOF
|
||||
# DB Configuration
|
||||
export DATABASE_TS_TYPE=sql
|
||||
export SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/${PG_DB_NAME}
|
||||
export SPRING_DATASOURCE_USERNAME=${PG_DB_USER}
|
||||
export SPRING_DATASOURCE_PASSWORD=${PG_DB_PASS}
|
||||
# Specify partitioning size for timestamp key-value storage. Allowed values: DAYS, MONTHS, YEARS, INDEFINITE.
|
||||
export SQL_POSTGRES_TS_KV_PARTITIONING=MONTHS
|
||||
EOF
|
||||
systemctl daemon-reload
|
||||
msg_ok "Configured ThingsBoard"
|
||||
|
||||
msg_info "Running ThingsBoard Installation Script"
|
||||
$STD /usr/share/thingsboard/bin/install/install.sh --loadDemo
|
||||
msg_ok "Ran Installation Script"
|
||||
|
||||
msg_info "Starting ThingsBoard Service"
|
||||
systemctl enable -q --now thingsboard
|
||||
msg_ok "Started ThingsBoard Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
58
install/tor-snowflake-install.sh
Normal file
58
install/tor-snowflake-install.sh
Normal file
@@ -0,0 +1,58 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: KernelSailor
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://snowflake.torproject.org/
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
setup_go
|
||||
|
||||
msg_info "Creating snowflake user"
|
||||
useradd -m -r -s /usr/sbin/nologin -d /home/snowflake snowflake
|
||||
msg_ok "Created snowflake user"
|
||||
|
||||
msg_info "Building Snowflake"
|
||||
RELEASE=$(curl -fsSL https://gitlab.torproject.org/api/v4/projects/tpo%2Fanti-censorship%2Fpluggable-transports%2Fsnowflake/releases | jq -r '.[0].tag_name' | sed 's/^v//')
|
||||
$STD curl -fsSL "https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/archive/v${RELEASE}/snowflake-v${RELEASE}.tar.gz" -o /opt/snowflake.tar.gz
|
||||
$STD tar -xzf /opt/snowflake.tar.gz -C /opt
|
||||
$STD rm -rf /opt/snowflake.tar.gz
|
||||
$STD mv /opt/snowflake-v${RELEASE} /opt/tor-snowflake
|
||||
$STD chown -R snowflake:snowflake /opt/tor-snowflake
|
||||
$STD sudo -H -u snowflake bash -c "cd /opt/tor-snowflake/proxy && go build -o snowflake-proxy ."
|
||||
echo "${RELEASE}" >~/.tor-snowflake
|
||||
msg_ok "Built Snowflake Proxy v${RELEASE}"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/snowflake-proxy.service
|
||||
[Unit]
|
||||
Description=Snowflake Proxy Service
|
||||
Documentation=https://snowflake.torproject.org/
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=snowflake
|
||||
Group=snowflake
|
||||
WorkingDirectory=/opt/tor-snowflake/proxy
|
||||
ExecStart=/opt/tor-snowflake/proxy/snowflake-proxy -verbose -unsafe-logging
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now snowflake-proxy
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
151
install/tracearr-install.sh
Normal file
151
install/tracearr-install.sh
Normal file
@@ -0,0 +1,151 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: durzo
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/connorgallopo/Tracearr
|
||||
|
||||
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 redis-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PNPM_VERSION="$(curl -fsSL "https://raw.githubusercontent.com/connorgallopo/Tracearr/refs/heads/main/package.json" | jq -r '.packageManager | split("@")[1]')"
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs
|
||||
PG_VERSION="18" setup_postgresql
|
||||
|
||||
msg_info "Installing TimescaleDB"
|
||||
setup_deb822_repo \
|
||||
"timescaledb" \
|
||||
"https://packagecloud.io/timescale/timescaledb/gpgkey" \
|
||||
"https://packagecloud.io/timescale/timescaledb/debian" \
|
||||
"$(get_os_info codename)" \
|
||||
"main"
|
||||
$STD apt install -y \
|
||||
timescaledb-2-postgresql-18 \
|
||||
timescaledb-tools \
|
||||
timescaledb-toolkit-postgresql-18
|
||||
total_ram_kb=$(grep MemTotal /proc/meminfo | awk '{print $2}')
|
||||
ram_for_tsdb=$((total_ram_kb / 1024 / 2))
|
||||
$STD timescaledb-tune -yes -memory "$ram_for_tsdb"MB
|
||||
$STD systemctl restart postgresql
|
||||
msg_ok "Installed TimescaleDB"
|
||||
|
||||
msg_info "Creating PostgreSQL Database"
|
||||
PG_DB_NAME="tracearr" PG_DB_USER="tracearr" PG_DB_EXTENSIONS="timescaledb,timescaledb_toolkit" setup_postgresql_db
|
||||
msg_ok "Created PostgreSQL Database"
|
||||
|
||||
fetch_and_deploy_gh_release "tracearr" "connorgallopo/Tracearr" "tarball" "latest" "/opt/tracearr.build"
|
||||
|
||||
msg_info "Building Tracearr"
|
||||
export TZ=$(cat /etc/timezone)
|
||||
cd /opt/tracearr.build
|
||||
$STD pnpm install --frozen-lockfile --force
|
||||
$STD pnpm turbo telemetry disable
|
||||
$STD pnpm turbo run build --no-daemon --filter=@tracearr/shared --filter=@tracearr/server --filter=@tracearr/web
|
||||
mkdir -p /opt/tracearr/{packages/shared,apps/server,apps/web,apps/server/src/db}
|
||||
cp -rf package.json /opt/tracearr/
|
||||
cp -rf pnpm-workspace.yaml /opt/tracearr/
|
||||
cp -rf pnpm-lock.yaml /opt/tracearr/
|
||||
cp -rf apps/server/package.json /opt/tracearr/apps/server/
|
||||
cp -rf apps/server/dist /opt/tracearr/apps/server/dist
|
||||
cp -rf apps/web/dist /opt/tracearr/apps/web/dist
|
||||
cp -rf packages/shared/package.json /opt/tracearr/packages/shared/
|
||||
cp -rf packages/shared/dist /opt/tracearr/packages/shared/dist
|
||||
cp -rf apps/server/src/db/migrations /opt/tracearr/apps/server/src/db/migrations
|
||||
cp -rf data /opt/tracearr/data
|
||||
mkdir -p /opt/tracearr/data/image-cache
|
||||
rm -rf /opt/tracearr.build
|
||||
cd /opt/tracearr
|
||||
$STD pnpm install --prod --frozen-lockfile --ignore-scripts
|
||||
msg_ok "Built Tracearr"
|
||||
|
||||
msg_info "Configuring Tracearr"
|
||||
$STD useradd -r -s /bin/false -U tracearr
|
||||
$STD chown -R tracearr:tracearr /opt/tracearr
|
||||
install -d -m 750 -o tracearr -g tracearr /data/tracearr
|
||||
export JWT_SECRET=$(openssl rand -hex 32)
|
||||
export COOKIE_SECRET=$(openssl rand -hex 32)
|
||||
cat <<EOF >/data/tracearr/.env
|
||||
DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@127.0.0.1:5432/${PG_DB_NAME}
|
||||
REDIS_URL=redis://127.0.0.1:6379
|
||||
PORT=3000
|
||||
HOST=0.0.0.0
|
||||
NODE_ENV=production
|
||||
TZ=${TZ}
|
||||
LOG_LEVEL=info
|
||||
JWT_SECRET=$JWT_SECRET
|
||||
COOKIE_SECRET=$COOKIE_SECRET
|
||||
APP_VERSION=$(cat /root/.tracearr)
|
||||
#CORS_ORIGIN=http://localhost:5173
|
||||
#MOBILE_BETA_MODE=true
|
||||
EOF
|
||||
chmod 600 /data/tracearr/.env
|
||||
chown -R tracearr:tracearr /data/tracearr
|
||||
msg_ok "Configured Tracearr"
|
||||
|
||||
msg_info "Creating Services"
|
||||
cat <<EOF >/data/tracearr/prestart.sh
|
||||
#!/usr/bin/env bash
|
||||
# =============================================================================
|
||||
# Tune PostgreSQL for available resources (runs every startup)
|
||||
# =============================================================================
|
||||
# timescaledb-tune automatically optimizes PostgreSQL settings based on
|
||||
# available RAM and CPU. Safe to run repeatedly - recalculates if resources change.
|
||||
if command -v timescaledb-tune &> /dev/null; then
|
||||
total_ram_kb=\$(grep MemTotal /proc/meminfo | awk '{print \$2}')
|
||||
ram_for_tsdb=\$((total_ram_kb / 1024 / 2))
|
||||
timescaledb-tune -yes -memory "\$ram_for_tsdb"MB --quiet 2>/dev/null \
|
||||
|| echo "Warning: timescaledb-tune failed (non-fatal)"
|
||||
fi
|
||||
# =============================================================================
|
||||
# Ensure TimescaleDB decompression limit is set (for existing databases)
|
||||
# =============================================================================
|
||||
# This setting allows migrations to modify compressed hypertable data.
|
||||
# Without it, bulk UPDATEs on compressed sessions will fail with
|
||||
# "tuple decompression limit exceeded" errors.
|
||||
pg_config_file="/etc/postgresql/18/main/postgresql.conf"
|
||||
if [ -f \$pg_config_file ]; then
|
||||
if ! grep -q "max_tuples_decompressed_per_dml_transaction" \$pg_config_file; then
|
||||
echo "" >> \$pg_config_file
|
||||
echo "# Allow unlimited tuple decompression for migrations on compressed hypertables" >> \$pg_config_file
|
||||
echo "timescaledb.max_tuples_decompressed_per_dml_transaction = 0" >> \$pg_config_file
|
||||
fi
|
||||
fi
|
||||
systemctl restart postgresql
|
||||
EOF
|
||||
chmod +x /data/tracearr/prestart.sh
|
||||
cat <<EOF >/lib/systemd/system/tracearr.service
|
||||
[Unit]
|
||||
Description=Tracearr Web Server
|
||||
After=network.target postgresql.service redis-server.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
KillMode=control-group
|
||||
EnvironmentFile=/data/tracearr/.env
|
||||
WorkingDirectory=/opt/tracearr
|
||||
ExecStartPre=+/data/tracearr/prestart.sh
|
||||
ExecStart=node /opt/tracearr/apps/server/dist/index.js
|
||||
Restart=on-failure
|
||||
RestartSec=10
|
||||
User=tracearr
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now postgresql
|
||||
systemctl enable -q --now redis-server
|
||||
systemctl enable -q --now tracearr
|
||||
msg_ok "Created Services"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Copyright (c) 2021-2026 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
|
||||
83
install/unifi-os-server-install.sh
Normal file
83
install/unifi-os-server-install.sh
Normal file
@@ -0,0 +1,83 @@
|
||||
#!/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://ui.com/
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
if [[ "${CTTYPE:-1}" != "0" ]]; then
|
||||
msg_error "UniFi OS Server requires a privileged LXC container."
|
||||
msg_error "Recreate the container with unprivileged=0."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -e /dev/net/tun ]]; then
|
||||
msg_error "Missing /dev/net/tun in container."
|
||||
msg_error "Enable TUN/TAP (var_tun=yes) or add /dev/net/tun passthrough."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
msg_info "Installing dependencies"
|
||||
$STD apt install -y \
|
||||
ca-certificates \
|
||||
jq \
|
||||
podman \
|
||||
uidmap \
|
||||
slirp4netns
|
||||
msg_ok "Installed dependencies"
|
||||
|
||||
msg_info "Installing sysctl wrapper (ignore non-critical errors)"
|
||||
cat <<'EOF' >/usr/local/sbin/sysctl
|
||||
#!/bin/sh
|
||||
/usr/sbin/sysctl "$@" || true
|
||||
exit 0
|
||||
EOF
|
||||
chmod +x /usr/local/sbin/sysctl
|
||||
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||
msg_ok "Sysctl wrapper installed"
|
||||
|
||||
msg_info "Fetching latest UniFi OS Server"
|
||||
API_URL="https://fw-update.ui.com/api/firmware-latest"
|
||||
TEMP_JSON="$(mktemp)"
|
||||
if ! curl -fsSL "$API_URL" -o "$TEMP_JSON"; then
|
||||
rm -f "$TEMP_JSON"
|
||||
msg_error "Failed to fetch data from Ubiquiti API"
|
||||
exit 1
|
||||
fi
|
||||
LATEST=$(jq -r '
|
||||
._embedded.firmware
|
||||
| map(select(.product == "unifi-os-server"))
|
||||
| map(select(.platform == "linux-x64"))
|
||||
| sort_by(.version_major, .version_minor, .version_patch)
|
||||
| last
|
||||
' "$TEMP_JSON")
|
||||
UOS_VERSION=$(echo "$LATEST" | jq -r '.version' | sed 's/^v//')
|
||||
UOS_URL=$(echo "$LATEST" | jq -r '._links.data.href')
|
||||
rm -f "$TEMP_JSON"
|
||||
if [[ -z "$UOS_URL" || -z "$UOS_VERSION" || "$UOS_URL" == "null" ]]; then
|
||||
msg_error "Failed to parse UniFi OS Server version or download URL"
|
||||
exit 1
|
||||
fi
|
||||
msg_ok "Found UniFi OS Server ${UOS_VERSION}"
|
||||
|
||||
msg_info "Downloading UniFi OS Server installer"
|
||||
mkdir -p /usr/local/sbin
|
||||
curl -fsSL "$UOS_URL" -o /usr/local/sbin/unifi-os-server.bin
|
||||
chmod +x /usr/local/sbin/unifi-os-server.bin
|
||||
msg_ok "Downloaded UniFi OS Server installer"
|
||||
|
||||
msg_info "Installing UniFi OS Server (this takes a few minutes)"
|
||||
$STD /usr/local/sbin/unifi-os-server.bin <<<"y"
|
||||
msg_ok "UniFi OS Server installed"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
67
install/wishlist-install.sh
Normal file
67
install/wishlist-install.sh
Normal file
@@ -0,0 +1,67 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: Dunky13
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/cmintey/wishlist
|
||||
|
||||
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 \
|
||||
python3 \
|
||||
openssl \
|
||||
caddy
|
||||
msg_ok "Installed dependencies"
|
||||
|
||||
NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs
|
||||
fetch_and_deploy_gh_release "wishlist" "cmintey/wishlist" "tarball"
|
||||
LATEST_APP_VERSION=$(get_latest_github_release "cmintey/wishlist" false)
|
||||
import_local_ip
|
||||
|
||||
msg_info "Installing Wishlist"
|
||||
cd /opt/wishlist
|
||||
cp .env.example .env
|
||||
sed -i "s|^ORIGIN=.*|ORIGIN=http://${LOCAL_IP}:3000|" /opt/wishlist/.env
|
||||
echo "NODE_ENV=production" >>/opt/wishlist/.env
|
||||
$STD pnpm install
|
||||
$STD pnpm svelte-kit sync
|
||||
$STD pnpm prisma generate
|
||||
sed -i 's|/usr/src/app/|/opt/wishlist/|g' $(grep -rl '/usr/src/app/' /opt/wishlist)
|
||||
export VERSION="v${LATEST_APP_VERSION}"
|
||||
export SHA="v${LATEST_APP_VERSION}"
|
||||
$STD pnpm run build
|
||||
$STD pnpm prune --prod
|
||||
chmod +x /opt/wishlist/entrypoint.sh
|
||||
mkdir -p /opt/wishlist/uploads
|
||||
mkdir -p /opt/wishlist/data
|
||||
msg_ok "Installed Wishlist"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/wishlist.service
|
||||
[Unit]
|
||||
Description=Wishlist Service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=/opt/wishlist
|
||||
EnvironmentFile=/opt/wishlist/.env
|
||||
ExecStart=/usr/bin/env sh -c './entrypoint.sh'
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now wishlist
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
91
install/yubal-install.sh
Normal file
91
install/yubal-install.sh
Normal file
@@ -0,0 +1,91 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: Crazywolf13
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://github.com/guillevc/yubal
|
||||
|
||||
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 \
|
||||
libssl-dev \
|
||||
libffi-dev \
|
||||
python3-dev \
|
||||
ffmpeg
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Bun"
|
||||
export BUN_INSTALL=/opt/bun
|
||||
curl -fsSL https://bun.sh/install | $STD bash
|
||||
ln -sf /opt/bun/bin/bun /usr/local/bin/bun
|
||||
ln -sf /opt/bun/bin/bunx /usr/local/bin/bunx
|
||||
msg_ok "Installed Bun"
|
||||
|
||||
UV_VERSION="0.7.19" PYTHON_VERSION="3.12" setup_uv
|
||||
|
||||
msg_info "Installing Deno"
|
||||
$STD sh -c "curl -fsSL https://deno.land/install.sh | DENO_INSTALL=/usr/local sh -s -- -y"
|
||||
msg_ok "Installed Deno"
|
||||
|
||||
msg_info "Creating directories"
|
||||
mkdir -p /opt/yubal \
|
||||
/opt/yubal_data \
|
||||
/opt/yubal/ytdlp
|
||||
msg_ok "Created directories"
|
||||
|
||||
fetch_and_deploy_gh_release "yubal" "guillevc/yubal" "tarball" "latest" "/opt/yubal"
|
||||
|
||||
msg_info "Building Frontend"
|
||||
cd /opt/yubal/web
|
||||
$STD bun install --frozen-lockfile
|
||||
VERSION=$(get_latest_github_release "guillevc/yubal")
|
||||
VITE_VERSION=$VERSION VITE_COMMIT_SHA=$VERSION VITE_IS_RELEASE=true $STD bun run build
|
||||
msg_ok "Built Frontend"
|
||||
|
||||
msg_info "Installing Python Dependencies"
|
||||
cd /opt/yubal
|
||||
export UV_CONCURRENT_DOWNLOADS=1
|
||||
$STD uv sync --no-dev --frozen
|
||||
msg_ok "Installed Python Dependencies"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/opt/yubal.env
|
||||
YUBAL_HOST=0.0.0.0
|
||||
YUBAL_PORT=8001
|
||||
YUBAL_DATA_DIR=/opt/yubal_data
|
||||
YUBAL_BEETS_DIR=/opt/yubal/beets
|
||||
YUBAL_YTDLP_DIR=/opt/yubal/ytdlp
|
||||
PYTHONUNBUFFERED=1
|
||||
EOF
|
||||
cat <<EOF >/etc/systemd/system/yubal.service
|
||||
[Unit]
|
||||
Description=Yubal
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/yubal
|
||||
EnvironmentFile=/opt/yubal.env
|
||||
Environment="PATH=/opt/yubal/.venv/bin:/usr/local/bin:/usr/bin:/bin"
|
||||
ExecStart=/opt/yubal/.venv/bin/python -m yubal
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now yubal
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
Reference in New Issue
Block a user