Compare commits

...

98 Commits

Author SHA1 Message Date
github-actions[bot]
723c79718c Update CHANGELOG.md 2025-11-11 10:33:49 +00:00
CanbiZ
00b978df29 [docs / gh]: modernize README | Change Version Support in SECURITY.md | Shoutout to selfhst\icons (#9049) 2025-11-11 11:33:33 +01:00
Michel Roegl-Brunner
c054403325 Remove Dashy (#9050) 2025-11-11 11:32:44 +01:00
community-scripts-pr-app[bot]
45aec67359 Update CHANGELOG.md (#9048)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-11 09:19:43 +00:00
Tobias
774127eece flaresolverr: unpin - use latest version (#9046)
* revert: flaresolverr: latest update again

* Update FlareSolverr installation to use latest version

* fix
2025-11-11 10:19:23 +01:00
community-scripts-pr-app[bot]
d85e72fd0f Update CHANGELOG.md (#9045)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-11 06:54:27 +00:00
Slaviša Arežina
4a5a0e3966 Upgrade RAM (#9039) 2025-11-11 07:54:06 +01:00
community-scripts-pr-app[bot]
ec2726dff5 Update CHANGELOG.md (#9043)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-11 00:14:32 +00:00
community-scripts-pr-app[bot]
bf50900fdf Update versions.json (#9042)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-11 01:14:11 +01:00
community-scripts-pr-app[bot]
57af58d634 Update CHANGELOG.md (#9037)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-10 19:40:37 +00:00
Matt17000
0b2b13c79a Update plex.sh (#9036) 2025-11-10 20:40:14 +01:00
community-scripts-pr-app[bot]
508eb70d13 Update CHANGELOG.md (#9032)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-10 17:56:27 +00:00
CanbiZ
e90353f20b Refactor: phpIPAM (#9027) 2025-11-10 18:55:56 +01:00
community-scripts-pr-app[bot]
37fc378024 Update CHANGELOG.md (#9031)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-10 17:51:27 +00:00
CanbiZ
b1d782dec6 Add helper functions for MariaDB and PostgreSQL setup (#9026) 2025-11-10 18:51:02 +01:00
CanbiZ
ef9a008d2a Improve service stopping logic in stop_all_services
Refactored stop_all_services to handle empty service lists and avoid pipeline failures. Now checks for found services before attempting to stop and disable them, improving robustness and error handling.
2025-11-10 13:58:04 +01:00
community-scripts-pr-app[bot]
de07b62cff Update CHANGELOG.md (#9024)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-10 12:23:26 +00:00
CanbiZ
8b30ed74df core: update message for no available updates scenario (if pinned) (#9021) 2025-11-10 13:22:59 +01:00
community-scripts-pr-app[bot]
53e6422ee3 Update versions.json (#9023)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-10 13:08:03 +01:00
community-scripts-pr-app[bot]
257e89cc5c Update CHANGELOG.md (#9022)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-10 12:07:09 +00:00
CanbiZ
26090bad32 Migrate Open WebUI to uv-based installation (#9019)
* Migrate Open WebUI to uv-based installation

Added migration logic to detect and upgrade legacy Open WebUI installations to a uv-based setup, including data backup and service recreation. Updated install and update scripts to use uv for installing Open WebUI and adjusted service configuration and cleanup steps accordingly.

* english

---------

Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2025-11-10 13:06:44 +01:00
CanbiZ
787a99fc27 Fix consumption directory retrieval in script 2025-11-10 11:53:55 +01:00
Slaviša Arežina
0b122749b7 Update website (#8971) 2025-11-10 08:39:56 +01:00
community-scripts-pr-app[bot]
48c9a16673 Update CHANGELOG.md (#9016)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-10 00:14:04 +00:00
community-scripts-pr-app[bot]
9bf67982e3 Update versions.json (#9015)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-10 01:13:38 +01:00
community-scripts-pr-app[bot]
008c037cf7 Update CHANGELOG.md (#9011)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-09 17:32:52 +00:00
akileos
0ab91cc4c1 Add wkhtmltopdf to Odoo installation dependencies (#9010)
Required for invoice/ticket generation
2025-11-09 18:32:33 +01:00
community-scripts-pr-app[bot]
dfa05f3845 Update CHANGELOG.md (#9009)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-09 15:55:50 +00:00
chrikodo
a3d42dba45 fix(n8n): Add python3-setuptools dependency for Debian 13 (#9007)
Fixes ModuleNotFoundError: No module named 'distutils'
during sqlite3 compile on Python 3.12+ (Debian 13)
by adding the required setuptools package.
2025-11-09 07:55:29 -08:00
community-scripts-pr-app[bot]
a89b841684 Update CHANGELOG.md (#9008)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-09 15:39:04 +00:00
Sven Schneider
88097dcd19 fix(jotty): Comments removed from variables, as they are interpreted. (#9002)
The following comments have been removed because they cause the comments to become part of the variable's value and therefore cannot be interpreted by the application.
 
SSO_FALLBACK_LOCAL=yes # Allow both SSO and normal login
OIDC_CLIENT_SECRET=your_client_secret  # Enable confidential client mode with client authentication
OIDC_ADMIN_GROUPS=admins # Map provider groups to admin role

https://github.com/fccview/jotty/issues/200#issuecomment-3508394682
2025-11-09 07:38:40 -08:00
community-scripts-pr-app[bot]
1a76fc0095 Update CHANGELOG.md (#9005)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-09 14:43:01 +00:00
Chris
69c2e9ed2c Paperless-ngx: hotfix config path (#9003) 2025-11-09 15:42:40 +01:00
community-scripts-pr-app[bot]
9d876e2d06 Update CHANGELOG.md (#9001)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-09 13:46:27 +00:00
CanbiZ
c0c5fd4532 core: improve log cleaning (#8999)
Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2025-11-09 14:46:09 +01:00
community-scripts-pr-app[bot]
0e7be1dd1e Update versions.json (#9000)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-09 13:05:35 +01:00
community-scripts-pr-app[bot]
6e349dbcef Update CHANGELOG.md (#8997)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-09 07:34:14 +00:00
Chris
9b3879ef41 Paperless-NGX: Move config backup outside of app folder (#8996) 2025-11-08 23:33:51 -08:00
community-scripts-pr-app[bot]
e21ea05ddc Update CHANGELOG.md (#8994)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-09 00:15:19 +00:00
community-scripts-pr-app[bot]
40aeab4e38 Update versions.json (#8993)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-09 01:14:57 +01:00
community-scripts-pr-app[bot]
7f91bff501 Update CHANGELOG.md (#8992)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-08 20:55:33 +00:00
CanbiZ
540194e29a paperless: refactor - remove backup after update and enable clean install (#8988) 2025-11-08 21:55:13 +01:00
CanbiZ
ac7db35a59 fix unbound $6 in deb822 2025-11-08 20:48:54 +01:00
community-scripts-pr-app[bot]
5a71b1389f Update CHANGELOG.md (#8989)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-08 19:12:09 +00:00
CanbiZ
e8846642ef Refactor setup_deb822_repo for optional architectures (#8983)
* Refactor setup_deb822_repo for optional architectures

Refactor setup_deb822_repo function to make architectures optional and improve GPG key download logic.

* Refactor setup_deb822_repo for clarity and efficiency

Refactor setup_deb822_repo function to improve parameter handling and error messages.
2025-11-08 20:11:45 +01:00
community-scripts-pr-app[bot]
8cb1675f89 Update CHANGELOG.md (#8985)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-08 17:26:43 +00:00
Slaviša Arežina
a4ccf7d1b0 Technitium DNS: Fix update (#8980)
* Fix update

* Update technitiumdns-install.sh
2025-11-08 18:26:19 +01:00
community-scripts-pr-app[bot]
db29b241a9 Update CHANGELOG.md (#8982)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-08 15:56:35 +00:00
Chris
528575f737 MediaManager: add LOG_FILE to start.sh script; fix BASE_PATH and PUBLIC_API_URL (#8981) 2025-11-08 16:56:08 +01:00
community-scripts-pr-app[bot]
ac05febbbd Update versions.json (#8979)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-08 13:05:24 +01:00
community-scripts-pr-app[bot]
bd8f8e6a0d Update CHANGELOG.md (#8974)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-08 11:15:14 +00:00
Slaviša Arežina
0fb4e4ad8c Fix update (#8972) 2025-11-08 03:14:48 -08:00
community-scripts-pr-app[bot]
5d381910a3 Update CHANGELOG.md (#8973)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-08 10:40:55 +00:00
Slaviša Arežina
9f0720dc91 Fix (#8969) 2025-11-08 02:40:27 -08:00
community-scripts-pr-app[bot]
85456ff3f3 Update CHANGELOG.md (#8966)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-08 05:57:49 +00:00
Lulo Dev
822ea4b267 Set TZ=Etc/UTC in Ghostfolio installation script when configuring environment variables (#8961) 2025-11-07 21:57:23 -08:00
community-scripts-pr-app[bot]
cae6f1a3d5 Update CHANGELOG.md (#8963)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-08 00:12:42 +00:00
community-scripts-pr-app[bot]
3c5277b423 Update versions.json (#8962)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-08 01:12:19 +01:00
community-scripts-pr-app[bot]
3f04a6df3b Update CHANGELOG.md (#8953)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-07 13:59:59 +00:00
Slaviša Arežina
1ba79a3d8d Pangolin: Add Traefik proxy (#8952)
* Add Traefik

* Update

* Update
2025-11-07 14:59:34 +01:00
community-scripts-pr-app[bot]
baa4344663 Update versions.json (#8950)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-07 13:06:11 +01:00
community-scripts-pr-app[bot]
82b9cac71a Update CHANGELOG.md (#8947)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-07 11:21:48 +00:00
CanbiZ
9c7d09d368 Update script URLs to ProxmoxVE repository (#8946)
Corrected references from 'ProxmoxVED' to 'ProxmoxVE' in sourced URLs across livebook.sh, glances.sh, and pve-privilege-converter.sh to ensure scripts use the correct repository.
2025-11-07 12:21:23 +01:00
community-scripts-pr-app[bot]
a4c8a315cc Update CHANGELOG.md (#8944)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-07 10:49:39 +00:00
CanbiZ
faeedc729e tools.func: fix amd64 arm64 missmatch (#8943) 2025-11-07 11:49:16 +01:00
community-scripts-pr-app[bot]
dfcc26e18d Update CHANGELOG.md (#8940)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-07 08:40:32 +00:00
push-app-to-main[bot]
ea756dc87e infisical (#8926)
* 'Add new script'

* Update infisical.sh

* Update Infisical installation script with dynamic keys

* Remove cleanup commands from install script

Removed cleanup commands from the Infisical installation script.

* Refactor Infisical repository setup process

* Update date_created to 2025-11-07

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-11-07 09:40:08 +01:00
community-scripts-pr-app[bot]
96fb53514d Update CHANGELOG.md (#8939)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-07 08:37:13 +00:00
CanbiZ
aeaefe2ec0 ghostfolio: refactor CoinGecko key prompts in installer (#8935)
Updated CoinGecko API configuration messages for clarity.
2025-11-07 09:36:51 +01:00
community-scripts-pr-app[bot]
0ea12a3485 Update CHANGELOG.md (#8938)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-07 08:36:08 +00:00
Tobias
f957cb9d21 flaresolverr: pin release to 3.4.3 (#8937)
* fix: flaresolverr: pin release to 3.4.3

* fix: flaresolverr: pin release to 3.4.3

* Specify version for FlareSolverr release check

---------

Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-11-07 09:35:42 +01:00
community-scripts-pr-app[bot]
ce33e59bf7 Update CHANGELOG.md (#8930)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-07 00:14:05 +00:00
community-scripts-pr-app[bot]
af432445e1 Update versions.json (#8929)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-07 01:13:43 +01:00
community-scripts-pr-app[bot]
a68cfab83f Update CHANGELOG.md (#8923)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-06 19:42:57 +00:00
Slaviša Arežina
d1ca42a403 Refactor: Graylog (#8912)
* Refactor

* Update graylog.sh

* Update graylog-install.sh
2025-11-06 20:42:35 +01:00
community-scripts-pr-app[bot]
2909a570b3 Update CHANGELOG.md (#8921)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-06 17:52:29 +00:00
Slaviša Arežina
a545cad897 Remove duplicate server_path_prefix configuration (#8919) 2025-11-06 18:52:02 +01:00
community-scripts-pr-app[bot]
b7bc5831b4 Update CHANGELOG.md (#8920)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-06 17:51:09 +00:00
Slaviša Arežina
d4d175d689 Change directory to /opt/grist before build steps (#8913) 2025-11-06 18:50:46 +01:00
CanbiZ
b16501652c Create temp file for SonarQube download
Added temporary file creation for SonarQube installation.
2025-11-06 15:54:37 +01:00
community-scripts-pr-app[bot]
003d6327de Update CHANGELOG.md (#8909)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-06 13:29:53 +00:00
Chris
602fbaf79e Jotty hotfix: SSO_FALLBACK_LOCAL value (#8907) 2025-11-06 14:29:26 +01:00
community-scripts-pr-app[bot]
0458d07744 Update versions.json (#8905)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-06 13:06:16 +01:00
community-scripts-pr-app[bot]
af3feb69bf Update CHANGELOG.md (#8904)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-06 10:47:52 +00:00
CanbiZ
150f0ee456 npm: add Debian version check to update script (#8901) 2025-11-06 11:47:25 +01:00
community-scripts-pr-app[bot]
b5cf70230f Update CHANGELOG.md (#8902)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-06 10:27:55 +00:00
CanbiZ
67d8bc2828 Refactor MongoDB install script to use setup_mongodb (#8897)
Replaces inline MongoDB installation logic with a call to setup_mongodb, passing the selected version via MONGO_VERSION. Updates messaging to use the new variable and removes redundant code.
2025-11-06 11:27:27 +01:00
CanbiZ
cc16f4bb94 Add explicit suite mapping for Debian and Ubuntu
Introduces explicit mapping of distro codenames to repository suites for Debian and Ubuntu, with fallbacks for newer or unknown releases. This ensures proper repository setup even when upstream does not yet support the latest distributions.
2025-11-06 07:57:30 +01:00
community-scripts-pr-app[bot]
1e679be149 Update CHANGELOG.md (#8894)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-06 00:15:13 +00:00
community-scripts-pr-app[bot]
6add81de6a Update versions.json (#8893)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-06 01:14:53 +01:00
community-scripts-pr-app[bot]
66f81a5894 Update CHANGELOG.md (#8889)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-05 16:36:23 +00:00
Chris
72391a96a8 Immich: Pin version to 2.2.3 (#8861) 2025-11-05 17:36:00 +01:00
community-scripts-pr-app[bot]
890ef7a4a1 Update CHANGELOG.md (#8888)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-05 16:25:38 +00:00
Chris
0f16576ea6 Jotty: increase RAM to 4GB (#8887) 2025-11-05 17:25:15 +01:00
community-scripts-pr-app[bot]
b61756f259 Update CHANGELOG.md (#8884)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-05 14:38:50 +00:00
CanbiZ
3fa9a2add6 Refactor agent service control in zabbix.sh (#8881)
Replaces conditional logic for stopping and starting Zabbix agent services with a variable ($AGENT_SERVICE), simplifying service management.
2025-11-05 15:38:24 +01:00
community-scripts-pr-app[bot]
4eedff17b6 Update CHANGELOG.md (#8883)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-05 14:14:02 +00:00
CanbiZ
cad5b3e059 npm: Increase RAM and HDD, update Certbot notes (#8882) 2025-11-05 15:13:30 +01:00
52 changed files with 1627 additions and 947 deletions

View File

@@ -10,10 +10,118 @@
> [!CAUTION] > [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes. Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-11-11
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- flaresolverr: unpin - use latest version [@CrazyWolf13](https://github.com/CrazyWolf13) ([#9046](https://github.com/community-scripts/ProxmoxVE/pull/9046))
- Part-DB: Increase amount of RAM [@tremor021](https://github.com/tremor021) ([#9039](https://github.com/community-scripts/ProxmoxVE/pull/9039))
### 🧰 Maintenance
- #### 📂 Github
- [docs / gh]: modernize README | Change Version Support in SECURITY.md | Shoutout to selfhst\icons [@MickLesk](https://github.com/MickLesk) ([#9049](https://github.com/community-scripts/ProxmoxVE/pull/9049))
## 2025-11-10
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Plex: extend checking for deb822 source [@Matt17000](https://github.com/Matt17000) ([#9036](https://github.com/community-scripts/ProxmoxVE/pull/9036))
- #### ✨ New Features
- tools.func: add helper functions for MariaDB and PostgreSQL setup [@MickLesk](https://github.com/MickLesk) ([#9026](https://github.com/community-scripts/ProxmoxVE/pull/9026))
- core: update message for no available updates scenario (if pinned) [@MickLesk](https://github.com/MickLesk) ([#9021](https://github.com/community-scripts/ProxmoxVE/pull/9021))
- Migrate Open WebUI to uv-based installation [@MickLesk](https://github.com/MickLesk) ([#9019](https://github.com/community-scripts/ProxmoxVE/pull/9019))
- #### 🔧 Refactor
- Refactor: phpIPAM [@MickLesk](https://github.com/MickLesk) ([#9027](https://github.com/community-scripts/ProxmoxVE/pull/9027))
## 2025-11-09
### 🚀 Updated Scripts
- core: improve log cleaning [@MickLesk](https://github.com/MickLesk) ([#8999](https://github.com/community-scripts/ProxmoxVE/pull/8999))
- #### 🐞 Bug Fixes
- Add wkhtmltopdf to Odoo installation dependencies [@akileos](https://github.com/akileos) ([#9010](https://github.com/community-scripts/ProxmoxVE/pull/9010))
- fix(jotty): Comments removed from variables, as they are interpreted. [@schneider-de-com](https://github.com/schneider-de-com) ([#9002](https://github.com/community-scripts/ProxmoxVE/pull/9002))
- fix(n8n): Add python3-setuptools dependency for Debian 13 [@chrikodo](https://github.com/chrikodo) ([#9007](https://github.com/community-scripts/ProxmoxVE/pull/9007))
- Paperless-ngx: hotfix config path [@vhsdream](https://github.com/vhsdream) ([#9003](https://github.com/community-scripts/ProxmoxVE/pull/9003))
- Paperless-NGX: Move config backup outside of app folder [@vhsdream](https://github.com/vhsdream) ([#8996](https://github.com/community-scripts/ProxmoxVE/pull/8996))
## 2025-11-08
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Technitium DNS: Fix update [@tremor021](https://github.com/tremor021) ([#8980](https://github.com/community-scripts/ProxmoxVE/pull/8980))
- MediaManager: add LOG_FILE to start.sh script; fix BASE_PATH and PUBLIC_API_URL [@vhsdream](https://github.com/vhsdream) ([#8981](https://github.com/community-scripts/ProxmoxVE/pull/8981))
- Firefly: Fix missing command in update script [@tremor021](https://github.com/tremor021) ([#8972](https://github.com/community-scripts/ProxmoxVE/pull/8972))
- MongoDB: Remove unused message [@tremor021](https://github.com/tremor021) ([#8969](https://github.com/community-scripts/ProxmoxVE/pull/8969))
- Set TZ=Etc/UTC in Ghostfolio installation script [@LuloDev](https://github.com/LuloDev) ([#8961](https://github.com/community-scripts/ProxmoxVE/pull/8961))
- #### 🔧 Refactor
- paperless: refactor - remove backup after update and enable clean install [@MickLesk](https://github.com/MickLesk) ([#8988](https://github.com/community-scripts/ProxmoxVE/pull/8988))
- Refactor setup_deb822_repo for optional architectures [@MickLesk](https://github.com/MickLesk) ([#8983](https://github.com/community-scripts/ProxmoxVE/pull/8983))
## 2025-11-07
### 🆕 New Scripts
- infisical ([#8926](https://github.com/community-scripts/ProxmoxVE/pull/8926))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Update script URLs to ProxmoxVE repository [@MickLesk](https://github.com/MickLesk) ([#8946](https://github.com/community-scripts/ProxmoxVE/pull/8946))
- tools.func: fix amd64 arm64 mismatch [@MickLesk](https://github.com/MickLesk) ([#8943](https://github.com/community-scripts/ProxmoxVE/pull/8943))
- ghostfolio: refactor CoinGecko key prompts in installer [@MickLesk](https://github.com/MickLesk) ([#8935](https://github.com/community-scripts/ProxmoxVE/pull/8935))
- flaresolverr: pin release to 3.4.3 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8937](https://github.com/community-scripts/ProxmoxVE/pull/8937))
- #### ✨ New Features
- Pangolin: Add Traefik proxy [@tremor021](https://github.com/tremor021) ([#8952](https://github.com/community-scripts/ProxmoxVE/pull/8952))
## 2025-11-06
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- OpenProject: Remove duplicate server_path_prefix configuration [@tremor021](https://github.com/tremor021) ([#8919](https://github.com/community-scripts/ProxmoxVE/pull/8919))
- Grist: Fix change directory to /opt/grist before build steps [@tremor021](https://github.com/tremor021) ([#8913](https://github.com/community-scripts/ProxmoxVE/pull/8913))
- Jotty hotfix: SSO_FALLBACK_LOCAL value [@vhsdream](https://github.com/vhsdream) ([#8907](https://github.com/community-scripts/ProxmoxVE/pull/8907))
- npm: add Debian version check to update script [@MickLesk](https://github.com/MickLesk) ([#8901](https://github.com/community-scripts/ProxmoxVE/pull/8901))
- #### ✨ New Features
- MongoDB: install script now use setup_mongodb [@MickLesk](https://github.com/MickLesk) ([#8897](https://github.com/community-scripts/ProxmoxVE/pull/8897))
- #### 🔧 Refactor
- Refactor: Graylog [@tremor021](https://github.com/tremor021) ([#8912](https://github.com/community-scripts/ProxmoxVE/pull/8912))
## 2025-11-05 ## 2025-11-05
### 🚀 Updated Scripts ### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Immich: Pin version to 2.2.3 [@vhsdream](https://github.com/vhsdream) ([#8861](https://github.com/community-scripts/ProxmoxVE/pull/8861))
- Jotty: increase RAM to 4GB [@vhsdream](https://github.com/vhsdream) ([#8887](https://github.com/community-scripts/ProxmoxVE/pull/8887))
- Zabbix: fix agent service recognition in update [@MickLesk](https://github.com/MickLesk) ([#8881](https://github.com/community-scripts/ProxmoxVE/pull/8881))
- #### 💥 Breaking Changes - #### 💥 Breaking Changes
- fix: npm: refactor for v2.13.x [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8870](https://github.com/community-scripts/ProxmoxVE/pull/8870)) - fix: npm: refactor for v2.13.x [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8870](https://github.com/community-scripts/ProxmoxVE/pull/8870))
@@ -27,6 +135,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
- #### 📝 Script Information - #### 📝 Script Information
- npm: Increase RAM and HDD, update Certbot notes [@MickLesk](https://github.com/MickLesk) ([#8882](https://github.com/community-scripts/ProxmoxVE/pull/8882))
- Update config_path in donetick.json [@fyxtro](https://github.com/fyxtro) ([#8872](https://github.com/community-scripts/ProxmoxVE/pull/8872)) - Update config_path in donetick.json [@fyxtro](https://github.com/fyxtro) ([#8872](https://github.com/community-scripts/ProxmoxVE/pull/8872))
## 2025-11-04 ## 2025-11-04

278
README.md
View File

@@ -1,114 +1,266 @@
<div align="center"> <div align="center">
<p align="center"> <img src="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo-81x112.png" height="120px" alt="Proxmox VE Helper-Scripts Logo" />
<a href="#">
<img src="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo-81x112.png" height="100px" />
</a>
</p>
</div>
<div style="border: 2px solid #d1d5db; padding: 20px; border-radius: 8px; background-color: #f9fafb;"> <h1>Proxmox VE Helper-Scripts</h1>
<h2 align="center">Proxmox VE Helper-Scripts</h2> <p><em>A Community Legacy in Memory of @tteck</em></p>
<p align="center">A Community Legacy in Memory of @tteck</p>
<p align="center"> <p>
<a href="https://helper-scripts.com"> <a href="https://helper-scripts.com">
<img src="https://img.shields.io/badge/Website-4c9b3f?style=for-the-badge&logo=github&logoColor=white" alt="Website" /> <img src="https://img.shields.io/badge/🌐_Website-Visit-4c9b3f?style=for-the-badge&labelColor=2d3748" alt="Website" />
</a> </a>
<a href="https://discord.gg/3AnUqsXnmK"> <a href="https://discord.gg/3AnUqsXnmK">
<img src="https://img.shields.io/badge/Discord-7289da?style=for-the-badge&logo=discord&logoColor=white" alt="Discord" /> <img src="https://img.shields.io/badge/💬_Discord-Join-7289da?style=for-the-badge&labelColor=2d3748" alt="Discord" />
</a> </a>
<a href="https://ko-fi.com/community_scripts"> <a href="https://ko-fi.com/community_scripts">
<img src="https://img.shields.io/badge/Support-FF5F5F?style=for-the-badge&logo=ko-fi&logoColor=white" alt="Donate" /> <img src="https://img.shields.io/badge/_Support-Donate-FF5F5F?style=for-the-badge&labelColor=2d3748" alt="Donate" />
</a>
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/CONTRIBUTING.md">
<img src="https://img.shields.io/badge/Contribute-ff4785?style=for-the-badge&logo=git&logoColor=white" alt="Contribute" />
</a>
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/USER_SUBMITTED_GUIDES.md">
<img src="https://img.shields.io/badge/Guides-0077b5?style=for-the-badge&logo=read-the-docs&logoColor=white" alt="Guides" />
</a>
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/CHANGELOG.md">
<img src="https://img.shields.io/badge/Changelog-6c5ce7?style=for-the-badge&logo=git&logoColor=white" alt="Changelog" />
</a> </a>
</p> </p>
<p>
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/CONTRIBUTING.md">
<img src="https://img.shields.io/badge/🤝_Contribute-Guidelines-ff4785?style=for-the-badge&labelColor=2d3748" alt="Contribute" />
</a>
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/USER_SUBMITTED_GUIDES.md">
<img src="https://img.shields.io/badge/📚_Guides-Read-0077b5?style=for-the-badge&labelColor=2d3748" alt="Guides" />
</a>
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/CHANGELOG.md">
<img src="https://img.shields.io/badge/📋_Changelog-View-6c5ce7?style=for-the-badge&labelColor=2d3748" alt="Changelog" />
</a>
</p>
<br />
> **Simplify your Proxmox VE setup with community-driven automation scripts**
> Originally created by tteck, now maintained and expanded by the community
</div>
<br />
<div align="center">
<sub>🙌 <strong>Shoutout to</strong></sub>
<br />
<br />
<a href="https://selfh.st/">
<img src="https://img.shields.io/badge/selfh.st-Icons_for_Self--Hosted-2563eb?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6IiBmaWxsPSJ3aGl0ZSIvPjwvc3ZnPg==&labelColor=1e3a8a" alt="selfh.st Icons" />
</a>
<br />
<sub><a href="https://github.com/selfhst/icons">View on GitHub</a> • Consistent, beautiful icons for 5000+ self-hosted apps</sub>
</div> </div>
--- ---
## 🚀 Project Overview ## 🎯 Key Features
**Proxmox VE Helper-Scripts** is a collection of tools to simplify the setup and management of Proxmox Virtual Environment (VE). Originally created by [tteck](https://github.com/tteck), these scripts are now continued by the community. Our goal is to preserve and expand upon tteck's work, providing an ongoing resource for Proxmox users worldwide. <div align="center">
<table>
<tr>
<td align="center" width="25%">
<h3>⚡ Quick Setup</h3>
<p>One-command installations for popular services and containers</p>
</td>
<td align="center" width="25%">
<h3>⚙️ Flexible Config</h3>
<p>Simple mode for beginners, advanced options for power users</p>
</td>
<td align="center" width="25%">
<h3>🔄 Auto Updates</h3>
<p>Keep your installations current with built-in update mechanisms</p>
</td>
<td align="center" width="25%">
<h3>🛠️ Easy Management</h3>
<p>Post-install scripts for configuration and troubleshooting</p>
</td>
</tr>
<tr>
<td align="center" width="25%">
<h3>👥 Community Driven</h3>
<p>Actively maintained with contributions from users worldwide</p>
</td>
<td align="center" width="25%">
<h3>📖 Well Documented</h3>
<p>Comprehensive guides and community support</p>
</td>
<td align="center" width="25%">
<h3>🔒 Secure</h3>
<p>Regular security updates and best practices</p>
</td>
<td align="center" width="25%">
<h3>⚡ Performance</h3>
<p>Optimized configurations for best performance</p>
</td>
</tr>
</table>
</div>
--- ---
## 📦 Features ## 📋 Requirements
- **Interactive Setup**: Choose between simple and advanced options for configuring VMs and LXC containers. <div align="center">
- **Customizable Configurations**: Advanced setup for fine-tuning your environment.
- **Seamless Integration**: Works seamlessly with Proxmox VE for a smooth experience.
- **Community-driven**: Actively maintained and improved by the Proxmox community.
--- <table>
## ✅ Requirements <tr>
<td align="center" width="33%">
<h3>🖥️ Proxmox VE</h3>
<p>Version 8.4.x or 9.0.x</p>
</td>
<td align="center" width="33%">
<h3>🐧 Operating System</h3>
<p>Debian-based with Proxmox Tools</p>
</td>
<td align="center" width="33%">
<h3>🌐 Network</h3>
<p>Internet connection required</p>
</td>
</tr>
</table>
Ensure your system meets the following prerequisites: </div>
- **Proxmox VE version**: 8.x or higher
- **Linux**: Compatible with most distributions
- **Dependencies**: bash and curl should be installed.
--- ---
## 🚀 Installation ## 📥 Getting Started
To install the Proxmox Helper Scripts, follow these steps: Choose your preferred installation method:
1. Visit the [Website](https://helper-scripts.com/). ### Method 1: One-Click Web Installer
2. Search for the desired script, e.g., **"Home Assistant OS VM"**.
3. Copy the provided **Bash command** from the **"How To Install"** section. The fastest way to get started:
4. Open the Proxmox shell on your **main node** and paste the command.
5. Press enter to start the installation! 🚀 1. Visit **[helper-scripts.com](https://helper-scripts.com/)** 🌐
2. Search for your desired script (e.g., "Home Assistant", "Docker")
3. Copy the bash command displayed on the script page
4. Open your **Proxmox Shell** and paste the command
5. Press Enter and follow the interactive prompts
### Method 2: PVEScripts-Local
Install a convenient script manager directly in your Proxmox UI:
```bash
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/pve-scripts-local.sh)"
```
This adds a menu to your Proxmox interface for easy script access without visiting the website.
📖 **Learn more:** [ProxmoxVE-Local Repository](https://github.com/community-scripts/ProxmoxVE-Local)
--- ---
## ❤️ Community and Contributions ## 💬 Join the Community
We appreciate any contributions to the project—whether it's bug reports, feature requests, documentation improvements, or spreading the word. Your involvement helps keep the project alive and sustainable. <div align="center">
## 💖 Donate to Support the Project <table>
- **Ko-Fi for Community Edition**: [Donate to support this project](https://ko-fi.com/community_scripts) Donations go towards maintaining the project, testing infrastructure, and charity (cancer research, hospice care). 30% of the funds will be donated to charity. <tr>
<td align="center" width="33%">
<h3>💬 Discord</h3>
<p>Real-time chat, support, and discussions</p>
<a href="https://discord.gg/3AnUqsXnmK">
<img src="https://img.shields.io/badge/Join-7289da?style=for-the-badge&logo=discord&logoColor=white" alt="Discord" />
</a>
</td>
<td align="center" width="33%">
<h3>💭 Discussions</h3>
<p>Feature requests, Q&A, and ideas</p>
<a href="https://github.com/community-scripts/ProxmoxVE/discussions">
<img src="https://img.shields.io/badge/Discuss-238636?style=for-the-badge&logo=github&logoColor=white" alt="Discussions" />
</a>
</td>
<td align="center" width="33%">
<h3>🐛 Issues</h3>
<p>Bug reports and issue tracking</p>
<a href="https://github.com/community-scripts/ProxmoxVE/issues">
<img src="https://img.shields.io/badge/Report-d73a4a?style=for-the-badge&logo=github&logoColor=white" alt="Issues" />
</a>
</td>
</tr>
</table>
</div>
--- ---
## 💬 Get Help ## 🛠️ Contribute
Join our community for support: <div align="center">
- **Discord**: Join our [Proxmox Helper Scripts Discord server](https://discord.gg/3AnUqsXnmK) for real-time support. <table>
- **GitHub Discussions**: [Ask questions or report issues](https://github.com/community-scripts/ProxmoxVE/discussions). <tr>
<td align="center" width="25%">
<h3>💻 Code</h3>
<p>Add new scripts or improve existing ones</p>
</td>
<td align="center" width="25%">
<h3>📝 Documentation</h3>
<p>Write guides, improve READMEs, translate content</p>
</td>
<td align="center" width="25%">
<h3>🧪 Testing</h3>
<p>Test scripts and report compatibility issues</p>
</td>
<td align="center" width="25%">
<h3>💡 Ideas</h3>
<p>Suggest features or workflow improvements</p>
</td>
</tr>
</table>
## 🤝 Report a Bug or Feature Request </div>
If you encounter any issues or have suggestions for improvement, file a new issue on our [GitHub issues page](https://github.com/community-scripts/ProxmoxVE/issues). You can also submit pull requests with solutions or enhancements! <div align="center">
<br />
👉 Check our **[Contributing Guidelines](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/CONTRIBUTING.md)** to get started
</div>
--- ---
## ⭐ Star History ## ❤️ Support the Project
<a href="https://star-history.com/#community-scripts/ProxmoxVE&Date"> This project is maintained by volunteers in memory of tteck. Your support helps us maintain infrastructure, improve documentation, and give back to important causes.
**🎗️ 30% of all donations go directly to cancer research and hospice care**
<div align="center">
<a href="https://ko-fi.com/community_scripts">
<img src="https://img.shields.io/badge/☕_Buy_us_a_coffee-Support_on_Ko--fi-FF5F5F?style=for-the-badge&labelColor=2d3748" alt="Support on Ko-fi" />
</a>
<br />
<sub>Every contribution helps keep this project alive and supports meaningful causes</sub>
</div>
---
## 📈 Project Growth
<div align="center">
<a href="https://star-history.com/#community-scripts/ProxmoxVE&Date">
<picture> <picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date&theme=dark" /> <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" /> <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" /> <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" />
</picture> </picture>
</a> </a>
</div>
---
## 📜 License ## 📜 License
This project is licensed under the [MIT License](LICENSE). This project is licensed under the **[MIT License](LICENSE)** - feel free to use, modify, and distribute.
</br>
</br>
<p align="center">
<i style="font-size: smaller;"><b>Proxmox</b>® is a registered trademark of <a href="https://www.proxmox.com/en/about/company">Proxmox Server Solutions GmbH</a>.</i>
</p>
---
<div align="center">
<sub>Made with ❤️ by the Proxmox community in memory of tteck</sub>
<br />
<sub><i>Proxmox® is a registered trademark of <a href="https://www.proxmox.com/en/about/company">Proxmox Server Solutions GmbH</a></i></sub>
</div>

View File

@@ -8,13 +8,15 @@ This project currently supports the following versions of Proxmox VE (PVE):
| ------- | ------------------ | | ------- | ------------------ |
| 9.0.x | :white_check_mark: | | 9.0.x | :white_check_mark: |
| 8.4.x | :white_check_mark: | | 8.4.x | :white_check_mark: |
| 8.3.x | :white_check_mark: | | 8.3.x | Limited support* ❕ |
| 8.2.x | :white_check_mark: | | 8.2.x | Limited support* ❕ |
| 8.1.x | :white_check_mark: | | 8.1.x | Limited support* ❕ |
| 8.0.x | Limited support* ❕ | | 8.0.x | Limited support* ❕ |
| < 8.0 | :x: | | < 8.0 | :x: |
*Version 8.0.x has limited support. Security updates may not be provided for all issues affecting this version. *Version 8.0.x - 8.3.x has limited support. Security updates may not be provided for all issues affecting this version.
*Debian 13 Containers may fail to install. You can write var_version=12 before the bash call.
--- ---

View File

@@ -1,77 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://dashy.to/
APP="Dashy"
var_tags="${var_tags:-dashboard}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-6}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/dashy/public/ ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "dashy" "Lissy93/dashy"; then
msg_info "Stopping Service"
systemctl stop dashy
msg_ok "Stopped Service"
msg_info "Backing up conf.yml"
cd ~
if [[ -f /opt/dashy/public/conf.yml ]]; then
cp -R /opt/dashy/public/conf.yml conf.yml
else
cp -R /opt/dashy/user-data/conf.yml conf.yml
fi
msg_ok "Backed up conf.yml"
rm -rf /opt/dashy
fetch_and_deploy_gh_release "dashy" "Lissy93/dashy"
msg_info "Updating ${APP}"
cd /opt/dashy
npm install
npm run build
msg_ok "Updated ${APP}"
msg_info "Restoring conf.yml"
cd ~
cp -R conf.yml /opt/dashy/user-data
msg_ok "Restored conf.yml"
msg_info "Cleaning"
rm -rf conf.yml /opt/dashy/public/conf.yml
msg_ok "Cleaned"
msg_info "Starting Dashy"
systemctl start dashy
msg_ok "Started Dashy"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4000${CL}"

View File

@@ -51,7 +51,7 @@ function update_script() {
find /opt/firefly/storage -type f -exec chmod 664 {} \; find /opt/firefly/storage -type f -exec chmod 664 {} \;
mkdir -p /opt/firefly/storage/framework/{cache/data,sessions,views} mkdir -p /opt/firefly/storage/framework/{cache/data,sessions,views}
$STD sudo -u www-data php /opt/firefly/artisan cache:clear $STD sudo -u www-data php /opt/firefly/artisan cache:clear
cd /opt/firefly
$STD php artisan migrate --seed --force $STD php artisan migrate --seed --force
$STD php artisan cache:clear $STD php artisan cache:clear
$STD php artisan view:clear $STD php artisan view:clear

View File

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-8192}" var_ram="${var_ram:-8192}"
var_disk="${var_disk:-30}" var_disk="${var_disk:-30}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@@ -28,15 +28,32 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop graylog-datanode systemctl stop graylog-datanode
systemctl stop graylog-server systemctl stop graylog-server
msg_info "Stopped Service" msg_info "Stopped Service"
msg_info "Updating $APP" CURRENT_VERSION=$(apt list --installed 2>/dev/null | grep graylog-server | grep -oP '\d+\.\d+\.\d+')
$STD apt-get update
$STD apt-get upgrade -y if dpkg --compare-versions "$CURRENT_VERSION" lt "6.3"; then
msg_ok "Updated $APP" MONGO_VERSION="8.0" setup_mongodb
msg_info "Updating Graylog"
$STD apt update
$STD apt upgrade -y
curl -fsSL "https://packages.graylog2.org/repo/packages/graylog-7.0-repository_latest.deb" -o "graylog-7.0-repository_latest.deb"
$STD dpkg -i graylog-7.0-repository_latest.deb
$STD apt update
$STD apt install -y graylog-server graylog-datanode
rm -f graylog-7.0-repository_latest.deb
msg_ok "Updated Graylog"
elif dpkg --compare-versions "$CURRENT_VERSION" ge "7.0"; then
msg_info "Updating Graylog"
$STD apt update
$STD apt upgrade -y
msg_ok "Updated Graylog"
fi
msg_info "Starting Service" msg_info "Starting Service"
systemctl start graylog-datanode systemctl start graylog-datanode

View File

@@ -47,6 +47,7 @@ function update_script() {
cp -r /opt/grist_bak/docs/* /opt/grist/docs/ cp -r /opt/grist_bak/docs/* /opt/grist/docs/
cp /opt/grist_bak/grist-sessions.db /opt/grist/grist-sessions.db cp /opt/grist_bak/grist-sessions.db /opt/grist/grist-sessions.db
cp /opt/grist_bak/landing.db /opt/grist/landing.db cp /opt/grist_bak/landing.db /opt/grist/landing.db
cd /opt/grist
$STD yarn install $STD yarn install
$STD yarn run build:prod $STD yarn run build:prod
$STD yarn run install:python $STD yarn run install:python

View File

@@ -1,6 +0,0 @@
____ __
/ __ \____ ______/ /_ __ __
/ / / / __ `/ ___/ __ \/ / / /
/ /_/ / /_/ (__ ) / / / /_/ /
/_____/\__,_/____/_/ /_/\__, /
/____/

6
ct/headers/infisical Normal file
View File

@@ -0,0 +1,6 @@
____ _____ _ __
/ _/___ / __(_)____(_)________ _/ /
/ // __ \/ /_/ / ___/ / ___/ __ `/ /
_/ // / / / __/ (__ ) / /__/ /_/ / /
/___/_/ /_/_/ /_/____/_/\___/\__,_/_/

View File

@@ -93,7 +93,7 @@ EOF
msg_ok "Image-processing libraries up to date" msg_ok "Image-processing libraries up to date"
fi fi
RELEASE="2.2.2" RELEASE="2.2.3"
if check_for_gh_release "immich" "immich-app/immich" "${RELEASE}"; then if check_for_gh_release "immich" "immich-app/immich" "${RELEASE}"; then
msg_info "Stopping Services" msg_info "Stopping Services"
systemctl stop immich-web systemctl stop immich-web

60
ct/infisical.sh Normal file
View File

@@ -0,0 +1,60 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://infisical.com/
APP="Infisical"
var_tags="${var_tags:-auth}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-6}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /etc/infisical ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Stopping service"
$STD infisical-ctl stop
msg_ok "Service stopped"
msg_info "Creating backup"
DB_PASS=$(grep -Po '(?<=^Database Password:\s).*' ~/infisical.creds | head -n1)
PGPASSWORD=$DB_PASS pg_dump -U infisical -h localhost -d infisical_db > /opt/infisical_backup.sql
msg_ok "Created backup"
msg_info "Updating Infisical"
$STD apt update
$STD apt install -y infisical-core
$STD infisical-ctl reconfigure
msg_ok "Updated Infisical"
msg_info "Starting service"
infisical-ctl start
msg_ok "Started service"
msg_ok "Updated successfully"
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"

View File

@@ -8,7 +8,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
APP="jotty" APP="jotty"
var_tags="${var_tags:-tasks;notes}" var_tags="${var_tags:-tasks;notes}"
var_cpu="${var_cpu:-2}" var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-3072}" var_ram="${var_ram:-4096}"
var_disk="${var_disk:-6}" var_disk="${var_disk:-6}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-13}" var_version="${var_version:-13}"

View File

@@ -1,5 +1,5 @@
#!/usr/bin/env bash #!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/refs/heads/main/misc/build.func) source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/refs/heads/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG # Copyright (c) 2021-2025 community-scripts ORG
# Author: dkuku # Author: dkuku
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE

View File

@@ -40,19 +40,24 @@ function update_script() {
MM_DIR="/opt/mm" MM_DIR="/opt/mm"
export CONFIG_DIR="${MM_DIR}/config" export CONFIG_DIR="${MM_DIR}/config"
export FRONTEND_FILES_DIR="${MM_DIR}/web/build" export FRONTEND_FILES_DIR="${MM_DIR}/web/build"
export BASE_PATH=""
export PUBLIC_VERSION="" export PUBLIC_VERSION=""
export PUBLIC_API_URL="" export PUBLIC_API_URL=""
export BASE_PATH="/web"
cd /opt/mediamanager/web cd /opt/mediamanager/web
$STD npm ci $STD npm ci --no-fund --no-audit
$STD npm run build $STD npm run build
rm -rf "$FRONTEND_FILES_DIR"/build rm -rf "$FRONTEND_FILES_DIR"/build
cp -r build "$FRONTEND_FILES_DIR" cp -r build "$FRONTEND_FILES_DIR"
export BASE_PATH=""
export VIRTUAL_ENV="/opt/${MM_DIR}/venv" export VIRTUAL_ENV="/opt/${MM_DIR}/venv"
cd /opt/mediamanager cd /opt/mediamanager
rm -rf "$MM_DIR"/{media_manager,alembic*} rm -rf "$MM_DIR"/{media_manager,alembic*}
cp -r {media_manager,alembic*} "$MM_DIR" cp -r {media_manager,alembic*} "$MM_DIR"
$STD /usr/local/bin/uv sync --locked --active -n -p cpython3.13 --managed-python $STD /usr/local/bin/uv sync --locked --active -n -p cpython3.13 --managed-python
if ! grep -q "LOG_FILE" "$MM_DIR"/start.sh; then
sed -i "\|build\"$|a\export LOG_FILE=\"$CONFIG_DIR/media_manager.log\"" "$MM_DIR"/start.sh
fi
msg_ok "Updated $APP" msg_ok "Updated $APP"
msg_info "Starting Service" msg_info "Starting Service"

View File

@@ -28,6 +28,12 @@ function update_script() {
exit exit
fi fi
if [[ $(grep -E '^VERSION_ID=' /etc/os-release) == *"12"* ]]; then
msg_error "Wrong Debian version detected!"
msg_error "Please create a snapshot first. You must upgrade your LXC to Debian Trixie before updating. Visit: https://github.com/community-scripts/ProxmoxVE/discussions/7489"
exit
fi
if command -v node &>/dev/null; then if command -v node &>/dev/null; then
CURRENT_NODE_VERSION=$(node --version | cut -d'v' -f2 | cut -d'.' -f1) CURRENT_NODE_VERSION=$(node --version | cut -d'v' -f2 | cut -d'.' -f1)
if [[ "$CURRENT_NODE_VERSION" != "22" ]]; then if [[ "$CURRENT_NODE_VERSION" != "22" ]]; then

View File

@@ -23,6 +23,62 @@ function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ -d /opt/open-webui ]]; then
msg_warn "Legacy installation detected — migrating to uv based install..."
msg_info "Stopping Service"
systemctl stop open-webui
msg_ok "Stopped Service"
msg_info "Creating Backup"
mkdir -p /opt/open-webui-backup
cp -a /opt/open-webui/backend/data /opt/open-webui-backup/data || true
msg_ok "Created Backup"
msg_info "Removing legacy installation"
rm -rf /opt/open-webui
rm -rf /root/.open-webui || true
msg_ok "Removed legacy installation"
msg_info "Installing uv-based Open-WebUI"
PYTHON_VERSION="3.12" setup_uv
$STD uv tool install --python $PYTHON_VERSION open-webui[all]
msg_ok "Installed uv-based Open-WebUI"
msg_info "Restoring data"
mkdir -p /root/.open-webui
cp -a /opt/open-webui-backup/data/* /root/.open-webui/ || true
rm -rf /opt/open-webui-backup || true
msg_ok "Restored data"
msg_info "Recreating Service"
cat <<EOF >/etc/systemd/system/open-webui.service
[Unit]
Description=Open WebUI Service
After=network.target
[Service]
Type=simple
Environment=DATA_DIR=/root/.open-webui
EnvironmentFile=-/root/.env
ExecStart=/root/.local/bin/open-webui serve
WorkingDirectory=/root
Restart=on-failure
RestartSec=5
User=root
[Install]
WantedBy=multi-user.target
EOF
$STD systemctl daemon-reload
systemctl enable -q --now open-webui
msg_ok "Recreated Service"
msg_ok "Migration completed"
exit 0
fi
if [[ ! -d /root/.open-webui ]]; then if [[ ! -d /root/.open-webui ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
@@ -50,8 +106,11 @@ function update_script() {
fi fi
fi fi
msg_info "Restarting Open WebUI to initiate update" msg_info "Updating Open WebUI via uv"
PYTHON_VERSION="3.12" setup_uv
$STD uv tool install --python 3.12 open-webui[all]
systemctl restart open-webui systemctl restart open-webui
msg_ok "Updated Open WebUI"
msg_ok "Updated successfully!" msg_ok "Updated successfully!"
exit exit
} }

View File

@@ -76,4 +76,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3002${CL}" echo -e "${TAB}${GATEWAY}${BGN}https://<YOUR_PANGOLIN_URL>${CL}"

View File

@@ -35,24 +35,38 @@ function update_script() {
if grep -q "uv run" /etc/systemd/system/paperless-webserver.service; then if grep -q "uv run" /etc/systemd/system/paperless-webserver.service; then
msg_info "Backing up data" msg_info "Backing up data"
mkdir -p /opt/paperless/backup mkdir -p /opt/paperless_backup
cp -r /opt/paperless/data /opt/paperless/backup/ cp -r /opt/paperless/data /opt/paperless_backup/
cp -r /opt/paperless/media /opt/paperless/backup/ cp -r /opt/paperless/media /opt/paperless_backup/
cp -r /opt/paperless/paperless.conf /opt/paperless/backup/ cp -r /opt/paperless/paperless.conf /opt/paperless_backup/
msg_ok "Backup completed" msg_ok "Backup completed"
PYTHON_VERSION="3.13" setup_uv PYTHON_VERSION="3.13" setup_uv
fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
. /etc/os-release
if [ "$VERSION_CODENAME" = "bookworm" ]; then
setup_gs setup_gs
else
$STD apt install -y ghostscript
fi
msg_info "Updating Paperless-ngx" msg_info "Updating Paperless-ngx"
cp -r /opt/paperless/backup/* /opt/paperless/ cp -r /opt/paperless_backup/* /opt/paperless/
CONSUME_DIR="$(sed -n 's/^PAPERLESS_CONSUMPTION_DIR=//p' /opt/paperless/paperless.conf)"
if [[ -z "$CONSUME_DIR" ]]; then
CONSUME_DIR="/opt/paperless/consume"
fi
mkdir -p "$CONSUME_DIR"
cd /opt/paperless cd /opt/paperless
$STD uv sync --all-extras $STD uv sync --all-extras
cd /opt/paperless/src cd /opt/paperless/src
$STD uv run -- python manage.py migrate $STD uv run -- python manage.py migrate
msg_ok "Updated Paperless-ngx" msg_ok "Updated Paperless-ngx"
rm -rf /opt/paperless_backup
else else
msg_warn "You are about to migrate your Paperless-ngx installation to uv!" msg_warn "You are about to migrate your Paperless-ngx installation to uv!"
msg_custom "🔒" "It is strongly recommended to take a Proxmox snapshot first:" msg_custom "🔒" "It is strongly recommended to take a Proxmox snapshot first:"
@@ -96,24 +110,40 @@ function update_script() {
$STD systemctl daemon-reload $STD systemctl daemon-reload
msg_info "Backing up data" msg_info "Backing up data"
mkdir -p /opt/paperless/backup mkdir -p /opt/paperless_backup
cp -r /opt/paperless/data /opt/paperless/backup/ cp -r /opt/paperless/data /opt/paperless_backup/
cp -r /opt/paperless/media /opt/paperless/backup/ cp -r /opt/paperless/media /opt/paperless_backup/
cp -r /opt/paperless/paperless.conf /opt/paperless/backup/ cp -r /opt/paperless/paperless.conf /opt/paperless_backup/
msg_ok "Backup completed" msg_ok "Backup completed"
PYTHON_VERSION="3.13" setup_uv PYTHON_VERSION="3.13" setup_uv
fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
. /etc/os-release
if [ "$VERSION_CODENAME" = "bookworm" ]; then
setup_gs setup_gs
else
msg_info "Installing Ghostscript"
$STD apt install -y ghostscript
msg_ok "Installed Ghostscript"
fi
msg_info "Updating Paperless-ngx" msg_info "Updating Paperless-ngx"
cp -r /opt/paperless/backup/* /opt/paperless/ cp -r /opt/paperless_backup/* /opt/paperless/
CONSUME_DIR="$(sed -n '/^PAPERLESS_CONSUMPTION/s/[^=]=*//p' /opt/paperless/paperless.conf)"
mkdir -p "${CONSUME_DIR:-/opt/paperless/consume}"
cd /opt/paperless cd /opt/paperless
$STD uv sync --all-extras $STD uv sync --all-extras
cd /opt/paperless/src cd /opt/paperless/src
$STD uv run -- python manage.py migrate $STD uv run -- python manage.py migrate
msg_ok "Paperless-ngx migration and update completed" msg_ok "Paperless-ngx migration and update completed"
rm -rf /opt/paperless_backup
if [[ -d /opt/paperless/backup ]]; then
rm -rf /opt/paperless/backup
msg_ok "Removed old backup directory"
fi
fi fi
msg_info "Starting all Paperless-ngx Services" msg_info "Starting all Paperless-ngx Services"

View File

@@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
APP="Part-DB" APP="Part-DB"
var_tags="${var_tags:-inventory;parts}" var_tags="${var_tags:-inventory;parts}"
var_cpu="${var_cpu:-2}" var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-1024}" var_ram="${var_ram:-2048}"
var_disk="${var_disk:-8}" var_disk="${var_disk:-8}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-13}" var_version="${var_version:-13}"

View File

@@ -33,17 +33,22 @@ function update_script() {
systemctl stop apache2 systemctl stop apache2
msg_ok "Stopped Service" msg_ok "Stopped Service"
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_FPM="YES" PHP_MODULE="mysql,gmp,snmp,ldap,apcu" setup_php
msg_info "Installing PHP-PEAR"
$STD apt install -y \
php-pear \
php-dev
msg_ok "Installed PHP-PEAR"
mv /opt/phpipam/ /opt/phpipam-backup mv /opt/phpipam/ /opt/phpipam-backup
fetch_and_deploy_gh_release "phpipam" "phpipam/phpipam" "prebuild" "latest" "/opt/phpipam" "phpipam-v*.zip" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "phpipam" "phpipam/phpipam" "prebuild" "latest" "/opt/phpipam" "phpipam-v*.zip"
cp /opt/phpipam-backup/config.php /opt/phpipam cp /opt/phpipam-backup/config.php /opt/phpipam
rm -r /opt/phpipam-backup
msg_info "Starting Service" msg_info "Starting Service"
systemctl start apache2 systemctl start apache2
msg_ok "Started Service" msg_ok "Started Service"
msg_info "Cleaning up"
rm -r /opt/phpipam-backup
msg_ok "Cleaned"
msg_ok "Updated successfully!" msg_ok "Updated successfully!"
fi fi
exit exit

View File

@@ -23,7 +23,7 @@ function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -f /etc/apt/sources.list.d/plexmediaserver.list ]]; then if [ ! -f /etc/apt/sources.list.d/plexmediaserver.list ]] && [[ ! -f /etc/apt/sources.list.d/plexmediaserver.sources ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi

View File

@@ -39,6 +39,7 @@ function update_script() {
msg_ok "Backup created" msg_ok "Backup created"
msg_info "Installing sonarqube" msg_info "Installing sonarqube"
temp_file=$(mktemp)
RELEASE=$(curl -fsSL https://api.github.com/repos/SonarSource/sonarqube/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') RELEASE=$(curl -fsSL https://api.github.com/repos/SonarSource/sonarqube/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
curl -fsSL "https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-${RELEASE}.zip" -o $temp_file curl -fsSL "https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-${RELEASE}.zip" -o $temp_file
unzip -q "$temp_file" -d /opt unzip -q "$temp_file" -d /opt

View File

@@ -28,6 +28,11 @@ function update_script() {
exit exit
fi fi
if is_package_installed "aspnetcore-runtime-8.0"; then
$STD apt remove -y aspnetcore-runtime-8.0
$STD apt install -y aspnetcore-runtime-9.0
fi
RELEASE=$(curl -fsSL https://technitium.com/dns/ | grep -oP 'Version \K[\d.]+') RELEASE=$(curl -fsSL https://technitium.com/dns/ | grep -oP 'Version \K[\d.]+')
if [[ ! -f ~/.technitium || "${RELEASE}" != "$(cat ~/.technitium)" ]]; then if [[ ! -f ~/.technitium || "${RELEASE}" != "$(cat ~/.technitium)" ]]; then
msg_info "Updating Technitium DNS" msg_info "Updating Technitium DNS"

View File

@@ -42,12 +42,8 @@ function update_script() {
fi fi
msg_info "Stopping Services" msg_info "Stopping Services"
$STD systemctl stop zabbix-server systemctl stop zabbix-server
if systemctl list-unit-files | grep -q zabbix-agent2; then systemctl stop "$AGENT_SERVICE"
$STD systemctl stop zabbix-agent2
else
$STD systemctl stop zabbix-agent
fi
msg_ok "Stopped Services" msg_ok "Stopped Services"
msg_info "Updating Zabbix" msg_info "Updating Zabbix"
@@ -88,12 +84,8 @@ function update_script() {
msg_ok "Updated Zabbix" msg_ok "Updated Zabbix"
msg_info "Starting Services" msg_info "Starting Services"
$STD systemctl start zabbix-server systemctl start zabbix-server
if systemctl list-unit-files | grep -q zabbix-agent2; then systemctl start "$AGENT_SERVICE"
$STD systemctl start zabbix-agent2
else
$STD systemctl start zabbix-agent
fi
systemctl restart apache2 systemctl restart apache2
msg_ok "Started Services" msg_ok "Started Services"

View File

@@ -33,8 +33,12 @@
}, },
"notes": [ "notes": [
{ {
"text": "Set a root password if using autologin. This will be the Cockpit password.`sudo passwd root`", "text": "Set a root password if using autologin. This will be the Cockpit password. To set root password run `sudo passwd root`",
"type": "info" "type": "info"
},
{
"text": "If you plan on using 45Drives extension with NFS, you must setup LXC as privileged. Some features of 45Drives don't work on Debian 13, so Debian 12 must be used.",
"type": "warning"
} }
] ]
} }

View File

@@ -1,35 +0,0 @@
{
"name": "Dashy",
"slug": "dashy",
"categories": [
10
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 4000,
"documentation": "https://dashy.to/docs",
"website": "https://dashy.to/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/dashy.webp",
"config_path": "/opt/dashy/user-data/conf.yml",
"description": "Dashy is a solution that helps you organize your self-hosted services by centralizing access to them through a single interface.",
"install_methods": [
{
"type": "default",
"script": "ct/dashy.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 6,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -23,7 +23,7 @@
"ram": 8192, "ram": 8192,
"hdd": 30, "hdd": 30,
"os": "debian", "os": "debian",
"version": "12" "version": "13"
} }
} }
], ],

View File

@@ -0,0 +1,35 @@
{
"name": "Infisical",
"slug": "infisical",
"categories": [
6
],
"date_created": "2025-11-07",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8080,
"documentation": "https://infisical.com/docs/documentation/getting-started/overview",
"config_path": "/etc/infisical/infisical.rb",
"website": "https://infisical.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/infisical.webp",
"description": "Secrets, certificates, and access management on autopilot. All-in-one platform to securely manage application secrets, certificates, SSH keys, and configurations across your team and infrastructure.",
"install_methods": [
{
"type": "default",
"script": "ct/infisical.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 6,
"os": "Debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -20,7 +20,7 @@
"script": "ct/jotty.sh", "script": "ct/jotty.sh",
"resources": { "resources": {
"cpu": 2, "cpu": 2,
"ram": 3072, "ram": 4096,
"hdd": 6, "hdd": 6,
"os": "debian", "os": "debian",
"version": "13" "version": "13"

View File

@@ -20,8 +20,8 @@
"script": "ct/nginxproxymanager.sh", "script": "ct/nginxproxymanager.sh",
"resources": { "resources": {
"cpu": 2, "cpu": 2,
"ram": 1024, "ram": 2048,
"hdd": 4, "hdd": 8,
"os": "debian", "os": "debian",
"version": "13" "version": "13"
} }
@@ -33,12 +33,8 @@
}, },
"notes": [ "notes": [
{ {
"text": "Since there are hundreds of Certbot instances, it's necessary to install the specific Certbot of your preference. Running `/app/scripts/install-certbot-plugins` within the nginxproxymanager LXC shell will install many additional plugins.", "text": "You can install the specific one certbot you prefer, or you can Running /app/scripts/install-certbot-plugins within the Nginx Proxy Manager (NPM) LXC shell will install many common plugins. Important: This script does not install all Certbot plugins, as some require additional, external system dependencies (like specific packages for certain DNS providers). These external dependencies must be manually installed within the LXC container before you can successfully install and use the corresponding Certbot plugin. Consult the plugin's documentation for required packages.",
"type": "warning" "type": "info"
},
{
"text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
"type": "warning"
} }
] ]
} }

View File

@@ -8,7 +8,7 @@
"type": "ct", "type": "ct",
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 3002, "interface_port": 443,
"documentation": "https://docs.pangolin.net/", "documentation": "https://docs.pangolin.net/",
"config_path": "/opt/pangolin/config/config.yml", "config_path": "/opt/pangolin/config/config.yml",
"website": "https://pangolin.net/", "website": "https://pangolin.net/",

View File

@@ -20,7 +20,7 @@
"script": "ct/part-db.sh", "script": "ct/part-db.sh",
"resources": { "resources": {
"cpu": 2, "cpu": 2,
"ram": 1024, "ram": 2048,
"hdd": 8, "hdd": 8,
"os": "debian", "os": "debian",
"version": "13" "version": "13"

File diff suppressed because it is too large Load Diff

View File

@@ -1,46 +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://dashy.to/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
NODE_VERSION="22" setup_nodejs
fetch_and_deploy_gh_release "dashy" "Lissy93/dashy"
msg_info "Installing Dashy"
cd /opt/dashy
$STD npm install
$STD npm run build
msg_ok "Installed Dashy"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/dashy.service
[Unit]
Description=dashy
[Service]
Type=simple
WorkingDirectory=/opt/dashy
ExecStart=/usr/bin/npm start
[Install]
WantedBy=multi-user.target
EOF
systemctl -q --now enable dashy
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -60,11 +60,10 @@ $STD npm ci
$STD npm run build:production $STD npm run build:production
msg_ok "Built Ghostfolio" msg_ok "Built Ghostfolio"
msg_ok "Optional CoinGecko API Configuration" echo -e ""
echo msg_custom "🪙" "$YW" "CoinGecko API keys are optional but provide better cryptocurrency data."
echo -e "${YW}CoinGecko API keys are optional but provide better cryptocurrency data.${CL}" msg_custom "🪙" "$YW" "You can skip this and add them later by editing /opt/ghostfolio/.env"
echo -e "${YW}You can skip this and add them later by editing /opt/ghostfolio/.env${CL}" echo -e ""
echo
read -rp "${TAB3}CoinGecko Demo API key (press Enter to skip): " COINGECKO_DEMO_KEY read -rp "${TAB3}CoinGecko Demo API key (press Enter to skip): " COINGECKO_DEMO_KEY
read -rp "${TAB3}CoinGecko Pro API key (press Enter to skip): " COINGECKO_PRO_KEY read -rp "${TAB3}CoinGecko Pro API key (press Enter to skip): " COINGECKO_PRO_KEY
@@ -79,6 +78,7 @@ JWT_SECRET_KEY=$JWT_SECRET_KEY
NODE_ENV=production NODE_ENV=production
PORT=3333 PORT=3333
HOST=0.0.0.0 HOST=0.0.0.0
TZ=Etc/UTC
EOF EOF
if [[ -n "${COINGECKO_DEMO_KEY:-}" ]]; then if [[ -n "${COINGECKO_DEMO_KEY:-}" ]]; then

View File

@@ -13,12 +13,12 @@ setting_up_container
network_check network_check
update_os update_os
MONGO_VERSION="7.0" setup_mongodb MONGO_VERSION="8.0" setup_mongodb
msg_info "Setup Graylog Data Node" msg_info "Setup Graylog Data Node"
PASSWORD_SECRET=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c16) PASSWORD_SECRET=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c16)
curl -fsSL "https://packages.graylog2.org/repo/packages/graylog-6.3-repository_latest.deb" -o "graylog-6.3-repository_latest.deb" curl -fsSL "https://packages.graylog2.org/repo/packages/graylog-7.0-repository_latest.deb" -o "graylog-7.0-repository_latest.deb"
$STD dpkg -i graylog-6.3-repository_latest.deb $STD dpkg -i graylog-7.0-repository_latest.deb
$STD apt-get update $STD apt-get update
$STD apt-get install graylog-datanode -y $STD apt-get install graylog-datanode -y
sed -i "s/password_secret =/password_secret = $PASSWORD_SECRET/g" /etc/graylog/datanode/datanode.conf sed -i "s/password_secret =/password_secret = $PASSWORD_SECRET/g" /etc/graylog/datanode/datanode.conf
@@ -42,9 +42,4 @@ msg_ok "Setup ${APPLICATION}"
motd_ssh motd_ssh
customize customize
cleanup_lxc
msg_info "Cleaning up"
rm -f graylog-*-repository_latest.deb
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -288,7 +288,7 @@ GEO_DIR="${INSTALL_DIR}/geodata"
mkdir -p "$INSTALL_DIR" mkdir -p "$INSTALL_DIR"
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache} mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache}
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v2.2.2" "$SRC_DIR" fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v2.2.3" "$SRC_DIR"
msg_info "Installing ${APPLICATION} (patience)" msg_info "Installing ${APPLICATION} (patience)"

View File

@@ -0,0 +1,68 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://infisical.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 install -y \
apt-transport-https \
ca-certificates \
redis
msg_ok "Installed Dependencies"
PG_VERSION="17" setup_postgresql
msg_info "Setting up Infisical Repository"
setup_deb822_repo \
"infisical" \
"https://artifacts-infisical-core.infisical.com/infisical.gpg" \
"https://artifacts-infisical-core.infisical.com/deb" \
"stable"
msg_ok "Setup Infisical repository"
msg_info "Configuring PostgreSQL"
DB_NAME="infisical_db"
DB_USER="infisical"
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';"
{
echo "Infiscal Credentials"
echo "Database Name: $DB_NAME"
echo "Database User: $DB_USER"
echo "Database Password: $DB_PASS"
} >>~/infisical.creds
msg_ok "Configured PostgreSQL"
msg_info "Setting up Infisical"
AUTH_SECRET="$(openssl rand -base64 32 | tr -d '\n')"
ENC_KEY="$(openssl rand -hex 16 | tr -d '\n')"
IP_ADDR=$(hostname -I | awk '{print $1}')
$STD apt install -y infisical-core
mkdir -p /etc/infisical
cat <<EOF >/etc/infisical/infisical.rb
infisical_core['ENCRYPTION_KEY'] = '$ENC_KEY'
infisical_core['AUTH_SECRET'] = '$AUTH_SECRET'
infisical_core['HOST'] = '$IP_ADDR'
infisical_core['DB_CONNECTION_URI'] = 'postgres://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}'
infisical_core['REDIS_URL'] = 'redis://localhost:6379'
EOF
$STD infisical-ctl reconfigure
msg_ok "Setup Infisical"
motd_ssh
customize
cleanup_lxc

View File

@@ -40,9 +40,9 @@ NODE_ENV=production
# OIDC_ISSUER=<your-oidc-issuer-url> # OIDC_ISSUER=<your-oidc-issuer-url>
# OIDC_CLIENT_ID=<oidc-client-id> # OIDC_CLIENT_ID=<oidc-client-id>
# APP_URL=<https://app.domain.tld> # APP_URL=<https://app.domain.tld>
# SSO_FALLBACK_LOCAL=true # Allow both SSO and normal login # SSO_FALLBACK_LOCAL=yes
# OIDC_CLIENT_SECRET=your_client_secret # Enable confidential client mode with client authentication # OIDC_CLIENT_SECRET=your_client_secret
# OIDC_ADMIN_GROUPS=admins # Map provider groups to admin role # OIDC_ADMIN_GROUPS=admins
EOF EOF
msg_ok "Installed ${APPLICATION}" msg_ok "Installed ${APPLICATION}"

View File

@@ -45,15 +45,15 @@ MM_DIR="/opt/mm"
MEDIA_DIR="${MM_DIR}/media" MEDIA_DIR="${MM_DIR}/media"
export CONFIG_DIR="${MM_DIR}/config" export CONFIG_DIR="${MM_DIR}/config"
export FRONTEND_FILES_DIR="${MM_DIR}/web/build" export FRONTEND_FILES_DIR="${MM_DIR}/web/build"
export BASE_PATH=""
export PUBLIC_VERSION="" export PUBLIC_VERSION=""
export PUBLIC_API_URL="" export PUBLIC_API_URL=""
export BASE_PATH="" export BASE_PATH="/web"
cd /opt/mediamanager/web cd /opt/mediamanager/web
$STD npm ci $STD npm ci --no-fund --no-audit
$STD npm run build $STD npm run build
mkdir -p {"$MM_DIR"/web,"$MEDIA_DIR","$CONFIG_DIR"} mkdir -p {"$MM_DIR"/web,"$MEDIA_DIR","$CONFIG_DIR"}
cp -r build "$FRONTEND_FILES_DIR" cp -r build "$FRONTEND_FILES_DIR"
export BASE_PATH=""
export VIRTUAL_ENV="${MM_DIR}/venv" export VIRTUAL_ENV="${MM_DIR}/venv"
cd /opt/mediamanager cd /opt/mediamanager
cp -r {media_manager,alembic*} "$MM_DIR" cp -r {media_manager,alembic*} "$MM_DIR"
@@ -81,8 +81,9 @@ cat <<EOF >"$MM_DIR"/start.sh
export CONFIG_DIR="$CONFIG_DIR" export CONFIG_DIR="$CONFIG_DIR"
export FRONTEND_FILES_DIR="$FRONTEND_FILES_DIR" export FRONTEND_FILES_DIR="$FRONTEND_FILES_DIR"
export LOG_FILE="$CONFIG_DIR/media_manager.log"
export BASE_PATH="" export BASE_PATH=""
cd "$MM_DIR" cd $MM_DIR
source ./venv/bin/activate source ./venv/bin/activate
/usr/local/bin/uv run alembic upgrade head /usr/local/bin/uv run alembic upgrade head
/usr/local/bin/uv run fastapi run ./media_manager/main.py --port 8000 /usr/local/bin/uv run fastapi run ./media_manager/main.py --port 8000

View File

@@ -15,31 +15,12 @@ update_os
read -p "${TAB3}Do you want to install MongoDB 8.0 instead of 7.0? [y/N]: " install_mongodb_8 read -p "${TAB3}Do you want to install MongoDB 8.0 instead of 7.0? [y/N]: " install_mongodb_8
if [[ "$install_mongodb_8" =~ ^[Yy]$ ]]; then if [[ "$install_mongodb_8" =~ ^[Yy]$ ]]; then
MONGODB_VERSION="8.0" MONGO_VERSION="8.0" setup_mongodb
else else
MONGODB_VERSION="7.0" MONGO_VERSION="7.0" setup_mongodb
fi fi
msg_info "Installing MongoDB $MONGODB_VERSION"
curl -fsSL "https://www.mongodb.org/static/pgp/server-${MONGODB_VERSION}.asc" | gpg --dearmor >/usr/share/keyrings/mongodb-server-${MONGODB_VERSION}.gpg
cat <<EOF >/etc/apt/sources.list.d/mongodb-org-${MONGODB_VERSION}.sources
Types: deb
URIs: http://repo.mongodb.org/apt/debian
Suites: $(grep '^VERSION_CODENAME=' /etc/os-release | cut -d'=' -f2)/mongodb-org/${MONGODB_VERSION}
Components: main
Signed-By: /usr/share/keyrings/mongodb-server-${MONGODB_VERSION}.gpg
EOF
$STD apt update
$STD apt install -y mongodb-org
sed -i 's/bindIp: 127.0.0.1/bindIp: 0.0.0.0/' /etc/mongod.conf sed -i 's/bindIp: 127.0.0.1/bindIp: 0.0.0.0/' /etc/mongod.conf
systemctl enable -q --now mongod
msg_ok "Installed MongoDB $MONGODB_VERSION"
motd_ssh motd_ssh
customize customize
cleanup_lxc
msg_info "Cleaning up"
$STD apt -y autoremove
$STD apt -y autoclean
$STD apt -y clean
msg_ok "Cleaned"

View File

@@ -16,7 +16,9 @@ update_os
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt install -y \ $STD apt install -y \
ca-certificates \ ca-certificates \
build-essential build-essential \
python3 \
python3-setuptools
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
NODE_VERSION="22" setup_nodejs NODE_VERSION="22" setup_nodejs

View File

@@ -14,7 +14,7 @@ network_check
update_os update_os
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt install -y python3-lxml $STD apt install -y python3-lxml wkhtmltopdf
curl -fsSL "http://archive.ubuntu.com/ubuntu/pool/universe/l/lxml-html-clean/python3-lxml-html-clean_0.1.1-1_all.deb" -o /opt/python3-lxml-html-clean.deb curl -fsSL "http://archive.ubuntu.com/ubuntu/pool/universe/l/lxml-html-clean/python3-lxml-html-clean_0.1.1-1_all.deb" -o /opt/python3-lxml-html-clean.deb
$STD dpkg -i /opt/python3-lxml-html-clean.deb $STD dpkg -i /opt/python3-lxml-html-clean.deb
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"

View File

@@ -66,7 +66,6 @@ server/hostname ${IP_ADDR}
server/server_path_prefix /openproject server/server_path_prefix /openproject
server/ssl no server/ssl no
server/variant apache2 server/variant apache2
server/server_path_prefix
repositories/api-key ${API_KEY} repositories/api-key ${API_KEY}
repositories/svn-install skip repositories/svn-install skip
repositories/git-install install repositories/git-install install

View File

@@ -17,7 +17,11 @@ msg_info "Installing Dependencies"
$STD apt install -y ffmpeg $STD apt install -y ffmpeg
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
USE_UVX="YES" PYTHON_VERSION="3.12" setup_uv PYTHON_VERSION="3.12" setup_uv
msg_info "Installing Open WebUI"
$STD uv tool install --python 3.12 open-webui[all]
msg_ok "Installed Open WebUI"
read -r -p "${TAB3}Would you like to add Ollama? <y/N> " prompt read -r -p "${TAB3}Would you like to add Ollama? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
@@ -56,7 +60,7 @@ After=network.target
Type=simple Type=simple
EnvironmentFile=-/root/.env EnvironmentFile=-/root/.env
Environment=DATA_DIR=/root/.open-webui Environment=DATA_DIR=/root/.open-webui
ExecStart=/usr/local/bin/uvx --python 3.12 open-webui@latest serve ExecStart=/root/.local/bin/open-webui serve
WorkingDirectory=/root WorkingDirectory=/root
Restart=on-failure Restart=on-failure
RestartSec=5 RestartSec=5
@@ -70,9 +74,4 @@ msg_ok "Created Service"
motd_ssh motd_ssh
customize customize
cleanup_lxc
msg_info "Cleaning up"
$STD apt -y autoremove
$STD apt -y autoclean
$STD apt -y clean
msg_ok "Cleaned"

View File

@@ -22,11 +22,16 @@ msg_ok "Installed Dependencies"
NODE_VERSION="22" setup_nodejs NODE_VERSION="22" setup_nodejs
fetch_and_deploy_gh_release "pangolin" "fosrl/pangolin" "tarball" fetch_and_deploy_gh_release "pangolin" "fosrl/pangolin" "tarball"
fetch_and_deploy_gh_release "gerbil" "fosrl/gerbil" "singlefile" "latest" "/usr/bin" "gerbil_linux_amd64" fetch_and_deploy_gh_release "gerbil" "fosrl/gerbil" "singlefile" "latest" "/usr/bin" "gerbil_linux_amd64"
fetch_and_deploy_gh_release "traefik" "traefik/traefik" "prebuild" "latest" "/usr/bin" "traefik_v*_linux_amd64.tar.gz"
read -rp "${TAB3}Enter your Pangolin URL (ex: https://pangolin.example.com): " pango_url
read -rp "${TAB3}Enter your email address: " pango_email
msg_info "Setup Pangolin" msg_info "Setup Pangolin"
IP_ADDR=$(hostname -I | awk '{print $1}') IP_ADDR=$(hostname -I | awk '{print $1}')
SECRET_KEY=$(openssl rand -base64 48 | tr -dc 'A-Za-z0-9' | head -c 32) SECRET_KEY=$(openssl rand -base64 48 | tr -dc 'A-Za-z0-9' | head -c 32)
cd /opt/pangolin cd /opt/pangolin
mkdir -p /opt/pangolin/config/{traefik,db,letsencrypt,logs}
$STD npm ci $STD npm ci
$STD npm run set:sqlite $STD npm run set:sqlite
$STD npm run set:oss $STD npm run set:oss
@@ -46,30 +51,129 @@ mkdir -p /var/config
cat <<EOF >/opt/pangolin/config/config.yml cat <<EOF >/opt/pangolin/config/config.yml
app: app:
dashboard_url: http://$IP_ADDR:3002 dashboard_url: "$pango_url"
log_level: debug
domains: domains:
domain1: domain1:
base_domain: example.com base_domain: "$pango_url"
cert_resolver: "letsencrypt"
server: server:
secret: $SECRET_KEY secret: "$SECRET_KEY"
gerbil: gerbil:
base_endpoint: example.com base_endpoint: "$pango_url"
orgs:
block_size: 24
subnet_group: 100.90.137.0/20
flags: flags:
require_email_verification: false require_email_verification: false
disable_signup_without_invite: true disable_signup_without_invite: false
disable_user_create_org: true disable_user_create_org: false
allow_raw_resources: true EOF
enable_integration_api: true
enable_clients: true cat <<EOF >/opt/pangolin/config/traefik/traefik_config.yml
api:
insecure: true
dashboard: true
providers:
http:
endpoint: "http://$IP_ADDR:3001/api/v1/traefik-config"
pollInterval: "5s"
file:
filename: "/opt/pangolin/config/traefik/dynamic_config.yml"
experimental:
plugins:
badger:
moduleName: "github.com/fosrl/badger"
version: "v1.2.0"
log:
level: "INFO"
format: "common"
certificatesResolvers:
letsencrypt:
acme:
httpChallenge:
entryPoint: web
email: $pango_email
storage: "/opt/pangolin/config/letsencrypt/acme.json"
caServer: "https://acme-v02.api.letsencrypt.org/directory"
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
transport:
respondingTimeouts:
readTimeout: "30m"
http:
tls:
certResolver: "letsencrypt"
serversTransport:
insecureSkipVerify: true
ping:
entryPoint: "web"
EOF
cat <<EOF >/opt/pangolin/config/traefik/dynamic_config.yml
http:
middlewares:
redirect-to-https:
redirectScheme:
scheme: https
routers:
# HTTP to HTTPS redirect router
main-app-router-redirect:
rule: "Host(\`$pango_url\`)"
service: next-service
entryPoints:
- web
middlewares:
- redirect-to-https
# Next.js router (handles everything except API and WebSocket paths)
next-router:
rule: "Host(\`$pango_url\`) && !PathPrefix(\`/api/v1\`)"
service: next-service
entryPoints:
- websecure
tls:
certResolver: letsencrypt
# API router (handles /api/v1 paths)
api-router:
rule: "Host(\`$pango_url\`) && PathPrefix(\`/api/v1\`)"
service: api-service
entryPoints:
- websecure
tls:
certResolver: letsencrypt
# WebSocket router
ws-router:
rule: "Host(\`$pango_url\`)"
service: api-service
entryPoints:
- websecure
tls:
certResolver: letsencrypt
services:
next-service:
loadBalancer:
servers:
- url: "http://$IP_ADDR:3002"
api-service:
loadBalancer:
servers:
- url: "http://$IP_ADDR:3000"
EOF EOF
$STD npm run db:sqlite:generate $STD npm run db:sqlite:generate
$STD npm run db:sqlite:push $STD npm run db:sqlite:push
@@ -122,6 +226,21 @@ RestartSec=10
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
systemctl enable -q --now gerbil systemctl enable -q --now gerbil
cat <<'EOF' >/etc/systemd/system/traefik.service
[Unit]
Description=Traefik is an open-source Edge Router that makes publishing your services a fun and easy experience
[Service]
Type=notify
ExecStart=/usr/bin/traefik --configFile=/opt/pangolin/config/traefik/traefik_config.yml
Restart=on-failure
ExecReload=/bin/kill -USR1 \$MAINPID
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now traefik
msg_ok "Created Services" msg_ok "Created Services"
motd_ssh motd_ssh

View File

@@ -13,39 +13,27 @@ setting_up_container
network_check network_check
update_os update_os
msg_info "Installing Dependencies" PHP_VERSION="8.4" PHP_APACHE="YES" PHP_FPM="YES" PHP_MODULE="mysql,gmp,snmp,ldap,apcu" setup_php
$STD apt install -y php-pear
msg_ok "Installed Dependencies" msg_info "Installing PHP-PEAR"
$STD apt install -y \
php-pear \
php-dev
msg_ok "Installed PHP-PEAR"
PHP_VERSION="8.2" PHP_APACHE="YES" PHP_FPM="YES" PHP_MODULE="mysql,imap,apcu,pspell,tidy,xmlrpc,gmp,ldap,common,snmp" setup_php
setup_mariadb setup_mariadb
MARIADB_DB_NAME="phpipam" MARIADB_DB_USER="phpipam" setup_mariadb_db
msg_info "Setting up MariaDB"
DB_NAME=phpipam
DB_USER=phpipam
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
$STD mariadb -u root -e "CREATE DATABASE $DB_NAME;"
$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 "phpIPAM-Credentials"
echo "phpIPAM Database User: $DB_USER"
echo "phpIPAM Database Password: $DB_PASS"
echo "phpIPAM Database Name: $DB_NAME"
} >>~/phpipam.creds
msg_ok "Set up MariaDB"
fetch_and_deploy_gh_release "phpipam" "phpipam/phpipam" "prebuild" "latest" "/opt/phpipam" "phpipam-v*.zip" fetch_and_deploy_gh_release "phpipam" "phpipam/phpipam" "prebuild" "latest" "/opt/phpipam" "phpipam-v*.zip"
msg_info "Installing phpIPAM" msg_info "Installing phpIPAM"
$STD mariadb -u root "${DB_NAME}" </opt/phpipam/db/SCHEMA.sql $STD mariadb -u root "${MARIADB_DB_NAME}" </opt/phpipam/db/SCHEMA.sql
cp /opt/phpipam/config.dist.php /opt/phpipam/config.php cp /opt/phpipam/config.dist.php /opt/phpipam/config.php
sed -i -e "s/\(\$disable_installer = \).*/\1true;/" \ sed -i -e "s/\(\$disable_installer = \).*/\1true;/" \
-e "s/\(\$db\['user'\] = \).*/\1'$DB_USER';/" \ -e "s/\(\$db\['user'\] = \).*/\1'$MARIADB_DB_USER';/" \
-e "s/\(\$db\['pass'\] = \).*/\1'$DB_PASS';/" \ -e "s/\(\$db\['pass'\] = \).*/\1'$MARIADB_DB_PASS';/" \
-e "s/\(\$db\['name'\] = \).*/\1'$DB_NAME';/" \ -e "s/\(\$db\['name'\] = \).*/\1'$MARIADB_DB_NAME';/" \
/opt/phpipam/config.php /opt/phpipam/config.php
sed -i '/max_execution_time/s/= .*/= 600/' /etc/php/8.2/apache2/php.ini sed -i '/max_execution_time/s/= .*/= 600/' /etc/php/8.4/apache2/php.ini
msg_ok "Installed phpIPAM" msg_ok "Installed phpIPAM"
msg_info "Creating Service" msg_info "Creating Service"
@@ -71,9 +59,4 @@ msg_ok "Created Service"
motd_ssh motd_ssh
customize customize
cleanup_lxc
msg_info "Cleaning up"
$STD apt -y autoremove
$STD apt -y autoclean
$STD apt -y clean
msg_ok "Cleaned"

View File

@@ -18,7 +18,7 @@ curl -fsSL "https://packages.microsoft.com/config/debian/12/packages-microsoft-p
$STD dpkg -i packages-microsoft-prod.deb $STD dpkg -i packages-microsoft-prod.deb
rm -rf packages-microsoft-prod.deb rm -rf packages-microsoft-prod.deb
$STD apt update $STD apt update
$STD apt install -y aspnetcore-runtime-8.0 $STD apt install -y aspnetcore-runtime-9.0
msg_ok "Installed ASP.NET Core Runtime" msg_ok "Installed ASP.NET Core Runtime"
RELEASE=$(curl -fsSL https://technitium.com/dns/ | grep -oP 'Version \K[\d.]+') RELEASE=$(curl -fsSL https://technitium.com/dns/ | grep -oP 'Version \K[\d.]+')
@@ -26,6 +26,7 @@ msg_info "Installing Technitium DNS"
mkdir -p /opt/technitium/dns mkdir -p /opt/technitium/dns
curl -fsSL "https://download.technitium.com/dns/DnsServerPortable.tar.gz" -o /opt/DnsServerPortable.tar.gz curl -fsSL "https://download.technitium.com/dns/DnsServerPortable.tar.gz" -o /opt/DnsServerPortable.tar.gz
$STD tar zxvf /opt/DnsServerPortable.tar.gz -C /opt/technitium/dns/ $STD tar zxvf /opt/DnsServerPortable.tar.gz -C /opt/technitium/dns/
rm -f /opt/DnsServerPortable.tar.gz
echo "${RELEASE}" >~/.technitium echo "${RELEASE}" >~/.technitium
msg_ok "Installed Technitium DNS" msg_ok "Installed Technitium DNS"
@@ -36,10 +37,4 @@ msg_ok "Service created"
motd_ssh motd_ssh
customize customize
cleanup_lxc
msg_info "Cleaning up"
rm -f /opt/DnsServerPortable.tar.gz
$STD apt -y autoremove
$STD apt -y autoclean
$STD apt -y clean
msg_ok "Cleaned"

View File

@@ -370,6 +370,7 @@ run_container_safe() {
cleanup_lxc() { cleanup_lxc() {
msg_info "Cleaning up" msg_info "Cleaning up"
if is_alpine; then if is_alpine; then
$STD apk cache clean || true $STD apk cache clean || true
rm -rf /var/cache/apk/* rm -rf /var/cache/apk/*
@@ -379,36 +380,38 @@ cleanup_lxc() {
$STD apt -y clean || true $STD apt -y clean || true
fi fi
rm -rf /tmp/* /var/tmp/* # Clear temp artifacts (keep sockets/FIFOs; ignore errors)
# Remove temp files created by mktemp/tempfile
find /tmp /var/tmp -type f -name 'tmp*' -delete 2>/dev/null || true find /tmp /var/tmp -type f -name 'tmp*' -delete 2>/dev/null || true
find /tmp /var/tmp -type f -name 'tempfile*' -delete 2>/dev/null || true find /tmp /var/tmp -type f -name 'tempfile*' -delete 2>/dev/null || true
find /var/log -type f -exec truncate -s 0 {} + # Truncate writable log files silently (permission errors ignored)
if command -v truncate >/dev/null 2>&1; then
find /var/log -type f -writable -print0 2>/dev/null |
xargs -0 -n1 truncate -s 0 2>/dev/null || true
fi
# Python pip # Python pip
if command -v pip &>/dev/null; then pip cache purge || true; fi if command -v pip &>/dev/null; then $STD pip cache purge || true; fi
# Python uv # Python uv
if command -v uv &>/dev/null; then uv cache clear || true; fi if command -v uv &>/dev/null; then $STD uv cache clear || true; fi
# Node.js npm # Node.js npm
if command -v npm &>/dev/null; then npm cache clean --force || true; fi if command -v npm &>/dev/null; then $STD npm cache clean --force || true; fi
# Node.js yarn # Node.js yarn
if command -v yarn &>/dev/null; then yarn cache clean || true; fi if command -v yarn &>/dev/null; then $STD yarn cache clean || true; fi
# Node.js pnpm # Node.js pnpm
if command -v pnpm &>/dev/null; then pnpm store prune || true; fi if command -v pnpm &>/dev/null; then $STD pnpm store prune || true; fi
# Go # Go
if command -v go &>/dev/null; then go clean -cache -modcache || true; fi if command -v go &>/dev/null; then $STD go clean -cache -modcache || true; fi
# Rust cargo # Rust cargo
if command -v cargo &>/dev/null; then cargo clean || true; fi if command -v cargo &>/dev/null; then $STD cargo clean || true; fi
# Ruby gem # Ruby gem
if command -v gem &>/dev/null; then gem cleanup || true; fi if command -v gem &>/dev/null; then $STD gem cleanup || true; fi
# Composer (PHP) # Composer (PHP)
if command -v composer &>/dev/null; then composer clear-cache || true; fi if command -v composer &>/dev/null; then $STD composer clear-cache || true; fi
if command -v journalctl &>/dev/null; then if command -v journalctl &>/dev/null; then
$STD journalctl --rotate $STD journalctl --rotate || true
$STD journalctl --vacuum-time=10m $STD journalctl --vacuum-time=10m || true
fi fi
msg_ok "Cleaned" msg_ok "Cleaned"
} }

View File

@@ -72,15 +72,23 @@ stop_all_services() {
local service_patterns=("$@") local service_patterns=("$@")
for pattern in "${service_patterns[@]}"; do for pattern in "${service_patterns[@]}"; do
# Find all matching services # Find all matching services (use || true to avoid pipeline failures)
systemctl list-units --type=service --all 2>/dev/null | local services
grep -oE "${pattern}[^ ]*\.service" | services=$(systemctl list-units --type=service --all 2>/dev/null |
sort -u | grep -oE "${pattern}[^ ]*\.service" 2>/dev/null |
while read -r service; do sort -u 2>/dev/null || true)
# Only process if we found any services
if [[ -n "$services" ]]; then
while IFS= read -r service; do
[[ -z "$service" ]] && continue
$STD systemctl stop "$service" 2>/dev/null || true $STD systemctl stop "$service" 2>/dev/null || true
$STD systemctl disable "$service" 2>/dev/null || true $STD systemctl disable "$service" 2>/dev/null || true
done <<<"$services"
fi
done done
done
return 0
} }
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
@@ -427,7 +435,12 @@ manage_tool_repository() {
suite=$(get_fallback_suite "$distro_id" "$distro_codename" "$repo_url/$distro_id") suite=$(get_fallback_suite "$distro_id" "$distro_codename" "$repo_url/$distro_id")
# Setup new repository using deb822 format # Setup new repository using deb822 format
setup_deb822_repo "mariadb" "$gpg_key_url" "$repo_url/$distro_id" "$suite" "main" "amd64 arm64" || return 1 setup_deb822_repo \
"mariadb" \
"$gpg_key_url" \
"$repo_url/$distro_id" \
"$suite" \
"main"
return 0 return 0
;; ;;
@@ -450,7 +463,51 @@ manage_tool_repository() {
# Setup repository # Setup repository
local distro_codename local distro_codename
distro_codename=$(awk -F= '/^VERSION_CODENAME=/{print $2}' /etc/os-release) distro_codename=$(awk -F= '/^VERSION_CODENAME=/{print $2}' /etc/os-release)
# Suite mapping with fallback for newer releases not yet supported by upstream
if [[ "$distro_id" == "debian" ]]; then
case "$distro_codename" in
trixie | forky | sid)
# Testing/unstable releases fallback to latest stable suite
suite="bookworm"
;;
bookworm)
suite="bookworm"
;;
bullseye)
suite="bullseye"
;;
*)
# Unknown release: fallback to latest stable suite
msg_warn "Unknown Debian release '${distro_codename}', using bookworm"
suite="bookworm"
;;
esac
elif [[ "$distro_id" == "ubuntu" ]]; then
case "$distro_codename" in
oracular | plucky)
# Newer releases fallback to latest LTS
suite="noble"
;;
noble)
suite="noble"
;;
jammy)
suite="jammy"
;;
focal)
suite="focal"
;;
*)
# Unknown release: fallback to latest LTS
msg_warn "Unknown Ubuntu release '${distro_codename}', using noble"
suite="noble"
;;
esac
else
# For other distros, try generic fallback
suite=$(get_fallback_suite "$distro_id" "$distro_codename" "$repo_url") suite=$(get_fallback_suite "$distro_id" "$distro_codename" "$repo_url")
fi
repo_component="main" repo_component="main"
[[ "$distro_id" == "ubuntu" ]] && repo_component="multiverse" [[ "$distro_id" == "ubuntu" ]] && repo_component="multiverse"
@@ -460,7 +517,7 @@ Types: deb
URIs: ${repo_url} URIs: ${repo_url}
Suites: ${suite}/mongodb-org/${version} Suites: ${suite}/mongodb-org/${version}
Components: ${repo_component} Components: ${repo_component}
Architectures: amd64 arm64 Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/mongodb-server-${version}.gpg Signed-By: /etc/apt/keyrings/mongodb-server-${version}.gpg
EOF EOF
return 0 return 0
@@ -492,7 +549,7 @@ Types: deb
URIs: $repo_url URIs: $repo_url
Suites: nodistro Suites: nodistro
Components: main Components: main
Architectures: amd64 arm64 Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/nodesource.gpg Signed-By: /etc/apt/keyrings/nodesource.gpg
EOF EOF
return 0 return 0
@@ -526,7 +583,7 @@ Types: deb
URIs: https://packages.sury.org/php URIs: https://packages.sury.org/php
Suites: $distro_codename Suites: $distro_codename
Components: main Components: main
Architectures: amd64 arm64 Architectures: $(dpkg --print-architecture)
Signed-By: /usr/share/keyrings/deb.sury.org-php.gpg Signed-By: /usr/share/keyrings/deb.sury.org-php.gpg
EOF EOF
return 0 return 0
@@ -557,7 +614,7 @@ Types: deb
URIs: http://apt.postgresql.org/pub/repos/apt URIs: http://apt.postgresql.org/pub/repos/apt
Suites: $distro_codename-pgdg Suites: $distro_codename-pgdg
Components: main Components: main
Architectures: amd64 arm64 Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/postgresql.gpg Signed-By: /etc/apt/keyrings/postgresql.gpg
EOF EOF
return 0 return 0
@@ -1149,8 +1206,8 @@ ensure_apt_working() {
} }
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# Standardized deb822 repository setup # Standardized deb822 repository setup (with optional Architectures)
# Validates all parameters and fails safely if any are empty # Always runs apt update after repo creation to ensure package availability
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
setup_deb822_repo() { setup_deb822_repo() {
local name="$1" local name="$1"
@@ -1158,56 +1215,40 @@ setup_deb822_repo() {
local repo_url="$3" local repo_url="$3"
local suite="$4" local suite="$4"
local component="${5:-main}" local component="${5:-main}"
local architectures="${6:-amd64 arm64}" local architectures="${6-}" # optional
# Validate required parameters # Validate required parameters
if [[ -z "$name" || -z "$gpg_url" || -z "$repo_url" || -z "$suite" ]]; then if [[ -z "$name" || -z "$gpg_url" || -z "$repo_url" || -z "$suite" ]]; then
msg_error "setup_deb822_repo: missing required parameters (name=$name, gpg=$gpg_url, repo=$repo_url, suite=$suite)" msg_error "setup_deb822_repo: missing required parameters (name=$name repo=$repo_url suite=$suite)"
return 1 return 1
fi fi
# Cleanup old configs for this app # Cleanup
cleanup_old_repo_files "$name" cleanup_old_repo_files "$name"
# Cleanup any orphaned .sources files from other apps
cleanup_orphaned_sources cleanup_orphaned_sources
# Ensure keyring directory exists
mkdir -p /etc/apt/keyrings || { mkdir -p /etc/apt/keyrings || {
msg_error "Failed to create /etc/apt/keyrings directory" msg_error "Failed to create /etc/apt/keyrings"
return 1 return 1
} }
# Download GPG key (with --yes to avoid interactive prompts) # Import GPG
curl -fsSL "$gpg_url" | gpg --dearmor --yes -o "/etc/apt/keyrings/${name}.gpg" 2>/dev/null || { curl -fsSL "$gpg_url" | gpg --dearmor --yes -o "/etc/apt/keyrings/${name}.gpg" || {
msg_error "Failed to download or import GPG key for ${name} from $gpg_url" msg_error "Failed to import GPG key for ${name}"
return 1 return 1
} }
# Create deb822 sources file # Write deb822
cat <<EOF >/etc/apt/sources.list.d/${name}.sources {
Types: deb echo "Types: deb"
URIs: $repo_url echo "URIs: $repo_url"
Suites: $suite echo "Suites: $suite"
Components: $component echo "Components: $component"
Architectures: $architectures [[ -n "$architectures" ]] && echo "Architectures: $architectures"
Signed-By: /etc/apt/keyrings/${name}.gpg echo "Signed-By: /etc/apt/keyrings/${name}.gpg"
EOF } >/etc/apt/sources.list.d/${name}.sources
# Use cached apt update
local apt_cache_file="/var/cache/apt-update-timestamp"
local current_time=$(date +%s)
local last_update=0
if [[ -f "$apt_cache_file" ]]; then
last_update=$(cat "$apt_cache_file" 2>/dev/null || echo 0)
fi
# For repo changes, always update but respect short-term cache (30s)
if ((current_time - last_update > 30)); then
$STD apt update $STD apt update
echo "$current_time" >"$apt_cache_file"
fi
} }
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
@@ -1366,7 +1407,7 @@ verify_gpg_fingerprint() {
} }
# ============================================================================== # ==============================================================================
# EXISTING FUNCTIONS # INSTALL FUNCTIONS
# ============================================================================== # ==============================================================================
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
@@ -1468,7 +1509,7 @@ check_for_gh_release() {
return 0 return 0
fi fi
msg_error "No update available: ${app} is not installed!" msg_ok "No update available: ${app} is already on pinned version (${current})"
return 1 return 1
fi fi
@@ -2736,8 +2777,7 @@ function setup_java() {
"https://packages.adoptium.net/artifactory/api/gpg/key/public" \ "https://packages.adoptium.net/artifactory/api/gpg/key/public" \
"https://packages.adoptium.net/artifactory/deb" \ "https://packages.adoptium.net/artifactory/deb" \
"$SUITE" \ "$SUITE" \
"main" \ "main"
"amd64 arm64"
fi fi
# Get currently installed version # Get currently installed version
@@ -3012,6 +3052,85 @@ setup_mariadb() {
msg_ok "Setup MariaDB $MARIADB_VERSION" msg_ok "Setup MariaDB $MARIADB_VERSION"
} }
# ------------------------------------------------------------------------------
# Creates MariaDB database with user, charset and optional extra grants/modes
#
# Description:
# - Generates password if empty
# - Creates database with utf8mb4_unicode_ci
# - Creates local user with password
# - Grants full access to this DB
# - Optional: apply extra GRANT statements (comma-separated)
# - Optional: apply custom GLOBAL sql_mode
# - Saves credentials to file
# - Exports variables for use in calling script
#
# Usage:
# MARIADB_DB_NAME="myapp_db" MARIADB_DB_USER="myapp_user" setup_mariadb_db
# MARIADB_DB_NAME="domain_monitor" MARIADB_DB_USER="domainmonitor" setup_mariadb_db
# MARIADB_DB_NAME="myapp" MARIADB_DB_USER="myapp" MARIADB_DB_EXTRA_GRANTS="GRANT SELECT ON \`mysql\`.\`time_zone_name\`" setup_mariadb_db
# MARIADB_DB_NAME="ghostfolio" MARIADB_DB_USER="ghostfolio" MARIADB_DB_SQL_MODE="" setup_mariadb_db
#
# Variables:
# MARIADB_DB_NAME - Database name (required)
# MARIADB_DB_USER - Database user (required)
# MARIADB_DB_PASS - User password (optional, auto-generated if empty)
# MARIADB_DB_EXTRA_GRANTS - Comma-separated GRANT statements (optional)
# Example: "GRANT SELECT ON \`mysql\`.\`time_zone_name\`"
# MARIADB_DB_SQL_MODE - Optional global sql_mode override (e.g. "", "STRICT_TRANS_TABLES")
# MARIADB_DB_CREDS_FILE - Credentials file path (optional, default: ~/${APPLICATION}.creds)
#
# Exports:
# MARIADB_DB_NAME, MARIADB_DB_USER, MARIADB_DB_PASS
# ------------------------------------------------------------------------------
function setup_mariadb_db() {
if [[ -z "${MARIADB_DB_NAME:-}" || -z "${MARIADB_DB_USER:-}" ]]; then
msg_error "MARIADB_DB_NAME and MARIADB_DB_USER must be set before calling setup_mariadb_db"
return 1
fi
if [[ -z "${MARIADB_DB_PASS:-}" ]]; then
MARIADB_DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
fi
msg_info "Setting up MariaDB Database"
$STD mariadb -u root -e "CREATE DATABASE \`$MARIADB_DB_NAME\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
$STD mariadb -u root -e "CREATE USER '$MARIADB_DB_USER'@'localhost' IDENTIFIED BY '$MARIADB_DB_PASS';"
$STD mariadb -u root -e "GRANT ALL ON \`$MARIADB_DB_NAME\`.* TO '$MARIADB_DB_USER'@'localhost';"
# Optional extra grants
if [[ -n "${MARIADB_DB_EXTRA_GRANTS:-}" ]]; then
IFS=',' read -ra G_LIST <<<"${MARIADB_DB_EXTRA_GRANTS:-}"
for g in "${G_LIST[@]}"; do
g=$(echo "$g" | xargs)
$STD mariadb -u root -e "$g TO '$MARIADB_DB_USER'@'localhost';"
done
fi
# Optional sql_mode override
if [[ -n "${MARIADB_DB_SQL_MODE:-}" ]]; then
$STD mariadb -u root -e "SET GLOBAL sql_mode='${MARIADB_DB_SQL_MODE:-}';"
fi
$STD mariadb -u root -e "FLUSH PRIVILEGES;"
local CREDS_FILE="${MARIADB_DB_CREDS_FILE:-${HOME}/${APPLICATION}.creds}"
{
echo "MariaDB Credentials"
echo "Database: $MARIADB_DB_NAME"
echo "User: $MARIADB_DB_USER"
echo "Password: $MARIADB_DB_PASS"
} >>"$CREDS_FILE"
msg_ok "Set up MariaDB Database"
export MARIADB_DB_NAME
export MARIADB_DB_USER
export MARIADB_DB_PASS
}
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# Installs or updates MongoDB to specified major version. # Installs or updates MongoDB to specified major version.
# #
@@ -3189,12 +3308,12 @@ function setup_mysql() {
return 1 return 1
fi fi
cat >/etc/apt/sources.list.d/mysql.sources <<'EOF' cat >/etc/apt/sources.list.d/mysql.sources <<EOF
Types: deb Types: deb
URIs: https://repo.mysql.com/apt/debian/ URIs: https://repo.mysql.com/apt/debian/
Suites: bookworm Suites: bookworm
Components: mysql-8.4-lts Components: mysql-8.4-lts
Architectures: amd64 arm64 Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/mysql.gpg Signed-By: /etc/apt/keyrings/mysql.gpg
EOF EOF
@@ -3702,8 +3821,7 @@ function setup_postgresql() {
"https://www.postgresql.org/media/keys/ACCC4CF8.asc" \ "https://www.postgresql.org/media/keys/ACCC4CF8.asc" \
"https://apt.postgresql.org/pub/repos/apt" \ "https://apt.postgresql.org/pub/repos/apt" \
"$SUITE" \ "$SUITE" \
"main" \ "main"
"amd64 arm64"
if ! $STD apt update; then if ! $STD apt update; then
msg_error "APT update failed for PostgreSQL repository" msg_error "APT update failed for PostgreSQL repository"
@@ -3772,6 +3890,103 @@ function setup_postgresql() {
fi fi
} }
# ------------------------------------------------------------------------------
# Creates PostgreSQL database with user and optional extensions
#
# Description:
# - Creates PostgreSQL role with login and password
# - Creates database with UTF8 encoding and template0
# - Installs optional extensions (postgis, pgvector, etc.)
# - Configures ALTER ROLE settings for Django/Rails compatibility
# - Saves credentials to file
# - Exports variables for use in calling script
#
# Usage:
# PG_DB_NAME="myapp_db" PG_DB_USER="myapp_user" setup_postgresql_db
# PG_DB_NAME="immich" PG_DB_USER="immich" PG_DB_EXTENSIONS="pgvector" setup_postgresql_db
# PG_DB_NAME="ghostfolio" PG_DB_USER="ghostfolio" PG_DB_GRANT_SUPERUSER="true" setup_postgresql_db
# PG_DB_NAME="adventurelog" PG_DB_USER="adventurelog" PG_DB_EXTENSIONS="postgis" setup_postgresql_db
#
# Variables:
# PG_DB_NAME - Database name (required)
# PG_DB_USER - Database user (required)
# PG_DB_PASS - Database password (optional, auto-generated if empty)
# PG_DB_EXTENSIONS - Comma-separated list of extensions (optional, e.g. "postgis,pgvector")
# PG_DB_GRANT_SUPERUSER - Grant SUPERUSER privilege (optional, "true" to enable, security risk!)
# PG_DB_SCHEMA_PERMS - Grant schema-level permissions (optional, "true" to enable)
# PG_DB_SKIP_ALTER_ROLE - Skip ALTER ROLE settings (optional, "true" to skip)
# PG_DB_CREDS_FILE - Credentials file path (optional, default: ~/${APPLICATION}.creds)
#
# Exports:
# PG_DB_NAME, PG_DB_USER, PG_DB_PASS - For use in calling script
# ------------------------------------------------------------------------------
function setup_postgresql_db() {
# Validation
if [[ -z "${PG_DB_NAME:-}" || -z "${PG_DB_USER:-}" ]]; then
msg_error "PG_DB_NAME and PG_DB_USER must be set before calling setup_postgresql_db"
return 1
fi
# Generate password if not provided
if [[ -z "${PG_DB_PASS:-}" ]]; then
PG_DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
fi
msg_info "Setting up PostgreSQL Database"
$STD sudo -u postgres psql -c "CREATE ROLE $PG_DB_USER WITH LOGIN PASSWORD '$PG_DB_PASS';"
$STD sudo -u postgres psql -c "CREATE DATABASE $PG_DB_NAME WITH OWNER $PG_DB_USER ENCODING 'UTF8' TEMPLATE template0;"
# Install extensions (comma-separated)
if [[ -n "${PG_DB_EXTENSIONS:-}" ]]; then
IFS=',' read -ra EXT_LIST <<<"${PG_DB_EXTENSIONS:-}"
for ext in "${EXT_LIST[@]}"; do
ext=$(echo "$ext" | xargs) # Trim whitespace
$STD sudo -u postgres psql -d "$PG_DB_NAME" -c "CREATE EXTENSION IF NOT EXISTS $ext;"
done
fi
# ALTER ROLE settings for Django/Rails compatibility (unless skipped)
if [[ "${PG_DB_SKIP_ALTER_ROLE:-}" != "true" ]]; then
$STD sudo -u postgres psql -c "ALTER ROLE $PG_DB_USER SET client_encoding TO 'utf8';"
$STD sudo -u postgres psql -c "ALTER ROLE $PG_DB_USER SET default_transaction_isolation TO 'read committed';"
$STD sudo -u postgres psql -c "ALTER ROLE $PG_DB_USER SET timezone TO 'UTC';"
fi
# Schema permissions (if requested)
if [[ "${PG_DB_SCHEMA_PERMS:-}" == "true" ]]; then
$STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $PG_DB_NAME TO $PG_DB_USER;"
$STD sudo -u postgres psql -c "ALTER USER $PG_DB_USER CREATEDB;"
$STD sudo -u postgres psql -d "$PG_DB_NAME" -c "GRANT ALL ON SCHEMA public TO $PG_DB_USER;"
$STD sudo -u postgres psql -d "$PG_DB_NAME" -c "GRANT CREATE ON SCHEMA public TO $PG_DB_USER;"
$STD sudo -u postgres psql -d "$PG_DB_NAME" -c "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO $PG_DB_USER;"
$STD sudo -u postgres psql -d "$PG_DB_NAME" -c "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO $PG_DB_USER;"
fi
# Superuser grant (if requested - WARNING!)
if [[ "${PG_DB_GRANT_SUPERUSER:-}" == "true" ]]; then
msg_warn "Granting SUPERUSER privilege (security risk!)"
$STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $PG_DB_NAME to $PG_DB_USER;"
$STD sudo -u postgres psql -c "ALTER USER $PG_DB_USER WITH SUPERUSER;"
fi
# Save credentials
local CREDS_FILE="${PG_DB_CREDS_FILE:-${HOME}/${APPLICATION}.creds}"
{
echo "PostgreSQL Credentials"
echo "Database: $PG_DB_NAME"
echo "User: $PG_DB_USER"
echo "Password: $PG_DB_PASS"
} >>"$CREDS_FILE"
msg_ok "Set up PostgreSQL Database"
# Export for use in calling script
export PG_DB_NAME
export PG_DB_USER
export PG_DB_PASS
}
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# Installs rbenv and ruby-build, installs Ruby and optionally Rails. # Installs rbenv and ruby-build, installs Ruby and optionally Rails.
# #
@@ -4052,8 +4267,7 @@ function setup_clickhouse() {
"https://packages.clickhouse.com/rpm/lts/repodata/repomd.xml.key" \ "https://packages.clickhouse.com/rpm/lts/repodata/repomd.xml.key" \
"https://packages.clickhouse.com/deb" \ "https://packages.clickhouse.com/deb" \
"stable" \ "stable" \
"main" \ "main"
"amd64 arm64"
# Install packages with retry logic # Install packages with retry logic
export DEBIAN_FRONTEND=noninteractive export DEBIAN_FRONTEND=noninteractive

View File

@@ -48,7 +48,7 @@ install_glances_debian() {
msg_ok "Installed dependencies" msg_ok "Installed dependencies"
msg_info "Setting up Python + uv" msg_info "Setting up Python + uv"
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/tools.func) source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
setup_uv PYTHON_VERSION="3.12" setup_uv PYTHON_VERSION="3.12"
msg_ok "Setup Python + uv" msg_ok "Setup Python + uv"
@@ -118,7 +118,7 @@ install_glances_alpine() {
msg_ok "Installed dependencies" msg_ok "Installed dependencies"
msg_info "Setting up Python + uv" msg_info "Setting up Python + uv"
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/tools.func) source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
setup_uv PYTHON_VERSION="3.12" setup_uv PYTHON_VERSION="3.12"
msg_ok "Setup Python + uv" msg_ok "Setup Python + uv"

View File

@@ -10,7 +10,7 @@ if ! command -v curl >/dev/null 2>&1; then
apt-get update >/dev/null 2>&1 apt-get update >/dev/null 2>&1
apt-get install -y curl >/dev/null 2>&1 apt-get install -y curl >/dev/null 2>&1
fi fi
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/core.func) source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVE/raw/branch/main/misc/core.func)
load_functions load_functions
set -euo pipefail set -euo pipefail