Compare commits

..

113 Commits

Author SHA1 Message Date
community-scripts-pr-app[bot]
edfbc82048 Update CHANGELOG.md (#3792) 2025-04-09 19:42:20 +02:00
community-scripts-pr-app[bot]
2c36a13af1 Update CHANGELOG.md (#3789)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-09 19:36:06 +02:00
CanbiZ
607ab48f79 paperless_fix_granian_env (#3790) 2025-04-09 19:31:27 +02:00
CanbiZ
30fbcb5ba8 quickfix broken vms 2025-04-09 19:29:12 +02:00
CanbiZ
ef81b82d87 Update debian-vm.sh 2025-04-09 19:17:26 +02:00
CanbiZ
f1a29c1ebb revert & fix missing git push for vms 2025-04-09 18:59:56 +02:00
CanbiZ
404ae5dbcf fix pvecheck 2025-04-09 18:50:27 +02:00
CanbiZ
84478921e7 quickfix vm's for pve 8.4 2025-04-09 18:35:17 +02:00
CanbiZ
2b8d10a4d9 quickfix_quotes 2025-04-09 18:27:42 +02:00
community-scripts-pr-app[bot]
fefdcbbad1 Update CHANGELOG.md (#3786)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-09 17:17:45 +02:00
Tobias
6c239ceb56 Update linkwarden.json (#3783) 2025-04-09 17:10:51 +02:00
CanbiZ
b520c0ab5f Paperless-NGX: remove gunicorn, use python3 for webserver (#3785) 2025-04-09 17:08:34 +02:00
community-scripts-pr-app[bot]
d329666a88 Update CHANGELOG.md (#3780)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-09 17:00:25 +02:00
CanbiZ
874b61d4d5 harmonize pve versions check & vm vars (#3779)
* harmonize proxmox ve version check

* Update openwrt.sh

* push 0-4 and 1-4
2025-04-09 16:13:01 +02:00
community-scripts-pr-app[bot]
a536c4a5a0 Update CHANGELOG.md (#3776)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-09 15:40:30 +02:00
quentinvnk
e4ef18ccfc HomeAssistantOS: allow Proxmox version 8.4 (#3773)
* Allow Proxmox version 8.4

* Update haos-vm.sh

* fix typo

---------

Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-04-09 15:31:45 +02:00
CanbiZ
d949e836b5 core: Removal of OS/Version Selection from Advanced Settings (#3771)
* core: remove os selection in advanced_settings

* debian/ubuntu vars
2025-04-09 15:30:54 +02:00
CanbiZ
ed29ba3409 core: a few path corrections (#3769) 2025-04-09 14:13:18 +02:00
community-scripts-pr-app[bot]
495da1bf98 Update versions.json (#3760) 2025-04-09 14:05:50 +02:00
community-scripts-pr-app[bot]
cc17c2618d Update CHANGELOG.md (#3767) 2025-04-09 14:05:29 +02:00
CanbiZ
3dffd02f08 core: move misc scripts to structured addon/pve paths | Refactor JSON Editor & Script Mapping (#3765)
* Move Scripts to Tools / Add-Ons

* fix json editor slug generating

* update type in jsons

* remove wrong method

* move copy-data to tools
2025-04-09 13:10:02 +02:00
Slaviša Arežina
f2f10376ac Add xmlsec as dependency (#3762) 2025-04-09 12:34:38 +02:00
community-scripts-pr-app[bot]
3ab2ecc3ef Update CHANGELOG.md (#3754)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-08 17:05:37 +02:00
community-scripts-pr-app[bot]
5413498759 Update CHANGELOG.md (#3752)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-08 17:05:03 +02:00
community-scripts-pr-app[bot]
44a944f4b3 Update .app files (#3753)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-04-08 17:04:43 +02:00
CanbiZ
bf1966f578 Alpine-PostgreSQL (#3751) 2025-04-08 17:03:21 +02:00
community-scripts-pr-app[bot]
3504cda21c Update CHANGELOG.md (#3750)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-08 16:00:38 +02:00
Michel Roegl-Brunner
6c1b5d3144 Update meilisearch.json (#3749) 2025-04-08 15:54:20 +02:00
community-scripts-pr-app[bot]
146b0fcb3f Update CHANGELOG.md (#3747)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-08 15:52:02 +02:00
CanbiZ
aa3d6f4f8b quickfix: remove wrong comma 2025-04-08 15:50:44 +02:00
juronja
542f93437a Alpine-Wireguard: Fix for sysctl and ip_forward (#3744)
* moved ip forwarding to wireguard install and removed silent before echo command, testing if this was a bug

* Adding $STD before echo command

* Update install/alpine-wireguard-install.sh

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>

---------

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2025-04-08 15:41:27 +02:00
community-scripts-pr-app[bot]
9ef7ad5d2a Update CHANGELOG.md (#3737)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-08 14:57:44 +02:00
community-scripts-pr-app[bot]
7ab476e034 Update versions.json (#3742)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-08 14:56:25 +02:00
Danny Ellis
4ce9551f60 Updating to 4GB with higher old heap size (#3730) 2025-04-08 10:31:00 +02:00
CanbiZ
efcd660e55 TriliumNext: fix dump-db (#3741) 2025-04-08 10:27:56 +02:00
Slaviša Arežina
125f843b19 Added logging to service file (#3738) 2025-04-08 09:35:17 +02:00
CanbiZ
a5acfd25f6 Alpine-MariaDB: better handling of adminer installation (#3739)
* Update alpine-mariadb-install.sh

* remove spaces
2025-04-08 09:29:56 +02:00
CanbiZ
895edccf28 quickfix: remove echo in alpine-mariadb 2025-04-08 08:44:10 +02:00
community-scripts-pr-app[bot]
5a74f2970b Update versions.json (#3734)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-08 07:54:26 +02:00
community-scripts-pr-app[bot]
9a906d35e2 Update CHANGELOG.md (#3726)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-07 18:56:50 +02:00
CanbiZ
97674cfae7 Alpine-MariaDB: Fix Install Service startup (#3701) 2025-04-07 17:51:12 +01:00
John Sturgeon
89ae467364 Changed the category of Channels DVR and NextPVR (#3729)
This resolves #3727
2025-04-07 17:36:20 +02:00
CanbiZ
42a7c00bca Kimai: bump php to 8.4 (#3724) 2025-04-07 16:23:23 +02:00
community-scripts-pr-app[bot]
d28368b596 Update versions.json (#3725)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-07 14:25:14 +02:00
community-scripts-pr-app[bot]
9786bfb55e Update CHANGELOG.md (#3722)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-07 13:02:37 +02:00
CanbiZ
26ea046ba2 Redesign: Zabbix, get always latest version (#3720) 2025-04-07 12:50:37 +02:00
community-scripts-pr-app[bot]
061c7ebd2e Update CHANGELOG.md (#3710) 2025-04-07 11:41:56 +01:00
Slaviša Arežina
5313bb0103 Zitadel: Fix release tarball crawling (#3716) 2025-04-07 11:41:10 +01:00
CanbiZ
86577a0d0d Actual: Increase RAM and add heap-space var for nodejs (#3713)
* Actual: Increase RAM and add heap-space var for nodejs

* Update actualbudget.json

* increase hdd size

* node options
2025-04-07 09:06:46 +02:00
community-scripts-pr-app[bot]
4ae0352304 Update .app files (#3715)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-04-07 07:52:33 +02:00
community-scripts-pr-app[bot]
0c202066f5 Update versions.json (#3711)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-07 07:51:52 +02:00
community-scripts-pr-app[bot]
9bac1398b2 Update date in json (#3714)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-04-07 07:51:31 +02:00
CanbiZ
251f3c411d Breaking: Hoarder > Karakeep (#3699)
* Breaking: Hoarder > Karakeep

* json

* Update hoarder.sh

* formatting
2025-04-07 07:50:45 +02:00
community-scripts-pr-app[bot]
5b73662d9c Update CHANGELOG.md (#3697)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-06 22:42:25 +02:00
Bram Suurd
4ef88cd051 Implement FAQ component and integrate it into the main page (#3709)
* Implement FAQ component and integrate it into the main page; update package-lock.json for development dependencies.

* Adjust Footer component padding for improved layout consistency

* Update FAQ section div to include an ID for improved accessibility and navigation

* Adjust ScriptAccordion max height for improved layout consistency

* Remove default value from Accordion in FAQ component

* Refactor FAQ items for clarity and consistency; update titles and content for improved user understanding.

* Refactor FAQ component to use index as key for Accordion items; remove IDs from FAQ_Items for simplified mapping.
2025-04-06 22:28:04 +02:00
CanbiZ
427ce771d7 Actual: Add git dependency & change yarn commands (#3703) 2025-04-06 16:00:08 +02:00
CanbiZ
c08ebc48e8 Pelican-Panel: Fix PHP 8.4 Repository (#3700) 2025-04-06 15:48:27 +02:00
community-scripts-pr-app[bot]
421248ccf3 Update versions.json (#3702)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-06 14:07:16 +02:00
community-scripts-pr-app[bot]
b395a1846c Update CHANGELOG.md (#3686) 2025-04-06 10:17:23 +01:00
community-scripts-pr-app[bot]
c2893f3edf Update versions.json (#3693) 2025-04-06 10:17:05 +01:00
community-scripts-pr-app[bot]
00f91843ec Update CHANGELOG.md (#3677) 2025-04-05 17:01:57 +01:00
community-scripts-pr-app[bot]
5451047f44 Update versions.json (#3679) 2025-04-05 17:01:36 +01:00
dependabot[bot]
d8848464be Bump vite from 6.2.4 to 6.2.5 in /frontend (#3668) 2025-04-05 17:01:20 +01:00
community-scripts-pr-app[bot]
019e1ac8a0 Update versions.json (#3674)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-05 08:46:31 +02:00
community-scripts-pr-app[bot]
d4b67e0c7e Update CHANGELOG.md (#3673)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-05 08:45:54 +02:00
community-scripts-pr-app[bot]
112fa215fb Update CHANGELOG.md (#3670)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-05 01:10:52 +02:00
community-scripts-pr-app[bot]
f6a77ec41f Update .app files (#3671)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-04-05 01:10:38 +02:00
community-scripts-pr-app[bot]
71a37368b0 Update date in json (#3672)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-04-05 01:10:26 +02:00
push-app-to-main[bot]
214d21f91e meilisearch (#3638)
* 'Add new script'

* change license

* change license

* Update install/meilisearch-install.sh

Co-authored-by: Bas van den Berg <74251551+bvdberg01@users.noreply.github.com>

* Update frontend/public/json/meilisearch.json

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
Co-authored-by: Bas van den Berg <74251551+bvdberg01@users.noreply.github.com>
Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2025-04-05 00:22:49 +02:00
Bas van den Berg
8b1cdd1f3f Pelican Panel: Bump php to 8.4 (#3669) 2025-04-04 22:48:15 +02:00
community-scripts-pr-app[bot]
2a24d53b54 Update CHANGELOG.md (#3658)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-04 17:40:47 +02:00
CanbiZ
51692da70f Pterodactyl: Pump Php to 8.4 (#3655) 2025-04-04 17:40:02 +02:00
CanbiZ
481156275b Caddy: add git for xcaddy (#3657) 2025-04-04 17:39:37 +02:00
CanbiZ
23c01141db core: fix raw path (#3656) 2025-04-04 16:05:12 +02:00
community-scripts-pr-app[bot]
109235f720 Update versions.json (#3659)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-04 14:23:16 +02:00
community-scripts-pr-app[bot]
4912f76bc5 Update versions.json (#3652)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-04 13:45:12 +02:00
community-scripts-pr-app[bot]
b62a673ff2 Update CHANGELOG.md (#3649)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-03 23:07:47 +02:00
verbumfeit
f0c59f8cba Correct URL (#3648) 2025-04-03 23:06:24 +02:00
community-scripts-pr-app[bot]
56093ed951 Update CHANGELOG.md (#3643)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-03 16:15:53 +02:00
CanbiZ
e55f3f77fd VM: show progress bar while downloading (#3634) 2025-04-03 15:01:23 +01:00
community-scripts-pr-app[bot]
c231e56302 Update CHANGELOG.md (#3641)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-03 14:13:34 +02:00
community-scripts-pr-app[bot]
69c1a64855 Update versions.json (#3642)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-03 14:13:10 +02:00
Albert Ribera
01ff0a2dc7 Update prowlarr.sh (#3640)
Fixed a typo in a link
2025-04-03 13:05:05 +02:00
community-scripts-pr-app[bot]
8884514ab6 Update CHANGELOG.md (#3639)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-03 12:27:24 +02:00
Slaviša Arežina
f5e9d761c9 Fix typo (#3636) 2025-04-03 11:17:21 +02:00
CanbiZ
3d4ba758a9 slskd: fix typo fore config note (#3633) 2025-04-03 10:04:15 +02:00
community-scripts-pr-app[bot]
7539566dc5 Update CHANGELOG.md (#3632)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-03 07:59:40 +02:00
Slaviša Arežina
5b0cfaab83 *Arr: Move Arr apps to github release crawling and provide update functionality (#3625)
* Move Arr apps to github release crawling

* Update website, show updateable
2025-04-03 07:58:43 +02:00
dependabot[bot]
a5dd2b3176 Bump next from 15.2.3 to 15.2.4 in /frontend (#3628)
Bumps [next](https://github.com/vercel/next.js) from 15.2.3 to 15.2.4.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v15.2.3...v15.2.4)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 15.2.4
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-03 07:52:24 +02:00
community-scripts-pr-app[bot]
b6593792c0 Update CHANGELOG.md (#3622) 2025-04-03 06:49:11 +01:00
Slaviša Arežina
47fb1c03de Fixes (#3624) 2025-04-03 06:44:05 +01:00
Slaviša Arežina
9c7858601e BookStack: Fix path to downloaded release file (#3627) 2025-04-03 06:43:35 +01:00
community-scripts-pr-app[bot]
ce3ed8a1c1 Update versions.json (#3629) 2025-04-03 06:42:25 +01:00
Bram Suurd
138d0c48b1 Update Footer.tsx to redirect to frontend page instead of home page (#3621) 2025-04-02 20:12:43 +02:00
Bram Suurd
763a58aeb9 fix missing favicon (#3620) 2025-04-02 20:12:09 +02:00
Slaviša Arežina
629b9df30a CrowdSec: Update install URL and script refresh (#3604)
* Update install URL and script refresh

* Fine, have it your way
2025-04-02 19:23:58 +02:00
community-scripts-pr-app[bot]
b8ad603a75 Update date in json (#3617) 2025-04-02 18:13:32 +01:00
community-scripts-pr-app[bot]
49c3eb83c6 Update .app files (#3619) 2025-04-02 18:13:16 +01:00
community-scripts-pr-app[bot]
9a559f869a Update CHANGELOG.md (#3618) 2025-04-02 18:13:02 +01:00
push-app-to-main[bot]
bb6e947ff6 'Add new script' (#3610) 2025-04-02 17:58:50 +01:00
community-scripts-pr-app[bot]
7cb2320ccf Update CHANGELOG.md (#3615) 2025-04-02 17:58:30 +01:00
community-scripts-pr-app[bot]
c1f816a57c Update .app files (#3616)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-04-02 18:57:00 +02:00
CanbiZ
6260be8425 Alpine-Wireguard (#3611) 2025-04-02 17:53:21 +01:00
CanbiZ
bcbe73f99f Authelia: fix incorrect rights for email.txt (#3612) 2025-04-02 17:52:38 +01:00
community-scripts-pr-app[bot]
71c337ed86 Update CHANGELOG.md (#3609) 2025-04-02 14:43:31 +01:00
community-scripts-pr-app[bot]
f9618cf24c Update versions.json (#3608) 2025-04-02 14:42:34 +01:00
CanbiZ
b0d81f3b22 Photoprism: harmonize curl (#3601) 2025-04-02 14:42:14 +01:00
community-scripts-pr-app[bot]
dd4af32587 Update CHANGELOG.md (#3596) 2025-04-02 09:08:23 +01:00
CanbiZ
08911cfb19 UI-Fix: verbose without useless space in header (#3598) 2025-04-02 09:07:25 +01:00
community-scripts-pr-app[bot]
86ba0c8976 Update versions.json (#3591)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-02 09:16:05 +02:00
Thalatam Sainath
8fd300e340 Fix link in clean-lxcs.sh (#3593) 2025-04-02 07:29:18 +02:00
Slaviša Arežina
059a3d0bcf Fix dependencies (#3589) 2025-04-02 07:20:07 +02:00
Slaviša Arežina
ea9f19d5f4 More fixes (#3587) 2025-04-02 07:19:50 +02:00
181 changed files with 3985 additions and 3079 deletions

View File

@@ -99,9 +99,9 @@ to\
Example: `https://raw.githubusercontent.com/tremor021/PromoxVE/refs/heads/testbranch`
Also you need to change:\
`https://github.com/community-scripts/ProxmoxVE/raw/main`\
`https://raw.githubusercontent.com/community-scripts/ProxmoxVE/raw/main`\
to\
`https://github.com/[USER]/[REPOSITORY]/raw/[BRANCH]`\
`https://raw.githubusercontent.com/[USER]/[REPOSITORY]/raw/[BRANCH]`\
in `misc/install.func` in order for `update` shell command to work.\
These changes are only while writing and testing your scripts. Before opening a Pull Request, you should change all above mentioned paths in `misc/build.func`, `misc/install.func` and `ct/AppName.sh` to point to the original paths.

View File

@@ -14,6 +14,179 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment.
## 2025-04-09
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Paperless-NGX: Extend Granian Service Env [@MickLesk](https://github.com/MickLesk) ([#3790](https://github.com/community-scripts/ProxmoxVE/pull/3790))
- Paperless-NGX: remove gunicorn, use python3 for webserver [@MickLesk](https://github.com/MickLesk) ([#3785](https://github.com/community-scripts/ProxmoxVE/pull/3785))
- HomeAssistantOS: allow Proxmox version 8.4 [@quentinvnk](https://github.com/quentinvnk) ([#3773](https://github.com/community-scripts/ProxmoxVE/pull/3773))
- Tandoor: Add xmlsec as dependency [@tremor021](https://github.com/tremor021) ([#3762](https://github.com/community-scripts/ProxmoxVE/pull/3762))
- #### 🔧 Refactor
- harmonize pve versions check & vm vars [@MickLesk](https://github.com/MickLesk) ([#3779](https://github.com/community-scripts/ProxmoxVE/pull/3779))
### 🧰 Maintenance
- #### 💥 Breaking Changes
- core: Removal of OS/Version Selection from Advanced Settings [@MickLesk](https://github.com/MickLesk) ([#3771](https://github.com/community-scripts/ProxmoxVE/pull/3771))
- core: move misc scripts to structured addon/pve paths | Refactor JSON Editor & Script Mapping [@MickLesk](https://github.com/MickLesk) ([#3765](https://github.com/community-scripts/ProxmoxVE/pull/3765))
## 2025-04-08
### 🆕 New Scripts
- Alpine-PostgreSQL [@MickLesk](https://github.com/MickLesk) ([#3751](https://github.com/community-scripts/ProxmoxVE/pull/3751))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Alpine-Wireguard: Fix for sysctl and ip_forward [@juronja](https://github.com/juronja) ([#3744](https://github.com/community-scripts/ProxmoxVE/pull/3744))
- TriliumNext: fix dump-db [@MickLesk](https://github.com/MickLesk) ([#3741](https://github.com/community-scripts/ProxmoxVE/pull/3741))
- Actual: Reduce RAM to 4GB and old space to 3072MB [@dannyellis](https://github.com/dannyellis) ([#3730](https://github.com/community-scripts/ProxmoxVE/pull/3730))
- #### ✨ New Features
- Alpine-MariaDB: better handling of adminer installation [@MickLesk](https://github.com/MickLesk) ([#3739](https://github.com/community-scripts/ProxmoxVE/pull/3739))
- Paperless-GPT: Add logging to service file [@tremor021](https://github.com/tremor021) ([#3738](https://github.com/community-scripts/ProxmoxVE/pull/3738))
### 🌐 Website
- #### 📝 Script Information
- Meilisearch: Fix Typo [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#3749](https://github.com/community-scripts/ProxmoxVE/pull/3749))
## 2025-04-07
### 🆕 New Scripts
- Breaking: Hoarder > Karakeep [@MickLesk](https://github.com/MickLesk) ([#3699](https://github.com/community-scripts/ProxmoxVE/pull/3699))
### 🚀 Updated Scripts
- Actual: Increase RAM and add heap-space var for nodejs [@MickLesk](https://github.com/MickLesk) ([#3713](https://github.com/community-scripts/ProxmoxVE/pull/3713))
- #### 🐞 Bug Fixes
- Alpine-MariaDB: Fix Install Service startup [@MickLesk](https://github.com/MickLesk) ([#3701](https://github.com/community-scripts/ProxmoxVE/pull/3701))
- Zitadel: Fix release tarball crawling [@tremor021](https://github.com/tremor021) ([#3716](https://github.com/community-scripts/ProxmoxVE/pull/3716))
- #### ✨ New Features
- Kimai: bump php to 8.4 [@MickLesk](https://github.com/MickLesk) ([#3724](https://github.com/community-scripts/ProxmoxVE/pull/3724))
- #### 🔧 Refactor
- Refactor: Zabbix, get always latest version [@MickLesk](https://github.com/MickLesk) ([#3720](https://github.com/community-scripts/ProxmoxVE/pull/3720))
### 🌐 Website
- #### 📝 Script Information
- Changed the category of Channels DVR and NextPVR [@johnsturgeon](https://github.com/johnsturgeon) ([#3729](https://github.com/community-scripts/ProxmoxVE/pull/3729))
## 2025-04-06
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Actual: Add git dependency & change yarn commands [@MickLesk](https://github.com/MickLesk) ([#3703](https://github.com/community-scripts/ProxmoxVE/pull/3703))
- Pelican-Panel: Fix PHP 8.4 Repository [@MickLesk](https://github.com/MickLesk) ([#3700](https://github.com/community-scripts/ProxmoxVE/pull/3700))
### 🌐 Website
- #### 🐞 Bug Fixes
- Implement FAQ component and integrate it into the main page [@BramSuurdje](https://github.com/BramSuurdje) ([#3709](https://github.com/community-scripts/ProxmoxVE/pull/3709))
## 2025-04-05
### 🌐 Website
- Bump vite from 6.2.4 to 6.2.5 in /frontend [@dependabot[bot]](https://github.com/dependabot[bot]) ([#3668](https://github.com/community-scripts/ProxmoxVE/pull/3668))
## 2025-04-04
### 🆕 New Scripts
- meilisearch [@MickLesk](https://github.com/MickLesk) ([#3638](https://github.com/community-scripts/ProxmoxVE/pull/3638))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Pelican Panel: Bump php to 8.4 [@bvdberg01](https://github.com/bvdberg01) ([#3669](https://github.com/community-scripts/ProxmoxVE/pull/3669))
- Pterodactyl: Bump php to 8.4 [@MickLesk](https://github.com/MickLesk) ([#3655](https://github.com/community-scripts/ProxmoxVE/pull/3655))
- #### ✨ New Features
- Caddy: add git for xcaddy [@MickLesk](https://github.com/MickLesk) ([#3657](https://github.com/community-scripts/ProxmoxVE/pull/3657))
### 🧰 Maintenance
- #### 💾 Core
- core: fix raw path [@MickLesk](https://github.com/MickLesk) ([#3656](https://github.com/community-scripts/ProxmoxVE/pull/3656))
## 2025-04-03
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Prowlarr: Fix Typo in URL (update_function) [@ribera96](https://github.com/ribera96) ([#3640](https://github.com/community-scripts/ProxmoxVE/pull/3640))
- Prowlarr: Fix typo in release URL [@tremor021](https://github.com/tremor021) ([#3636](https://github.com/community-scripts/ProxmoxVE/pull/3636))
- GoMFT: Fix the node_modules deletion command [@tremor021](https://github.com/tremor021) ([#3624](https://github.com/community-scripts/ProxmoxVE/pull/3624))
- BookStack: Fix path to downloaded release file [@tremor021](https://github.com/tremor021) ([#3627](https://github.com/community-scripts/ProxmoxVE/pull/3627))
- #### ✨ New Features
- VM: show progress bar while downloading [@MickLesk](https://github.com/MickLesk) ([#3634](https://github.com/community-scripts/ProxmoxVE/pull/3634))
- *Arr: Move Arr apps to github release crawling and provide update functionality [@tremor021](https://github.com/tremor021) ([#3625](https://github.com/community-scripts/ProxmoxVE/pull/3625))
### 🧰 Maintenance
- #### 📂 Github
- Correct URL in contributing docs [@verbumfeit](https://github.com/verbumfeit) ([#3648](https://github.com/community-scripts/ProxmoxVE/pull/3648))
### 🌐 Website
- Bump next from 15.2.3 to 15.2.4 in /frontend [@dependabot[bot]](https://github.com/dependabot[bot]) ([#3628](https://github.com/community-scripts/ProxmoxVE/pull/3628))
- #### 📝 Script Information
- slskd: fix typo for config note [@MickLesk](https://github.com/MickLesk) ([#3633](https://github.com/community-scripts/ProxmoxVE/pull/3633))
## 2025-04-02
### 🆕 New Scripts
- openziti-tunnel [@emoscardini](https://github.com/emoscardini) ([#3610](https://github.com/community-scripts/ProxmoxVE/pull/3610))
- Alpine-Wireguard [@MickLesk](https://github.com/MickLesk) ([#3611](https://github.com/community-scripts/ProxmoxVE/pull/3611))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Authelia: fix incorrect rights for email.txt [@MickLesk](https://github.com/MickLesk) ([#3612](https://github.com/community-scripts/ProxmoxVE/pull/3612))
- Photoprism: harmonize curl [@MickLesk](https://github.com/MickLesk) ([#3601](https://github.com/community-scripts/ProxmoxVE/pull/3601))
- Fix link in clean-lxcs.sh [@thalatamsainath](https://github.com/thalatamsainath) ([#3593](https://github.com/community-scripts/ProxmoxVE/pull/3593))
- Fileflows: Add ImageMagick dependecy [@tremor021](https://github.com/tremor021) ([#3589](https://github.com/community-scripts/ProxmoxVE/pull/3589))
- General fixes for several scripts [@tremor021](https://github.com/tremor021) ([#3587](https://github.com/community-scripts/ProxmoxVE/pull/3587))
### 🧰 Maintenance
- #### 💾 Core
- UI-Fix: verbose without useless space in header [@MickLesk](https://github.com/MickLesk) ([#3598](https://github.com/community-scripts/ProxmoxVE/pull/3598))
## 2025-04-01
### 🆕 New Scripts

View File

@@ -8,8 +8,8 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
APP="Actual Budget"
var_tags="finance"
var_cpu="2"
var_ram="2048"
var_disk="4"
var_ram="4096"
var_disk="7"
var_os="debian"
var_version="12"
var_unprivileged="1"
@@ -35,13 +35,20 @@ function update_script() {
systemctl stop actualbudget
msg_ok "${APP} Stopped"
if ! command -v git &>/dev/null; then
msg_info "Installing git"
$STD apt-get update
$STD apt-get install -y git
msg_ok "Installed git"
fi
msg_info "Updating ${APP} to ${RELEASE}"
cd /tmp
curl -fsSL -O https://github.com/actualbudget/actual/archive/refs/tags/v${RELEASE}.tar.gz
cd /tmp || exit
curl -fsSL "https://github.com/actualbudget/actual/archive/refs/tags/v${RELEASE}.tar.gz" -o "v${RELEASE}.tar.gz"
mv /opt/actualbudget /opt/actualbudget_bak
tar -xzf "v${RELEASE}.tar.gz"
mv actual-${RELEASE} /opt/actualbudget
mv "actual-${RELEASE}" /opt/actualbudget
mkdir -p /opt/actualbudget-data/{server-files,upload,migrate,user-files,migrations,config}
for dir in server-files .migrate user-files migrations; do
@@ -76,8 +83,11 @@ ACTUAL_HTTPS_KEY=/opt/actualbudget/selfhost.key
ACTUAL_HTTPS_CERT=/opt/actualbudget/selfhost.crt
EOF
fi
cd /opt/actualbudget
$STD yarn workspaces focus @actual-app/sync-server --production
cd /opt/actualbudget || exit
export NODE_OPTIONS="--max_old_space_size=3072"
$STD yarn install
$STD yarn run build:server
#$STD yarn workspaces focus @actual-app/sync-server --production
echo "${RELEASE}" >/opt/actualbudget_version.txt
msg_ok "Updated ${APP}"

46
ct/alpine-postgresql.sh Normal file
View File

@@ -0,0 +1,46 @@
#!/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: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://postgresql.org/
APP="Alpine-PostgreSQL"
var_tags="${var_tags:-alpine;database}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-256}"
var_disk="${var_disk:-1}"
var_os="${var_os:-alpine}"
var_version="${var_version:-3.21}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
msg_info "Updating Alpine Packages"
$STD apk update
$STD apk upgrade
msg_ok "Updated Alpine Packages"
msg_info "Updating PostgreSQL"
$STD apk upgrade postgresql postgresql-contrib
msg_ok "Updated PostgreSQL"
msg_info "Restarting PostgreSQL"
$STD rc-service postgresql restart
msg_ok "Restarted PostgreSQL"
exit 0
}
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 IP:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}${IP}:5432${CL}"

50
ct/alpine-wireguard.sh Normal file
View File

@@ -0,0 +1,50 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.wireguard.com/
APP="Alpine-Wireguard"
var_tags="${var_tags:-alpine;vpn}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-256}"
var_disk="${var_disk:-1}"
var_os="${var_os:-alpine}"
var_version="${var_version:-3.21}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
msg_info "Updating Alpine Packages"
$STD apk update
$STD apk upgrade
msg_ok "Updated Alpine Packages"
msg_info "update wireguard-tools"
$STD apk add --no-cache --upgrade wireguard-tools
msg_ok "wireguard-tools updated"
if [[ -d /etc/wgdashboard/src ]]; then
msg_info "update WGDashboard"
cd /etc/wgdashboard/src || exit
$STD echo "y" | ./wgd.sh update
$STD ./wgd.sh start
msg_ok "WGDashboard updated"
fi
exit 0
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} WGDashboard Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:10086${CL}"

View File

@@ -36,13 +36,13 @@ function update_script() {
msg_info "Updating ${APP} to v${RELEASE}"
mv /opt/bookstack /opt/bookstack-backup
curl -fsSL "https://github.com/BookStackApp/BookStack/archive/refs/tags/v${RELEASE}.zip" -o "/opt/BookStack-${RELEASE}.zip"
unzip -q /opt/v${RELEASE}.zip -d /opt
mv /opt/BookStack-${RELEASE} /opt/bookstack
unzip -q "/opt/BookStack-${RELEASE}.zip" -d /opt
mv "/opt/BookStack-${RELEASE}" /opt/bookstack
cp /opt/bookstack-backup/.env /opt/bookstack/.env
cp -r /opt/bookstack-backup/public/uploads/* /opt/bookstack/public/uploads/ || true
cp -r /opt/bookstack-backup/storage/uploads/* /opt/bookstack/storage/uploads/ || true
cp -r /opt/bookstack-backup/themes/* /opt/bookstack/themes/ || true
cd /opt/bookstack
cd /opt/bookstack || exit
export COMPOSER_ALLOW_SUPERUSER=1
$STD composer install --no-dev
$STD php artisan migrate --force
@@ -59,7 +59,7 @@ function update_script() {
msg_info "Cleaning Up"
rm -rf /opt/bookstack-backup
rm -rf /opt/v${RELEASE}.zip
rm -rf "/opt/BookStack-${RELEASE}.zip"
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else

View File

@@ -6,13 +6,13 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
# Source: https://www.debian.org/
APP="Debian"
var_tags="os"
var_cpu="1"
var_ram="512"
var_disk="2"
var_os="debian"
var_version="12"
var_unprivileged="1"
var_tags="${var_tags:-os}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-2}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables

View File

@@ -33,9 +33,9 @@ function update_script() {
msg_ok "Stopped ${APP}"
msg_info "Updating ${APP}"
$STD curl -fsSL "https://github.com/MediaBrowser/Emby.Releases/releases/download/${LATEST}/emby-server-deb_${LATEST}_amd64.deb" -O
$STD dpkg -i emby-server-deb_${LATEST}_amd64.deb
rm emby-server-deb_${LATEST}_amd64.deb
$STD curl -fsSL "https://github.com/MediaBrowser/Emby.Releases/releases/download/${LATEST}/emby-server-deb_${LATEST}_amd64.deb" -o "emby-server-deb_${LATEST}_amd64.deb"
$STD dpkg -i "emby-server-deb_${LATEST}_amd64.deb"
rm "emby-server-deb_${LATEST}_amd64.deb"
msg_ok "Updated ${APP}"
msg_info "Starting ${APP}"

View File

@@ -33,12 +33,12 @@ function update_script() {
fi
if [[ ! -f "/usr/bin/node" ]]; then
mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
curl -fsSL "https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key" | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
$STD apt-get update
$STD apt-get install -y nodejs
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/StarFleetCPTN/GoMFT/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
RELEASE=$(curl -fsSL "https://api.github.com/repos/StarFleetCPTN/GoMFT/releases/latest" | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
msg_info "Stopping $APP"
systemctl stop gomft
@@ -47,16 +47,16 @@ function update_script() {
msg_info "Updating $APP to ${RELEASE}"
rm -f /opt/gomft/gomft
temp_file=$(mktemp)
curl -fsSL "https://github.com/StarFleetCPTN/GoMFT/archive/refs/tags/v${RELEASE}.tar.gz" -o $temp_file
tar -xzf $temp_file
cp -rf GoMFT-${RELEASE}/* /opt/gomft
cd /opt/gomft
rm -f /opt/gomft/node_modules
curl -fsSL "https://github.com/StarFleetCPTN/GoMFT/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar -xzf "$temp_file"
cp -rf "GoMFT-${RELEASE}"/* /opt/gomft/
cd /opt/gomft || exit
rm -rf /opt/gomft/node_modules
$STD npm ci
$STD node build.js
$STD go mod download
$STD go get -u github.com/a-h/templ
$STD $HOME/go/bin/templ generate
$STD "$HOME"/go/bin/templ generate
export CGO_ENABLED=1
export GOOS=linux
$STD go build -o gomft
@@ -65,8 +65,8 @@ function update_script() {
msg_ok "Updated $APP to ${RELEASE}"
msg_info "Cleaning Up"
rm -f $temp_file
rm -rf $HOME/GoMFT-v.${RELEASE}
rm -f "$temp_file"
rm -rf "$HOME/GoMFT-v.${RELEASE}/"
msg_ok "Cleanup Complete"
msg_info "Starting $APP"

View File

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

View File

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

6
ct/headers/karakeep Normal file
View File

@@ -0,0 +1,6 @@
__ __
/ /______ __________ _/ /_____ ___ ____
/ //_/ __ `/ ___/ __ `/ //_/ _ \/ _ \/ __ \
/ ,< / /_/ / / / /_/ / ,< / __/ __/ /_/ /
/_/|_|\__,_/_/ \__,_/_/|_|\___/\___/ .___/
/_/

6
ct/headers/meilisearch Normal file
View File

@@ -0,0 +1,6 @@
__ ___ _ ___ __
/ |/ /__ (_) (_)_______ ____ ___________/ /_
/ /|_/ / _ \/ / / / ___/ _ \/ __ `/ ___/ ___/ __ \
/ / / / __/ / / (__ ) __/ /_/ / / / /__/ / / /
/_/ /_/\___/_/_/_/____/\___/\__,_/_/ \___/_/ /_/

View File

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

View File

@@ -40,23 +40,23 @@ function update_script() {
if [[ "${PREV_RELEASE}" < 0.23.0 ]]; then
$STD apt-get install -y graphicsmagick ghostscript
fi
cd /opt
cd /opt || exit
if [[ -f /opt/hoarder/.env ]] && [[ ! -f /etc/hoarder/hoarder.env ]]; then
mkdir -p /etc/hoarder
mv /opt/hoarder/.env /etc/hoarder/hoarder.env
fi
rm -rf /opt/hoarder
curl -fsSL "https://github.com/hoarder-app/hoarder/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/hoarder-app/hoarder/archive/refs/tags/v${RELEASE}.zip")
unzip -q v${RELEASE}.zip
mv hoarder-${RELEASE} /opt/hoarder
cd /opt/hoarder/apps/web
curl -fsSL "https://github.com/hoarder-app/hoarder/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
unzip -q v"${RELEASE}".zip
mv karakeep-"${RELEASE}" /opt/hoarder
cd /opt/hoarder/apps/web || exit
$STD pnpm install --frozen-lockfile
$STD pnpm exec next build --experimental-build-mode compile
cp -r /opt/hoarder/apps/web/.next/standalone/apps/web/server.js /opt/hoarder/apps/web
cd /opt/hoarder/apps/workers
cd /opt/hoarder/apps/workers || exit
$STD pnpm install --frozen-lockfile
export DATA_DIR=/opt/hoarder_data
cd /opt/hoarder/packages/db
cd /opt/hoarder/packages/db || exit
$STD pnpm migrate
sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /etc/hoarder/hoarder.env
msg_ok "Updated ${APP} to v${RELEASE}"
@@ -65,7 +65,7 @@ function update_script() {
systemctl start hoarder-browser hoarder-workers hoarder-web
msg_ok "Started Services"
msg_info "Cleaning up"
rm -R /opt/v${RELEASE}.zip
rm -R /opt/v"${RELEASE}".zip
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Cleaned"
msg_ok "Updated Successfully"

85
ct/karakeep.sh Normal file
View File

@@ -0,0 +1,85 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 tteck
# Author: MickLesk (Canbiz) & vhsdream
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://karakeep.app/
APP="karakeep"
var_tags="bookmark"
var_cpu="2"
var_ram="4096"
var_disk="10"
var_os="debian"
var_version="12"
var_unprivileged="1"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/karakeep ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/karakeep-app/karakeep/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
PREV_RELEASE=$(cat /opt/${APP}_version.txt)
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "${PREV_RELEASE}" ]]; then
msg_info "Stopping Services"
systemctl stop karakeep-web karakeep-workers karakeep-browser
msg_ok "Stopped Services"
msg_info "Updating ${APP} to v${RELEASE}"
if [[ $(corepack -v) < "0.31.0" ]]; then
$STD npm install -g corepack@0.31.0
fi
if [[ "${PREV_RELEASE}" < 0.23.0 ]]; then
$STD apt-get install -y graphicsmagick ghostscript
fi
cd /opt || exit
if [[ -f /opt/karakeep/.env ]] && [[ ! -f /etc/karakeep/karakeep.env ]]; then
mkdir -p /etc/karakeep
mv /opt/karakeep/.env /etc/karakeep/karakeep.env
fi
rm -rf /opt/karakeep
curl -fsSL "https://github.com/karakeep-app/karakeep/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
unzip -q "v${RELEASE}.zip"
mv karakeep-"${RELEASE}" /opt/karakeep
cd /opt/karakeep/apps/web || exit
$STD pnpm install --frozen-lockfile
$STD pnpm exec next build --experimental-build-mode compile
cp -r /opt/karakeep/apps/web/.next/standalone/apps/web/server.js /opt/karakeep/apps/web
cd /opt/karakeep/apps/workers || exit
$STD pnpm install --frozen-lockfile
export DATA_DIR=/opt/karakeep_data
cd /opt/karakeep/packages/db || exit
$STD pnpm migrate
sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /etc/karakeep/karakeep.env
msg_ok "Updated ${APP} to v${RELEASE}"
msg_info "Starting Services"
systemctl start karakeep-browser karakeep-workers karakeep-web
msg_ok "Started Services"
msg_info "Cleaning up"
rm -R /opt/v"${RELEASE}".zip
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}."
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}"

View File

@@ -27,6 +27,21 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
if [[ "$CURRENT_PHP" != "8.4" ]]; then
msg_info "Migrating PHP $CURRENT_PHP to 8.4"
$STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
$STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
$STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
$STD apt-get update
$STD apt-get remove -y php"${CURRENT_PHP//./}"*
$STD apt-get install -y \
php8.4 \
php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl} \
libapache2-mod-php8.4
msg_ok "Migrated PHP $CURRENT_PHP to 8.4"
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/kimai/kimai/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
BACKUP_DIR="/opt/kimai_backup"
@@ -45,13 +60,13 @@ function update_script() {
msg_info "Updating ${APP} to ${RELEASE}"
rm -rf /opt/kimai
curl -fsSL "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip")
unzip -q ${RELEASE}.zip
mv kimai-${RELEASE} /opt/kimai
unzip -q "${RELEASE}".zip
mv kimai-"${RELEASE}" /opt/kimai
[ -d "$BACKUP_DIR/var" ] && cp -r "$BACKUP_DIR/var" /opt/kimai/
[ -f "$BACKUP_DIR/.env" ] && cp "$BACKUP_DIR/.env" /opt/kimai/
[ -f "$BACKUP_DIR/local.yaml" ] && cp "$BACKUP_DIR/local.yaml" /opt/kimai/config/packages/
rm -rf "$BACKUP_DIR"
cd /opt/kimai
cd /opt/kimai || exit
$STD composer install --no-dev --optimize-autoloader
$STD bin/console kimai:update
echo "${RELEASE}" >/opt/${APP}_version.txt
@@ -70,7 +85,7 @@ function update_script() {
msg_ok "Setup Permissions"
msg_info "Cleaning Up"
rm -rf ${RELEASE}.zip
rm -rf "${RELEASE}".zip
rm -rf "$BACKUP_DIR"
msg_ok "Cleaned"
msg_ok "Updated Successfully"

View File

@@ -23,14 +23,25 @@ function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /var/lib/lidarr/ ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating $APP LXC"
$STD apt-get update
$STD apt-get -y upgrade
temp_file="$(mktemp)"
rm -rf /opt/Lidarr
RELEASE=$(curl -fsSL https://api.github.com/repos/Lidarr/Lidarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/Lidarr/Lidarr/releases/download/v${RELEASE}/Lidarr.master.${RELEASE}.linux-core-x64.tar.gz" -o "$temp_file"
$STD tar -xvzf "$temp_file"
mv Lidarr /opt
chmod 775 /opt/Lidarr
msg_ok "Updated $APP LXC"
msg_info "Cleaning up"
rm -rf "$temp_file"
msg_ok "Cleaned up"
exit
}

95
ct/meilisearch.sh Normal file
View File

@@ -0,0 +1,95 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.meilisearch.com/
APP="Meilisearch"
var_tags="${var_tags:-full-text-search}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-7}"
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 [[ ! -f /opt/Meilisearch_version.txt ]]; then
msg_error "No Meilisearch Installation Found!"
exit
fi
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Meilisearch Update" --radiolist --cancel-button Exit-Script "Spacebar = Select" 10 58 2 \
"1" "Update Meilisearch" ON \
"2" "Update Meilisearch-UI" OFF \
3>&1 1>&2 2>&3)
if [ "$UPD" == "1" ]; then
msg_info "Stopping Meilisearch"
systemctl stop meilisearch
msg_ok "Stopped Meilisearch"
msg_info "Updating Meilisearch"
tmp_file=$(mktemp)
RELEASE=$(curl -s https://api.github.com/repos/meilisearch/meilisearch/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
curl -fsSL https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch.deb -o $tmp_file
$STD dpkg -i $tmp_file
echo "$RELEASE" >/opt/meilisearch_version.txt
msg_ok "Updated Meilisearch"
msg_info "Starting Meilisearch"
systemctl start meilisearch
msg_ok "Started Meilisearch"
exit
fi
if [ "$UPD" == "2" ]; then
if [[ ! -f /opt/Meilisearch-ui_version.txt ]]; then
msg_error "No Meilisearch-UI Installation Found!"
exit
fi
msg_info "Stopping Meilisearch-UI"
systemctl stop meilisearch-ui
msg_ok "Stopped Meilisearch-UI"
msg_info "Updating Meilisearch-UI"
tmp_file=$(mktemp)
tmp_dir=$(mktemp -d)
RELEASE_UI=$(curl -s https://api.github.com/repos/riccox/meilisearch-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
cp /opt/meilisearch-ui/.env.local /tmp/.env.local.bak
rm -rf /opt/meilisearch-ui
mkdir -p /opt/meilisearch-ui
curl -fsSL "https://github.com/riccox/meilisearch-ui/archive/refs/tags/${RELEASE_UI}.zip" -o $tmp_file
unzip -q "$tmp_file" -d "$tmp_dir"
mv "$tmp_dir"/*/* /opt/meilisearch-ui/
cd /opt/meilisearch-ui
sed -i 's|const hash = execSync("git rev-parse HEAD").toString().trim();|const hash = "unknown";|' /opt/meilisearch-ui/vite.config.ts
mv /tmp/.env.local.bak /opt/meilisearch-ui/.env.local
$STD pnpm install
echo "$RELEASE_UI" >/opt/meilisearch-ui_version.txt
msg_ok "Updated Meilisearch-UI"
msg_info "Starting Meilisearch-UI"
systemctl start meilisearch-ui
msg_ok "Started Meilisearch-UI"
exit
fi
}
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}meilisearch: http://${IP}:7700$ | meilisearch-ui: http://${IP}:24900${CL}"

44
ct/openziti-tunnel.sh Normal file
View File

@@ -0,0 +1,44 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: emoscardini
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/openziti/ziti
APP="openziti-tunnel"
var_tags="${var_tags:-network;openziti-tunnel}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-2}"
var_os="${var_os:-ubuntu}"
var_version="${var_version:-24.04}"
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/openziti ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating $APP LXC"
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated $APP LXC"
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} Application was assigned the following IP:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}Address: ${IP}${CL}"

View File

@@ -27,10 +27,27 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
if [[ "$CURRENT_PHP" != "8.4" ]]; then
msg_info "Migrating PHP $CURRENT_PHP to 8.4"
$STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
$STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
$STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
$STD apt-get update
$STD apt-get remove -y php"${CURRENT_PHP//./}"*
$STD apt-get install -y \
php8.4 \
php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,fpm} \
libapache2-mod-php8.4
msg_ok "Migrated PHP $CURRENT_PHP to 8.4"
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/pelican-dev/panel/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
msg_info "Stopping Service"
cd /opt/pelican-panel
cd /opt/pelican-panel || exit
$STD php artisan down
msg_ok "Stopped Service"

View File

@@ -33,7 +33,7 @@ function update_script() {
msg_info "Updating PhotoPrism"
$STD apt-get install -y libvips42
curl -fsSL "-cO - https://dl.photoprism.app/pkg/linux/amd64.tar.gz | tar -xzf - -C /opt/photoprism --strip-components=1" -o $(basename "-cO - https://dl.photoprism.app/pkg/linux/amd64.tar.gz | tar -xzf - -C /opt/photoprism --strip-components=1")
curl -fsSL https://dl.photoprism.app/pkg/linux/amd64.tar.gz | tar -xzf - -C /opt/photoprism --strip-components=1
msg_ok "Updated PhotoPrism"
msg_info "Starting PhotoPrism"

View File

@@ -23,11 +23,25 @@ function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /var/lib/prowlarr/ ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_error "Currently we don't provide an update function for this ${APP}."
msg_info "Updating $APP LXC"
temp_file="$(mktemp)"
rm -rf /opt/Prowlarr
RELEASE=$(curl -fsSL https://api.github.com/repos/Prowlarr/Prowlarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/Prowlarr/Prowlarr/releases/download/v${RELEASE}/Prowlarr.master.${RELEASE}.linux-core-x64.tar.gz" -o "$temp_file"
$STD tar -xvzf "$temp_file"
mv Prowlarr /opt
chmod 775 /opt/Prowlarr
msg_ok "Updated $APP LXC"
msg_info "Cleaning up"
rm -f "$temp_file"
msg_ok "Cleaned up"
exit
}

View File

@@ -27,10 +27,27 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
if [[ "$CURRENT_PHP" != "8.4" ]]; then
msg_info "Migrating PHP $CURRENT_PHP to 8.4"
$STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
$STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
$STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
$STD apt-get update
$STD apt-get remove -y php"${CURRENT_PHP//./}"*
$STD apt-get install -y \
php8.4 \
php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,fpm} \
libapache2-mod-php8.4
msg_ok "Migrated PHP $CURRENT_PHP to 8.4"
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/pterodactyl/panel/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
msg_info "Stopping Service"
cd /opt/pterodactyl-panel
cd /opt/pterodactyl-panel || exit
$STD php artisan down
msg_ok "Stopped Service"

View File

@@ -23,11 +23,25 @@ function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /var/lib/radarr/ ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_error "Currently we don't provide an update function for this ${APP}."
msg_info "Updating $APP LXC"
temp_file="$(mktemp)"
rm -rf /opt/Radarr
RELEASE=$(curl -fsSL https://api.github.com/repos/Radarr/Radarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/Radarr/Radarr/releases/download/v${RELEASE}/Radarr.master.${RELEASE}.linux-core-x64.tar.gz" -o "$temp_file"
$STD tar -xvzf "$temp_file"
mv Radarr /opt
chmod 775 /opt/Radarr
msg_ok "Updated $APP LXC"
msg_info "Cleaning up"
rm -rf "$temp_file"
msg_ok "Cleaned up"
exit
}

View File

@@ -39,15 +39,12 @@ function update_script() {
mv /opt/snipe-it /opt/snipe-it-backup
temp_file=$(mktemp)
curl -fsSL "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar zxf $temp_file
mv snipe-it-${RELEASE} /opt/snipe-it
$STD curl -fsSL "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.zip" -O
unzip -q v${RELEASE}.zip
mv snipe-it-${RELEASE} /opt/snipe-it
tar zxf "$temp_file"
mv "snipe-it-${RELEASE}" /opt/snipe-it
cp /opt/snipe-it-backup/.env /opt/snipe-it/.env
cp -r /opt/snipe-it-backup/public/uploads/ /opt/snipe-it/public/uploads/
cp -r /opt/snipe-it-backup/storage/private_uploads /opt/snipe-it/storage/private_uploads
cd /opt/snipe-it/
cd /opt/snipe-it/ || exit
export COMPOSER_ALLOW_SUPERUSER=1
$STD composer install --no-dev --optimize-autoloader --no-interaction
$STD composer dump-autoload
@@ -58,7 +55,7 @@ function update_script() {
$STD php artisan view:clear
chown -R www-data: /opt/snipe-it
chmod -R 755 /opt/snipe-it
rm -rf /opt/v${RELEASE}.zip
rm -rf "$temp_file"
rm -rf /opt/snipe-it-backup
msg_ok "Updated ${APP}"

View File

@@ -27,20 +27,24 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
if ! [[ $(dpkg -s python3-xmlsec 2>/dev/null) ]]; then
$STD apt-get update
$STD apt-get install -y python3-xmlsec
fi
if cd /opt/tandoor && git pull | grep -q 'Already up to date'; then
msg_ok "There is currently no update available."
else
msg_info "Updating ${APP} (Patience)"
export $(cat /opt/tandoor/.env | grep "^[^#]" | xargs)
cd /opt/tandoor/
cd /opt/tandoor/ || exit
$STD pip3 install -r requirements.txt
$STD /usr/bin/python3 /opt/tandoor/manage.py migrate
$STD /usr/bin/python3 /opt/tandoor/manage.py collectstatic --no-input
$STD /usr/bin/python3 /opt/tandoor/manage.py collectstatic_js_reverse
cd /opt/tandoor/vue
cd /opt/tandoor/vue || exit
$STD yarn install
$STD yarn build
cd /opt/tandoor
cd /opt/tandoor || exit
$STD python3 version.py
systemctl restart gunicorn_tandoor
msg_ok "Updated ${APP}"

View File

@@ -37,13 +37,13 @@ function update_script() {
msg_info "Updating to ${RELEASE}"
mkdir -p /opt/trilium_backup
mv /opt/trilium/{db,dump-db} /opt/trilium_backup/
mv /opt/trilium/db /opt/trilium_backup/
rm -rf /opt/trilium
cd /tmp
curl -fsSL "https://github.com/TriliumNext/Notes/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz" -o $(basename "https://github.com/TriliumNext/Notes/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz")
tar -xf TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz
mv TriliumNextNotes-Server-$RELEASE-linux-x64 /opt/trilium
cp -r /opt/trilium_backup/{db,dump-db} /opt/trilium/
cp -r /opt/trilium_backup/db /opt/trilium/
echo "v${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated to ${RELEASE}"

View File

@@ -5,14 +5,14 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://ubuntu.com/
echo -e "Loading..."
APP="Ubuntu"
var_tags="os"
var_cpu="1"
var_ram="512"
var_disk="2"
var_os="ubuntu"
var_version="24.04"
var_tags="${var_tags:-os}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-2}"
var_os="${var_os:-ubuntu}"
var_version="${var_version:-24.04}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.zabbix.com/
@@ -38,8 +38,11 @@ function update_script() {
cp -R /usr/share/zabbix/ /opt/zabbix-backup/
#cp -R /usr/share/zabbix-* /opt/zabbix-backup/ Remove temporary
rm -Rf /etc/apt/sources.list.d/zabbix.list
cd /tmp
curl -fsSL "https://repo.zabbix.com/zabbix/7.2/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb" -o $(basename "https://repo.zabbix.com/zabbix/7.2/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb")
cd /tmp || exit
curl -fsSL "$(curl -fsSL https://repo.zabbix.com/zabbix/ |
grep -oP '(?<=href=")[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1 |
xargs -I{} echo "https://repo.zabbix.com/zabbix/{}/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb")" \
-o /tmp/zabbix-release_latest+debian12_all.deb
$STD dpkg -i zabbix-release_latest+debian12_all.deb
$STD apt-get update
$STD apt-get install --only-upgrade zabbix-server-pgsql zabbix-frontend-php zabbix-agent2 zabbix-agent2-plugin-*

View File

@@ -27,7 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://github.com/zitadel/zitadel/releases/latest | grep location: | cut -d '/' -f 8 | tr -d '\r')
RELEASE=$(curl -fsSL https://api.github.com/repos/zitadel/zitadel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt | grep -oP '\d+\.\d+\.\d+')" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
msg_info "Stopping $APP"
systemctl stop zitadel
@@ -35,7 +35,7 @@ function update_script() {
msg_info "Updating $APP to ${RELEASE}"
cd /tmp || exit
curl -fsSL https://github.com/zitadel/zitadel/releases/download/"$RELEASE"/zitadel-linux-amd64.tar.gz | tar -xz
curl -fsSL "https://github.com/zitadel/zitadel/releases/download/v$RELEASE/zitadel-linux-amd64.tar.gz" | tar -xz
mv zitadel-linux-amd64/zitadel /usr/local/bin
$STD zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml --init-projections=true
echo "${RELEASE}" >/opt/${APP}_version.txt

View File

@@ -33,7 +33,7 @@
"fuse.js": "^7.1.0",
"lucide-react": "^0.453.0",
"mini-svg-data-uri": "^1.4.4",
"next": "15.2.3",
"next": "15.2.4",
"next-themes": "^0.3.0",
"nuqs": "^2.4.1",
"pocketbase": "^0.21.5",
@@ -1598,9 +1598,9 @@
"license": "MIT"
},
"node_modules/@next/env": {
"version": "15.2.3",
"resolved": "https://registry.npmjs.org/@next/env/-/env-15.2.3.tgz",
"integrity": "sha512-a26KnbW9DFEUsSxAxKBORR/uD9THoYoKbkpFywMN/AFvboTt94b8+g/07T8J6ACsdLag8/PDU60ov4rPxRAixw==",
"version": "15.2.4",
"resolved": "https://registry.npmjs.org/@next/env/-/env-15.2.4.tgz",
"integrity": "sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g==",
"license": "MIT"
},
"node_modules/@next/eslint-plugin-next": {
@@ -1644,9 +1644,9 @@
}
},
"node_modules/@next/swc-darwin-arm64": {
"version": "15.2.3",
"resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.2.3.tgz",
"integrity": "sha512-uaBhA8aLbXLqwjnsHSkxs353WrRgQgiFjduDpc7YXEU0B54IKx3vU+cxQlYwPCyC8uYEEX7THhtQQsfHnvv8dw==",
"version": "15.2.4",
"resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.2.4.tgz",
"integrity": "sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw==",
"cpu": [
"arm64"
],
@@ -1660,9 +1660,9 @@
}
},
"node_modules/@next/swc-darwin-x64": {
"version": "15.2.3",
"resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.2.3.tgz",
"integrity": "sha512-pVwKvJ4Zk7h+4hwhqOUuMx7Ib02u3gDX3HXPKIShBi9JlYllI0nU6TWLbPT94dt7FSi6mSBhfc2JrHViwqbOdw==",
"version": "15.2.4",
"resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.2.4.tgz",
"integrity": "sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew==",
"cpu": [
"x64"
],
@@ -1676,9 +1676,9 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
"version": "15.2.3",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.2.3.tgz",
"integrity": "sha512-50ibWdn2RuFFkOEUmo9NCcQbbV9ViQOrUfG48zHBCONciHjaUKtHcYFiCwBVuzD08fzvzkWuuZkd4AqbvKO7UQ==",
"version": "15.2.4",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.2.4.tgz",
"integrity": "sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ==",
"cpu": [
"arm64"
],
@@ -1692,9 +1692,9 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
"version": "15.2.3",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.2.3.tgz",
"integrity": "sha512-2gAPA7P652D3HzR4cLyAuVYwYqjG0mt/3pHSWTCyKZq/N/dJcUAEoNQMyUmwTZWCJRKofB+JPuDVP2aD8w2J6Q==",
"version": "15.2.4",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.2.4.tgz",
"integrity": "sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA==",
"cpu": [
"arm64"
],
@@ -1708,9 +1708,9 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
"version": "15.2.3",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.2.3.tgz",
"integrity": "sha512-ODSKvrdMgAJOVU4qElflYy1KSZRM3M45JVbeZu42TINCMG3anp7YCBn80RkISV6bhzKwcUqLBAmOiWkaGtBA9w==",
"version": "15.2.4",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.2.4.tgz",
"integrity": "sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw==",
"cpu": [
"x64"
],
@@ -1724,9 +1724,9 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
"version": "15.2.3",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.2.3.tgz",
"integrity": "sha512-ZR9kLwCWrlYxwEoytqPi1jhPd1TlsSJWAc+H/CJHmHkf2nD92MQpSRIURR1iNgA/kuFSdxB8xIPt4p/T78kwsg==",
"version": "15.2.4",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.2.4.tgz",
"integrity": "sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw==",
"cpu": [
"x64"
],
@@ -1740,9 +1740,9 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
"version": "15.2.3",
"resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.2.3.tgz",
"integrity": "sha512-+G2FrDcfm2YDbhDiObDU/qPriWeiz/9cRR0yMWJeTLGGX6/x8oryO3tt7HhodA1vZ8r2ddJPCjtLcpaVl7TE2Q==",
"version": "15.2.4",
"resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.2.4.tgz",
"integrity": "sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg==",
"cpu": [
"arm64"
],
@@ -1756,9 +1756,9 @@
}
},
"node_modules/@next/swc-win32-x64-msvc": {
"version": "15.2.3",
"resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.2.3.tgz",
"integrity": "sha512-gHYS9tc+G2W0ZC8rBL+H6RdtXIyk40uLiaos0yj5US85FNhbFEndMA2nW3z47nzOWiSvXTZ5kBClc3rD0zJg0w==",
"version": "15.2.4",
"resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.2.4.tgz",
"integrity": "sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ==",
"cpu": [
"x64"
],
@@ -7194,12 +7194,12 @@
"license": "MIT"
},
"node_modules/next": {
"version": "15.2.3",
"resolved": "https://registry.npmjs.org/next/-/next-15.2.3.tgz",
"integrity": "sha512-x6eDkZxk2rPpu46E1ZVUWIBhYCLszmUY6fvHBFcbzJ9dD+qRX6vcHusaqqDlnY+VngKzKbAiG2iRCkPbmi8f7w==",
"version": "15.2.4",
"resolved": "https://registry.npmjs.org/next/-/next-15.2.4.tgz",
"integrity": "sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ==",
"license": "MIT",
"dependencies": {
"@next/env": "15.2.3",
"@next/env": "15.2.4",
"@swc/counter": "0.1.3",
"@swc/helpers": "0.5.15",
"busboy": "1.6.0",
@@ -7214,14 +7214,14 @@
"node": "^18.18.0 || ^19.8.0 || >= 20.0.0"
},
"optionalDependencies": {
"@next/swc-darwin-arm64": "15.2.3",
"@next/swc-darwin-x64": "15.2.3",
"@next/swc-linux-arm64-gnu": "15.2.3",
"@next/swc-linux-arm64-musl": "15.2.3",
"@next/swc-linux-x64-gnu": "15.2.3",
"@next/swc-linux-x64-musl": "15.2.3",
"@next/swc-win32-arm64-msvc": "15.2.3",
"@next/swc-win32-x64-msvc": "15.2.3",
"@next/swc-darwin-arm64": "15.2.4",
"@next/swc-darwin-x64": "15.2.4",
"@next/swc-linux-arm64-gnu": "15.2.4",
"@next/swc-linux-arm64-musl": "15.2.4",
"@next/swc-linux-x64-gnu": "15.2.4",
"@next/swc-linux-x64-musl": "15.2.4",
"@next/swc-win32-arm64-msvc": "15.2.4",
"@next/swc-win32-x64-msvc": "15.2.4",
"sharp": "^0.33.5"
},
"peerDependencies": {
@@ -9667,9 +9667,9 @@
"license": "MIT"
},
"node_modules/vite": {
"version": "6.2.4",
"resolved": "https://registry.npmjs.org/vite/-/vite-6.2.4.tgz",
"integrity": "sha512-veHMSew8CcRzhL5o8ONjy8gkfmFJAd5Ac16oxBUjlwgX3Gq2Wqr+qNC3TjPIpy7TPV/KporLga5GT9HqdrCizw==",
"version": "6.2.5",
"resolved": "https://registry.npmjs.org/vite/-/vite-6.2.5.tgz",
"integrity": "sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==",
"dev": true,
"license": "MIT",
"dependencies": {

View File

@@ -44,7 +44,7 @@
"fuse.js": "^7.1.0",
"lucide-react": "^0.453.0",
"mini-svg-data-uri": "^1.4.4",
"next": "15.2.3",
"next": "15.2.4",
"next-themes": "^0.3.0",
"nuqs": "^2.4.1",
"pocketbase": "^0.21.5",

View File

@@ -19,8 +19,8 @@
"script": "ct/actualbudget.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 4,
"ram": 4096,
"hdd": 7,
"os": "debian",
"version": "12"
}

View File

@@ -1,11 +1,9 @@
{
"name": "Proxmox VE LXC IP-Tag",
"slug": "add-lxc-iptag",
"categories": [
1
],
"categories": [1],
"date_created": "2024-12-16",
"type": "misc",
"type": "pve",
"updateable": false,
"privileged": false,
"interface_port": null,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/add-lxc-iptag.sh",
"script": "tools/pve/add-lxc-iptag.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -1,11 +1,9 @@
{
"name": "NetBird",
"slug": "add-netbird-lxc",
"categories": [
1
],
"categories": [1],
"date_created": "2024-05-19",
"type": "misc",
"type": "addon",
"updateable": false,
"privileged": false,
"interface_port": null,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/add-netbird-lxc.sh",
"script": "tools/addon/add-netbird-lxc.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -1,11 +1,9 @@
{
"name": "Tailscale",
"slug": "add-tailscale-lxc",
"categories": [
1
],
"categories": [1],
"date_created": "2024-05-02",
"type": "misc",
"type": "addon",
"updateable": false,
"privileged": false,
"interface_port": null,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/add-tailscale-lxc.sh",
"script": "tools/addon/add-tailscale-lxc.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -1,11 +1,9 @@
{
"name": "All Templates",
"slug": "all-templates",
"categories": [
1
],
"categories": [1],
"date_created": "2024-05-02",
"type": "misc",
"type": "addon",
"updateable": false,
"privileged": false,
"interface_port": null,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/all-templates.sh",
"script": "tools/addon/all-templates.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -2,7 +2,7 @@
"name": "Channels DVR Server",
"slug": "channels",
"categories": [
15
13
],
"date_created": "2024-05-02",
"type": "ct",

View File

@@ -1,11 +1,9 @@
{
"name": "Proxmox VE LXC Cleaner",
"slug": "clean-lxcs",
"categories": [
1
],
"categories": [1],
"date_created": "2024-04-29",
"type": "misc",
"type": "addon",
"updateable": false,
"privileged": false,
"interface_port": null,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/clean-lxcs.sh",
"script": "tools/pve/clean-lxcs.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -1,11 +1,9 @@
{
"name": "Proxmox Clean Orphaned LVM",
"slug": "clean-orphaned-lvm",
"categories": [
1
],
"categories": [1],
"date_created": "2025-01-29",
"type": "misc",
"type": "pve",
"updateable": false,
"privileged": false,
"interface_port": null,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/clean-orphaned-lvm.sh",
"script": "tools/pve/clean-orphaned-lvm.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -1,13 +1,9 @@
{
"name": "VS Code Server",
"slug": "code-server",
"categories": [
1,
20,
11
],
"categories": [1, 20, 11],
"date_created": "2024-05-02",
"type": "misc",
"type": "addon",
"updateable": false,
"privileged": false,
"interface_port": 8680,
@@ -18,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/code-server.sh",
"script": "tools/addon/code-server.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -1,11 +1,9 @@
{
"name": "Proxmox VE Cron LXC Updater",
"slug": "cron-update-lxcs",
"categories": [
1
],
"categories": [1],
"date_created": "2024-04-29",
"type": "misc",
"type": "pve",
"updateable": false,
"privileged": false,
"interface_port": null,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/cron-update-lxcs.sh",
"script": "tools/pve/cron-update-lxcs.sh",
"resources": {
"cpu": null,
"ram": null,
@@ -36,9 +34,8 @@
"type": "info"
},
{
"text": "To exclude LXCs from updating, edit the crontab using `crontab -e` and add CTID as shown in the example below:\n\n\n\n`0 0 * * 0 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/bash -c '$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/raw/main/misc/update-lxcs-cron.sh)' -s 103 111 >>/var/log/update-lxcs-cron.log 2>/dev/null`",
"text": "To exclude LXCs from updating, edit the crontab using `crontab -e` and add CTID as shown in the example below:\n\n\n\n`0 0 * * 0 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/bash -c '$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/update-lxcs-cron.sh)' -s 103 111 >>/var/log/update-lxcs-cron.log 2>/dev/null`",
"type": "info"
}
]
}

View File

@@ -1,11 +1,9 @@
{
"name": "CrowdSec",
"slug": "crowdsec",
"categories": [
6
],
"categories": [6],
"date_created": "2024-05-02",
"type": "misc",
"type": "addon",
"updateable": false,
"privileged": false,
"interface_port": null,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/crowdsec.sh",
"script": "tools/addon/crowdsec.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -1,11 +1,9 @@
{
"name": "File Browser",
"slug": "filebrowser",
"categories": [
1
],
"categories": [1],
"date_created": "2024-05-02",
"type": "misc",
"type": "addon",
"updateable": false,
"privileged": false,
"interface_port": 8080,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/filebrowser.sh",
"script": "tools/addon/filebrowser.sh",
"resources": {
"cpu": null,
"ram": null,
@@ -27,7 +25,7 @@
},
{
"type": "alpine",
"script": "misc/filebrowser.sh",
"script": "tools/addon/filebrowser.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -1,11 +1,9 @@
{
"name": "Proxmox VE LXC Filesystem Trim",
"slug": "fstrim",
"categories": [
1
],
"categories": [1],
"date_created": "2024-04-29",
"type": "misc",
"type": "pve",
"updateable": false,
"privileged": false,
"interface_port": null,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/fstrim.sh",
"script": "tools/pve/fstrim.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -1,11 +1,9 @@
{
"name": "Glances",
"slug": "glances",
"categories": [
9
],
"categories": [9],
"date_created": "2024-05-02",
"type": "misc",
"type": "addon",
"updateable": false,
"privileged": false,
"interface_port": 61208,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/glances.sh",
"script": "tools/addon/glances.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -1,34 +0,0 @@
{
"name": "Hoarder",
"slug": "hoarder",
"categories": [
12
],
"date_created": "2024-12-02",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://docs.hoarder.app/",
"website": "https://hoarder.app/",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/hoarder.svg",
"description": "Hoarder is an AI-powered bookmarking tool that helps you save and organize your digital content. It automatically tags your links, notes, and images, making them easy to find later. With features like auto-fetching, lists, and full-text search, Hoarder is the perfect tool for anyone who wants to keep track of their digital life.",
"install_methods": [
{
"type": "default",
"script": "ct/hoarder.sh",
"resources": {
"cpu": 2,
"ram": 4096,
"hdd": 10,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -1,11 +1,9 @@
{
"name": "Proxmox VE Host Backup",
"slug": "host-backup",
"categories": [
1
],
"categories": [1],
"date_created": "2024-04-29",
"type": "misc",
"type": "pve",
"updateable": false,
"privileged": false,
"interface_port": null,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/host-backup.sh",
"script": "tools/pve/host-backup.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -0,0 +1,34 @@
{
"name": "karakeep",
"slug": "karakeep",
"categories": [
12
],
"date_created": "2025-04-07",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://docs.karakeep.app/",
"website": "https://karakeep.app/",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/karakeep.svg",
"description": "karakeep (formerly: hoarder) is an AI-powered bookmarking tool that helps you save and organize your digital content. It automatically tags your links, notes, and images, making them easy to find later. With features like auto-fetching, lists, and full-text search, karakeep is the perfect tool for anyone who wants to keep track of their digital life.",
"install_methods": [
{
"type": "default",
"script": "ct/karakeep.sh",
"resources": {
"cpu": 2,
"ram": 4096,
"hdd": 10,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -1,11 +1,9 @@
{
"name": "Proxmox VE Kernel Clean",
"slug": "kernel-clean",
"categories": [
1
],
"categories": [1],
"date_created": "2024-04-29",
"type": "misc",
"type": "pve",
"updateable": false,
"privileged": false,
"interface_port": null,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/kernel-clean.sh",
"script": "tools/pve/kernel-clean.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -1,11 +1,9 @@
{
"name": "Proxmox VE Kernel Pin",
"slug": "kernel-pin",
"categories": [
1
],
"categories": [1],
"date_created": "2024-05-08",
"type": "misc",
"type": "pve",
"updateable": false,
"privileged": false,
"interface_port": null,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/kernel-pin.sh",
"script": "tools/pve/kernel-pin.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -6,7 +6,7 @@
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": false,
"updateable": true,
"privileged": false,
"interface_port": 8686,
"documentation": null,

View File

@@ -6,7 +6,7 @@
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": false,
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://docs.linkwarden.app/",

View File

@@ -1,11 +1,9 @@
{
"name": "Container LXC Deletion",
"slug": "lxc-delete",
"categories": [
1
],
"categories": [1],
"date_created": "2025-01-21",
"type": "misc",
"type": "pve",
"updateable": false,
"privileged": false,
"interface_port": null,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/lxc-delete.sh",
"script": "tools/pve/lxc-delete.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -0,0 +1,43 @@
{
"name": "Meilisearch",
"slug": "meilisearch",
"categories": [
8
],
"date_created": "2025-04-04",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 7700,
"documentation": "https://www.meilisearch.com/docs",
"website": "https://www.meilisearch.com/",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/meilisearch.svg",
"description": "Meilisearch is a fast, open-source search engine designed for instant, full-text search with typo tolerance. It provides an API that allows developers to integrate powerful search features into applications. Meilisearch-UI is an optional web-based interface that provides a simple way to interact with Meilisearch, visualize indexed data, and test queries without needing to use the API directly.",
"install_methods": [
{
"type": "default",
"script": "ct/meilisearch.sh",
"resources": {
"cpu": 2,
"ram": 4096,
"hdd": 7,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Meilisearch-UI can optionally be installed for a web-based search interface",
"type": "info"
},
{
"text": "Meilisearch-UI has early development status and can cause performance issues",
"type": "warn"
}
]
}

View File

@@ -1,11 +1,9 @@
{
"name": "Proxmox VE Processor Microcode",
"slug": "microcode",
"categories": [
1
],
"categories": [1],
"date_created": "2024-04-29",
"type": "misc",
"type": "pve",
"updateable": false,
"privileged": false,
"interface_port": null,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/microcode.sh",
"script": "tools/pve/microcode.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -1,11 +1,9 @@
{
"name": "Proxmox VE Monitor-All",
"slug": "monitor-all",
"categories": [
1
],
"categories": [1],
"date_created": "2024-04-29",
"type": "misc",
"type": "pve",
"updateable": false,
"privileged": false,
"interface_port": null,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/monitor-all.sh",
"script": "tools/pve/monitor-all.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -1,11 +1,9 @@
{
"name": "Proxmox VE Netdata",
"slug": "netdata",
"categories": [
1
],
"categories": [1],
"date_created": "2024-04-29",
"type": "misc",
"type": "addon",
"updateable": false,
"privileged": false,
"interface_port": null,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/netdata.sh",
"script": "tools/addon/netdata.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -2,7 +2,7 @@
"name": "NextPVR",
"slug": "nextpvr",
"categories": [
15
13
],
"date_created": "2024-11-20",
"type": "ct",

View File

@@ -1,11 +1,9 @@
{
"name": "OliveTin",
"slug": "olivetin",
"categories": [
10
],
"categories": [10],
"date_created": "2024-05-02",
"type": "misc",
"type": "addon",
"updateable": false,
"privileged": false,
"interface_port": 1337,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/olivetin.sh",
"script": "tools/addon/olivetin.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -0,0 +1,43 @@
{
"name": "openziti-tunnel",
"slug": "openziti-tunnel",
"categories": [
4
],
"date_created": "2025-04-02",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": null,
"documentation": "https://openziti.io/docs/reference/tunnelers/docker/",
"website": "https://www.openziti.io/",
"logo": "https://raw.githubusercontent.com/openziti/ziti-doc/main/docusaurus/static/img/ziti-logo-dark.svg",
"description": "OpenZiti is an open-source, zero trust networking platform that enables secure connectivity between applications, services, and devices. It provides secure, encrypted connections between clients and services, and can be used to create secure, zero trust networks.",
"install_methods": [
{
"type": "default",
"script": "ct/openziti-tunnel.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 2,
"os": "Ubuntu",
"version": "24.04"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "The Openziti tunnel is installed in host mode; please see documentation for more information",
"type": "info"
},
{
"text": "Openziti tunnel prompts for identity enrollment token during installation",
"type": "info"
}
]
}

View File

@@ -1,11 +1,9 @@
{
"name": "Proxmox Backup Server Processor Microcode",
"slug": "pbs-microcode",
"categories": [
1
],
"categories": [1],
"date_created": "2025-02-07",
"type": "misc",
"type": "pve",
"updateable": false,
"privileged": false,
"interface_port": null,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/pbs_microcode.sh",
"script": "tools/pve/pbs_microcode.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -1,11 +1,9 @@
{
"name": "Proxmox Backup Server Post Install",
"slug": "post-pbs-install",
"categories": [
1
],
"categories": [1],
"date_created": "2024-04-29",
"type": "misc",
"type": "pve",
"updateable": false,
"privileged": false,
"interface_port": null,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/post-pbs-install.sh",
"script": "tools/pve/post-pbs-install.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -1,11 +1,9 @@
{
"name": "Proxmox Mail Gateway Post Install",
"slug": "post-pmg-install",
"categories": [
1
],
"categories": [1],
"date_created": "2025-01-20",
"type": "misc",
"type": "pve",
"updateable": false,
"privileged": false,
"interface_port": null,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/post-pmg-install.sh",
"script": "tools/pve/post-pmg-install.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -1,11 +1,9 @@
{
"name": "Proxmox VE Post Install",
"slug": "post-pve-install",
"categories": [
1
],
"categories": [1],
"date_created": "2024-04-28",
"type": "misc",
"type": "pve",
"updateable": false,
"privileged": false,
"interface_port": null,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/post-pve-install.sh",
"script": "tools/pve/post-pve-install.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -1,9 +1,7 @@
{
"name": "PostgreSQL",
"slug": "postgresql",
"categories": [
8
],
"categories": [8],
"date_created": "2024-05-02",
"type": "ct",
"updateable": false,
@@ -24,6 +22,17 @@
"os": "debian",
"version": "12"
}
},
{
"type": "alpine",
"script": "ct/alpine-postgresql.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 1,
"os": "alpine",
"version": "3.21"
}
}
],
"default_credentials": {

View File

@@ -6,7 +6,7 @@
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": false,
"updateable": true,
"privileged": false,
"interface_port": 9696,
"documentation": null,

View File

@@ -6,7 +6,7 @@
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": false,
"updateable": true,
"privileged": false,
"interface_port": 7878,
"documentation": null,

View File

@@ -1,11 +1,9 @@
{
"name": "Proxmox VE CPU Scaling Governor",
"slug": "scaling-governor",
"categories": [
1
],
"categories": [1],
"date_created": "2024-04-29",
"type": "misc",
"type": "pve",
"updateable": false,
"privileged": false,
"interface_port": null,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/scaling-governor.sh",
"script": "tools/pve/scaling-governor.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -32,7 +32,7 @@
},
"notes": [
{
"text": "See /opt/slskd/config/sksld.yml to add your Soulseek credentials",
"text": "See /opt/slskd/config/slskd.yml to add your Soulseek credentials",
"type": "info"
},
{

View File

@@ -1,11 +1,9 @@
{
"name": "Proxmox VE LXC Updater",
"slug": "update-lxcs",
"categories": [
1
],
"categories": [1],
"date_created": "2024-04-29",
"type": "misc",
"type": "pve",
"updateable": false,
"privileged": false,
"interface_port": null,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/update-lxcs.sh",
"script": "tools/pve/update-lxcs.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -1,11 +1,9 @@
{
"name": "Proxmox Update Repositories",
"slug": "update-repo",
"categories": [
1
],
"categories": [1],
"date_created": "2024-11-04",
"type": "misc",
"type": "pve",
"updateable": false,
"privileged": false,
"interface_port": null,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/update-repo.sh",
"script": "tools/pve/update-repo.sh",
"resources": {
"cpu": null,
"ram": null,

File diff suppressed because it is too large Load Diff

View File

@@ -1,11 +1,9 @@
{
"name": "Webmin System Administration",
"slug": "webmin",
"categories": [
1
],
"categories": [1],
"date_created": "2024-05-02",
"type": "misc",
"type": "addon",
"updateable": false,
"privileged": false,
"interface_port": 10000,
@@ -16,7 +14,7 @@
"install_methods": [
{
"type": "default",
"script": "misc/webmin.sh",
"script": "tools/addon/webmin.sh",
"resources": {
"cpu": null,
"ram": null,

View File

@@ -24,6 +24,17 @@
"os": "debian",
"version": "12"
}
},
{
"type": "alpine",
"script": "ct/alpine-wireguard.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 1,
"os": "alpine",
"version": "3.21"
}
}
],
"default_credentials": {

View File

@@ -1,12 +1,12 @@
"use client";
import React, { useEffect, useState } from "react";
import { useRouter } from "next/navigation";
import { Card, CardContent } from "@/components/ui/card";
import { Button } from "@/components/ui/button";
import { Badge } from "@/components/ui/badge";
import { ChevronLeft, ChevronRight } from "lucide-react";
import { Button } from "@/components/ui/button";
import { Card, CardContent } from "@/components/ui/card";
import { Category } from "@/lib/types";
import { ChevronLeft, ChevronRight } from "lucide-react";
import { useRouter } from "next/navigation";
import React, { useEffect, useState } from "react";
const defaultLogo = "/default-logo.png"; // Fallback logo path
const MAX_DESCRIPTION_LENGTH = 100; // Set max length for description
@@ -17,11 +17,11 @@ const formattedBadge = (type: string) => {
case "vm":
return <Badge className="text-blue-500/75 border-blue-500/75 badge">VM</Badge>;
case "ct":
return (
<Badge className="text-yellow-500/75 border-yellow-500/75 badge">LXC</Badge>
);
case "misc":
return <Badge className="text-green-500/75 border-green-500/75 badge">MISC</Badge>;
return <Badge className="text-yellow-500/75 border-yellow-500/75 badge">LXC</Badge>;
case "pve":
return <Badge className="text-orange-500/75 border-orange-500/75 badge">PVE</Badge>;
case "addon":
return <Badge className="text-green-500/75 border-green-500/75 badge">ADDON</Badge>;
}
return null;
};
@@ -100,9 +100,7 @@ const CategoryView = () => {
};
const truncateDescription = (text: string) => {
return text.length > MAX_DESCRIPTION_LENGTH
? `${text.slice(0, MAX_DESCRIPTION_LENGTH)}...`
: text;
return text.length > MAX_DESCRIPTION_LENGTH ? `${text.slice(0, MAX_DESCRIPTION_LENGTH)}...` : text;
};
const renderResources = (script: any) => {
@@ -111,9 +109,24 @@ const CategoryView = () => {
const hdd = script.install_methods[0]?.resources.hdd;
const resourceParts = [];
if (cpu) resourceParts.push(<span key="cpu"><b>CPU:</b> {cpu}vCPU</span>);
if (ram) resourceParts.push(<span key="ram"><b>RAM:</b> {ram}MB</span>);
if (hdd) resourceParts.push(<span key="hdd"><b>HDD:</b> {hdd}GB</span>);
if (cpu)
resourceParts.push(
<span key="cpu">
<b>CPU:</b> {cpu}vCPU
</span>,
);
if (ram)
resourceParts.push(
<span key="ram">
<b>RAM:</b> {ram}MB
</span>,
);
if (hdd)
resourceParts.push(
<span key="hdd">
<b>HDD:</b> {hdd}GB
</span>,
);
return resourceParts.length > 0 ? (
<div className="text-sm text-gray-400">

View File

@@ -1,12 +1,6 @@
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
import { OperatingSystems } from "@/config/siteConfig";
import { PlusCircle, Trash2 } from "lucide-react";
import { memo, useCallback, useRef } from "react";
@@ -20,21 +14,29 @@ type InstallMethodProps = {
setZodErrors: (zodErrors: z.ZodError | null) => void;
};
function InstallMethod({
script,
setScript,
setIsValid,
setZodErrors,
}: InstallMethodProps) {
function InstallMethod({ script, setScript, setIsValid, setZodErrors }: InstallMethodProps) {
const cpuRefs = useRef<(HTMLInputElement | null)[]>([]);
const ramRefs = useRef<(HTMLInputElement | null)[]>([]);
const hddRefs = useRef<(HTMLInputElement | null)[]>([]);
const addInstallMethod = useCallback(() => {
setScript((prev) => {
const { type, slug } = prev;
const newMethodType = "default";
let scriptPath = "";
if (type === "pve") {
scriptPath = `tools/pve/${slug}.sh`;
} else if (type === "addon") {
scriptPath = `tools/addon/${slug}.sh`;
} else {
scriptPath = `${type}/${slug}.sh`;
}
const method = InstallMethodSchema.parse({
type: "default",
script: `${prev.type}/${prev.slug}.sh`,
type: newMethodType,
script: scriptPath,
resources: {
cpu: null,
ram: null,
@@ -43,6 +45,7 @@ function InstallMethod({
version: null,
},
});
return {
...prev,
install_methods: [...prev.install_methods, method],
@@ -63,9 +66,7 @@ function InstallMethod({
if (key === "type") {
updatedMethod.script =
value === "alpine"
? `${prev.type}/alpine-${prev.slug}.sh`
: `${prev.type}/${prev.slug}.sh`;
value === "alpine" ? `${prev.type}/alpine-${prev.slug}.sh` : `${prev.type}/${prev.slug}.sh`;
// Set OS to Alpine and reset version if type is alpine
if (value === "alpine") {
@@ -112,10 +113,7 @@ function InstallMethod({
<h3 className="text-xl font-semibold">Install Methods</h3>
{script.install_methods.map((method, index) => (
<div key={index} className="space-y-2 border p-4 rounded">
<Select
value={method.type}
onValueChange={(value) => updateInstallMethod(index, "type", value)}
>
<Select value={method.type} onValueChange={(value) => updateInstallMethod(index, "type", value)}>
<SelectTrigger>
<SelectValue placeholder="Type" />
</SelectTrigger>
@@ -205,9 +203,7 @@ function InstallMethod({
<SelectValue placeholder="Version" />
</SelectTrigger>
<SelectContent>
{OperatingSystems.find(
(os) => os.name === method.resources.os,
)?.versions.map((version) => (
{OperatingSystems.find((os) => os.name === method.resources.os)?.versions.map((version) => (
<SelectItem key={version.slug} value={version.name}>
{version.name}
</SelectItem>
@@ -215,22 +211,12 @@ function InstallMethod({
</SelectContent>
</Select>
</div>
<Button
variant="destructive"
size="sm"
type="button"
onClick={() => removeInstallMethod(index)}
>
<Button variant="destructive" size="sm" type="button" onClick={() => removeInstallMethod(index)}>
<Trash2 className="mr-2 h-4 w-4" /> Remove Install Method
</Button>
</div>
))}
<Button
type="button"
size="sm"
disabled={script.install_methods.length >= 2}
onClick={addInstallMethod}
>
<Button type="button" size="sm" disabled={script.install_methods.length >= 2} onClick={addInstallMethod}>
<PlusCircle className="mr-2 h-4 w-4" /> Add Install Method
</Button>
</>

View File

@@ -24,8 +24,8 @@ export const ScriptSchema = z.object({
slug: z.string().min(1, "Slug is required"),
categories: z.array(z.number()),
date_created: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format").min(1, "Date is required"),
type: z.enum(["vm", "ct", "misc", "turnkey"], {
errorMap: () => ({ message: "Type must be either 'vm', 'ct', 'misc' or 'turnkey'" })
type: z.enum(["vm", "ct", "pve", "addon", "turnkey"], {
errorMap: () => ({ message: "Type must be either 'vm', 'ct', 'pve', 'addon' or 'turnkey'" })
}),
updateable: z.boolean(),
privileged: z.boolean(),

View File

@@ -5,18 +5,8 @@ import { Button } from "@/components/ui/button";
import { Calendar } from "@/components/ui/calendar";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import {
Popover,
PopoverContent,
PopoverTrigger,
} from "@/components/ui/popover";
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
import { Switch } from "@/components/ui/switch";
import { Textarea } from "@/components/ui/textarea";
import { fetchCategories } from "@/lib/data";
@@ -66,19 +56,29 @@ export default function JSONGenerator() {
.catch((error) => console.error("Error fetching categories:", error));
}, []);
const updateScript = useCallback(
(key: keyof Script, value: Script[keyof Script]) => {
const updateScript = useCallback((key: keyof Script, value: Script[keyof Script]) => {
setScript((prev) => {
const updated = { ...prev, [key]: value };
if (key === "type" || key === "slug") {
updated.install_methods = updated.install_methods.map((method) => ({
if (updated.slug && updated.type) {
updated.install_methods = updated.install_methods.map((method) => {
let scriptPath = "";
if (updated.type === "pve") {
scriptPath = `tools/pve/${updated.slug}.sh`;
} else if (updated.type === "addon") {
scriptPath = `tools/addon/${updated.slug}.sh`;
} else if (method.type === "alpine") {
scriptPath = `${updated.type}/alpine-${updated.slug}.sh`;
} else {
scriptPath = `${updated.type}/${updated.slug}.sh`;
}
return {
...method,
script:
method.type === "alpine"
? `${updated.type}/alpine-${updated.slug}.sh`
: `${updated.type}/${updated.slug}.sh`,
}));
script: scriptPath,
};
});
}
const result = ScriptSchema.safeParse(updated);
@@ -86,9 +86,7 @@ export default function JSONGenerator() {
setZodErrors(result.success ? null : result.error);
return updated;
});
},
[],
);
}, []);
const handleCopy = useCallback(() => {
navigator.clipboard.writeText(JSON.stringify(script, null, 2));
@@ -120,16 +118,13 @@ export default function JSONGenerator() {
);
const formattedDate = useMemo(
() =>
script.date_created ? format(script.date_created, "PPP") : undefined,
() => (script.date_created ? format(script.date_created, "PPP") : undefined),
[script.date_created],
);
const validationAlert = useMemo(
() => (
<Alert
className={cn("text-black", isValid ? "bg-green-100" : "bg-red-100")}
>
<Alert className={cn("text-black", isValid ? "bg-green-100" : "bg-red-100")}>
<AlertTitle>{isValid ? "Valid JSON" : "Invalid JSON"}</AlertTitle>
<AlertDescription>
{isValid
@@ -160,21 +155,13 @@ export default function JSONGenerator() {
<Label>
Name <span className="text-red-500">*</span>
</Label>
<Input
placeholder="Example"
value={script.name}
onChange={(e) => updateScript("name", e.target.value)}
/>
<Input placeholder="Example" value={script.name} onChange={(e) => updateScript("name", e.target.value)} />
</div>
<div>
<Label>
Slug <span className="text-red-500">*</span>
</Label>
<Input
placeholder="example"
value={script.slug}
onChange={(e) => updateScript("slug", e.target.value)}
/>
<Input placeholder="example" value={script.slug} onChange={(e) => updateScript("slug", e.target.value)} />
</div>
</div>
<div>
@@ -197,11 +184,7 @@ export default function JSONGenerator() {
onChange={(e) => updateScript("description", e.target.value)}
/>
</div>
<Categories
script={script}
setScript={setScript}
categories={categories}
/>
<Categories script={script} setScript={setScript} categories={categories} />
<div className="flex gap-2">
<div className="flex flex-col gap-2 w-full">
<Label>Date Created</Label>
@@ -209,10 +192,7 @@ export default function JSONGenerator() {
<PopoverTrigger asChild className="flex-1">
<Button
variant={"outline"}
className={cn(
"pl-3 text-left font-normal w-full",
!script.date_created && "text-muted-foreground",
)}
className={cn("pl-3 text-left font-normal w-full", !script.date_created && "text-muted-foreground")}
>
{formattedDate || <span>Pick a date</span>}
<CalendarIcon className="ml-auto h-4 w-4 opacity-50" />
@@ -230,38 +210,26 @@ export default function JSONGenerator() {
</div>
<div className="flex flex-col gap-2 w-full">
<Label>Type</Label>
<Select
value={script.type}
onValueChange={(value) => updateScript("type", value)}
>
<Select value={script.type} onValueChange={(value) => updateScript("type", value)}>
<SelectTrigger className="flex-1">
<SelectValue placeholder="Type" />
</SelectTrigger>
<SelectContent>
<SelectItem value="ct">LXC Container</SelectItem>
<SelectItem value="vm">Virtual Machine</SelectItem>
<SelectItem value="misc">Miscellaneous</SelectItem>
<SelectItem value="pve">PVE-Tool</SelectItem>
<SelectItem value="addon">Add-On</SelectItem>
</SelectContent>
</Select>
</div>
</div>
<div className="w-full flex gap-5">
<div className="flex items-center space-x-2">
<Switch
checked={script.updateable}
onCheckedChange={(checked) =>
updateScript("updateable", checked)
}
/>
<Switch checked={script.updateable} onCheckedChange={(checked) => updateScript("updateable", checked)} />
<label>Updateable</label>
</div>
<div className="flex items-center space-x-2">
<Switch
checked={script.privileged}
onCheckedChange={(checked) =>
updateScript("privileged", checked)
}
/>
<Switch checked={script.privileged} onCheckedChange={(checked) => updateScript("privileged", checked)} />
<label>Privileged</label>
</div>
</div>
@@ -269,12 +237,7 @@ export default function JSONGenerator() {
placeholder="Interface Port"
type="number"
value={script.interface_port || ""}
onChange={(e) =>
updateScript(
"interface_port",
e.target.value ? Number(e.target.value) : null,
)
}
onChange={(e) => updateScript("interface_port", e.target.value ? Number(e.target.value) : null)}
/>
<div className="flex gap-2">
<Input
@@ -285,17 +248,10 @@ export default function JSONGenerator() {
<Input
placeholder="Documentation URL"
value={script.documentation || ""}
onChange={(e) =>
updateScript("documentation", e.target.value || null)
}
onChange={(e) => updateScript("documentation", e.target.value || null)}
/>
</div>
<InstallMethod
script={script}
setScript={setScript}
setIsValid={setIsValid}
setZodErrors={setZodErrors}
/>
<InstallMethod script={script} setScript={setScript} setIsValid={setIsValid} setZodErrors={setZodErrors} />
<h3 className="text-xl font-semibold">Default Credentials</h3>
<Input
placeholder="Username"
@@ -317,30 +273,17 @@ export default function JSONGenerator() {
})
}
/>
<Note
script={script}
setScript={setScript}
setIsValid={setIsValid}
setZodErrors={setZodErrors}
/>
<Note script={script} setScript={setScript} setIsValid={setIsValid} setZodErrors={setZodErrors} />
</form>
</div>
<div className="w-1/2 p-4 bg-background overflow-y-auto">
{validationAlert}
<div className="relative">
<div className="absolute right-2 top-2 flex gap-1">
<Button
size="icon"
variant="outline"
onClick={handleCopy}
>
<Button size="icon" variant="outline" onClick={handleCopy}>
{isCopied ? <Check className="h-4 w-4" /> : <Clipboard className="h-4 w-4" />}
</Button>
<Button
size="icon"
variant="outline"
onClick={handleDownload}
>
<Button size="icon" variant="outline" onClick={handleDownload}>
<Download className="h-4 w-4" />
</Button>
</div>

View File

@@ -42,10 +42,6 @@ export const metadata : Metadata = {
alternates: {
canonical: `https://community-scripts.github.io/${basePath}/`,
},
icons: {
icon: "/favicon.ico",
apple: "/apple-touch-icon.png",
},
viewport: {
width: "device-width",
initialScale: 1,

View File

@@ -1,4 +1,5 @@
"use client";
import FAQ from "@/components/FAQ";
import AnimatedGradientText from "@/components/ui/animated-gradient-text";
import { Button } from "@/components/ui/button";
import { CardFooter } from "@/components/ui/card";
@@ -34,14 +35,9 @@ export default function Page() {
}, [theme]);
return (
<>
<div className="w-full mt-16">
<Particles
className="absolute inset-0 -z-40"
quantity={100}
ease={80}
color={color}
refresh
/>
<Particles className="absolute inset-0 -z-40" quantity={100} ease={80} color={color} refresh />
<div className="container mx-auto">
<div className="flex h-[80vh] flex-col items-center justify-center gap-4 py-20 lg:py-40">
<Dialog>
@@ -70,9 +66,8 @@ export default function Page() {
<DialogHeader>
<DialogTitle>Thank You!</DialogTitle>
<DialogDescription>
A big thank you to tteck and the many contributors who have
made this project possible. Your hard work is truly
appreciated by the entire Proxmox community!
A big thank you to tteck and the many contributors who have made this project possible. Your hard
work is truly appreciated by the entire Proxmox community!
</DialogDescription>
</DialogHeader>
<CardFooter className="flex flex-col gap-2">
@@ -93,8 +88,7 @@ export default function Page() {
rel="noopener noreferrer"
className="flex items-center justify-center"
>
<ExternalLink className="mr-2 h-4 w-4" /> Proxmox Helper
Scripts
<ExternalLink className="mr-2 h-4 w-4" /> Proxmox Helper Scripts
</a>
</Button>
</CardFooter>
@@ -107,12 +101,10 @@ export default function Page() {
</h1>
<div className="max-w-2xl gap-2 flex flex-col text-center sm:text-lg text-sm leading-relaxed tracking-tight text-muted-foreground md:text-xl">
<p>
We are a community-driven initiative that simplifies the setup
of Proxmox Virtual Environment (VE).
We are a community-driven initiative that simplifies the setup of Proxmox Virtual Environment (VE).
</p>
<p>
With 300+ scripts to help you manage your{" "}
<b>Proxmox VE environment</b>. Whether you&#39;re a seasoned
With 300+ scripts to help you manage your <b>Proxmox VE environment</b>. Whether you&#39;re a seasoned
user or a newcomer, we&#39;ve got you covered.
</p>
</div>
@@ -131,7 +123,21 @@ export default function Page() {
</Link>
</div>
</div>
{/* FAQ Section */}
<div className="py-20" id="faq">
<div className="max-w-4xl mx-auto px-4">
<div className="text-center mb-12">
<h2 className="text-3xl font-bold tracking-tighter md:text-5xl mb-4">Frequently Asked Questions</h2>
<p className="text-muted-foreground text-lg">
Find answers to common questions about our Proxmox VE scripts
</p>
</div>
<FAQ />
</div>
</div>
</div>
</div>
</>
);
}

View File

@@ -56,7 +56,7 @@ export default function ScriptAccordion({
value={expandedItem}
onValueChange={handleAccordionChange}
collapsible
className="overflow-y-scroll max-h-[calc(100vh-220px)] overflow-x-hidden mt-3 p-2"
className="overflow-y-scroll max-h-[calc(100vh-225px)] overflow-x-hidden mt-3 p-2"
>
{items.map((category) => (
<AccordionItem

View File

@@ -1,12 +1,5 @@
import { Button } from "@/components/ui/button";
import {
Card,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from "@/components/ui/card";
import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card";
import { basePath, mostPopularScripts } from "@/config/siteConfig";
import { extractDate } from "@/lib/time";
import { Category, Script } from "@/lib/types";
@@ -23,7 +16,8 @@ export const getDisplayValueFromType = (type: string) => {
return "LXC";
case "vm":
return "VM";
case "misc":
case "pve":
case "addon":
return "";
default:
return "";
@@ -47,8 +41,7 @@ export function LatestScripts({ items }: { items: Category[] }) {
});
return Array.from(uniqueScriptsMap.values()).sort(
(a, b) =>
new Date(b.date_created).getTime() - new Date(a.date_created).getTime(),
(a, b) => new Date(b.date_created).getTime() - new Date(a.date_created).getTime(),
);
}, [items]);
@@ -74,18 +67,12 @@ export function LatestScripts({ items }: { items: Category[] }) {
<h2 className="text-lg font-semibold">Newest Scripts</h2>
<div className="flex items-center justify-end gap-1">
{page > 1 && (
<div
className="cursor-pointer select-none p-2 text-sm font-semibold"
onClick={goToPreviousPage}
>
<div className="cursor-pointer select-none p-2 text-sm font-semibold" onClick={goToPreviousPage}>
Previous
</div>
)}
{endIndex < latestScripts.length && (
<div
onClick={goToNextPage}
className="cursor-pointer select-none p-2 text-sm font-semibold"
>
<div onClick={goToNextPage} className="cursor-pointer select-none p-2 text-sm font-semibold">
{page === 1 ? "More.." : "Next"}
</div>
)}
@@ -94,10 +81,7 @@ export function LatestScripts({ items }: { items: Category[] }) {
)}
<div className="min-w flex w-full flex-row flex-wrap gap-4">
{latestScripts.slice(startIndex, endIndex).map((script) => (
<Card
key={script.slug}
className="min-w-[250px] flex-1 flex-grow bg-accent/30"
>
<Card key={script.slug} className="min-w-[250px] flex-1 flex-grow bg-accent/30">
<CardHeader>
<CardTitle className="flex items-center gap-3">
<div className="flex h-16 w-16 min-w-16 items-center justify-center rounded-lg bg-accent p-1">
@@ -107,10 +91,7 @@ export function LatestScripts({ items }: { items: Category[] }) {
height={64}
width={64}
alt=""
onError={(e) =>
((e.currentTarget as HTMLImageElement).src =
`/${basePath}/logo.png`)
}
onError={(e) => ((e.currentTarget as HTMLImageElement).src = `/${basePath}/logo.png`)}
className="h-11 w-11 object-contain"
/>
</div>
@@ -126,9 +107,7 @@ export function LatestScripts({ items }: { items: Category[] }) {
</CardTitle>
</CardHeader>
<CardContent>
<CardDescription className="line-clamp-3 text-card-foreground">
{script.description}
</CardDescription>
<CardDescription className="line-clamp-3 text-card-foreground">{script.description}</CardDescription>
</CardContent>
<CardFooter className="">
<Button asChild variant="outline">
@@ -151,9 +130,7 @@ export function LatestScripts({ items }: { items: Category[] }) {
export function MostViewedScripts({ items }: { items: Category[] }) {
const mostViewedScripts = items.reduce((acc: Script[], category) => {
const foundScripts = category.scripts.filter((script) =>
mostPopularScripts.includes(script.slug),
);
const foundScripts = category.scripts.filter((script) => mostPopularScripts.includes(script.slug));
return acc.concat(foundScripts);
}, []);
@@ -166,10 +143,7 @@ export function MostViewedScripts({ items }: { items: Category[] }) {
)}
<div className="min-w flex w-full flex-row flex-wrap gap-4">
{mostViewedScripts.map((script) => (
<Card
key={script.slug}
className="min-w-[250px] flex-1 flex-grow bg-accent/30"
>
<Card key={script.slug} className="min-w-[250px] flex-1 flex-grow bg-accent/30">
<CardHeader>
<CardTitle className="flex items-center gap-3">
<div className="flex size-16 min-w-16 items-center justify-center rounded-lg bg-accent p-1">
@@ -179,10 +153,7 @@ export function MostViewedScripts({ items }: { items: Category[] }) {
height={64}
width={64}
alt=""
onError={(e) =>
((e.currentTarget as HTMLImageElement).src =
`/${basePath}/logo.png`)
}
onError={(e) => ((e.currentTarget as HTMLImageElement).src = `/${basePath}/logo.png`)}
className="h-11 w-11 object-contain"
/>
</div>

View File

@@ -14,12 +14,12 @@ import { Suspense } from "react";
import { ResourceDisplay } from "./ResourceDisplay";
import { getDisplayValueFromType } from "./ScriptInfoBlocks";
import Alerts from "./ScriptItems/Alerts";
import Buttons from "./ScriptItems/Buttons";
import DefaultPassword from "./ScriptItems/DefaultPassword";
import Description from "./ScriptItems/Description";
import InstallCommand from "./ScriptItems/InstallCommand";
import Tooltips from "./ScriptItems/Tooltips";
import InterFaces from "./ScriptItems/InterFaces";
import Buttons from "./ScriptItems/Buttons";
import Tooltips from "./ScriptItems/Tooltips";
interface ScriptItemProps {
item: Script;
@@ -142,7 +142,9 @@ export function ScriptItem({ item, setSelectedScript }: ScriptItemProps) {
<div className="mt-4 rounded-lg border shadow-sm">
<div className="flex gap-3 px-4 py-2 bg-accent/25">
<h2 className="text-lg font-semibold">How to {item.type === "misc" ? "use" : "install"}</h2>
<h2 className="text-lg font-semibold">
How to {item.type === "pve" ? "use" : item.type === "addon" ? "apply" : "install"}
</h2>
<Tooltips item={item} />
</div>
<Separator />

View File

@@ -16,7 +16,17 @@ const generateInstallSourceUrl = (slug: string) => {
const generateSourceUrl = (slug: string, type: string) => {
const baseUrl = `https://raw.githubusercontent.com/community-scripts/${basePath}/main`;
return type === "vm" ? `${baseUrl}/vm/${slug}.sh` : `${baseUrl}/misc/${slug}.sh`;
switch (type) {
case "vm":
return `${baseUrl}/vm/${slug}.sh`;
case "pve":
return `${baseUrl}/tools/pve/${slug}.sh`;
case "addon":
return `${baseUrl}/tools/addon/${slug}.sh`;
default:
return `${baseUrl}/ct/${slug}.sh`; // fallback for "ct"
}
};
const generateUpdateUrl = (slug: string) => {

View File

@@ -6,50 +6,44 @@ import { getDisplayValueFromType } from "../ScriptInfoBlocks";
const getInstallCommand = (scriptPath = "", isAlpine = false) => {
const url = `https://raw.githubusercontent.com/community-scripts/${basePath}/main/${scriptPath}`;
return isAlpine
? `bash -c "$(curl -fsSL ${url})"`
: `bash -c "$(curl -fsSL ${url})"`;
return isAlpine ? `bash -c "$(curl -fsSL ${url})"` : `bash -c "$(curl -fsSL ${url})"`;
};
export default function InstallCommand({ item }: { item: Script }) {
const alpineScript = item.install_methods.find(
(method) => method.type === "alpine",
);
const alpineScript = item.install_methods.find((method) => method.type === "alpine");
const defaultScript = item.install_methods.find(
(method) => method.type === "default",
);
const defaultScript = item.install_methods.find((method) => method.type === "default");
const renderInstructions = (isAlpine = false) => (
<>
<p className="text-sm mt-2">
{isAlpine ? (
<>
As an alternative option, you can use Alpine Linux and the{" "}
{item.name} package to create a {item.name}{" "}
{getDisplayValueFromType(item.type)} container with faster creation
time and minimal system resource usage. You are also obliged to
adhere to updates provided by the package maintainer.
As an alternative option, you can use Alpine Linux and the {item.name} package to create a {item.name}{" "}
{getDisplayValueFromType(item.type)} container with faster creation time and minimal system resource usage.
You are also obliged to adhere to updates provided by the package maintainer.
</>
) : item.type == "misc" ? (
) : item.type === "pve" ? (
<>
To use the {item.name} script, run the command below in the shell.
To use the {item.name} script, run the command below **only** in the Proxmox VE Shell. This script is
intended for managing or enhancing the host system directly.
</>
) : item.type === "addon" ? (
<>
This script enhances an existing setup. You can use it inside a running LXC container or directly on the
Proxmox VE host to extend functionality with {item.name}.
</>
) : (
<>
{" "}
To create a new Proxmox VE {item.name}{" "}
{getDisplayValueFromType(item.type)}, run the command below in the
To create a new Proxmox VE {item.name} {getDisplayValueFromType(item.type)}, run the command below in the
Proxmox VE Shell.
</>
)}
</p>
{isAlpine && (
<p className="mt-2 text-sm">
To create a new Proxmox VE Alpine-{item.name}{" "}
{getDisplayValueFromType(item.type)}, run the command below in the
Proxmox VE Shell
To create a new Proxmox VE Alpine-{item.name} {getDisplayValueFromType(item.type)}, run the command below in
the Proxmox VE Shell.
</p>
)}
</>
@@ -65,23 +59,17 @@ export default function InstallCommand({ item }: { item: Script }) {
</TabsList>
<TabsContent value="default">
{renderInstructions()}
<CodeCopyButton>
{getInstallCommand(defaultScript?.script)}
</CodeCopyButton>
<CodeCopyButton>{getInstallCommand(defaultScript?.script)}</CodeCopyButton>
</TabsContent>
<TabsContent value="alpine">
{renderInstructions(true)}
<CodeCopyButton>
{getInstallCommand(alpineScript.script, true)}
</CodeCopyButton>
<CodeCopyButton>{getInstallCommand(alpineScript.script, true)}</CodeCopyButton>
</TabsContent>
</Tabs>
) : defaultScript?.script ? (
<>
{renderInstructions()}
<CodeCopyButton>
{getInstallCommand(defaultScript.script)}
</CodeCopyButton>
<CodeCopyButton>{getInstallCommand(defaultScript.script)}</CodeCopyButton>
</>
) : null}
</div>

View File

@@ -6,6 +6,7 @@ import {
CommandItem,
CommandList,
} from "@/components/ui/command";
import { basePath } from "@/config/siteConfig";
import { fetchCategories } from "@/lib/data";
import { Category } from "@/lib/types";
import { cn } from "@/lib/utils";
@@ -15,18 +16,17 @@ import React from "react";
import { Badge } from "./ui/badge";
import { Button } from "./ui/button";
import { DialogTitle } from "./ui/dialog";
import { basePath } from "@/config/siteConfig";
export const formattedBadge = (type: string) => {
switch (type) {
case "vm":
return <Badge className="text-blue-500/75 border-blue-500/75">VM</Badge>;
case "ct":
return (
<Badge className="text-yellow-500/75 border-yellow-500/75">LXC</Badge>
);
case "misc":
return <Badge className="text-green-500/75 border-green-500/75">MISC</Badge>;
return <Badge className="text-yellow-500/75 border-yellow-500/75">LXC</Badge>;
case "pve":
return <Badge className="text-orange-500/75 border-orange-500/75">PVE</Badge>;
case "addon":
return <Badge className="text-green-500/75 border-green-500/75">ADDON</Badge>;
}
return null;
};
@@ -84,14 +84,9 @@ export default function CommandMenu() {
<DialogTitle className="sr-only">Search scripts</DialogTitle>
<CommandInput placeholder="Search for a script..." />
<CommandList>
<CommandEmpty>
{isLoading ? "Loading..." : "No scripts found."}
</CommandEmpty>
<CommandEmpty>{isLoading ? "Loading..." : "No scripts found."}</CommandEmpty>
{links.map((category) => (
<CommandGroup
key={`category:${category.name}`}
heading={category.name}
>
<CommandGroup key={`category:${category.name}`} heading={category.name}>
{category.scripts.map((script) => (
<CommandItem
key={`script:${script.slug}`}
@@ -104,10 +99,7 @@ export default function CommandMenu() {
<div className="flex gap-2" onClick={() => setOpen(false)}>
<Image
src={script.logo || `/${basePath}/logo.png`}
onError={(e) =>
((e.currentTarget as HTMLImageElement).src =
`/${basePath}/logo.png`)
}
onError={(e) => ((e.currentTarget as HTMLImageElement).src = `/${basePath}/logo.png`)}
unoptimized
width={16}
height={16}

View File

@@ -0,0 +1,29 @@
import * as AccordionPrimitive from "@radix-ui/react-accordion";
import { Plus } from "lucide-react";
import { FAQ_Items } from "../config/faqConfig";
import { Accordion, AccordionContent, AccordionItem } from "./ui/accordion";
export default function FAQ() {
return (
<div className="space-y-4">
<Accordion type="single" collapsible className="w-full">
{FAQ_Items.map((item, index) => (
<AccordionItem value={index.toString()} key={index} className="py-2">
<AccordionPrimitive.Header className="flex">
<AccordionPrimitive.Trigger className="flex flex-1 items-center gap-3 py-2 text-left text-[15px] font-semibold leading-6 transition-all [&>svg>path:last-child]:origin-center [&>svg>path:last-child]:transition-all [&>svg>path:last-child]:duration-200 [&>svg]:-order-1 [&[data-state=open]>svg>path:last-child]:rotate-90 [&[data-state=open]>svg>path:last-child]:opacity-0 [&[data-state=open]>svg]:rotate-180">
{item.title}
<Plus
size={16}
strokeWidth={2}
className="shrink-0 opacity-60 transition-transform duration-200"
aria-hidden="true"
/>
</AccordionPrimitive.Trigger>
</AccordionPrimitive.Header>
<AccordionContent className="pb-2 ps-7 text-muted-foreground">{item.content}</AccordionContent>
</AccordionItem>
))}
</Accordion>
</div>
);
}

View File

@@ -6,13 +6,13 @@ import { cn } from "@/lib/utils";
export default function Footer() {
return (
<div className="supports-backdrop-blur:bg-background/90 mt-auto border-t w-full flex justify-between border-border bg-background/40 py-6 backdrop-blur-lg">
<div className="supports-backdrop-blur:bg-background/90 mt-auto border-t w-full flex justify-between border-border bg-background/40 py-4 backdrop-blur-lg">
<div className="mx-6 w-full flex justify-between text-xs sm:text-sm text-muted-foreground">
<div className="flex items-center">
<p>
Website built by the community. The source code is available on{" "}
<Link
href={`https://github.com/community-scripts/${basePath}`}
href={`https://github.com/community-scripts/${basePath}/frontend`}
target="_blank"
rel="noreferrer"
className="font-semibold underline-offset-2 duration-300 hover:underline"

View File

@@ -0,0 +1,37 @@
export const FAQ_Items = [
{
title: "Why do you use tarballs instead of git pull for installation?",
content:
"Our LXC scripts install applications using release tarballs. Tarballs contain stable code versions tested for release. Using `git pull` directly fetches the latest development code, which might be unstable or contain bugs. Tarballs offer a more reliable installation.",
},
{
title: "Why do the scripts install applications using HTTP by default?",
content:
"Our LXC scripts install applications using HTTP by default. Setting up HTTPS often requires manual configuration specific to your setup, which our automated scripts cannot handle reliably. If an application requires HTTPS, the script will configure it. For others, you need to enable HTTPS yourself, often following the application's official documentation.",
},
{
title: "Where can I find documentation for the installed application?",
content:
"We link to the official documentation for each application whenever possible. You can usually find this link on the script's information page for the specific LXC script. If you notice a missing link for an application that has official docs, please report it so we can add it.",
},
{
title: "What should I do if I find a bug in an LXC script?",
content:
"Our LXC scripts are maintained by volunteers in their free time. Bugs can occur due to our errors or changes in the applications themselves. If you find a bug in one of our LXC scripts, please report it on our GitHub issues page. Your feedback helps us improve the scripts.",
},
{
title: "Why isn't the application updating to the very latest version?",
content:
"Updates via our LXC scripts might not pull the absolute latest version for a few reasons:\n- A bug in the application's release naming on GitHub.\n- A bug in our update script.\n- We intentionally pinned the version. This happens if a newer version has breaking changes or serious bugs that could affect your data or LXC stability. We wait for fixes before allowing the update.",
},
{
title: 'Why am I getting a "502 Bad Gateway" error?',
content:
'A "502 Bad Gateway" error usually means the application inside the LXC is not running or responding correctly. Check the application\'s logs first. If you use a reverse proxy, check its logs too. If you still have problems after checking the logs, report the issue, providing details from the logs.',
},
{
title: "What should I do if a script fails during execution?",
content:
"If an LXC script fails, run it again using Verbose mode. Standard mode hides detailed output for neatness, showing only progress. Verbose mode displays all messages, which helps you (and us) diagnose the error. Include this verbose output if you report the issue.",
},
];

View File

@@ -5,7 +5,7 @@ export type Script = {
slug: string;
categories: number[];
date_created: string;
type: "vm" | "ct" | "misc";
type: "vm" | "ct" | "pve" | "addon";
updateable: boolean;
privileged: boolean;
interface_port: number | null;

View File

@@ -17,7 +17,8 @@ msg_info "Installing Dependencies"
$STD apt-get install -y \
tini \
gpg \
build-essential
build-essential \
git
msg_ok "Installed Dependencies"
msg_info "Setting up Node.js Repository"
@@ -33,11 +34,11 @@ $STD npm install --global yarn
msg_ok "Installed Node.js"
msg_info "Installing Actual Budget"
cd /opt
cd /opt || exit
RELEASE=$(curl -fsSL https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/actualbudget/actual/archive/refs/tags/v${RELEASE}.tar.gz" -o $(basename "https://github.com/actualbudget/actual/archive/refs/tags/v${RELEASE}.tar.gz")
tar -xzf v${RELEASE}.tar.gz
mv actual-${RELEASE} /opt/actualbudget
tar -xzf v"${RELEASE}".tar.gz
mv actual-"${RELEASE}" /opt/actualbudget
mkdir -p /opt/actualbudget-data/{server-files,upload,migrate,user-files,migrations,config}
chown -R root:root /opt/actualbudget-data
@@ -53,8 +54,10 @@ ACTUAL_TRUSTED_PROXIES="10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,127.0.0.1/32,::1
ACTUAL_HTTPS_KEY=/opt/actualbudget/selfhost.key
ACTUAL_HTTPS_CERT=/opt/actualbudget/selfhost.crt
EOF
cd /opt/actualbudget
$STD yarn workspaces focus @actual-app/sync-server --production
cd /opt/actualbudget || exit
export NODE_OPTIONS="--max_old_space_size=3072"
$STD yarn install
$STD yarn run build:server
$STD openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout selfhost.key -out selfhost.crt <<EOF
US
California
@@ -93,7 +96,7 @@ motd_ssh
customize
msg_info "Cleaning up"
rm -rf /opt/v${RELEASE}.tar.gz
rm -rf /opt/v"${RELEASE}".tar.gz
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -22,34 +22,44 @@ msg_ok "Installed Dependencies"
msg_info "Installing MariaDB"
$STD apk add --no-cache mariadb mariadb-client
$STD rc-update add mariadb default
$STD rc-service mariadb start
msg_ok "Installed MariaDB"
msg_info "Configuring MariaDB"
mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql >/dev/null 2>&1
$STD rc-service mariadb restart
$STD rc-service mariadb start
msg_ok "MariaDB Configured"
read -r -p "Would you like to install Adminer with lighthttpd? <y/N>: " prompt
read -r -p "Would you like to install Adminer with lighttpd? <y/N>: " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Adminer"
$STD apk add --no-cache lighttpd php php-cgi php-mysqli php-mbstring php-zip php-gd php-json php-curl jq
sed -i 's|server.modules += ( "mod_cgi" )|server.modules += ( "mod_cgi", "mod_fastcgi" )|' /etc/lighttpd/lighttpd.conf
echo 'fastcgi.server += ( ".php" => (( "bin-path" => "/usr/bin/php-cgi", "socket" => "/var/run/php-cgi.sock" )))' >>/etc/lighttpd/lighttpd.conf
ADMINER_VERSION=$(curl -s https://api.github.com/repos/vrana/adminer/releases/latest | jq -r '.tag_name' | sed 's/v//')
wget -q -O /var/www/adminer.php "https://github.com/vrana/adminer/releases/download/v${ADMINER_VERSION}/adminer-${ADMINER_VERSION}.php"
chown lighttpd:lighttpd /var/www/adminer.php
chmod 755 /var/www/adminer.php
msg_info "Installing Adminer and dependencies"
$STD apk add --no-cache \
lighttpd \
lighttpd-openrc \
php83 \
php83-cgi \
php83-common \
php83-curl \
php83-gd \
php83-mbstring \
php83-mysqli \
php83-mysqlnd \
php83-openssl \
php83-zip \
php83-session \
jq
sed -i 's|# *include "mod_fastcgi.conf"|include "mod_fastcgi.conf"|' /etc/lighttpd/lighttpd.conf
mkdir -p /var/www/localhost/htdocs
ADMINER_VERSION=$(curl -fsSL https://api.github.com/repos/vrana/adminer/releases/latest | jq -r '.tag_name' | sed 's/^v//')
curl -fsSL "https://github.com/vrana/adminer/releases/download/v${ADMINER_VERSION}/adminer-${ADMINER_VERSION}.php" -o /var/www/localhost/htdocs/adminer.php
chown lighttpd:lighttpd /var/www/localhost/htdocs/adminer.php
chmod 755 /var/www/localhost/htdocs/adminer.php
msg_ok "Adminer Installed"
msg_info "Starting Lighttpd"
$STD rc-update add lighttpd default
$STD rc-service lighttpd restart
msg_ok "Lighttpd Started"
echo -e "Adminer is available at: ${BL}http://$(hostname -I | awk '{print $1}')/adminer${CL}"
else
echo -e "Skipped Adminer Installation..."
fi
motd_ssh

View File

@@ -0,0 +1,70 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.postgresql.org/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing PostgreSQL"
$STD apk add --no-cache postgresql16 postgresql16-contrib postgresql16-openrc sudo
msg_ok "Installed PostgreSQL"
msg_info "Enabling PostgreSQL Service"
$STD rc-update add postgresql default
msg_ok "Enabled PostgreSQL Service"
msg_info "Starting PostgreSQL"
$STD rc-service postgresql start
msg_ok "Started PostgreSQL"
msg_info "Configuring PostgreSQL for External Access"
conf_file="/etc/postgresql16/postgresql.conf"
hba_file="/etc/postgresql16/pg_hba.conf"
sed -i 's/^#listen_addresses =.*/listen_addresses = '\''*'\''/' "$conf_file"
sed -i '/^host\s\+all\s\+all\s\+127.0.0.1\/32\s\+md5/ s/.*/host all all 0.0.0.0\/0 md5/' "$hba_file"
$STD rc-service postgresql restart
msg_ok "Configured and Restarted PostgreSQL"
read -r -p "Would you like to install Adminer with lighttpd? <y/N>: " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Adminer and dependencies"
$STD apk add --no-cache \
lighttpd \
lighttpd-openrc \
php83 \
php83-cgi \
php83-common \
php83-curl \
php83-gd \
php83-mbstring \
php83-pdo \
php83-pgsql \
php83-openssl \
php83-zip \
php83-session \
jq
sed -i 's|# *include "mod_fastcgi.conf"|include "mod_fastcgi.conf"|' /etc/lighttpd/lighttpd.conf
mkdir -p /var/www/localhost/htdocs
ADMINER_VERSION=$(curl -fsSL https://api.github.com/repos/vrana/adminer/releases/latest | jq -r '.tag_name' | sed 's/^v//')
curl -fsSL "https://github.com/vrana/adminer/releases/download/v${ADMINER_VERSION}/adminer-${ADMINER_VERSION}.php" -o /var/www/localhost/htdocs/adminer.php
chown lighttpd:lighttpd /var/www/localhost/htdocs/adminer.php
chmod 755 /var/www/localhost/htdocs/adminer.php
msg_ok "Adminer Installed"
msg_info "Starting Lighttpd"
$STD rc-update add lighttpd default
$STD rc-service lighttpd restart
msg_ok "Lighttpd Started"
fi
motd_ssh
customize

View File

@@ -0,0 +1,106 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.wireguard.com/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apk add \
newt \
curl \
openssh \
nano \
mc \
gpg \
iptables \
openrc
msg_ok "Installed Dependencies"
msg_info "Installing WireGuard"
$STD apk add --no-cache wireguard-tools
if [[ ! -L /etc/init.d/wg-quick.wg0 ]]; then
ln -s /etc/init.d/wg-quick /etc/init.d/wg-quick.wg0
fi
private_key=$(wg genkey)
cat <<EOF >/etc/wireguard/wg0.conf
[Interface]
PrivateKey = ${private_key}
Address = 10.0.0.1/24
SaveConfig = true
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE;
ListenPort = 51820
EOF
echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf
$STD rc-update add sysctl
$STD sysctl -p /etc/sysctl.conf
msg_ok "Installed WireGuard"
read -rp "Do you want to install WGDashboard? (y/N): " INSTALL_WGD
if [[ "$INSTALL_WGD" =~ ^[Yy]$ ]]; then
msg_info "Installing additional dependencies for WGDashboard"
$STD apk add --no-cache \
python3 \
py3-pip \
git \
sudo \
musl-dev \
linux-headers \
gcc \
python3-dev
msg_ok "Installed additional dependencies for WGDashboard"
msg_info "Installing WGDashboard"
git clone -q https://github.com/donaldzou/WGDashboard.git /etc/wgdashboard
cd /etc/wgdashboard/src || exit
chmod u+x wgd.sh
$STD ./wgd.sh install
msg_ok "Installed WGDashboard"
msg_info "Creating Service for WGDashboard"
cat <<EOF >/etc/init.d/wg-dashboard
#!/sbin/openrc-run
description="WireGuard Dashboard Service"
depend() {
need net
after firewall
}
start() {
ebegin "Starting WGDashboard"
cd /etc/wgdashboard/src/ || exit 1
./wgd.sh start &
eend $?
}
stop() {
ebegin "Stopping WGDashboard"
pkill -f "wgd.sh"
eend $?
}
EOF
chmod +x /etc/init.d/wg-dashboard
$STD rc-update add wg-dashboard default
$STD rc-service wg-dashboard start
msg_ok "Created Service for WGDashboard"
fi
msg_info "Starting Services"
$STD rc-update add wg-quick.wg0 default
$STD rc-service wg-quick.wg0 start
msg_ok "Started Services"
motd_ssh
customize

View File

@@ -34,7 +34,6 @@ users:
password: "\$argon2id\$v=19\$m=65536,t=3,p=4\$ZBopMzXrzhHXPEZxRDVT2w\$SxWm96DwhOsZyn34DLocwQEIb4kCDsk632PuiMdZnig"
groups: []
EOF
cat <<EOF >/etc/authelia/configuration.yml
authentication_backend:
file:
@@ -64,6 +63,8 @@ notifier:
filesystem:
filename: /etc/authelia/emails.txt
EOF
touch /etc/authelia/emails.txt
chown -R authelia:authelia /etc/authelia
systemctl enable -q --now authelia
msg_ok "Authelia Setup completed"

View File

@@ -42,6 +42,7 @@ if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
msg_ok "Installed Golang"
msg_info "Setup xCaddy"
$STD apt-get install -y git
cd /opt
RELEASE=$(curl -fsSL https://api.github.com/repos/caddyserver/xcaddy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
curl -fsSL "https://github.com/caddyserver/xcaddy/releases/download/${RELEASE}/xcaddy_${RELEASE:1}_linux_amd64.deb" -o $(basename "https://github.com/caddyserver/xcaddy/releases/download/${RELEASE}/xcaddy_${RELEASE:1}_linux_amd64.deb")

View File

@@ -18,7 +18,7 @@ $STD apt-get install -y g++-multilib
msg_ok "Installed Dependencies"
msg_info "Installing Daemon Sync Server"
curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/raw/main/misc/daemonsync_2.2.0.0059_amd64.deb -O "daemonsync_2.2.0.0059_amd64.deb"
curl -fsSL "https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/daemonsync_2.2.0.0059_amd64.deb" -o "daemonsync_2.2.0.0059_amd64.deb"
$STD dpkg -i daemonsync_2.2.0.0059_amd64.deb
msg_ok "Installed Daemon Sync Server"

View File

@@ -15,14 +15,14 @@ update_os
msg_info "Setting Phoscon Repository"
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
curl -fsSL http://phoscon.de/apt/deconz.pub.key >/etc/apt/trusted.gpg.d/deconz.pub.asc
curl -fsSL "http://phoscon.de/apt/deconz.pub.key" >/etc/apt/trusted.gpg.d/deconz.pub.asc
echo "deb [arch=amd64] http://phoscon.de/apt/deconz $VERSION main" >/etc/apt/sources.list.d/deconz.list
msg_ok "Setup Phoscon Repository"
msg_info "Installing deConz"
libssl=$(curl -fsSL "http://security.ubuntu.com/ubuntu/pool/main/o/openssl/" | grep -o 'libssl1\.1_1\.1\.1f-1ubuntu2\.2[^"]*amd64\.deb' | head -n1)
curl -fsSL "http://security.ubuntu.com/ubuntu/pool/main/o/openssl/$libssl" -O
$STD dpkg -i $libssl
curl -fsSL "http://security.ubuntu.com/ubuntu/pool/main/o/openssl/$libssl" -o "$libssl"
$STD dpkg -i "$libssl"
$STD apt-get update
$STD apt-get install -y deconz
msg_ok "Installed deConz"
@@ -51,7 +51,7 @@ motd_ssh
customize
msg_info "Cleaning up"
rm -rf $libssl
rm -rf "$libssl"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

Some files were not shown because too many files have changed in this diff Show More