mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-11-21 13:05:16 +00:00
Compare commits
49 Commits
2025-05-08
...
2025-05-12
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b3bda56498 | ||
|
|
e59f868966 | ||
|
|
a9b53afcc5 | ||
|
|
38cf296a4c | ||
|
|
35c0d269ac | ||
|
|
d7211e856e | ||
|
|
dfbb1a8035 | ||
|
|
61b09e926a | ||
|
|
9140fd52ac | ||
|
|
4a3ee4db67 | ||
|
|
b333d8c3f9 | ||
|
|
245b35d01e | ||
|
|
37d20ba0dd | ||
|
|
b5062c51af | ||
|
|
1ea830c955 | ||
|
|
be31ecf432 | ||
|
|
c586dfe87f | ||
|
|
7f65be34ff | ||
|
|
c158dbb3ea | ||
|
|
95acf8c018 | ||
|
|
6c5aa6677a | ||
|
|
43ff379ed4 | ||
|
|
2c2849179a | ||
|
|
d116505ff2 | ||
|
|
42535e14ab | ||
|
|
990ce16a7d | ||
|
|
af1cf0bc71 | ||
|
|
e166115745 | ||
|
|
bdef92cc71 | ||
|
|
1e59c934ec | ||
|
|
456b00882d | ||
|
|
9b8a30c84f | ||
|
|
3b90e3fe15 | ||
|
|
5e3a5bb24c | ||
|
|
7413a03009 | ||
|
|
bb1c9d73c4 | ||
|
|
3b5a901832 | ||
|
|
a62a4876ec | ||
|
|
9d21ceacc3 | ||
|
|
c604aeb064 | ||
|
|
9b9ed2f6e1 | ||
|
|
1ddc74d2b5 | ||
|
|
ee9f6dd818 | ||
|
|
a1754dff4e | ||
|
|
4827a17ba3 | ||
|
|
b5ed7b9f4e | ||
|
|
ab9760194d | ||
|
|
abb5b6d5ac | ||
|
|
4656fe21f9 |
@@ -10,6 +10,7 @@ on:
|
||||
|
||||
jobs:
|
||||
update-app-files:
|
||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||
runs-on: runner-cluster-htl-set
|
||||
|
||||
permissions:
|
||||
@@ -89,15 +90,16 @@ jobs:
|
||||
if [ -n "$PR_NUMBER" ]; then
|
||||
gh pr review $PR_NUMBER --approve
|
||||
fi
|
||||
|
||||
- name: Re-approve pull request after update
|
||||
|
||||
- name: Approve pull request and merge
|
||||
if: env.changed == 'true'
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GH_TOKEN: ${{ secrets.PAT_AUTOMERGE }}
|
||||
run: |
|
||||
PR_NUMBER=$(gh pr list --head "pr-update-app-files" --json number --jq '.[].number')
|
||||
if [ -n "$PR_NUMBER" ]; then
|
||||
gh pr review $PR_NUMBER --approve
|
||||
gh pr merge $PR_NUMBER --squash --admin
|
||||
fi
|
||||
|
||||
# Step 8: Output success message when no changes
|
||||
|
||||
1
.github/workflows/autolabeler.yml
vendored
1
.github/workflows/autolabeler.yml
vendored
@@ -7,6 +7,7 @@ on:
|
||||
|
||||
jobs:
|
||||
autolabeler:
|
||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||
runs-on: runner-cluster-htl-set
|
||||
permissions:
|
||||
pull-requests: write
|
||||
|
||||
14
.github/workflows/changelog-pr.yml
vendored
14
.github/workflows/changelog-pr.yml
vendored
@@ -7,6 +7,7 @@ on:
|
||||
|
||||
jobs:
|
||||
update-changelog-pull-request:
|
||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||
runs-on: runner-cluster-htl-set
|
||||
env:
|
||||
CONFIG_PATH: .github/changelog-pr-config.json
|
||||
@@ -263,6 +264,17 @@ jobs:
|
||||
gh pr review $PR_NUMBER --approve
|
||||
fi
|
||||
|
||||
- name: Approve pull request and merge
|
||||
if: env.changed == 'true'
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.PAT_AUTOMERGE }}
|
||||
run: |
|
||||
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number')
|
||||
if [ -n "$PR_NUMBER" ]; then
|
||||
gh pr review $PR_NUMBER --approve
|
||||
gh pr merge $PR_NUMBER --squash --admin
|
||||
fi
|
||||
|
||||
- name: Re-approve pull request after update
|
||||
if: env.changed == 'true'
|
||||
env:
|
||||
@@ -271,4 +283,4 @@ jobs:
|
||||
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number')
|
||||
if [ -n "$PR_NUMBER" ]; then
|
||||
gh pr review $PR_NUMBER --approve
|
||||
fi
|
||||
fi
|
||||
|
||||
1
.github/workflows/close-discussion.yml
vendored
1
.github/workflows/close-discussion.yml
vendored
@@ -11,6 +11,7 @@ permissions:
|
||||
|
||||
jobs:
|
||||
close-discussion:
|
||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||
runs-on: runner-cluster-htl-set
|
||||
|
||||
steps:
|
||||
|
||||
1
.github/workflows/close-ttek-issues.yaml
vendored
1
.github/workflows/close-ttek-issues.yaml
vendored
@@ -5,6 +5,7 @@ on:
|
||||
|
||||
jobs:
|
||||
close_tteck_issues:
|
||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Auto-close if tteck script detected
|
||||
|
||||
2
.github/workflows/close_issue_in_dev.yaml
vendored
2
.github/workflows/close_issue_in_dev.yaml
vendored
@@ -5,7 +5,7 @@ on:
|
||||
- closed
|
||||
jobs:
|
||||
close_issue:
|
||||
if: github.event.pull_request.merged == true
|
||||
if: github.event.pull_request.merged == true && github.repository == 'community-scripts/ProxmoxVE'
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
|
||||
12
.github/workflows/crawl-versions.yaml
vendored
12
.github/workflows/crawl-versions.yaml
vendored
@@ -12,6 +12,7 @@ permissions:
|
||||
|
||||
jobs:
|
||||
crawl-versions:
|
||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||
runs-on: runner-cluster-htl-set
|
||||
|
||||
steps:
|
||||
@@ -103,6 +104,17 @@ jobs:
|
||||
gh pr review $PR_NUMBER --approve
|
||||
fi
|
||||
|
||||
- name: Approve pull request and merge
|
||||
if: env.changed == 'true'
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.PAT_AUTOMERGE }}
|
||||
run: |
|
||||
PR_NUMBER=$(gh pr list --head "update_versions" --json number --jq '.[].number')
|
||||
if [ -n "$PR_NUMBER" ]; then
|
||||
gh pr review $PR_NUMBER --approve
|
||||
gh pr merge $PR_NUMBER --squash --admin
|
||||
fi
|
||||
|
||||
- name: Re-approve pull request after update
|
||||
if: env.changed == 'true'
|
||||
env:
|
||||
|
||||
@@ -11,6 +11,7 @@ on:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||
runs-on: ubuntu-latest #To ensure it always builds we use the github runner with all the right tooling
|
||||
|
||||
steps:
|
||||
|
||||
3
.github/workflows/delete-json-branch.yml
vendored
3
.github/workflows/delete-json-branch.yml
vendored
@@ -9,6 +9,7 @@ on:
|
||||
|
||||
jobs:
|
||||
delete_branch:
|
||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||
runs-on: runner-cluster-htl-set
|
||||
steps:
|
||||
- name: Checkout the code
|
||||
@@ -25,4 +26,4 @@ jobs:
|
||||
git push origin --delete "$PR_BRANCH"
|
||||
else
|
||||
echo "Skipping deletion of the main branch"
|
||||
fi
|
||||
fi
|
||||
|
||||
3
.github/workflows/frontend-cicd.yml
vendored
3
.github/workflows/frontend-cicd.yml
vendored
@@ -25,6 +25,7 @@ concurrency:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||
runs-on: runner-cluster-htl-set
|
||||
defaults:
|
||||
run:
|
||||
@@ -63,7 +64,7 @@ jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
if: github.ref == 'refs/heads/main'
|
||||
if: github.ref == 'refs/heads/main' && github.repository == 'community-scripts/ProxmoxVE'
|
||||
permissions:
|
||||
pages: write
|
||||
id-token: write
|
||||
|
||||
1
.github/workflows/github-release.yml
vendored
1
.github/workflows/github-release.yml
vendored
@@ -7,6 +7,7 @@ on:
|
||||
|
||||
jobs:
|
||||
create-daily-release:
|
||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||
runs-on: runner-cluster-htl-set
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
1
.github/workflows/script-test.yml
vendored
1
.github/workflows/script-test.yml
vendored
@@ -11,6 +11,7 @@ on:
|
||||
|
||||
jobs:
|
||||
run-install-script:
|
||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||
runs-on: pvenode
|
||||
steps:
|
||||
- name: Checkout PR branch
|
||||
|
||||
1
.github/workflows/script_format.yml
vendored
1
.github/workflows/script_format.yml
vendored
@@ -11,6 +11,7 @@ on:
|
||||
|
||||
jobs:
|
||||
run-install-script:
|
||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||
runs-on: pvenode
|
||||
steps:
|
||||
- name: Checkout PR branch (supports forks)
|
||||
|
||||
@@ -72,8 +72,7 @@ network_check() {
|
||||
|
||||
update_os() {
|
||||
msg_info "Updating Container OS"
|
||||
apk update
|
||||
apk upgrade
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated Container OS"
|
||||
}
|
||||
|
||||
@@ -83,4 +82,4 @@ motd_ssh() {
|
||||
|
||||
customize() {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
11
.github/workflows/update-json-date.yml
vendored
11
.github/workflows/update-json-date.yml
vendored
@@ -10,6 +10,7 @@ on:
|
||||
|
||||
jobs:
|
||||
update-app-files:
|
||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||
runs-on: runner-cluster-htl-set
|
||||
|
||||
permissions:
|
||||
@@ -125,6 +126,16 @@ jobs:
|
||||
if [ -n "$PR_NUMBER" ]; then
|
||||
gh pr review $PR_NUMBER --approve
|
||||
fi
|
||||
- name: Approve pull request and merge
|
||||
if: env.changed == 'true'
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.PAT_AUTOMERGE }}
|
||||
run: |
|
||||
PR_NUMBER=$(gh pr list --head "${{ env.BRANCH_NAME }}" --json number --jq '.[].number')
|
||||
if [ -n "$PR_NUMBER" ]; then
|
||||
gh pr review $PR_NUMBER --approve
|
||||
gh pr merge $PR_NUMBER --squash --admin
|
||||
fi
|
||||
|
||||
- name: No changes detected
|
||||
if: env.changed == 'false'
|
||||
|
||||
1
.github/workflows/validate-filenames.yml
vendored
1
.github/workflows/validate-filenames.yml
vendored
@@ -9,6 +9,7 @@ on:
|
||||
|
||||
jobs:
|
||||
check-files:
|
||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||
name: Check changed files
|
||||
runs-on: runner-cluster-htl-set
|
||||
permissions:
|
||||
|
||||
73
CHANGELOG.md
73
CHANGELOG.md
@@ -14,6 +14,79 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment.
|
||||
|
||||
|
||||
## 2025-05-13
|
||||
|
||||
## 2025-05-12
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Alpine-Traefik [@MickLesk](https://github.com/MickLesk) ([#4412](https://github.com/community-scripts/ProxmoxVE/pull/4412))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- Alpine: Use onliner for updates [@tremor021](https://github.com/tremor021) ([#4414](https://github.com/community-scripts/ProxmoxVE/pull/4414))
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- homarr: fetch versions dynamically from source repo [@CrazyWolf13](https://github.com/CrazyWolf13) ([#4409](https://github.com/community-scripts/ProxmoxVE/pull/4409))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Feature: LXC-Delete (pve helper): add "all items" [@MickLesk](https://github.com/MickLesk) ([#4296](https://github.com/community-scripts/ProxmoxVE/pull/4296))
|
||||
|
||||
### 🧰 Maintenance
|
||||
|
||||
- #### 💾 Core
|
||||
|
||||
- Config file Function in build.func [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4411](https://github.com/community-scripts/ProxmoxVE/pull/4411))
|
||||
|
||||
### 🌐 Website
|
||||
|
||||
- #### 📝 Script Information
|
||||
|
||||
- Navidrome - Fix config path (use /etc/ instead of /var/lib) [@quake1508](https://github.com/quake1508) ([#4406](https://github.com/community-scripts/ProxmoxVE/pull/4406))
|
||||
|
||||
## 2025-05-11
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Zammad: Enable ElasticSearch service [@tremor021](https://github.com/tremor021) ([#4391](https://github.com/community-scripts/ProxmoxVE/pull/4391))
|
||||
|
||||
## 2025-05-10
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- (fix) Documenso: fix build failures [@vhsdream](https://github.com/vhsdream) ([#4382](https://github.com/community-scripts/ProxmoxVE/pull/4382))
|
||||
- Jellyseerr: better handling of node and pnpm [@MickLesk](https://github.com/MickLesk) ([#4365](https://github.com/community-scripts/ProxmoxVE/pull/4365))
|
||||
|
||||
## 2025-05-09
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Authentik: change install to UV & increase resources to 10GB RAM [@MickLesk](https://github.com/MickLesk) ([#4364](https://github.com/community-scripts/ProxmoxVE/pull/4364))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- HomeAssistant-Core: update script for 2025.5+ [@MickLesk](https://github.com/MickLesk) ([#4363](https://github.com/community-scripts/ProxmoxVE/pull/4363))
|
||||
- Feature: autologin for Alpine [@MickLesk](https://github.com/MickLesk) ([#4344](https://github.com/community-scripts/ProxmoxVE/pull/4344))
|
||||
|
||||
### 🧰 Maintenance
|
||||
|
||||
- #### 💾 Core
|
||||
|
||||
- fix: detect all bridge types, not just vmbr prefix [@filippolauria](https://github.com/filippolauria) ([#4351](https://github.com/community-scripts/ProxmoxVE/pull/4351))
|
||||
|
||||
- #### 📂 Github
|
||||
|
||||
- Add a Repo check to all Workflows [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4339](https://github.com/community-scripts/ProxmoxVE/pull/4339))
|
||||
- Auto-Merge Automatic PR [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4343](https://github.com/community-scripts/ProxmoxVE/pull/4343))
|
||||
|
||||
## 2025-05-08
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
@@ -20,21 +20,20 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
msg_info "Updating Alpine Packages"
|
||||
$STD apk update
|
||||
$STD apk upgrade
|
||||
msg_ok "Updated Alpine Packages"
|
||||
header_info
|
||||
msg_info "Updating Alpine Packages"
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated Alpine Packages"
|
||||
|
||||
msg_info "Updating AdGuard Home"
|
||||
$STD /opt/AdGuardHome/AdGuardHome --update
|
||||
msg_ok "Updated AdGuard Home"
|
||||
msg_info "Updating AdGuard Home"
|
||||
$STD /opt/AdGuardHome/AdGuardHome --update
|
||||
msg_ok "Updated AdGuard Home"
|
||||
|
||||
msg_info "Restarting AdGuard Home"
|
||||
$STD rc-service adguardhome restart
|
||||
msg_ok "Restarted AdGuard Home"
|
||||
msg_info "Restarting AdGuard Home"
|
||||
$STD rc-service adguardhome restart
|
||||
msg_ok "Restarted AdGuard Home"
|
||||
|
||||
exit 0
|
||||
exit 0
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
@@ -36,7 +36,7 @@ function update_script() {
|
||||
header_info
|
||||
case $CHOICE in
|
||||
1)
|
||||
apk update && apk upgrade
|
||||
$STD apk -U upgrade
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
@@ -47,4 +47,4 @@ start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
msg_ok "Completed Successfully!\n"
|
||||
|
||||
@@ -20,19 +20,18 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
msg_info "Updating Alpine Packages"
|
||||
apk update
|
||||
apk upgrade
|
||||
msg_ok "Updated Alpine Packages"
|
||||
header_info
|
||||
msg_info "Updating Alpine Packages"
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated Alpine Packages"
|
||||
|
||||
msg_info "Updating Gitea"
|
||||
apk upgrade gitea
|
||||
msg_ok "Updated Gitea"
|
||||
msg_info "Updating Gitea"
|
||||
apk upgrade gitea
|
||||
msg_ok "Updated Gitea"
|
||||
|
||||
msg_info "Restarting Gitea"
|
||||
rc-service gitea restart
|
||||
msg_ok "Restarted Gitea"
|
||||
msg_info "Restarting Gitea"
|
||||
rc-service gitea restart
|
||||
msg_ok "Restarted Gitea"
|
||||
}
|
||||
|
||||
start
|
||||
@@ -42,4 +41,4 @@ 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}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||
|
||||
@@ -39,7 +39,7 @@ function update_script() {
|
||||
header_info
|
||||
case $CHOICE in
|
||||
1)
|
||||
apk update && apk upgrade
|
||||
$STD apk -U upgrade
|
||||
exit
|
||||
;;
|
||||
2)
|
||||
@@ -62,4 +62,4 @@ description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${APP} should be reachable by going to the following URL.
|
||||
${BL}http://${IP}:3000${CL} \n"
|
||||
${BL}http://${IP}:3000${CL} \n"
|
||||
|
||||
@@ -20,20 +20,19 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
msg_info "Updating Alpine Packages"
|
||||
$STD apk update
|
||||
$STD apk upgrade
|
||||
msg_ok "Updated Alpine Packages"
|
||||
msg_info "Updating Alpine Packages"
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated Alpine Packages"
|
||||
|
||||
msg_info "Updating MariaDB"
|
||||
$STD apk upgrade mariadb mariadb-client
|
||||
msg_ok "Updated MariaDB"
|
||||
msg_info "Updating MariaDB"
|
||||
$STD apk upgrade mariadb mariadb-client
|
||||
msg_ok "Updated MariaDB"
|
||||
|
||||
msg_info "Restarting MariaDB"
|
||||
$STD rc-service mariadb restart
|
||||
msg_ok "Restarted MariaDB"
|
||||
msg_info "Restarting MariaDB"
|
||||
$STD rc-service mariadb restart
|
||||
msg_ok "Restarted MariaDB"
|
||||
|
||||
exit 0
|
||||
exit 0
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
@@ -20,24 +20,23 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
msg_info "Updating Alpine Packages"
|
||||
$STD apk update
|
||||
$STD apk upgrade
|
||||
msg_ok "Updated Alpine Packages"
|
||||
msg_info "Updating Alpine Packages"
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated Alpine Packages"
|
||||
|
||||
msg_info "Updating Node.js and npm"
|
||||
$STD apk upgrade nodejs npm
|
||||
msg_ok "Updated Node.js and npm"
|
||||
msg_info "Updating Node.js and npm"
|
||||
$STD apk upgrade nodejs npm
|
||||
msg_ok "Updated Node.js and npm"
|
||||
|
||||
msg_info "Updating Node-RED"
|
||||
$STD npm install -g --unsafe-perm node-red
|
||||
msg_ok "Updated Node-RED"
|
||||
msg_info "Updating Node-RED"
|
||||
$STD npm install -g --unsafe-perm node-red
|
||||
msg_ok "Updated Node-RED"
|
||||
|
||||
msg_info "Restarting Node-RED"
|
||||
$STD rc-service nodered restart
|
||||
msg_ok "Restarted Node-RED"
|
||||
msg_info "Restarting Node-RED"
|
||||
$STD rc-service nodered restart
|
||||
msg_ok "Restarted Node-RED"
|
||||
|
||||
exit 0
|
||||
exit 0
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
@@ -21,8 +21,7 @@ catch_errors
|
||||
|
||||
function update_script() {
|
||||
msg_info "Updating Alpine Packages"
|
||||
$STD apk update
|
||||
$STD apk upgrade
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated Alpine Packages"
|
||||
|
||||
msg_info "Updating PostgreSQL"
|
||||
|
||||
@@ -20,20 +20,19 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
msg_info "Updating Alpine Packages"
|
||||
$STD apk update
|
||||
$STD apk upgrade
|
||||
msg_ok "Updated Alpine Packages"
|
||||
msg_info "Updating Alpine Packages"
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated Alpine Packages"
|
||||
|
||||
msg_info "Updating Prometheus"
|
||||
$STD apk upgrade prometheus
|
||||
msg_ok "Updated Prometheus"
|
||||
msg_info "Updating Prometheus"
|
||||
$STD apk upgrade prometheus
|
||||
msg_ok "Updated Prometheus"
|
||||
|
||||
msg_info "Restarting Prometheus"
|
||||
$STD rc-service prometheus restart
|
||||
msg_ok "Restarted Prometheus"
|
||||
msg_info "Restarting Prometheus"
|
||||
$STD rc-service prometheus restart
|
||||
msg_ok "Restarted Prometheus"
|
||||
|
||||
exit 0
|
||||
exit 0
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
@@ -26,8 +26,7 @@ function update_script() {
|
||||
fi
|
||||
|
||||
msg_info "Updating Alpine Packages"
|
||||
$STD apk update
|
||||
$STD apk upgrade
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated Alpine Packages"
|
||||
|
||||
msg_info "Updating tinyauth"
|
||||
|
||||
41
ct/alpine-traefik.sh
Normal file
41
ct/alpine-traefik.sh
Normal file
@@ -0,0 +1,41 @@
|
||||
#!/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://alpinelinux.org/
|
||||
|
||||
APP="Alpine-Traefik"
|
||||
var_tags="${var_tags:-os;alpine}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-1}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.21}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
msg_info "Updating Alpine Packages"
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated Alpine Packages"
|
||||
|
||||
msg_info "Upgrading traefik from edge"
|
||||
$STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community
|
||||
msg_ok "Upgraded traefik"
|
||||
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} WebUI Access (if configured) - using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/dashboard${CL}"
|
||||
@@ -37,14 +37,15 @@ function update_script() {
|
||||
header_info
|
||||
case $CHOICE in
|
||||
1)
|
||||
apk update && apk upgrade && rc-service vaultwarden restart -q
|
||||
$STD apk -U upgrade
|
||||
rc-service vaultwarden restart -q
|
||||
exit
|
||||
;;
|
||||
2)
|
||||
if NEWTOKEN=$(whiptail --backtitle "Proxmox VE Helper Scripts" --passwordbox "Setup your ADMIN_TOKEN (make it strong)" 10 58 3>&1 1>&2 2>&3); then
|
||||
if [[ -z "$NEWTOKEN" ]]; then exit-script; fi
|
||||
if ! command -v argon2 >/dev/null 2>&1; then apk add argon2 &>/dev/null; fi
|
||||
TOKEN=$(echo -n ${NEWTOKEN} | argon2 "$(openssl rand -base64 32)" -e -id -k 19456 -t 2 -p 1)
|
||||
TOKEN=$(echo -n "${NEWTOKEN}" | argon2 "$(openssl rand -base64 32)" -e -id -k 19456 -t 2 -p 1)
|
||||
if [[ ! -f /var/lib/vaultwarden/config.json ]]; then
|
||||
sed -i "s|export ADMIN_TOKEN=.*|export ADMIN_TOKEN='${TOKEN}'|" /etc/conf.d/vaultwarden
|
||||
else
|
||||
@@ -65,4 +66,4 @@ description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${APP} should be reachable by going to the following URL.
|
||||
${BL}http://${IP}:8000${CL} \n"
|
||||
${BL}http://${IP}:8000${CL} \n"
|
||||
|
||||
@@ -21,8 +21,7 @@ catch_errors
|
||||
|
||||
function update_script() {
|
||||
msg_info "Updating Alpine Packages"
|
||||
$STD apk update
|
||||
$STD apk upgrade
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated Alpine Packages"
|
||||
|
||||
msg_info "update wireguard-tools"
|
||||
|
||||
@@ -36,7 +36,7 @@ function update_script() {
|
||||
header_info
|
||||
case $CHOICE in
|
||||
1)
|
||||
apk update && apk upgrade
|
||||
$STD apk -U upgrade
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
@@ -47,4 +47,4 @@ start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
msg_ok "Completed Successfully!\n"
|
||||
|
||||
@@ -28,7 +28,7 @@ function update_script() {
|
||||
|
||||
header_info
|
||||
if [ "$UPD" == "1" ]; then
|
||||
apk update && apk upgrade
|
||||
$STD apk -U upgrade
|
||||
exit
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ APP="Authentik"
|
||||
var_tags="${var_tags:-identity-provider}"
|
||||
var_disk="${var_disk:-12}"
|
||||
var_cpu="${var_cpu:-6}"
|
||||
var_ram="${var_ram:-8192}"
|
||||
var_ram="${var_ram:-10240}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
@@ -29,6 +29,13 @@ function update_script() {
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/goauthentik/authentik/releases/latest | grep "tarball_url" | awk '{print substr($2, 2, length($2)-3)}')
|
||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||
NODE_VERSION="22"
|
||||
PG_VERSION="16"
|
||||
setup_uv
|
||||
install_postgresql
|
||||
install_node_and_modules
|
||||
install_go
|
||||
|
||||
msg_info "Stopping ${APP}"
|
||||
systemctl stop authentik-server
|
||||
systemctl stop authentik-worker
|
||||
@@ -54,17 +61,14 @@ function update_script() {
|
||||
go build -o /opt/authentik/authentik-server /opt/authentik/cmd/server/
|
||||
msg_ok "Built ${APP} server"
|
||||
|
||||
msg_info "Installing Python Dependencies"
|
||||
msg_info "Building Authentik"
|
||||
cd /opt/authentik
|
||||
$STD poetry install --only=main --no-ansi --no-interaction --no-root
|
||||
$STD poetry export --without-hashes --without-urls -f requirements.txt --output requirements.txt
|
||||
$STD pip install --no-cache-dir -r requirements.txt
|
||||
$STD pip install .
|
||||
msg_ok "Installed Python Dependencies"
|
||||
$STD uv sync --frozen --no-install-project --no-dev
|
||||
uv run python -m lifecycle.migrate
|
||||
ln -s /opt/authentik/.venv/bin/gunicorn /usr/local/bin/gunicorn
|
||||
ln -s /opt/authentik/.venv/bin/celery /usr/local/bin/celery
|
||||
msg_ok "Authentik built"
|
||||
|
||||
msg_info "Updating ${APP} to v${RELEASE} (Patience)"
|
||||
cp -r /opt/authentik/authentik/blueprints /opt/authentik/blueprints
|
||||
$STD bash /opt/authentik/lifecycle/ak migrate
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||
|
||||
|
||||
@@ -20,46 +20,51 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/documenso ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/documenso/documenso/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 ${APP}"
|
||||
systemctl stop documenso
|
||||
msg_ok "${APP} Stopped"
|
||||
|
||||
msg_info "Updating ${APP} to ${RELEASE}"
|
||||
cp /opt/documenso/.env /opt/
|
||||
rm -rf /opt/documenso
|
||||
cd /opt
|
||||
curl -fsSL "https://github.com/documenso/documenso/archive/refs/tags/v${RELEASE}.zip" -o v${RELEASE}.zip
|
||||
unzip -q v${RELEASE}.zip
|
||||
mv documenso-${RELEASE} /opt/documenso
|
||||
cd /opt/documenso
|
||||
mv /opt/.env /opt/documenso/.env
|
||||
$STD npm install
|
||||
$STD npm run build:web
|
||||
$STD npm run prisma:migrate-deploy
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated ${APP}"
|
||||
|
||||
msg_info "Starting ${APP}"
|
||||
systemctl start documenso
|
||||
msg_ok "Started ${APP}"
|
||||
|
||||
msg_info "Cleaning Up"
|
||||
rm -rf /opt/v${RELEASE}.zip
|
||||
msg_ok "Cleaned"
|
||||
msg_ok "Updated Successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||
fi
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/documenso ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/documenso/documenso/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 ${APP}"
|
||||
systemctl stop documenso
|
||||
msg_ok "${APP} Stopped"
|
||||
|
||||
msg_info "Updating ${APP} to ${RELEASE}"
|
||||
cp /opt/documenso/.env /opt/
|
||||
rm -rf /opt/documenso
|
||||
cd /opt
|
||||
curl -fsSL "https://github.com/documenso/documenso/archive/refs/tags/v${RELEASE}.zip" -o v${RELEASE}.zip
|
||||
unzip -q v${RELEASE}.zip
|
||||
mv documenso-${RELEASE} /opt/documenso
|
||||
cd /opt/documenso
|
||||
mv /opt/.env /opt/documenso/.env
|
||||
export TURBO_CACHE=1
|
||||
export NEXT_TELEMETRY_DISABLED=1
|
||||
export CYPRESS_INSTALL_BINARY=0
|
||||
export NODE_OPTIONS="--max-old-space-size=4096"
|
||||
$STD npm ci
|
||||
$STD turbo run build --filter=@documenso/remix
|
||||
$STD npm run prisma:migrate-deploy
|
||||
$STD turbo daemon stop
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated ${APP}"
|
||||
|
||||
msg_info "Starting ${APP}"
|
||||
systemctl start documenso
|
||||
msg_ok "Started ${APP}"
|
||||
|
||||
msg_info "Cleaning Up"
|
||||
rm -rf /opt/v${RELEASE}.zip
|
||||
msg_ok "Cleaned"
|
||||
msg_ok "Updated Successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
6
ct/headers/alpine-traefik
Normal file
6
ct/headers/alpine-traefik
Normal file
@@ -0,0 +1,6 @@
|
||||
___ __ _ ______ _____ __
|
||||
/ | / /___ (_)___ ___ /_ __/________ ____ / __(_) /__
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ / / ___/ __ `/ _ \/ /_/ / //_/
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ / / / / /_/ / __/ __/ / ,<
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/ \__,_/\___/_/ /_/_/|_|
|
||||
/_/
|
||||
15
ct/homarr.sh
15
ct/homarr.sh
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster) | Co-Author: MickLesk (Canbiz) | Co-Author: CrazyWolf13
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: CrazyWolf13
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://homarr.dev/
|
||||
|
||||
@@ -117,11 +117,12 @@ node apps/nextjs/server.js & PID=$!
|
||||
wait $PID
|
||||
EOF
|
||||
chmod +x /opt/run_homarr.sh
|
||||
curl -fsSL "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip")
|
||||
unzip -q v${RELEASE}.zip
|
||||
rm -rf v${RELEASE}.zip
|
||||
$STD command -v jq || $STD apt-get update && $STD apt-get install -y jq
|
||||
NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
|
||||
NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.packageManager | split("@")[1]')"
|
||||
install_node_and_modules
|
||||
rm -rf /opt/homarr
|
||||
mv homarr-${RELEASE} /opt/homarr
|
||||
fetch_and_deploy_gh_release "homarr-labs/homarr"
|
||||
mv /opt/homarr-data-backup/.env /opt/homarr/.env
|
||||
cd /opt/homarr
|
||||
$STD pnpm install
|
||||
@@ -167,4 +168,4 @@ 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}:7575${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7575${CL}"
|
||||
|
||||
@@ -21,8 +21,6 @@ catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
|
||||
# OS Check
|
||||
if ! lsb_release -d | grep -q "Ubuntu 24.10"; then
|
||||
msg_error "Wrong OS detected. This script only supports Ubuntu 24.10."
|
||||
msg_error "Read Guide: https://github.com/community-scripts/ProxmoxVE/discussions/1549"
|
||||
@@ -32,54 +30,88 @@ function update_script() {
|
||||
check_container_resources
|
||||
if [[ ! -d /srv/homeassistant ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
exit 1
|
||||
fi
|
||||
PY=$(ls /srv/homeassistant/lib/)
|
||||
setup_uv
|
||||
IP=$(hostname -I | awk '{print $1}')
|
||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 4 \
|
||||
"1" "Update Core" ON \
|
||||
"2" "Install HACS" OFF \
|
||||
"3" "Install FileBrowser" OFF \
|
||||
3>&1 1>&2 2>&3)
|
||||
|
||||
if [ "$UPD" == "1" ]; then
|
||||
if (whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "SELECT BRANCH" --yesno "Use Beta Branch?" 10 58); then
|
||||
clear
|
||||
header_info
|
||||
echo -e "${GN}Updating to Beta Version${CL}"
|
||||
BR="--pre "
|
||||
BR="--pre"
|
||||
else
|
||||
clear
|
||||
header_info
|
||||
echo -e "${GN}Updating to Stable Version${CL}"
|
||||
BR=""
|
||||
fi
|
||||
|
||||
msg_info "Stopping Home Assistant"
|
||||
systemctl stop homeassistant
|
||||
msg_ok "Stopped Home Assistant"
|
||||
|
||||
if [[ -d /srv/homeassistant/bin ]]; then
|
||||
msg_info "Migrating to .venv-based structure"
|
||||
$STD source /srv/homeassistant/bin/activate
|
||||
PY_VER=$(python3 -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')")
|
||||
$STD deactivate
|
||||
mv /srv/homeassistant "/srv/homeassistant_backup_$PY_VER"
|
||||
mkdir -p /srv/homeassistant
|
||||
cd /srv/homeassistant
|
||||
|
||||
$STD uv python install 3.13
|
||||
UV_PYTHON=$(uv python list | awk '/3\.13\.[0-9]+.*\/root\/.local/ {print $2; exit}')
|
||||
if [[ -z "$UV_PYTHON" ]]; then
|
||||
msg_error "No local Python 3.13 found via uv"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
$STD uv venv .venv --python "$UV_PYTHON"
|
||||
$STD source .venv/bin/activate
|
||||
$STD uv pip install homeassistant mysqlclient psycopg2-binary isal webrtcvad wheel
|
||||
mkdir -p /root/.homeassistant
|
||||
msg_ok "Migration complete"
|
||||
else
|
||||
source /srv/homeassistant/.venv/bin/activate
|
||||
fi
|
||||
|
||||
msg_info "Updating Home Assistant"
|
||||
source /srv/homeassistant/bin/activate
|
||||
$STD pip install ${BR}--upgrade homeassistant
|
||||
$STD uv pip install $BR --upgrade homeassistant
|
||||
msg_ok "Updated Home Assistant"
|
||||
|
||||
msg_info "Starting Home Assistant"
|
||||
if [[ -f /etc/systemd/system/homeassistant.service ]] && grep -q "/srv/homeassistant/bin/python3" /etc/systemd/system/homeassistant.service; then
|
||||
sed -i 's|ExecStart=/srv/homeassistant/bin/python3|ExecStart=/srv/homeassistant/.venv/bin/python3|' /etc/systemd/system/homeassistant.service
|
||||
sed -i 's|PATH=/srv/homeassistant/bin|PATH=/srv/homeassistant/.venv/bin|' /etc/systemd/system/homeassistant.service
|
||||
$STD systemctl daemon-reload
|
||||
fi
|
||||
|
||||
systemctl start homeassistant
|
||||
sleep 2
|
||||
sleep 5
|
||||
msg_ok "Started Home Assistant"
|
||||
msg_ok "Update Successful"
|
||||
echo -e "\n Go to http://${IP}:8123 \n"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8123${CL}"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ "$UPD" == "2" ]; then
|
||||
msg_info "Installing Home Assistant Community Store (HACS)"
|
||||
$STD apt update
|
||||
$STD apt install -y unzip
|
||||
cd .homeassistant
|
||||
cd /root/.homeassistant
|
||||
$STD bash <(curl -fsSL https://get.hacs.xyz)
|
||||
msg_ok "Installed Home Assistant Community Store (HACS)"
|
||||
echo -e "\n Reboot Home Assistant and clear browser cache then Add HACS integration.\n"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ "$UPD" == "3" ]; then
|
||||
set +Eeuo pipefail
|
||||
read -r -p "Would you like to use No Authentication? <y/N> " prompt
|
||||
@@ -131,4 +163,4 @@ 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}:8123${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8123${CL}"
|
||||
|
||||
@@ -38,7 +38,7 @@ function update_script() {
|
||||
msg_info "Updating All Containers"
|
||||
CONTAINER_LIST="${1:-$(docker ps -q)}"
|
||||
for container in ${CONTAINER_LIST}; do
|
||||
CONTAINER_IMAGE="$(docker inspect --format "{{.Config.Image}}" --type container ${container})"
|
||||
CONTAINER_IMAGE="$(docker inspect --format "{{.Config.Image}}" --type container "${container}")"
|
||||
RUNNING_IMAGE="$(docker inspect --format "{{.Image}}" --type container "${container}")"
|
||||
docker pull "${CONTAINER_IMAGE}"
|
||||
LATEST_IMAGE="$(docker inspect --format "{{.Id}}" --type image "${CONTAINER_IMAGE}")"
|
||||
@@ -47,7 +47,7 @@ function update_script() {
|
||||
echo "Updating ${container} image ${CONTAINER_IMAGE}"
|
||||
DOCKER_COMMAND="$(runlike --use-volume-id "${container}")"
|
||||
docker rm --force "${container}"
|
||||
eval ${DOCKER_COMMAND}
|
||||
eval "${DOCKER_COMMAND}"
|
||||
fi
|
||||
done
|
||||
msg_ok "Updated All Containers"
|
||||
@@ -109,4 +109,4 @@ 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}HA: http://${IP}:8123${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}Portainer: http://${IP}:9443${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}Portainer: https://${IP}:9443${CL}"
|
||||
|
||||
@@ -53,10 +53,10 @@ function update_script() {
|
||||
|
||||
if [ -z "$pnpm_current" ]; then
|
||||
msg_error "pnpm not found. Installing version $pnpm_desired..."
|
||||
$STD npm install -g pnpm@"$pnpm_desired"
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm@$pnpm_desired" install_node_and_modules
|
||||
elif ! node -e "const semver = require('semver'); process.exit(semver.satisfies('$pnpm_current', '$pnpm_desired') ? 0 : 1)"; then
|
||||
msg_error "Updating pnpm from version $pnpm_current to $pnpm_desired..."
|
||||
$STD npm install -g pnpm@"$pnpm_desired"
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm@$pnpm_desired" install_node_and_modules
|
||||
else
|
||||
msg_ok "pnpm is already installed and satisfies version $pnpm_desired."
|
||||
fi
|
||||
@@ -103,4 +103,4 @@ 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}:5055${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5055${CL}"
|
||||
|
||||
@@ -20,32 +20,32 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE MODE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 14 60 2 \
|
||||
"1" "Check for Alpine Updates" OFF \
|
||||
"2" "Update NPMplus Docker Container" ON \
|
||||
3>&1 1>&2 2>&3)
|
||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE MODE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 14 60 2 \
|
||||
"1" "Check for Alpine Updates" OFF \
|
||||
"2" "Update NPMplus Docker Container" ON \
|
||||
3>&1 1>&2 2>&3)
|
||||
|
||||
header_info "$APP"
|
||||
header_info "$APP"
|
||||
|
||||
case "$UPD" in
|
||||
"1")
|
||||
msg_info "Updating Alpine OS"
|
||||
apk update && apk upgrade
|
||||
msg_ok "System updated"
|
||||
exit
|
||||
;;
|
||||
"2")
|
||||
msg_info "Updating NPMplus Container"
|
||||
cd /opt
|
||||
msg_info "Pulling latest container image"
|
||||
$STD docker compose pull
|
||||
msg_info "Recreating container"
|
||||
$STD docker compose up -d
|
||||
msg_ok "NPMplus container updated"
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
exit 0
|
||||
case "$UPD" in
|
||||
"1")
|
||||
msg_info "Updating Alpine OS"
|
||||
$STD apk -U upgrade
|
||||
msg_ok "System updated"
|
||||
exit
|
||||
;;
|
||||
"2")
|
||||
msg_info "Updating NPMplus Container"
|
||||
cd /opt
|
||||
msg_info "Pulling latest container image"
|
||||
$STD docker compose pull
|
||||
msg_info "Recreating container"
|
||||
$STD docker compose up -d
|
||||
msg_ok "NPMplus container updated"
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
exit 0
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "To Update Alpine: `apk update && apk upgrade`",
|
||||
"text": "To Update Alpine: `apk -U upgrade`",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"script": "ct/authentik.sh",
|
||||
"resources": {
|
||||
"cpu": 6,
|
||||
"ram": 8192,
|
||||
"ram": 10240,
|
||||
"hdd": 12,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
@@ -33,7 +33,11 @@
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Authentik is very resource-heavy, it is recommended to use at least 8GB RAM anytime!",
|
||||
"text": "Authentik is very resource-heavy, it is recommended to use at least 10GB RAM anytime!",
|
||||
"type": "warning"
|
||||
},
|
||||
{
|
||||
"text": "Some updates don't work due to massive dependency errors, it's recommended to do a backup before updating or a pg_dump and a new LXC.",
|
||||
"type": "warning"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
{
|
||||
"name": "Documenso",
|
||||
"slug": "documenso",
|
||||
"categories": [
|
||||
12
|
||||
],
|
||||
"date_created": "2025-04-28",
|
||||
"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": []
|
||||
}
|
||||
@@ -12,7 +12,7 @@
|
||||
"documentation": null,
|
||||
"website": "https://www.navidrome.org/",
|
||||
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/navidrome.svg",
|
||||
"config_path": "/var/lib/navidrome/navidrome.toml",
|
||||
"config_path": "/etc/navidrome/navidrome.toml",
|
||||
"description": "Navidrome is a music server solution that makes your music collection accessible from anywhere. It provides a modern web-based user interface and compatibility with a range of third-party mobile apps for both iOS and Android devices. With Navidrome, users can access their music collection from anywhere, whether at home or on the go. The software supports a variety of music formats, making it easy for users to play their favorite songs and albums. Navidrome provides a simple and user-friendly interface for managing and organizing music collections, making it a valuable tool for music lovers who want to access their music from anywhere. The software is designed to be easy to set up and use, making it a popular choice for those who want to host their own music server and enjoy their music collection from anywhere.",
|
||||
"install_methods": [
|
||||
{
|
||||
@@ -33,7 +33,7 @@
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "To change Navidrome music folder path, `nano /var/lib/navidrome/navidrome.toml`",
|
||||
"text": "To change Navidrome music folder path, `nano /etc/navidrome/navidrome.toml`",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
{
|
||||
"name": "Suwayomi-Server",
|
||||
"slug": "suwayomi-server",
|
||||
"categories": [
|
||||
13
|
||||
],
|
||||
"date_created": "2025-02-07",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 4567,
|
||||
"documentation": "https://github.com/Suwayomi/Suwayomi-Server/wiki",
|
||||
"website": "https://github.com/Suwayomi/Suwayomi-Server",
|
||||
"logo": "https://github.com/Suwayomi/Suwayomi-Server/raw/master/server/src/main/resources/icon/faviconlogo.png",
|
||||
"config_path": "",
|
||||
"description": "A free and open source manga reader server that runs extensions built for Mihon (Tachiyomi).",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/suwayomiserver.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 1024,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "This application is conflicting with Kaspersky products. You need to disable Kaspersky in order to use this application.",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -25,6 +25,17 @@
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "alpine",
|
||||
"script": "ct/alpine-traefik.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 512,
|
||||
"hdd": 1,
|
||||
"os": "alpine",
|
||||
"version": "3.21"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
|
||||
@@ -1,8 +1,198 @@
|
||||
[
|
||||
{
|
||||
"name": "go-gitea/gitea",
|
||||
"version": "v1.23.8",
|
||||
"date": "2025-05-12T22:40:50Z"
|
||||
},
|
||||
{
|
||||
"name": "ollama/ollama",
|
||||
"version": "v0.7.0-rc0",
|
||||
"date": "2025-05-12T22:23:31Z"
|
||||
},
|
||||
{
|
||||
"name": "MediaBrowser/Emby.Releases",
|
||||
"version": "4.8.11.0",
|
||||
"date": "2025-03-10T06:39:11Z"
|
||||
},
|
||||
{
|
||||
"name": "leiweibau/Pi.Alert",
|
||||
"version": "v2025-05-11",
|
||||
"date": "2025-05-12T19:14:57Z"
|
||||
},
|
||||
{
|
||||
"name": "duplicati/duplicati",
|
||||
"version": "v2.1.0.118-2.1.0.118_canary_2025-05-12",
|
||||
"date": "2025-05-12T18:50:44Z"
|
||||
},
|
||||
{
|
||||
"name": "coder/code-server",
|
||||
"version": "v4.100.0",
|
||||
"date": "2025-05-12T18:23:47Z"
|
||||
},
|
||||
{
|
||||
"name": "runtipi/runtipi",
|
||||
"version": "v4.1.0",
|
||||
"date": "2025-05-12T07:13:15Z"
|
||||
},
|
||||
{
|
||||
"name": "neo4j/neo4j",
|
||||
"version": "4.4.43",
|
||||
"date": "2025-05-12T15:33:17Z"
|
||||
},
|
||||
{
|
||||
"name": "usememos/memos",
|
||||
"version": "v0.24.3",
|
||||
"date": "2025-05-12T15:23:21Z"
|
||||
},
|
||||
{
|
||||
"name": "NodeBB/NodeBB",
|
||||
"version": "v2.8.18",
|
||||
"date": "2025-05-12T15:08:09Z"
|
||||
},
|
||||
{
|
||||
"name": "n8n-io/n8n",
|
||||
"version": "n8n@1.91.3",
|
||||
"date": "2025-05-08T12:25:10Z"
|
||||
},
|
||||
{
|
||||
"name": "Paymenter/Paymenter",
|
||||
"version": "v1.1.0",
|
||||
"date": "2025-05-12T14:40:27Z"
|
||||
},
|
||||
{
|
||||
"name": "VictoriaMetrics/VictoriaMetrics",
|
||||
"version": "pmm-6401-v1.117.0",
|
||||
"date": "2025-05-12T13:24:20Z"
|
||||
},
|
||||
{
|
||||
"name": "apache/tika",
|
||||
"version": "3.2.0-rc1",
|
||||
"date": "2025-05-12T13:06:47Z"
|
||||
},
|
||||
{
|
||||
"name": "mattermost/mattermost",
|
||||
"version": "server/public/v0.1.12",
|
||||
"date": "2025-05-08T11:04:17Z"
|
||||
"version": "v10.7.2",
|
||||
"date": "2025-05-12T10:42:32Z"
|
||||
},
|
||||
{
|
||||
"name": "nzbgetcom/nzbget",
|
||||
"version": "v25.0",
|
||||
"date": "2025-05-12T09:12:04Z"
|
||||
},
|
||||
{
|
||||
"name": "dgtlmoon/changedetection.io",
|
||||
"version": "0.49.17",
|
||||
"date": "2025-05-12T08:48:30Z"
|
||||
},
|
||||
{
|
||||
"name": "stackblitz-labs/bolt.diy",
|
||||
"version": "1.0.0",
|
||||
"date": "2025-05-12T07:39:23Z"
|
||||
},
|
||||
{
|
||||
"name": "firefly-iii/firefly-iii",
|
||||
"version": "v6.2.12",
|
||||
"date": "2025-04-20T19:22:17Z"
|
||||
},
|
||||
{
|
||||
"name": "umami-software/umami",
|
||||
"version": "v2.18.1",
|
||||
"date": "2025-05-12T07:16:12Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.22.1891",
|
||||
"date": "2025-05-12T05:53:07Z"
|
||||
},
|
||||
{
|
||||
"name": "esphome/esphome",
|
||||
"version": "2025.4.2",
|
||||
"date": "2025-05-11T22:18:43Z"
|
||||
},
|
||||
{
|
||||
"name": "morpheus65535/bazarr",
|
||||
"version": "v1.5.2",
|
||||
"date": "2025-05-11T16:40:55Z"
|
||||
},
|
||||
{
|
||||
"name": "outline/outline",
|
||||
"version": "v0.84.0",
|
||||
"date": "2025-05-11T15:50:48Z"
|
||||
},
|
||||
{
|
||||
"name": "Kozea/Radicale",
|
||||
"version": "v3.5.3",
|
||||
"date": "2025-05-11T15:17:13Z"
|
||||
},
|
||||
{
|
||||
"name": "Prowlarr/Prowlarr",
|
||||
"version": "v1.35.1.5034",
|
||||
"date": "2025-04-30T11:02:36Z"
|
||||
},
|
||||
{
|
||||
"name": "cross-seed/cross-seed",
|
||||
"version": "v6.12.4",
|
||||
"date": "2025-05-11T11:41:32Z"
|
||||
},
|
||||
{
|
||||
"name": "authelia/authelia",
|
||||
"version": "v4.39.3",
|
||||
"date": "2025-05-11T11:12:15Z"
|
||||
},
|
||||
{
|
||||
"name": "theonedev/onedev",
|
||||
"version": "v11.9.5",
|
||||
"date": "2025-05-11T10:50:37Z"
|
||||
},
|
||||
{
|
||||
"name": "Radarr/Radarr",
|
||||
"version": "v5.22.4.9896",
|
||||
"date": "2025-04-23T18:51:12Z"
|
||||
},
|
||||
{
|
||||
"name": "pocketbase/pocketbase",
|
||||
"version": "v0.28.0",
|
||||
"date": "2025-05-11T06:25:22Z"
|
||||
},
|
||||
{
|
||||
"name": "owncast/owncast",
|
||||
"version": "v0.2.3",
|
||||
"date": "2025-05-10T21:14:45Z"
|
||||
},
|
||||
{
|
||||
"name": "open-webui/open-webui",
|
||||
"version": "v0.6.9",
|
||||
"date": "2025-05-10T19:05:02Z"
|
||||
},
|
||||
{
|
||||
"name": "Stirling-Tools/Stirling-PDF",
|
||||
"version": "v0.46.1",
|
||||
"date": "2025-05-10T15:39:10Z"
|
||||
},
|
||||
{
|
||||
"name": "juanfont/headscale",
|
||||
"version": "v0.25.1",
|
||||
"date": "2025-02-25T17:30:48Z"
|
||||
},
|
||||
{
|
||||
"name": "pelican-dev/wings",
|
||||
"version": "v1.0.0-beta13",
|
||||
"date": "2025-05-09T23:14:41Z"
|
||||
},
|
||||
{
|
||||
"name": "pelican-dev/panel",
|
||||
"version": "v1.0.0-beta21",
|
||||
"date": "2025-05-09T23:14:23Z"
|
||||
},
|
||||
{
|
||||
"name": "homarr-labs/homarr",
|
||||
"version": "v1.19.1",
|
||||
"date": "2025-05-09T19:15:10Z"
|
||||
},
|
||||
{
|
||||
"name": "home-assistant/core",
|
||||
"version": "2025.5.1",
|
||||
"date": "2025-05-09T15:05:54Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
@@ -10,55 +200,55 @@
|
||||
"date": "2025-05-08T09:10:10Z"
|
||||
},
|
||||
{
|
||||
"name": "zwave-js/zwave-js-ui",
|
||||
"version": "v10.4.2",
|
||||
"date": "2025-05-08T08:11:27Z"
|
||||
"name": "crowdsecurity/crowdsec",
|
||||
"version": "v1.6.8",
|
||||
"date": "2025-03-25T13:33:10Z"
|
||||
},
|
||||
{
|
||||
"name": "zitadel/zitadel",
|
||||
"version": "v2.71.10",
|
||||
"date": "2025-05-08T08:01:47Z"
|
||||
"version": "v3.0.4",
|
||||
"date": "2025-05-09T11:38:33Z"
|
||||
},
|
||||
{
|
||||
"name": "umami-software/umami",
|
||||
"version": "v2.18.0",
|
||||
"date": "2025-05-08T07:14:55Z"
|
||||
"name": "pocket-id/pocket-id",
|
||||
"version": "v0.53.0",
|
||||
"date": "2025-05-08T19:56:55Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.22.1877",
|
||||
"date": "2025-05-08T05:57:36Z"
|
||||
"name": "ellite/Wallos",
|
||||
"version": "v3.1.0",
|
||||
"date": "2025-05-08T15:33:17Z"
|
||||
},
|
||||
{
|
||||
"name": "cross-seed/cross-seed",
|
||||
"version": "v6.12.3",
|
||||
"date": "2025-05-07T20:35:11Z"
|
||||
"name": "BookStackApp/BookStack",
|
||||
"version": "v25.02.4",
|
||||
"date": "2025-05-08T15:03:17Z"
|
||||
},
|
||||
{
|
||||
"name": "wazuh/wazuh",
|
||||
"version": "v4.12.0",
|
||||
"date": "2025-05-08T13:27:46Z"
|
||||
},
|
||||
{
|
||||
"name": "apache/tomcat",
|
||||
"version": "10.1.41",
|
||||
"date": "2025-05-08T12:45:44Z"
|
||||
},
|
||||
{
|
||||
"name": "zwave-js/zwave-js-ui",
|
||||
"version": "v10.4.2",
|
||||
"date": "2025-05-08T08:11:27Z"
|
||||
},
|
||||
{
|
||||
"name": "semaphoreui/semaphore",
|
||||
"version": "v2.14.10",
|
||||
"date": "2025-05-07T20:23:29Z"
|
||||
},
|
||||
{
|
||||
"name": "runtipi/runtipi",
|
||||
"version": "v4.0.2",
|
||||
"date": "2025-05-01T16:10:58Z"
|
||||
},
|
||||
{
|
||||
"name": "readeck/readeck",
|
||||
"version": "0.18.2",
|
||||
"date": "2025-05-07T19:22:22Z"
|
||||
},
|
||||
{
|
||||
"name": "apache/tomcat",
|
||||
"version": "9.0.105",
|
||||
"date": "2025-05-07T18:52:24Z"
|
||||
},
|
||||
{
|
||||
"name": "home-assistant/core",
|
||||
"version": "2025.5.0",
|
||||
"date": "2025-05-07T17:26:14Z"
|
||||
},
|
||||
{
|
||||
"name": "HabitRPG/habitica",
|
||||
"version": "v5.36.3",
|
||||
@@ -69,11 +259,6 @@
|
||||
"version": "v0.34.1",
|
||||
"date": "2025-03-25T18:11:12Z"
|
||||
},
|
||||
{
|
||||
"name": "NodeBB/NodeBB",
|
||||
"version": "v4.3.1",
|
||||
"date": "2025-05-07T15:38:20Z"
|
||||
},
|
||||
{
|
||||
"name": "donaldzou/WGDashboard",
|
||||
"version": "v4.2.3",
|
||||
@@ -99,11 +284,6 @@
|
||||
"version": "10.0.18",
|
||||
"date": "2025-02-12T11:07:02Z"
|
||||
},
|
||||
{
|
||||
"name": "nzbgetcom/nzbget",
|
||||
"version": "v24.8",
|
||||
"date": "2025-03-18T07:33:51Z"
|
||||
},
|
||||
{
|
||||
"name": "ZoeyVid/NPMplus",
|
||||
"version": "2025-05-07-r1",
|
||||
@@ -144,21 +324,11 @@
|
||||
"version": "@jupyter-notebook/ui-components@7.5.0-alpha.0",
|
||||
"date": "2025-05-07T09:12:08Z"
|
||||
},
|
||||
{
|
||||
"name": "open-webui/open-webui",
|
||||
"version": "v0.6.7",
|
||||
"date": "2025-05-06T23:08:38Z"
|
||||
},
|
||||
{
|
||||
"name": "influxdata/influxdb",
|
||||
"version": "v1.12.1rc0",
|
||||
"date": "2025-05-06T20:56:30Z"
|
||||
},
|
||||
{
|
||||
"name": "pocket-id/pocket-id",
|
||||
"version": "v0.52.0",
|
||||
"date": "2025-05-06T20:14:44Z"
|
||||
},
|
||||
{
|
||||
"name": "redis/redis",
|
||||
"version": "8.0.1-int",
|
||||
@@ -174,11 +344,6 @@
|
||||
"version": "v0.19.0",
|
||||
"date": "2025-05-06T18:05:42Z"
|
||||
},
|
||||
{
|
||||
"name": "wazuh/wazuh",
|
||||
"version": "coverity-w19-4.13.0",
|
||||
"date": "2025-05-06T15:59:45Z"
|
||||
},
|
||||
{
|
||||
"name": "jenkinsci/jenkins",
|
||||
"version": "jenkins-2.509",
|
||||
@@ -204,11 +369,6 @@
|
||||
"version": "v1.129.0",
|
||||
"date": "2025-05-06T12:28:54Z"
|
||||
},
|
||||
{
|
||||
"name": "n8n-io/n8n",
|
||||
"version": "n8n@1.91.2",
|
||||
"date": "2025-05-05T12:59:51Z"
|
||||
},
|
||||
{
|
||||
"name": "Luligu/matterbridge",
|
||||
"version": "3.0.1",
|
||||
@@ -219,11 +379,6 @@
|
||||
"version": "v1.29.6",
|
||||
"date": "2025-05-06T07:57:02Z"
|
||||
},
|
||||
{
|
||||
"name": "morpheus65535/bazarr",
|
||||
"version": "v1.5.1",
|
||||
"date": "2025-01-01T16:15:52Z"
|
||||
},
|
||||
{
|
||||
"name": "linkwarden/linkwarden",
|
||||
"version": "v2.10.2",
|
||||
@@ -254,11 +409,6 @@
|
||||
"version": "v12.0.0",
|
||||
"date": "2025-05-05T18:28:19Z"
|
||||
},
|
||||
{
|
||||
"name": "BookStackApp/BookStack",
|
||||
"version": "v25.02.3",
|
||||
"date": "2025-05-05T17:39:11Z"
|
||||
},
|
||||
{
|
||||
"name": "apache/couchdb",
|
||||
"version": "3.5.0",
|
||||
@@ -269,41 +419,16 @@
|
||||
"version": "v0.18.0",
|
||||
"date": "2025-05-05T15:34:40Z"
|
||||
},
|
||||
{
|
||||
"name": "apache/tika",
|
||||
"version": "2.9.4",
|
||||
"date": "2025-05-05T15:17:27Z"
|
||||
},
|
||||
{
|
||||
"name": "neo4j/neo4j",
|
||||
"version": "5.26.6",
|
||||
"date": "2025-05-05T13:59:36Z"
|
||||
},
|
||||
{
|
||||
"name": "traefik/traefik",
|
||||
"version": "v3.4.0",
|
||||
"date": "2025-05-05T13:59:23Z"
|
||||
},
|
||||
{
|
||||
"name": "theonedev/onedev",
|
||||
"version": "v11.9.3",
|
||||
"date": "2025-05-05T10:22:11Z"
|
||||
},
|
||||
{
|
||||
"name": "evcc-io/evcc",
|
||||
"version": "0.203.5",
|
||||
"date": "2025-05-05T06:41:02Z"
|
||||
},
|
||||
{
|
||||
"name": "MediaBrowser/Emby.Releases",
|
||||
"version": "4.8.11.0",
|
||||
"date": "2025-03-10T06:39:11Z"
|
||||
},
|
||||
{
|
||||
"name": "firefly-iii/firefly-iii",
|
||||
"version": "v6.2.12",
|
||||
"date": "2025-04-20T19:22:17Z"
|
||||
},
|
||||
{
|
||||
"name": "moghtech/komodo",
|
||||
"version": "v1.17.5",
|
||||
@@ -314,11 +439,6 @@
|
||||
"version": "debian/12.0.16",
|
||||
"date": "2025-05-04T22:06:15Z"
|
||||
},
|
||||
{
|
||||
"name": "juanfont/headscale",
|
||||
"version": "v0.25.1",
|
||||
"date": "2025-02-25T17:30:48Z"
|
||||
},
|
||||
{
|
||||
"name": "Lidarr/Lidarr",
|
||||
"version": "v2.11.2.4629",
|
||||
@@ -329,26 +449,11 @@
|
||||
"version": "v2.0.0.4645",
|
||||
"date": "2017-03-07T18:56:06Z"
|
||||
},
|
||||
{
|
||||
"name": "Prowlarr/Prowlarr",
|
||||
"version": "v1.35.1.5034",
|
||||
"date": "2025-04-30T11:02:36Z"
|
||||
},
|
||||
{
|
||||
"name": "Radarr/Radarr",
|
||||
"version": "v5.22.4.9896",
|
||||
"date": "2025-04-23T18:51:12Z"
|
||||
},
|
||||
{
|
||||
"name": "bastienwirtz/homer",
|
||||
"version": "v25.05.1",
|
||||
"date": "2025-05-04T12:17:00Z"
|
||||
},
|
||||
{
|
||||
"name": "ollama/ollama",
|
||||
"version": "v0.6.8",
|
||||
"date": "2025-05-03T22:56:44Z"
|
||||
},
|
||||
{
|
||||
"name": "FreshRSS/FreshRSS",
|
||||
"version": "1.26.2",
|
||||
@@ -359,26 +464,11 @@
|
||||
"version": "v25.5.0",
|
||||
"date": "2025-05-03T19:03:17Z"
|
||||
},
|
||||
{
|
||||
"name": "owncast/owncast",
|
||||
"version": "v0.2.2",
|
||||
"date": "2025-05-03T18:45:34Z"
|
||||
},
|
||||
{
|
||||
"name": "rogerfar/rdt-client",
|
||||
"version": "v2.0.111",
|
||||
"date": "2025-05-03T16:25:30Z"
|
||||
},
|
||||
{
|
||||
"name": "dgtlmoon/changedetection.io",
|
||||
"version": "0.49.16",
|
||||
"date": "2025-05-03T14:44:01Z"
|
||||
},
|
||||
{
|
||||
"name": "ellite/Wallos",
|
||||
"version": "v3.0.2",
|
||||
"date": "2025-05-03T13:38:57Z"
|
||||
},
|
||||
{
|
||||
"name": "blakeblackshear/frigate",
|
||||
"version": "v0.14.1",
|
||||
@@ -394,16 +484,6 @@
|
||||
"version": "v1.10.3",
|
||||
"date": "2025-05-02T23:23:25Z"
|
||||
},
|
||||
{
|
||||
"name": "homarr-labs/homarr",
|
||||
"version": "v1.19.0",
|
||||
"date": "2025-05-02T19:15:25Z"
|
||||
},
|
||||
{
|
||||
"name": "coder/code-server",
|
||||
"version": "v4.99.4",
|
||||
"date": "2025-05-02T18:33:09Z"
|
||||
},
|
||||
{
|
||||
"name": "prometheus/prometheus",
|
||||
"version": "v0.304.0-rc.0",
|
||||
@@ -434,11 +514,6 @@
|
||||
"version": "e5.9.0",
|
||||
"date": "2025-05-02T11:07:10Z"
|
||||
},
|
||||
{
|
||||
"name": "stackblitz-labs/bolt.diy",
|
||||
"version": "v1.0.0-draft",
|
||||
"date": "2025-05-01T18:33:44Z"
|
||||
},
|
||||
{
|
||||
"name": "Koenkk/zigbee2mqtt",
|
||||
"version": "2.3.0",
|
||||
@@ -474,16 +549,6 @@
|
||||
"version": "version/2025.4.0",
|
||||
"date": "2025-04-30T12:34:14Z"
|
||||
},
|
||||
{
|
||||
"name": "Stirling-Tools/Stirling-PDF",
|
||||
"version": "v0.46.0",
|
||||
"date": "2025-04-30T07:05:42Z"
|
||||
},
|
||||
{
|
||||
"name": "go-gitea/gitea",
|
||||
"version": "v1.25.0-dev",
|
||||
"date": "2025-04-28T22:57:56Z"
|
||||
},
|
||||
{
|
||||
"name": "hivemq/hivemq-community-edition",
|
||||
"version": "2025.3",
|
||||
@@ -499,11 +564,6 @@
|
||||
"version": "v1.4.7",
|
||||
"date": "2025-04-29T15:00:18Z"
|
||||
},
|
||||
{
|
||||
"name": "esphome/esphome",
|
||||
"version": "2025.4.1",
|
||||
"date": "2025-04-29T02:20:36Z"
|
||||
},
|
||||
{
|
||||
"name": "henrygd/beszel",
|
||||
"version": "v0.11.1",
|
||||
@@ -524,16 +584,6 @@
|
||||
"version": "v1.132.3",
|
||||
"date": "2025-04-28T14:11:06Z"
|
||||
},
|
||||
{
|
||||
"name": "pocketbase/pocketbase",
|
||||
"version": "v0.27.2",
|
||||
"date": "2025-04-28T12:03:30Z"
|
||||
},
|
||||
{
|
||||
"name": "VictoriaMetrics/VictoriaMetrics",
|
||||
"version": "pmm-6401-v1.116.0",
|
||||
"date": "2025-04-28T11:30:10Z"
|
||||
},
|
||||
{
|
||||
"name": "FlowiseAI/Flowise",
|
||||
"version": "flowise@2.2.8",
|
||||
@@ -569,11 +619,6 @@
|
||||
"version": "1.5.34",
|
||||
"date": "2025-03-27T16:17:38Z"
|
||||
},
|
||||
{
|
||||
"name": "leiweibau/Pi.Alert",
|
||||
"version": "v2025-04-26",
|
||||
"date": "2025-04-26T14:16:12Z"
|
||||
},
|
||||
{
|
||||
"name": "openhab/openhab-core",
|
||||
"version": "4.3.5",
|
||||
@@ -589,11 +634,6 @@
|
||||
"version": "v13.6.0",
|
||||
"date": "2025-04-26T10:21:12Z"
|
||||
},
|
||||
{
|
||||
"name": "duplicati/duplicati",
|
||||
"version": "v2.1.0.117-2.1.0.117_canary_2025-04-25",
|
||||
"date": "2025-04-25T17:22:12Z"
|
||||
},
|
||||
{
|
||||
"name": "mongodb/mongo",
|
||||
"version": "r7.0.19",
|
||||
@@ -614,11 +654,6 @@
|
||||
"version": "0.17.11",
|
||||
"date": "2025-04-24T05:25:55Z"
|
||||
},
|
||||
{
|
||||
"name": "Kozea/Radicale",
|
||||
"version": "v3.5.2",
|
||||
"date": "2025-04-23T18:41:46Z"
|
||||
},
|
||||
{
|
||||
"name": "minio/minio",
|
||||
"version": "RELEASE.2025-04-22T22-12-26Z",
|
||||
@@ -669,11 +704,6 @@
|
||||
"version": "v2.10.0",
|
||||
"date": "2025-04-18T20:46:28Z"
|
||||
},
|
||||
{
|
||||
"name": "Paymenter/Paymenter",
|
||||
"version": "v1.0.4",
|
||||
"date": "2025-04-18T16:08:02Z"
|
||||
},
|
||||
{
|
||||
"name": "tailscale/tailscale",
|
||||
"version": "v1.82.5",
|
||||
@@ -734,26 +764,11 @@
|
||||
"version": "4.5.1",
|
||||
"date": "2025-04-11T09:57:47Z"
|
||||
},
|
||||
{
|
||||
"name": "outline/outline",
|
||||
"version": "v0.83.0",
|
||||
"date": "2025-04-11T03:53:10Z"
|
||||
},
|
||||
{
|
||||
"name": "apache/cassandra",
|
||||
"version": "cassandra-5.0.4",
|
||||
"date": "2025-04-10T16:32:00Z"
|
||||
},
|
||||
{
|
||||
"name": "pelican-dev/panel",
|
||||
"version": "v1.0.0-beta19",
|
||||
"date": "2025-04-07T23:06:29Z"
|
||||
},
|
||||
{
|
||||
"name": "pelican-dev/wings",
|
||||
"version": "v1.0.0-beta11",
|
||||
"date": "2025-04-07T23:02:00Z"
|
||||
},
|
||||
{
|
||||
"name": "Threadfin/Threadfin",
|
||||
"version": "1.2.32",
|
||||
@@ -869,11 +884,6 @@
|
||||
"version": "v0.0.7",
|
||||
"date": "2025-03-25T15:11:18Z"
|
||||
},
|
||||
{
|
||||
"name": "crowdsecurity/crowdsec",
|
||||
"version": "v1.6.8",
|
||||
"date": "2025-03-25T13:33:10Z"
|
||||
},
|
||||
{
|
||||
"name": "nextcloud/nextcloudpi",
|
||||
"version": "v1.55.4",
|
||||
@@ -889,11 +899,6 @@
|
||||
"version": "v4.3.1",
|
||||
"date": "2025-03-23T09:02:54Z"
|
||||
},
|
||||
{
|
||||
"name": "usememos/memos",
|
||||
"version": "v0.24.2",
|
||||
"date": "2025-03-23T04:01:50Z"
|
||||
},
|
||||
{
|
||||
"name": "clusterzx/paperless-ai",
|
||||
"version": "v2.7.6",
|
||||
@@ -909,11 +914,6 @@
|
||||
"version": "v0.22.1",
|
||||
"date": "2025-03-18T21:01:22Z"
|
||||
},
|
||||
{
|
||||
"name": "authelia/authelia",
|
||||
"version": "v4.39.1",
|
||||
"date": "2025-03-18T03:57:41Z"
|
||||
},
|
||||
{
|
||||
"name": "Sonarr/Sonarr",
|
||||
"version": "v4.0.14.2939",
|
||||
|
||||
56
install/alpine-traefik-install.sh
Normal file
56
install/alpine-traefik-install.sh
Normal file
@@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apk add ca-certificates
|
||||
$STD update-ca-certificates
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Traefik"
|
||||
$STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community
|
||||
msg_ok "Installed Traefik"
|
||||
|
||||
read -p "Enable Traefik WebUI (Port 8080)? [y/N]: " enable_webui
|
||||
if [[ "$enable_webui" =~ ^[Yy]$ ]]; then
|
||||
msg_info "Configuring Traefik WebUI"
|
||||
mkdir -p /etc/traefik/config
|
||||
cat <<EOF >/etc/traefik/traefik.yml
|
||||
entryPoints:
|
||||
web:
|
||||
address: ":80"
|
||||
traefik:
|
||||
address: ":8080"
|
||||
|
||||
api:
|
||||
dashboard: true
|
||||
insecure: true
|
||||
|
||||
log:
|
||||
level: INFO
|
||||
|
||||
providers:
|
||||
file:
|
||||
directory: /etc/traefik/config
|
||||
watch: true
|
||||
EOF
|
||||
msg_ok "Configured Traefik WebUI"
|
||||
fi
|
||||
|
||||
msg_info "Enabling and starting Traefik service"
|
||||
$STD rc-update add traefik default
|
||||
$STD rc-service traefik start
|
||||
msg_ok "Traefik service started"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
@@ -15,7 +15,6 @@ update_os
|
||||
|
||||
msg_info "Installing Dependencies (Patience)"
|
||||
$STD apt-get install -y \
|
||||
gpg \
|
||||
pkg-config \
|
||||
libffi-dev \
|
||||
build-essential \
|
||||
@@ -33,9 +32,15 @@ $STD apt-get install -y \
|
||||
libxmlsec1-openssl \
|
||||
libmaxminddb0 \
|
||||
python3-pip \
|
||||
redis-server \
|
||||
git
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
setup_uv
|
||||
PG_VERSION="16" install_postgresql
|
||||
NODE_VERSION="22" install_node_and_modules
|
||||
install_go
|
||||
|
||||
msg_info "Installing yq"
|
||||
cd /tmp
|
||||
YQ_LATEST="$(curl -fsSL https://api.github.com/repos/mikefarah/yq/releases/latest | grep -Po '"tag_name": "\K.*?(?=")')"
|
||||
@@ -56,46 +61,8 @@ cat <<EOF >/etc/GeoIP.conf
|
||||
EOF
|
||||
msg_ok "Installed GeoIP"
|
||||
|
||||
msg_info "Setting up Python 3"
|
||||
cd /tmp
|
||||
curl -fsSL "https://www.python.org/ftp/python/3.12.1/Python-3.12.1.tgz" -o "Python.tgz"
|
||||
tar -zxf Python.tgz
|
||||
cd Python-3.12.1
|
||||
$STD ./configure --enable-optimizations
|
||||
$STD make altinstall
|
||||
cd ~
|
||||
$STD update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.12 1
|
||||
msg_ok "Setup Python 3"
|
||||
|
||||
msg_info "Setting up 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 "Set up Node.js Repository"
|
||||
|
||||
msg_info "Installing Node.js"
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y nodejs
|
||||
msg_ok "Installed Node.js"
|
||||
|
||||
msg_info "Installing Golang"
|
||||
set +o pipefail
|
||||
temp_file=$(mktemp)
|
||||
golang_tarball=$(curl -fsSL https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
|
||||
curl -fsSL "https://golang.org/dl/${golang_tarball}" -o "$temp_file"
|
||||
tar -C /usr/local -xzf "$temp_file"
|
||||
ln -sf /usr/local/go/bin/go /usr/local/bin/go
|
||||
rm -f "$temp_file"
|
||||
set -o pipefail
|
||||
msg_ok "Installed Golang"
|
||||
|
||||
msg_info "Installing Redis"
|
||||
$STD apt-get install -y redis-server
|
||||
systemctl enable -q --now redis-server
|
||||
msg_ok "Installed Redis"
|
||||
|
||||
msg_info "Installing PostgreSQL"
|
||||
$STD apt-get install -y postgresql postgresql-contrib
|
||||
$STD apt-get install -y postgresql-16 postgresql-contrib-16
|
||||
DB_NAME="authentik"
|
||||
DB_USER="authentik"
|
||||
DB_PASS="$(openssl rand -base64 18 | cut -c1-13)"
|
||||
@@ -111,25 +78,29 @@ RELEASE=$(curl -fsSL https://api.github.com/repos/goauthentik/authentik/releases
|
||||
mkdir -p /opt/authentik
|
||||
curl -fsSL "${RELEASE}" -o "authentik.tar.gz"
|
||||
tar -xzf authentik.tar.gz -C /opt/authentik --strip-components 1 --overwrite
|
||||
export NODE_OPTIONS="--max-old-space-size=4096"
|
||||
cd /opt/authentik/website
|
||||
$STD npm install
|
||||
$STD npm run build-bundled
|
||||
|
||||
cd /opt/authentik/web
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
|
||||
cd /opt/authentik
|
||||
$STD go mod download
|
||||
$STD go build -o /go/authentik ./cmd/server
|
||||
$STD go build -o /opt/authentik/authentik-server /opt/authentik/cmd/server/
|
||||
cd /opt/authentik
|
||||
$STD pip3 install --upgrade pip
|
||||
$STD pip3 install poetry poetry-plugin-export
|
||||
ln -s /usr/local/bin/poetry /usr/bin/poetry
|
||||
$STD poetry install --only=main --no-ansi --no-interaction --no-root
|
||||
$STD poetry export --without-hashes --without-urls -f requirements.txt --output requirements.txt
|
||||
$STD pip install --no-cache-dir -r requirements.txt
|
||||
$STD pip install .
|
||||
$STD uv sync --frozen --no-install-project --no-dev
|
||||
#$STD pip3 install --no-cache-dir --upgrade pip
|
||||
#$STD pip3 install --upgrade pip
|
||||
#$STD pip3 install poetry poetry-plugin-export
|
||||
|
||||
#ln -s /usr/local/bin/poetry /usr/bin/poetry
|
||||
#$STD poetry install --only=main --no-ansi --no-interaction --no-root
|
||||
#$STD poetry export --without-hashes --without-urls -f requirements.txt --output requirements.txt
|
||||
#$STD pip install --no-cache-dir -r requirements.txt
|
||||
#$STD pip install .
|
||||
mkdir -p /etc/authentik
|
||||
mv /opt/authentik/authentik/lib/default.yml /etc/authentik/config.yml
|
||||
$STD yq -i ".secret_key = \"$(openssl rand -hex 32)\"" /etc/authentik/config.yml
|
||||
@@ -137,23 +108,30 @@ $STD yq -i ".postgresql.password = \"${DB_PASS}\"" /etc/authentik/config.yml
|
||||
$STD yq -i ".geoip = \"/opt/authentik/tests/GeoLite2-City-Test.mmdb\"" /etc/authentik/config.yml
|
||||
cp -r /opt/authentik/authentik/blueprints /opt/authentik/blueprints
|
||||
$STD yq -i ".blueprints_dir = \"/opt/authentik/blueprints\"" /etc/authentik/config.yml
|
||||
ln -s /usr/bin/python3 /usr/bin/python
|
||||
ln -s /usr/local/bin/gunicorn /usr/bin/gunicorn
|
||||
ln -s /usr/local/bin/celery /usr/bin/celery
|
||||
$STD bash /opt/authentik/lifecycle/ak migrate
|
||||
cd ~
|
||||
#ln -s /usr/bin/python3 /usr/bin/python
|
||||
#ln -s /usr/local/bin/gunicorn /usr/bin/gunicorn
|
||||
#ln -s /usr/local/bin/celery /usr/bin/celery
|
||||
#$STD bash /opt/authentik/lifecycle/ak migrate
|
||||
cd /opt/authentik
|
||||
uv run python -m lifecycle.migrate
|
||||
ln -s /opt/authentik/.venv/bin/gunicorn /usr/local/bin/gunicorn
|
||||
ln -s /opt/authentik/.venv/bin/celery /usr/local/bin/celery
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
msg_ok "Installed authentik"
|
||||
|
||||
msg_info "Creating Services"
|
||||
cat <<EOF >/etc/systemd/system/authentik-server.service
|
||||
[Unit]
|
||||
Description = authentik Server
|
||||
Description=authentik Go Server (API Gateway)
|
||||
After=network.target
|
||||
Wants=redis.service postgresql.service
|
||||
|
||||
[Service]
|
||||
ExecStart=/opt/authentik/authentik-server
|
||||
WorkingDirectory=/opt/authentik/
|
||||
ExecStart=/opt/authentik/authentik-server
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
Environment=DJANGO_SETTINGS_MODULE=authentik.root.settings
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -161,21 +139,49 @@ EOF
|
||||
|
||||
cat <<EOF >/etc/systemd/system/authentik-worker.service
|
||||
[Unit]
|
||||
Description = authentik Worker
|
||||
Description=authentik Celery Worker
|
||||
After=network.target redis.service postgresql.service
|
||||
Requires=redis.service
|
||||
|
||||
[Service]
|
||||
Environment=DJANGO_SETTINGS_MODULE="authentik.root.settings"
|
||||
ExecStart=celery -A authentik.root.celery worker -Ofair --max-tasks-per-child=1 --autoscale 3,1 -E -B -s /tmp/celerybeat-schedule -Q authentik,authentik_scheduled,authentik_events
|
||||
WorkingDirectory=/opt/authentik/authentik
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/authentik
|
||||
ExecStart=/opt/authentik/.venv/bin/celery \
|
||||
-A authentik.root.celery worker \
|
||||
-Ofair \
|
||||
--max-tasks-per-child=1 \
|
||||
--autoscale 3,1 \
|
||||
-Q authentik,authentik_scheduled,authentik_events \
|
||||
-E
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
Environment=DJANGO_SETTINGS_MODULE=authentik.root.settings
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now authentik-server
|
||||
sleep 2
|
||||
systemctl enable -q --now authentik-worker
|
||||
|
||||
cat <<EOF >/etc/systemd/system/authentik-celery-beat.service
|
||||
[Unit]
|
||||
Description=authentik Celery Beat Scheduler
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/authentik
|
||||
ExecStart=/opt/authentik/.venv/bin/celery \
|
||||
-A authentik.root.celery beat \
|
||||
-s /tmp/celerybeat-schedule
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
#User=authentik
|
||||
Environment=DJANGO_SETTINGS_MODULE=authentik.root.settings
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
systemctl enable -q --now authentik-server authentik-worker authentik-celery-beat
|
||||
msg_ok "Created Services"
|
||||
|
||||
motd_ssh
|
||||
|
||||
@@ -26,7 +26,7 @@ mkdir -p /var/lib/bazarr/
|
||||
curl -fsSL "https://github.com/morpheus65535/bazarr/releases/latest/download/bazarr.zip" -o $(basename "https://github.com/morpheus65535/bazarr/releases/latest/download/bazarr.zip")
|
||||
unzip -qq bazarr -d /opt/bazarr
|
||||
chmod 775 /opt/bazarr /var/lib/bazarr/
|
||||
python3 -m pip install -q -r /opt/bazarr/requirements.txt
|
||||
$STD python3 -m pip install -q -r /opt/bazarr/requirements.txt
|
||||
msg_ok "Installed Bazarr"
|
||||
|
||||
msg_info "Creating Service"
|
||||
|
||||
@@ -20,14 +20,14 @@ msg_ok "Setup Functions"
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
gpg \
|
||||
libc6 \
|
||||
make \
|
||||
cmake \
|
||||
jq \
|
||||
postgresql \
|
||||
python3 \
|
||||
python3-bcrypt
|
||||
gpg \
|
||||
libc6 \
|
||||
make \
|
||||
cmake \
|
||||
jq \
|
||||
postgresql \
|
||||
python3 \
|
||||
python3-bcrypt
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up Node.js Repository"
|
||||
@@ -52,10 +52,10 @@ $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8'
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
|
||||
{
|
||||
echo "Documenso-Credentials"
|
||||
echo "Database Name: $DB_NAME"
|
||||
echo "Database User: $DB_USER"
|
||||
echo "Database Password: $DB_PASS"
|
||||
echo "Documenso-Credentials"
|
||||
echo "Database Name: $DB_NAME"
|
||||
echo "Database User: $DB_USER"
|
||||
echo "Database Password: $DB_PASS"
|
||||
} >>~/documenso.creds
|
||||
msg_ok "Set up PostgreSQL"
|
||||
|
||||
@@ -68,24 +68,22 @@ mv documenso-${RELEASE} /opt/documenso
|
||||
cd /opt/documenso
|
||||
mv .env.example /opt/documenso/.env
|
||||
sed -i \
|
||||
-e "s|^NEXTAUTH_SECRET=.*|NEXTAUTH_SECRET='$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)'|" \
|
||||
-e "s|^NEXT_PRIVATE_ENCRYPTION_KEY=.*|NEXT_PRIVATE_ENCRYPTION_KEY='$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)'|" \
|
||||
-e "s|^NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY=.*|NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY='$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)'|" \
|
||||
-e "s|^DOCUMENSO_ENCRYPTION_KEY=.*|DOCUMENSO_ENCRYPTION_KEY='$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)'|" \
|
||||
-e "s|^DOCUMENSO_ENCRYPTION_SECONDARY_KEY=.*|DOCUMENSO_ENCRYPTION_SECONDARY_KEY='$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)'|" \
|
||||
-e "s|^NEXTAUTH_URL=.*|NEXTAUTH_URL=\"http://${LOCAL_IP}:3000\"|" \
|
||||
-e "s|^NEXT_PUBLIC_WEBAPP_URL=.*|NEXT_PUBLIC_WEBAPP_URL='http://${LOCAL_IP}:9000'|" \
|
||||
-e "s|^NEXT_PUBLIC_MARKETING_URL=.*|NEXT_PUBLIC_MARKETING_URL=\"http://${LOCAL_IP}:3001\"|" \
|
||||
-e "s|^NEXT_PRIVATE_INTERNAL_WEBAPP_URL=.*|NEXT_PRIVATE_INTERNAL_WEBAPP_URL=\"http://${LOCAL_IP}:3000\"|" \
|
||||
-e "s|^NEXT_PRIVATE_DATABASE_URL=.*|NEXT_PRIVATE_DATABASE_URL=\"postgres://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME\"|" \
|
||||
-e "s|^NEXT_PRIVATE_DIRECT_DATABASE_URL=.*|NEXT_PRIVATE_DIRECT_DATABASE_URL=\"postgres://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME\"|" \
|
||||
/opt/documenso/.env
|
||||
-e "s|^NEXTAUTH_SECRET=.*|NEXTAUTH_SECRET='$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)'|" \
|
||||
-e "s|^NEXT_PRIVATE_ENCRYPTION_KEY=.*|NEXT_PRIVATE_ENCRYPTION_KEY='$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)'|" \
|
||||
-e "s|^NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY=.*|NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY='$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)'|" \
|
||||
-e "s|^DOCUMENSO_ENCRYPTION_KEY=.*|DOCUMENSO_ENCRYPTION_KEY='$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)'|" \
|
||||
-e "s|^DOCUMENSO_ENCRYPTION_SECONDARY_KEY=.*|DOCUMENSO_ENCRYPTION_SECONDARY_KEY='$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)'|" \
|
||||
-e "s|^NEXT_PUBLIC_WEBAPP_URL=.*|NEXT_PUBLIC_WEBAPP_URL='http://${LOCAL_IP}:3000'|" \
|
||||
-e "s|^NEXT_PRIVATE_INTERNAL_WEBAPP_URL=.*|NEXT_PRIVATE_INTERNAL_WEBAPP_URL=\"http://${LOCAL_IP}:3000\"|" \
|
||||
-e "s|^NEXT_PRIVATE_DATABASE_URL=.*|NEXT_PRIVATE_DATABASE_URL=\"postgres://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME\"|" \
|
||||
-e "s|^NEXT_PRIVATE_DIRECT_DATABASE_URL=.*|NEXT_PRIVATE_DIRECT_DATABASE_URL=\"postgres://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME\"|" \
|
||||
/opt/documenso/.env
|
||||
export TURBO_CACHE=1
|
||||
export NEXT_TELEMETRY_DISABLED=1
|
||||
export CYPRESS_INSTALL_BINARY=0
|
||||
export NODE_OPTIONS="--max-old-space-size=4096"
|
||||
$STD npm ci
|
||||
$STD npm run build:web
|
||||
$STD turbo run build --filter=@documenso/remix
|
||||
$STD npm run prisma:migrate-deploy
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
msg_ok "Installed Documenso"
|
||||
@@ -103,8 +101,8 @@ Description=Documenso Service
|
||||
After=network.target postgresql.service
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=/opt/documenso/apps/web
|
||||
ExecStart=/usr/bin/npm start
|
||||
WorkingDirectory=/opt/documenso
|
||||
ExecStart=/usr/bin/turbo run start --filter=@documenso/remix
|
||||
Restart=always
|
||||
EnvironmentFile=/opt/documenso/.env
|
||||
|
||||
@@ -118,6 +116,7 @@ motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD turbo daemon stop
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
@@ -23,27 +23,17 @@ $STD apt-get install -y \
|
||||
build-essential \
|
||||
nginx \
|
||||
gettext \
|
||||
jq \
|
||||
openssl
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up 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 "Set up Node.js Repository"
|
||||
|
||||
msg_info "Installing Node.js/pnpm"
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y nodejs
|
||||
$STD npm install -g pnpm@latest
|
||||
msg_ok "Installed Node.js/pnpm"
|
||||
NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
|
||||
NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.packageManager | split("@")[1]')"
|
||||
install_node_and_modules
|
||||
fetch_and_deploy_gh_release "homarr-labs/homarr"
|
||||
|
||||
msg_info "Installing Homarr (Patience)"
|
||||
cd /opt
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/homarr-labs/homarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
curl -fsSL "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip")
|
||||
unzip -q v${RELEASE}.zip
|
||||
mv homarr-${RELEASE} /opt/homarr
|
||||
mkdir -p /opt/homarr_db
|
||||
touch /opt/homarr_db/db.sqlite
|
||||
SECRET_ENCRYPTION_KEY="$(openssl rand -hex 32)"
|
||||
|
||||
@@ -46,29 +46,33 @@ $STD apt-get install -y \
|
||||
pkg-config
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
setup_uv
|
||||
msg_info "Setup Python3"
|
||||
$STD apt-get update
|
||||
$STD rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
||||
$STD apt-get remove --purge -y python3.12 python3.12-dev python3.12-venv
|
||||
|
||||
$STD apt-get install -y \
|
||||
python3.13 \
|
||||
python3-pip \
|
||||
python3.13-dev \
|
||||
python3.13-venv
|
||||
|
||||
ln -sf /usr/bin/python3.13 /usr/bin/python3
|
||||
msg_ok "Setup Python3"
|
||||
|
||||
msg_info "Preparing Python 3.13 for uv"
|
||||
$STD uv python install 3.13
|
||||
UV_PYTHON=$(uv python list | awk '/3\.13\.[0-9]+.*\/root\/.local/ {print $2; exit}')
|
||||
if [[ -z "$UV_PYTHON" ]]; then
|
||||
msg_error "No local Python 3.13 found via uv"
|
||||
exit 1
|
||||
fi
|
||||
msg_ok "Prepared Python 3.13"
|
||||
|
||||
msg_info "Setting up Home Assistant-Core environment"
|
||||
mkdir /srv/homeassistant
|
||||
rm -rf /srv/homeassistant
|
||||
mkdir -p /srv/homeassistant
|
||||
cd /srv/homeassistant
|
||||
python3 -m venv .
|
||||
source bin/activate
|
||||
$STD uv venv .venv --python "$UV_PYTHON"
|
||||
source .venv/bin/activate
|
||||
msg_ok "Created virtual environment"
|
||||
|
||||
msg_info "Installing Home Assistant-Core"
|
||||
$STD python3 -m pip install webrtcvad wheel homeassistant mysqlclient psycopg2-binary isal
|
||||
$STD uv pip install homeassistant mysqlclient psycopg2-binary isal webrtcvad wheel
|
||||
mkdir -p /root/.homeassistant
|
||||
msg_ok "Installed Home Assistant-Core"
|
||||
|
||||
@@ -77,16 +81,19 @@ cat <<EOF >/etc/systemd/system/homeassistant.service
|
||||
[Unit]
|
||||
Description=Home Assistant
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/root/.homeassistant
|
||||
Environment="PATH=/srv/homeassistant/bin:/usr/local/bin:/usr/bin:/usr/local/bin/uv"
|
||||
ExecStart=/srv/homeassistant/bin/python3 -m homeassistant --config /root/.homeassistant
|
||||
Environment="PATH=/srv/homeassistant/.venv/bin:/usr/local/bin:/usr/bin"
|
||||
ExecStart=/srv/homeassistant/.venv/bin/python3 -m homeassistant --config /root/.homeassistant
|
||||
Restart=always
|
||||
RestartForceExitStatus=100
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
systemctl enable -q --now homeassistant
|
||||
msg_ok "Created Service"
|
||||
|
||||
|
||||
@@ -15,30 +15,18 @@ update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
gnupg \
|
||||
git \
|
||||
build-essential
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up 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 "Set up Node.js Repository"
|
||||
|
||||
msg_info "Installing Node.js"
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y nodejs
|
||||
msg_ok "Installed Node.js"
|
||||
|
||||
git clone -q https://github.com/Fallenbagel/jellyseerr.git /opt/jellyseerr
|
||||
cd /opt/jellyseerr
|
||||
$STD git checkout main
|
||||
|
||||
pnpm_desired=$(grep -Po '"pnpm":\s*"\K[^"]+' /opt/jellyseerr/package.json)
|
||||
msg_info "Installing pnpm version $pnpm_desired..."
|
||||
$STD npm install -g pnpm@$pnpm_desired
|
||||
msg_ok "Installed pnpm"
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm@$pnpm_desired" install_node_and_modules
|
||||
|
||||
msg_info "Installing Jellyseerr (Patience)"
|
||||
export CYPRESS_INSTALL_BINARY=0
|
||||
|
||||
@@ -30,7 +30,8 @@ $STD apt-get -y install elasticsearch
|
||||
echo "-Xms2g" >>/etc/elasticsearch/jvm.options
|
||||
echo "-Xmx2g" >>/etc/elasticsearch/jvm.options
|
||||
$STD /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-attachment -b
|
||||
systemctl -q restart elasticsearch
|
||||
systemctl enable -q elasticsearch
|
||||
systemctl restart -q elasticsearch
|
||||
msg_ok "Setup Elasticsearch"
|
||||
|
||||
msg_info "Installing Zammad"
|
||||
|
||||
@@ -137,8 +137,7 @@ network_check() {
|
||||
# This function updates the Container OS by running apt-get update and upgrade
|
||||
update_os() {
|
||||
msg_info "Updating Container OS"
|
||||
$STD apk update
|
||||
$STD apk upgrade
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated Container OS"
|
||||
|
||||
msg_info "Installing core dependencies"
|
||||
@@ -190,10 +189,29 @@ validate_tz() {
|
||||
customize() {
|
||||
if [[ "$PASSWORD" == "" ]]; then
|
||||
msg_info "Customizing Container"
|
||||
bash -c "passwd -d root" >/dev/null 2>&1
|
||||
passwd -d root >/dev/null 2>&1
|
||||
|
||||
# Ensure agetty is available
|
||||
apk add --no-cache --force-broken-world util-linux >/dev/null 2>&1
|
||||
|
||||
# Create persistent autologin boot script
|
||||
mkdir -p /etc/local.d
|
||||
cat <<'EOF' >/etc/local.d/autologin.start
|
||||
#!/bin/sh
|
||||
sed -i 's|^tty1::respawn:.*|tty1::respawn:/sbin/agetty --autologin root --noclear tty1 38400 linux|' /etc/inittab
|
||||
kill -HUP 1
|
||||
EOF
|
||||
touch /root/.hushlogin
|
||||
|
||||
chmod +x /etc/local.d/autologin.start
|
||||
rc-update add local >/dev/null 2>&1
|
||||
|
||||
# Apply autologin immediately for current session
|
||||
/etc/local.d/autologin.start
|
||||
|
||||
msg_ok "Customized Container"
|
||||
fi
|
||||
|
||||
echo "bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/${app}.sh)\"" >/usr/bin/update
|
||||
echo "bash -c \"\$(curl -fsSL https://github.com/community-scripts/ProxmoxVE/raw/main/ct/${app}.sh)\"" >/usr/bin/update
|
||||
chmod +x /usr/bin/update
|
||||
}
|
||||
|
||||
@@ -779,8 +779,6 @@ EOF
|
||||
|
||||
config_file() {
|
||||
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Default distribution for $APP" "${var_os} ${var_version} \n \nIf the default Linux distribution is not adhered to, script support will be discontinued. \n" 10 58
|
||||
|
||||
CONFIG_FILE="/opt/community-scripts/.settings"
|
||||
|
||||
if [[ -f "/opt/community-scripts/${NSAPP}.conf" ]]; then
|
||||
@@ -797,66 +795,38 @@ config_file() {
|
||||
source "$CONFIG_FILE"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "$var_os" == "debian" ]]; then
|
||||
echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}$var_os${CL}"
|
||||
if [[ "$var_version" == "11" ]]; then
|
||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
||||
elif [[ "$var_version" == "12" ]]; then
|
||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
||||
else
|
||||
msg_error "Unknown setting for var_version, should be 11 or 12, was ${var_version}"
|
||||
exit
|
||||
fi
|
||||
elif [[ "$var_os" == "ubuntu" ]]; then
|
||||
echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}$var_os${CL}"
|
||||
if [[ "$var_version" == "20.04" ]]; then
|
||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
||||
elif [[ "$var_version" == "22.04" ]]; then
|
||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
||||
elif [[ "$var_version" == "24.04" ]]; then
|
||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
||||
elif [[ "$var_version" == "24.10" ]]; then
|
||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
||||
else
|
||||
msg_error "Unknown setting for var_version, should be 20.04, 22.04, 24.04 or 24.10, was ${var_version}"
|
||||
exit
|
||||
fi
|
||||
else
|
||||
msg_error "Unknown setting for var_os! should be debian or ubuntu, was ${var_os}"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [[ -n "$CT_ID" ]]; then
|
||||
|
||||
if [[ "$CT_ID" =~ ^([0-9]{3,4})-([0-9]{3,4})$ ]]; then
|
||||
MIN_ID=${BASH_REMATCH[1]}
|
||||
MAX_ID=${BASH_REMATCH[2]}
|
||||
|
||||
if ((MIN_ID >= MAX_ID)); then
|
||||
msg_error "Invalid Container ID range. The first number must be smaller than the second number, was ${CT_ID}"
|
||||
exit
|
||||
fi
|
||||
|
||||
LIST_OF_IDS=$(pvesh get /cluster/resources --type vm --output-format json | grep -oP '"vmid":\s*\K\d+')
|
||||
|
||||
for ((ID = MIN_ID; ID <= MAX_ID; ID++)); do
|
||||
if ! grep -q "^$ID$" <<<"$LIST_OF_IDS"; then
|
||||
CT_ID=$ID
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
LIST_OF_IDS=$(pvesh get /cluster/resources --type vm --output-format json 2>/dev/null | grep -oP '"vmid":\s*\K\d+') || true
|
||||
if [[ -n "$LIST_OF_IDS" ]]; then
|
||||
for ((ID = MIN_ID; ID <= MAX_ID; ID++)); do
|
||||
if ! grep -q "^$ID$" <<<"$LIST_OF_IDS"; then
|
||||
CT_ID=$ID
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
|
||||
|
||||
elif [[ "$CT_ID" =~ ^[0-9]+$ ]]; then
|
||||
LIST_OF_IDS=$(pvesh get /cluster/resources --type vm --output-format json 2>/dev/null | grep -oP '"vmid":\s*\K\d+') || true
|
||||
if [[ -n "$LIST_OF_IDS" ]]; then
|
||||
|
||||
LIST_OF_IDS=$(pvesh get /cluster/resources --type vm --output-format json | grep -oP '"vmid":\s*\K\d+')
|
||||
if ! grep -q "^$CT_ID$" <<<"$LIST_OF_IDS"; then
|
||||
echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
|
||||
if ! grep -q "^$CT_ID$" <<<"$LIST_OF_IDS"; then
|
||||
echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
|
||||
else
|
||||
msg_error "Container ID $CT_ID already exists"
|
||||
exit
|
||||
fi
|
||||
else
|
||||
msg_error "Container ID $CT_ID already exists"
|
||||
exit
|
||||
echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
|
||||
fi
|
||||
else
|
||||
msg_error "Invalid Container ID format. Needs to be 0000-9999 or 0-9999, was ${CT_ID}"
|
||||
@@ -954,27 +924,26 @@ config_file() {
|
||||
if [ "$NET" == "dhcp" ]; then
|
||||
echo -e "${NETWORK}${BOLD}${DGN}IP Address: ${BGN}DHCP${CL}"
|
||||
echo -e "${GATEWAY}${BOLD}${DGN}Gateway IP Address: ${BGN}Default${CL}"
|
||||
elif
|
||||
[[ "$NET" =~ $ip_cidr_regex ]]
|
||||
then
|
||||
elif [[ "$NET" =~ $ip_cidr_regex ]]; then
|
||||
echo -e "${NETWORK}${BOLD}${DGN}IP Address: ${BGN}$NET${CL}"
|
||||
if [ ! -z "$GATE" ]; then
|
||||
if [[ "$GATE" =~ $ip_regex ]]; then
|
||||
echo -e "${GATEWAY}${BOLD}${DGN}Gateway IP Address: ${BGN}$GATE${CL}"
|
||||
GATE=",gw=$GATE"
|
||||
else
|
||||
msg_error "Invalid IP Address format for Gateway. Needs to be 0.0.0.0, was ${GATE}"
|
||||
exit
|
||||
fi
|
||||
else
|
||||
msg_error "Gateway IP Address cannot be empty"
|
||||
exit
|
||||
fi
|
||||
else
|
||||
msg_error "Invalid IP Address format. Needs to be 0.0.0.0/0, was ${NET}"
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
if [ ! -z "$GATE" ]; then
|
||||
if [[ "$GATE" =~ $ip_regex ]]; then
|
||||
echo -e "${GATEWAY}${BOLD}${DGN}Gateway IP Address: ${BGN}$GATE${CL}"
|
||||
GATE=",gw=$GATE"
|
||||
else
|
||||
msg_error "Invalid IP Address format for Gateway. Needs to be 0.0.0.0, was ${GATE}"
|
||||
exit
|
||||
fi
|
||||
else
|
||||
msg_error "Gateway IP Address cannot be empty"
|
||||
exit
|
||||
fi
|
||||
|
||||
|
||||
if [[ ! -z "$APT_CACHER_IP" ]]; then
|
||||
if [[ "$APT_CACHER_IP" =~ $ip_regex ]]; then
|
||||
|
||||
@@ -479,7 +479,7 @@ install_mongodb() {
|
||||
|
||||
fetch_and_deploy_gh_release() {
|
||||
local repo="$1"
|
||||
local app=$(echo ${APPLICATION,,} | tr -d ' ')
|
||||
local app=${APP:-$(echo "${APPLICATION,,}" | tr -d ' ')}
|
||||
local api_url="https://api.github.com/repos/$repo/releases/latest"
|
||||
local header=()
|
||||
local attempt=0
|
||||
|
||||
@@ -5,28 +5,28 @@
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
function header_info {
|
||||
clear
|
||||
cat <<"EOF"
|
||||
____ __ _ ________ ____ __ __
|
||||
/ __ \_________ _ ______ ___ ____ _ __ / / | |/ / ____/ / __ \___ / /__ / /____
|
||||
clear
|
||||
cat <<"EOF"
|
||||
____ __ _ ________ ____ __ __
|
||||
/ __ \_________ _ ______ ___ ____ _ __ / / | |/ / ____/ / __ \___ / /__ / /____
|
||||
/ /_/ / ___/ __ \| |/_/ __ `__ \/ __ \| |/_/ / / | / / / / / / _ \/ / _ \/ __/ _ \
|
||||
/ ____/ / / /_/ /> </ / / / / / /_/ /> < / /___/ / /___ / /_/ / __/ / __/ /_/ __/
|
||||
/_/ /_/ \____/_/|_/_/ /_/ /_/\____/_/|_| /_____/_/|_\____/ /_____/\___/_/\___/\__/\___/
|
||||
|
||||
/_/ /_/ \____/_/|_/_/ /_/ /_/\____/_/|_| /_____/_/|_\____/ /_____/\___/_/\___/\__/\___/
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
spinner() {
|
||||
local pid=$1
|
||||
local delay=0.1
|
||||
local spinstr='|/-\'
|
||||
while ps -p $pid >/dev/null; do
|
||||
printf " [%c] " "$spinstr"
|
||||
spinstr=${spinstr#?}${spinstr%"${spinstr#?}"}
|
||||
sleep $delay
|
||||
printf "\r"
|
||||
done
|
||||
printf " \r"
|
||||
local pid=$1
|
||||
local delay=0.1
|
||||
local spinstr='|/-\'
|
||||
while ps -p $pid >/dev/null; do
|
||||
printf " [%c] " "$spinstr"
|
||||
spinstr=${spinstr#?}${spinstr%"${spinstr#?}"}
|
||||
sleep $delay
|
||||
printf "\r"
|
||||
done
|
||||
printf " \r"
|
||||
}
|
||||
|
||||
set -eEuo pipefail
|
||||
@@ -46,29 +46,29 @@ NODE=$(hostname)
|
||||
containers=$(pct list | tail -n +2 | awk '{print $0 " " $4}')
|
||||
|
||||
if [ -z "$containers" ]; then
|
||||
whiptail --title "LXC Container Delete" --msgbox "No LXC containers available!" 10 60
|
||||
exit 1
|
||||
whiptail --title "LXC Container Delete" --msgbox "No LXC containers available!" 10 60
|
||||
exit 1
|
||||
fi
|
||||
|
||||
menu_items=()
|
||||
menu_items=("ALL" "Delete ALL containers" "OFF") # Add as first option
|
||||
FORMAT="%-10s %-15s %-10s"
|
||||
|
||||
while read -r container; do
|
||||
container_id=$(echo $container | awk '{print $1}')
|
||||
container_name=$(echo $container | awk '{print $2}')
|
||||
container_status=$(echo $container | awk '{print $3}')
|
||||
formatted_line=$(printf "$FORMAT" "$container_name" "$container_status")
|
||||
menu_items+=("$container_id" "$formatted_line" "OFF")
|
||||
container_id=$(echo $container | awk '{print $1}')
|
||||
container_name=$(echo $container | awk '{print $2}')
|
||||
container_status=$(echo $container | awk '{print $3}')
|
||||
formatted_line=$(printf "$FORMAT" "$container_name" "$container_status")
|
||||
menu_items+=("$container_id" "$formatted_line" "OFF")
|
||||
done <<<"$containers"
|
||||
|
||||
CHOICES=$(whiptail --title "LXC Container Delete" \
|
||||
--checklist "Select LXC containers to delete:" 25 60 13 \
|
||||
"${menu_items[@]}" 3>&2 2>&1 1>&3)
|
||||
--checklist "Select LXC containers to delete:" 25 60 13 \
|
||||
"${menu_items[@]}" 3>&2 2>&1 1>&3)
|
||||
|
||||
if [ -z "$CHOICES" ]; then
|
||||
whiptail --title "LXC Container Delete" \
|
||||
--msgbox "No containers selected!" 10 60
|
||||
exit 1
|
||||
whiptail --title "LXC Container Delete" \
|
||||
--msgbox "No containers selected!" 10 60
|
||||
exit 1
|
||||
fi
|
||||
|
||||
read -p "Delete containers manually or automatically? (Default: manual) m/a: " DELETE_MODE
|
||||
@@ -76,34 +76,39 @@ DELETE_MODE=${DELETE_MODE:-m}
|
||||
|
||||
selected_ids=$(echo "$CHOICES" | tr -d '"' | tr -s ' ' '\n')
|
||||
|
||||
# If "ALL" is selected, override with all container IDs
|
||||
if echo "$selected_ids" | grep -q "^ALL$"; then
|
||||
selected_ids=$(echo "$containers" | awk '{print $1}')
|
||||
fi
|
||||
|
||||
for container_id in $selected_ids; do
|
||||
status=$(pct status $container_id)
|
||||
status=$(pct status $container_id)
|
||||
|
||||
if [ "$status" == "status: running" ]; then
|
||||
echo -e "${BL}[Info]${GN} Stopping container $container_id...${CL}"
|
||||
pct stop $container_id &
|
||||
sleep 5
|
||||
echo -e "${BL}[Info]${GN} Container $container_id stopped.${CL}"
|
||||
fi
|
||||
if [ "$status" == "status: running" ]; then
|
||||
echo -e "${BL}[Info]${GN} Stopping container $container_id...${CL}"
|
||||
pct stop $container_id &
|
||||
sleep 5
|
||||
echo -e "${BL}[Info]${GN} Container $container_id stopped.${CL}"
|
||||
fi
|
||||
|
||||
if [[ "$DELETE_MODE" == "a" ]]; then
|
||||
echo -e "${BL}[Info]${GN} Automatically deleting container $container_id...${CL}"
|
||||
pct destroy "$container_id" -f &
|
||||
pid=$!
|
||||
spinner $pid
|
||||
[ $? -eq 0 ] && echo "Container $container_id deleted." || whiptail --title "Error" --msgbox "Failed to delete container $container_id." 10 60
|
||||
if [[ "$DELETE_MODE" == "a" ]]; then
|
||||
echo -e "${BL}[Info]${GN} Automatically deleting container $container_id...${CL}"
|
||||
pct destroy "$container_id" -f &
|
||||
pid=$!
|
||||
spinner $pid
|
||||
[ $? -eq 0 ] && echo "Container $container_id deleted." || whiptail --title "Error" --msgbox "Failed to delete container $container_id." 10 60
|
||||
else
|
||||
read -p "Delete container $container_id? (y/N): " CONFIRM
|
||||
if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then
|
||||
echo -e "${BL}[Info]${GN} Deleting container $container_id...${CL}"
|
||||
pct destroy "$container_id" -f &
|
||||
pid=$!
|
||||
spinner $pid
|
||||
[ $? -eq 0 ] && echo "Container $container_id deleted." || whiptail --title "Error" --msgbox "Failed to delete container $container_id." 10 60
|
||||
else
|
||||
read -p "Delete container $container_id? (y/N): " CONFIRM
|
||||
if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then
|
||||
echo -e "${BL}[Info]${GN} Deleting container $container_id...${CL}"
|
||||
pct destroy "$container_id" -f &
|
||||
pid=$!
|
||||
spinner $pid
|
||||
[ $? -eq 0 ] && echo "Container $container_id deleted." || whiptail --title "Error" --msgbox "Failed to delete container $container_id." 10 60
|
||||
else
|
||||
echo -e "${BL}[Info]${RD} Skipping container $container_id...${CL}"
|
||||
fi
|
||||
echo -e "${BL}[Info]${RD} Skipping container $container_id...${CL}"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
header_info
|
||||
|
||||
@@ -13,7 +13,7 @@ function update_container() {
|
||||
echo -e "\n [Info] Updating $container : $name \n"
|
||||
os=$(pct config "$container" | awk '/^ostype/ {print $2}')
|
||||
case "$os" in
|
||||
alpine) pct exec "$container" -- ash -c "apk update && apk upgrade" ;;
|
||||
alpine) pct exec "$container" -- ash -c "apk -U upgrade" ;;
|
||||
archlinux) pct exec "$container" -- bash -c "pacman -Syyu --noconfirm" ;;
|
||||
fedora | rocky | centos | alma) pct exec "$container" -- bash -c "dnf -y update && dnf -y upgrade" ;;
|
||||
ubuntu | debian | devuan) pct exec "$container" -- bash -c "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confold" dist-upgrade -y; rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED" ;;
|
||||
@@ -33,17 +33,17 @@ for container in $(pct list | awk '{if(NR>1) print $1}'); do
|
||||
echo -e "[Info] Skipping $container"
|
||||
sleep 1
|
||||
else
|
||||
status=$(pct status $container)
|
||||
template=$(pct config $container | grep -q "template:" && echo "true" || echo "false")
|
||||
status=$(pct status "$container")
|
||||
template=$(pct config "$container" | grep -q "template:" && echo "true" || echo "false")
|
||||
if [ "$template" == "false" ] && [ "$status" == "status: stopped" ]; then
|
||||
echo -e "[Info] Starting $container"
|
||||
pct start $container
|
||||
pct start "$container"
|
||||
sleep 5
|
||||
update_container $container
|
||||
update_container "$container"
|
||||
echo -e "[Info] Shutting down $container"
|
||||
pct shutdown $container &
|
||||
pct shutdown "$container" &
|
||||
elif [ "$status" == "status: running" ]; then
|
||||
update_container $container
|
||||
update_container "$container"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
function header_info {
|
||||
function header_info() {
|
||||
clear
|
||||
cat <<"EOF"
|
||||
__ __ __ __ __ _ ________
|
||||
@@ -64,7 +64,7 @@ function update_container() {
|
||||
echo -e "${BL}[Info]${GN} Updating ${BL}$container${CL} : ${GN}$name${CL} - ${YW}[No disk info for ${os}]${CL}\n"
|
||||
fi
|
||||
case "$os" in
|
||||
alpine) pct exec "$container" -- ash -c "apk update && apk upgrade" ;;
|
||||
alpine) pct exec "$container" -- ash -c "apk -U upgrade" ;;
|
||||
archlinux) pct exec "$container" -- bash -c "pacman -Syyu --noconfirm" ;;
|
||||
fedora | rocky | centos | alma) pct exec "$container" -- bash -c "dnf -y update && dnf -y upgrade" ;;
|
||||
ubuntu | debian | devuan) pct exec "$container" -- bash -c "apt-get update 2>/dev/null | grep 'packages.*upgraded'; apt list --upgradable && apt-get -yq dist-upgrade 2>&1; rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED" ;;
|
||||
|
||||
Reference in New Issue
Block a user