mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-02-03 20:03:25 +01:00
Compare commits
238 Commits
2025-12-18
...
2026-01-02
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bf1b43ecf5 | ||
|
|
7d3437d4b3 | ||
|
|
12599f359f | ||
|
|
8c0fda523e | ||
|
|
eb9cee4fab | ||
|
|
f464d9d4cb | ||
|
|
6faef00835 | ||
|
|
df5cc68ea1 | ||
|
|
cd2acd93cd | ||
|
|
b208b2a20d | ||
|
|
ca5cd83c40 | ||
|
|
12767b4ffa | ||
|
|
ded7da536d | ||
|
|
e351925119 | ||
|
|
2ccbf11741 | ||
|
|
53a2635240 | ||
|
|
1f5191c071 | ||
|
|
9b7cfcff73 | ||
|
|
b7e2706eff | ||
|
|
2d859aba23 | ||
|
|
76f20024f3 | ||
|
|
bf35ad0d21 | ||
|
|
8bac0e66f4 | ||
|
|
72a7777328 | ||
|
|
8dbc4161c7 | ||
|
|
49f92e1cf4 | ||
|
|
0fba391aa6 | ||
|
|
fd60467db9 | ||
|
|
8ea1ec247e | ||
|
|
08eded6e37 | ||
|
|
e9b22f04ab | ||
|
|
eb5a1cb9f7 | ||
|
|
f4ceff8d8e | ||
|
|
4e988a7d60 | ||
|
|
8839ad5127 | ||
|
|
784e4171ce | ||
|
|
cb4ab231b9 | ||
|
|
95cb440b2e | ||
|
|
e4eea7a6ae | ||
|
|
2cc54fdbdf | ||
|
|
86069a1663 | ||
|
|
78b4f44447 | ||
|
|
62ca1552a8 | ||
|
|
eba6fd8c6d | ||
|
|
0cefe4c5c5 | ||
|
|
57295c31ab | ||
|
|
5a43b901b5 | ||
|
|
f7d013287b | ||
|
|
6b1a7228d3 | ||
|
|
9667c7a17e | ||
|
|
b4a25160e4 | ||
|
|
547043e842 | ||
|
|
1d278f53f6 | ||
|
|
a471006c3d | ||
|
|
7b08f8d8a2 | ||
|
|
cc8bb3ec9f | ||
|
|
8c02a1023f | ||
|
|
e17a42f905 | ||
|
|
bef77dde87 | ||
|
|
59a752a6ab | ||
|
|
99a7f30b06 | ||
|
|
a1586a748d | ||
|
|
9a5d121910 | ||
|
|
dfb4e00550 | ||
|
|
d095da7949 | ||
|
|
73c626bd3c | ||
|
|
7bfb9447b2 | ||
|
|
8526a25541 | ||
|
|
5671d554f1 | ||
|
|
1962eb3d5b | ||
|
|
2f7c54b827 | ||
|
|
e912ef1e7d | ||
|
|
6251b24eff | ||
|
|
6fa0d47ff2 | ||
|
|
1cab60ac6a | ||
|
|
0e89a65597 | ||
|
|
183b92dc4b | ||
|
|
375076d294 | ||
|
|
9582910787 | ||
|
|
046e50778c | ||
|
|
1d34ecc981 | ||
|
|
c62b78f34b | ||
|
|
fcfb4e9f4b | ||
|
|
a25a469177 | ||
|
|
e5943404f9 | ||
|
|
023a6e54a4 | ||
|
|
bbc326ec23 | ||
|
|
3dfd7e5fc3 | ||
|
|
59ee3b0836 | ||
|
|
84d3a2a478 | ||
|
|
a50af10a85 | ||
|
|
5aa1db077b | ||
|
|
45b3d2d1cc | ||
|
|
22a2696ca3 | ||
|
|
dedab50711 | ||
|
|
b7bfaee6a7 | ||
|
|
b618f82564 | ||
|
|
e6ee6e66bf | ||
|
|
97211b41b7 | ||
|
|
20a55d4543 | ||
|
|
0ece3263bd | ||
|
|
9f1e214bc0 | ||
|
|
37007f1efe | ||
|
|
e926182748 | ||
|
|
fa8c8ef85c | ||
|
|
c769a43f62 | ||
|
|
d91753824c | ||
|
|
77a3eacd21 | ||
|
|
404e87a2e3 | ||
|
|
34a8ed8358 | ||
|
|
f6f6815ac1 | ||
|
|
256a80f18f | ||
|
|
9613bf672a | ||
|
|
978f2a36a5 | ||
|
|
a6d05ae5e6 | ||
|
|
e6ca8a646d | ||
|
|
4e417dbdda | ||
|
|
5a230837d3 | ||
|
|
23e3be00f0 | ||
|
|
c074d3f567 | ||
|
|
12037c8468 | ||
|
|
1a5c7680ee | ||
|
|
2934b10415 | ||
|
|
133e1484ad | ||
|
|
b22265047c | ||
|
|
9b728ee2e0 | ||
|
|
bf51483235 | ||
|
|
f1fc6b0298 | ||
|
|
4a878169be | ||
|
|
f1c6f573aa | ||
|
|
920a170c1e | ||
|
|
63e883f9ea | ||
|
|
733821bfce | ||
|
|
7a44080eda | ||
|
|
5730506c03 | ||
|
|
ba06d13598 | ||
|
|
c0f4ac5750 | ||
|
|
36391bfc1e | ||
|
|
509ea946a6 | ||
|
|
489b78aaf3 | ||
|
|
261f746ff1 | ||
|
|
1a7da4bc91 | ||
|
|
69f81cec04 | ||
|
|
cca6521b62 | ||
|
|
0cd82a058c | ||
|
|
0d3e872c7c | ||
|
|
97f74fd9dd | ||
|
|
42f32804ba | ||
|
|
b6026af8f7 | ||
|
|
5dc05ce79f | ||
|
|
85d5693e1a | ||
|
|
8e8ae9d992 | ||
|
|
4da54f1593 | ||
|
|
d6ef21c077 | ||
|
|
92ff5f60ff | ||
|
|
3953fa1e25 | ||
|
|
2acac97417 | ||
|
|
6e640f8eb6 | ||
|
|
2478aa84e8 | ||
|
|
f02e25182b | ||
|
|
94d12ff1aa | ||
|
|
f6f4c3411c | ||
|
|
e819bf69f2 | ||
|
|
d76150d9a3 | ||
|
|
931dbd8c9f | ||
|
|
eb0486a698 | ||
|
|
ae28705178 | ||
|
|
8d713edce2 | ||
|
|
9c27a28e1f | ||
|
|
0f75e9d31d | ||
|
|
889116c82d | ||
|
|
b5f98ce189 | ||
|
|
b11101a5c2 | ||
|
|
33ef33c833 | ||
|
|
08cbeea4a9 | ||
|
|
65606eec1c | ||
|
|
ebb8b098dd | ||
|
|
73b2dbb3b7 | ||
|
|
e3ff6bfbbf | ||
|
|
d9425a1169 | ||
|
|
a21066ac74 | ||
|
|
c0231a08c2 | ||
|
|
cfe518adce | ||
|
|
5ca27931a2 | ||
|
|
869a9f4ac3 | ||
|
|
4ddf86b9cd | ||
|
|
4e57145621 | ||
|
|
ef2a511217 | ||
|
|
18bb7ae6c7 | ||
|
|
28d34e9169 | ||
|
|
ddf8843b7b | ||
|
|
8212a44e5f | ||
|
|
134e7c1ae1 | ||
|
|
72f9ca70dc | ||
|
|
6dab7728df | ||
|
|
abfe97a9c9 | ||
|
|
174721bc14 | ||
|
|
8c1f42f6c1 | ||
|
|
245578a2a3 | ||
|
|
4c9baeb755 | ||
|
|
b9640c4211 | ||
|
|
b7ef0f8f01 | ||
|
|
8f3fa0c88a | ||
|
|
867f3347c7 | ||
|
|
379515fcbc | ||
|
|
76dde80497 | ||
|
|
30625b38df | ||
|
|
741e4dbe6e | ||
|
|
d7f9fe27c5 | ||
|
|
d5531ad445 | ||
|
|
3cdf4ed664 | ||
|
|
db2301d056 | ||
|
|
25afd9224c | ||
|
|
468f6bddf9 | ||
|
|
021297b2ce | ||
|
|
0c76ed793b | ||
|
|
47e65c71f6 | ||
|
|
83678f83c8 | ||
|
|
7dd547bde2 | ||
|
|
ad18ca0ff7 | ||
|
|
cb2d4c0051 | ||
|
|
b9fa152253 | ||
|
|
2202d34eed | ||
|
|
2f8fbf1e3f | ||
|
|
e027446b2c | ||
|
|
8a67635651 | ||
|
|
94744dadcf | ||
|
|
0a36329235 | ||
|
|
cf8082c1f5 | ||
|
|
c225692979 | ||
|
|
0863e2b991 | ||
|
|
621d4b4d5c | ||
|
|
00137d4441 | ||
|
|
159b5ee22e | ||
|
|
5beb983b7f | ||
|
|
13c29e5c51 | ||
|
|
69d17046aa | ||
|
|
04f4727de3 |
316
CHANGELOG.md
316
CHANGELOG.md
@@ -10,8 +10,324 @@
|
||||
> [!CAUTION]
|
||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
||||
|
||||
## 2026-01-03
|
||||
|
||||
## 2026-01-02
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Fix Intel Level Zero package conflict on Debian 13 [@Copilot](https://github.com/Copilot) ([#10467](https://github.com/community-scripts/ProxmoxVE/pull/10467))
|
||||
|
||||
### ❔ Uncategorized
|
||||
|
||||
- Extend guidance for changing the immich upload location for #10447 [@jshprentz](https://github.com/jshprentz) ([#10475](https://github.com/community-scripts/ProxmoxVE/pull/10475))
|
||||
|
||||
## 2026-01-01
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix(sabnzbd): update script now migrates old service files to use venv Python [@vidonnus](https://github.com/vidonnus) ([#10466](https://github.com/community-scripts/ProxmoxVE/pull/10466))
|
||||
- fix(bazarr): update script now migrates old service files to use venv Python [@vidonnus](https://github.com/vidonnus) ([#10459](https://github.com/community-scripts/ProxmoxVE/pull/10459))
|
||||
- fix #10453 broken sonarqube update [@Karlito83](https://github.com/Karlito83) ([#10456](https://github.com/community-scripts/ProxmoxVE/pull/10456))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Fix MariaDB runtime directory persistence on container reboot [@Copilot](https://github.com/Copilot) ([#10468](https://github.com/community-scripts/ProxmoxVE/pull/10468))
|
||||
|
||||
## 2025-12-31
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- fix(wazuh): add LXC rootcheck exclusion to prevent false positives [@brettlyons](https://github.com/brettlyons) ([#10436](https://github.com/community-scripts/ProxmoxVE/pull/10436))
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Increase BentoPDF RAM requirement from 2GB to 4GB [@Copilot](https://github.com/Copilot) ([#10449](https://github.com/community-scripts/ProxmoxVE/pull/10449))
|
||||
- fix(swizzin): Use HTTPS and add curl error handling [@fmcglinn](https://github.com/fmcglinn) ([#10440](https://github.com/community-scripts/ProxmoxVE/pull/10440))
|
||||
|
||||
## 2025-12-30
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Unlink default nginx config [@iLikeToCode](https://github.com/iLikeToCode) ([#10432](https://github.com/community-scripts/ProxmoxVE/pull/10432))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: Firefly [@tremor021](https://github.com/tremor021) ([#10421](https://github.com/community-scripts/ProxmoxVE/pull/10421))
|
||||
|
||||
### 🗑️ Deleted Scripts
|
||||
|
||||
- Remove: GoAway [@MickLesk](https://github.com/MickLesk) ([#10429](https://github.com/community-scripts/ProxmoxVE/pull/10429))
|
||||
|
||||
## 2025-12-29
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- syncthing: check for deb822 source [@MickLesk](https://github.com/MickLesk) ([#10414](https://github.com/community-scripts/ProxmoxVE/pull/10414))
|
||||
- speedtest-tracker: add external IP URL and internet check hostname in .env [@MickLesk](https://github.com/MickLesk) ([#10078](https://github.com/community-scripts/ProxmoxVE/pull/10078))
|
||||
- Pelican-panel: prevent composer superuser prompt [@MickLesk](https://github.com/MickLesk) ([#10418](https://github.com/community-scripts/ProxmoxVE/pull/10418))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- add libmfx-gen1.2 for intel gpu hwaccel [@jcnix](https://github.com/jcnix) ([#10400](https://github.com/community-scripts/ProxmoxVE/pull/10400))
|
||||
|
||||
## 2025-12-28
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Mail-Archiver ([#10393](https://github.com/community-scripts/ProxmoxVE/pull/10393))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Fix mongodb update logic [@durzo](https://github.com/durzo) ([#10388](https://github.com/community-scripts/ProxmoxVE/pull/10388))
|
||||
- fix pulse downloading incorrect tarball [@durzo](https://github.com/durzo) ([#10383](https://github.com/community-scripts/ProxmoxVE/pull/10383))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Linkwarden: enable Corepack and prepare Yarn v4 before running yarn [@MickLesk](https://github.com/MickLesk) ([#10390](https://github.com/community-scripts/ProxmoxVE/pull/10390))
|
||||
- metube: use pnpm + corepack for frontend build [@MickLesk](https://github.com/MickLesk) ([#10392](https://github.com/community-scripts/ProxmoxVE/pull/10392))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Set default LANG in locale configuration [@jamezpolley](https://github.com/jamezpolley) ([#10378](https://github.com/community-scripts/ProxmoxVE/pull/10378))
|
||||
|
||||
### ❔ Uncategorized
|
||||
|
||||
- Updated Frontend Debian and Ubuntu VM notes so links can be copied quickly. [@mzb2xeo](https://github.com/mzb2xeo) ([#10379](https://github.com/community-scripts/ProxmoxVE/pull/10379))
|
||||
|
||||
## 2025-12-27
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- nextcloud-exporter ([#10314](https://github.com/community-scripts/ProxmoxVE/pull/10314))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Dotnet ASP Web API: Fix need for verbose [@tremor021](https://github.com/tremor021) ([#10368](https://github.com/community-scripts/ProxmoxVE/pull/10368))
|
||||
- Npm: fix build for 2.13.5 [@durzo](https://github.com/durzo) ([#10340](https://github.com/community-scripts/ProxmoxVE/pull/10340))
|
||||
- Outline: Fix for database connection string [@tremor021](https://github.com/tremor021) ([#10359](https://github.com/community-scripts/ProxmoxVE/pull/10359))
|
||||
|
||||
## 2025-12-26
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- phpipam: use PHP 8.4 with correct mysql module for PDO support [@MickLesk](https://github.com/MickLesk) ([#10348](https://github.com/community-scripts/ProxmoxVE/pull/10348))
|
||||
- hyperion: increase disk to 4GB and tools.func: fix /root/. path error [@MickLesk](https://github.com/MickLesk) ([#10349](https://github.com/community-scripts/ProxmoxVE/pull/10349))
|
||||
|
||||
### ❔ Uncategorized
|
||||
|
||||
- fix: zoraxy: category [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10344](https://github.com/community-scripts/ProxmoxVE/pull/10344))
|
||||
- categorize valkey as database [@pshankinclarke](https://github.com/pshankinclarke) ([#10331](https://github.com/community-scripts/ProxmoxVE/pull/10331))
|
||||
|
||||
## 2025-12-25
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- InfluxDB: Fixes [@tremor021](https://github.com/tremor021) ([#10308](https://github.com/community-scripts/ProxmoxVE/pull/10308))
|
||||
- Increase Zot Default Memory, Recategorize [@chrismuzyn](https://github.com/chrismuzyn) ([#10311](https://github.com/community-scripts/ProxmoxVE/pull/10311))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: OpenObserve [@tremor021](https://github.com/tremor021) ([#10279](https://github.com/community-scripts/ProxmoxVE/pull/10279))
|
||||
- Refactor: NZBGet [@tremor021](https://github.com/tremor021) ([#10302](https://github.com/community-scripts/ProxmoxVE/pull/10302))
|
||||
- Refactor: ntfy [@tremor021](https://github.com/tremor021) ([#10303](https://github.com/community-scripts/ProxmoxVE/pull/10303))
|
||||
- Refactor: Notifiarr [@tremor021](https://github.com/tremor021) ([#10304](https://github.com/community-scripts/ProxmoxVE/pull/10304))
|
||||
|
||||
### 🌐 Website
|
||||
|
||||
- Fix horizontal scroll on website [@mateossh](https://github.com/mateossh) ([#10317](https://github.com/community-scripts/ProxmoxVE/pull/10317))
|
||||
|
||||
## 2025-12-24
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- recyclarr: increase cron path [@Uncloak2](https://github.com/Uncloak2) ([#10272](https://github.com/community-scripts/ProxmoxVE/pull/10272))
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix: technitium: service migration [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10300](https://github.com/community-scripts/ProxmoxVE/pull/10300))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Overseerr: Update dependencies [@tremor021](https://github.com/tremor021) ([#10275](https://github.com/community-scripts/ProxmoxVE/pull/10275))
|
||||
- Refactor: Paperless-GPT [@tremor021](https://github.com/tremor021) ([#10274](https://github.com/community-scripts/ProxmoxVE/pull/10274))
|
||||
- Refactor: Outline [@tremor021](https://github.com/tremor021) ([#10276](https://github.com/community-scripts/ProxmoxVE/pull/10276))
|
||||
- Refactor: OTS [@tremor021](https://github.com/tremor021) ([#10277](https://github.com/community-scripts/ProxmoxVE/pull/10277))
|
||||
- Refactor: OpenProject [@tremor021](https://github.com/tremor021) ([#10278](https://github.com/community-scripts/ProxmoxVE/pull/10278))
|
||||
- Refactor: Open Archiver [@tremor021](https://github.com/tremor021) ([#10280](https://github.com/community-scripts/ProxmoxVE/pull/10280))
|
||||
- Refactor: Tautulli [@tremor021](https://github.com/tremor021) ([#10241](https://github.com/community-scripts/ProxmoxVE/pull/10241))
|
||||
- Refactor: PrivateBin [@tremor021](https://github.com/tremor021) ([#10256](https://github.com/community-scripts/ProxmoxVE/pull/10256))
|
||||
- Refactor: Podman-Home Assistant [@tremor021](https://github.com/tremor021) ([#10258](https://github.com/community-scripts/ProxmoxVE/pull/10258))
|
||||
- Refactor: Plant-it [@tremor021](https://github.com/tremor021) ([#10259](https://github.com/community-scripts/ProxmoxVE/pull/10259))
|
||||
- Refactor: PatchMon [@tremor021](https://github.com/tremor021) ([#10260](https://github.com/community-scripts/ProxmoxVE/pull/10260))
|
||||
- Refactor: Part-DB [@tremor021](https://github.com/tremor021) ([#10262](https://github.com/community-scripts/ProxmoxVE/pull/10262))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- core: correct local template discovery regex pattern [@MickLesk](https://github.com/MickLesk) ([#10282](https://github.com/community-scripts/ProxmoxVE/pull/10282))
|
||||
|
||||
### 🧰 Tools
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- pihole-exporter fix: unbound var [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10307](https://github.com/community-scripts/ProxmoxVE/pull/10307))
|
||||
|
||||
### ❔ Uncategorized
|
||||
|
||||
- Pocketbase: Add note for superuser account creation [@tremor021](https://github.com/tremor021) ([#10245](https://github.com/community-scripts/ProxmoxVE/pull/10245))
|
||||
|
||||
## 2025-12-23
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Technitium DNS: Migrate service [@tremor021](https://github.com/tremor021) ([#10240](https://github.com/community-scripts/ProxmoxVE/pull/10240))
|
||||
- Update forgejo to debian13 and fix env var [@burgerga](https://github.com/burgerga) ([#10242](https://github.com/community-scripts/ProxmoxVE/pull/10242))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Passbolt: Small fixes [@tremor021](https://github.com/tremor021) ([#10261](https://github.com/community-scripts/ProxmoxVE/pull/10261))
|
||||
- Refactor: ProjectSend [@tremor021](https://github.com/tremor021) ([#10255](https://github.com/community-scripts/ProxmoxVE/pull/10255))
|
||||
- Prometheus Paperless NGX Exporter: Small fix [@tremor021](https://github.com/tremor021) ([#10254](https://github.com/community-scripts/ProxmoxVE/pull/10254))
|
||||
- Podman: Fixes [@tremor021](https://github.com/tremor021) ([#10257](https://github.com/community-scripts/ProxmoxVE/pull/10257))
|
||||
- Refactor: Beszel [@tremor021](https://github.com/tremor021) ([#10195](https://github.com/community-scripts/ProxmoxVE/pull/10195))
|
||||
|
||||
### 🧰 Tools
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix: pihole-exporter: unknown function [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10249](https://github.com/community-scripts/ProxmoxVE/pull/10249))
|
||||
|
||||
### ❔ Uncategorized
|
||||
|
||||
- Fix Recyclarr page TypeError: schema mismatch in notes field [@Copilot](https://github.com/Copilot) ([#10253](https://github.com/community-scripts/ProxmoxVE/pull/10253))
|
||||
|
||||
## 2025-12-22
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- InvoiceNinja: add chromium dependencies for PDF generation [@MickLesk](https://github.com/MickLesk) ([#10230](https://github.com/community-scripts/ProxmoxVE/pull/10230))
|
||||
- MediaManager) use npm install [@MickLesk](https://github.com/MickLesk) ([#10228](https://github.com/community-scripts/ProxmoxVE/pull/10228))
|
||||
- Kometa: Fix update procedure [@tremor021](https://github.com/tremor021) ([#10217](https://github.com/community-scripts/ProxmoxVE/pull/10217))
|
||||
|
||||
- #### 💥 Breaking Changes
|
||||
|
||||
- refactor: reitti: v3.0.0 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10196](https://github.com/community-scripts/ProxmoxVE/pull/10196))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- tools.func - hwaccel: skip setup without GPU passthrough and fix Ubuntu AMD firmware [@MickLesk](https://github.com/MickLesk) ([#10225](https://github.com/community-scripts/ProxmoxVE/pull/10225))
|
||||
|
||||
### 📚 Documentation
|
||||
|
||||
- contribution docs: update templates with modern patterns [@MickLesk](https://github.com/MickLesk) ([#10227](https://github.com/community-scripts/ProxmoxVE/pull/10227))
|
||||
|
||||
### ❔ Uncategorized
|
||||
|
||||
- InvoiceNinja: switch category [@DragoQC](https://github.com/DragoQC) ([#10223](https://github.com/community-scripts/ProxmoxVE/pull/10223))
|
||||
|
||||
## 2025-12-21
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Typo fix in Heimdall install script [@Turcid-uwu](https://github.com/Turcid-uwu) ([#10187](https://github.com/community-scripts/ProxmoxVE/pull/10187))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- recyclarr: add default daily cron job for recyclarr sync [@MickLesk](https://github.com/MickLesk) ([#10208](https://github.com/community-scripts/ProxmoxVE/pull/10208))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Optimize Jotty installation with standalone mode [@MickLesk](https://github.com/MickLesk) ([#10207](https://github.com/community-scripts/ProxmoxVE/pull/10207))
|
||||
- unifi: remove mongodb 4.4 support | bump to java 21 [@MickLesk](https://github.com/MickLesk) ([#10206](https://github.com/community-scripts/ProxmoxVE/pull/10206))
|
||||
- Refactor: Backrest [@tremor021](https://github.com/tremor021) ([#10193](https://github.com/community-scripts/ProxmoxVE/pull/10193))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Fix AMD GPU firmware installation by adding non-free repositories [@MickLesk](https://github.com/MickLesk) ([#10205](https://github.com/community-scripts/ProxmoxVE/pull/10205))
|
||||
|
||||
### 🧰 Tools
|
||||
|
||||
- pihole-exporter ([#10091](https://github.com/community-scripts/ProxmoxVE/pull/10091))
|
||||
|
||||
## 2025-12-20
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Update Technitium DNS and Restart Service [@DrEVILish](https://github.com/DrEVILish) ([#10181](https://github.com/community-scripts/ProxmoxVE/pull/10181))
|
||||
- bump: ersatztv: deb13 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10174](https://github.com/community-scripts/ProxmoxVE/pull/10174))
|
||||
|
||||
## 2025-12-19
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Update Reitti to Java 25 for 3.0.0 compatibility [@Copilot](https://github.com/Copilot) ([#10164](https://github.com/community-scripts/ProxmoxVE/pull/10164))
|
||||
- Bump Bar-Assistant to php 8.4 [@MickLesk](https://github.com/MickLesk) ([#10138](https://github.com/community-scripts/ProxmoxVE/pull/10138))
|
||||
- Zabbix: Add version-specific SQL script path for 7.0 LTS [@MickLesk](https://github.com/MickLesk) ([#10142](https://github.com/community-scripts/ProxmoxVE/pull/10142))
|
||||
- InfluxDB: Fix update function [@Liganic](https://github.com/Liganic) ([#10151](https://github.com/community-scripts/ProxmoxVE/pull/10151))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Bump Immich to v2.4.1 [@vhsdream](https://github.com/vhsdream) ([#10154](https://github.com/community-scripts/ProxmoxVE/pull/10154))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: Cosmos: + Upgrade to Debian 13 [@MickLesk](https://github.com/MickLesk) ([#10147](https://github.com/community-scripts/ProxmoxVE/pull/10147))
|
||||
- Refactor: Proxmox-Mail-Gateway [@tremor021](https://github.com/tremor021) ([#10070](https://github.com/community-scripts/ProxmoxVE/pull/10070))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- core: Auto-cleanup after all update_script executions [@MickLesk](https://github.com/MickLesk) ([#10141](https://github.com/community-scripts/ProxmoxVE/pull/10141))
|
||||
|
||||
### 🧰 Tools
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- fix: removed verbose option to avoid unnecessary output [@wolle604](https://github.com/wolle604) ([#10144](https://github.com/community-scripts/ProxmoxVE/pull/10144))
|
||||
|
||||
### ❔ Uncategorized
|
||||
|
||||
- Update paymenter.json(#10133) [@DragoQC](https://github.com/DragoQC) ([#10134](https://github.com/community-scripts/ProxmoxVE/pull/10134))
|
||||
|
||||
## 2025-12-18
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
@@ -27,28 +27,18 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/garethgeorge/backrest/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
|
||||
if check_for_gh_release "backrest" "garethgeorge/backrest"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop backrest
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Updating ${APP} to ${RELEASE}"
|
||||
temp_file=$(mktemp)
|
||||
rm -f /opt/backrest/bin/backrest
|
||||
curl -fsSL "https://github.com/garethgeorge/backrest/releases/download/v${RELEASE}/backrest_Linux_x86_64.tar.gz" -o "$temp_file"
|
||||
tar xzf $temp_file -C /opt/backrest/bin
|
||||
chmod +x /opt/backrest/bin/backrest
|
||||
rm -f "$temp_file"
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated ${APP} to ${RELEASE}"
|
||||
fetch_and_deploy_gh_release "backrest" "garethgeorge/backrest" "prebuild" "latest" "/opt/backrest/bin" "backrest_Linux_x86_64.tar.gz"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start backrest
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -34,6 +34,8 @@ function update_script() {
|
||||
systemctl stop nginx
|
||||
msg_ok "Stopped nginx"
|
||||
|
||||
PHP_VERSION="8.4" PHP_FPM=YES PHP_MODULE="ffi,opcache,redis,zip,pdo-sqlite,bcmath,pdo,curl,dom,fpm" setup_php
|
||||
|
||||
msg_info "Backing up Bar Assistant"
|
||||
mv /opt/bar-assistant /opt/bar-assistant-backup
|
||||
msg_ok "Backed up Bar Assistant"
|
||||
|
||||
@@ -38,8 +38,13 @@ function update_script() {
|
||||
msg_info "Setup Bazarr"
|
||||
mkdir -p /var/lib/bazarr/
|
||||
chmod 775 /opt/bazarr /var/lib/bazarr/
|
||||
# Always ensure venv exists
|
||||
if [[ ! -d /opt/bazarr/venv/ ]]; then
|
||||
$STD uv venv /opt/bazarr/venv --python 3.12
|
||||
fi
|
||||
|
||||
# Always check and fix service file if needed
|
||||
if [[ -f /etc/systemd/system/bazarr.service ]] && grep -q "ExecStart=/usr/bin/python3" /etc/systemd/system/bazarr.service; then
|
||||
sed -i "s|ExecStart=/usr/bin/python3 /opt/bazarr/bazarr.py|ExecStart=/opt/bazarr/venv/bin/python3 /opt/bazarr/bazarr.py|g" /etc/systemd/system/bazarr.service
|
||||
systemctl daemon-reload
|
||||
fi
|
||||
|
||||
@@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
||||
APP="BentoPDF"
|
||||
var_tags="${var_tags:-pdf-editor}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
|
||||
25
ct/beszel.sh
25
ct/beszel.sh
@@ -27,19 +27,22 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop beszel-hub
|
||||
msg_info "Stopped Service"
|
||||
|
||||
msg_info "Updating $APP"
|
||||
$STD /opt/beszel/beszel update
|
||||
sleep 2 && chmod +x /opt/beszel/beszel
|
||||
msg_ok "Updated $APP"
|
||||
if check_for_gh_release "beszel" "henrygd/beszel"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop beszel-hub
|
||||
msg_info "Stopped Service"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start beszel-hub
|
||||
msg_ok "Successfully started $APP"
|
||||
msg_ok "Updated successfully!"
|
||||
msg_info "Updating Beszel"
|
||||
$STD /opt/beszel/beszel update
|
||||
sleep 2 && chmod +x /opt/beszel/beszel
|
||||
msg_ok "Updated Beszel"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start beszel-hub
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-20}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
var_gpu="${var_gpu:-yes}"
|
||||
|
||||
|
||||
@@ -5,14 +5,15 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://https://cosmos-cloud.io/
|
||||
|
||||
APP="cosmos"
|
||||
var_tags="${var_tags:-os,docker}"
|
||||
APP="Cosmos"
|
||||
var_tags="${var_tags:-cloud;docker}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
var_fuse="${var_fuse:-yes}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-5}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
var_gpu="${var_gpu:-yes}"
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-2}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -73,17 +73,13 @@ function update_script() {
|
||||
msg_ok "Updated Firefly"
|
||||
|
||||
if [[ "${IMPORTER_INSTALLED:-0}" -eq 1 ]]; then
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dataimporter" "firefly-iii/data-importer" "prebuild" "latest" "/opt/firefly/dataimporter" "DataImporter-v*.tar.gz"
|
||||
|
||||
msg_info "Updating Firefly Importer"
|
||||
IMPORTER_RELEASE=$(curl -fsSL https://api.github.com/repos/firefly-iii/data-importer/releases/latest | grep tag_name | cut -d '"' -f 4 | sed 's/v//')
|
||||
rm -rf /opt/firefly/dataimporter
|
||||
mkdir -p /opt/firefly/dataimporter
|
||||
curl -fsSL "https://github.com/firefly-iii/data-importer/releases/download/v${IMPORTER_RELEASE}/DataImporter-v${IMPORTER_RELEASE}.tar.gz" -o "/opt/DataImporter.tar.gz"
|
||||
tar -xzf /opt/DataImporter.tar.gz -C /opt/firefly/dataimporter
|
||||
if [[ -f /opt/dataimporter.env ]]; then
|
||||
cp /opt/dataimporter.env /opt/firefly/dataimporter/.env
|
||||
fi
|
||||
chown -R www-data:www-data /opt/firefly/dataimporter
|
||||
rm -f /opt/DataImporter.tar.gz
|
||||
msg_ok "Updated Firefly Importer"
|
||||
fi
|
||||
systemctl start apache2
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-10}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -44,6 +44,14 @@ function update_script() {
|
||||
rm -rf forgejo-$RELEASE-linux-amd64
|
||||
msg_ok "Cleaned"
|
||||
|
||||
# Fix env var from older version of community script
|
||||
if grep -q "GITEA_WORK_DIR" /etc/systemd/system/forgejo.service; then
|
||||
msg_info "Updating Service File"
|
||||
sed -i "s/GITEA_WORK_DIR/FORGEJO_WORK_DIR/g" /etc/systemd/system/forgejo.service
|
||||
systemctl daemon-reload
|
||||
msg_ok "Updated Service File"
|
||||
fi
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start forgejo
|
||||
msg_ok "Started Service"
|
||||
|
||||
54
ct/goaway.sh
54
ct/goaway.sh
@@ -1,54 +0,0 @@
|
||||
#!/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://github.com/pommee/goaway
|
||||
|
||||
APP="GoAway"
|
||||
var_tags="${var_tags:-network}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-4}"
|
||||
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 /opt/goaway ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "goaway" "pommee/goaway"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop goaway
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
fetch_and_deploy_gh_release "goaway" "pommee/goaway" "prebuild" "latest" "/opt/goaway" "goaway_*_linux_amd64.tar.gz"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start goaway
|
||||
msg_ok "Started Services"
|
||||
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
_________ _________ ___ ____ _____
|
||||
/ ___/ __ \/ ___/ __ `__ \/ __ \/ ___/
|
||||
/ /__/ /_/ (__ ) / / / / / /_/ (__ )
|
||||
\___/\____/____/_/ /_/ /_/\____/____/
|
||||
|
||||
______
|
||||
/ ____/___ _________ ___ ____ _____
|
||||
/ / / __ \/ ___/ __ `__ \/ __ \/ ___/
|
||||
/ /___/ /_/ (__ ) / / / / / /_/ (__ )
|
||||
\____/\____/____/_/ /_/ /_/\____/____/
|
||||
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
______ ___
|
||||
/ ____/___ / |_ ______ ___ __
|
||||
/ / __/ __ \/ /| | | /| / / __ `/ / / /
|
||||
/ /_/ / /_/ / ___ | |/ |/ / /_/ / /_/ /
|
||||
\____/\____/_/ |_|__/|__/\__,_/\__, /
|
||||
/____/
|
||||
6
ct/headers/mail-archiver
Normal file
6
ct/headers/mail-archiver
Normal file
@@ -0,0 +1,6 @@
|
||||
__ ___ _ __ ___ __ _
|
||||
/ |/ /___ _(_) / / | __________/ /_ (_) _____ _____
|
||||
/ /|_/ / __ `/ / /_____/ /| | / ___/ ___/ __ \/ / | / / _ \/ ___/
|
||||
/ / / / /_/ / / /_____/ ___ |/ / / /__/ / / / /| |/ / __/ /
|
||||
/_/ /_/\__,_/_/_/ /_/ |_/_/ \___/_/ /_/_/ |___/\___/_/
|
||||
|
||||
17
ct/homarr.sh
17
ct/homarr.sh
@@ -35,22 +35,11 @@ function update_script() {
|
||||
msg_ok "Services Stopped"
|
||||
|
||||
if ! { grep -q '^REDIS_IS_EXTERNAL=' /opt/homarr/.env 2>/dev/null || grep -q '^REDIS_IS_EXTERNAL=' /opt/homarr.env 2>/dev/null; }; then
|
||||
DEBIAN_VERSION=$(cat /etc/debian_version 2>/dev/null | cut -d'.' -f1)
|
||||
if [[ -n "$DEBIAN_VERSION" ]] && [[ "$DEBIAN_VERSION" -lt 13 ]]; then
|
||||
msg_warn "⚠️ COMPATIBILITY WARNING ⚠️"
|
||||
msg_warn "You are running Debian ${DEBIAN_VERSION}. Homarr's requires Debian 13"
|
||||
msg_warn ""
|
||||
msg_warn "Please Upgrade to Debian 13:"
|
||||
msg_warn "See: https://github.com/community-scripts/ProxmoxVE/discussions/7489"
|
||||
msg_warn ""
|
||||
exit
|
||||
fi
|
||||
msg_info "Fixing old structure"
|
||||
# fix musl issues because homarr compiles on alpine not debian soure: https://github.com/alexander-akhmetov/python-telegram/issues/3
|
||||
$STD apt install -y musl-dev
|
||||
ln -s /usr/lib/x86_64-linux-musl/libc.so /lib/libc.musl-x86_64.so.1
|
||||
systemctl disable -q --now nginx
|
||||
cp /opt/homarr/.env /opt/homarr.env
|
||||
echo "REDIS_IS_EXTERNAL='true'" >> /opt/homarr.env
|
||||
sed -i '/^\[Unit\]/a Requires=redis-server.service\nAfter=redis-server.service' /etc/systemd/system/homarr.service
|
||||
sed -i 's|^ExecStart=.*|ExecStart=/opt/homarr/run.sh|' /etc/systemd/system/homarr.service
|
||||
sed -i 's|^EnvironmentFile=.*|EnvironmentFile=-/opt/homarr.env|' /etc/systemd/system/homarr.service
|
||||
chown -R redis:redis /appdata/redis
|
||||
@@ -72,7 +61,7 @@ EOF
|
||||
|
||||
NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
|
||||
setup_nodejs
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr" "prebuild" "latest" "/opt/homarr" "build-amd64.tar.gz"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr" "prebuild" "latest" "/opt/homarr" "build-debian-amd64.tar.gz"
|
||||
|
||||
msg_info "Updating Homarr"
|
||||
cp /opt/homarr/redis.conf /etc/redis/redis.conf
|
||||
|
||||
@@ -9,7 +9,7 @@ APP="Hyperion"
|
||||
var_tags="${var_tags:-ambient-lightning}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-2}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
@@ -108,7 +108,7 @@ EOF
|
||||
msg_ok "Image-processing libraries up to date"
|
||||
fi
|
||||
|
||||
RELEASE="2.4.0"
|
||||
RELEASE="2.4.1"
|
||||
if check_for_gh_release "immich" "immich-app/immich" "${RELEASE}"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop immich-web
|
||||
|
||||
@@ -23,13 +23,15 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -f /etc/apt/sources.list.d/influxdata.list ]]; then
|
||||
if [[ ! -f /usr/bin/influxd ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating ${APP}"
|
||||
|
||||
msg_info "Updating InfluxDB"
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
$STD apt upgrade -y
|
||||
msg_ok "Updated InfluxDB"
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
29
ct/jotty.sh
29
ct/jotty.sh
@@ -48,6 +48,17 @@ function update_script() {
|
||||
$STD yarn --frozen-lockfile
|
||||
$STD yarn next telemetry disable
|
||||
$STD yarn build
|
||||
|
||||
[ -d "public" ] && cp -r public .next/standalone/
|
||||
[ -d "howto" ] && cp -r howto .next/standalone/
|
||||
mkdir -p .next/standalone/.next
|
||||
cp -r .next/static .next/standalone/.next/
|
||||
|
||||
mv .next/standalone /tmp/jotty_standalone
|
||||
rm -rf * .next .git .gitignore .yarn
|
||||
mv /tmp/jotty_standalone/* .
|
||||
mv /tmp/jotty_standalone/.[!.]* . 2>/dev/null || true
|
||||
rm -rf /tmp/jotty_standalone
|
||||
msg_ok "Updated jotty"
|
||||
|
||||
msg_info "Restoring configuration & data"
|
||||
@@ -55,6 +66,24 @@ function update_script() {
|
||||
$STD tar -xf /opt/data_config.tar
|
||||
msg_ok "Restored configuration & data"
|
||||
|
||||
msg_info "Updating Service"
|
||||
cat <<EOF >/etc/systemd/system/jotty.service
|
||||
[Unit]
|
||||
Description=jotty server
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=/opt/jotty
|
||||
EnvironmentFile=/opt/jotty/.env
|
||||
ExecStart=/usr/bin/node server.js
|
||||
Restart=on-abnormal
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl daemon-reload
|
||||
msg_ok "Updated Service"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start jotty
|
||||
msg_ok "Started Service"
|
||||
|
||||
@@ -41,6 +41,7 @@ function update_script() {
|
||||
fetch_and_deploy_gh_release "kometa" "Kometa-Team/Kometa"
|
||||
|
||||
msg_info "Updating Kometa"
|
||||
cd /opt/kometa
|
||||
$STD uv pip install -r requirements.txt --system
|
||||
mkdir -p config/assets
|
||||
cp /opt/config.yml config/config.yml
|
||||
|
||||
@@ -42,11 +42,23 @@ function update_script() {
|
||||
|
||||
fetch_and_deploy_gh_release "linkwarden" "linkwarden/linkwarden"
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
msg_info "Updating Linkwarden"
|
||||
cd /opt/linkwarden
|
||||
yarn_ver="4.12.0"
|
||||
if [[ -f package.json ]]; then
|
||||
pkg_manager=$(jq -r '.packageManager // empty' package.json 2>/dev/null || true)
|
||||
if [[ -n "$pkg_manager" && "$pkg_manager" == yarn@* ]]; then
|
||||
yarn_spec="${pkg_manager#yarn@}"
|
||||
yarn_ver="${yarn_spec%%+*}"
|
||||
fi
|
||||
fi
|
||||
if command -v corepack >/dev/null 2>&1; then
|
||||
$STD corepack enable
|
||||
$STD corepack prepare "yarn@${yarn_ver}" --activate || true
|
||||
fi
|
||||
$STD yarn
|
||||
$STD npx playwright install-deps
|
||||
$STD yarn playwright install
|
||||
$STD npx playwright install
|
||||
mv /opt/.env /opt/linkwarden/.env
|
||||
$STD yarn prisma:generate
|
||||
$STD yarn web:build
|
||||
@@ -55,7 +67,7 @@ function update_script() {
|
||||
rm -rf ~/.cargo/registry ~/.cargo/git ~/.cargo/.package-cache
|
||||
rm -rf /root/.cache/yarn
|
||||
rm -rf /opt/linkwarden/.next/cache
|
||||
msg_ok "Updated ${APP}"
|
||||
msg_ok "Updated Linkwarden"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start linkwarden
|
||||
|
||||
71
ct/mail-archiver.sh
Normal file
71
ct/mail-archiver.sh
Normal file
@@ -0,0 +1,71 @@
|
||||
#!/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://github.com/s1t5/mail-archiver
|
||||
|
||||
APP="Mail-Archiver"
|
||||
var_tags="${var_tags:-mail-archiver}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-8}"
|
||||
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 /opt/mail-archiver ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "mail-archiver" "s1t5/mail-archiver"; then
|
||||
msg_info "Stopping Mail-Archiver"
|
||||
systemctl stop mail-archiver
|
||||
msg_ok "Stopped Mail-Archiver"
|
||||
|
||||
msg_info "Creating Backup"
|
||||
cp /opt/mail-archiver/appsettings.json /opt/mail-archiver/.env /opt/
|
||||
[[ -d /opt/mail-archiver/DataProtection-Keys ]] && cp -r /opt/mail-archiver/DataProtection-Keys /opt
|
||||
msg_ok "Created Backup"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "mail-archiver" "s1t5/mail-archiver" "tarball"
|
||||
|
||||
msg_info "Updating Mail-Archiver"
|
||||
mv /opt/mail-archiver /opt/mail-archiver-build
|
||||
cd /opt/mail-archiver-build
|
||||
$STD dotnet restore
|
||||
$STD dotnet publish -c Release -o /opt/mail-archiver
|
||||
rm -rf /opt/mail-archiver-build
|
||||
msg_ok "Updated Mail-Archiver"
|
||||
|
||||
msg_info "Restoring Backup"
|
||||
cp /opt/appsettings.json /opt/.env /opt/mail-archiver
|
||||
[[ -d /opt/DataProtection-Keys ]] && cp -r /opt/DataProtection-Keys /opt/mail-archiver/
|
||||
msg_ok "Restored Backup"
|
||||
|
||||
msg_info "Starting Mail-Archiver"
|
||||
systemctl start mail-archiver
|
||||
msg_ok "Started Mail-Archiver"
|
||||
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}:5000${CL}"
|
||||
@@ -44,7 +44,7 @@ function update_script() {
|
||||
export PUBLIC_API_URL=""
|
||||
export BASE_PATH="/web"
|
||||
cd /opt/mediamanager/web
|
||||
$STD npm ci --no-fund --no-audit
|
||||
$STD npm install --no-fund --no-audit
|
||||
$STD npm run build
|
||||
rm -rf "$FRONTEND_FILES_DIR"/build
|
||||
cp -r build "$FRONTEND_FILES_DIR"
|
||||
|
||||
10
ct/metube.sh
10
ct/metube.sh
@@ -40,6 +40,8 @@ function update_script() {
|
||||
fi
|
||||
fi
|
||||
|
||||
NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs
|
||||
|
||||
if check_for_gh_release "metube" "alexta69/metube"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop metube
|
||||
@@ -56,8 +58,12 @@ function update_script() {
|
||||
|
||||
msg_info "Building Frontend"
|
||||
cd /opt/metube/ui
|
||||
$STD npm install
|
||||
$STD node_modules/.bin/ng build
|
||||
if command -v corepack >/dev/null 2>&1; then
|
||||
$STD corepack enable
|
||||
$STD corepack prepare pnpm --activate || true
|
||||
fi
|
||||
$STD pnpm install --frozen-lockfile
|
||||
$STD pnpm run build
|
||||
msg_ok "Built Frontend"
|
||||
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
|
||||
@@ -23,13 +23,14 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -f /etc/apt/sources.list.d/mongodb-org-7.0.list && ! -f /etc/apt/sources.list.d/mongodb-org-8.0.list ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
if ! command -v mongod &>/dev/null; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating ${APP} LXC"
|
||||
|
||||
msg_info "Updating MongoDB LXC"
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
$STD apt upgrade -y
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ function update_script() {
|
||||
#grep "tag_name" |
|
||||
#awk '{print substr($2, 3, length($2)-4) }')
|
||||
|
||||
RELEASE="2.13.4"
|
||||
RELEASE="2.13.5"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "nginxproxymanager" "NginxProxyManager/nginx-proxy-manager" "tarball" "v${RELEASE}" "/opt/nginxproxymanager"
|
||||
|
||||
msg_info "Stopping Services"
|
||||
@@ -126,6 +126,7 @@ function update_script() {
|
||||
# Replace node-sass with sass in package.json before installation
|
||||
sed -E -i 's/"node-sass" *: *"([^"]*)"/"sass": "\1"/g' package.json
|
||||
$STD yarn install --network-timeout 600000
|
||||
$STD yarn locale-compile
|
||||
$STD yarn build
|
||||
cp -r /opt/nginxproxymanager/frontend/dist/* /app/frontend
|
||||
cp -r /opt/nginxproxymanager/frontend/public/images/* /app/frontend/images
|
||||
|
||||
@@ -27,10 +27,10 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating $APP"
|
||||
msg_info "Updating Notifiarr"
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
msg_ok "Updated $APP"
|
||||
$STD apt upgrade -y
|
||||
msg_ok "Updated Notifiarr"
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
19
ct/ntfy.sh
19
ct/ntfy.sh
@@ -34,21 +34,18 @@ function update_script() {
|
||||
rm -f /etc/apt/sources.list.d/archive.heckel.io.list
|
||||
rm -f /etc/apt/sources.list.d/archive.heckel.io.list.bak
|
||||
rm -f /etc/apt/sources.list.d/archive.heckel.io.sources
|
||||
curl -fsSL -o /etc/apt/keyrings/ntfy.gpg https://archive.ntfy.sh/apt/keyring.gpg
|
||||
cat <<'EOF' >/etc/apt/sources.list.d/ntfy.sources
|
||||
Types: deb
|
||||
URIs: https://archive.ntfy.sh/apt/
|
||||
Suites: stable
|
||||
Components: main
|
||||
Signed-By: /etc/apt/keyrings/ntfy.gpg
|
||||
EOF
|
||||
setup_deb822_repo \
|
||||
"ntfy" \
|
||||
"https://archive.ntfy.sh/apt/keyring.gpg" \
|
||||
"https://archive.ntfy.sh/apt/" \
|
||||
"stable"
|
||||
msg_ok "Corrected old Ntfy Repository"
|
||||
fi
|
||||
|
||||
msg_info "Updating $APP LXC"
|
||||
msg_info "Updating ntfy"
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
msg_ok "Updated $APP LXC"
|
||||
$STD apt upgrade -y
|
||||
msg_ok "Updated ntfy"
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -27,10 +27,10 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating $APP LXC"
|
||||
msg_info "Updating NZBGet"
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
msg_ok "Updated $APP LXC"
|
||||
$STD apt upgrade -y
|
||||
msg_ok "Updated NZBGet"
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ function update_script() {
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
cp /opt/openarchiver/.env /opt/openarchiver.env
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "openarchiver" "LogicLabs-OU/OpenArchiver" "tarball" "latest" "/opt/openarchiver"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "openarchiver" "LogicLabs-OU/OpenArchiver" "tarball"
|
||||
mv /opt/openarchiver.env /opt/openarchiver/.env
|
||||
|
||||
msg_info "Updating Open Archiver"
|
||||
|
||||
@@ -27,13 +27,16 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating $APP"
|
||||
systemctl stop openobserve
|
||||
LATEST=$(curl -fsSL https://api.github.com/repos/openobserve/openobserve/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
|
||||
$STD tar zxvf <(curl -fsSL https://downloads.openobserve.ai/releases/openobserve/$LATEST/openobserve-$LATEST-linux-amd64.tar.gz) -C /opt/openobserve
|
||||
systemctl start openobserve
|
||||
msg_ok "Updated $APP"
|
||||
msg_ok "Updated successfully!"
|
||||
|
||||
if check_for_gh_release "openobserve" "openobserve/openobserve"; then
|
||||
msg_info "Updating OpenObserve"
|
||||
systemctl stop openobserve
|
||||
RELEASE=$(get_latest_github_release "openobserve/openobserve")
|
||||
tar zxf <(curl -fsSL https://downloads.openobserve.ai/releases/openobserve/v$RELEASE/openobserve-v$RELEASE-linux-amd64.tar.gz) -C /opt/openobserve
|
||||
systemctl start openobserve
|
||||
msg_ok "Updated OpenObserve"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
|
||||
@@ -27,18 +27,19 @@ function update_script() {
|
||||
msg_error "No Paperless-GPT installation found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/icereed/paperless-gpt/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
|
||||
if check_for_gh_release "paperless-gpt" "icereed/paperless-gpt"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop paperless-gpt
|
||||
msg_ok "Service Stopped"
|
||||
|
||||
msg_info "Updating Paperless-GPT to ${RELEASE}"
|
||||
temp_file=$(mktemp)
|
||||
curl -fsSL "https://github.com/icereed/paperless-gpt/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||
tar zxf $temp_file
|
||||
rm -rf /opt/paperless-gpt
|
||||
mv paperless-gpt-${RELEASE} /opt/paperless-gpt
|
||||
if should_update_tool "node" "24"; then
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
fi
|
||||
|
||||
fetch_and_deploy_gh_release "paperless-gpt" "icereed/paperless-gpt" "tarball"
|
||||
|
||||
msg_info "Updating Paperless-GPT"
|
||||
cd /opt/paperless-gpt/web-app
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
@@ -47,16 +48,12 @@ function update_script() {
|
||||
export CC=musl-gcc
|
||||
CGO_ENABLED=1 go build -tags musl -o /dev/null github.com/mattn/go-sqlite3
|
||||
CGO_ENABLED=1 go build -tags musl -o paperless-gpt .
|
||||
rm -f $temp_file
|
||||
echo "${RELEASE}" >"/opt/paperless-gpt_version.txt"
|
||||
msg_ok "Updated Paperless-GPT to ${RELEASE}"
|
||||
msg_ok "Updated Paperless-GPT"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start paperless-gpt
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -27,8 +27,9 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Part-DB/Part-DB-server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
|
||||
RELEASE=$(get_latest_github_release "Part-DB/Part-DB-server")
|
||||
if check_for_gh_release "partdb" "Part-DB/Part-DB-server"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop apache2
|
||||
msg_ok "Stopped Service"
|
||||
@@ -36,7 +37,7 @@ function update_script() {
|
||||
msg_info "Updating $APP to v${RELEASE}"
|
||||
cd /opt
|
||||
mv /opt/partdb/ /opt/partdb-backup
|
||||
curl -fsSL "https://github.com/Part-DB/Part-DB-server/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/Part-DB/Part-DB-server/archive/refs/tags/v${RELEASE}.zip")
|
||||
curl -fsSL "https://github.com/Part-DB/Part-DB-server/archive/refs/tags/v${RELEASE}.zip" -o "/opt/v${RELEASE}.zip"
|
||||
$STD unzip "v${RELEASE}.zip"
|
||||
mv /opt/Part-DB-server-${RELEASE}/ /opt/partdb
|
||||
|
||||
@@ -54,15 +55,13 @@ function update_script() {
|
||||
chown -R www-data:www-data /opt/partdb
|
||||
rm -r "/opt/v${RELEASE}.zip"
|
||||
rm -r /opt/partdb-backup
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
echo "${RELEASE}" >~/.partdb
|
||||
msg_ok "Updated $APP to v${RELEASE}"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start apache2
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ function update_script() {
|
||||
systemctl stop apache2
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
PHP_VERSION="8.3" PHP_APACHE="YES" PHP_FPM="YES" PHP_MODULE="mysql,gmp,snmp,ldap,apcu" setup_php
|
||||
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 \
|
||||
|
||||
@@ -37,7 +37,7 @@ function update_script() {
|
||||
if [ "$UPD" == "1" ]; then
|
||||
msg_info "Updating ${APP} LXC"
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
$STD apt upgrade -y
|
||||
msg_ok "Updated successfully!"
|
||||
|
||||
msg_info "Updating All Containers\n"
|
||||
@@ -65,7 +65,7 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
if [ "$UPD" == "3" ]; then
|
||||
IP=$(hostname -I | awk '{print $1}')
|
||||
import_local_ip
|
||||
msg_info "Installing FileBrowser"
|
||||
$STD curl -fsSL https://raw.githubusercontent.com/filebrowser/get/master/get.sh | bash
|
||||
$STD filebrowser config init -a '0.0.0.0'
|
||||
@@ -74,23 +74,25 @@ function update_script() {
|
||||
msg_ok "Installed FileBrowser"
|
||||
|
||||
msg_info "Creating Service"
|
||||
service_path="/etc/systemd/system/filebrowser.service"
|
||||
echo "[Unit]
|
||||
Description=Filebrowser
|
||||
After=network-online.target
|
||||
[Service]
|
||||
User=root
|
||||
WorkingDirectory=/root/
|
||||
ExecStart=/usr/local/bin/filebrowser -r /
|
||||
[Install]
|
||||
WantedBy=default.target" >$service_path
|
||||
cat <<EOF >/etc/systemd/system/filebrowser.service
|
||||
[Unit]
|
||||
Description=Filebrowser
|
||||
After=network-online.target
|
||||
|
||||
$STD systemctl enable --now filebrowser
|
||||
[Service]
|
||||
User=root
|
||||
WorkingDirectory=/root/
|
||||
ExecStart=/usr/local/bin/filebrowser -r /
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
EOF
|
||||
systemctl enable -q --now filebrowser
|
||||
msg_ok "Created Service"
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "FileBrowser should be reachable by going to the following URL.
|
||||
${BL}http://$IP:8080${CL} admin|helper-scripts.com\n"
|
||||
${BL}http://$LOCAL_IP:8080${CL} admin|helper-scripts.com\n"
|
||||
exit
|
||||
fi
|
||||
if [ "$UPD" == "4" ]; then
|
||||
@@ -99,7 +101,6 @@ function update_script() {
|
||||
msg_ok "Removed ALL Unused Images"
|
||||
exit
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
@@ -29,7 +29,7 @@ function update_script() {
|
||||
fi
|
||||
msg_info "Updating ${APP} LXC"
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
$STD apt upgrade -y
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -48,7 +48,6 @@ function update_script() {
|
||||
msg_info "Starting Service"
|
||||
systemctl start apache2
|
||||
msg_ok "Started Service"
|
||||
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
|
||||
@@ -27,10 +27,11 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating ${APP}"
|
||||
|
||||
msg_info "Updating Proxmox-Mail-Gateway"
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
msg_ok "Updated ${APP}"
|
||||
$STD apt upgrade -y
|
||||
msg_ok "Updated Proxmox-Mail-Gateway"
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ function update_script() {
|
||||
rm -f /opt/pulse/pulse
|
||||
fi
|
||||
|
||||
fetch_and_deploy_gh_release "pulse" "rcourtman/Pulse" "prebuild" "latest" "/opt/pulse" "*-linux-amd64.tar.gz"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "pulse" "rcourtman/Pulse" "prebuild" "latest" "/opt/pulse" "pulse-v*-linux-amd64.tar.gz"
|
||||
ln -sf /opt/pulse/bin/pulse /usr/local/bin/pulse
|
||||
mkdir -p /etc/pulse
|
||||
chown pulse:pulse /etc/pulse
|
||||
|
||||
33
ct/reitti.sh
33
ct/reitti.sh
@@ -27,11 +27,44 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ ! -d /var/cache/nginx/tiles ]; then
|
||||
msg_info "Installing Nginx Tile Cache"
|
||||
mkdir -p /var/cache/nginx/tiles
|
||||
$STD apt install -y nginx
|
||||
cat <<EOF >/etc/nginx/nginx.conf
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
http {
|
||||
proxy_cache_path /var/cache/nginx/tiles levels=1:2 keys_zone=tiles:10m max_size=1g inactive=30d use_temp_path=off;
|
||||
server {
|
||||
listen 80;
|
||||
location / {
|
||||
proxy_pass https://tile.openstreetmap.org/;
|
||||
proxy_set_header Host tile.openstreetmap.org;
|
||||
proxy_set_header User-Agent "Reitti/1.0";
|
||||
proxy_cache tiles;
|
||||
proxy_cache_valid 200 30d;
|
||||
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
|
||||
}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
chown -R www-data:www-data /var/cache/nginx/tiles
|
||||
systemctl restart nginx
|
||||
echo "reitti.ui.tiles.cache.url=http://127.0.0.1" >> /opt/reitti/application.properties
|
||||
systemctl restart reitti
|
||||
msg_info "Installed Nginx Tile Cache"
|
||||
fi
|
||||
|
||||
if check_for_gh_release "reitti" "dedicatedcode/reitti"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop reitti
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
JAVA_VERSION="25" setup_java
|
||||
|
||||
rm -f /opt/reitti/reitti.jar
|
||||
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "reitti" "dedicatedcode/reitti" "singlefile" "latest" "/opt/reitti" "reitti-app.jar"
|
||||
mv /opt/reitti/reitti-*.jar /opt/reitti/reitti.jar
|
||||
|
||||
@@ -38,16 +38,18 @@ function update_script() {
|
||||
cp -r /opt/sabnzbd /opt/sabnzbd_backup_$(date +%s)
|
||||
fetch_and_deploy_gh_release "sabnzbd-org" "sabnzbd/sabnzbd" "prebuild" "latest" "/opt/sabnzbd" "SABnzbd-*-src.tar.gz"
|
||||
|
||||
# Always ensure venv exists
|
||||
if [[ ! -d /opt/sabnzbd/venv ]]; then
|
||||
msg_info "Migrating SABnzbd to uv virtual environment"
|
||||
$STD uv venv /opt/sabnzbd/venv
|
||||
msg_ok "Created uv venv at /opt/sabnzbd/venv"
|
||||
fi
|
||||
|
||||
if grep -q "ExecStart=python3 SABnzbd.py" /etc/systemd/system/sabnzbd.service; then
|
||||
sed -i "s|ExecStart=python3 SABnzbd.py|ExecStart=/opt/sabnzbd/venv/bin/python SABnzbd.py|" /etc/systemd/system/sabnzbd.service
|
||||
systemctl daemon-reload
|
||||
msg_ok "Updated SABnzbd service to use uv venv"
|
||||
fi
|
||||
# Always check and fix service file if needed
|
||||
if [[ -f /etc/systemd/system/sabnzbd.service ]] && grep -q "ExecStart=python3 SABnzbd.py" /etc/systemd/system/sabnzbd.service; then
|
||||
sed -i "s|ExecStart=python3 SABnzbd.py|ExecStart=/opt/sabnzbd/venv/bin/python SABnzbd.py|" /etc/systemd/system/sabnzbd.service
|
||||
systemctl daemon-reload
|
||||
msg_ok "Updated SABnzbd service to use uv venv"
|
||||
fi
|
||||
$STD uv pip install --upgrade pip --python=/opt/sabnzbd/venv/bin/python
|
||||
$STD uv pip install -r /opt/sabnzbd/requirements.txt --python=/opt/sabnzbd/venv/bin/python
|
||||
|
||||
@@ -43,7 +43,7 @@ function update_script() {
|
||||
RELEASE=$(get_latest_github_release "SonarSource/sonarqube")
|
||||
curl -fsSL "https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-${RELEASE}.zip" -o $temp_file
|
||||
unzip -q "$temp_file" -d /opt
|
||||
mv /opt/sonarqube-* /opt/sonarqube
|
||||
mv /opt/sonarqube-${RELEASE} /opt/sonarqube
|
||||
msg_ok "Updated SonarQube"
|
||||
|
||||
msg_info "Restoring Backup"
|
||||
|
||||
@@ -33,6 +33,7 @@ function update_script() {
|
||||
PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="common,sqlite3,redis" setup_php
|
||||
setup_composer
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
setcap cap_net_raw+ep /bin/ping
|
||||
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop speedtest-tracker
|
||||
|
||||
@@ -23,7 +23,7 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -f /etc/apt/sources.list.d/syncthing.list ]]; then
|
||||
if [[ ! -f /etc/apt/sources.list.d/syncthing.list && ! -f /etc/apt/sources.list.d/syncthing.sources ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
|
||||
@@ -27,7 +27,11 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [[ -f /etc/systemd/system/dns.service ]]; then
|
||||
mv /etc/systemd/system/dns.service /etc/systemd/system/technitium.service
|
||||
systemctl daemon-reload
|
||||
systemctl enable -q --now technitium
|
||||
fi
|
||||
if is_package_installed "aspnetcore-runtime-8.0"; then
|
||||
$STD apt remove -y aspnetcore-runtime-8.0
|
||||
[ -f /etc/apt/sources.list.d/microsoft-prod.list ] && rm -f /etc/apt/sources.list.d/microsoft-prod.list
|
||||
@@ -42,11 +46,13 @@ function update_script() {
|
||||
fi
|
||||
|
||||
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"
|
||||
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/
|
||||
rm -f /opt/DnsServerPortable.tar.gz
|
||||
echo "${RELEASE}" >~/.technitium
|
||||
systemctl restart technitium
|
||||
msg_ok "Updated Technitium DNS"
|
||||
msg_ok "Updated successfully!"
|
||||
else
|
||||
|
||||
@@ -28,6 +28,8 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
JAVA_VERSION="21" setup_java
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
$STD apt update --allow-releaseinfo-change
|
||||
$STD apt install -y unifi
|
||||
|
||||
@@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
||||
APP="Zot-Registry"
|
||||
var_tags="${var_tags:-registry;oci}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-5}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
|
||||
690
docs/contribution/HELPER_FUNCTIONS.md
Normal file
690
docs/contribution/HELPER_FUNCTIONS.md
Normal file
@@ -0,0 +1,690 @@
|
||||
# 🛠️ Helper Functions Reference
|
||||
|
||||
**Quick reference for all helper functions available in `tools.func`**
|
||||
|
||||
> These functions are automatically available in install scripts via `$FUNCTIONS_FILE_PATH`
|
||||
|
||||
---
|
||||
|
||||
## 📋 Table of Contents
|
||||
|
||||
- [Scripts to Watch](#scripts-to-watch)
|
||||
- [Runtime & Language Setup](#runtime--language-setup)
|
||||
- [Database Setup](#database-setup)
|
||||
- [GitHub Release Helpers](#github-release-helpers)
|
||||
- [Tools & Utilities](#tools--utilities)
|
||||
- [SSL/TLS](#ssltls)
|
||||
- [Utility Functions](#utility-functions)
|
||||
- [Package Management](#package-management)
|
||||
|
||||
---
|
||||
|
||||
## 📚 Scripts to Watch
|
||||
|
||||
**Learn from real, well-implemented scripts. Each app requires TWO files that work together:**
|
||||
|
||||
| File | Location | Purpose |
|
||||
| ------------------ | ---------------------------- | ------------------------------------------------------------------------ |
|
||||
| **CT Script** | `ct/appname.sh` | Runs on **Proxmox host** - creates container, contains `update_script()` |
|
||||
| **Install Script** | `install/appname-install.sh` | Runs **inside container** - installs and configures the app |
|
||||
|
||||
> ⚠️ **Both files are ALWAYS required!** The CT script calls the install script automatically during container creation.
|
||||
|
||||
### Node.js + PostgreSQL
|
||||
|
||||
**Koel** - Music streaming with PHP + Node.js + PostgreSQL
|
||||
| File | Link |
|
||||
|------|------|
|
||||
| CT (update logic) | [ct/koel.sh](../../ct/koel.sh) |
|
||||
| Install | [install/koel-install.sh](../../install/koel-install.sh) |
|
||||
|
||||
**Actual Budget** - Finance app with npm global install
|
||||
| File | Link |
|
||||
|------|------|
|
||||
| CT (update logic) | [ct/actualbudget.sh](../../ct/actualbudget.sh) |
|
||||
| Install | [install/actualbudget-install.sh](../../install/actualbudget-install.sh) |
|
||||
|
||||
### Python + uv
|
||||
|
||||
**MeTube** - YouTube downloader with Python uv + Node.js + Deno
|
||||
| File | Link |
|
||||
|------|------|
|
||||
| CT (update logic) | [ct/metube.sh](../../ct/metube.sh) |
|
||||
| Install | [install/metube-install.sh](../../install/metube-install.sh) |
|
||||
|
||||
**Endurain** - Fitness tracker with Python uv + PostgreSQL/PostGIS
|
||||
| File | Link |
|
||||
|------|------|
|
||||
| CT (update logic) | [ct/endurain.sh](../../ct/endurain.sh) |
|
||||
| Install | [install/endurain-install.sh](../../install/endurain-install.sh) |
|
||||
|
||||
### PHP + MariaDB/MySQL
|
||||
|
||||
**Wallabag** - Read-it-later with PHP + MariaDB + Redis + Nginx
|
||||
| File | Link |
|
||||
|------|------|
|
||||
| CT (update logic) | [ct/wallabag.sh](../../ct/wallabag.sh) |
|
||||
| Install | [install/wallabag-install.sh](../../install/wallabag-install.sh) |
|
||||
|
||||
**InvoiceNinja** - Invoicing with PHP + MariaDB + Supervisor
|
||||
| File | Link |
|
||||
|------|------|
|
||||
| CT (update logic) | [ct/invoiceninja.sh](../../ct/invoiceninja.sh) |
|
||||
| Install | [install/invoiceninja-install.sh](../../install/invoiceninja-install.sh) |
|
||||
|
||||
**BookStack** - Wiki/Docs with PHP + MariaDB + Apache
|
||||
| File | Link |
|
||||
|------|------|
|
||||
| CT (update logic) | [ct/bookstack.sh](../../ct/bookstack.sh) |
|
||||
| Install | [install/bookstack-install.sh](../../install/bookstack-install.sh) |
|
||||
|
||||
### PHP + SQLite (Simple)
|
||||
|
||||
**Speedtest Tracker** - Speedtest with PHP + SQLite + Nginx
|
||||
| File | Link |
|
||||
|------|------|
|
||||
| CT (update logic) | [ct/speedtest-tracker.sh](../../ct/speedtest-tracker.sh) |
|
||||
| Install | [install/speedtest-tracker-install.sh](../../install/speedtest-tracker-install.sh) |
|
||||
|
||||
---
|
||||
|
||||
## Runtime & Language Setup
|
||||
|
||||
### `setup_nodejs`
|
||||
|
||||
Install Node.js from NodeSource repository.
|
||||
|
||||
```bash
|
||||
# Default (Node.js 22)
|
||||
setup_nodejs
|
||||
|
||||
# Specific version
|
||||
NODE_VERSION="20" setup_nodejs
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
```
|
||||
|
||||
### `setup_go`
|
||||
|
||||
Install Go programming language (latest stable).
|
||||
|
||||
```bash
|
||||
setup_go
|
||||
|
||||
# Use in script
|
||||
setup_go
|
||||
cd /opt/myapp
|
||||
$STD go build -o myapp .
|
||||
```
|
||||
|
||||
### `setup_rust`
|
||||
|
||||
Install Rust via rustup.
|
||||
|
||||
```bash
|
||||
setup_rust
|
||||
|
||||
# Use in script
|
||||
setup_rust
|
||||
source "$HOME/.cargo/env"
|
||||
$STD cargo build --release
|
||||
```
|
||||
|
||||
### `setup_uv`
|
||||
|
||||
Install Python uv package manager (fast pip/venv replacement).
|
||||
|
||||
```bash
|
||||
setup_uv
|
||||
|
||||
# Use in script
|
||||
setup_uv
|
||||
cd /opt/myapp
|
||||
$STD uv sync --locked
|
||||
```
|
||||
|
||||
### `setup_ruby`
|
||||
|
||||
Install Ruby from official repositories.
|
||||
|
||||
```bash
|
||||
setup_ruby
|
||||
```
|
||||
|
||||
### `setup_php`
|
||||
|
||||
Install PHP with configurable modules and FPM/Apache support.
|
||||
|
||||
```bash
|
||||
# Basic PHP
|
||||
setup_php
|
||||
|
||||
# Full configuration
|
||||
PHP_VERSION="8.3" \
|
||||
PHP_MODULE="mysqli,gd,curl,mbstring,xml,zip,ldap" \
|
||||
PHP_FPM="YES" \
|
||||
PHP_APACHE="YES" \
|
||||
setup_php
|
||||
```
|
||||
|
||||
**Environment Variables:**
|
||||
| Variable | Default | Description |
|
||||
|----------|---------|-------------|
|
||||
| `PHP_VERSION` | `8.3` | PHP version to install |
|
||||
| `PHP_MODULE` | `""` | Comma-separated list of modules |
|
||||
| `PHP_FPM` | `NO` | Install PHP-FPM |
|
||||
| `PHP_APACHE` | `NO` | Install Apache module |
|
||||
|
||||
### `setup_composer`
|
||||
|
||||
Install PHP Composer package manager.
|
||||
|
||||
```bash
|
||||
setup_php
|
||||
setup_composer
|
||||
|
||||
# Use in script
|
||||
$STD composer install --no-dev
|
||||
```
|
||||
|
||||
### `setup_java`
|
||||
|
||||
Install Java (OpenJDK).
|
||||
|
||||
```bash
|
||||
# Default (Java 21)
|
||||
setup_java
|
||||
|
||||
# Specific version
|
||||
JAVA_VERSION="17" setup_java
|
||||
JAVA_VERSION="21" setup_java
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Database Setup
|
||||
|
||||
### `setup_mariadb`
|
||||
|
||||
Install MariaDB server.
|
||||
|
||||
```bash
|
||||
setup_mariadb
|
||||
```
|
||||
|
||||
### `setup_mariadb_db`
|
||||
|
||||
Create a MariaDB database and user. Sets `$MARIADB_DB_PASS` with the generated password.
|
||||
|
||||
```bash
|
||||
setup_mariadb
|
||||
MARIADB_DB_NAME="myapp_db" MARIADB_DB_USER="myapp_user" setup_mariadb_db
|
||||
|
||||
# After calling, these variables are available:
|
||||
# $MARIADB_DB_NAME - Database name
|
||||
# $MARIADB_DB_USER - Database user
|
||||
# $MARIADB_DB_PASS - Generated password (saved to ~/[appname].creds)
|
||||
```
|
||||
|
||||
### `setup_mysql`
|
||||
|
||||
Install MySQL server.
|
||||
|
||||
```bash
|
||||
setup_mysql
|
||||
```
|
||||
|
||||
### `setup_postgresql`
|
||||
|
||||
Install PostgreSQL server.
|
||||
|
||||
```bash
|
||||
# Default (PostgreSQL 17)
|
||||
setup_postgresql
|
||||
|
||||
# Specific version
|
||||
PG_VERSION="16" setup_postgresql
|
||||
PG_VERSION="17" setup_postgresql
|
||||
```
|
||||
|
||||
### `setup_postgresql_db`
|
||||
|
||||
Create a PostgreSQL database and user. Sets `$PG_DB_PASS` with the generated password.
|
||||
|
||||
```bash
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="myapp_db" PG_DB_USER="myapp_user" setup_postgresql_db
|
||||
|
||||
# After calling, these variables are available:
|
||||
# $PG_DB_NAME - Database name
|
||||
# $PG_DB_USER - Database user
|
||||
# $PG_DB_PASS - Generated password (saved to ~/[appname].creds)
|
||||
```
|
||||
|
||||
### `setup_mongodb`
|
||||
|
||||
Install MongoDB server.
|
||||
|
||||
```bash
|
||||
setup_mongodb
|
||||
```
|
||||
|
||||
### `setup_clickhouse`
|
||||
|
||||
Install ClickHouse analytics database.
|
||||
|
||||
```bash
|
||||
setup_clickhouse
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## GitHub Release Helpers
|
||||
|
||||
> **Note**: `fetch_and_deploy_gh_release` is the **preferred method** for downloading GitHub releases. It handles version tracking automatically. Only use `get_latest_github_release` if you need the version number separately.
|
||||
|
||||
### `fetch_and_deploy_gh_release`
|
||||
|
||||
**Primary method** for downloading and extracting GitHub releases. Handles version tracking automatically.
|
||||
|
||||
```bash
|
||||
# Basic usage - downloads tarball to /opt/appname
|
||||
fetch_and_deploy_gh_release "appname" "owner/repo"
|
||||
|
||||
# With explicit parameters
|
||||
fetch_and_deploy_gh_release "appname" "owner/repo" "tarball" "latest" "/opt/appname"
|
||||
|
||||
# Pre-built release with specific asset pattern
|
||||
fetch_and_deploy_gh_release "koel" "koel/koel" "prebuild" "latest" "/opt/koel" "koel-*.tar.gz"
|
||||
|
||||
# Clean install (removes old directory first) - used in update_script
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "appname" "owner/repo" "tarball" "latest" "/opt/appname"
|
||||
```
|
||||
|
||||
**Parameters:**
|
||||
| Parameter | Default | Description |
|
||||
|-----------|---------|-------------|
|
||||
| `name` | required | App name (for version tracking) |
|
||||
| `repo` | required | GitHub repo (`owner/repo`) |
|
||||
| `type` | `tarball` | Release type: `tarball`, `zipball`, `prebuild`, `binary` |
|
||||
| `version` | `latest` | Version tag or `latest` |
|
||||
| `dest` | `/opt/[name]` | Destination directory |
|
||||
| `asset_pattern` | `""` | For `prebuild`: glob pattern to match asset (e.g. `app-*.tar.gz`) |
|
||||
|
||||
**Environment Variables:**
|
||||
| Variable | Description |
|
||||
|----------|-------------|
|
||||
| `CLEAN_INSTALL=1` | Remove destination directory before extracting (for updates) |
|
||||
|
||||
### `check_for_gh_release`
|
||||
|
||||
Check if a newer version is available. Returns 0 if update needed, 1 if already at latest. **Use in `update_script()` function.**
|
||||
|
||||
```bash
|
||||
# In update_script() function in ct/appname.sh
|
||||
if check_for_gh_release "appname" "owner/repo"; then
|
||||
msg_info "Updating..."
|
||||
# Stop services, backup, update, restore, start
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "appname" "owner/repo"
|
||||
msg_ok "Updated successfully"
|
||||
fi
|
||||
```
|
||||
|
||||
### `get_latest_github_release`
|
||||
|
||||
Get the latest release version from a GitHub repository. **Only use if you need the version number separately** (e.g., for manual download or display).
|
||||
|
||||
```bash
|
||||
RELEASE=$(get_latest_github_release "owner/repo")
|
||||
echo "Latest version: $RELEASE"
|
||||
```
|
||||
|
||||
# Examples
|
||||
|
||||
fetch_and_deploy_gh_release "bookstack" "BookStackApp/BookStack"
|
||||
fetch_and_deploy_gh_release "appname" "owner/repo" "tarball" "latest" "/opt/myapp"
|
||||
|
||||
````
|
||||
|
||||
**Parameters:**
|
||||
| Parameter | Default | Description |
|
||||
|-----------|---------|-------------|
|
||||
| `name` | required | App name (for version tracking) |
|
||||
| `repo` | required | GitHub repo (`owner/repo`) |
|
||||
| `type` | `tarball` | Release type: `tarball`, `zipball`, `binary` |
|
||||
| `version` | `latest` | Version tag or `latest` |
|
||||
| `dest` | `/opt/[name]` | Destination directory |
|
||||
|
||||
---
|
||||
|
||||
## Tools & Utilities
|
||||
|
||||
### `setup_yq`
|
||||
|
||||
Install yq YAML processor.
|
||||
|
||||
```bash
|
||||
setup_yq
|
||||
|
||||
# Use in script
|
||||
yq '.server.port = 8080' -i config.yaml
|
||||
````
|
||||
|
||||
### `setup_ffmpeg`
|
||||
|
||||
Install FFmpeg with common codecs.
|
||||
|
||||
```bash
|
||||
setup_ffmpeg
|
||||
```
|
||||
|
||||
### `setup_hwaccel`
|
||||
|
||||
Setup GPU hardware acceleration (Intel/AMD/NVIDIA).
|
||||
|
||||
```bash
|
||||
# Only runs if GPU passthrough is detected (/dev/dri, /dev/nvidia0, /dev/kfd)
|
||||
setup_hwaccel
|
||||
```
|
||||
|
||||
### `setup_imagemagick`
|
||||
|
||||
Install ImageMagick 7 from source.
|
||||
|
||||
```bash
|
||||
setup_imagemagick
|
||||
```
|
||||
|
||||
### `setup_docker`
|
||||
|
||||
Install Docker Engine.
|
||||
|
||||
```bash
|
||||
setup_docker
|
||||
```
|
||||
|
||||
### `setup_adminer`
|
||||
|
||||
Install Adminer for database management.
|
||||
|
||||
```bash
|
||||
setup_mariadb
|
||||
setup_adminer
|
||||
|
||||
# Access at http://IP/adminer
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## SSL/TLS
|
||||
|
||||
### `create_self_signed_cert`
|
||||
|
||||
Create a self-signed SSL certificate.
|
||||
|
||||
```bash
|
||||
create_self_signed_cert
|
||||
|
||||
# Creates files at:
|
||||
# /etc/ssl/[appname]/[appname].key
|
||||
# /etc/ssl/[appname]/[appname].crt
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Utility Functions
|
||||
|
||||
### `import_local_ip`
|
||||
|
||||
Set the `$LOCAL_IP` variable with the container's IP address.
|
||||
|
||||
```bash
|
||||
import_local_ip
|
||||
echo "Container IP: $LOCAL_IP"
|
||||
|
||||
# Use in config files
|
||||
sed -i "s/localhost/$LOCAL_IP/g" /opt/myapp/config.yaml
|
||||
```
|
||||
|
||||
### `ensure_dependencies`
|
||||
|
||||
Ensure packages are installed (installs if missing).
|
||||
|
||||
```bash
|
||||
ensure_dependencies "jq" "unzip" "curl"
|
||||
```
|
||||
|
||||
### `msg_info` / `msg_ok` / `msg_error` / `msg_warn`
|
||||
|
||||
Display formatted messages.
|
||||
|
||||
```bash
|
||||
msg_info "Installing application..."
|
||||
# ... do work ...
|
||||
msg_ok "Installation complete"
|
||||
|
||||
msg_warn "Optional feature not available"
|
||||
msg_error "Installation failed"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Package Management
|
||||
|
||||
### `cleanup_lxc`
|
||||
|
||||
Final cleanup function - call at end of install script.
|
||||
|
||||
```bash
|
||||
# At the end of your install script
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc # Handles autoremove, autoclean, cache cleanup
|
||||
```
|
||||
|
||||
### `install_packages_with_retry`
|
||||
|
||||
Install packages with automatic retry on failure.
|
||||
|
||||
```bash
|
||||
install_packages_with_retry "package1" "package2" "package3"
|
||||
```
|
||||
|
||||
### `prepare_repository_setup`
|
||||
|
||||
Prepare system for adding new repositories (cleanup old repos, keyrings).
|
||||
|
||||
```bash
|
||||
prepare_repository_setup "mariadb" "mysql"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Complete Examples
|
||||
|
||||
### Example 1: Node.js App with PostgreSQL (install script)
|
||||
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: YourUsername
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/example/myapp
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y nginx
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
# Setup runtimes and databases FIRST
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="myapp" PG_DB_USER="myapp" setup_postgresql_db
|
||||
import_local_ip
|
||||
|
||||
# Download app using fetch_and_deploy (handles version tracking)
|
||||
fetch_and_deploy_gh_release "myapp" "example/myapp" "tarball" "latest" "/opt/myapp"
|
||||
|
||||
msg_info "Setting up MyApp"
|
||||
cd /opt/myapp
|
||||
$STD npm ci --production
|
||||
msg_ok "Setup MyApp"
|
||||
|
||||
msg_info "Configuring MyApp"
|
||||
cat <<EOF >/opt/myapp/.env
|
||||
DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost/${PG_DB_NAME}
|
||||
HOST=${LOCAL_IP}
|
||||
PORT=3000
|
||||
EOF
|
||||
msg_ok "Configured MyApp"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/myapp.service
|
||||
[Unit]
|
||||
Description=MyApp
|
||||
After=network.target postgresql.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/myapp
|
||||
ExecStart=/usr/bin/node /opt/myapp/server.js
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now myapp
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
```
|
||||
|
||||
### Example 2: Matching Container Script (ct script)
|
||||
|
||||
```bash
|
||||
#!/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: YourUsername
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/example/myapp
|
||||
|
||||
APP="MyApp"
|
||||
var_tags="${var_tags:-webapp}"
|
||||
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/myapp ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
# check_for_gh_release returns true if update available
|
||||
if check_for_gh_release "myapp" "example/myapp"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop myapp
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Creating Backup"
|
||||
cp /opt/myapp/.env /tmp/myapp_env.bak
|
||||
msg_ok "Created Backup"
|
||||
|
||||
# CLEAN_INSTALL=1 removes old dir before extracting
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "myapp" "example/myapp" "tarball" "latest" "/opt/myapp"
|
||||
|
||||
msg_info "Restoring Config & Rebuilding"
|
||||
cp /tmp/myapp_env.bak /opt/myapp/.env
|
||||
rm /tmp/myapp_env.bak
|
||||
cd /opt/myapp
|
||||
$STD npm ci --production
|
||||
msg_ok "Restored Config & Rebuilt"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start myapp
|
||||
msg_ok "Started Service"
|
||||
|
||||
msg_ok "Updated Successfully"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||
```
|
||||
|
||||
### Example 3: PHP App with MariaDB (install script)
|
||||
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y nginx
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
# PHP with FPM and common modules
|
||||
PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="bcmath,curl,gd,intl,mbstring,mysql,xml,zip" setup_php
|
||||
setup_composer
|
||||
setup_mariadb
|
||||
MARIADB_DB_NAME="myapp" MARIADB_DB_USER="myapp" setup_mariadb_db
|
||||
import_local_ip
|
||||
|
||||
# Download pre-built release (with asset pattern)
|
||||
fetch_and_deploy_gh_release "myapp" "example/myapp" "prebuild" "latest" "/opt/myapp" "myapp-*.tar.gz"
|
||||
|
||||
msg_info "Configuring MyApp"
|
||||
cd /opt/myapp
|
||||
cp .env.example .env
|
||||
sed -i "s|APP_URL=.*|APP_URL=http://${LOCAL_IP}|" .env
|
||||
sed -i "s|DB_DATABASE=.*|DB_DATABASE=${MARIADB_DB_NAME}|" .env
|
||||
sed -i "s|DB_USERNAME=.*|DB_USERNAME=${MARIADB_DB_USER}|" .env
|
||||
sed -i "s|DB_PASSWORD=.*|DB_PASSWORD=${MARIADB_DB_PASS}|" .env
|
||||
$STD composer install --no-dev --no-interaction
|
||||
$STD php artisan key:generate --force
|
||||
$STD php artisan migrate --force
|
||||
chown -R www-data:www-data /opt/myapp
|
||||
msg_ok "Configured MyApp"
|
||||
|
||||
# ... nginx config, service creation ...
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
```
|
||||
@@ -65,6 +65,7 @@ bash docs/contribution/setup-fork.sh
|
||||
```
|
||||
|
||||
This will:
|
||||
|
||||
- Auto-detect your GitHub username
|
||||
- Update all documentation links to point to your fork
|
||||
- Create `.git-setup-info` with recommended git workflows
|
||||
@@ -97,6 +98,8 @@ All scripts and configurations must follow our coding standards to ensure consis
|
||||
|
||||
- **[CONTRIBUTING.md](CONTRIBUTING.md)** - Essential coding standards and best practices
|
||||
- **[CODE_AUDIT.md](CODE_AUDIT.md)** - Code review checklist and audit procedures
|
||||
- **[GUIDE.md](GUIDE.md)** - Comprehensive contribution guide
|
||||
- **[HELPER_FUNCTIONS.md](HELPER_FUNCTIONS.md)** - Reference for all tools.func helper functions
|
||||
- **Container Scripts** - `/ct/` templates and guidelines
|
||||
- **Install Scripts** - `/install/` templates and guidelines
|
||||
- **JSON Configurations** - `/json/` structure and format
|
||||
@@ -121,6 +124,7 @@ Before submitting a pull request, ensure your code passes our audit:
|
||||
**See**: [CODE_AUDIT.md](CODE_AUDIT.md) for complete audit checklist
|
||||
|
||||
Key points:
|
||||
|
||||
- Code consistency with existing scripts
|
||||
- Proper error handling
|
||||
- Correct variable naming
|
||||
@@ -145,6 +149,7 @@ Key points:
|
||||
### Community Guides
|
||||
|
||||
See [USER_SUBMITTED_GUIDES.md](USER_SUBMITTED_GUIDES.md) for excellent community-written guides:
|
||||
|
||||
- Home Assistant installation and configuration
|
||||
- Frigate setup on Proxmox
|
||||
- Docker and Portainer installation
|
||||
@@ -156,16 +161,24 @@ See [USER_SUBMITTED_GUIDES.md](USER_SUBMITTED_GUIDES.md) for excellent community
|
||||
Use these templates when creating new scripts:
|
||||
|
||||
```bash
|
||||
# Container script
|
||||
cp ct/example.sh ct/my-app.sh
|
||||
# Container script template
|
||||
cp docs/contribution/templates_ct/AppName.sh ct/my-app.sh
|
||||
|
||||
# Installation script
|
||||
cp install/example-install.sh install/my-app-install.sh
|
||||
# Installation script template
|
||||
cp docs/contribution/templates_install/AppName-install.sh install/my-app-install.sh
|
||||
|
||||
# JSON configuration (if needed)
|
||||
cp json/example.json json/my-app.json
|
||||
# JSON configuration template
|
||||
cp docs/contribution/templates_json/AppName.json frontend/public/json/my-app.json
|
||||
```
|
||||
|
||||
**Template Features:**
|
||||
|
||||
- Updated to match current codebase patterns
|
||||
- Includes all available helper functions from `tools.func`
|
||||
- Examples for Node.js, Python, PHP, Go applications
|
||||
- Database setup examples (MariaDB, PostgreSQL)
|
||||
- Proper service creation and cleanup
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Git Workflow
|
||||
@@ -202,18 +215,21 @@ git push origin feature/my-feature
|
||||
### Before Submitting PR
|
||||
|
||||
1. **Sync with upstream**
|
||||
|
||||
```bash
|
||||
git fetch upstream
|
||||
git rebase upstream/main
|
||||
```
|
||||
|
||||
2. **Test your changes**
|
||||
|
||||
```bash
|
||||
bash ct/my-app.sh
|
||||
# Follow prompts and test the container
|
||||
```
|
||||
|
||||
3. **Check code standards**
|
||||
|
||||
- [ ] Follows template structure
|
||||
- [ ] Proper error handling
|
||||
- [ ] Documentation updated (if needed)
|
||||
|
||||
@@ -1,27 +1,31 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: [YourUserName]
|
||||
# Author: [YourGitHubUsername]
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: [SOURCE_URL]
|
||||
# Source: [SOURCE_URL e.g. https://github.com/example/app]
|
||||
|
||||
# App Default Values
|
||||
APP="[APP_NAME]"
|
||||
# Name of the app (e.g. Google, Adventurelog, Apache-Guacamole"
|
||||
var_tags="[TAGS]"
|
||||
# Tags for Proxmox VE, maximum 2 pcs., no spaces allowed, separated by a semicolon ; (e.g. database | adblock;dhcp)
|
||||
var_cpu="[CPU]"
|
||||
# Number of cores (1-X) (e.g. 4) - default are 2
|
||||
var_ram="[RAM]"
|
||||
# Amount of used RAM in MB (e.g. 2048 or 4096)
|
||||
var_disk="[DISK]"
|
||||
# Amount of used disk space in GB (e.g. 4 or 10)
|
||||
var_os="[OS]"
|
||||
# Default OS (e.g. debian, ubuntu, alpine)
|
||||
var_version="[VERSION]"
|
||||
# Default OS version (e.g. 12 for debian, 24.04 for ubuntu, 3.20 for alpine)
|
||||
var_unprivileged="[UNPRIVILEGED]"
|
||||
# 1 = unprivileged container, 0 = privileged container
|
||||
APP="[AppName]"
|
||||
var_tags="${var_tags:-[category]}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
# =============================================================================
|
||||
# CONFIGURATION GUIDE
|
||||
# =============================================================================
|
||||
# APP - Display name, title case (e.g. "Koel", "Wallabag", "Actual Budget")
|
||||
# var_tags - Max 2 tags, semicolon separated (e.g. "music;streaming", "finance")
|
||||
# var_cpu - CPU cores: 1-4 typical
|
||||
# var_ram - RAM in MB: 512, 1024, 2048, 4096 typical
|
||||
# var_disk - Disk in GB: 4, 6, 8, 10, 20 typical
|
||||
# var_os - OS: debian, ubuntu, alpine
|
||||
# var_version - OS version: 12/13 (debian), 22.04/24.04 (ubuntu), 3.20/3.21 (alpine)
|
||||
# var_unprivileged - 1 = unprivileged (secure, default), 0 = privileged (for docker etc.)
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
@@ -29,51 +33,55 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
# Check if installation is present | -f for file, -d for folder
|
||||
if [[ ! -f [INSTALLATION_CHECK_PATH] ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
# Crawling the new version and checking whether an update is required
|
||||
RELEASE=$(curl -fsSL [RELEASE_URL] | [PARSE_RELEASE_COMMAND])
|
||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||
# Stopping Services
|
||||
msg_info "Stopping $APP"
|
||||
systemctl stop [SERVICE_NAME]
|
||||
msg_ok "Stopped $APP"
|
||||
|
||||
# Creating Backup
|
||||
msg_info "Creating Backup"
|
||||
tar -czf "/opt/${APP}_backup_$(date +%F).tar.gz" [IMPORTANT_PATHS]
|
||||
msg_ok "Backup Created"
|
||||
|
||||
# Execute Update
|
||||
msg_info "Updating $APP to v${RELEASE}"
|
||||
[UPDATE_COMMANDS]
|
||||
msg_ok "Updated $APP to v${RELEASE}"
|
||||
|
||||
# Starting Services
|
||||
msg_info "Starting $APP"
|
||||
systemctl start [SERVICE_NAME]
|
||||
msg_ok "Started $APP"
|
||||
|
||||
# Cleaning up
|
||||
msg_info "Cleaning Up"
|
||||
rm -rf [TEMP_FILES]
|
||||
msg_ok "Cleanup Completed"
|
||||
|
||||
# Last Action
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Update Successful"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
fi
|
||||
# Check if installation exists
|
||||
if [[ ! -d /opt/[appname] ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
# check_for_gh_release returns 0 (true) if update available, 1 (false) if not
|
||||
if check_for_gh_release "[appname]" "[owner/repo]"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop [appname]
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
# Optional: Backup important data before update
|
||||
msg_info "Creating Backup"
|
||||
mkdir -p /tmp/[appname]_backup
|
||||
cp /opt/[appname]/.env /tmp/[appname]_backup/ 2>/dev/null || true
|
||||
cp -r /opt/[appname]/data /tmp/[appname]_backup/ 2>/dev/null || true
|
||||
msg_ok "Created Backup"
|
||||
|
||||
# CLEAN_INSTALL=1 removes old directory before extracting new version
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "[appname]" "[owner/repo]" "tarball" "latest" "/opt/[appname]"
|
||||
|
||||
# Restore configuration and data
|
||||
msg_info "Restoring Data"
|
||||
cp /tmp/[appname]_backup/.env /opt/[appname]/ 2>/dev/null || true
|
||||
cp -r /tmp/[appname]_backup/data/* /opt/[appname]/data/ 2>/dev/null || true
|
||||
rm -rf /tmp/[appname]_backup
|
||||
msg_ok "Restored Data"
|
||||
|
||||
# Optional: Run any post-update commands
|
||||
msg_info "Running Post-Update Tasks"
|
||||
cd /opt/[appname]
|
||||
# Examples:
|
||||
# $STD npm ci --production
|
||||
# $STD php artisan migrate --force
|
||||
# $STD composer install --no-dev
|
||||
msg_ok "Ran Post-Update Tasks"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start [appname]
|
||||
msg_ok "Started Services"
|
||||
|
||||
msg_ok "Updated Successfully"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: [YourUserName]
|
||||
# Author: [YourGitHubUsername]
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: [SOURCE_URL]
|
||||
# Source: [SOURCE_URL e.g. https://github.com/example/app]
|
||||
|
||||
# Import Functions und Setup
|
||||
# Import Functions and Setup
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
@@ -14,70 +14,177 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
# Installing Dependencies with the 3 core dependencies (curl;sudo;mc)
|
||||
# =============================================================================
|
||||
# DEPENDENCIES
|
||||
# =============================================================================
|
||||
# Only install what's actually needed - curl/sudo/mc are already in the base image
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
sudo \
|
||||
mc \
|
||||
[PACKAGE_1] \
|
||||
[PACKAGE_2] \
|
||||
[PACKAGE_3]
|
||||
$STD apt install -y \
|
||||
nginx \
|
||||
build-essential
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
# Template: MySQL Database
|
||||
msg_info "Setting up Database"
|
||||
DB_NAME=[DB_NAME]
|
||||
DB_USER=[DB_USER]
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
$STD mysql -u root -e "CREATE DATABASE $DB_NAME;"
|
||||
$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED WITH mysql_native_password AS PASSWORD('$DB_PASS');"
|
||||
$STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
||||
{
|
||||
echo "${APPLICATION} Credentials"
|
||||
echo "Database User: $DB_USER"
|
||||
echo "Database Password: $DB_PASS"
|
||||
echo "Database Name: $DB_NAME"
|
||||
} >>~/$APP_NAME.creds
|
||||
msg_ok "Set up Database"
|
||||
|
||||
# Temp
|
||||
|
||||
# Setup App
|
||||
msg_info "Setup ${APPLICATION}"
|
||||
RELEASE=$(curl -s https://api.github.com/repos/[REPO]/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
curl -fsSL "https://github.com/[REPO]/archive/refs/tags/${RELEASE}.zip"
|
||||
unzip -q ${RELEASE}.zip
|
||||
mv ${APPLICATION}-${RELEASE}/ /opt/${APPLICATION}
|
||||
# =============================================================================
|
||||
# HELPER FUNCTIONS FROM tools.func
|
||||
# =============================================================================
|
||||
# These functions are available via $FUNCTIONS_FILE_PATH (tools.func)
|
||||
# Call them with optional environment variables for configuration
|
||||
#
|
||||
# --- Runtime & Language Setup ---
|
||||
# NODE_VERSION="22" setup_nodejs # Install Node.js (22, 24)
|
||||
# NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs # With pnpm
|
||||
# PYTHON_VERSION="3.13" setup_uv # Python with uv package manager
|
||||
# setup_go # Install Go (latest)
|
||||
# setup_rust # Install Rust via rustup
|
||||
# setup_ruby # Install Ruby
|
||||
# PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="mysqli,gd" setup_php
|
||||
# PHP_VERSION="8.3" PHP_FPM="YES" PHP_APACHE="YES" PHP_MODULE="bcmath,curl,gd,intl,mbstring,mysql,xml,zip" setup_php
|
||||
# setup_composer # Install PHP Composer
|
||||
# JAVA_VERSION="21" setup_java # Install Java (17, 21)
|
||||
#
|
||||
# --- Database Setup ---
|
||||
# setup_mariadb # Install MariaDB server
|
||||
# MARIADB_DB_NAME="mydb" MARIADB_DB_USER="myuser" setup_mariadb_db
|
||||
# setup_mysql # Install MySQL server
|
||||
# PG_VERSION="17" setup_postgresql # Install PostgreSQL (16, 17)
|
||||
# PG_VERSION="17" PG_MODULES="postgis" setup_postgresql # With extensions
|
||||
# PG_DB_NAME="mydb" PG_DB_USER="myuser" setup_postgresql_db
|
||||
# setup_mongodb # Install MongoDB
|
||||
#
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
msg_ok "Setup ${APPLICATION}"
|
||||
# --- GitHub Release (PREFERRED METHOD) ---
|
||||
# fetch_and_deploy_gh_release "appname" "owner/repo" # Downloads, extracts, tracks version
|
||||
# fetch_and_deploy_gh_release "appname" "owner/repo" "tarball" "latest" "/opt/appname"
|
||||
# fetch_and_deploy_gh_release "appname" "owner/repo" "prebuild" "latest" "/opt/appname" "app-*.tar.gz"
|
||||
#
|
||||
# --- Tools & Utilities ---
|
||||
# import_local_ip # Sets $LOCAL_IP variable (call early!)
|
||||
# setup_ffmpeg # Install FFmpeg with codecs
|
||||
# setup_hwaccel # Setup GPU hardware acceleration
|
||||
# setup_imagemagick # Install ImageMagick 7
|
||||
# setup_docker # Install Docker Engine
|
||||
# setup_adminer # Install Adminer for DB management
|
||||
# create_self_signed_cert # Creates cert in /etc/ssl/[appname]/
|
||||
|
||||
# =============================================================================
|
||||
# EXAMPLE 1: Node.js Application with PostgreSQL
|
||||
# =============================================================================
|
||||
# NODE_VERSION="22" setup_nodejs
|
||||
# PG_VERSION="17" setup_postgresql
|
||||
# PG_DB_NAME="myapp" PG_DB_USER="myapp" setup_postgresql_db
|
||||
# import_local_ip
|
||||
# fetch_and_deploy_gh_release "myapp" "owner/myapp" "tarball" "latest" "/opt/myapp"
|
||||
#
|
||||
# msg_info "Configuring MyApp"
|
||||
# cd /opt/myapp
|
||||
# $STD npm ci
|
||||
# cat <<EOF >/opt/myapp/.env
|
||||
# DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost/${PG_DB_NAME}
|
||||
# HOST=${LOCAL_IP}
|
||||
# PORT=3000
|
||||
# EOF
|
||||
# msg_ok "Configured MyApp"
|
||||
|
||||
# =============================================================================
|
||||
# EXAMPLE 2: Python Application with uv
|
||||
# =============================================================================
|
||||
# PYTHON_VERSION="3.13" setup_uv
|
||||
# import_local_ip
|
||||
# fetch_and_deploy_gh_release "myapp" "owner/myapp" "tarball" "latest" "/opt/myapp"
|
||||
#
|
||||
# msg_info "Setting up MyApp"
|
||||
# cd /opt/myapp
|
||||
# $STD uv sync
|
||||
# cat <<EOF >/opt/myapp/.env
|
||||
# HOST=${LOCAL_IP}
|
||||
# PORT=8000
|
||||
# EOF
|
||||
# msg_ok "Setup MyApp"
|
||||
|
||||
# =============================================================================
|
||||
# EXAMPLE 3: PHP Application with MariaDB + Nginx
|
||||
# =============================================================================
|
||||
# PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="bcmath,curl,gd,intl,mbstring,mysql,xml,zip" setup_php
|
||||
# setup_composer
|
||||
# setup_mariadb
|
||||
# MARIADB_DB_NAME="myapp" MARIADB_DB_USER="myapp" setup_mariadb_db
|
||||
# import_local_ip
|
||||
# fetch_and_deploy_gh_release "myapp" "owner/myapp" "prebuild" "latest" "/opt/myapp" "myapp-*.tar.gz"
|
||||
#
|
||||
# msg_info "Configuring MyApp"
|
||||
# cd /opt/myapp
|
||||
# cp .env.example .env
|
||||
# sed -i "s|APP_URL=.*|APP_URL=http://${LOCAL_IP}|" .env
|
||||
# sed -i "s|DB_DATABASE=.*|DB_DATABASE=${MARIADB_DB_NAME}|" .env
|
||||
# sed -i "s|DB_USERNAME=.*|DB_USERNAME=${MARIADB_DB_USER}|" .env
|
||||
# sed -i "s|DB_PASSWORD=.*|DB_PASSWORD=${MARIADB_DB_PASS}|" .env
|
||||
# $STD composer install --no-dev --no-interaction
|
||||
# chown -R www-data:www-data /opt/myapp
|
||||
# msg_ok "Configured MyApp"
|
||||
|
||||
# =============================================================================
|
||||
# YOUR APPLICATION INSTALLATION
|
||||
# =============================================================================
|
||||
# 1. Setup runtimes and databases FIRST
|
||||
# 2. Call import_local_ip if you need the container IP
|
||||
# 3. Use fetch_and_deploy_gh_release to download the app (handles version tracking)
|
||||
# 4. Configure the application
|
||||
# 5. Create systemd service
|
||||
# 6. Finalize with motd_ssh, customize, cleanup_lxc
|
||||
|
||||
# --- Setup runtimes/databases ---
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
import_local_ip
|
||||
|
||||
# --- Download and install app ---
|
||||
fetch_and_deploy_gh_release "[appname]" "[owner/repo]" "tarball" "latest" "/opt/[appname]"
|
||||
|
||||
msg_info "Setting up [AppName]"
|
||||
cd /opt/[appname]
|
||||
$STD npm ci
|
||||
msg_ok "Setup [AppName]"
|
||||
|
||||
# =============================================================================
|
||||
# CONFIGURATION
|
||||
# =============================================================================
|
||||
|
||||
msg_info "Configuring [AppName]"
|
||||
cat <<EOF >/opt/[appname]/.env
|
||||
HOST=${LOCAL_IP}
|
||||
PORT=8080
|
||||
EOF
|
||||
msg_ok "Configured [AppName]"
|
||||
|
||||
# =============================================================================
|
||||
# SERVICE CREATION
|
||||
# =============================================================================
|
||||
|
||||
# Creating Service (if needed)
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/${APPLICATION}.service
|
||||
cat <<EOF >/etc/systemd/system/[appname].service
|
||||
[Unit]
|
||||
Description=${APPLICATION} Service
|
||||
Description=[AppName] Service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
ExecStart=[START_COMMAND]
|
||||
Restart=always
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/[appname]
|
||||
ExecStart=/usr/bin/node /opt/[appname]/server.js
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now ${APPLICATION}.service
|
||||
systemctl enable -q --now [appname]
|
||||
msg_ok "Created Service"
|
||||
|
||||
# =============================================================================
|
||||
# CLEANUP & FINALIZATION
|
||||
# =============================================================================
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
# Cleanup
|
||||
msg_info "Cleaning up"
|
||||
rm -f ${RELEASE}.zip
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
# cleanup_lxc handles: apt autoremove, autoclean, temp files, bash history
|
||||
cleanup_lxc
|
||||
|
||||
66
docs/contribution/templates_json/AppName.json
generated
66
docs/contribution/templates_json/AppName.json
generated
@@ -1,34 +1,34 @@
|
||||
{
|
||||
"name": "AppName",
|
||||
"slug": "appname",
|
||||
"categories": [
|
||||
0
|
||||
],
|
||||
"date_created": "DATE CREATED",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": DEFAULT-PORT,
|
||||
"documentation": null,
|
||||
"website": "LINK TO WEBSITE",
|
||||
"logo": "LINK TO LOGO",
|
||||
"description": "Description of the app",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/AppName.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
"name": "AppName",
|
||||
"slug": "appname",
|
||||
"categories": [
|
||||
0
|
||||
],
|
||||
"date_created": "DATE CREATED",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": "DEFAULT-PORT",
|
||||
"documentation": null,
|
||||
"website": "LINK TO WEBSITE",
|
||||
"logo": "LINK TO LOGO",
|
||||
"description": "Description of the app",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/AppName.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"script": "ct/bentopdf.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 2048,
|
||||
"ram": 4096,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 4096,
|
||||
"hdd": 20,
|
||||
"os": "Debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"ram": 2048,
|
||||
"hdd": 8,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
@@ -36,6 +36,10 @@
|
||||
{
|
||||
"type": "info",
|
||||
"text": "The file `/etc/sysconfig/CosmosCloud` is optional. If you need custom settings, you can create it yourself."
|
||||
},
|
||||
{
|
||||
"type": "warning",
|
||||
"text": "Requires FUSE support for mergerfs functionality. FUSE is enabled by default during installation."
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -37,11 +37,11 @@
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "After installation, checkout: ´https://github.com/community-scripts/ProxmoxVE/discussions/836´ for useful Debian commands",
|
||||
"text": "For additional Debian commands and tips after installation, checkout: `https://github.com/community-scripts/ProxmoxVE/discussions/836`",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "If you use Cloud-init, checkout after installation: ´https://github.com/community-scripts/ProxmoxVE/discussions/272´",
|
||||
"text": "If you use Cloud-init, checkout cloud-init discussion: `https://github.com/community-scripts/ProxmoxVE/discussions/272`",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "After installation, checkout: ´https://github.com/community-scripts/ProxmoxVE/discussions/836´ for useful Debian commands",
|
||||
"text": "For additional Debian commands and tips after installation, checkout: `https://github.com/community-scripts/ProxmoxVE/discussions/836`",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 1024,
|
||||
"hdd": 5,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 1024,
|
||||
"hdd": 2,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 2048,
|
||||
"hdd": 10,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
{
|
||||
"name": "GoAway",
|
||||
"slug": "goaway",
|
||||
"categories": [
|
||||
5
|
||||
],
|
||||
"date_created": "2025-09-25",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8080,
|
||||
"documentation": "https://github.com/pommee/goaway#configuration-file",
|
||||
"config_path": "/opt/goaway/config/settings.yaml",
|
||||
"website": "https://github.com/pommee/goaway",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/goaway.webp",
|
||||
"description": "Lightweight DNS sinkhole written in Go with a modern dashboard client. Very good looking new alternative to Pi-Hole and Adguard Home.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/goaway.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 1024,
|
||||
"hdd": 4,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Type `cat ~/goaway.creds` to see login credentials.",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -21,7 +21,7 @@
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 512,
|
||||
"hdd": 2,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "To change upload location, edit 'IMMICH_MEDIA_LOCATION' in `/opt/immich/.env`, and create the symlink 'upload' in /opt/immich/app & /opt/immich/app/machine-learning to your new upload location",
|
||||
"text": "To change upload location, edit 'IMMICH_MEDIA_LOCATION' in `/opt/immich/.env`, retarget the symlink 'upload' in /opt/immich/app and /opt/immich/app/machine-learning to your new upload location, copy the default upload location `/opt/immich/upload` and its contents to the new upload location, confirm that the new upload location and its contents are owned by `immich:immich`, and restart the Immich server. See `https://github.com/community-scripts/ProxmoxVE/discussions/5075` for more information.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "InvoiceNinja",
|
||||
"slug": "invoiceninja",
|
||||
"categories": [
|
||||
3
|
||||
25
|
||||
],
|
||||
"date_created": "2025-12-12",
|
||||
"type": "ct",
|
||||
|
||||
35
frontend/public/json/mail-archiver.json
Normal file
35
frontend/public/json/mail-archiver.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "Mail-Archiver",
|
||||
"slug": "mail-archiver",
|
||||
"categories": [
|
||||
7
|
||||
],
|
||||
"date_created": "2025-12-28",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 5000,
|
||||
"documentation": "https://github.com/s1t5/mail-archiver/blob/main/doc/Index.md",
|
||||
"config_path": "/opt/mail-archiver/.env, /opt/mail-archiver/appsettings.json",
|
||||
"website": "https://github.com/s1t5/mail-archiver",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/mail-archiver.webp",
|
||||
"description": "Mail-Archiver is a web application for archiving, searching, and exporting emails from multiple accounts. Featuring folder sync, attachment support, mailbox migration and a dashboard.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/mail-archiver.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 2048,
|
||||
"hdd": 8,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": "admin",
|
||||
"password": "secure123!"
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
35
frontend/public/json/nextcloud-exporter.json
Normal file
35
frontend/public/json/nextcloud-exporter.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "Nextcloud Exporter",
|
||||
"slug": "nextcloud-exporter",
|
||||
"categories": [
|
||||
9
|
||||
],
|
||||
"date_created": "2025-12-27",
|
||||
"type": "addon",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 9205,
|
||||
"documentation": "https://github.com/xperimental/nextcloud-exporter",
|
||||
"website": "https://github.com/xperimental/nextcloud-exporter",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/nextcloud.webp",
|
||||
"config_path": "/etc/nextcloud-exporter.env",
|
||||
"description": "Prometheus exporter for Nextcloud servers. ",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "tools/addon/nextcloud-exporter.sh",
|
||||
"resources": {
|
||||
"cpu": null,
|
||||
"ram": null,
|
||||
"hdd": null,
|
||||
"os": null,
|
||||
"version": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
@@ -11,7 +11,7 @@
|
||||
"interface_port": 80,
|
||||
"documentation": "https://paymenter.org/docs",
|
||||
"website": "https://paymenter.org/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/paymeter.webp",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/paymenter.webp",
|
||||
"config_path": "/opt/paymenter/.env",
|
||||
"description": "Paymenter is an open source webshop solution for hosting companies. It's developed to provide an more easy way to manage your hosting company.",
|
||||
"install_methods": [
|
||||
|
||||
46
frontend/public/json/pihole-exporter.json
Normal file
46
frontend/public/json/pihole-exporter.json
Normal file
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"name": "Pi-Hole Exporter",
|
||||
"slug": "pihole-exporter",
|
||||
"categories": [
|
||||
9
|
||||
],
|
||||
"date_created": "2025-12-21",
|
||||
"type": "addon",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 9617,
|
||||
"documentation": "https://github.com/eko/pihole-exporter",
|
||||
"website": "https://github.com/eko/pihole-exporter",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/pi-hole.webp",
|
||||
"config_path": "/opt/pihole-exporter.env",
|
||||
"description": "A Prometheus exporter for PI-Hole's Raspberry PI ad blocker",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "tools/addon/pihole-exporter.sh",
|
||||
"resources": {
|
||||
"cpu": null,
|
||||
"ram": null,
|
||||
"hdd": null,
|
||||
"os": null,
|
||||
"version": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "alpine",
|
||||
"script": "tools/addon/pihole-exporter.sh",
|
||||
"resources": {
|
||||
"cpu": null,
|
||||
"ram": null,
|
||||
"hdd": null,
|
||||
"os": null,
|
||||
"version": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
@@ -31,5 +31,10 @@
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
"notes": [
|
||||
{
|
||||
"text": "Type `/opt/pocketbase/pocketbase superuser create YOUREMAIL PASSWORD` to create your superuser account.",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -31,5 +31,14 @@
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
"notes": [
|
||||
{
|
||||
"type": "warning",
|
||||
"text": "Configure your Radarr/Sonarr instances in `/root/.config/recyclarr/recyclarr.yml` before the first sync."
|
||||
},
|
||||
{
|
||||
"type": "info",
|
||||
"text": "Automatic daily sync is configured via `/etc/cron.d/recyclarr`. Sync logs are saved to `/root/.config/recyclarr/sync.log`."
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"documentation": "https://github.com/Tautulli/Tautulli/wiki",
|
||||
"website": "https://tautulli.com/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/tautulli.webp",
|
||||
"config_path": "",
|
||||
"config_path": "/opt/Tautulli/config.ini",
|
||||
"description": "Tautulli allows you to monitor and track your Plex Media Server usage, such as viewing statistics and analysis of your media library. It can be used to monitor user activity, get notifications about new media added to your library, and even generate reports on your media usage.",
|
||||
"install_methods": [
|
||||
{
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 1024,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "after installation, checkout: ´https://github.com/community-scripts/ProxmoxVE/discussions/272´",
|
||||
"text": "This VM uses Cloud-init, for more information see cloud-init discussion: `https://github.com/community-scripts/ProxmoxVE/discussions/272`",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "after installation, checkout: ´https://github.com/community-scripts/ProxmoxVE/discussions/272´",
|
||||
"text": "This VM uses Cloud-init, for more information see cloud-init discussion: `https://github.com/community-scripts/ProxmoxVE/discussions/272`",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "after installation, checkout: ´https://github.com/community-scripts/ProxmoxVE/discussions/272´",
|
||||
"text": "This VM uses Cloud-init, for more information see cloud-init discussion: `https://github.com/community-scripts/ProxmoxVE/discussions/272`",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "Valkey",
|
||||
"slug": "valkey",
|
||||
"categories": [
|
||||
9
|
||||
8
|
||||
],
|
||||
"date_created": "2025-11-29",
|
||||
"type": "ct",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,7 +2,7 @@
|
||||
"name": "Zoraxy",
|
||||
"slug": "zoraxy",
|
||||
"categories": [
|
||||
4
|
||||
21
|
||||
],
|
||||
"date_created": "2024-05-02",
|
||||
"type": "ct",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "Zot Registry",
|
||||
"slug": "zot",
|
||||
"categories": [
|
||||
13
|
||||
3
|
||||
],
|
||||
"date_created": "2025-06-06",
|
||||
"type": "ct",
|
||||
@@ -20,7 +20,7 @@
|
||||
"script": "ct/zot-registry.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 2048,
|
||||
"ram": 4096,
|
||||
"hdd": 5,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
|
||||
@@ -39,7 +39,7 @@ function ScriptContent() {
|
||||
|
||||
return (
|
||||
<div className="mb-3">
|
||||
<div className="mt-20 flex sm:px-4 xl:px-0">
|
||||
<div className="mt-20 flex gap-4 sm:px-4 xl:px-0">
|
||||
<div className="hidden sm:flex">
|
||||
<Sidebar
|
||||
items={links}
|
||||
@@ -49,17 +49,15 @@ function ScriptContent() {
|
||||
setSelectedCategory={setSelectedCategory}
|
||||
/>
|
||||
</div>
|
||||
<div className="mx-4 w-full sm:mx-0 sm:ml-4">
|
||||
{selectedScript && item
|
||||
? (
|
||||
<ScriptItem item={item} setSelectedScript={setSelectedScript} />
|
||||
)
|
||||
: (
|
||||
<div className="flex w-full flex-col gap-5">
|
||||
<LatestScripts items={links} />
|
||||
<MostViewedScripts items={links} />
|
||||
</div>
|
||||
)}
|
||||
<div className="px-4 w-full sm:max-w-[calc(100%-350px-16px)]">
|
||||
{selectedScript && item ? (
|
||||
<ScriptItem item={item} setSelectedScript={setSelectedScript} />
|
||||
) : (
|
||||
<div className="flex w-full flex-col gap-5">
|
||||
<LatestScripts items={links} />
|
||||
<MostViewedScripts items={links} />
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -13,16 +13,7 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Backrest"
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/garethgeorge/backrest/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
temp_file=$(mktemp)
|
||||
mkdir -p /opt/backrest/{bin,config,data}
|
||||
curl -fsSL "https://github.com/garethgeorge/backrest/releases/download/v${RELEASE}/backrest_Linux_x86_64.tar.gz" -o "$temp_file"
|
||||
tar xzf $temp_file -C /opt/backrest/bin
|
||||
chmod +x /opt/backrest/bin/backrest
|
||||
rm -f "$temp_file"
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
msg_ok "Installed Backrest"
|
||||
fetch_and_deploy_gh_release "backrest" "garethgeorge/backrest" "prebuild" "latest" "/opt/backrest/bin" "backrest_Linux_x86_64.tar.gz"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/backrest.service
|
||||
@@ -32,7 +23,6 @@ After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
ExecStart=/opt/backrest/bin/backrest
|
||||
Environment="BACKREST_PORT=9898"
|
||||
Environment="BACKREST_CONFIG=/opt/backrest/config/config.json"
|
||||
@@ -48,4 +38,3 @@ msg_ok "Created Service"
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
|
||||
|
||||
@@ -17,14 +17,14 @@ update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
redis-server \
|
||||
nginx \
|
||||
lsb-release \
|
||||
libvips
|
||||
redis-server \
|
||||
nginx \
|
||||
lsb-release \
|
||||
libvips
|
||||
#php-{ffi,opcache,redis,zip,pdo-sqlite,bcmath,pdo,curl,dom,fpm}
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PHP_VERSION="8.3" PHP_FPM=YES PHP_MODULE="ffi,opcache,redis,zip,pdo-sqlite,bcmath,pdo,curl,dom,fpm" setup_php
|
||||
PHP_VERSION="8.4" PHP_FPM=YES PHP_MODULE="ffi,opcache,redis,zip,pdo-sqlite,bcmath,pdo,curl,dom,fpm" setup_php
|
||||
setup_composer
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary"
|
||||
@@ -41,14 +41,14 @@ msg_info "Configure MeiliSearch"
|
||||
curl -fsSL https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml -o /etc/meilisearch.toml
|
||||
MASTER_KEY=$(openssl rand -base64 12)
|
||||
sed -i \
|
||||
-e 's|^env =.*|env = "production"|' \
|
||||
-e "s|^# master_key =.*|master_key = \"$MASTER_KEY\"|" \
|
||||
-e 's|^db_path =.*|db_path = "/var/lib/meilisearch/data"|' \
|
||||
-e 's|^dump_dir =.*|dump_dir = "/var/lib/meilisearch/dumps"|' \
|
||||
-e 's|^snapshot_dir =.*|snapshot_dir = "/var/lib/meilisearch/snapshots"|' \
|
||||
-e 's|^# no_analytics = true|no_analytics = true|' \
|
||||
-e 's|^http_addr =.*|http_addr = "127.0.0.1:7700"|' \
|
||||
/etc/meilisearch.toml
|
||||
-e 's|^env =.*|env = "production"|' \
|
||||
-e "s|^# master_key =.*|master_key = \"$MASTER_KEY\"|" \
|
||||
-e 's|^db_path =.*|db_path = "/var/lib/meilisearch/data"|' \
|
||||
-e 's|^dump_dir =.*|dump_dir = "/var/lib/meilisearch/dumps"|' \
|
||||
-e 's|^snapshot_dir =.*|snapshot_dir = "/var/lib/meilisearch/snapshots"|' \
|
||||
-e 's|^# no_analytics = true|no_analytics = true|' \
|
||||
-e 's|^http_addr =.*|http_addr = "127.0.0.1:7700"|' \
|
||||
/etc/meilisearch.toml
|
||||
msg_ok "Configured MeiliSearch"
|
||||
|
||||
msg_info "Creating MeiliSearch service"
|
||||
@@ -77,11 +77,11 @@ MeiliSearch_API_KEY=$(curl -s -X GET 'http://127.0.0.1:7700/keys' -H "Authorizat
|
||||
MeiliSearch_API_KEY_UID=$(curl -s -X GET 'http://127.0.0.1:7700/keys' -H "Authorization: Bearer $MASTER_KEY" | grep -o '"uid":"[^"]*"' | head -n 1 | sed 's/"uid":"//;s/"//')
|
||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
||||
sed -i -e "s|^APP_URL=|APP_URL=http://${LOCAL_IP}/bar/|" \
|
||||
-e "s|^MEILISEARCH_HOST=|MEILISEARCH_HOST=http://127.0.0.1:7700|" \
|
||||
-e "s|^MEILISEARCH_KEY=|MEILISEARCH_KEY=${MASTER_KEY}|" \
|
||||
-e "s|^MEILISEARCH_API_KEY=|MEILISEARCH_API_KEY=${MeiliSearch_API_KEY}|" \
|
||||
-e "s|^MEILISEARCH_API_KEY_UID=|MEILISEARCH_API_KEY_UID=${MeiliSearch_API_KEY_UID}|" \
|
||||
/opt/bar-assistant/.env
|
||||
-e "s|^MEILISEARCH_HOST=|MEILISEARCH_HOST=http://127.0.0.1:7700|" \
|
||||
-e "s|^MEILISEARCH_KEY=|MEILISEARCH_KEY=${MASTER_KEY}|" \
|
||||
-e "s|^MEILISEARCH_API_KEY=|MEILISEARCH_API_KEY=${MeiliSearch_API_KEY}|" \
|
||||
-e "s|^MEILISEARCH_API_KEY_UID=|MEILISEARCH_API_KEY_UID=${MeiliSearch_API_KEY_UID}|" \
|
||||
/opt/bar-assistant/.env
|
||||
$STD composer install --no-interaction
|
||||
$STD php artisan key:generate
|
||||
touch storage/bar-assistant/database.ba3.sqlite
|
||||
|
||||
@@ -13,11 +13,7 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Beszel"
|
||||
mkdir -p /opt/beszel
|
||||
curl -fsSL "https://github.com/henrygd/beszel/releases/latest/download/beszel_$(uname -s)_$(uname -m | sed -e 's/x86_64/amd64/' -e 's/armv6l/arm/' -e 's/armv7l/arm/' -e 's/aarch64/arm64/').tar.gz" | tar -xz -O beszel | tee /opt/beszel/beszel >/dev/null
|
||||
chmod +x /opt/beszel/beszel
|
||||
msg_ok "Installed Beszel"
|
||||
fetch_and_deploy_gh_release "beszel" "henrygd/beszel" "prebuild" "latest" "/opt/beszel" "beszel_linux_amd64.tar.gz"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/beszel-hub.service
|
||||
|
||||
@@ -17,7 +17,7 @@ setup_hwaccel
|
||||
setup_imagemagick
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
$STD apt install -y \
|
||||
assimp-utils \
|
||||
calibre \
|
||||
dcraw \
|
||||
|
||||
@@ -14,38 +14,23 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
$STD apt install -y \
|
||||
ca-certificates \
|
||||
openssl \
|
||||
snapraid \
|
||||
avahi-daemon \
|
||||
fdisk
|
||||
fdisk \
|
||||
mergerfs \
|
||||
unzip
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Install mergerfs"
|
||||
MERGERFS_VERSION="2.40.2"
|
||||
curl -fsSL "https://github.com/trapexit/mergerfs/releases/download/${MERGERFS_VERSION}/mergerfs_${MERGERFS_VERSION}.debian-bullseye_amd64.deb" -o "mergerfs_${MERGERFS_VERSION}.debian-bullseye_amd64.deb"
|
||||
$STD dpkg -i "mergerfs_${MERGERFS_VERSION}.debian-bullseye_amd64.deb" || $STD apt-get install -f -y
|
||||
rm "mergerfs_${MERGERFS_VERSION}.debian-bullseye_amd64.deb"
|
||||
msg_ok "Installed mergerfs"
|
||||
setup_docker
|
||||
fetch_and_deploy_gh_release "cosmos" "azukaar/Cosmos-Server" "prebuild" "latest" "/opt/cosmos" "cosmos-cloud-*-amd64.zip"
|
||||
|
||||
msg_info "Install Docker"
|
||||
curl -fsSL https://get.docker.com -o get-docker.sh
|
||||
$STD sh get-docker.sh
|
||||
rm get-docker.sh
|
||||
msg_ok "Installed Docker"
|
||||
|
||||
msg_info "Install Cosmos"
|
||||
mkdir -p /opt/cosmos
|
||||
LATEST_RELEASE=$(curl -fsSL https://api.github.com/repos/azukaar/Cosmos-Server/releases/latest | grep "tag_name" | cut -d '"' -f 4)
|
||||
ZIP_FILE="cosmos-cloud-${LATEST_RELEASE#v}-amd64.zip"
|
||||
curl -fsSL "https://github.com/azukaar/Cosmos-Server/releases/download/${LATEST_RELEASE}/${ZIP_FILE}" -o "/opt/cosmos/${ZIP_FILE}"
|
||||
msg_info "Setting up Cosmos"
|
||||
cd /opt/cosmos
|
||||
$STD unzip -o -q "${ZIP_FILE}"
|
||||
LATEST_RELEASE_NO_V=${LATEST_RELEASE#v}
|
||||
mv /opt/cosmos/cosmos-cloud-${LATEST_RELEASE_NO_V}/* /opt/cosmos/
|
||||
rmdir /opt/cosmos/cosmos-cloud-${LATEST_RELEASE_NO_V}
|
||||
chmod +x /opt/cosmos/cosmos
|
||||
rm -f "/opt/cosmos/cosmos-cloud-${LATEST_RELEASE#v}-amd64.zip"
|
||||
msg_ok "Installed Cosmos"
|
||||
msg_ok "Set up Cosmos"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/cosmos.service
|
||||
|
||||
@@ -26,11 +26,8 @@ $STD apt-get install -y \
|
||||
nginx
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Configure Application"
|
||||
var_project_name="default"
|
||||
read -r -p "${TAB3}Type the assembly name of the project: " var_project_name
|
||||
echo "Target assembly: '${var_project_name}'"
|
||||
msg_ok "Application Configured"
|
||||
|
||||
msg_info "Setting up FTP Server"
|
||||
useradd ftpuser
|
||||
|
||||
@@ -14,7 +14,6 @@ network_check
|
||||
update_os
|
||||
|
||||
setup_hwaccel
|
||||
|
||||
fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-x64.tar.gz"
|
||||
fetch_and_deploy_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg" "prebuild" "latest" "/opt/ErsatzTV-ffmpeg" "*-linux64-gpl-7.1.tar.xz"
|
||||
|
||||
|
||||
@@ -16,24 +16,10 @@ update_os
|
||||
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_MODULE="mysql" setup_php
|
||||
setup_composer
|
||||
setup_mariadb
|
||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
||||
|
||||
msg_info "Setting up database"
|
||||
DB_NAME=firefly
|
||||
DB_USER=firefly
|
||||
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';"
|
||||
mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
||||
{
|
||||
echo "Firefly-Credentials"
|
||||
echo "Firefly Database User: $DB_USER"
|
||||
echo "Firefly Database Password: $DB_PASS"
|
||||
echo "Firefly Database Name: $DB_NAME"
|
||||
} >>~/firefly.creds
|
||||
msg_ok "Set up database"
|
||||
|
||||
MARIADB_DB_NAME="firefly" MARIADB_DB_USER="firefly" setup_mariadb_db
|
||||
import_local_ip
|
||||
fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii" "prebuild" "latest" "/opt/firefly" "FireflyIII-*.zip"
|
||||
fetch_and_deploy_gh_release "dataimporter" "firefly-iii/data-importer" "prebuild" "latest" "/opt/firefly/dataimporter" "DataImporter-v*.tar.gz"
|
||||
|
||||
msg_info "Configuring Firefly III (Patience)"
|
||||
chown -R www-data:www-data /opt/firefly
|
||||
@@ -41,22 +27,19 @@ chmod -R 775 /opt/firefly/storage
|
||||
cd /opt/firefly
|
||||
cp .env.example .env
|
||||
sed -i "s/DB_HOST=.*/DB_HOST=localhost/" /opt/firefly/.env
|
||||
sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=$DB_PASS/" /opt/firefly/.env
|
||||
sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=$MARIADB_DB_PASS/" /opt/firefly/.env
|
||||
$STD composer install --no-dev --no-plugins --no-interaction
|
||||
$STD php artisan firefly:upgrade-database
|
||||
$STD php artisan firefly:correct-database
|
||||
$STD php artisan firefly:report-integrity
|
||||
$STD php artisan firefly:laravel-passport-keys
|
||||
IMPORTER_RELEASE=$(curl -fsSL https://api.github.com/repos/firefly-iii/data-importer/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
|
||||
mkdir -p /opt/firefly/dataimporter
|
||||
cd /opt
|
||||
curl -fsSL "https://github.com/firefly-iii/data-importer/releases/download/v${IMPORTER_RELEASE}/DataImporter-v${IMPORTER_RELEASE}.tar.gz" -o "DataImporter-v${IMPORTER_RELEASE}.tar.gz"
|
||||
tar -xzf "DataImporter-v${IMPORTER_RELEASE}.tar.gz" -C /opt/firefly/dataimporter
|
||||
msg_ok "Configured Firefly III"
|
||||
|
||||
msg_info "Configuring Data Importer"
|
||||
cp /opt/firefly/dataimporter/.env.example /opt/firefly/dataimporter/.env
|
||||
sed -i "s#FIREFLY_III_URL=#FIREFLY_III_URL=http://${LOCAL_IP}#g" /opt/firefly/dataimporter/.env
|
||||
chown -R www-data:www-data /opt/firefly
|
||||
rm -rf "/opt/DataImporter-v${IMPORTER_RELEASE}.tar.gz"
|
||||
msg_ok "Configured Firefly III"
|
||||
msg_ok "Configured Data Importer"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/apache2/sites-available/firefly.conf
|
||||
@@ -69,6 +52,8 @@ cat <<EOF >/etc/apache2/sites-available/firefly.conf
|
||||
AllowOverride All
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
RedirectMatch 301 ^/dataimporter$ /dataimporter/
|
||||
|
||||
Alias /dataimporter/ /opt/firefly/dataimporter/public/
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ Group=git
|
||||
WorkingDirectory=/var/lib/forgejo/
|
||||
ExecStart=/usr/local/bin/forgejo web --config /etc/forgejo/app.ini
|
||||
Restart=always
|
||||
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/forgejo
|
||||
Environment=USER=git HOME=/home/git FORGEJO_WORK_DIR=/var/lib/forgejo
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Slaviša Arežina (tremor021)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/pommee/goaway
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y net-tools
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
fetch_and_deploy_gh_release "goaway" "pommee/goaway" "prebuild" "latest" "/opt/goaway" "goaway_*_linux_amd64.tar.gz"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/goaway.service
|
||||
[Unit]
|
||||
Description=GoAway Service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/goaway
|
||||
ExecStart=/opt/goaway/goaway
|
||||
StandardOutput=file:/var/log/goaway.log
|
||||
StandardError=inherit
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now goaway
|
||||
sleep 10
|
||||
for i in {1..30}; do
|
||||
ADMIN_PASS=$(awk -F': ' "/Randomly generated admin password:/ {print \$2; exit}" /var/log/goaway.log)
|
||||
[ -n "$ADMIN_PASS" ] && break
|
||||
sleep 1
|
||||
done
|
||||
{
|
||||
echo "GoAway Credentials"
|
||||
echo "Admin User: admin"
|
||||
echo "Admin Password: $ADMIN_PASS"
|
||||
} >>~/goaway.creds
|
||||
msg_ok "Service Created"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -43,7 +43,7 @@ ExecStart=/usr/bin/php artisan serve --port 7990 --host 0.0.0.0
|
||||
TimeoutStopSec=30
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target"
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now heimdall
|
||||
cd /opt/Heimdall
|
||||
|
||||
@@ -18,17 +18,14 @@ $STD apt install -y \
|
||||
redis-server \
|
||||
nginx \
|
||||
gettext \
|
||||
openssl \
|
||||
musl-dev
|
||||
openssl
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
|
||||
setup_nodejs
|
||||
fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr" "prebuild" "latest" "/opt/homarr" "build-amd64.tar.gz"
|
||||
fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr" "prebuild" "latest" "/opt/homarr" "build-debian-amd64.tar.gz"
|
||||
|
||||
msg_info "Installing Homarr"
|
||||
# fix musl issues because homarr compiles on alpine not debian soure: https://github.com/alexander-akhmetov/python-telegram/issues/3
|
||||
ln -s /usr/lib/x86_64-linux-musl/libc.so /lib/libc.musl-x86_64.so.1
|
||||
mkdir -p /opt/homarr_db
|
||||
touch /opt/homarr_db/db.sqlite
|
||||
SECRET_ENCRYPTION_KEY="$(openssl rand -hex 32)"
|
||||
@@ -65,6 +62,8 @@ ReadWritePaths=-/appdata/redis -/var/lib/redis -/var/log/redis -/var/run/redis -
|
||||
EOF
|
||||
cat <<EOF >/etc/systemd/system/homarr.service
|
||||
[Unit]
|
||||
Requires=redis-server.service
|
||||
After=redis-server.service
|
||||
Description=Homarr Service
|
||||
After=network.target
|
||||
|
||||
@@ -79,8 +78,9 @@ WantedBy=multi-user.target
|
||||
EOF
|
||||
chmod +x /opt/homarr/run.sh
|
||||
systemctl daemon-reload
|
||||
systemctl enable -q --now redis-server && sleep 5
|
||||
systemctl enable -q --now redis-server
|
||||
systemctl enable -q --now homarr
|
||||
systemctl disable -q --now nginx
|
||||
msg_ok "Created Services"
|
||||
|
||||
motd_ssh
|
||||
|
||||
@@ -296,7 +296,7 @@ GEO_DIR="${INSTALL_DIR}/geodata"
|
||||
mkdir -p "$INSTALL_DIR"
|
||||
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache}
|
||||
|
||||
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v2.4.0" "$SRC_DIR"
|
||||
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v2.4.1" "$SRC_DIR"
|
||||
|
||||
msg_info "Installing ${APPLICATION} (patience)"
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ msg_info "Setting up InfluxDB Repository"
|
||||
setup_deb822_repo \
|
||||
"influxdata" \
|
||||
"https://repos.influxdata.com/influxdata-archive.key" \
|
||||
"https://repos.influxdata.com/$(get_os_info id)" \
|
||||
"https://repos.influxdata.com/debian" \
|
||||
"stable"
|
||||
msg_ok "Set up InfluxDB Repository"
|
||||
|
||||
@@ -29,17 +29,15 @@ else
|
||||
fi
|
||||
|
||||
msg_info "Installing InfluxDB"
|
||||
$STD apt update
|
||||
if [[ $INFLUX == "2" ]]; then
|
||||
$STD apt install -y influxdb2
|
||||
else
|
||||
$STD apt install -y influxdb
|
||||
curl -fsSL "https://dl.influxdata.com/chronograf/releases/chronograf_1.10.8_amd64.deb" -o "/chronograf_1.10.8_amd64.deb"
|
||||
$STD dpkg -i chronograf_1.10.8_amd64.deb
|
||||
rm -rf /chronograf_1.10.8_amd64.deb
|
||||
download_file "https://dl.influxdata.com/chronograf/releases/chronograf_1.10.8_amd64.deb" "${HOME}/chronograf_1.10.8_amd64.deb"
|
||||
$STD dpkg -i "${HOME}/chronograf_1.10.8_amd64.deb"
|
||||
rm -rf "${HOME}/chronograf_1.10.8_amd64.deb"
|
||||
fi
|
||||
rm /etc/apt/sources.list.d/influxdata.list
|
||||
$STD systemctl enable --now influxdb
|
||||
systemctl enable -q --now influxdb
|
||||
msg_ok "Installed InfluxDB"
|
||||
|
||||
read -r -p "${TAB3}Would you like to add Telegraf? <y/N> " prompt
|
||||
|
||||
@@ -15,8 +15,22 @@ update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
nginx \
|
||||
supervisor
|
||||
nginx \
|
||||
supervisor \
|
||||
libnss3 \
|
||||
libatk1.0-0 \
|
||||
libatk-bridge2.0-0 \
|
||||
libcups2 \
|
||||
libdrm2 \
|
||||
libxkbcommon0 \
|
||||
libxcomposite1 \
|
||||
libxdamage1 \
|
||||
libxfixes3 \
|
||||
libxrandr2 \
|
||||
libgbm1 \
|
||||
libasound2 \
|
||||
libpango-1.0-0 \
|
||||
libcairo2
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
setup_mariadb
|
||||
@@ -75,6 +89,12 @@ chown -R www-data:www-data /opt/invoiceninja
|
||||
chmod -R 775 /opt/invoiceninja/storage /opt/invoiceninja/bootstrap/cache
|
||||
msg_ok "Configured InvoiceNinja"
|
||||
|
||||
msg_info "Downloading Chromium for PDF Generation"
|
||||
cd /opt/invoiceninja
|
||||
$STD ./vendor/bin/snappdf download
|
||||
chown -R www-data:www-data /opt/invoiceninja/vendor/beganovich/snappdf/versions
|
||||
msg_ok "Downloaded Chromium for PDF Generation"
|
||||
|
||||
msg_info "Setting up Database"
|
||||
cd /opt/invoiceninja
|
||||
$STD php artisan config:clear
|
||||
@@ -83,6 +103,7 @@ $STD php artisan route:clear
|
||||
$STD php artisan view:clear
|
||||
$STD php artisan migrate --force
|
||||
$STD php artisan db:seed --force
|
||||
$STD php artisan ninja:post-update
|
||||
$STD php artisan optimize
|
||||
msg_ok "Set up Database"
|
||||
|
||||
|
||||
@@ -21,6 +21,18 @@ cd /opt/jotty
|
||||
$STD yarn --frozen-lockfile
|
||||
$STD yarn next telemetry disable
|
||||
$STD yarn build
|
||||
|
||||
[ -d "public" ] && cp -r public .next/standalone/
|
||||
[ -d "howto" ] && cp -r howto .next/standalone/
|
||||
mkdir -p .next/standalone/.next
|
||||
cp -r .next/static .next/standalone/.next/
|
||||
|
||||
mv .next/standalone /tmp/jotty_standalone
|
||||
rm -rf * .next .git .gitignore .yarn
|
||||
mv /tmp/jotty_standalone/* .
|
||||
mv /tmp/jotty_standalone/.[!.]* . 2>/dev/null || true
|
||||
rm -rf /tmp/jotty_standalone
|
||||
|
||||
mkdir -p data/{users,checklists,notes}
|
||||
|
||||
cat <<EOF >/opt/jotty/.env
|
||||
@@ -55,7 +67,7 @@ After=network.target
|
||||
[Service]
|
||||
WorkingDirectory=/opt/jotty
|
||||
EnvironmentFile=/opt/jotty/.env
|
||||
ExecStart=yarn start
|
||||
ExecStart=/usr/bin/node server.js
|
||||
Restart=on-abnormal
|
||||
|
||||
[Install]
|
||||
|
||||
@@ -19,45 +19,42 @@ $STD apt install -y \
|
||||
build-essential
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
PG_VERSION="16" setup_postgresql
|
||||
RUST_CRATES="monolith" setup_rust
|
||||
|
||||
msg_info "Setting up PostgreSQL DB"
|
||||
DB_NAME=linkwardendb
|
||||
DB_USER=linkwarden
|
||||
DB_PASS="$(openssl rand -base64 18 | tr -d '/' | cut -c1-13)"
|
||||
SECRET_KEY="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)"
|
||||
$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 "Linkwarden-Credentials"
|
||||
echo "Linkwarden Database User: $DB_USER"
|
||||
echo "Linkwarden Database Password: $DB_PASS"
|
||||
echo "Linkwarden Database Name: $DB_NAME"
|
||||
echo "Linkwarden Secret: $SECRET_KEY"
|
||||
} >>~/linkwarden.creds
|
||||
msg_ok "Set up PostgreSQL DB"
|
||||
PG_DB_NAME="linkwardendb" PG_DB_USER="linkwarden" setup_postgresql_db
|
||||
|
||||
read -r -p "${TAB3}Would you like to add Adminer? <y/N> " prompt
|
||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
setup_adminer
|
||||
fi
|
||||
|
||||
msg_info "Installing Linkwarden (Patience)"
|
||||
fetch_and_deploy_gh_release "linkwarden" "linkwarden/linkwarden"
|
||||
|
||||
msg_info "Installing Linkwarden (Patience)"
|
||||
SECRET_KEY="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)"
|
||||
echo "Linkwarden Secret: $SECRET_KEY" >>"${HOME}/linkwarden.creds"
|
||||
cd /opt/linkwarden
|
||||
yarn_ver="4.12.0"
|
||||
if [[ -f package.json ]]; then
|
||||
pkg_manager=$(jq -r '.packageManager // empty' package.json 2>/dev/null || true)
|
||||
if [[ -n "$pkg_manager" && "$pkg_manager" == yarn@* ]]; then
|
||||
yarn_spec="${pkg_manager#yarn@}"
|
||||
yarn_ver="${yarn_spec%%+*}"
|
||||
fi
|
||||
fi
|
||||
if command -v corepack >/dev/null 2>&1; then
|
||||
$STD corepack enable
|
||||
$STD corepack prepare "yarn@${yarn_ver}" --activate || true
|
||||
fi
|
||||
$STD yarn
|
||||
$STD npx playwright install-deps
|
||||
$STD yarn playwright install
|
||||
$STD npx playwright install
|
||||
IP=$(hostname -I | awk '{print $1}')
|
||||
cat <<EOF >/opt/linkwarden/.env
|
||||
NEXTAUTH_SECRET=${SECRET_KEY}
|
||||
NEXTAUTH_URL=http://${IP}:3000
|
||||
DATABASE_URL=postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}
|
||||
DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}
|
||||
EOF
|
||||
$STD yarn prisma:generate
|
||||
$STD yarn web:build
|
||||
|
||||
68
install/mail-archiver-install.sh
Normal file
68
install/mail-archiver-install.sh
Normal 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://github.com/s1t5/mail-archiver
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
setup_deb822_repo \
|
||||
"microsoft" \
|
||||
"https://packages.microsoft.com/keys/microsoft-2025.asc" \
|
||||
"https://packages.microsoft.com/debian/13/prod/" \
|
||||
"trixie" \
|
||||
"main"
|
||||
$STD apt install -y \
|
||||
dotnet-sdk-10.0 \
|
||||
aspnetcore-runtime-8.0
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="mailarchiver_db" PG_DB_USER="mailarchiver" setup_postgresql_db
|
||||
fetch_and_deploy_gh_release "mail-archiver" "s1t5/mail-archiver" "tarball"
|
||||
|
||||
msg_info "Setting up Mail-Archiver"
|
||||
mv /opt/mail-archiver /opt/mail-archiver-build
|
||||
cd /opt/mail-archiver-build
|
||||
$STD dotnet restore
|
||||
$STD dotnet publish -c Release -o /opt/mail-archiver
|
||||
cp /opt/mail-archiver-build/appsettings.json /opt/mail-archiver/appsettings.json
|
||||
sed -i "s|\"DefaultConnection\": \"[^\"]*\"|\"DefaultConnection\": \"Host=localhost;Database=mailarchiver_db;Username=mailarchiver;Password=$PG_DB_PASS\"|" /opt/mail-archiver/appsettings.json
|
||||
rm -rf /opt/mail-archiver-build
|
||||
|
||||
cat <<EOF >/opt/mail-archiver/.env
|
||||
ASPNETCORE_URLS=http://+:5000
|
||||
ASPNETCORE_ENVIRONMENT=Production
|
||||
TZ=UTC
|
||||
EOF
|
||||
msg_ok "Setup Mail-Archiver"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/mail-archiver.service
|
||||
[Unit]
|
||||
Description=Mail-Archiver Service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
EnvironmentFile=/opt/mail-archiver/.env
|
||||
WorkingDirectory=/opt/mail-archiver
|
||||
ExecStart=/usr/bin/dotnet MailArchiver.dll
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now mail-archiver
|
||||
msg_info "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -49,7 +49,7 @@ export PUBLIC_VERSION=""
|
||||
export PUBLIC_API_URL=""
|
||||
export BASE_PATH="/web"
|
||||
cd /opt/mediamanager/web
|
||||
$STD npm ci --no-fund --no-audit
|
||||
$STD npm install --no-fund --no-audit
|
||||
$STD npm run build
|
||||
mkdir -p {"$MM_DIR"/web,"$MEDIA_DIR","$CONFIG_DIR"}
|
||||
cp -r build "$FRONTEND_FILES_DIR"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user