Compare commits

..

106 Commits

Author SHA1 Message Date
community-scripts-pr-app[bot]
9e8841ea7a Update CHANGELOG.md (#4596)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-20 01:15:44 +01:00
community-scripts-pr-app[bot]
24d612c9e7 Update versions.json (#4595)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-20 02:15:02 +02:00
community-scripts-pr-app[bot]
3cfe253a3d Update CHANGELOG.md (#4593)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-19 18:18:44 +01:00
James Polley
b7e951fc1a Various unrelated fixes to kimai update script (#4549)
* Ensure lsb-release is installed

Fixes 4548

* Change to use same syntax as check for composer

There's a proposed solution to #4247 (which doesn't seem to have been committed - I'll fix that in a moment). I've changed the test I'm using to match that suggestion.

* Re-install composer

See #4550

* Try to catch download errors

During troubleshooting of another error, I ran into a condition where downloading the new version failed. It seems that this is because the earlier call to get the $RELEASE had failed.

This change is an attempt to catch download errors, and alert the user, and to not rm the existing install until we know the download worked.

* Re-install php-fpm

I missed in the earlier commit that this wasn't getting reinstalled
2025-05-19 19:18:18 +02:00
community-scripts-pr-app[bot]
f735e37b15 Update CHANGELOG.md (#4592)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-19 17:53:33 +01:00
Slaviša Arežina
2c2e602eb1 RustDesk Server: Add WebUI (#4590)
* Add WebUI

* Update

* Update port

* Update
2025-05-19 18:52:54 +02:00
community-scripts-pr-app[bot]
37cd6a6620 Update CHANGELOG.md (#4589)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-19 13:35:43 +01:00
push-app-to-main[bot]
a386765e33 rclone (#4579)
* 'Add new script'

* remove alpine only file

* Update rclone.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>
2025-05-19 14:35:10 +02:00
community-scripts-pr-app[bot]
d252e33e5c Update versions.json (#4586)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-19 14:07:51 +02:00
community-scripts-pr-app[bot]
08992599a0 Update CHANGELOG.md (#4585)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-19 12:43:19 +01:00
CanbiZ
2a10eca156 increase ressources of Homarr (3 vCPU / 6GB RAM) (#4583) 2025-05-19 13:42:39 +02:00
Tobias
b4be96ff45 Update homarr-install.sh (#4578) 2025-05-19 09:48:57 +02:00
Tobias
06156a5a20 fix homarr release var (#4577) 2025-05-19 08:36:49 +02:00
community-scripts-pr-app[bot]
5ccff37e3b Update CHANGELOG.md (#4576)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-19 01:16:16 +01:00
community-scripts-pr-app[bot]
c5ca62ec38 Update versions.json (#4575)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-19 02:15:29 +02:00
community-scripts-pr-app[bot]
bc5fc031e7 Update CHANGELOG.md (#4573)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-18 20:48:49 +01:00
Tobias
4ead65f948 Update dashy.json (#4570) 2025-05-18 21:48:25 +02:00
community-scripts-pr-app[bot]
b602416a7e Update CHANGELOG.md (#4572)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-18 20:14:28 +01:00
Tobias
cb431da23b Homarr: fix the build (#4569)
* fix homarr build

* Update homarr-install.sh
2025-05-18 21:13:39 +02:00
community-scripts-pr-app[bot]
19ddb4b2b1 Update versions.json (#4567)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-18 14:06:46 +02:00
community-scripts-pr-app[bot]
1378d55fae Update CHANGELOG.md (#4566)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-18 08:28:26 +01:00
Slaviša Arežina
8f647b9abe tools.func - Add function to create self-signed certificates (#4562) 2025-05-18 09:27:55 +02:00
community-scripts-pr-app[bot]
8a481e1423 Update CHANGELOG.md (#4564)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-18 01:16:06 +01:00
community-scripts-pr-app[bot]
42ee79ac30 Update versions.json (#4563)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-18 02:15:34 +02:00
community-scripts-pr-app[bot]
5a6dc35fe0 Update versions.json (#4557)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-17 14:07:00 +02:00
Slaviša Arežina
73c08a8c5e Add a slight pause before continuing (#4553) 2025-05-17 08:45:31 +02:00
community-scripts-pr-app[bot]
67feae778e Update CHANGELOG.md (#4547)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-17 01:15:09 +01:00
community-scripts-pr-app[bot]
7dd49d634e Update versions.json (#4546)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-17 02:14:26 +02:00
community-scripts-pr-app[bot]
06191ca260 Update CHANGELOG.md (#4542)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-16 21:31:27 +01:00
Slaviša Arežina
0118974ba7 Remove bolt.diy (#4541) 2025-05-16 21:34:56 +02:00
Michel Roegl-Brunner
22e5a54941 build.func aktualisieren (#4537) 2025-05-16 17:48:23 +02:00
community-scripts-pr-app[bot]
ce7442bab7 Update CHANGELOG.md (#4532)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-16 14:49:01 +01:00
Michel Roegl-Brunner
54c522e39b [core] Refactor Config File function (#4528)
* Refactor Config File function

* Refactor Config File function
2025-05-16 15:48:18 +02:00
community-scripts-pr-app[bot]
dfa08625e3 Update versions.json (#4529)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-16 14:07:46 +02:00
community-scripts-pr-app[bot]
f6d411b992 Update CHANGELOG.md (#4525)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-16 08:49:51 +01:00
Michel Roegl-Brunner
9359f6d883 Enable SSH_KEY without password (#4523) 2025-05-16 09:49:16 +02:00
community-scripts-pr-app[bot]
b021a2c139 Update CHANGELOG.md (#4524)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-16 08:39:54 +01:00
Michel Roegl-Brunner
4de228d41b Fix Bridge detection (#4522) 2025-05-16 09:39:29 +02:00
community-scripts-pr-app[bot]
7d2e8eaaad Update CHANGELOG.md (#4521)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-16 06:25:07 +01:00
Slaviša Arežina
ce69a571bc Updated contributor docs (#4518) 2025-05-16 07:24:38 +02:00
community-scripts-pr-app[bot]
1fdda378ac Update CHANGELOG.md (#4520)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-16 01:15:21 +01:00
community-scripts-pr-app[bot]
7b62fd4866 Update versions.json (#4519)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-16 02:14:49 +02:00
Slaviša Arežina
0da24e2651 Fix tags (#4513) 2025-05-15 17:54:10 +02:00
community-scripts-pr-app[bot]
fd689e94ed Update CHANGELOG.md (#4512)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-15 14:24:23 +01:00
community-scripts-pr-app[bot]
47155ac280 Update .app files (#4510)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-15 15:23:30 +02:00
community-scripts-pr-app[bot]
aa57bac96d Update CHANGELOG.md (#4511)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-15 14:22:59 +01:00
community-scripts-pr-app[bot]
24d730c120 Update date in json (#4509)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-15 14:22:51 +01:00
push-app-to-main[bot]
de9ae6eaa9 bitmagnet (#4493)
* 'Add new script'

* -fsSL

* -fsSL

* add alpine bitmagnet

* add alpine bitmagnet

* Update alpine-bitmagnet.sh

* Update alpine-bitmagnet-install.sh

* Update alpine-bitmagnet.sh

* Update bitmagnet.sh

* Update bitmagnet.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: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2025-05-15 15:22:16 +02:00
community-scripts-pr-app[bot]
4fd065a4bd Update CHANGELOG.md (#4508)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-15 14:19:08 +01:00
CanbiZ
e26aac187b Update tools.func (#4507) 2025-05-15 15:18:41 +02:00
community-scripts-pr-app[bot]
5e63b70e83 Update CHANGELOG.md (#4504)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-15 13:08:19 +01:00
community-scripts-pr-app[bot]
292ab6e54b Update versions.json (#4503)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-15 14:07:39 +02:00
community-scripts-pr-app[bot]
7d924fac27 Update CHANGELOG.md (#4502)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-15 11:53:46 +01:00
Michel Roegl-Brunner
4b31957617 Fix Bridge detection (#4495) 2025-05-15 12:53:21 +02:00
community-scripts-pr-app[bot]
35c99ae503 Update CHANGELOG.md (#4499)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-15 10:14:39 +01:00
Slaviša Arežina
62189321cc Update scripts that use read -p (#4498) 2025-05-15 11:13:57 +02:00
community-scripts-pr-app[bot]
59dfdc9af6 Update CHANGELOG.md (#4497)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-15 09:32:13 +01:00
Slaviša Arežina
19cf4d3dc2 Add TAB3 formatting var to core (#4496) 2025-05-15 10:31:37 +02:00
community-scripts-pr-app[bot]
369265a6d5 Update versions.json (#4492)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-15 02:13:53 +02:00
community-scripts-pr-app[bot]
56f8306960 Update CHANGELOG.md (#4490)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-15 01:11:05 +01:00
CanbiZ
3daf3c3325 HomeAssistant-Core: add Deprecation-Warning for August 2025 (#4489) 2025-05-14 22:11:10 +02:00
community-scripts-pr-app[bot]
c36000a6aa Update CHANGELOG.md (#4488)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-14 18:38:06 +01:00
Maciej Matczak
12265b92e7 Add make installation dependency (#4485) 2025-05-14 19:37:38 +02:00
community-scripts-pr-app[bot]
4e31445038 Update .app files (#4482)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-14 16:56:33 +02:00
Tobias
c30f96912d quickfix: fix homarr folder (#4481) 2025-05-14 16:52:46 +02:00
community-scripts-pr-app[bot]
e3860c065e Update CHANGELOG.md (#4480)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-14 15:09:05 +01:00
community-scripts-pr-app[bot]
110b64df85 Update CHANGELOG.md (#4479)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-14 15:08:46 +01:00
Tobias
e17f7aa6f1 fix fetch_release_and_deploy (#4478) 2025-05-14 16:08:21 +02:00
push-app-to-main[bot]
b4d98b1dd2 odoo (#4477)
* 'Add new script'

* Update ct/odoo.sh

Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com>

* Update odoo.sh

---------

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: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com>
2025-05-14 16:07:57 +02:00
push-app-to-main[bot]
e24636133d asterisk (#4468)
* 'Add new script'

* Update asterisk.json

* Update asterisk.json

* Update asterisk-install.sh

* Update asterisk.sh

* Update asterisk-install.sh

* Update asterisk-install.sh

* Update asterisk.sh

* noob STD service call

---------

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: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com>
2025-05-14 14:28:37 +02:00
community-scripts-pr-app[bot]
7d0a964918 Update versions.json (#4470)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-14 14:07:30 +02:00
community-scripts-pr-app[bot]
38c7e747bc Update CHANGELOG.md (#4469)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-14 12:32:13 +01:00
Slaviša Arežina
180e003978 Alpine-Rclone: Fix location of passwords file (#4465)
* Fix install and update

* Update
2025-05-14 13:31:31 +02:00
community-scripts-pr-app[bot]
4762ea8fae Update CHANGELOG.md (#4464)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-14 10:03:39 +01:00
community-scripts-pr-app[bot]
4ec3af8e45 Update CHANGELOG.md (#4463)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-14 10:03:18 +01:00
CanbiZ
b816ca6788 Bookstack: fix copy of themes/uploads/storage (#4457) 2025-05-14 11:02:50 +02:00
Michel Roegl-Brunner
d703a8abb2 Add App to do the merging (#4461) 2025-05-14 11:02:41 +02:00
community-scripts-pr-app[bot]
4a1f87727b Update CHANGELOG.md (#4462)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-14 11:01:22 +02:00
Konstantin Krastev
16c0d09d6b Update monitor-all.sh (#4437)
 Summary of Changes from the Initial Version
🧩 1. Tag-Based Filtering (Core Feature)
New feature: Only restart instances (VMs or containers) that have the mon-restart tag.

This makes monitoring and auto-restart controllable directly from the Proxmox Web UI, without editing scripts or services.

Set via GUI: VM → Options → Tags → mon-restart

Set via CLI: qm set <vmid> -tags mon-restart or pct set <ctid> -tags mon-restart

This is the primary new control mechanism, making the script safer, more flexible, and user-friendly.

🧰 2. Backward-Compatible Exclusion Mechanism
The original feature that lets you exclude instances via CLI arguments is preserved:

bash
Copy
Edit
./ping-instances.sh 101 300
These IDs will always be skipped regardless of tag.

🧠 3. Intelligent Responsiveness Checks
For VMs:

Uses qm guest cmd <id> ping to check responsiveness via the QEMU guest agent.

No longer relies on network-level ping, which can be misleading or blocked.

For containers (CTs):

Uses traditional ping to IP addresses obtained from pct exec, since CTs don’t support QEMU agent.

 4. Instance Skipping Improvements
Instances are now skipped if:

They are explicitly excluded via CLI.

They are templates.

They are configured with onboot: 0 or missing.

They lack the mon-restart tag, regardless of other status.

🪵 5. Same Logging Behavior
All output continues to go to /var/log/ping-instances.log for persistent tracking.

Verbose messages were added for traceability (e.g., why a VM or CT was skipped).

🎯 Why This Matters
With tag-based control, admins can now manage restart behavior dynamically from the Proxmox Web UI, making the script:

More secure (no accidental restarts).

More maintainable (no script edits needed).

More user-friendly (integrated with the UI workflow).
2025-05-14 11:00:57 +02:00
community-scripts-pr-app[bot]
7740ab68f7 Update CHANGELOG.md (#4459)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-14 10:02:15 +02:00
community-scripts-pr-app[bot]
cd61025295 Update date in json (#4458)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-14 10:01:13 +02:00
CanbiZ
2695e2de1a Website: re-add documenso & some little bugfixes (#4456) 2025-05-14 10:00:41 +02:00
community-scripts-pr-app[bot]
7aea03034a Update CHANGELOG.md (#4455)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-14 02:15:13 +02:00
community-scripts-pr-app[bot]
e9960347bf Update versions.json (#4454)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-14 02:14:33 +02:00
Slaviša Arežina
3808d4d0b8 Fix json (#4453) 2025-05-13 23:23:44 +02:00
community-scripts-pr-app[bot]
14c5bf5f75 Update CHANGELOG.md (#4452)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-13 21:09:09 +02:00
Slaviša Arežina
fcc16ae8e1 Jellyfin Media Server: Update configuration path (#4434)
* Update configuration path

* typo
2025-05-13 21:06:37 +02:00
community-scripts-pr-app[bot]
aaf8bdb893 Update CHANGELOG.md (#4451)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-13 20:00:42 +02:00
moodyblue
db81851db4 openhab. correct some typos (#4448) 2025-05-13 20:00:09 +02:00
community-scripts-pr-app[bot]
a2d92155a5 Update CHANGELOG.md (#4449)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-13 18:44:30 +02:00
Filippo
0bd18cc91b fix: improve bridge detection in all network interface configuration files (#4413)
* fix: improve bridge detection in all network interface configuration files

* removed comments

* removed last comment line
2025-05-13 18:44:06 +02:00
community-scripts-pr-app[bot]
1e7981dbb7 Update CHANGELOG.md (#4446)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-13 15:26:16 +02:00
push-app-to-main[bot]
704073cd69 gatus (#4443)
* 'Add new script'

* Update ct/gatus.sh

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2025-05-13 15:25:38 +02:00
community-scripts-pr-app[bot]
22e1518951 Update CHANGELOG.md (#4445)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-13 15:20:38 +02:00
community-scripts-pr-app[bot]
57bd730233 Update date in json (#4444)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-13 15:19:04 +02:00
push-app-to-main[bot]
cf1b13e5fb alpine-gatus (#4442)
* 'Add new script'

* Update ct/alpine-gatus.sh

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2025-05-13 15:18:29 +02:00
community-scripts-pr-app[bot]
9a3b2c076d Update CHANGELOG.md (#4441)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-13 14:41:27 +02:00
moodyblue
3981cc90c4 Update openhab-install.sh (#4438)
1) Update zulu repo
2) Use zulu17-jdk (previously zulu21-jdk)
2025-05-13 14:40:49 +02:00
community-scripts-pr-app[bot]
592d9d03aa Update versions.json (#4439)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-13 14:07:30 +02:00
CanbiZ
59b00890f9 quickfix broken json 2025-05-13 13:33:50 +02:00
community-scripts-pr-app[bot]
7ee57e7416 Update CHANGELOG.md (#4433)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-13 10:56:23 +02:00
Slaviša Arežina
82a30df0c9 Update json (#4432) 2025-05-13 10:55:37 +02:00
community-scripts-pr-app[bot]
10e1d7e741 Update CHANGELOG.md (#4431)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-13 10:38:52 +02:00
CanbiZ
f85cddadcf update some improvements from dev (tools.func) (#4430)
* Harmonize tools.func from DEV-Repo

* Update tools.func
2025-05-13 10:38:19 +02:00
community-scripts-pr-app[bot]
1700291af7 Update CHANGELOG.md (#4429)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-13 07:53:01 +02:00
Cody Warmbo
e126e48439 Update pingvin.json (#4426)
Typo in config path
2025-05-13 07:52:28 +02:00
108 changed files with 3454 additions and 1507 deletions

View File

@@ -108,13 +108,13 @@ Example:
```bash ```bash
APP="SnipeIT" APP="SnipeIT"
var_tags="asset-management;foss" var_tags="${var_tags:-asset-management;foss}"
var_cpu="2" var_cpu="${var_cpu:-2}"
var_ram="2048" var_ram="${var_ram:-2048}"
var_disk="4" var_disk="${var_disk:-4}"
var_os="debian" var_os="${var_os:-debian}"
var_version="12" var_version="${var_version:-12}"
var_unprivileged="1" var_unprivileged="${var_unprivileged:-1}"
``` ```
## 2.2 **📋 App output & base settings** ## 2.2 **📋 App output & base settings**

View File

@@ -6,22 +6,22 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
# Source: [SOURCE_URL] # Source: [SOURCE_URL]
# App Default Values # App Default Values
APP="[APP_NAME]"
# Name of the app (e.g. Google, Adventurelog, Apache-Guacamole" # Name of the app (e.g. Google, Adventurelog, Apache-Guacamole"
var_tags="[TAGS]" APP="[APP_NAME]"
# Tags for Proxmox VE, maximum 2 pcs., no spaces allowed, separated by a semicolon ; (e.g. database | adblock;dhcp) # Tags for Proxmox VE, maximum 2 pcs., no spaces allowed, separated by a semicolon ; (e.g. database | adblock;dhcp)
var_cpu="[CPU]" var_tags="${var_tags:-[TAGS]}"
# Number of cores (1-X) (e.g. 4) - default are 2 # Number of cores (1-X) (e.g. 4) - default are 2
var_ram="[RAM]" var_cpu="${var_cpu:-[CPU]}"
# Amount of used RAM in MB (e.g. 2048 or 4096) # Amount of used RAM in MB (e.g. 2048 or 4096)
var_disk="[DISK]" var_ram="${var_ram:-[RAM]}"
# Amount of used disk space in GB (e.g. 4 or 10) # Amount of used disk space in GB (e.g. 4 or 10)
var_os="[OS]" var_disk="${var_disk:-[DISK]}"
# Default OS (e.g. debian, ubuntu, alpine) # Default OS (e.g. debian, ubuntu, alpine)
var_version="[VERSION]" var_os="${var_os:-[OS]}"
# Default OS version (e.g. 12 for debian, 24.04 for ubuntu, 3.20 for alpine) # Default OS version (e.g. 12 for debian, 24.04 for ubuntu, 3.20 for alpine)
var_unprivileged="[UNPRIVILEGED]" var_version="${var_version:-[VERSION]}"
# 1 = unprivileged container, 0 = privileged container # 1 = unprivileged container, 0 = privileged container
var_unprivileged="${var_unprivileged:-[UNPRIVILEGED]}"
header_info "$APP" header_info "$APP"
variables variables

View File

@@ -152,7 +152,7 @@ Example for a git release:
```bash ```bash
RELEASE=$(curl -fsSL https://api.github.com/repos/snipe/snipe-it/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -fsSL https://api.github.com/repos/snipe/snipe-it/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
wget -q "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.zip" curl -fsSL "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
``` ```
### 5.2 **Save the version for update checks** ### 5.2 **Save the version for update checks**
@@ -163,7 +163,7 @@ wget -q "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.zip"
Example: Example:
```bash ```bash
echo "${RELEASE}" >"/opt/AppName_version.txt" echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
``` ```
--- ---
@@ -184,7 +184,7 @@ msg_info "Installing Dependencies"
$STD apt-get install -y ... $STD apt-get install -y ...
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
read -p "Do you wish to enable HTTPS mode? (y/N): " httpschoice read -p "${TAB3}Do you wish to enable HTTPS mode? (y/N): " httpschoice
``` ```
### 6.2 **Verbosity** ### 6.2 **Verbosity**

View File

@@ -6,7 +6,7 @@
# Source: [SOURCE_URL] # Source: [SOURCE_URL]
# Import Functions und Setup # Import Functions und Setup
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color color
verb_ip6 verb_ip6
catch_errors catch_errors
@@ -35,11 +35,9 @@ $STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH
echo "Database User: $DB_USER" echo "Database User: $DB_USER"
echo "Database Password: $DB_PASS" echo "Database Password: $DB_PASS"
echo "Database Name: $DB_NAME" echo "Database Name: $DB_NAME"
} >> ~/$APP_NAME.creds } >>~/"$APP_NAME".creds
msg_ok "Set up Database" msg_ok "Set up Database"
# Temp
# Setup App # Setup App
msg_info "Setup ${APPLICATION}" msg_info "Setup ${APPLICATION}"
RELEASE=$(curl -fsSL https://api.github.com/repos/[REPO]/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') RELEASE=$(curl -fsSL https://api.github.com/repos/[REPO]/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
@@ -49,12 +47,12 @@ mv "${APPLICATION}-${RELEASE}/" "/opt/${APPLICATION}"
# #
# #
# #
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt echo "${RELEASE}" >/opt/"${APPLICATION}"_version.txt
msg_ok "Setup ${APPLICATION}" msg_ok "Setup ${APPLICATION}"
# Creating Service (if needed) # Creating Service (if needed)
msg_info "Creating Service" msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/${APPLICATION}.service cat <<EOF >/etc/systemd/system/"${APPLICATION}".service
[Unit] [Unit]
Description=${APPLICATION} Service Description=${APPLICATION} Service
After=network.target After=network.target
@@ -66,7 +64,7 @@ Restart=always
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
systemctl enable -q --now ${APPLICATION} systemctl enable -q --now "${APPLICATION}"
msg_ok "Created Service" msg_ok "Created Service"
motd_ssh motd_ssh
@@ -74,7 +72,7 @@ customize
# Cleanup # Cleanup
msg_info "Cleaning up" msg_info "Cleaning up"
rm -f ${RELEASE}.zip rm -f "${RELEASE}".zip
$STD apt-get -y autoremove $STD apt-get -y autoremove
$STD apt-get -y autoclean $STD apt-get -y autoclean
msg_ok "Cleaned" msg_ok "Cleaned"

View File

@@ -5,7 +5,7 @@ on:
branches: branches:
- main - main
paths: paths:
- 'ct/**.sh' - "ct/**.sh"
workflow_dispatch: workflow_dispatch:
jobs: jobs:
@@ -25,6 +25,13 @@ jobs:
app-id: ${{ vars.APP_ID }} app-id: ${{ vars.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }} private-key: ${{ secrets.APP_PRIVATE_KEY }}
- name: Generate a token for PR approval and merge
id: generate-token-merge
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
# Step 1: Checkout repository # Step 1: Checkout repository
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v2 uses: actions/checkout@v2
@@ -94,9 +101,11 @@ jobs:
- name: Approve pull request and merge - name: Approve pull request and merge
if: env.changed == 'true' if: env.changed == 'true'
env: env:
GH_TOKEN: ${{ secrets.PAT_AUTOMERGE }} GH_TOKEN: ${{ steps.generate-token-merge.outputs.token }}
run: | run: |
PR_NUMBER=$(gh pr list --head "pr-update-app-files" --json number --jq '.[].number') git config --global user.name "github-actions-automege[bot]"
git config --global user.email "github-actions-automege[bot]@users.noreply.github.com"
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number')
if [ -n "$PR_NUMBER" ]; then if [ -n "$PR_NUMBER" ]; then
gh pr review $PR_NUMBER --approve gh pr review $PR_NUMBER --approve
gh pr merge $PR_NUMBER --squash --admin gh pr merge $PR_NUMBER --squash --admin

View File

@@ -24,6 +24,13 @@ jobs:
app-id: ${{ vars.APP_ID }} app-id: ${{ vars.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }} private-key: ${{ secrets.APP_PRIVATE_KEY }}
- name: Generate a token for PR approval and merge
id: generate-token-merge
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
@@ -267,20 +274,12 @@ jobs:
- name: Approve pull request and merge - name: Approve pull request and merge
if: env.changed == 'true' if: env.changed == 'true'
env: env:
GH_TOKEN: ${{ secrets.PAT_AUTOMERGE }} GH_TOKEN: ${{ steps.generate-token-merge.outputs.token }}
run: | run: |
git config --global user.name "github-actions-automege[bot]"
git config --global user.email "github-actions-automege[bot]@users.noreply.github.com"
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number') PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number')
if [ -n "$PR_NUMBER" ]; then if [ -n "$PR_NUMBER" ]; then
gh pr review $PR_NUMBER --approve gh pr review $PR_NUMBER --approve
gh pr merge $PR_NUMBER --squash --admin gh pr merge $PR_NUMBER --squash --admin
fi fi
- name: Re-approve pull request after update
if: env.changed == 'true'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number')
if [ -n "$PR_NUMBER" ]; then
gh pr review $PR_NUMBER --approve
fi

View File

@@ -5,7 +5,7 @@ on:
branches: branches:
- main - main
paths: paths:
- 'frontend/public/json/**.json' - "frontend/public/json/**.json"
workflow_dispatch: workflow_dispatch:
jobs: jobs:
@@ -25,6 +25,13 @@ jobs:
app-id: ${{ vars.APP_ID }} app-id: ${{ vars.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }} private-key: ${{ secrets.APP_PRIVATE_KEY }}
- name: Generate a token for PR approval and merge
id: generate-token-merge
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
- name: Generate dynamic branch name - name: Generate dynamic branch name
id: timestamp id: timestamp
run: echo "BRANCH_NAME=pr-update-json-$(date +'%Y%m%d%H%M%S')" >> $GITHUB_ENV run: echo "BRANCH_NAME=pr-update-json-$(date +'%Y%m%d%H%M%S')" >> $GITHUB_ENV
@@ -126,12 +133,15 @@ jobs:
if [ -n "$PR_NUMBER" ]; then if [ -n "$PR_NUMBER" ]; then
gh pr review $PR_NUMBER --approve gh pr review $PR_NUMBER --approve
fi fi
- name: Approve pull request and merge - name: Approve pull request and merge
if: env.changed == 'true' if: env.changed == 'true'
env: env:
GH_TOKEN: ${{ secrets.PAT_AUTOMERGE }} GH_TOKEN: ${{ steps.generate-token-merge.outputs.token }}
run: | run: |
PR_NUMBER=$(gh pr list --head "${{ env.BRANCH_NAME }}" --json number --jq '.[].number') git config --global user.name "github-actions-automege[bot]"
git config --global user.email "github-actions-automege[bot]@users.noreply.github.com"
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number')
if [ -n "$PR_NUMBER" ]; then if [ -n "$PR_NUMBER" ]; then
gh pr review $PR_NUMBER --approve gh pr review $PR_NUMBER --approve
gh pr merge $PR_NUMBER --squash --admin gh pr merge $PR_NUMBER --squash --admin

View File

@@ -14,8 +14,144 @@ 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. 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-05-20
## 2025-05-19
### 🆕 New Scripts
- rclone ([#4579](https://github.com/community-scripts/ProxmoxVE/pull/4579))
### 🚀 Updated Scripts
- increase ressources of Homarr (3 vCPU / 6GB RAM) [@MickLesk](https://github.com/MickLesk) ([#4583](https://github.com/community-scripts/ProxmoxVE/pull/4583))
- #### 🐞 Bug Fixes
- Various unrelated fixes to kimai update script [@jamezpolley](https://github.com/jamezpolley) ([#4549](https://github.com/community-scripts/ProxmoxVE/pull/4549))
- #### ✨ New Features
- RustDesk Server: Add WebUI [@tremor021](https://github.com/tremor021) ([#4590](https://github.com/community-scripts/ProxmoxVE/pull/4590))
## 2025-05-18
### 🚀 Updated Scripts
- tools.func - Add function to create self-signed certificates [@tremor021](https://github.com/tremor021) ([#4562](https://github.com/community-scripts/ProxmoxVE/pull/4562))
- #### 🐞 Bug Fixes
- Homarr: fix the build [@CrazyWolf13](https://github.com/CrazyWolf13) ([#4569](https://github.com/community-scripts/ProxmoxVE/pull/4569))
### 🌐 Website
- #### 📝 Script Information
- Fix Dashy Config Path on Frontend [@CrazyWolf13](https://github.com/CrazyWolf13) ([#4570](https://github.com/community-scripts/ProxmoxVE/pull/4570))
## 2025-05-17
## 2025-05-16
### 🧰 Maintenance
- #### 💾 Core
- [core] Refactor Config File function [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4528](https://github.com/community-scripts/ProxmoxVE/pull/4528))
- [core] Fix Bridge detection in Advanced Mode [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4522](https://github.com/community-scripts/ProxmoxVE/pull/4522))
- [core] Enable SSH_KEY and SSH without password [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4523](https://github.com/community-scripts/ProxmoxVE/pull/4523))
- #### 📂 Github
- Updates to contributor docs/guide [@tremor021](https://github.com/tremor021) ([#4518](https://github.com/community-scripts/ProxmoxVE/pull/4518))
### 🌐 Website
- Remove bolt.diy script [@tremor021](https://github.com/tremor021) ([#4541](https://github.com/community-scripts/ProxmoxVE/pull/4541))
## 2025-05-15
### 🆕 New Scripts
- bitmagnet ([#4493](https://github.com/community-scripts/ProxmoxVE/pull/4493))
### 🚀 Updated Scripts
- core: Add TAB3 formatting var to core [@tremor021](https://github.com/tremor021) ([#4496](https://github.com/community-scripts/ProxmoxVE/pull/4496))
- Update scripts that use "read -p" to properly indent text [@tremor021](https://github.com/tremor021) ([#4498](https://github.com/community-scripts/ProxmoxVE/pull/4498))
- #### ✨ New Features
- tools.func: fix some things & add ruby default function [@MickLesk](https://github.com/MickLesk) ([#4507](https://github.com/community-scripts/ProxmoxVE/pull/4507))
### 🧰 Maintenance
- #### 💾 Core
- core: fix bridge detection for OVS [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4495](https://github.com/community-scripts/ProxmoxVE/pull/4495))
## 2025-05-14
### 🆕 New Scripts
- odoo ([#4477](https://github.com/community-scripts/ProxmoxVE/pull/4477))
- asterisk ([#4468](https://github.com/community-scripts/ProxmoxVE/pull/4468))
### 🚀 Updated Scripts
- fix: fetch_release_and_deploy function [@CrazyWolf13](https://github.com/CrazyWolf13) ([#4478](https://github.com/community-scripts/ProxmoxVE/pull/4478))
- Website: re-add documenso & some little bugfixes [@MickLesk](https://github.com/MickLesk) ([#4456](https://github.com/community-scripts/ProxmoxVE/pull/4456))
- #### 🐞 Bug Fixes
- Add make installation dependency to Actual Budget script [@maciejmatczak](https://github.com/maciejmatczak) ([#4485](https://github.com/community-scripts/ProxmoxVE/pull/4485))
- Bookstack: fix copy of themes/uploads/storage [@MickLesk](https://github.com/MickLesk) ([#4457](https://github.com/community-scripts/ProxmoxVE/pull/4457))
- Alpine-Rclone: Fix location of passwords file [@tremor021](https://github.com/tremor021) ([#4465](https://github.com/community-scripts/ProxmoxVE/pull/4465))
- #### ✨ New Features
- monitor-all: improvements - tag based filtering [@grizmin](https://github.com/grizmin) ([#4437](https://github.com/community-scripts/ProxmoxVE/pull/4437))
### 🧰 Maintenance
- #### 📂 Github
- Add Github app for auto PR merge [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4461](https://github.com/community-scripts/ProxmoxVE/pull/4461))
## 2025-05-13 ## 2025-05-13
### 🆕 New Scripts
- gatus ([#4443](https://github.com/community-scripts/ProxmoxVE/pull/4443))
- alpine-gatus ([#4442](https://github.com/community-scripts/ProxmoxVE/pull/4442))
### 🚀 Updated Scripts
- update some improvements from dev (tools.func) [@MickLesk](https://github.com/MickLesk) ([#4430](https://github.com/community-scripts/ProxmoxVE/pull/4430))
- #### 🐞 Bug Fixes
- openhab: use zulu17-jdk [@moodyblue](https://github.com/moodyblue) ([#4438](https://github.com/community-scripts/ProxmoxVE/pull/4438))
- #### 🔧 Refactor
- openhab. correct some typos [@moodyblue](https://github.com/moodyblue) ([#4448](https://github.com/community-scripts/ProxmoxVE/pull/4448))
### 🧰 Maintenance
- #### 💾 Core
- fix: improve bridge detection in all network interface configuration files [@filippolauria](https://github.com/filippolauria) ([#4413](https://github.com/community-scripts/ProxmoxVE/pull/4413))
### 🌐 Website
- #### 📝 Script Information
- Jellyfin Media Server: Update configuration path [@tremor021](https://github.com/tremor021) ([#4434](https://github.com/community-scripts/ProxmoxVE/pull/4434))
- Pingvin Share: Added explanation on how to add/edit environment variables [@tremor021](https://github.com/tremor021) ([#4432](https://github.com/community-scripts/ProxmoxVE/pull/4432))
- pingvin.json: fix typo [@warmbo](https://github.com/warmbo) ([#4426](https://github.com/community-scripts/ProxmoxVE/pull/4426))
## 2025-05-12 ## 2025-05-12
### 🆕 New Scripts ### 🆕 New Scripts

89
ct/alpine-bitmagnet.sh Normal file
View File

@@ -0,0 +1,89 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/bitmagnet-io/bitmagnet
APP="Alpine-bitmagnet"
var_tags="${var_tags:-alpine;torrent}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-3}"
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() {
header_info
if [[ ! -d /opt/bitmagnet ]]; then
msg_error "No ${APP} Installation Found!"
exit 1
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [ "${RELEASE}" != "$(cat /opt/bitmagnet_version.txt)" ] || [ ! -f /opt/bitmagnet_version.txt ]; then
msg_info "Backing up database"
rm -f /tmp/backup.sql
$STD sudo -u postgres pg_dump \
--column-inserts \
--data-only \
--on-conflict-do-nothing \
--rows-per-insert=1000 \
--table=metadata_sources \
--table=content \
--table=content_attributes \
--table=content_collections \
--table=content_collections_content \
--table=torrent_sources \
--table=torrents \
--table=torrent_files \
--table=torrent_hints \
--table=torrent_contents \
--table=torrent_tags \
--table=torrents_torrent_sources \
--table=key_values \
bitmagnet \
>/tmp/backup.sql
mv /tmp/backup.sql /opt/
msg_ok "Database backed up"
msg_info "Updating ${APP} from $(cat /opt/bitmagnet_version.txt) to ${RELEASE}"
$STD apk -U upgrade
$STD service bitmagnet stop
[ -f /opt/bitmagnet/.env ] && cp /opt/bitmagnet/.env /opt/
[ -f /opt/bitmagnet/config.yml ] && cp /opt/bitmagnet/config.yml /opt/
rm -rf /opt/bitmagnet/*
temp_file=$(mktemp)
curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
cd /opt/bitmagnet
VREL=v$RELEASE
$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
chmod +x bitmagnet
[ -f "/opt/.env" ] && cp "/opt/.env" /opt/bitmagnet/
[ -f "/opt/config.yml" ] && cp "/opt/config.yml" /opt/bitmagnet/
rm -f "$temp_file"
echo "${RELEASE}" >/opt/bitmagnet_version.txt
$STD service bitmagnet start
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
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} Access it using the following IP:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3333${CL}"

62
ct/alpine-gatus.sh Normal file
View File

@@ -0,0 +1,62 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/TwiN/gatus
APP="Alpine-gatus"
var_tags="${var_tags:-alpine;monitoring}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-256}"
var_disk="${var_disk:-3}"
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() {
header_info
if [[ ! -d /opt/gatus ]]; then
msg_error "No ${APP} Installation Found!"
exit 1
fi
RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [ "${RELEASE}" != "$(cat /opt/gatus_version.txt)" ] || [ ! -f /opt/gatus_version.txt ]; then
msg_info "Updating ${APP} LXC"
$STD apk -U upgrade
$STD service gatus stop
mv /opt/gatus/config/config.yaml /opt
rm -rf /opt/gatus/*
temp_file=$(mktemp)
curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar zxf "$temp_file" --strip-components=1 -C /opt/gatus
cd /opt/gatus
$STD go mod tidy
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus .
setcap CAP_NET_RAW+ep gatus
mv /opt/config.yaml config
rm -f "$temp_file"
echo "${RELEASE}" >/opt/gatus_version.txt
$STD service gatus start
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
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} Access it using the following IP:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"

View File

@@ -28,7 +28,6 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit 1 exit 1
fi fi
RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [ "${RELEASE}" != "$(cat /opt/rclone_version.txt)" ] || [ ! -f /opt/rclone_version.txt ]; then if [ "${RELEASE}" != "$(cat /opt/rclone_version.txt)" ] || [ ! -f /opt/rclone_version.txt ]; then
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"

35
ct/asterisk.sh Normal file
View File

@@ -0,0 +1,35 @@
#!/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: michelroegl-brunner
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://asterisk.org/
APP="Asterisk"
var_tags="${var_tags:-telephone;pbx}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
msg_error "No Update function provided for ${APP} LXC"
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"

98
ct/bitmagnet.sh Normal file
View File

@@ -0,0 +1,98 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/bitmagnet/bitmagnet
APP="Bitmagnet"
var_tags="${var_tags:-os}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_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/bitmagnet ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/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"
systemctl stop bitmagnet-web
msg_ok "Stopped Service"
msg_info "Backing up database"
rm -f /tmp/backup.sql
$STD sudo -u postgres pg_dump \
--column-inserts \
--data-only \
--on-conflict-do-nothing \
--rows-per-insert=1000 \
--table=metadata_sources \
--table=content \
--table=content_attributes \
--table=content_collections \
--table=content_collections_content \
--table=torrent_sources \
--table=torrents \
--table=torrent_files \
--table=torrent_hints \
--table=torrent_contents \
--table=torrent_tags \
--table=torrents_torrent_sources \
--table=key_values \
bitmagnet \
>/tmp/backup.sql
mv /tmp/backup.sql /opt/
msg_ok "Database backed up"
msg_info "Updating ${APP} to v${RELEASE}"
[ -f /opt/bitmagnet/.env ] && cp /opt/bitmagnet/.env /opt/
[ -f /opt/bitmagnet/config.yml ] && cp /opt/bitmagnet/config.yml /opt/
rm -rf /opt/bitmagnet/*
temp_file=$(mktemp)
curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
cd /opt/bitmagnet
VREL=v$RELEASE
$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
chmod +x bitmagnet
[ -f "/opt/.env" ] && cp "/opt/.env" /opt/bitmagnet/
[ -f "/opt/config.yml" ] && cp "/opt/config.yml" /opt/bitmagnet/
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting Service"
systemctl start bitmagnet-web
msg_ok "Started Service"
msg_info "Cleaning up"
rm -f "$temp_file"
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at v${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}:3333${CL}"

View File

@@ -1,71 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/stackblitz-labs/bolt.diy/
APP="boltdiy"
TAGS="code;ai"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-3072}"
var_disk="${var_disk:-6}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/bolt.diy ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/stackblitz-labs/bolt.diy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat /opt/boltdiy_version.txt)" ]] || [[ ! -f /opt/boltdiy_version.txt ]]; then
msg_info "Stopping $APP"
systemctl stop boltdiy
msg_ok "Stopped $APP"
msg_info "Updating $APP to v${RELEASE}"
temp_dir=$(mktemp -d)
temp_file=$(mktemp)
cd $temp_dir
curl -fsSL "https://github.com/stackblitz-labs/bolt.diy/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar xzf $temp_file
cp -rf bolt.diy-${RELEASE}/* /opt/bolt.diy
cd /opt/bolt.diy
$STD pnpm install
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP"
systemctl start boltdiy
msg_ok "Started $APP"
msg_info "Cleaning Up"
rm -rf $temp_file
rm -rf $temp_dir
msg_ok "Cleanup Completed"
echo "${RELEASE}" >/opt/boltdiy_version.txt
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${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}:5173${CL}"

View File

@@ -39,9 +39,9 @@ function update_script() {
unzip -q "/opt/BookStack-${RELEASE}.zip" -d /opt unzip -q "/opt/BookStack-${RELEASE}.zip" -d /opt
mv "/opt/BookStack-${RELEASE}" /opt/bookstack mv "/opt/BookStack-${RELEASE}" /opt/bookstack
cp /opt/bookstack-backup/.env /opt/bookstack/.env cp /opt/bookstack-backup/.env /opt/bookstack/.env
cp -r /opt/bookstack-backup/public/uploads/* /opt/bookstack/public/uploads/ || true [[ -d /opt/bookstack-backup/public/uploads ]] && cp -a /opt/bookstack-backup/public/uploads/. /opt/bookstack/public/uploads/
cp -r /opt/bookstack-backup/storage/uploads/* /opt/bookstack/storage/uploads/ || true [[ -d /opt/bookstack-backup/storage/uploads ]] && cp -a /opt/bookstack-backup/storage/uploads/. /opt/bookstack/storage/uploads/
cp -r /opt/bookstack-backup/themes/* /opt/bookstack/themes/ || true [[ -d /opt/bookstack-backup/themes ]] && cp -a /opt/bookstack-backup/themes/. /opt/bookstack/themes/
cd /opt/bookstack cd /opt/bookstack
export COMPOSER_ALLOW_SUPERUSER=1 export COMPOSER_ALLOW_SUPERUSER=1
$STD composer install --no-dev $STD composer install --no-dev

75
ct/gatus.sh Normal file
View File

@@ -0,0 +1,75 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/TwiN/gatus
APP="gatus"
var_tags="${var_tags:-monitoring}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/gatus ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/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 "Updating $APP"
msg_info "Stopping $APP"
systemctl stop gatus
msg_ok "Stopped $APP"
msg_info "Updating $APP to v${RELEASE}"
mv /opt/gatus/config/config.yaml /opt
rm -rf /opt/gatus/*
temp_file=$(mktemp)
curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar zxf "$temp_file" --strip-components=1 -C /opt/gatus
cd /opt/gatus
$STD go mod tidy
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus .
setcap CAP_NET_RAW+ep gatus
mv /opt/config.yaml config
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP"
systemctl start gatus
msg_ok "Started $APP"
msg_info "Cleaning Up"
rm -f "$temp_file"
msg_ok "Cleanup Completed"
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${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}:8080${CL}"

View File

@@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
# Source: https://github.com/AlexxIT/go2rtc # Source: https://github.com/AlexxIT/go2rtc
APP="go2rtc" APP="go2rtc"
var_tags="${var_tags:-recorder;video}" var_tags="${var_tags:-streaming;video}"
var_cpu="${var_cpu:-2}" var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}" var_ram="${var_ram:-2048}"
var_disk="${var_disk:-4}" var_disk="${var_disk:-4}"

View File

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

6
ct/headers/alpine-gatus Normal file
View File

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

6
ct/headers/asterisk Normal file
View File

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

6
ct/headers/bitmagnet Normal file
View File

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

View File

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

6
ct/headers/gatus Normal file
View File

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

View File

@@ -1,6 +1,6 @@
__ __ __
/ / / /___ ____ ___ ____ ___________ / /_ ____ ____ ___ ____ ___________
/ /_/ / __ \/ __ `__ \/ __ `/ ___/ ___/ / __ \/ __ \/ __ `__ \/ __ `/ ___/ ___/
/ __ / /_/ / / / / / / /_/ / / / / / / / / /_/ / / / / / / /_/ / / / /
/_/ /_/\____/_/ /_/ /_/\__,_/_/ /_/ /_/ /_/\____/_/ /_/ /_/\__,_/_/ /_/

6
ct/headers/odoo Normal file
View File

@@ -0,0 +1,6 @@
____ __
/ __ \____/ /___ ____
/ / / / __ / __ \/ __ \
/ /_/ / /_/ / /_/ / /_/ /
\____/\__,_/\____/\____/

6
ct/headers/rclone Normal file
View File

@@ -0,0 +1,6 @@
____ __
/ __ \_____/ /___ ____ ___
/ /_/ / ___/ / __ \/ __ \/ _ \
/ _, _/ /__/ / /_/ / / / / __/
/_/ |_|\___/_/\____/_/ /_/\___/

View File

@@ -5,10 +5,10 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://homarr.dev/ # Source: https://homarr.dev/
APP="Homarr" APP="homarr"
var_tags="${var_tags:-arr;dashboard}" var_tags="${var_tags:-arr;dashboard}"
var_cpu="${var_cpu:-2}" var_cpu="${var_cpu:-3}"
var_ram="${var_ram:-4096}" var_ram="${var_ram:-6144}"
var_disk="${var_disk:-8}" var_disk="${var_disk:-8}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-12}"
@@ -125,7 +125,7 @@ EOF
fetch_and_deploy_gh_release "homarr-labs/homarr" fetch_and_deploy_gh_release "homarr-labs/homarr"
mv /opt/homarr-data-backup/.env /opt/homarr/.env mv /opt/homarr-data-backup/.env /opt/homarr/.env
cd /opt/homarr cd /opt/homarr
$STD pnpm install $STD pnpm install --recursive --frozen-lockfile --shamefully-hoist
$STD pnpm build $STD pnpm build
cp /opt/homarr/apps/nextjs/next.config.ts . cp /opt/homarr/apps/nextjs/next.config.ts .
cp /opt/homarr/apps/nextjs/package.json . cp /opt/homarr/apps/nextjs/package.json .
@@ -151,7 +151,7 @@ EOF
systemctl start homarr systemctl start homarr
msg_ok "Started Services" msg_ok "Started Services"
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
read -p "It's recommended to reboot the LXC after an update, would you like to reboot the LXC now ? (y/n): " choice read -p "${TAB3}It's recommended to reboot the LXC after an update, would you like to reboot the LXC now ? (y/n): " choice
if [[ "$choice" =~ ^[Yy]$ ]]; then if [[ "$choice" =~ ^[Yy]$ ]]; then
reboot reboot
fi fi

View File

@@ -114,7 +114,7 @@ function update_script() {
if [ "$UPD" == "3" ]; then if [ "$UPD" == "3" ]; then
set +Eeuo pipefail set +Eeuo pipefail
read -r -p "Would you like to use No Authentication? <y/N> " prompt read -r -p "${TAB3}Would you like to use No Authentication? <y/N> " prompt
msg_info "Installing FileBrowser" msg_info "Installing FileBrowser"
RELEASE=$(curl -fsSL https://api.github.com/repos/filebrowser/filebrowser/releases/latest | grep -o '"tag_name": ".*"' | sed 's/"//g' | sed 's/tag_name: //g') RELEASE=$(curl -fsSL https://api.github.com/repos/filebrowser/filebrowser/releases/latest | grep -o '"tag_name": ".*"' | sed 's/"//g' | sed 's/tag_name: //g')
$STD curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/$RELEASE/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin $STD curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/$RELEASE/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin

View File

@@ -23,6 +23,9 @@ function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if ! command -v lsb_release; then
apt install -y lsb-release
fi
if [[ ! -d /opt/kimai ]]; then if [[ ! -d /opt/kimai ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
@@ -36,8 +39,8 @@ function update_script() {
$STD apt-get update $STD apt-get update
$STD apt-get remove -y php"${CURRENT_PHP//./}"* $STD apt-get remove -y php"${CURRENT_PHP//./}"*
$STD apt-get install -y \ $STD apt-get install -y \
php8.4 \ php8.4 composer \
php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl} \ php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,fpm} \
libapache2-mod-php8.4 libapache2-mod-php8.4
msg_ok "Migrated PHP $CURRENT_PHP to 8.4" msg_ok "Migrated PHP $CURRENT_PHP to 8.4"
fi fi
@@ -58,9 +61,13 @@ function update_script() {
msg_ok "Backup completed" msg_ok "Backup completed"
msg_info "Updating ${APP} to ${RELEASE}" msg_info "Updating ${APP} to ${RELEASE}"
rm -rf /opt/kimai trap "echo Unable to download release file for version ${RELEASE}; try again later" ERR
set -e
curl -fsSL "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip") 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 unzip -q "${RELEASE}".zip
set +e
trap - ERR
rm -rf /opt/kimai
mv kimai-"${RELEASE}" /opt/kimai mv kimai-"${RELEASE}" /opt/kimai
[ -d "$BACKUP_DIR/var" ] && cp -r "$BACKUP_DIR/var" /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/.env" ] && cp "$BACKUP_DIR/.env" /opt/kimai/

71
ct/odoo.sh Normal file
View File

@@ -0,0 +1,71 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/odoo/odoo
APP="Odoo"
var_tags="${var_tags:-erp}"
var_disk="${var_disk:-6}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
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 /etc/odoo/odoo.conf ]]; then
msg_error "No ${APP} Installation Found!"
exit 1
fi
RELEASE=$(curl -fsSL https://nightly.odoo.com/ | grep -oE 'href="[0-9]+\.[0-9]+/nightly"' | head -n1 | cut -d'"' -f2 | cut -d/ -f1)
LATEST_VERSION=$(curl -fsSL "https://nightly.odoo.com/${RELEASE}/nightly/deb/" |
grep -oP "odoo_${RELEASE}\.\d+_all\.deb" |
sed -E "s/odoo_(${RELEASE}\.[0-9]+)_all\.deb/\1/" |
sort -V |
tail -n1)
if [[ "${LATEST_VERSION}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
msg_info "Stopping ${APP} service"
systemctl stop odoo
msg_ok "Stopped ${APP}"
msg_info "Updating ${APP} to ${LATEST_VERSION}"
curl -fsSL https://nightly.odoo.com/${RELEASE}/nightly/deb/odoo_${RELEASE}.latest_all.deb -o /opt/odoo.deb
$STD apt install -y /opt/odoo.deb
echo "$LATEST_VERSION" >/opt/${APP}_version.txt
msg_ok "Updated ${APP} to ${LATEST_VERSION}"
msg_info "Starting ${APP} service"
systemctl start odoo
msg_ok "Started ${APP}"
msg_info "Cleaning Up"
rm -f /opt/odoo.deb
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${LATEST_VERSION}"
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}:8069${CL}"

65
ct/rclone.sh Normal file
View File

@@ -0,0 +1,65 @@
#!/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: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/rclone/rclone
APP="Rclone"
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
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/rclone ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/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"
systemctl stop rclone-web
msg_ok "Stopped Service"
msg_info "Updating ${APP} to v${RELEASE}"
temp_file=$(mktemp)
rm -rf /opt/rclone/*
curl -fsSL "https://github.com/rclone/rclone/releases/download/v${RELEASE}/rclone-v${RELEASE}-linux-amd64.zip" -o "$temp_file"
$STD unzip -j "$temp_file" '*/**' -d /opt/rclone
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting Service"
systemctl start rclone-web
msg_ok "Started Service"
msg_info "Cleaning up"
rm -f "$temp_file"
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at v${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

@@ -28,11 +28,17 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
if [[ ! -f /opt/rustdeskapi_version.txt ]]; then
touch /opt/rustdeskapi_version.txt
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') RELEASE=$(curl -fsSL https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ "${RELEASE}" != "$(cat /opt/rustdesk_version.txt)" ]] || [[ ! -f /opt/rustdesk_version.txt ]]; then APIRELEASE=$(curl -fsSL https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat /opt/rustdesk_version.txt)" ]] || [[ "${APIRELEASE}" != "$(cat /opt/rustdesk-api.txt)" ]] || [[ ! -f /opt/rustdesk_version.txt ]] || [[ ! -f /opt/rustdesk-api.txt ]]; then
msg_info "Stopping $APP" msg_info "Stopping $APP"
systemctl stop rustdesk-hbbr systemctl stop rustdesk-hbbr
systemctl stop rustdesk-hbbs systemctl stop rustdesk-hbbs
systemctl stop rustdesk-api
msg_ok "Stopped $APP" msg_ok "Stopped $APP"
msg_info "Updating $APP to v${RELEASE}" msg_info "Updating $APP to v${RELEASE}"
@@ -43,14 +49,20 @@ function update_script() {
-o "${TEMPDIR}/rustdesk-server-hbbs_${RELEASE}_amd64.deb" -o "${TEMPDIR}/rustdesk-server-hbbs_${RELEASE}_amd64.deb"
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-utils_${RELEASE}_amd64.deb" \ curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-utils_${RELEASE}_amd64.deb" \
-o "${TEMPDIR}/rustdesk-server-utils_${RELEASE}_amd64.deb" -o "${TEMPDIR}/rustdesk-server-utils_${RELEASE}_amd64.deb"
curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/rustdesk-api-server_${APIRELEASE}_amd64.deb" \
-o "${TEMPDIR}/rustdesk-api-server_${APIRELEASE}_amd64.deb"
$STD dpkg -i $TEMPDIR/*.deb $STD dpkg -i $TEMPDIR/*.deb
echo "${RELEASE}" >/opt/rustdesk_version.txt
echo "${APIRELEASE}" >/opt/rustdeskapi_version.txt
msg_ok "Updated $APP to v${RELEASE}" msg_ok "Updated $APP to v${RELEASE}"
msg_info "Cleaning Up" msg_info "Cleaning Up"
rm -rf $TEMPDIR rm -rf $TEMPDIR
msg_ok "Cleanup Completed" msg_ok "Cleanup Completed"
echo "${RELEASE}" >/opt/rustdesk_version.txt msg_info "Starting services"
systemctl start -q rustdesk-* --all
msg_ok "Services started"
msg_ok "Update Successful" msg_ok "Update Successful"
else else
msg_ok "No update required. ${APP} is already at v${RELEASE}" msg_ok "No update required. ${APP} is already at v${RELEASE}"
@@ -65,4 +77,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}${IP}${CL}" echo -e "${TAB}${GATEWAY}${BGN}${IP}:21114${CL}"

View File

@@ -0,0 +1,33 @@
{
"name": "Asterisk",
"slug": "asterisk",
"categories": [0],
"date_created": "2025-05-14",
"type": "ct",
"updateable": false,
"privileged": false,
"interface_port": null,
"documentation": "https://docs.asterisk.org/",
"config_path": "/etc/asterisk",
"website": "https://asterisk.org/",
"logo": "https://docs.asterisk.org/favicon.ico",
"description": "Asterisk is an open-source framework for building communications applications, most commonly used as a phone system (PBX). Developed by Digium (now part of Sangoma), it turns a standard computer into a powerful telephony server.",
"install_methods": [
{
"type": "default",
"script": "ct/asterisk.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 4,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -0,0 +1,51 @@
{
"name": "Bitmagnet",
"slug": "bitmagnet",
"categories": [
11
],
"date_created": "2025-05-15",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3333,
"documentation": "https://bitmagnet.io/setup.html",
"website": "https://bitmagnet.io/",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/webp/bitmagnet.webp",
"config_path": "`/opt/bitmagnet/config.yml` or `/opt/bitmagnet/.env`",
"description": "A self-hosted BitTorrent indexer, DHT crawler, content classifier and torrent search engine with web UI, GraphQL API and Servarr stack integration.",
"install_methods": [
{
"type": "default",
"script": "ct/bitmagnet.sh",
"resources": {
"cpu": 2,
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "12"
}
},
{
"type": "alpine",
"script": "ct/alpine-bitmagnet.sh",
"resources": {
"cpu": 2,
"ram": 1024,
"hdd": 3,
"os": "alpine",
"version": "3.21"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "During installation you will be asked to enter your TMDB API key, if you wanna use it. Make sure you have it ready.",
"type": "info"
}
]
}

View File

@@ -1,35 +0,0 @@
{
"name": "bolt.diy",
"slug": "boltdiy",
"categories": [
20
],
"date_created": "2025-02-23",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 5173,
"documentation": "https://stackblitz-labs.github.io/bolt.diy/",
"website": "https://github.com/stackblitz-labs/bolt.diy",
"logo": "https://github.com/stackblitz-labs/bolt.diy/raw/refs/heads/main/icons/logo-text.svg",
"config_path": "/opt/bolt.diy/.env.local",
"description": "The official open source version of Bolt.new (previously known as oTToDev and bolt.new ANY LLM), which allows you to choose the LLM that you use for each prompt! Currently, you can use OpenAI, Anthropic, Ollama, OpenRouter, Gemini, LMStudio, Mistral, xAI, HuggingFace, DeepSeek, or Groq models - and it is easily extended to use any other model supported by the Vercel AI SDK!",
"install_methods": [
{
"type": "default",
"script": "ct/boltdiy.sh",
"resources": {
"cpu": 2,
"ram": 3072,
"hdd": 6,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -12,7 +12,7 @@
"documentation": null, "documentation": null,
"website": "https://dashy.to/", "website": "https://dashy.to/",
"logo": "https://github.com/Lissy93/dashy/raw/master/public/web-icons/dashy-logo.png", "logo": "https://github.com/Lissy93/dashy/raw/master/public/web-icons/dashy-logo.png",
"config_path": "/opt/dashy/public/conf.yml", "config_path": "/opt/dashy/user-data/conf.yml",
"description": "Dashy is a solution that helps you organize your self-hosted services by centralizing access to them through a single interface.", "description": "Dashy is a solution that helps you organize your self-hosted services by centralizing access to them through a single interface.",
"install_methods": [ "install_methods": [
{ {

View File

@@ -0,0 +1,35 @@
{
"name": "Documenso",
"slug": "documenso",
"categories": [
12
],
"date_created": "2025-05-14",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://documenso.com/",
"website": "https://documenso.com/",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/documenso.svg",
"config_path": "/opt/documenso/.env",
"description": "Signing documents digitally should be fast and easy and should be the best practice for every document signed worldwide. This is technically quite easy today, but it also introduces a new party to every signature: The signing tool providers. While this is not a problem in itself, it should make us think about how we want these providers of trust to work. Documenso aims to be the world's most trusted document-signing tool. This trust is built by empowering you to self-host Documenso and review how it works under the hood.",
"install_methods": [
{
"type": "default",
"script": "ct/documenso.sh",
"resources": {
"cpu": 4,
"ram": 6144,
"hdd": 10,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": "helper-scripts@local.com",
"password": "helper-scripts"
},
"notes": []
}

View File

@@ -0,0 +1,46 @@
{
"name": "gatus",
"slug": "gatus",
"categories": [
9
],
"date_created": "2025-05-13",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8080,
"documentation": "https://gatus.io/docs",
"website": "https://gatus.io/",
"logo": "https://raw.githubusercontent.com/TwiN/gatus/refs/heads/master/web/static/img/logo.svg",
"config_path": "/opt/gatus/config/config.yaml",
"description": "Gatus is a developer-oriented health dashboard that gives you the ability to monitor your services using HTTP, ICMP, TCP, and even DNS queries as well as evaluate the result of said queries by using a list of conditions on values like the status code, the response time, the certificate expiration, the body and many others. The icing on top is that each of these health checks can be paired with alerting via Slack, Teams, PagerDuty, Discord, Twilio and many more.",
"install_methods": [
{
"type": "default",
"script": "ct/gatus.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 4,
"os": "debian",
"version": "12"
}
},
{
"type": "alpine",
"script": "ct/alpine-gatus.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 3,
"os": "alpine",
"version": "3.21"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -11,7 +11,7 @@
"interface_port": 7575, "interface_port": 7575,
"documentation": null, "documentation": null,
"website": "https://homarr.dev/", "website": "https://homarr.dev/",
"logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/homarr.svg", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/homarr.webp",
"config_path": "/opt/homarr/.env", "config_path": "/opt/homarr/.env",
"description": "Homarr is a sleek, modern dashboard that puts all of your apps and services at your fingertips.", "description": "Homarr is a sleek, modern dashboard that puts all of your apps and services at your fingertips.",
"install_methods": [ "install_methods": [
@@ -19,8 +19,8 @@
"type": "default", "type": "default",
"script": "ct/homarr.sh", "script": "ct/homarr.sh",
"resources": { "resources": {
"cpu": 2, "cpu": 3,
"ram": 4096, "ram": 6144,
"hdd": 8, "hdd": 8,
"os": "debian", "os": "debian",
"version": "12" "version": "12"
@@ -33,4 +33,3 @@
}, },
"notes": [] "notes": []
} }

View File

@@ -41,7 +41,7 @@
"type": "warning" "type": "warning"
}, },
{ {
"text": "Use Ubuntu 24.10 ONLY", "text": "Deprecation-Warning: This Core-based setup will be deprecated by August 2025. Use Home Assistant OS is strongly recommended to ensure long-term stability and updates.",
"type": "warning" "type": "warning"
}, },
{ {

View File

@@ -12,7 +12,7 @@
"documentation": "https://jellyfin.org/docs/", "documentation": "https://jellyfin.org/docs/",
"website": "https://jellyfin.org/", "website": "https://jellyfin.org/",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/jellyfin.svg", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/jellyfin.svg",
"config_path": "/root/.config/jellyfin", "config_path": "/etc/jellyfin/",
"description": "Jellyfin is a free and open-source media server and suite of multimedia applications designed to organize, manage, and share digital media files to networked devices.", "description": "Jellyfin is a free and open-source media server and suite of multimedia applications designed to organize, manage, and share digital media files to networked devices.",
"install_methods": [ "install_methods": [
{ {

View File

@@ -0,0 +1,40 @@
{
"name": "Odoo",
"slug": "odoo",
"categories": [
25
],
"date_created": "2025-05-14",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8069,
"documentation": "https://www.odoo.com/en_EN/page/docs",
"website": "https://www.odoo.com/",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/odoo.svg",
"config_path": "/etc/odoo/odoo.conf",
"description": "Odoo is a comprehensive open-source business platform made up of modular apps that cover key areas such as CRM, accounting, inventory, sales, project management, HR, helpdesk, and e-commerce. All modules are tightly integrated, allowing businesses to fully digitize and automate their workflows. Its modular design makes it suitable for both small companies and large enterprises, with flexibility to adapt to different industries. Odoo combines user-friendliness with powerful functionality, offering a unified solution for managing a wide range of business operations.",
"install_methods": [
{
"type": "default",
"script": "ct/odoo.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 6,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": "admin",
"password": "admin"
},
"notes": [
{
"text": "Database Credentials: `cat ~/odoo.creds`",
"type": "info"
}
]
}

View File

@@ -12,7 +12,7 @@
"documentation": "https://stonith404.github.io/pingvin-share/introduction", "documentation": "https://stonith404.github.io/pingvin-share/introduction",
"website": "https://github.com/stonith404/pingvin-share", "website": "https://github.com/stonith404/pingvin-share",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/pingvin-share.svg", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/pingvin-share.svg",
"config_path": "/opt/pingin-share/config.yaml", "config_path": "/opt/pingvin-share/config.yaml",
"description": "Pingvin Share is self-hosted file sharing platform and an alternative for WeTransfer.", "description": "Pingvin Share is self-hosted file sharing platform and an alternative for WeTransfer.",
"install_methods": [ "install_methods": [
{ {
@@ -31,5 +31,10 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": [
{
"text": "Run `DATA_DIRECTORY=path-to-your-data-directory pm2 restart all --update-env` to update path to your data directory or to update environment variables.",
"type": "info"
}
]
} }

View File

@@ -1,10 +1,10 @@
{ {
"name": "Alpine-rclone", "name": "Rclone",
"slug": "alpine-rclone", "slug": "rclone",
"categories": [ "categories": [
11 11
], ],
"date_created": "2025-05-06", "date_created": "2025-05-15",
"type": "ct", "type": "ct",
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
@@ -17,13 +17,13 @@
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",
"script": "ct/alpine-rclone.sh", "script": "ct/rclone.sh",
"resources": { "resources": {
"cpu": 1, "cpu": 1,
"ram": 256, "ram": 256,
"hdd": 1, "hdd": 1,
"os": "alpine", "os": "debian",
"version": "3.21" "version": "12"
} }
}, },
{ {
@@ -49,7 +49,7 @@
}, },
{ {
"type": "info", "type": "info",
"text": "`htpasswd -b -B /opt/rclone/login.pwd newuser newuserpassword` to add more users." "text": "`htpasswd -b -B /opt/login.pwd newuser newuserpassword` to add more users."
} }
] ]
} }

View File

@@ -8,10 +8,10 @@
"type": "ct", "type": "ct",
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": null, "interface_port": 21114,
"documentation": "https://rustdesk.com/docs/en/", "documentation": "https://rustdesk.com/docs/en/",
"website": "https://rustdesk.com/", "website": "https://rustdesk.com/",
"logo": "https://rustdesk.com/_astro/logo.BKb61-he.svg", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/rustdesk.webp",
"config_path": "", "config_path": "",
"description": "RustDesk is a full-featured open source remote control alternative for self-hosting and security with minimal configuration.", "description": "RustDesk is a full-featured open source remote control alternative for self-hosting and security with minimal configuration.",
"install_methods": [ "install_methods": [
@@ -35,7 +35,10 @@
{ {
"text": "Check our configuration guide for help: `https://github.com/community-scripts/ProxmoxVE/discussions/2388`", "text": "Check our configuration guide for help: `https://github.com/community-scripts/ProxmoxVE/discussions/2388`",
"type": "info" "type": "info"
},
{
"text": "Login credentials: `cat ~/rustdesk.creds`",
"type": "info"
} }
] ]
} }

File diff suppressed because it is too large Load Diff

View File

@@ -13,6 +13,11 @@ setting_up_container
network_check network_check
update_os update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
make
msg_ok "Installed Dependencies"
msg_info "Installing Actual Budget" msg_info "Installing Actual Budget"
cd /opt cd /opt
RELEASE=$(curl -fsSL https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -fsSL https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')

View File

@@ -0,0 +1,85 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/bitmagnet-io/bitmagnet
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 --no-cache \
gcc \
musl-dev \
git \
iproute2-ss \
sudo
$STD apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community go
msg_ok "Installed dependencies"
msg_info "Installing PostgreSQL"
$STD apk add --no-cache \
postgresql16 \
postgresql16-contrib \
postgresql16-openrc
$STD rc-update add postgresql
$STD rc-service postgresql start
msg_ok "Installed PostreSQL"
RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
msg_info "Installing bitmagnet v${RELEASE}"
mkdir -p /opt/bitmagnet
temp_file=$(mktemp)
curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
cd /opt/bitmagnet
VREL=v$RELEASE
$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
chmod +x bitmagnet
$STD su - postgres -c "psql -c 'CREATE DATABASE bitmagnet;'"
echo "${RELEASE}" >/opt/bitmagnet_version.txt
msg_ok "Installed bitmagnet v${RELEASE}"
read -rp "${TAB3}Enter your TMDB API key if you have one: " tmdbapikey
msg_info "Enabling bitmagnet Service"
cat <<EOF >/etc/init.d/bitmagnet
#!/sbin/openrc-run
description="bitmagnet Service"
directory="/opt/bitmagnet"
command="/opt/bitmagnet/bitmagnet"
command_args="worker run --all"
command_background="true"
command_user="root"
pidfile="/var/run/bitmagnet.pid"
depend() {
use net
}
start_pre() {
export TMDB_API_KEY="$tmdbapikey"
}
EOF
chmod +x /etc/init.d/bitmagnet
$STD rc-update add bitmagnet default
msg_ok "Enabled bitmagnet Service"
msg_info "Starting bitmagnet"
$STD service bitmagnet start
msg_ok "Started bitmagnet"
motd_ssh
customize
msg_info "Cleaning up"
rm -f "$temp_file"
$STD apk cache clean
msg_ok "Cleaned"

View File

@@ -29,13 +29,13 @@ $STD rc-update add docker default
msg_ok "Installed Docker" msg_ok "Installed Docker"
get_latest_release() { get_latest_release() {
curl -fsSL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4 curl -fsSL https://api.github.com/repos/"$1"/releases/latest | grep '"tag_name":' | cut -d'"' -f4
} }
PORTAINER_LATEST_VERSION=$(get_latest_release "portainer/portainer") PORTAINER_LATEST_VERSION=$(get_latest_release "portainer/portainer")
DOCKER_COMPOSE_LATEST_VERSION=$(get_latest_release "docker/compose") DOCKER_COMPOSE_LATEST_VERSION=$(get_latest_release "docker/compose")
PORTAINER_AGENT_LATEST_VERSION=$(get_latest_release "portainer/agent") PORTAINER_AGENT_LATEST_VERSION=$(get_latest_release "portainer/agent")
read -r -p "Would you like to add Portainer? <y/N> " prompt read -r -p "${TAB3}Would you like to add Portainer? <y/N> " prompt
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
msg_info "Installing Portainer $PORTAINER_LATEST_VERSION" msg_info "Installing Portainer $PORTAINER_LATEST_VERSION"
docker volume create portainer_data >/dev/null docker volume create portainer_data >/dev/null
@@ -49,7 +49,7 @@ if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
portainer/portainer-ce:latest portainer/portainer-ce:latest
msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION" msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION"
else else
read -r -p "Would you like to add the Portainer Agent? <y/N> " prompt read -r -p "${TAB3}Would you like to add the Portainer Agent? <y/N> " prompt
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION" msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION"
$STD docker run -d \ $STD docker run -d \
@@ -62,13 +62,13 @@ else
msg_ok "Installed Portainer Agent $PORTAINER_AGENT_LATEST_VERSION" msg_ok "Installed Portainer Agent $PORTAINER_AGENT_LATEST_VERSION"
fi fi
fi fi
read -r -p "Would you like to add Docker Compose? <y/N> " prompt read -r -p "${TAB3}Would you like to add Docker Compose? <y/N> " prompt
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
msg_info "Installing Docker Compose $DOCKER_COMPOSE_LATEST_VERSION" msg_info "Installing Docker Compose $DOCKER_COMPOSE_LATEST_VERSION"
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins mkdir -p "$DOCKER_CONFIG"/cli-plugins
curl -fsSL https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_LATEST_VERSION/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose curl -fsSL https://github.com/docker/compose/releases/download/"$DOCKER_COMPOSE_LATEST_VERSION"/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose chmod +x "$DOCKER_CONFIG"/cli-plugins/docker-compose
msg_ok "Installed Docker Compose $DOCKER_COMPOSE_LATEST_VERSION" msg_ok "Installed Docker Compose $DOCKER_COMPOSE_LATEST_VERSION"
fi fi

View File

@@ -0,0 +1,70 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/TwiN/gatus
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 --no-cache \
ca-certificates \
libcap-setcap
$STD apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community go
msg_ok "Installed dependencies"
RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
msg_info "Installing gatus v${RELEASE}"
temp_file=$(mktemp)
mkdir -p /opt/gatus
curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar zxf "$temp_file" --strip-components=1 -C /opt/gatus
cd /opt/gatus
$STD go mod tidy
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus .
setcap CAP_NET_RAW+ep gatus
mv config.yaml config
echo "${RELEASE}" >/opt/gatus_version.txt
msg_ok "Installed gatus v${RELEASE}"
msg_info "Enabling gatus Service"
cat <<EOF >/etc/init.d/gatus
#!/sbin/openrc-run
description="gatus Service"
directory="/opt/gatus"
command="/opt/gatus/gatus"
command_args=""
command_background="true"
command_user="root"
pidfile="/var/run/gatus.pid"
export GATUS_CONFIG_PATH=""
export GATUS_LOG_LEVEL="INFO"
export PORT="8080"
depend() {
use net
}
EOF
chmod +x /etc/init.d/gatus
$STD rc-update add gatus default
msg_ok "Enabled gatus Service"
msg_info "Starting gatus"
$STD service gatus start
msg_ok "Started gatus"
motd_ssh
customize
msg_info "Cleaning up"
rm -f "$temp_file"
$STD apk cache clean
msg_ok "Cleaned"

View File

@@ -26,11 +26,11 @@ $STD rc-update add docker boot
$STD service docker start $STD service docker start
msg_ok "Enabled Docker Service" msg_ok "Enabled Docker Service"
echo "Choose the database for Komodo installation:" echo "${TAB3}Choose the database for Komodo installation:"
echo "1) MongoDB (recommended)" echo "${TAB3}1) MongoDB (recommended)"
echo "2) SQLite" echo "${TAB3}2) SQLite"
echo "3) PostgreSQL" echo "${TAB3}3) PostgreSQL"
read -rp "Enter your choice (default: 1): " DB_CHOICE read -rp "${TAB3}Enter your choice (default: 1): " DB_CHOICE
DB_CHOICE=${DB_CHOICE:-1} DB_CHOICE=${DB_CHOICE:-1}
case $DB_CHOICE in case $DB_CHOICE in

View File

@@ -29,7 +29,7 @@ mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql >/dev/null
$STD rc-service mariadb start $STD rc-service mariadb start
msg_ok "MariaDB Configured" msg_ok "MariaDB Configured"
read -r -p "Would you like to install Adminer with lighttpd? <y/N>: " prompt read -r -p "${TAB3}Would you like to install Adminer with lighttpd? <y/N>: " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Adminer and dependencies" msg_info "Installing Adminer and dependencies"
$STD apk add --no-cache \ $STD apk add --no-cache \

View File

@@ -33,7 +33,7 @@ sed -i '/^host\s\+all\s\+all\s\+127.0.0.1\/32\s\+md5/ s/.*/host all all 0.0.0.0\
$STD rc-service postgresql restart $STD rc-service postgresql restart
msg_ok "Configured and Restarted PostgreSQL" msg_ok "Configured and Restarted PostgreSQL"
read -r -p "Would you like to install Adminer with lighttpd? <y/N>: " prompt read -r -p "${TAB3}Would you like to install Adminer with lighttpd? <y/N>: " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Adminer and dependencies" msg_info "Installing Adminer and dependencies"
$STD apk add --no-cache \ $STD apk add --no-cache \

View File

@@ -27,7 +27,7 @@ curl -fsSL "https://github.com/rclone/rclone/releases/download/v${RELEASE}/rclon
$STD unzip -j "$temp_file" '*/**' -d /opt/rclone $STD unzip -j "$temp_file" '*/**' -d /opt/rclone
cd /opt/rclone cd /opt/rclone
RCLONE_PASSWORD=$(head -c 16 /dev/urandom | xxd -p -c 16) RCLONE_PASSWORD=$(head -c 16 /dev/urandom | xxd -p -c 16)
$STD htpasswd -cb -B login.pwd admin "$RCLONE_PASSWORD" $STD htpasswd -cb -B /opt/login.pwd admin "$RCLONE_PASSWORD"
{ {
echo "rclone-Credentials" echo "rclone-Credentials"
echo "rclone User Name: admin" echo "rclone User Name: admin"
@@ -42,7 +42,7 @@ cat <<EOF >/etc/init.d/rclone
#!/sbin/openrc-run #!/sbin/openrc-run
description="rclone Service" description="rclone Service"
command="/opt/rclone/rclone" command="/opt/rclone/rclone"
command_args="rcd --rc-web-gui --rc-web-gui-no-open-browser --rc-addr :3000 --rc-htpasswd /opt/rclone/login.pwd" command_args="rcd --rc-web-gui --rc-web-gui-no-open-browser --rc-addr :3000 --rc-htpasswd /opt/login.pwd"
command_background="true" command_background="true"
command_user="root" command_user="root"
pidfile="/var/run/rclone.pid" pidfile="/var/run/rclone.pid"

View File

@@ -21,7 +21,7 @@ msg_info "Installing Traefik"
$STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community $STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community
msg_ok "Installed Traefik" msg_ok "Installed Traefik"
read -p "Enable Traefik WebUI (Port 8080)? [y/N]: " enable_webui read -p "${TAB3}Enable Traefik WebUI (Port 8080)? [y/N]: " enable_webui
if [[ "$enable_webui" =~ ^[Yy]$ ]]; then if [[ "$enable_webui" =~ ^[Yy]$ ]]; then
msg_info "Configuring Traefik WebUI" msg_info "Configuring Traefik WebUI"
mkdir -p /etc/traefik/config mkdir -p /etc/traefik/config

View File

@@ -16,6 +16,7 @@ update_os
msg_info "Installing Transmission" msg_info "Installing Transmission"
$STD apk add --no-cache transmission-cli transmission-daemon $STD apk add --no-cache transmission-cli transmission-daemon
$STD rc-service transmission-daemon start $STD rc-service transmission-daemon start
sleep 5
$STD rc-service transmission-daemon stop $STD rc-service transmission-daemon stop
sed -i '{s/"rpc-whitelist-enabled": true/"rpc-whitelist-enabled": false/g; s/"rpc-host-whitelist-enabled": true,/"rpc-host-whitelist-enabled": false,/g}' /var/lib/transmission/config/settings.json sed -i '{s/"rpc-whitelist-enabled": true/"rpc-whitelist-enabled": false/g; s/"rpc-host-whitelist-enabled": true,/"rpc-host-whitelist-enabled": false,/g}' /var/lib/transmission/config/settings.json
msg_ok "Installed Transmission" msg_ok "Installed Transmission"

View File

@@ -46,7 +46,7 @@ $STD rc-update add sysctl
$STD sysctl -p /etc/sysctl.conf $STD sysctl -p /etc/sysctl.conf
msg_ok "Installed WireGuard" msg_ok "Installed WireGuard"
read -rp "Do you want to install WGDashboard? (y/N): " INSTALL_WGD read -rp "${TAB3}Do you want to install WGDashboard? (y/N): " INSTALL_WGD
if [[ "$INSTALL_WGD" =~ ^[Yy]$ ]]; then if [[ "$INSTALL_WGD" =~ ^[Yy]$ ]]; then
msg_info "Installing additional dependencies for WGDashboard" msg_info "Installing additional dependencies for WGDashboard"
$STD apk add --no-cache \ $STD apk add --no-cache \

View File

@@ -28,7 +28,7 @@ echo "deb https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_COD
$STD apt-get update $STD apt-get update
msg_ok "Set up Adoptium Repository" msg_ok "Set up Adoptium Repository"
read -r -p "Which Tomcat version would you like to install? (9, 10.1, 11): " version read -r -p "${TAB3}Which Tomcat version would you like to install? (9, 10.1, 11): " version
case $version in case $version in
9) 9)
TOMCAT_VERSION="9" TOMCAT_VERSION="9"

View File

@@ -17,7 +17,7 @@ msg_info "Installing Aria2"
$STD apt-get install -y aria2 $STD apt-get install -y aria2
msg_ok "Installed Aria2" msg_ok "Installed Aria2"
read -r -p "Would you like to add AriaNG? <y/N> " prompt read -r -p "${TAB3}Would you like to add AriaNG? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing AriaNG" msg_info "Installing AriaNG"
$STD apt-get install -y nginx $STD apt-get install -y nginx

View File

@@ -0,0 +1,56 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: michelroegl-brunner
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://asterisk.org
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
libsrtp2-dev \
build-essential \
libedit-dev \
uuid-dev \
libjansson-dev \
libxml2-dev \
libsqlite3-dev
msg_ok "Installed Dependencies"
msg_info "Downloading Asterisk"
RELEASE=$(curl -fsSL https://downloads.asterisk.org/pub/telephony/asterisk/ | grep -o 'asterisk-[0-9]\+-current\.tar\.gz' | sort -V | tail -n1)
temp_file=$(mktemp)
curl -fsSL "https://downloads.asterisk.org/pub/telephony/asterisk/${RELEASE}" -o "$temp_file"
mkdir -p /opt/asterisk
tar zxf "$temp_file" --strip-components=1 -C /opt/asterisk
cd /opt/asterisk
msg_ok "Downloaded Asterisk"
msg_info "Installing Asterisk"
$STD ./contrib/scripts/install_prereq install
$STD ./configure
$STD make -j$(nproc)
$STD make install
$STD make config
$STD make install-logrotate
$STD make samples
mkdir -p /etc/radiusclient-ng/
ln /etc/radcli/radiusclient.conf /etc/radiusclient-ng/radiusclient.conf
systemctl enable -q --now asterisk
msg_ok "Installed Asterisk"
motd_ssh
customize
msg_info "Cleaning up"
rm -f "$temp_file"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -19,7 +19,7 @@ curl -fsSL "https://github.com/authelia/authelia/releases/download/${RELEASE}/au
$STD dpkg -i "authelia_${RELEASE}_amd64.deb" $STD dpkg -i "authelia_${RELEASE}_amd64.deb"
msg_ok "Install Authelia completed" msg_ok "Install Authelia completed"
read -p "Enter your domain (ex. example.com): " DOMAIN read -p "${TAB3}Enter your domain (ex. example.com): " DOMAIN
msg_info "Setting Authelia up" msg_info "Setting Authelia up"
touch /etc/authelia/emails.txt touch /etc/authelia/emails.txt

View File

@@ -0,0 +1,78 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/bitmagnet-io/bitmagnet
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
iproute2 \
gcc \
musl-dev
msg_ok "Installed Dependencies"
PG_VERSION="16" install_postgresql
install_go
RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
msg_info "Installing bitmagnet v${RELEASE}"
mkdir -p /opt/bitmagnet
temp_file=$(mktemp)
curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
cd /opt/bitmagnet
VREL=v$RELEASE
$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
chmod +x bitmagnet
POSTGRES_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
$STD sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '$POSTGRES_PASSWORD';"
$STD sudo -u postgres psql -c "CREATE DATABASE bitmagnet;"
{
echo "PostgreSQL Credentials"
echo ""
echo "postgres user password: $POSTGRES_PASSWORD"
} >>~/postgres.creds
echo "${RELEASE}" >/opt/bitmagnet_version.txt
msg_ok "Installed bitmagnet v${RELEASE}"
read -r -p "${TAB3}Enter your TMDB API key if you have one: " tmdbapikey
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/bitmagnet-web.service
[Unit]
Description=bitmagnet Web GUI
After=network-online.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/bitmagnet
ExecStart=/opt/bitmagnet/bitmagnet worker run --all
Environment=POSTGRES_HOST=localhost
Environment=POSTGRES_PASSWORD=$POSTGRES_PASSWORD
Environment=TMDB_API_KEY=$tmdbapikey
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now bitmagnet-web
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
rm -f "$temp_file"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -1,71 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/stackblitz-labs/bolt.diy/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
gnupg \
git
msg_ok "Installed Dependencies"
msg_info "Setup Node.js Repository"
mkdir -p /etc/apt/keyrings
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
msg_ok "Setup Node.js Repository"
msg_info "Setup Node.js"
$STD apt-get update
$STD apt-get install -y nodejs
$STD npm install -g pnpm
msg_ok "Setup Node.js"
msg_info "Setup bolt.diy"
temp_file=$(mktemp)
RELEASE=$(curl -fsSL https://api.github.com/repos/stackblitz-labs/bolt.diy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/stackblitz-labs/bolt.diy/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar xzf $temp_file
mv bolt.diy-${RELEASE} /opt/bolt.diy
cd /opt/bolt.diy
$STD pnpm install
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
msg_ok "Setup bolt.diy"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/boltdiy.service
[Unit]
Description=bolt.diy Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/bolt.diy
ExecStart=/usr/bin/pnpm run dev --host
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now boltdiy
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
rm -f $temp_file
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -43,7 +43,7 @@ $STD npm install
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
msg_ok "Installed ByteStash" msg_ok "Installed ByteStash"
read -p "Do you want to allow registration of multiple accounts? [y/n]: " allowreg read -p "${TAB3}Do you want to allow registration of multiple accounts? [y/n]: " allowreg
msg_info "Creating Service" msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/bytestash-backend.service cat <<EOF >/etc/systemd/system/bytestash-backend.service

View File

@@ -28,7 +28,7 @@ $STD apt-get update
$STD apt-get install -y caddy $STD apt-get install -y caddy
msg_ok "Installed Caddy" msg_ok "Installed Caddy"
read -r -p "Would you like to install xCaddy Addon? <y/N> " prompt read -r -p "${TAB3}Would you like to install xCaddy Addon? <y/N> " prompt
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
msg_info "Installing Golang" msg_info "Installing Golang"
set +o pipefail set +o pipefail
@@ -46,7 +46,7 @@ if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
cd /opt 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) }') 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") 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")
$STD dpkg -i xcaddy_${RELEASE:1}_linux_amd64.deb $STD dpkg -i xcaddy_"${RELEASE:1}"_linux_amd64.deb
rm -rf /opt/xcaddy* rm -rf /opt/xcaddy*
$STD xcaddy build $STD xcaddy build
msg_ok "Setup xCaddy" msg_ok "Setup xCaddy"

View File

@@ -22,7 +22,7 @@ $STD apt-get update
$STD apt-get install -y cloudflared $STD apt-get install -y cloudflared
msg_ok "Installed Cloudflared" msg_ok "Installed Cloudflared"
read -r -p "Would you like to configure cloudflared as a DNS-over-HTTPS (DoH) proxy? <y/N> " prompt read -r -p "${TAB3}Would you like to configure cloudflared as a DNS-over-HTTPS (DoH) proxy? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Creating Service" msg_info "Creating Service"
cat <<EOF >/usr/local/etc/cloudflared/config.yml cat <<EOF >/usr/local/etc/cloudflared/config.yml

View File

@@ -30,7 +30,7 @@ $STD apt-get update
$STD apt-get install -y nodejs $STD apt-get install -y nodejs
msg_ok "Setup Node.js" msg_ok "Setup Node.js"
read -p "Install OnlyOffice components instead of CKEditor? (Y/N): " onlyoffice read -p "${TAB3}Install OnlyOffice components instead of CKEditor? (Y/N): " onlyoffice
msg_info "Setup ${APPLICATION}" msg_info "Setup ${APPLICATION}"
temp_file=$(mktemp) temp_file=$(mktemp)

View File

@@ -14,7 +14,7 @@ network_check
update_os update_os
get_latest_release() { get_latest_release() {
curl -fsSL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4 curl -fsSL https://api.github.com/repos/"$1"/releases/latest | grep '"tag_name":' | cut -d'"' -f4
} }
DOCKER_LATEST_VERSION=$(get_latest_release "moby/moby") DOCKER_LATEST_VERSION=$(get_latest_release "moby/moby")
@@ -29,7 +29,7 @@ echo -e '{\n "log-driver": "journald"\n}' >/etc/docker/daemon.json
$STD sh <(curl -fsSL https://get.docker.com) $STD sh <(curl -fsSL https://get.docker.com)
msg_ok "Installed Docker $DOCKER_LATEST_VERSION" msg_ok "Installed Docker $DOCKER_LATEST_VERSION"
read -r -p "Would you like to add Portainer? <y/N> " prompt read -r -p "${TAB3}Would you like to add Portainer? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Portainer $PORTAINER_LATEST_VERSION" msg_info "Installing Portainer $PORTAINER_LATEST_VERSION"
docker volume create portainer_data >/dev/null docker volume create portainer_data >/dev/null
@@ -43,7 +43,7 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
portainer/portainer-ce:latest portainer/portainer-ce:latest
msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION" msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION"
else else
read -r -p "Would you like to add the Portainer Agent? <y/N> " prompt read -r -p "${TAB3}Would you like to add the Portainer Agent? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION" msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION"
$STD docker run -d \ $STD docker run -d \

View File

@@ -41,7 +41,7 @@ cd /opt/dockge
$STD docker compose up -d $STD docker compose up -d
msg_ok "Installed Dockge" msg_ok "Installed Dockge"
read -r -p "Would you like to add Immich? <y/N> " prompt read -r -p "${TAB3}Would you like to add Immich? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Adding Immich compose.yaml" msg_info "Adding Immich compose.yaml"
mkdir -p /opt/stacks/immich mkdir -p /opt/stacks/immich
@@ -50,7 +50,7 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_ok "Added Immich compose.yaml" msg_ok "Added Immich compose.yaml"
fi fi
read -r -p "Would you like to add Home Assistant? <y/N> " prompt read -r -p "${TAB3}Would you like to add Home Assistant? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Adding Home Assistant compose.yaml" msg_info "Adding Home Assistant compose.yaml"
mkdir -p /opt/stacks/homeassistant mkdir -p /opt/stacks/homeassistant

View File

@@ -20,27 +20,16 @@ msg_ok "Setup Functions"
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt-get install -y \ $STD apt-get install -y \
gpg \
libc6 \ libc6 \
make \ make \
cmake \ cmake \
jq \ jq \
postgresql \
python3 \ python3 \
python3-bcrypt python3-bcrypt
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Setting up Node.js Repository" NODE_VERSION="22" NODE_MODULE="turbo@1.9.3" install_node_and_modules
mkdir -p /etc/apt/keyrings PG_VERSION="16" install_postgresql
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
msg_ok "Set up Node.js Repository"
msg_info "Installing Node.js"
$STD apt-get update
$STD apt-get install -y nodejs
$STD npm install -g turbo@1.9.3
msg_ok "Installed Node.js"
msg_info "Setting up PostgreSQL" msg_info "Setting up PostgreSQL"
DB_NAME="documenso_db" DB_NAME="documenso_db"
@@ -90,7 +79,7 @@ msg_ok "Installed Documenso"
msg_info "Create User" msg_info "Create User"
PASSWORD_HASH=$(python3 -c "import bcrypt; print(bcrypt.hashpw(b'helper-scripts', bcrypt.gensalt(rounds=12)).decode())") PASSWORD_HASH=$(python3 -c "import bcrypt; print(bcrypt.hashpw(b'helper-scripts', bcrypt.gensalt(rounds=12)).decode())")
sudo -u postgres psql -d documenso_db -c "INSERT INTO \"User\" (name, email, \"emailVerified\", password, \"identityProvider\", roles, \"createdAt\", \"lastSignedIn\", \"updatedAt\", \"customerId\") VALUES ('helper-scripts', 'helper-scripts@local.com', '2025-01-20 17:14:45.058', '$PASSWORD_HASH', 'DOCUMENSO', ARRAY['USER', 'ADMIN']::\"Role\"[], '2025-01-20 16:04:05.543', '2025-01-20 16:14:55.249', '2025-01-20 16:14:55.25', NULL) RETURNING id;" $STD sudo -u postgres psql -d documenso_db -c "INSERT INTO \"User\" (name, email, \"emailVerified\", password, \"identityProvider\", roles, \"createdAt\", \"lastSignedIn\", \"updatedAt\", \"customerId\") VALUES ('helper-scripts', 'helper-scripts@local.com', '2025-01-20 17:14:45.058', '$PASSWORD_HASH', 'DOCUMENSO', ARRAY['USER', 'ADMIN']::\"Role\"[], '2025-01-20 16:04:05.543', '2025-01-20 16:14:55.249', '2025-01-20 16:14:55.25', NULL) RETURNING id;"
$STD npm run prisma:migrate-deploy $STD npm run prisma:migrate-deploy
msg_ok "User created" msg_ok "User created"

View File

@@ -28,7 +28,7 @@ msg_ok "Installed Dependencies"
msg_info "Configure Application" msg_info "Configure Application"
var_project_name="default" var_project_name="default"
read -r -p "Type the assembly name of the project: " var_project_name read -r -p "${TAB3}Type the assembly name of the project: " var_project_name
echo "Target assembly: '${var_project_name}'" echo "Target assembly: '${var_project_name}'"
msg_ok "Application Configured" msg_ok "Application Configured"

View File

@@ -33,7 +33,7 @@ $STD apt-get install -y nodejs
$STD npm install -g yarn $STD npm install -g yarn
msg_ok "Installed Node.js" msg_ok "Installed Node.js"
read -p "Please enter the name for your server: " servername read -p "${TAB3}Please enter the name for your server: " servername
msg_info "Installing Element Synapse" msg_info "Installing Element Synapse"
curl -fsSL "https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg" -o "/usr/share/keyrings/matrix-org-archive-keyring.gpg" curl -fsSL "https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg" -o "/usr/share/keyrings/matrix-org-archive-keyring.gpg"

View File

@@ -21,7 +21,7 @@ $STD apt-get install -y \
imagemagick imagemagick
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
read -r -p "Do you need the intel-media-va-driver-non-free driver for HW encoding (Debian 12 only)? <y/N> " prompt read -r -p "${TAB3}Do you need the intel-media-va-driver-non-free driver for HW encoding (Debian 12 only)? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Intel Hardware Acceleration (non-free)" msg_info "Installing Intel Hardware Acceleration (non-free)"
cat <<EOF >/etc/apt/sources.list.d/non-free.list cat <<EOF >/etc/apt/sources.list.d/non-free.list

67
install/gatus-install.sh Normal file
View File

@@ -0,0 +1,67 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/TwiN/gatus
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
ca-certificates \
libcap2-bin
msg_ok "Installed Dependencies"
install_go
RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
msg_info "Setting up gatus v${RELEASE}"
temp_file=$(mktemp)
mkdir -p /opt/gatus
curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar zxf "$temp_file" --strip-components=1 -C /opt/gatus
cd /opt/gatus
$STD go mod tidy
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus .
setcap CAP_NET_RAW+ep gatus
mv config.yaml config
echo "${RELEASE}" >/opt/gatus_version.txt
msg_ok "Done setting up gatus"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/gatus.service
[Unit]
Description=gatus Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/gatus
ExecStart=/opt/gatus/gatus
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now gatus
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
rm -f "$temp_file"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"
motd_ssh
customize

View File

@@ -47,7 +47,7 @@ TURBO_TELEMETRY_DISABLED=1
AUTH_PROVIDERS='credentials' AUTH_PROVIDERS='credentials'
NODE_ENV='production' NODE_ENV='production'
EOF EOF
$STD pnpm install $STD pnpm install --recursive --frozen-lockfile --shamefully-hoist
$STD pnpm build $STD pnpm build
msg_ok "Installed Homarr" msg_ok "Installed Homarr"
@@ -67,7 +67,6 @@ echo $'#!/bin/bash\ncd /opt/homarr/apps/cli && node ./cli.cjs "$@"' >/usr/bin/ho
chmod +x /usr/bin/homarr chmod +x /usr/bin/homarr
mkdir /opt/homarr/build mkdir /opt/homarr/build
cp ./node_modules/better-sqlite3/build/Release/better_sqlite3.node ./build/better_sqlite3.node cp ./node_modules/better-sqlite3/build/Release/better_sqlite3.node ./build/better_sqlite3.node
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
msg_ok "Finished copying" msg_ok "Finished copying"
msg_info "Creating Services" msg_info "Creating Services"
@@ -115,7 +114,6 @@ motd_ssh
customize customize
msg_info "Cleaning up" msg_info "Cleaning up"
rm -rf /opt/v${RELEASE}.zip
$STD apt-get -y autoremove $STD apt-get -y autoremove
$STD apt-get -y autoclean $STD apt-get -y autoclean
msg_ok "Cleaned" msg_ok "Cleaned"

View File

@@ -24,7 +24,7 @@ curl -fsSL "https://repos.influxdata.com/influxdata-archive_compat.key" | gpg --
echo "deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main" >/etc/apt/sources.list.d/influxdata.list echo "deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main" >/etc/apt/sources.list.d/influxdata.list
msg_ok "Set up InfluxDB Repository" msg_ok "Set up InfluxDB Repository"
read -r -p "Which version of InfluxDB to install? (1 or 2) " prompt read -r -p "${TAB3}Which version of InfluxDB to install? (1 or 2) " prompt
if [[ $prompt == "2" ]]; then if [[ $prompt == "2" ]]; then
INFLUX="2" INFLUX="2"
else else
@@ -43,7 +43,7 @@ fi
$STD systemctl enable --now influxdb $STD systemctl enable --now influxdb
msg_ok "Installed InfluxDB" msg_ok "Installed InfluxDB"
read -r -p "Would you like to add Telegraf? <y/N> " prompt read -r -p "${TAB3}Would you like to add Telegraf? <y/N> " prompt
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
msg_info "Installing Telegraf" msg_info "Installing Telegraf"
$STD apt-get install -y telegraf $STD apt-get install -y telegraf

View File

@@ -21,9 +21,9 @@ msg_ok "Setup Python 3"
msg_info "Setup Kometa" msg_info "Setup Kometa"
temp_file=$(mktemp) temp_file=$(mktemp)
RELEASE=$(curl -fsSL https://api.github.com/repos/Kometa-Team/Kometa/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -fsSL https://api.github.com/repos/Kometa-Team/Kometa/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/Kometa-Team/Kometa/archive/refs/tags/v${RELEASE}.tar.gz" -o ""$temp_file"" curl -fsSL "https://github.com/Kometa-Team/Kometa/archive/refs/tags/v${RELEASE}.tar.gz" -o """$temp_file"""
tar -xzf "$temp_file" tar -xzf "$temp_file"
mv Kometa-${RELEASE} /opt/kometa mv Kometa-"${RELEASE}" /opt/kometa
cd /opt/kometa cd /opt/kometa
$STD pip install -r requirements.txt --ignore-installed $STD pip install -r requirements.txt --ignore-installed
mkdir -p config/assets mkdir -p config/assets
@@ -31,10 +31,10 @@ cp config/config.yml.template config/config.yml
echo "${RELEASE}" >/opt/kometa_version.txt echo "${RELEASE}" >/opt/kometa_version.txt
msg_ok "Setup Kometa" msg_ok "Setup Kometa"
read -p "Enter your TMDb API key: " TMDBKEY read -p "${TAB3}nter your TMDb API key: " TMDBKEY
read -p "Enter your Plex URL: " PLEXURL read -p "${TAB3}Enter your Plex URL: " PLEXURL
read -p "Enter your Plex token: " PLEXTOKEN read -p "${TAB3}Enter your Plex token: " PLEXTOKEN
sed -i -e "s#url: http://192.168.1.12:32400#url: $PLEXURL#g" /opt/kometa/config/config.yml sed -i -e "s#url: http://192.168.1.12:32400#url: $PLEXURL #g" /opt/kometa/config/config.yml
sed -i -e "s/token: ####################/token: $PLEXTOKEN/g" /opt/kometa/config/config.yml sed -i -e "s/token: ####################/token: $PLEXTOKEN/g" /opt/kometa/config/config.yml
sed -i -e "s/apikey: ################################/apikey: $TMDBKEY/g" /opt/kometa/config/config.yml sed -i -e "s/apikey: ################################/apikey: $TMDBKEY/g" /opt/kometa/config/config.yml
@@ -61,7 +61,7 @@ motd_ssh
customize customize
msg_info "Cleaning up" msg_info "Cleaning up"
rm -f $temp_file rm -f "$temp_file"
$STD apt-get -y autoremove $STD apt-get -y autoremove
$STD apt-get -y autoclean $STD apt-get -y autoclean
msg_ok "Cleaned" msg_ok "Cleaned"

View File

@@ -37,11 +37,11 @@ $STD apt-get install -y \
docker-compose-plugin docker-compose-plugin
msg_ok "Installed Docker" msg_ok "Installed Docker"
echo "Choose the database for Komodo installation:" echo "${TAB3}Choose the database for Komodo installation:"
echo "1) MongoDB (recommended)" echo "${TAB3}1) MongoDB (recommended)"
echo "2) SQLite" echo "${TAB3}2) SQLite"
echo "3) PostgreSQL" echo "${TAB3}3) PostgreSQL"
read -rp "Enter your choice (default: 1): " DB_CHOICE read -rp "${TAB3}Enter your choice (default: 1): " DB_CHOICE
DB_CHOICE=${DB_CHOICE:-1} DB_CHOICE=${DB_CHOICE:-1}
case $DB_CHOICE in case $DB_CHOICE in

View File

@@ -31,7 +31,7 @@ install_postgresql
msg_info "Installing Rust" msg_info "Installing Rust"
curl -fsSL https://sh.rustup.rs -o rustup-init.sh curl -fsSL https://sh.rustup.rs -o rustup-init.sh
$STD bash rustup-init.sh -y --profile minimal $STD bash rustup-init.sh -y --profile minimal
echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc echo 'export PATH="$HOME/.cargo/bin:$PATH"' >>~/.bashrc
export PATH="$HOME/.cargo/bin:$PATH" export PATH="$HOME/.cargo/bin:$PATH"
rm rustup-init.sh rm rustup-init.sh
$STD cargo install monolith $STD cargo install monolith
@@ -56,7 +56,7 @@ $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
} >>~/linkwarden.creds } >>~/linkwarden.creds
msg_ok "Set up PostgreSQL DB" msg_ok "Set up PostgreSQL DB"
read -r -p "Would you like to add Adminer? <y/N> " prompt read -r -p "${TAB3}Would you like to add Adminer? <y/N> " prompt
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
msg_info "Installing Adminer" msg_info "Installing Adminer"
$STD apt install -y adminer $STD apt install -y adminer

View File

@@ -19,7 +19,7 @@ sed -i 's/^# *\(port *=.*\)/\1/' /etc/mysql/my.cnf
sed -i 's/^bind-address/#bind-address/g' /etc/mysql/mariadb.conf.d/50-server.cnf sed -i 's/^bind-address/#bind-address/g' /etc/mysql/mariadb.conf.d/50-server.cnf
msg_ok "Installed MariaDB" msg_ok "Installed MariaDB"
read -r -p "Would you like to add PhpMyAdmin? <y/N> " prompt read -r -p "${TAB3}Would you like to add PhpMyAdmin? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing phpMyAdmin" msg_info "Installing phpMyAdmin"
$STD apt-get install -y \ $STD apt-get install -y \

View File

@@ -38,7 +38,7 @@ sed -i \
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
msg_ok "Setup ${APPLICATION}" msg_ok "Setup ${APPLICATION}"
read -r -p "Do you want add meilisearch-ui? [y/n]: " prompt read -r -p "${TAB3}Do you want add meilisearch-ui? [y/n]: " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Setting up Node.js Repository" msg_info "Setting up Node.js Repository"
mkdir -p /etc/apt/keyrings mkdir -p /etc/apt/keyrings
@@ -57,13 +57,13 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
tmp_dir=$(mktemp -d) tmp_dir=$(mktemp -d)
mkdir -p /opt/meilisearch-ui mkdir -p /opt/meilisearch-ui
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) }') 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) }')
curl -fsSL "https://github.com/riccox/meilisearch-ui/archive/refs/tags/${RELEASE_UI}.zip" -o $tmp_file curl -fsSL "https://github.com/riccox/meilisearch-ui/archive/refs/tags/${RELEASE_UI}.zip" -o "$tmp_file"
unzip -q "$tmp_file" -d "$tmp_dir" unzip -q "$tmp_file" -d "$tmp_dir"
mv "$tmp_dir"/*/* /opt/meilisearch-ui/ mv "$tmp_dir"/*/* /opt/meilisearch-ui/
cd /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 sed -i 's|const hash = execSync("git rev-parse HEAD").toString().trim();|const hash = "unknown";|' /opt/meilisearch-ui/vite.config.ts
$STD pnpm install $STD pnpm install
cat <<EOF > /opt/meilisearch-ui/.env.local cat <<EOF >/opt/meilisearch-ui/.env.local
VITE_SINGLETON_MODE=true VITE_SINGLETON_MODE=true
VITE_SINGLETON_HOST=http://${LOCAL_IP}:7700 VITE_SINGLETON_HOST=http://${LOCAL_IP}:7700
VITE_SINGLETON_API_KEY=${MASTER_KEY} VITE_SINGLETON_API_KEY=${MASTER_KEY}
@@ -88,7 +88,7 @@ EOF
systemctl enable -q --now meilisearch systemctl enable -q --now meilisearch
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
cat <<EOF > /etc/systemd/system/meilisearch-ui.service cat <<EOF >/etc/systemd/system/meilisearch-ui.service
[Unit] [Unit]
Description=Meilisearch UI Service Description=Meilisearch UI Service
After=network.target meilisearch.service After=network.target meilisearch.service
@@ -107,12 +107,11 @@ SyslogIdentifier=meilisearch-ui
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
systemctl enable -q --now meilisearch-ui systemctl enable -q --now meilisearch-ui
fi fi
msg_ok "Set up Services" msg_ok "Set up Services"
motd_ssh motd_ssh
customize customize

View File

@@ -17,7 +17,7 @@ msg_info "Installing Dependencies"
$STD apt-get install -y gnupg $STD apt-get install -y gnupg
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
read -p "Do you want to install MongoDB 8.0 instead of 7.0? [y/N]: " install_mongodb_8 read -p "${TAB3}Do you want to install MongoDB 8.0 instead of 7.0? [y/N]: " install_mongodb_8
if [[ "$install_mongodb_8" =~ ^[Yy]$ ]]; then if [[ "$install_mongodb_8" =~ ^[Yy]$ ]]; then
MONGODB_VERSION="8.0" MONGODB_VERSION="8.0"
else else

View File

@@ -22,7 +22,7 @@ msg_ok "Installed Dependencies"
RELEASE_REPO="mysql-8.0" RELEASE_REPO="mysql-8.0"
RELEASE_AUTH="mysql_native_password" RELEASE_AUTH="mysql_native_password"
read -r -p "Would you like to install the MySQL 8.4 LTS release instead of MySQL 8.0 (bug fix track; EOL April-2026)? <y/N> " prompt read -r -p "${TAB3}Would you like to install the MySQL 8.4 LTS release instead of MySQL 8.0 (bug fix track; EOL April-2026)? <y/N> " prompt
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
RELEASE_REPO="mysql-8.4-lts" RELEASE_REPO="mysql-8.4-lts"
RELEASE_AUTH="caching_sha2_password" RELEASE_AUTH="caching_sha2_password"
@@ -50,7 +50,7 @@ echo -e "MySQL user: root" >>~/mysql.creds
echo -e "MySQL password: $ADMIN_PASS" >>~/mysql.creds echo -e "MySQL password: $ADMIN_PASS" >>~/mysql.creds
msg_ok "MySQL Server configured" msg_ok "MySQL Server configured"
read -r -p "Would you like to add PhpMyAdmin? <y/N> " prompt read -r -p "${TAB3}Would you like to add PhpMyAdmin? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing phpMyAdmin" msg_info "Installing phpMyAdmin"
$STD apt-get install -y \ $STD apt-get install -y \

View File

@@ -27,7 +27,7 @@ systemctl enable -q --now navidrome
echo "${RELEASE}" >/opt/Navidrome_version.txt echo "${RELEASE}" >/opt/Navidrome_version.txt
msg_ok "Installed Navidrome" msg_ok "Installed Navidrome"
read -p "Do you want to install filebrowser addon? (y/n) " -n 1 -r read -p "${TAB3}Do you want to install filebrowser addon? (y/n) " -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]; then if [[ $REPLY =~ ^[Yy]$ ]]; then
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/filebrowser.sh)" bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/filebrowser.sh)"
fi fi

View File

@@ -62,7 +62,7 @@ RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-
grep "tag_name" | grep "tag_name" |
awk '{print substr($2, 3, length($2)-4) }') awk '{print substr($2, 3, length($2)-4) }')
read -r -p "Would you like to install an older version (v2.10.4)? <y/N> " prompt read -r -p "${TAB3}Would you like to install an older version (v2.10.4)? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Downloading Nginx Proxy Manager v2.10.4" msg_info "Downloading Nginx Proxy Manager v2.10.4"
curl -fsSL "https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v2.10.4" | tar -xz curl -fsSL "https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v2.10.4" | tar -xz
@@ -71,7 +71,7 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
else else
msg_info "Downloading Nginx Proxy Manager v${RELEASE}" msg_info "Downloading Nginx Proxy Manager v${RELEASE}"
curl -fsSL "https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE}" | tar -xz curl -fsSL "https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE}" | tar -xz
cd ./nginx-proxy-manager-${RELEASE} cd ./nginx-proxy-manager-"${RELEASE}"
msg_ok "Downloaded Nginx Proxy Manager v${RELEASE}" msg_ok "Downloaded Nginx Proxy Manager v${RELEASE}"
fi fi
msg_info "Setting up Environment" msg_info "Setting up Environment"

View File

@@ -42,7 +42,7 @@ msg_ok "Fetched NPMplus"
attempts=0 attempts=0
while true; do while true; do
read -r -p "Enter your TZ Identifier (e.g., Europe/Berlin): " TZ_INPUT read -r -p "${TAB3}Enter your TZ Identifier (e.g., Europe/Berlin): " TZ_INPUT
if validate_tz "$TZ_INPUT"; then if validate_tz "$TZ_INPUT"; then
break break
fi fi
@@ -55,7 +55,7 @@ while true; do
fi fi
done done
read -r -p "Enter your ACME Email: " ACME_EMAIL_INPUT read -r -p "${TAB3}Enter your ACME Email: " ACME_EMAIL_INPUT
yq -i " yq -i "
.services.npmplus.environment |= .services.npmplus.environment |=

74
install/odoo-install.sh Normal file
View File

@@ -0,0 +1,74 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/tteck/Proxmox/raw/main/LICENSE
# Source: https://github.com/odoo/odoo
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
build-essential \
make
msg_ok "Installed Dependencies"
RELEASE=$(curl -fsSL https://nightly.odoo.com/ | grep -oE 'href="[0-9]+\.[0-9]+/nightly"' | head -n1 | cut -d'"' -f2 | cut -d/ -f1)
LATEST_VERSION=$(curl -fsSL "https://nightly.odoo.com/${RELEASE}/nightly/deb/" |
grep -oP "odoo_${RELEASE}\.\d+_all\.deb" |
sed -E "s/odoo_(${RELEASE}\.[0-9]+)_all\.deb/\1/" |
sort -V |
tail -n1)
msg_info "Setup Odoo $RELEASE"
curl -fsSL https://nightly.odoo.com/${RELEASE}/nightly/deb/odoo_${RELEASE}.latest_all.deb -o /opt/odoo.deb
$STD apt install -y /opt/odoo.deb
msg_ok "Setup Odoo $RELEASE"
msg_info "Setup PostgreSQL Database"
DB_NAME="odoo"
DB_USER="odoo_usr"
DB_PASS="$(openssl rand -base64 18 | cut -c1-13)"
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME;"
$STD sudo -u postgres psql -c "CREATE USER $DB_USER WITH PASSWORD '$DB_PASS';"
$STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;"
$STD sudo -u postgres psql -c "ALTER DATABASE $DB_NAME OWNER TO $DB_USER;"
$STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;"
{
echo "Odoo-Credentials"
echo -e "Odoo Database User: $DB_USER"
echo -e "Odoo Database Password: $DB_PASS"
echo -e "Odoo Database Name: $DB_NAME"
} >>~/odoo.creds
msg_ok "Setup PostgreSQL"
msg_info "Configuring Odoo"
sed -i \
-e "s|^;*db_host *=.*|db_host = localhost|" \
-e "s|^;*db_port *=.*|db_port = 5432|" \
-e "s|^;*db_user *=.*|db_user = $DB_USER|" \
-e "s|^;*db_password *=.*|db_password = $DB_PASS|" \
/etc/odoo/odoo.conf
$STD sudo -u odoo odoo -c /etc/odoo/odoo.conf -d odoo -i base --stop-after-init
systemctl restart odoo
echo "${LATEST_VERSION}" >/opt/${APPLICATION}_version.txt
msg_ok "Configured Odoo"
msg_info "Restarting Odoo"
msg_ok "Restarted Odoo"
motd_ssh
customize
msg_info "Cleaning up"
rm -f /opt/odoo.deb
$STD apt-get autoremove
$STD apt-get autoclean
msg_ok "Cleaned"

View File

@@ -16,20 +16,19 @@ update_os
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt-get install -y \ $STD apt-get install -y \
gnupg \ gnupg \
ca-certificates \
apt-transport-https apt-transport-https
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Installing Azul Zulu21" msg_info "Installing Azul Zulu17"
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xB1998361219BD9C9" -o "/etc/apt/trusted.gpg.d/zulu-repo.asc" curl -fsSL https://repos.azul.com/azul-repo.key | gpg --dearmor -o /usr/share/keyrings/azul.gpg
curl -fsSL "https://cdn.azul.com/zulu/bin/zulu-repo_1.0.0-3_all.deb" -o $(basename "https://cdn.azul.com/zulu/bin/zulu-repo_1.0.0-3_all.deb") echo "deb [signed-by=/usr/share/keyrings/azul.gpg] https://repos.azul.com/zulu/deb stable main" >/etc/apt/sources.list.d/zulu.list
$STD dpkg -i zulu-repo_1.0.0-3_all.deb
$STD apt-get update $STD apt-get update
$STD apt-get -y install zulu21-jdk $STD apt-get -y install zulu17-jdk
msg_ok "Installed Azul Zulu21" msg_ok "Installed Azul Zulu17"
msg_info "Installing openHAB" msg_info "Installing openHAB"
curl -fsSL "https://openhab.jfrog.io/artifactory/api/gpg/key/public" | gpg --dearmor >openhab.gpg curl -fsSL "https://openhab.jfrog.io/artifactory/api/gpg/key/public" | gpg --dearmor -o /usr/share/keyrings/openhab.gpg
mv openhab.gpg /usr/share/keyrings
chmod u=rw,g=r,o=r /usr/share/keyrings/openhab.gpg chmod u=rw,g=r,o=r /usr/share/keyrings/openhab.gpg
echo "deb [signed-by=/usr/share/keyrings/openhab.gpg] https://openhab.jfrog.io/artifactory/openhab-linuxpkg stable main" >/etc/apt/sources.list.d/openhab.list echo "deb [signed-by=/usr/share/keyrings/openhab.gpg] https://openhab.jfrog.io/artifactory/openhab-linuxpkg stable main" >/etc/apt/sources.list.d/openhab.list
$STD apt update $STD apt update

View File

@@ -55,7 +55,7 @@ export NODE_OPTIONS="--max-old-space-size=3584"
$STD npm run build $STD npm run build
msg_ok "Installed Open WebUI" msg_ok "Installed Open WebUI"
read -r -p "Would you like to add Ollama? <y/N> " prompt read -r -p "${TAB3}Would you like to add Ollama? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Ollama" msg_info "Installing Ollama"
curl -fsSLO https://ollama.com/download/ollama-linux-amd64.tgz curl -fsSLO https://ollama.com/download/ollama-linux-amd64.tgz

View File

@@ -5,7 +5,7 @@
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/openziti/ziti # Source: https://github.com/openziti/ziti
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color color
verb_ip6 verb_ip6
catch_errors catch_errors
@@ -25,18 +25,18 @@ $STD apt-get update
$STD apt-get install -y openziti-controller openziti-console $STD apt-get install -y openziti-controller openziti-console
msg_ok "Installed openziti" msg_ok "Installed openziti"
read -r -p "Would you like to go through the auto configuration now? <y/N>" prompt read -r -p "${TAB3}Would you like to go through the auto configuration now? <y/N>" prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
IPADDRESS=$(hostname -I | awk '{print $1}') IPADDRESS=$(hostname -I | awk '{print $1}')
GEN_FQDN="controller.${IPADDRESS}.sslip.io" GEN_FQDN="controller.${IPADDRESS}.sslip.io"
read -r -p "Please enter the controller FQDN [${GEN_FQDN}]: " ZITI_CTRL_ADVERTISED_ADDRESS read -r -p "${TAB3}Please enter the controller FQDN [${GEN_FQDN}]: " ZITI_CTRL_ADVERTISED_ADDRESS
ZITI_CTRL_ADVERTISED_ADDRESS=${ZITI_CTRL_ADVERTISED_ADDRESS:-$GEN_FQDN} ZITI_CTRL_ADVERTISED_ADDRESS=${ZITI_CTRL_ADVERTISED_ADDRESS:-$GEN_FQDN}
read -r -p "Please enter the controller port [1280]: " ZITI_CTRL_ADVERTISED_PORT read -r -p "${TAB3}Please enter the controller port [1280]: " ZITI_CTRL_ADVERTISED_PORT
ZITI_CTRL_ADVERTISED_PORT=${ZITI_CTRL_ADVERTISED_PORT:-1280} ZITI_CTRL_ADVERTISED_PORT=${ZITI_CTRL_ADVERTISED_PORT:-1280}
read -r -p "Please enter the controller admin user [admin]: " ZITI_USER read -r -p "${TAB3}Please enter the controller admin user [admin]: " ZITI_USER
ZITI_USER=${ZITI_USER:-admin} ZITI_USER=${ZITI_USER:-admin}
GEN_PWD=$(head -c128 /dev/urandom | LC_ALL=C tr -dc 'A-Za-z0-9!@#$%^*_+~' | cut -c 1-12) GEN_PWD=$(head -c128 /dev/urandom | LC_ALL=C tr -dc 'A-Za-z0-9!@#$%^*_+~' | cut -c 1-12)
read -r -p "Please enter the controller admin password [${GEN_PWD}]:" ZITI_PWD read -r -p "${TAB3}Please enter the controller admin password [${GEN_PWD}]:" ZITI_PWD
ZITI_PWD=${ZITI_PWD:-$GEN_PWD} ZITI_PWD=${ZITI_PWD:-$GEN_PWD}
CONFIG_FILE="/opt/openziti/etc/controller/bootstrap.env" CONFIG_FILE="/opt/openziti/etc/controller/bootstrap.env"
sed -i "s|^ZITI_CTRL_ADVERTISED_ADDRESS=.*|ZITI_CTRL_ADVERTISED_ADDRESS='${ZITI_CTRL_ADVERTISED_ADDRESS}'|" "$CONFIG_FILE" sed -i "s|^ZITI_CTRL_ADVERTISED_ADDRESS=.*|ZITI_CTRL_ADVERTISED_ADDRESS='${ZITI_CTRL_ADVERTISED_ADDRESS}'|" "$CONFIG_FILE"

View File

@@ -27,7 +27,7 @@ sed -i '0,/^ExecStart/ { /^ExecStart/ { n; s|^ExecStart.*|ExecStart=/opt/openzit
systemctl daemon-reload systemctl daemon-reload
msg_ok "Installed openziti" msg_ok "Installed openziti"
read -r -p "Please paste an identity enrollment token(JTW)" prompt read -r -p "${TAB3}Please paste an identity enrollment token(JTW)" prompt
if [[ ${prompt} ]]; then if [[ ${prompt} ]]; then
msg_info "Adding identity" msg_info "Adding identity"
echo "${prompt}" >/opt/openziti/etc/identities/identity.jwt echo "${prompt}" >/opt/openziti/etc/identities/identity.jwt

View File

@@ -50,8 +50,8 @@ msg_info "Setup Paperless-GPT"
temp_file=$(mktemp) temp_file=$(mktemp)
RELEASE=$(curl -fsSL https://api.github.com/repos/icereed/paperless-gpt/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -fsSL https://api.github.com/repos/icereed/paperless-gpt/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/icereed/paperless-gpt/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" curl -fsSL "https://github.com/icereed/paperless-gpt/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar zxf $temp_file tar zxf "$temp_file"
mv paperless-gpt-${RELEASE} /opt/paperless-gpt mv paperless-gpt-"${RELEASE}" /opt/paperless-gpt
cd /opt/paperless-gpt/web-app cd /opt/paperless-gpt/web-app
$STD npm install $STD npm install
$STD npm run build $STD npm run build
@@ -64,16 +64,16 @@ echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
msg_ok "Setup Paperless-GPT" msg_ok "Setup Paperless-GPT"
mkdir -p /opt/paperless-gpt-data mkdir -p /opt/paperless-gpt-data
read -p "Do you want to enter the Paperless local URL now? (y/n) " input_url read -p "${TAB3}Do you want to enter the Paperless local URL now? (y/n) " input_url
if [[ "$input_url" =~ ^[Yy]$ ]]; then if [[ "$input_url" =~ ^[Yy]$ ]]; then
read -p "Enter your Paperless-NGX instance URL (e.g., http://192.168.1.100:8000): " PAPERLESS_BASE_URL read -p "${TAB3}Enter your Paperless-NGX instance URL (e.g., http://192.168.1.100:8000): " PAPERLESS_BASE_URL
else else
PAPERLESS_BASE_URL="http://your_paperless_ngx_url" PAPERLESS_BASE_URL="http://your_paperless_ngx_url"
fi fi
read -p "Do you want to enter the Paperless API token now? (y/n) " input_token read -p "${TAB3}Do you want to enter the Paperless API token now? (y/n) " input_token
if [[ "$input_token" =~ ^[Yy]$ ]]; then if [[ "$input_token" =~ ^[Yy]$ ]]; then
read -p "Enter your Paperless API token: " PAPERLESS_API_TOKEN read -p "${TAB3}Enter your Paperless API token: " PAPERLESS_API_TOKEN
else else
PAPERLESS_API_TOKEN="your_paperless_api_token" PAPERLESS_API_TOKEN="your_paperless_api_token"
fi fi
@@ -129,7 +129,7 @@ motd_ssh
customize customize
msg_info "Cleaning up" msg_info "Cleaning up"
rm -f $temp_file rm -f "$temp_file"
$STD apt-get -y autoremove $STD apt-get -y autoremove
$STD apt-get -y autoclean $STD apt-get -y autoclean
msg_ok "Cleaned" msg_ok "Cleaned"

View File

@@ -125,7 +125,7 @@ cd /opt/paperless/src
$STD python3 manage.py migrate $STD python3 manage.py migrate
msg_ok "Set up PostgreSQL database" msg_ok "Set up PostgreSQL database"
read -r -p "Would you like to add Adminer? <y/N> " prompt read -r -p "${TAB3}Would you like to add Adminer? <y/N> " prompt
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
msg_info "Installing Adminer" msg_info "Installing Adminer"
$STD apt install -y adminer $STD apt install -y adminer

View File

@@ -54,9 +54,9 @@ $STD pihole-FTL --config ntp.sync.interval 0
systemctl restart pihole-FTL.service systemctl restart pihole-FTL.service
msg_ok "Installed Pi-hole" msg_ok "Installed Pi-hole"
read -r -p "Would you like to add Unbound? <y/N> " prompt read -r -p "${TAB3}Would you like to add Unbound? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
read -r -p "Unbound is configured as a recursive DNS server by default, would you like it to be configured as a forwarding DNS server (using DNS-over-TLS (DoT)) instead? <y/N> " prompt read -r -p "${TAB3}Unbound is configured as a recursive DNS server by default, would you like it to be configured as a forwarding DNS server (using DNS-over-TLS (DoT)) instead? <y/N> " prompt
msg_info "Installing Unbound" msg_info "Installing Unbound"
$STD apt-get install -y unbound $STD apt-get install -y unbound
cat <<EOF >/etc/unbound/unbound.conf.d/pi-hole.conf cat <<EOF >/etc/unbound/unbound.conf.d/pi-hole.conf

View File

@@ -42,7 +42,7 @@ rm -f "$temp_file"
set -o pipefail set -o pipefail
msg_ok "Installed Golang" msg_ok "Installed Golang"
read -r -p "What public URL do you want to use (e.g. pocketid.mydomain.com)? " public_url read -r -p "${TAB3}What public URL do you want to use (e.g. pocketid.mydomain.com)? " public_url
msg_info "Setup Pocket ID" msg_info "Setup Pocket ID"
cd /opt cd /opt
RELEASE=$(curl -fsSL https://api.github.com/repos/pocket-id/pocket-id/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -fsSL https://api.github.com/repos/pocket-id/pocket-id/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')

View File

@@ -49,7 +49,7 @@ $STD systemctl enable --now podman.socket
echo -e 'unqualified-search-registries=["docker.io"]' >>/etc/containers/registries.conf echo -e 'unqualified-search-registries=["docker.io"]' >>/etc/containers/registries.conf
msg_ok "Installed Podman" msg_ok "Installed Podman"
read -r -p "Would you like to add Portainer? <y/N> " prompt read -r -p "${TAB3}Would you like to add Portainer? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Portainer $PORTAINER_LATEST_VERSION" msg_info "Installing Portainer $PORTAINER_LATEST_VERSION"
podman volume create portainer_data >/dev/null podman volume create portainer_data >/dev/null
@@ -63,7 +63,7 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
portainer/portainer-ce:latest portainer/portainer-ce:latest
msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION" msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION"
else else
read -r -p "Would you like to add the Portainer Agent? <y/N> " prompt read -r -p "${TAB3}Would you like to add the Portainer Agent? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION" msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION"
podman volume create temp >/dev/null podman volume create temp >/dev/null

View File

@@ -49,7 +49,7 @@ $STD systemctl enable --now podman.socket
echo -e 'unqualified-search-registries=["docker.io"]' >>/etc/containers/registries.conf echo -e 'unqualified-search-registries=["docker.io"]' >>/etc/containers/registries.conf
msg_ok "Installed Podman" msg_ok "Installed Podman"
read -r -p "Would you like to add Portainer? <y/N> " prompt read -r -p "${TAB3}Would you like to add Portainer? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Portainer $PORTAINER_LATEST_VERSION" msg_info "Installing Portainer $PORTAINER_LATEST_VERSION"
podman volume create portainer_data >/dev/null podman volume create portainer_data >/dev/null
@@ -63,7 +63,7 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
portainer/portainer-ce:latest portainer/portainer-ce:latest
msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION" msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION"
else else
read -r -p "Would you like to add the Portainer Agent? <y/N> " prompt read -r -p "${TAB3}Would you like to add the Portainer Agent? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION" msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION"
podman volume create temp >/dev/null podman volume create temp >/dev/null

View File

@@ -130,7 +130,7 @@ EOF
sudo systemctl restart postgresql sudo systemctl restart postgresql
msg_ok "Installed PostgreSQL" msg_ok "Installed PostgreSQL"
read -r -p "Would you like to add Adminer? <y/N> " prompt read -r -p "${TAB3}Would you like to add Adminer? <y/N> " prompt
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
msg_info "Installing Adminer" msg_info "Installing Adminer"
$STD apt install -y adminer $STD apt install -y adminer

View File

@@ -53,9 +53,9 @@ $STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH
} >>~/pterodactyl-panel.creds } >>~/pterodactyl-panel.creds
msg_ok "Set up MariaDB" msg_ok "Set up MariaDB"
read -p "Provide an email address for admin login, this should be a valid email address: " ADMIN_EMAIL read -p "${TAB3}Provide an email address for admin login, this should be a valid email address: " ADMIN_EMAIL
read -p "Enter your First Name: " NAME_FIRST read -p "${TAB3}nter your First Name: " NAME_FIRST
read -p "Enter your Last Name: " NAME_LAST read -p "${TAB3}Enter your Last Name: " NAME_LAST
msg_info "Installing pterodactyl Panel" msg_info "Installing pterodactyl Panel"
RELEASE=$(curl -fsSL https://api.github.com/repos/pterodactyl/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -fsSL https://api.github.com/repos/pterodactyl/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')

65
install/rclone-install.sh Normal file
View File

@@ -0,0 +1,65 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/rclone/rclone
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
apache2-utils \
unzip
msg_ok "Installed Dependencies"
msg_info "Installing rclone"
temp_file=$(mktemp)
mkdir -p /opt/rclone
RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/rclone/rclone/releases/download/v${RELEASE}/rclone-v${RELEASE}-linux-amd64.zip" -o "$temp_file"
$STD unzip -j "$temp_file" '*/**' -d /opt/rclone
cd /opt/rclone
RCLONE_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
$STD htpasswd -cb -B /opt/login.pwd admin "$RCLONE_PASSWORD"
{
echo "rclone-Credentials"
echo "rclone User Name: admin"
echo "rclone Password: $RCLONE_PASSWORD"
} >>~/rclone.creds
echo "${RELEASE}" >/opt/rclone_version.txt
msg_ok "Installed rclone"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/rclone-web.service
[Unit]
Description=Rclone Web GUI
After=network-online.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/rclone
ExecStart=/opt/rclone/rclone rcd --rc-web-gui --rc-web-gui-no-open-browser --rc-addr :3000 --rc-htpasswd /opt/login.pwd
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now rclone-web
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
rm -f "$temp_file"
$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