mirror of
https://github.com/community-scripts/ProxmoxVED.git
synced 2026-02-28 08:55:53 +00:00
Compare commits
1 Commits
8ea8e23898
...
change_to_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
530c6a463b |
18
.github/workflows/auto-update-app-headers.yml
vendored
18
.github/workflows/auto-update-app-headers.yml
vendored
@@ -25,13 +25,6 @@ jobs:
|
||||
app-id: ${{ vars.APP_ID }}
|
||||
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
||||
|
||||
- name: Generate a token for PR approval and merge
|
||||
id: generate-token-merge
|
||||
uses: actions/create-github-app-token@v1
|
||||
with:
|
||||
app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
|
||||
private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
|
||||
|
||||
# Step 1: Checkout repository
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
@@ -98,17 +91,14 @@ jobs:
|
||||
gh pr review $PR_NUMBER --approve
|
||||
fi
|
||||
|
||||
- name: Approve pull request and merge
|
||||
- name: Re-approve pull request after update
|
||||
if: env.changed == 'true'
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.generate-token-merge.outputs.token }}
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
git config --global user.name "github-actions-automege[bot]"
|
||||
git config --global user.email "github-actions-automege[bot]@users.noreply.github.com"
|
||||
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[0].number')
|
||||
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
|
||||
gh pr review $PR_NUMBER --approve
|
||||
fi
|
||||
|
||||
# Step 8: Output success message when no changes
|
||||
|
||||
16
.github/workflows/changelog-pr.yaml
vendored
16
.github/workflows/changelog-pr.yaml
vendored
@@ -17,20 +17,13 @@ jobs:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Generate a token for PR creation
|
||||
- name: Generate a token
|
||||
id: generate-token
|
||||
uses: actions/create-github-app-token@v1
|
||||
with:
|
||||
app-id: ${{ vars.APP_ID }}
|
||||
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
||||
|
||||
- name: Generate a token for PR approval and merge
|
||||
id: generate-token-merge
|
||||
uses: actions/create-github-app-token@v1
|
||||
with:
|
||||
app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
|
||||
private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
@@ -268,15 +261,12 @@ jobs:
|
||||
gh pr review $PR_NUMBER --approve
|
||||
fi
|
||||
|
||||
- name: Approve pull request and merge
|
||||
- name: Re-approve pull request after update
|
||||
if: env.changed == 'true'
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.generate-token-merge.outputs.token }}
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
git config --global user.name "github-actions-automege[bot]"
|
||||
git config --global user.email "github-actions-automege[bot]@users.noreply.github.com"
|
||||
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number')
|
||||
if [ -n "$PR_NUMBER" ]; then
|
||||
gh pr review $PR_NUMBER --approve
|
||||
gh pr merge $PR_NUMBER --squash --admin
|
||||
fi
|
||||
|
||||
@@ -80,25 +80,7 @@ jobs:
|
||||
VAR+="${{ github.event.issue.html_url }}"
|
||||
echo "message=$VAR" >> $GITHUB_ENV
|
||||
|
||||
- name: Check if Discord thread exists
|
||||
id: check_thread
|
||||
run: |
|
||||
ISSUE_TITLE="${{ github.event.issue.title }}"
|
||||
|
||||
THREAD_ID=$(curl -s -X GET "https://discord.com/api/v10/guilds/${{ secrets.DISCORD_GUILD_ID }}/threads/active" \
|
||||
-H "Authorization: Bot ${{ secrets.DISCORD_BOT_TOKEN }}" \
|
||||
-H "Content-Type: application/json" | \
|
||||
jq -r --arg TITLE "$ISSUE_TITLE" --arg PARENT_ID "${{ secrets.DISCORD_CHANNEL_ID }}" \
|
||||
'.threads[] | select(.parent_id == $PARENT_ID and .name == ("Wanted Tester for " + $TITLE)) | .id')
|
||||
|
||||
if [ -n "$THREAD_ID" ]; then
|
||||
echo "thread_exists=true" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
echo "thread_exists=false" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
- name: Create a forumpost in Discord
|
||||
if: steps.check_thread.outputs.thread_exists != 'true'
|
||||
id: post_to_discord
|
||||
env:
|
||||
DISCORD_CHANNEL_ID: ${{ secrets.DISCORD_CHANNEL_ID }}
|
||||
@@ -124,7 +106,6 @@ jobs:
|
||||
fi
|
||||
|
||||
- name: Comment on Issue
|
||||
if: steps.check_thread.outputs.thread_exists != 'true'
|
||||
id: comment_on_issue
|
||||
env:
|
||||
MESSAGE: ${{ env.message }}
|
||||
|
||||
24
.github/workflows/delete_new_script.yaml
vendored
24
.github/workflows/delete_new_script.yaml
vendored
@@ -14,13 +14,6 @@ jobs:
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Generate a token for PR approval and merge
|
||||
id: generate-token-merge
|
||||
uses: actions/create-github-app-token@v1
|
||||
with:
|
||||
app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
|
||||
private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
|
||||
|
||||
- name: Extract Issue Title (Lowercase & Underscores)
|
||||
id: extract_title
|
||||
run: echo "TITLE=$(echo '${{ github.event.issue.title }}' | tr '[:upper:]' '[:lower:]' | sed 's/ /_/g')" >> $GITHUB_ENV
|
||||
@@ -59,7 +52,7 @@ jobs:
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
$branch="delete_files"
|
||||
branch=$(echo "delete-files_${{ github.event.issue.number }}_${TITLE}" | tr '[:upper:]' '[:lower:]' | sed 's/ /_/g')
|
||||
git config --global user.name "github-actions[bot]"
|
||||
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||
git checkout -b $branch
|
||||
@@ -72,26 +65,13 @@ jobs:
|
||||
exit 0
|
||||
fi
|
||||
git commit -m "Deleted files for issue: ${{ github.event.issue.title }}"
|
||||
git push origin $branch --force
|
||||
git push origin $branch
|
||||
gh pr create --title "Delete Files for ${{ github.event.issue.title }} after Merge to Main" --body "Delete files after merge in main repo." --base main --head $branch
|
||||
|
||||
pr_number=$(gh pr list | grep -m 1 $branch | awk '{print $1}')
|
||||
#gh pr merge $pr_number --squash
|
||||
echo pr_number=$pr_number >> $GITHUB_ENV
|
||||
|
||||
- name: Approve pull request and merge
|
||||
if: env.changed == 'true'
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.generate-token-merge.outputs.token }}
|
||||
run: |
|
||||
git config --global user.name "github-actions-automege[bot]"
|
||||
git config --global user.email "github-actions-automege[bot]@users.noreply.github.com"
|
||||
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number')
|
||||
if [ -n "$PR_NUMBER" ]; then
|
||||
gh pr review $PR_NUMBER --approve
|
||||
gh pr merge $PR_NUMBER --squash --admin
|
||||
fi
|
||||
|
||||
- name: Comment on Issue
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
|
||||
@@ -29,13 +29,6 @@ jobs:
|
||||
app-id: ${{ vars.APP_ID }}
|
||||
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
||||
|
||||
- name: Generate a token for PR approval and merge
|
||||
id: generate-token-merge
|
||||
uses: actions/create-github-app-token@v1
|
||||
with:
|
||||
app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
|
||||
private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
|
||||
|
||||
- name: Crawl from newreleases.io
|
||||
env:
|
||||
token: ${{ secrets.NEWRELEASES_TOKEN }}
|
||||
@@ -117,12 +110,10 @@ jobs:
|
||||
- name: Approve pull request and merge
|
||||
if: env.changed == 'true'
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.generate-token-merge.outputs.token }}
|
||||
GH_TOKEN: ${{ secrets.PAT_MICHEL }}
|
||||
run: |
|
||||
git config --global user.name "github-actions-automege[bot]"
|
||||
git config --global user.email "github-actions-automege[bot]@users.noreply.github.com"
|
||||
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[0].number')
|
||||
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
|
||||
gh pr review $PR_NUMBER --approve
|
||||
gh pr merge $PR_NUMBER --squash --delete-branch --admin
|
||||
fi
|
||||
|
||||
15
.github/workflows/move-to-main-repo.yaml
vendored
15
.github/workflows/move-to-main-repo.yaml
vendored
@@ -133,6 +133,10 @@ jobs:
|
||||
echo "install file already exists in ProxmoxVE"
|
||||
exit 1
|
||||
fi
|
||||
if [[ -f "frontend/public/json/${script_name}.json" ]]; then
|
||||
echo "json file already exists in ProxmoxVE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
git checkout -b "$branch_name"
|
||||
|
||||
@@ -153,13 +157,10 @@ jobs:
|
||||
cp ../frontend/public/json/$json_file frontend/public/json/. || true
|
||||
fi
|
||||
|
||||
echo $script_name
|
||||
sed -i "s|https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func|https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func|" ct/$script_name.sh
|
||||
sed -i "s|https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func|https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func|" ct/$script_name.sh
|
||||
sed -i "s|# License: MIT \| https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE|# License: MIT \| https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE|" ct/$script_name.sh
|
||||
sed -i "s|# License: MIT \| https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE|# License: MIT \| https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE|" install/$script_name-install.sh
|
||||
|
||||
git add . > /dev/null 2>&1
|
||||
sed -i 's|source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)|source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)|' ct/$script_name.sh
|
||||
sed -i 's|# License: MIT \| https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE|# License: MIT \| https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE|' ct/$script_name.sh
|
||||
sed -i 's|# License: MIT \| https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE|# License: MIT \| https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE|' install/$script_name-install.sh
|
||||
git add .
|
||||
if git diff --cached --exit-code; then
|
||||
echo "No changes detected, skipping commit."
|
||||
exit 0
|
||||
|
||||
2
.github/workflows/push-to-gitea.yml
vendored
2
.github/workflows/push-to-gitea.yml
vendored
@@ -21,7 +21,7 @@ jobs:
|
||||
git config --global user.name "Push From Github"
|
||||
git config --global user.email "actions@github.com"
|
||||
git remote add gitea https://$GITEA_USER:$GITEA_TOKEN@git.community-scripts.org/community-scripts/ProxmoxVED.git
|
||||
git push gitea --all
|
||||
git push gitea --mirror
|
||||
env:
|
||||
GITEA_USER: ${{ secrets.GITEA_USERNAME }}
|
||||
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||
|
||||
@@ -1,31 +1,25 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Function for generating Figlet headers
|
||||
generate_headers() {
|
||||
local base_dir=$1
|
||||
local target_subdir=$2
|
||||
local search_pattern=$3
|
||||
# Base directory for headers
|
||||
headers_dir="./ct/headers"
|
||||
|
||||
local headers_dir="${base_dir}/headers"
|
||||
# Ensure the headers directory exists and clear it
|
||||
mkdir -p "$headers_dir"
|
||||
rm -f "$headers_dir"/*
|
||||
|
||||
# Recursive or non-recursive search
|
||||
if [[ "$search_pattern" == "**" ]]; then
|
||||
shopt -s globstar nullglob
|
||||
file_list=("${base_dir}"/**/*.sh)
|
||||
shopt -u globstar
|
||||
else
|
||||
file_list=("${base_dir}"/*.sh)
|
||||
fi
|
||||
|
||||
for script in "${file_list[@]}"; do
|
||||
[[ -f "$script" ]] || continue
|
||||
|
||||
# Find all .sh files in ./ct directory, sorted alphabetically
|
||||
find ./ct -type f -name "*.sh" | sort | while read -r script; do
|
||||
# Extract the APP name from the APP line
|
||||
app_name=$(grep -oP '^APP="\K[^"]+' "$script" 2>/dev/null)
|
||||
|
||||
if [[ -n "$app_name" ]]; then
|
||||
# Define the output file name in the headers directory
|
||||
output_file="${headers_dir}/$(basename "${script%.*}")"
|
||||
|
||||
# Generate figlet output
|
||||
figlet_output=$(figlet -w 500 -f slant "$app_name")
|
||||
|
||||
# Check if figlet output is not empty
|
||||
if [[ -n "$figlet_output" ]]; then
|
||||
echo "$figlet_output" > "$output_file"
|
||||
echo "Generated: $output_file"
|
||||
@@ -36,15 +30,5 @@ generate_headers() {
|
||||
echo "No APP name found in $script, skipping."
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# ct
|
||||
generate_headers "./ct" "headers" "*"
|
||||
|
||||
# tools (addon, pve, ...)
|
||||
generate_headers "./tools" "headers" "**"
|
||||
|
||||
# vm
|
||||
generate_headers "./vm" "headers" "*"
|
||||
|
||||
echo "Completed processing all sections."
|
||||
echo "Completed processing .sh files."
|
||||
|
||||
81
CHANGELOG.md
81
CHANGELOG.md
@@ -7,76 +7,6 @@
|
||||
|
||||
<h3 align="center">All notable changes to this project will be documented in this file.</h3>
|
||||
|
||||
## 2025-05-14
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- odoo ([#4477](https://github.com/community-scripts/ProxmoxVE/pull/4477))
|
||||
- alpine-transmission ([#4277](https://github.com/community-scripts/ProxmoxVE/pull/4277))
|
||||
- alpine-tinyauth ([#4264](https://github.com/community-scripts/ProxmoxVE/pull/4264))
|
||||
- alpine-rclone ([#4265](https://github.com/community-scripts/ProxmoxVE/pull/4265))
|
||||
- streamlink-webui ([#4262](https://github.com/community-scripts/ProxmoxVE/pull/4262))
|
||||
- Fumadocs ([#4263](https://github.com/community-scripts/ProxmoxVE/pull/4263))
|
||||
- asterisk ([#4468](https://github.com/community-scripts/ProxmoxVE/pull/4468))
|
||||
- gatus ([#4443](https://github.com/community-scripts/ProxmoxVE/pull/4443))
|
||||
- alpine-gatus ([#4442](https://github.com/community-scripts/ProxmoxVE/pull/4442))
|
||||
- Alpine-Traefik [@MickLesk](https://github.com/MickLesk) ([#4412](https://github.com/community-scripts/ProxmoxVE/pull/4412))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- fix: fetch_release_and_deploy function [@CrazyWolf13](https://github.com/CrazyWolf13) ([#4478](https://github.com/community-scripts/ProxmoxVE/pull/4478))
|
||||
- Website: re-add documenso & some little bugfixes [@MickLesk](https://github.com/MickLesk) ([#4456](https://github.com/community-scripts/ProxmoxVE/pull/4456))
|
||||
- update some improvements from dev (tools.func) [@MickLesk](https://github.com/MickLesk) ([#4430](https://github.com/community-scripts/ProxmoxVE/pull/4430))
|
||||
- Alpine: Use onliner for updates [@tremor021](https://github.com/tremor021) ([#4414](https://github.com/community-scripts/ProxmoxVE/pull/4414))
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Bugfix: Mikrotik & Pimox HAOS VM (NEXTID) [@MickLesk](https://github.com/MickLesk) ([#4313](https://github.com/community-scripts/ProxmoxVE/pull/4313))
|
||||
- Bookstack: fix copy of themes/uploads/storage [@MickLesk](https://github.com/MickLesk) ([#4457](https://github.com/community-scripts/ProxmoxVE/pull/4457))
|
||||
- homarr: fetch versions dynamically from source repo [@CrazyWolf13](https://github.com/CrazyWolf13) ([#4409](https://github.com/community-scripts/ProxmoxVE/pull/4409))
|
||||
- Authentik: change install to UV & increase resources to 10GB RAM [@MickLesk](https://github.com/MickLesk) ([#4364](https://github.com/community-scripts/ProxmoxVE/pull/4364))
|
||||
- Jellyseerr: better handling of node and pnpm [@MickLesk](https://github.com/MickLesk) ([#4365](https://github.com/community-scripts/ProxmoxVE/pull/4365))
|
||||
- Alpine-Rclone: Fix location of passwords file [@tremor021](https://github.com/tremor021) ([#4465](https://github.com/community-scripts/ProxmoxVE/pull/4465))
|
||||
- Zammad: Enable ElasticSearch service [@tremor021](https://github.com/tremor021) ([#4391](https://github.com/community-scripts/ProxmoxVE/pull/4391))
|
||||
- openhab: use zulu17-jdk [@moodyblue](https://github.com/moodyblue) ([#4438](https://github.com/community-scripts/ProxmoxVE/pull/4438))
|
||||
- (fix) Documenso: fix build failures [@vhsdream](https://github.com/vhsdream) ([#4382](https://github.com/community-scripts/ProxmoxVE/pull/4382))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Feature: LXC-Delete (pve helper): add "all items" [@MickLesk](https://github.com/MickLesk) ([#4296](https://github.com/community-scripts/ProxmoxVE/pull/4296))
|
||||
- Feature: get correct next VMID [@MickLesk](https://github.com/MickLesk) ([#4292](https://github.com/community-scripts/ProxmoxVE/pull/4292))
|
||||
- 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))
|
||||
- monitor-all: improvements - tag based filtering [@grizmin](https://github.com/grizmin) ([#4437](https://github.com/community-scripts/ProxmoxVE/pull/4437))
|
||||
- Make apt-cacher-ng a client of its own server [@pgcudahy](https://github.com/pgcudahy) ([#4092](https://github.com/community-scripts/ProxmoxVE/pull/4092))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- openhab. correct some typos [@moodyblue](https://github.com/moodyblue) ([#4448](https://github.com/community-scripts/ProxmoxVE/pull/4448))
|
||||
|
||||
### 🧰 Maintenance
|
||||
|
||||
- #### 💾 Core
|
||||
|
||||
- fix: improve bridge detection in all network interface configuration files [@filippolauria](https://github.com/filippolauria) ([#4413](https://github.com/community-scripts/ProxmoxVE/pull/4413))
|
||||
- Config file Function in build.func [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4411](https://github.com/community-scripts/ProxmoxVE/pull/4411))
|
||||
- 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 Github app for auto PR merge [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4461](https://github.com/community-scripts/ProxmoxVE/pull/4461))
|
||||
|
||||
### 🌐 Website
|
||||
|
||||
- FAQ: Explanation "updatable" [@tremor021](https://github.com/tremor021) ([#4300](https://github.com/community-scripts/ProxmoxVE/pull/4300))
|
||||
|
||||
- #### 📝 Script Information
|
||||
|
||||
- Jellyfin Media Server: Update configuration path [@tremor021](https://github.com/tremor021) ([#4434](https://github.com/community-scripts/ProxmoxVE/pull/4434))
|
||||
- Pingvin Share: Added explanation on how to add/edit environment variables [@tremor021](https://github.com/tremor021) ([#4432](https://github.com/community-scripts/ProxmoxVE/pull/4432))
|
||||
- pingvin.json: fix typo [@warmbo](https://github.com/warmbo) ([#4426](https://github.com/community-scripts/ProxmoxVE/pull/4426))
|
||||
- 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-03-24
|
||||
|
||||
### 🆕 New Scripts
|
||||
@@ -85,7 +15,8 @@
|
||||
- wazuh [@omiinaya](https://github.com/omiinaya) ([#3381](https://github.com/community-scripts/ProxmoxVE/pull/3381))
|
||||
- yt-dlp-webui [@CrazyWolf13](https://github.com/CrazyWolf13) ([#3364](https://github.com/community-scripts/ProxmoxVE/pull/3364))
|
||||
- Extension/New Script: Redis Alpine Installation [@MickLesk](https://github.com/MickLesk) ([#3367](https://github.com/community-scripts/ProxmoxVE/pull/3367))
|
||||
- Fluid Calendar [@vhsdream](https://github.com/vhsdream) ([#2869](ht
|
||||
- Fluid Calendar [@vhsdream](https://github.com/vhsdream) ([#2869](https://github.com/community-scripts/ProxmoxVE/pull/2869))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- License url VED to VE [@bvdberg01](https://github.com/bvdberg01) ([#3258](https://github.com/community-scripts/ProxmoxVE/pull/3258))
|
||||
@@ -104,7 +35,7 @@
|
||||
- GoMFT: Fix build dependencies [@tremor021](https://github.com/tremor021) ([#3313](https://github.com/community-scripts/ProxmoxVE/pull/3313))
|
||||
- GoMFT: Don't rely on binaries from github [@tremor021](https://github.com/tremor021) ([#3303](https://github.com/community-scripts/ProxmoxVE/pull/3303))
|
||||
- Wikijs: Remove Dev Message & Performance-Boost [@bvdberg01](https://github.com/bvdberg01) ([#3232](https://github.com/community-scripts/ProxmoxVE/pull/3232))
|
||||
- Update omada download url [@bvdberg01](https://github.com/bvdberg01) ([#3245](https://github.cooxVE/pull/3245))
|
||||
- Update omada download url [@bvdberg01](https://github.com/bvdberg01) ([#3245](https://github.com/community-scripts/ProxmoxVE/pull/3245))
|
||||
- TriliumNotes: Fix release handling [@tremor021](https://github.com/tremor021) ([#3160](https://github.com/community-scripts/ProxmoxVE/pull/3160))
|
||||
|
||||
- #### ✨ New Features
|
||||
@@ -125,7 +56,7 @@
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
|
||||
- [core] add gitignore to prevent big pulls [@MickLesk](https://github.com/MickLesk) ([#3278](https://github.com/community-scripts/ProxmoxVE/pull/3278))
|
||||
- [core] install core deps (debian / ubuntu) [@MickLesk](https://github.com/MickLesk) ([#3366](https://github.com/community-scripts/ProxmoxVE/pull/3366))
|
||||
|
||||
- #### 💾 Core
|
||||
@@ -141,11 +72,11 @@
|
||||
### 🌐 Website
|
||||
|
||||
- Update siteConfig.tsx to use new analytics code [@BramSuurdje](https://github.com/BramSuurdje) ([#3389](https://github.com/community-scripts/ProxmoxVE/pull/3389))
|
||||
- Bump next from 15.1.3 to 15.2.16](https://github.com/community-scripE/pull/3316))
|
||||
- Bump next from 15.1.3 to 15.2.3 in /frontend [@dependabot[bot]](https://github.com/dependabot[bot]) ([#3316](https://github.com/community-scripts/ProxmoxVE/pull/3316))
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Better Text for Version Date [@michelroegl-brunner](https:er) ([#3388](https://github.com/community-scripts/ProxmoxVE/pull/3388))
|
||||
- Better Text for Version Date [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#3388](https://github.com/community-scripts/ProxmoxVE/pull/3388))
|
||||
- JSON editor note fix [@bvdberg01](https://github.com/bvdberg01) ([#3260](https://github.com/community-scripts/ProxmoxVE/pull/3260))
|
||||
- Move cryptpad files to right folders [@bvdberg01](https://github.com/bvdberg01) ([#3242](https://github.com/community-scripts/ProxmoxVE/pull/3242))
|
||||
|
||||
|
||||
88
ct/alpine-bitmagnet.sh
Normal file
88
ct/alpine-bitmagnet.sh
Normal file
@@ -0,0 +1,88 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Slaviša Arežina (tremor021)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/bitmagnet-io/bitmagnet
|
||||
|
||||
APP="Alpine-bitmagnet"
|
||||
var_tags="${var_tags:-alpine;torrent}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-3}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.21}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
|
||||
if [[ ! -d /opt/bitmagnet ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit 1
|
||||
fi
|
||||
RELEASE=$(curl -s https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [ "${RELEASE}" != "$(cat /opt/bitmagnet_version.txt)" ] || [ ! -f /opt/bitmagnet_version.txt ]; then
|
||||
msg_info "Backing up database"
|
||||
rm -f /tmp/backup.sql
|
||||
$STD sudo -u postgres pg_dump \
|
||||
--column-inserts \
|
||||
--data-only \
|
||||
--on-conflict-do-nothing \
|
||||
--rows-per-insert=1000 \
|
||||
--table=metadata_sources \
|
||||
--table=content \
|
||||
--table=content_attributes \
|
||||
--table=content_collections \
|
||||
--table=content_collections_content \
|
||||
--table=torrent_sources \
|
||||
--table=torrents \
|
||||
--table=torrent_files \
|
||||
--table=torrent_hints \
|
||||
--table=torrent_contents \
|
||||
--table=torrent_tags \
|
||||
--table=torrents_torrent_sources \
|
||||
--table=key_values \
|
||||
bitmagnet \
|
||||
>/tmp/backup.sql
|
||||
mv /tmp/backup.sql /opt/
|
||||
msg_ok "Database backed up"
|
||||
|
||||
msg_info "Updating ${APP} from $(cat /opt/bitmagnet_version.txt) to ${RELEASE}"
|
||||
$STD apk -U upgrade
|
||||
$STD service bitmagnet stop
|
||||
[ -f /opt/bitmagnet/.env ] && cp /opt/bitmagnet/.env /opt/
|
||||
[ -f /opt/bitmagnet/config.yml ] && cp /opt/bitmagnet/config.yml /opt/
|
||||
rm -rf /opt/bitmagnet/*
|
||||
temp_file=$(mktemp)
|
||||
curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||
tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
|
||||
cd /opt/bitmagnet
|
||||
$STD go build
|
||||
chmod +x bitmagnet
|
||||
[ -f "/opt/.env" ] && cp "/opt/.env" /opt/bitmagnet/
|
||||
[ -f "/opt/config.yml" ] && cp "/opt/config.yml" /opt/bitmagnet/
|
||||
rm -f "$temp_file"
|
||||
echo "${RELEASE}" >/opt/bitmagnet_version.txt
|
||||
$STD service bitmagnet start
|
||||
msg_ok "Updated Successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||
fi
|
||||
|
||||
exit 0
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following IP:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3333${CL}"
|
||||
@@ -1,114 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster) | Co-Author: MickLesk (Canbiz) | Co-Author: CrazyWolf13
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://homarr.dev/
|
||||
|
||||
APP="alpine-homarr"
|
||||
var_tags="${var_tags:-arr;dashboard}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-8}"
|
||||
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
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/homarr-labs/homarr/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 Services (Patience)"
|
||||
systemctl stop homarr
|
||||
msg_ok "Services Stopped"
|
||||
|
||||
msg_info "Backup Data"
|
||||
mkdir -p /opt/homarr-data-backup
|
||||
cp /opt/homarr/.env /opt/homarr-data-backup/.env
|
||||
msg_ok "Backup Data"
|
||||
|
||||
msg_info "Updating and rebuilding ${APP} to v${RELEASE} (Patience)"
|
||||
rm /opt/run_homarr.sh
|
||||
cat <<'EOF' >/opt/run_homarr.sh
|
||||
#!/bin/bash
|
||||
set -a
|
||||
source /opt/homarr/.env
|
||||
set +a
|
||||
export DB_DIALECT='sqlite'
|
||||
export AUTH_SECRET=$(openssl rand -base64 32)
|
||||
node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT
|
||||
for dir in $(find /opt/homarr_db/migrations/migrations -mindepth 1 -maxdepth 1 -type d); do
|
||||
dirname=$(basename "$dir")
|
||||
mkdir -p "/opt/homarr_db/migrations/$dirname"
|
||||
cp -r "$dir"/* "/opt/homarr_db/migrations/$dirname/" 2>/dev/null || true
|
||||
done
|
||||
export HOSTNAME=$(ip route get 1.1.1.1 | grep -oP 'src \K[^ ]+')
|
||||
envsubst '${HOSTNAME}' < /etc/nginx/templates/nginx.conf > /etc/nginx/nginx.conf
|
||||
nginx -g 'daemon off;' &
|
||||
redis-server /opt/homarr/packages/redis/redis.conf &
|
||||
node apps/tasks/tasks.cjs &
|
||||
node apps/websocket/wssServer.cjs &
|
||||
node apps/nextjs/server.js & PID=$!
|
||||
wait $PID
|
||||
EOF
|
||||
chmod +x /opt/run_homarr.sh
|
||||
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
|
||||
fetch_and_deploy_gh_release "homarr-labs/homarr"
|
||||
mv /opt/homarr-data-backup/.env /opt/homarr/.env
|
||||
cd /opt/homarr
|
||||
echo "test2"
|
||||
export NODE_ENV=""
|
||||
$STD pnpm install --recursive --frozen-lockfile --shamefully-hoist
|
||||
$STD pnpm build
|
||||
cp /opt/homarr/apps/nextjs/next.config.ts .
|
||||
cp /opt/homarr/apps/nextjs/package.json .
|
||||
cp -r /opt/homarr/packages/db/migrations /opt/homarr_db/migrations
|
||||
cp -r /opt/homarr/apps/nextjs/.next/standalone/* /opt/homarr
|
||||
mkdir -p /appdata/redis
|
||||
cp /opt/homarr/packages/redis/redis.conf /opt/homarr/redis.conf
|
||||
rm /etc/nginx/nginx.conf
|
||||
mkdir -p /etc/nginx/templates
|
||||
cp /opt/homarr/nginx.conf /etc/nginx/templates/nginx.conf
|
||||
|
||||
mkdir -p /opt/homarr/apps/cli
|
||||
cp /opt/homarr/packages/cli/cli.cjs /opt/homarr/apps/cli/cli.cjs
|
||||
echo $'#!/bin/bash\ncd /opt/homarr/apps/cli && node ./cli.cjs "$@"' >/usr/bin/homarr
|
||||
chmod +x /usr/bin/homarr
|
||||
|
||||
mkdir /opt/homarr/build
|
||||
cp ./node_modules/better-sqlite3/build/Release/better_sqlite3.node ./build/better_sqlite3.node
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated ${APP}"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start homarr
|
||||
msg_ok "Started Services"
|
||||
msg_ok "Updated Successfully"
|
||||
read -p "It's recommended to reboot the LXC after an update, would you like to reboot the LXC now ? (y/n): " choice
|
||||
if [[ "$choice" =~ ^[Yy]$ ]]; then
|
||||
reboot
|
||||
fi
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7575${CL}"
|
||||
@@ -21,11 +21,12 @@ catch_errors
|
||||
|
||||
function update_script() {
|
||||
msg_info "Updating Alpine Packages"
|
||||
$STD apk -U upgrade
|
||||
$STD apk update
|
||||
$STD apk upgrade
|
||||
msg_ok "Updated Alpine Packages"
|
||||
|
||||
msg_info "Updating Syncthing"
|
||||
$STD apk upgrade syncthing
|
||||
$STD $STD apk upgrade syncthing
|
||||
msg_ok "Updated Syncthing"
|
||||
|
||||
msg_info "Restarting Syncthing"
|
||||
|
||||
53
ct/argus.sh
53
ct/argus.sh
@@ -1,53 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://release-argus.io/
|
||||
|
||||
APP="Argus"
|
||||
var_tags="${var_tags:-os}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-3}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /opt/argus ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/release-argus/Argus/releases/latest | jq -r .tag_name | sed 's/^v//')
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
msg_info "Updating $APP to ${RELEASE}"
|
||||
rm -f /opt/argus/Argus
|
||||
curl -fsSL "https://github.com/release-argus/Argus/releases/download/${RELEASE}/Argus-${RELEASE}.linux-amd64" -o /opt/argus/Argus
|
||||
chmod +x /opt/argus/Argus
|
||||
systemctl restart argus
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated ${APP} to ${RELEASE}"
|
||||
else
|
||||
msg_ok "${APP} is already up to date (${RELEASE})"
|
||||
fi
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
||||
39
ct/asterisk.sh
Normal file
39
ct/asterisk.sh
Normal file
@@ -0,0 +1,39 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: michelroegl-brunner
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://asterisk.org/
|
||||
|
||||
APP="Asterisk"
|
||||
var_tags="${var_tags:-os}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /var ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "No Update function provided for ${APP} LXC"
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
91
ct/authentik.sh
Normal file
91
ct/authentik.sh
Normal file
@@ -0,0 +1,91 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: remz1337
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://goauthentik.io/
|
||||
|
||||
APP="Authentik"
|
||||
var_tags="${var_tags:-identity-provider}"
|
||||
var_disk="${var_disk:-12}"
|
||||
var_cpu="${var_cpu:-6}"
|
||||
var_ram="${var_ram:-10240}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -f /etc/systemd/system/authentik-server.service ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
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
|
||||
msg_ok "Stopped ${APP}"
|
||||
|
||||
msg_info "Building ${APP} website"
|
||||
mkdir -p /opt/authentik
|
||||
curl -fsSL "${RELEASE}" -o "authentik.tar.gz"
|
||||
tar -xzf authentik.tar.gz -C /opt/authentik --strip-components 1 --overwrite
|
||||
rm -rf authentik.tar.gz
|
||||
cd /opt/authentik/website
|
||||
$STD npm install
|
||||
$STD npm run build-bundled
|
||||
cd /opt/authentik/web
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
msg_ok "Built ${APP} website"
|
||||
|
||||
msg_info "Building ${APP} server"
|
||||
cd /opt/authentik
|
||||
go mod download
|
||||
go build -o /go/authentik ./cmd/server
|
||||
go build -o /opt/authentik/authentik-server /opt/authentik/cmd/server/
|
||||
msg_ok "Built ${APP} server"
|
||||
|
||||
msg_info "Building Authentik"
|
||||
cd /opt/authentik
|
||||
$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"
|
||||
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||
|
||||
msg_info "Starting ${APP}"
|
||||
systemctl start authentik-server
|
||||
systemctl start authentik-worker
|
||||
msg_ok "Started ${APP}"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
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}:9000/if/flow/initial-setup/${CL}"
|
||||
@@ -23,57 +23,16 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/babybuddy ]]; then
|
||||
if [[ ! -d /opt/maxun ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/babybuddy/babybuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/babybuddy_version.txt)" ]]; then
|
||||
setup_uv
|
||||
|
||||
RELEASE=$(curl -s https://api.github.com/repos/xxxxx/xxxxx/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop nginx
|
||||
systemctl stop uwsgi
|
||||
systemctl stop APP
|
||||
msg_ok "Services Stopped"
|
||||
|
||||
msg_info "Cleaning old files"
|
||||
cp babybuddy/settings/production.py /tmp/production.py.bak
|
||||
find . -mindepth 1 -maxdepth 1 ! -name '.venv' -exec rm -rf {} +
|
||||
msg_ok "Cleaned old files"
|
||||
|
||||
msg_info "Updating ${APP} to v${RELEASE}"
|
||||
temp_file=$(mktemp)
|
||||
curl -fsSL "https://github.com/babybuddy/babybuddy/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||
cd /opt/babybuddy
|
||||
tar zxf "$temp_file" --strip-components=1 -C /opt/babybuddy
|
||||
mv /tmp/production.py.bak babybuddy/settings/production.py
|
||||
cd /opt/babybuddy
|
||||
source .venv/bin/activate
|
||||
$STD uv pip install -r requirements.txt
|
||||
$STD python manage.py migrate
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||
|
||||
msg_info "Fixing permissions"
|
||||
chown -R www-data:www-data /opt/data
|
||||
chmod 640 /opt/data/db.sqlite3
|
||||
chmod 750 /opt/data
|
||||
msg_ok "Permissions fixed"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start uwsgi
|
||||
systemctl start nginx
|
||||
msg_ok "Services Started"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -f "$temp_file"
|
||||
msg_ok "Cleaned"
|
||||
msg_ok "Updated Successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
@@ -83,4 +42,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}${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: ksad (enirys31)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://garethgeorge.github.io/backrest/
|
||||
|
||||
APP="Backrest"
|
||||
var_tags="${var_tags:-backup}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/backrest ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/garethgeorge/backrest/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
msg_info "Stopping ${APP}"
|
||||
systemctl stop backrest
|
||||
msg_ok "Stopped ${APP}"
|
||||
|
||||
msg_info "Updating ${APP} to ${RELEASE}"
|
||||
cd /opt/backrest/bin
|
||||
curl -fsSL "https://github.com/garethgeorge/backrest/releases/download/v${RELEASE}/backrest_Linux_x86_64.tar.gz" -o "backrest_Linux_x86_64.tar.gz"
|
||||
tar -xzf backrest_Linux_x86_64.tar.gz
|
||||
rm -rf backrest_Linux_x86_64.tar.gz
|
||||
rm -f install.sh uninstall.sh
|
||||
chmod +x backrest
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated ${APP} to ${RELEASE}"
|
||||
|
||||
msg_info "Starting ${APP}"
|
||||
systemctl start backrest
|
||||
msg_ok "Started ${APP}"
|
||||
msg_ok "Updated Successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9898${CL}"
|
||||
@@ -48,13 +48,13 @@ function update_script() {
|
||||
cp /opt/bar-assistant-backup/storage/bar-assistant /opt/bar-assistant/storage/bar-assistant
|
||||
cd /opt/bar-assistant
|
||||
composer install
|
||||
$STD php artisan migrate --force
|
||||
$STD php artisan storage:link
|
||||
$STD php artisan bar:setup-meilisearch
|
||||
$STD php artisan scout:sync-index-settings
|
||||
$STD php artisan config:cache
|
||||
$STD php artisan route:cache
|
||||
$STD php artisan event:cache
|
||||
php artisan migrate --force
|
||||
php artisan storage:link
|
||||
php artisan bar:setup-meilisearch
|
||||
php artisan scout:sync-index-settings
|
||||
php artisan config:cache
|
||||
php artisan route:cache
|
||||
php artisan event:cache
|
||||
echo "${RELEASE_BARASSISTANT}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated $APP to v${RELEASE_BARASSISTANT}"
|
||||
|
||||
|
||||
76
ct/bookstack.sh
Normal file
76
ct/bookstack.sh
Normal file
@@ -0,0 +1,76 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: MickLesk (Canbiz)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/BookStackApp/BookStack
|
||||
|
||||
APP="Bookstack"
|
||||
var_tags="${var_tags:-organizer}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/bookstack ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/BookStackApp/BookStack/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 Apache2"
|
||||
systemctl stop apache2
|
||||
msg_ok "Services Stopped"
|
||||
|
||||
msg_info "Updating ${APP} to v${RELEASE}"
|
||||
mv /opt/bookstack /opt/bookstack-backup
|
||||
fetch_and_deploy_gh_release BookstackApp/BookStack
|
||||
cp /opt/bookstack-backup/.env /opt/bookstack/.env
|
||||
cp -r /opt/bookstack-backup/public/uploads/* /opt/bookstack/public/uploads/ || true
|
||||
cp -r /opt/bookstack-backup/storage/uploads/* /opt/bookstack/storage/uploads/ || true
|
||||
cp -r /opt/bookstack-backup/themes/* /opt/bookstack/themes/ || true
|
||||
cd /opt/bookstack
|
||||
export COMPOSER_ALLOW_SUPERUSER=1
|
||||
$STD composer install --no-dev
|
||||
$STD php artisan migrate --force
|
||||
chown www-data:www-data -R /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage
|
||||
chmod -R 755 /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage
|
||||
chmod -R 775 /opt/bookstack/storage /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads
|
||||
chmod -R 640 /opt/bookstack/.env
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||
|
||||
msg_info "Starting Apache2"
|
||||
systemctl start apache2
|
||||
msg_ok "Started Apache2"
|
||||
|
||||
msg_info "Cleaning Up"
|
||||
rm -rf /opt/bookstack-backup
|
||||
rm -rf "/opt/BookStack-${RELEASE}.zip"
|
||||
msg_ok "Cleaned"
|
||||
msg_ok "Updated Successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
||||
@@ -1,66 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: finkerle
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/raydak-labs/configarr
|
||||
|
||||
APP="Configarr"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /opt/configarr ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/raydak-labs/configarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ "${RELEASE}" != "$(cat /opt/configarr_version.txt)" ]] || [[ ! -f /opt/configarr_version.txt ]]; then
|
||||
msg_info "Stopping $APP"
|
||||
systemctl stop configarr-task.timer
|
||||
msg_ok "Stopped $APP"
|
||||
|
||||
msg_info "Updating $APP to v${RELEASE}"
|
||||
mkdir -p /opt/backup/
|
||||
mv /opt/configarr/{config.yml,secrets.yml,.env} "/opt/backup/"
|
||||
rm -rf /opt/configarr
|
||||
fetch_and_deploy_gh_release "raydak-labs/configarr"
|
||||
mv /opt/backup/* /opt/configarr/
|
||||
cd /opt/configarr
|
||||
$STD pnpm install
|
||||
$STD pnpm run build
|
||||
msg_ok "Updated $APP to v${RELEASE}"
|
||||
|
||||
msg_info "Starting $APP"
|
||||
systemctl start configarr-task.timer
|
||||
msg_ok "Started configarr"
|
||||
|
||||
rm -rf /opt/backup
|
||||
msg_ok "Update Successful"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL (no web-ui):${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8989${CL}"
|
||||
@@ -126,24 +126,19 @@ if qm status "$CTID" &>/dev/null || pct status "$CTID" &>/dev/null; then
|
||||
exit 206
|
||||
fi
|
||||
|
||||
# # Get template storage
|
||||
# TEMPLATE_STORAGE=$(select_storage template)
|
||||
# CONTAINER_STORAGE=$(select_storage container) || exit
|
||||
# msg_ok "Template Storage: ${BL}$TEMPLATE_STORAGE${CL} ${GN}Container Storage: ${BL}$CONTAINER_STORAGE${CL}."
|
||||
|
||||
# Get template storage
|
||||
TEMPLATE_STORAGE=$(select_storage template)
|
||||
TEMPLATE_STORAGE=$(select_storage template) || exit
|
||||
msg_ok "Using ${BL}$TEMPLATE_STORAGE${CL} ${GN}for Template Storage."
|
||||
|
||||
# Get container storage
|
||||
CONTAINER_STORAGE=$(select_storage container)
|
||||
CONTAINER_STORAGE=$(select_storage container) || exit
|
||||
msg_ok "Using ${BL}$CONTAINER_STORAGE${CL} ${GN}for Container Storage."
|
||||
|
||||
# Update LXC template list
|
||||
$STD msg_info "Updating LXC Template List"
|
||||
msg_info "Updating LXC Template List"
|
||||
#check_network
|
||||
pveam update >/dev/null
|
||||
$STD msg_ok "Updated LXC Template List"
|
||||
msg_ok "Updated LXC Template List"
|
||||
|
||||
# Get LXC template string
|
||||
TEMPLATE_SEARCH=${PCT_OSTYPE}-${PCT_OSVERSION:-}
|
||||
@@ -187,54 +182,29 @@ grep -q "root:100000:65536" /etc/subgid || echo "root:100000:65536" >>/etc/subgi
|
||||
PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}})
|
||||
[[ " ${PCT_OPTIONS[@]} " =~ " -rootfs " ]] || PCT_OPTIONS+=(-rootfs "$CONTAINER_STORAGE:${PCT_DISK_SIZE:-8}")
|
||||
|
||||
# Secure creation of the LXC container with lock and template check
|
||||
lockfile="/tmp/template.${TEMPLATE}.lock"
|
||||
exec 9>"$lockfile"
|
||||
flock -w 60 9 || {
|
||||
msg_error "Timeout while waiting for template lock"
|
||||
exit 211
|
||||
}
|
||||
|
||||
msg_info "Creating LXC Container"
|
||||
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
|
||||
msg_error "Container creation failed. Checking if template is corrupted or incomplete."
|
||||
msg_error "Container creation failed. Checking if template is corrupted."
|
||||
|
||||
if [[ ! -s "$TEMPLATE_PATH" || "$(stat -c%s "$TEMPLATE_PATH")" -lt 1000000 ]]; then
|
||||
msg_error "Template file too small or missing – re-downloading."
|
||||
if ! zstdcat "$TEMPLATE_PATH" | tar -tf - >/dev/null 2>&1; then
|
||||
msg_error "Template appears to be corrupted. Removing and re-downloading."
|
||||
rm -f "$TEMPLATE_PATH"
|
||||
elif ! zstdcat "$TEMPLATE_PATH" | tar -tf - &>/dev/null; then
|
||||
msg_error "Template appears to be corrupted – re-downloading."
|
||||
rm -f "$TEMPLATE_PATH"
|
||||
else
|
||||
msg_error "Template is valid, but container creation still failed."
|
||||
exit 209
|
||||
fi
|
||||
|
||||
# Retry download
|
||||
for attempt in {1..3}; do
|
||||
msg_info "Attempt $attempt: Re-downloading template..."
|
||||
if timeout 120 pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null; then
|
||||
msg_ok "Template re-download successful."
|
||||
break
|
||||
fi
|
||||
if [ "$attempt" -eq 3 ]; then
|
||||
msg_error "Three failed attempts. Aborting."
|
||||
if ! timeout 120 pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null; then
|
||||
msg_error "Failed to re-download template."
|
||||
exit 208
|
||||
fi
|
||||
sleep $((attempt * 5))
|
||||
done
|
||||
|
||||
sleep 1 # I/O-Sync-Delay
|
||||
msg_ok "Re-downloaded LXC Template"
|
||||
|
||||
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
|
||||
msg_error "Container creation failed after re-downloading template."
|
||||
exit 200
|
||||
fi
|
||||
else
|
||||
msg_error "Container creation failed, but template is not corrupted."
|
||||
exit 209
|
||||
fi
|
||||
|
||||
if ! pct status "$CTID" &>/dev/null; then
|
||||
msg_error "Container not found after pct create – assuming failure."
|
||||
exit 210
|
||||
fi
|
||||
: "${UDHCPC_FIX:=}"
|
||||
if [ "$UDHCPC_FIX" == "yes" ]; then
|
||||
|
||||
11
ct/debian.sh
11
ct/debian.sh
@@ -13,8 +13,6 @@ var_disk="${var_disk:-2}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
var_fuse="${var_fuse:-yes}"
|
||||
var_tun="${var_tun:-yes}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
@@ -42,12 +40,3 @@ description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
|
||||
read -p "Remove this Container? <y/N> " prompt
|
||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
pct stop "$CTID"
|
||||
pct destroy "$CTID"
|
||||
msg_ok "Removed this script"
|
||||
else
|
||||
msg_warn "Did not remove this script"
|
||||
fi
|
||||
|
||||
@@ -6,10 +6,10 @@ source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/
|
||||
# Source: https://www.freepbx.org/
|
||||
|
||||
APP="FreePBX"
|
||||
var_tags="pbx;voip;telephony"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-10}"
|
||||
var_tags=""
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-20}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
@@ -24,6 +24,7 @@ function update_script() {
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
# Check if installation is present | -f for file, -d for folder
|
||||
if [[ ! -f /lib/systemd/system/freepbx.service ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
|
||||
@@ -1,101 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/raw/main/garmin-grafana/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: aliaksei135
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/arpanghosh8453/garmin-grafana
|
||||
|
||||
APP="garmin-grafana"
|
||||
var_tags="${var_tags:-sports;visualization}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
# this only updates garmin-grafana, not influxdb or grafana, which are upgraded with apt
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /opt/garmin-grafana/ ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/arpanghosh8453/garmin-grafana/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
if [[ ! -d /opt/garmin-grafana/ ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||
msg_info "Stopping $APP"
|
||||
systemctl stop garmin-grafana
|
||||
systemctl stop grafana-server
|
||||
systemctl stop influxdb
|
||||
msg_ok "Stopped $APP"
|
||||
|
||||
if [[ ! -f /opt/garmin-grafana/.env ]]; then
|
||||
msg_error "No .env file found in /opt/garmin-grafana/.env"
|
||||
exit
|
||||
fi
|
||||
source /opt/garmin-grafana/.env
|
||||
if [[ -z "${INFLUXDB_USER}" || -z "${INFLUXDB_PASSWORD}" || -z "${INFLUXDB_NAME}" ]]; then
|
||||
msg_error "INFLUXDB_USER, INFLUXDB_PASSWORD, or INFLUXDB_NAME not set in .env file"
|
||||
exit
|
||||
fi
|
||||
|
||||
msg_info "Creating Backup"
|
||||
tar -czf "/opt/${APP}_backup_$(date +%F).tar.gz" /opt/garmin-grafana/.garminconnect /opt/garmin-grafana/.env
|
||||
mv /opt/garmin-grafana/ /opt/garmin-grafana-backup/
|
||||
msg_ok "Backup Created"
|
||||
|
||||
msg_info "Updating $APP to v${RELEASE}"
|
||||
curl -fsSL -o "${RELEASE}.zip" "https://github.com/arpanghosh8453/garmin-grafana/archive/refs/tags/${RELEASE}.zip"
|
||||
unzip -q "${RELEASE}.zip"
|
||||
mv "garmin-grafana-${RELEASE}/" "/opt/garmin-grafana"
|
||||
rm -f "${RELEASE}.zip"
|
||||
$STD uv sync --locked --project /opt/garmin-grafana/
|
||||
# shellcheck disable=SC2016
|
||||
sed -i 's/\${DS_GARMIN_STATS}/garmin_influxdb/g' /opt/garmin-grafana/Grafana_Dashboard/Garmin-Grafana-Dashboard.json
|
||||
sed -i 's/influxdb:8086/localhost:8086/' /opt/garmin-grafana/Grafana_Datasource/influxdb.yaml
|
||||
sed -i "s/influxdb_user/${INFLUXDB_USER}/" /opt/garmin-grafana/Grafana_Datasource/influxdb.yaml
|
||||
sed -i "s/influxdb_secret_password/${INFLUXDB_PASSWORD}/" /opt/garmin-grafana/Grafana_Datasource/influxdb.yaml
|
||||
sed -i "s/GarminStats/${INFLUXDB_NAME}/" /opt/garmin-grafana/Grafana_Datasource/influxdb.yaml
|
||||
# Copy across grafana data
|
||||
cp -r /opt/garmin-grafana/Grafana_Datasource/* /etc/grafana/provisioning/datasources
|
||||
cp -r /opt/garmin-grafana/Grafana_Dashboard/* /etc/grafana/provisioning/dashboards
|
||||
# Copy back the env and token files
|
||||
cp /opt/garmin-grafana-backup/.env /opt/garmin-grafana/.env
|
||||
cp -r /opt/garmin-grafana-backup/.garminconnect /opt/garmin-grafana/.garminconnect
|
||||
msg_ok "Updated $APP to v${RELEASE}"
|
||||
|
||||
msg_info "Starting $APP"
|
||||
systemctl start garmin-grafana
|
||||
systemctl start grafana-server
|
||||
systemctl start influxdb
|
||||
msg_ok "Started $APP"
|
||||
|
||||
msg_info "Cleaning Up"
|
||||
rm -rf /opt/garmin-grafana-backup
|
||||
msg_ok "Cleanup Completed"
|
||||
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Update Successful"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||
75
ct/gatus.sh
Normal file
75
ct/gatus.sh
Normal file
@@ -0,0 +1,75 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Slaviša Arežina (tremor021)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/TwiN/gatus
|
||||
|
||||
APP="gatus"
|
||||
var_tags="${var_tags:-monitoring}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /opt/gatus ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||
msg_info "Updating $APP"
|
||||
|
||||
msg_info "Stopping $APP"
|
||||
systemctl stop gatus
|
||||
msg_ok "Stopped $APP"
|
||||
|
||||
msg_info "Updating $APP to v${RELEASE}"
|
||||
mv /opt/gatus/config/config.yaml /opt
|
||||
rm -rf /opt/gatus/*
|
||||
temp_file=$(mktemp)
|
||||
curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||
tar zxf "$temp_file" --strip-components=1 -C /opt/gatus
|
||||
cd /opt/gatus
|
||||
$STD go mod tidy
|
||||
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus .
|
||||
setcap CAP_NET_RAW+ep gatus
|
||||
mv /opt/config.yaml config
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated $APP to v${RELEASE}"
|
||||
|
||||
msg_info "Starting $APP"
|
||||
systemctl start gatus
|
||||
msg_ok "Started $APP"
|
||||
|
||||
msg_info "Cleaning Up"
|
||||
rm -f "$temp_file"
|
||||
msg_ok "Cleanup Completed"
|
||||
|
||||
msg_ok "Update Successful"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
||||
@@ -1,75 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: CrazyWolf13
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/arunavo4/gitea-mirror
|
||||
|
||||
APP="gitea-mirror"
|
||||
var_tags="${var_tags:-arr;dashboard}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/homarr ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/homarr-labs/homarr/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 Services (Patience)"
|
||||
systemctl stop homarr
|
||||
msg_ok "Services Stopped"
|
||||
|
||||
msg_info "Backup Data"
|
||||
mkdir -p /opt/homarr-data-backup
|
||||
cp /opt/homarr/.env /opt/homarr-data-backup/.env
|
||||
msg_ok "Backup Data"
|
||||
|
||||
msg_info "Updating and rebuilding ${APP} to v${RELEASE} (Patience)"
|
||||
export BUN_INSTALL=/opt/bun
|
||||
curl -fsSL https://bun.sh/install | bash
|
||||
ln -sf /opt/bun/bin/bun /usr/local/bin/bun
|
||||
ln -sf /opt/bun/bin/bun /usr/local/bin/bunx
|
||||
bun --version
|
||||
|
||||
apt install -y git
|
||||
git clone https://github.com/arunavo4/gitea-mirror.git
|
||||
cd /opt/gitea-mirror
|
||||
bun install
|
||||
bun run build
|
||||
bun run manage-db init
|
||||
|
||||
|
||||
install_node_and_modules
|
||||
rm -rf /opt/homarr
|
||||
fetch_and_deploy_gh_release "homarr-labs/homarr"
|
||||
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7575${CL}"
|
||||
6
ct/headers/alpine-bitmagnet
Normal file
6
ct/headers/alpine-bitmagnet
Normal file
@@ -0,0 +1,6 @@
|
||||
___ __ _ __ _ __ __
|
||||
/ | / /___ (_)___ ___ / /_ (_) /_____ ___ ____ _____ _____ ___ / /_
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ __ \/ / __/ __ `__ \/ __ `/ __ `/ __ \/ _ \/ __/
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ /_/ / / /_/ / / / / / /_/ / /_/ / / / / __/ /_
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_.___/_/\__/_/ /_/ /_/\__,_/\__, /_/ /_/\___/\__/
|
||||
/_/ /____/
|
||||
@@ -1,6 +0,0 @@
|
||||
__ _ __
|
||||
____ _/ /___ (_)___ ___ / /_ ____ ____ ___ ____ ___________
|
||||
/ __ `/ / __ \/ / __ \/ _ \______/ __ \/ __ \/ __ `__ \/ __ `/ ___/ ___/
|
||||
/ /_/ / / /_/ / / / / / __/_____/ / / / /_/ / / / / / / /_/ / / / /
|
||||
\__,_/_/ .___/_/_/ /_/\___/ /_/ /_/\____/_/ /_/ /_/\__,_/_/ /_/
|
||||
/_/
|
||||
6
ct/headers/ampache
Normal file
6
ct/headers/ampache
Normal file
@@ -0,0 +1,6 @@
|
||||
___ __
|
||||
/ | ____ ___ ____ ____ ______/ /_ ___
|
||||
/ /| | / __ `__ \/ __ \/ __ `/ ___/ __ \/ _ \
|
||||
/ ___ |/ / / / / / /_/ / /_/ / /__/ / / / __/
|
||||
/_/ |_/_/ /_/ /_/ .___/\__,_/\___/_/ /_/\___/
|
||||
/_/
|
||||
@@ -1,6 +0,0 @@
|
||||
___
|
||||
/ | _________ ___ _______
|
||||
/ /| | / ___/ __ `/ / / / ___/
|
||||
/ ___ |/ / / /_/ / /_/ (__ )
|
||||
/_/ |_/_/ \__, /\__,_/____/
|
||||
/____/
|
||||
6
ct/headers/asterisk
Normal file
6
ct/headers/asterisk
Normal file
@@ -0,0 +1,6 @@
|
||||
___ __ _ __
|
||||
/ | _____/ /____ _____(_)____/ /__
|
||||
/ /| | / ___/ __/ _ \/ ___/ / ___/ //_/
|
||||
/ ___ |(__ ) /_/ __/ / / (__ ) ,<
|
||||
/_/ |_/____/\__/\___/_/ /_/____/_/|_|
|
||||
|
||||
6
ct/headers/authentik
Normal file
6
ct/headers/authentik
Normal file
@@ -0,0 +1,6 @@
|
||||
___ __ __ __ _ __
|
||||
/ | __ __/ /_/ /_ ___ ____ / /_(_) /__
|
||||
/ /| |/ / / / __/ __ \/ _ \/ __ \/ __/ / //_/
|
||||
/ ___ / /_/ / /_/ / / / __/ / / / /_/ / ,<
|
||||
/_/ |_\__,_/\__/_/ /_/\___/_/ /_/\__/_/_/|_|
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
____ __ ____ __ __
|
||||
/ __ )____ _/ /_ __ __/ __ )__ ______/ /___/ /_ __
|
||||
/ __ / __ `/ __ \/ / / / / __ / / / / __ / __ / / / /
|
||||
/ /_/ / /_/ / /_/ / /_/ / / /_/ / /_/ / /_/ / /_/ / /_/ /
|
||||
/_____/\__,_/_.___/\__, / /_____/\__,_/\__,_/\__,_/\__, /
|
||||
/ __ / __ `/ __ \/ / / / __ / / / / __ / __ / / / /
|
||||
/ /_/ / /_/ / /_/ / /_/ / /_/ / /_/ / /_/ / /_/ / /_/ /
|
||||
/_____/\__,_/_.___/\__, /_____/\__,_/\__,_/\__,_/\__, /
|
||||
/____/ /____/
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
____ __ __
|
||||
/ __ )____ ______/ /__________ _____/ /_
|
||||
/ __ / __ `/ ___/ //_/ ___/ _ \/ ___/ __/
|
||||
/ /_/ / /_/ / /__/ ,< / / / __(__ ) /_
|
||||
/_____/\__,_/\___/_/|_/_/ \___/____/\__/
|
||||
|
||||
6
ct/headers/bookstack
Normal file
6
ct/headers/bookstack
Normal file
@@ -0,0 +1,6 @@
|
||||
____ __ __ __
|
||||
/ __ )____ ____ / /_______/ /_____ ______/ /__
|
||||
/ __ / __ \/ __ \/ //_/ ___/ __/ __ `/ ___/ //_/
|
||||
/ /_/ / /_/ / /_/ / ,< (__ ) /_/ /_/ / /__/ ,<
|
||||
/_____/\____/\____/_/|_/____/\__/\__,_/\___/_/|_|
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
______ _____
|
||||
/ ____/___ ____ / __(_)___ _____ ___________
|
||||
/ / / __ \/ __ \/ /_/ / __ `/ __ `/ ___/ ___/
|
||||
/ /___/ /_/ / / / / __/ / /_/ / /_/ / / / /
|
||||
\____/\____/_/ /_/_/ /_/\__, /\__,_/_/ /_/
|
||||
/____/
|
||||
@@ -1,6 +0,0 @@
|
||||
_ ____
|
||||
____ _____ __________ ___ (_)___ ____ __________ _/ __/___ _____ ____ _
|
||||
/ __ `/ __ `/ ___/ __ `__ \/ / __ \______/ __ `/ ___/ __ `/ /_/ __ `/ __ \/ __ `/
|
||||
/ /_/ / /_/ / / / / / / / / / / / /_____/ /_/ / / / /_/ / __/ /_/ / / / / /_/ /
|
||||
\__, /\__,_/_/ /_/ /_/ /_/_/_/ /_/ \__, /_/ \__,_/_/ \__,_/_/ /_/\__,_/
|
||||
/____/ /____/
|
||||
6
ct/headers/gatus
Normal file
6
ct/headers/gatus
Normal file
@@ -0,0 +1,6 @@
|
||||
__
|
||||
____ _____ _/ /___ _______
|
||||
/ __ `/ __ `/ __/ / / / ___/
|
||||
/ /_/ / /_/ / /_/ /_/ (__ )
|
||||
\__, /\__,_/\__/\__,_/____/
|
||||
/____/
|
||||
6
ct/headers/ghostfolio
Normal file
6
ct/headers/ghostfolio
Normal file
@@ -0,0 +1,6 @@
|
||||
________ __ ____ ___
|
||||
/ ____/ /_ ____ _____/ /_/ __/___ / (_)___
|
||||
/ / __/ __ \/ __ \/ ___/ __/ /_/ __ \/ / / __ \
|
||||
/ /_/ / / / / /_/ (__ ) /_/ __/ /_/ / / / /_/ /
|
||||
\____/_/ /_/\____/____/\__/_/ \____/_/_/\____/
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
_ __ _
|
||||
____ _(_) /____ ____ _ ____ ___ (_)_____________ _____
|
||||
/ __ `/ / __/ _ \/ __ `/_____/ __ `__ \/ / ___/ ___/ __ \/ ___/
|
||||
/ /_/ / / /_/ __/ /_/ /_____/ / / / / / / / / / / /_/ / /
|
||||
\__, /_/\__/\___/\__,_/ /_/ /_/ /_/_/_/ /_/ \____/_/
|
||||
/____/
|
||||
@@ -1,6 +1,6 @@
|
||||
__
|
||||
/ /_ ____ ____ ___ ____ ___________
|
||||
/ __ \/ __ \/ __ `__ \/ __ `/ ___/ ___/
|
||||
/ / / / /_/ / / / / / / /_/ / / / /
|
||||
__ __
|
||||
/ / / /___ ____ ___ ____ ___________
|
||||
/ /_/ / __ \/ __ `__ \/ __ `/ ___/ ___/
|
||||
/ __ / /_/ / / / / / / /_/ / / / /
|
||||
/_/ /_/\____/_/ /_/ /_/\__,_/_/ /_/
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
__ __ ___ _ __ __ ______
|
||||
/ / / /___ ____ ___ ___ / | __________(_)____/ /_____ _____ / /_ / ____/___ ________
|
||||
/ /_/ / __ \/ __ `__ \/ _ \ / /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/ / / / __ \/ ___/ _ \
|
||||
/ __ / /_/ / / / / / / __/ / ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_ / /___/ /_/ / / / __/
|
||||
/ /_/ / __ \/ __ `__ \/ _ \ / /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/_____/ / / __ \/ ___/ _ \
|
||||
/ __ / /_/ / / / / / / __/ / ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_/_____/ /___/ /_/ / / / __/
|
||||
/_/ /_/\____/_/ /_/ /_/\___/ /_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/ \____/\____/_/ \___/
|
||||
|
||||
6
ct/headers/hoodik
Normal file
6
ct/headers/hoodik
Normal file
@@ -0,0 +1,6 @@
|
||||
__ __ ___ __
|
||||
/ / / /___ ____ ____/ (_) /__
|
||||
/ /_/ / __ \/ __ \/ __ / / //_/
|
||||
/ __ / /_/ / /_/ / /_/ / / ,<
|
||||
/_/ /_/\____/\____/\__,_/_/_/|_|
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
___ __ _ __ ___ __
|
||||
/ (_) /______(_) / |/ /__ ___ / /_
|
||||
__ / / / __/ ___/ /_____/ /|_/ / _ \/ _ \/ __/
|
||||
/ /_/ / / /_(__ ) /_____/ / / / __/ __/ /_
|
||||
\____/_/\__/____/_/ /_/ /_/\___/\___/\__/
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
__ __
|
||||
/ //_/___ __________ ___
|
||||
/ ,< / __ `/ ___/ __ `__ \
|
||||
/ /| / /_/ (__ ) / / / / /
|
||||
/_/ |_\__,_/____/_/ /_/ /_/
|
||||
|
||||
6
ct/headers/koel
Normal file
6
ct/headers/koel
Normal file
@@ -0,0 +1,6 @@
|
||||
__ __ __
|
||||
/ //_/___ ___ / /
|
||||
/ ,< / __ \/ _ \/ /
|
||||
/ /| / /_/ / __/ /
|
||||
/_/ |_\____/\___/_/
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
__ _ __ ___ _ _____
|
||||
/ / __ _______(_)___ ____ / |/ /_ _______(_)____ / ___/___ ______ _____ _____
|
||||
/ / / / / / ___/ / __ \/ __ \ / /|_/ / / / / ___/ / ___/ \__ \/ _ \/ ___/ | / / _ \/ ___/
|
||||
/ /___/ /_/ / / / / /_/ / / / / / / / / /_/ (__ ) / /__ ___/ / __/ / | |/ / __/ /
|
||||
/_____/\__, /_/ /_/\____/_/ /_/ /_/ /_/\__,_/____/_/\___/ /____/\___/_/ |___/\___/_/
|
||||
/____/
|
||||
6
ct/headers/matterbridge
Normal file
6
ct/headers/matterbridge
Normal file
@@ -0,0 +1,6 @@
|
||||
__ ___ __ __ __ _ __
|
||||
/ |/ /___ _/ /_/ /____ _____/ /_ _____(_)___/ /___ ____
|
||||
/ /|_/ / __ `/ __/ __/ _ \/ ___/ __ \/ ___/ / __ / __ `/ _ \
|
||||
/ / / / /_/ / /_/ /_/ __/ / / /_/ / / / / /_/ / /_/ / __/
|
||||
/_/ /_/\__,_/\__/\__/\___/_/ /_.___/_/ /_/\__,_/\__, /\___/
|
||||
/____/
|
||||
6
ct/headers/mattermost
Normal file
6
ct/headers/mattermost
Normal file
@@ -0,0 +1,6 @@
|
||||
__ ___ __ __ __
|
||||
/ |/ /___ _/ /_/ /____ _________ ___ ____ _____/ /_
|
||||
/ /|_/ / __ `/ __/ __/ _ \/ ___/ __ `__ \/ __ \/ ___/ __/
|
||||
/ / / / /_/ / /_/ /_/ __/ / / / / / / / /_/ (__ ) /_
|
||||
/_/ /_/\__,_/\__/\__/\___/_/ /_/ /_/ /_/\____/____/\__/
|
||||
|
||||
6
ct/headers/maxun
Normal file
6
ct/headers/maxun
Normal file
@@ -0,0 +1,6 @@
|
||||
__ ___
|
||||
/ |/ /___ __ ____ ______
|
||||
/ /|_/ / __ `/ |/_/ / / / __ \
|
||||
/ / / / /_/ /> </ /_/ / / / /
|
||||
/_/ /_/\__,_/_/|_|\__,_/_/ /_/
|
||||
|
||||
6
ct/headers/netbootxyz
Normal file
6
ct/headers/netbootxyz
Normal file
@@ -0,0 +1,6 @@
|
||||
__ __ __
|
||||
____ ___ / /_/ /_ ____ ____ / /_ _ ____ ______
|
||||
/ __ \/ _ \/ __/ __ \/ __ \/ __ \/ __/ | |/_/ / / /_ /
|
||||
/ / / / __/ /_/ /_/ / /_/ / /_/ / /__ _> </ /_/ / / /_
|
||||
/_/ /_/\___/\__/_.___/\____/\____/\__(_)_/|_|\__, / /___/
|
||||
/____/
|
||||
6
ct/headers/odoo
Normal file
6
ct/headers/odoo
Normal file
@@ -0,0 +1,6 @@
|
||||
____ __
|
||||
/ __ \____/ /___ ____
|
||||
/ / / / __ / __ \/ __ \
|
||||
/ /_/ / /_/ / /_/ / /_/ /
|
||||
\____/\__,_/\____/\____/
|
||||
|
||||
6
ct/headers/openobserve
Normal file
6
ct/headers/openobserve
Normal file
@@ -0,0 +1,6 @@
|
||||
____ ____ __
|
||||
/ __ \____ ___ ____ / __ \/ /_ ________ ______ _____
|
||||
/ / / / __ \/ _ \/ __ \/ / / / __ \/ ___/ _ \/ ___/ | / / _ \
|
||||
/ /_/ / /_/ / __/ / / / /_/ / /_/ (__ ) __/ / | |/ / __/
|
||||
\____/ .___/\___/_/ /_/\____/_.___/____/\___/_/ |___/\___/
|
||||
/_/
|
||||
6
ct/headers/openproject
Normal file
6
ct/headers/openproject
Normal file
@@ -0,0 +1,6 @@
|
||||
____ ____ _ __
|
||||
/ __ \____ ___ ____ / __ \_________ (_)__ _____/ /_
|
||||
/ / / / __ \/ _ \/ __ \/ /_/ / ___/ __ \ / / _ \/ ___/ __/
|
||||
/ /_/ / /_/ / __/ / / / ____/ / / /_/ / / / __/ /__/ /_
|
||||
\____/ .___/\___/_/ /_/_/ /_/ \____/_/ /\___/\___/\__/
|
||||
/_/ /___/
|
||||
@@ -1,6 +0,0 @@
|
||||
____ _ __ __ __ ______
|
||||
/ __ \____ ___ ____ | | / /__ / /_ / / / / _/
|
||||
/ / / / __ \/ _ \/ __ \ | | /| / / _ \/ __ \/ / / // /
|
||||
/ /_/ / /_/ / __/ / / / | |/ |/ / __/ /_/ / /_/ // /
|
||||
\____/ .___/\___/_/ /_/ |__/|__/\___/_.___/\____/___/
|
||||
/_/
|
||||
6
ct/headers/paperless-ngx
Normal file
6
ct/headers/paperless-ngx
Normal file
@@ -0,0 +1,6 @@
|
||||
____ __
|
||||
/ __ \____ _____ ___ _____/ /__ __________ ____ ____ __ __
|
||||
/ /_/ / __ `/ __ \/ _ \/ ___/ / _ \/ ___/ ___/_____/ __ \/ __ `/ |/_/
|
||||
/ ____/ /_/ / /_/ / __/ / / / __(__ |__ )_____/ / / / /_/ /> <
|
||||
/_/ \__,_/ .___/\___/_/ /_/\___/____/____/ /_/ /_/\__, /_/|_|
|
||||
/_/ /____/
|
||||
6
ct/headers/pixelfed
Normal file
6
ct/headers/pixelfed
Normal file
@@ -0,0 +1,6 @@
|
||||
____ _ ______ __
|
||||
/ __ \(_) _____ / / __/__ ____/ /
|
||||
/ /_/ / / |/_/ _ \/ / /_/ _ \/ __ /
|
||||
/ ____/ /> </ __/ / __/ __/ /_/ /
|
||||
/_/ /_/_/|_|\___/_/_/ \___/\__,_/
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
____ __
|
||||
/ __ \__ __/ /_______
|
||||
/ /_/ / / / / / ___/ _ \
|
||||
/ ____/ /_/ / (__ ) __/
|
||||
/_/ \__,_/_/____/\___/
|
||||
|
||||
6
ct/headers/rclone
Normal file
6
ct/headers/rclone
Normal file
@@ -0,0 +1,6 @@
|
||||
____ __
|
||||
/ __ \_____/ /___ ____ ___
|
||||
/ /_/ / ___/ / __ \/ __ \/ _ \
|
||||
/ _, _/ /__/ / /_/ / / / / __/
|
||||
/_/ |_|\___/_/\____/_/ /_/\___/
|
||||
|
||||
6
ct/headers/roundcubemail
Normal file
6
ct/headers/roundcubemail
Normal file
@@ -0,0 +1,6 @@
|
||||
____ __ __ _ __
|
||||
/ __ \____ __ ______ ____/ /______ __/ /_ ___ ____ ___ ____ _(_) /
|
||||
/ /_/ / __ \/ / / / __ \/ __ / ___/ / / / __ \/ _ \/ __ `__ \/ __ `/ / /
|
||||
/ _, _/ /_/ / /_/ / / / / /_/ / /__/ /_/ / /_/ / __/ / / / / / /_/ / / /
|
||||
/_/ |_|\____/\__,_/_/ /_/\__,_/\___/\__,_/_.___/\___/_/ /_/ /_/\__,_/_/_/
|
||||
|
||||
6
ct/headers/squirrelserversmanager
Normal file
6
ct/headers/squirrelserversmanager
Normal file
@@ -0,0 +1,6 @@
|
||||
_____ _ __ _____ __ ___
|
||||
/ ___/____ ___ __(_)____________ / / / ___/___ ______ _____ __________ / |/ /___ _____ ____ _____ ____ _____
|
||||
\__ \/ __ `/ / / / / ___/ ___/ _ \/ / \__ \/ _ \/ ___/ | / / _ \/ ___/ ___/ / /|_/ / __ `/ __ \/ __ `/ __ `/ _ \/ ___/
|
||||
___/ / /_/ / /_/ / / / / / / __/ / ___/ / __/ / | |/ / __/ / (__ ) / / / / /_/ / / / / /_/ / /_/ / __/ /
|
||||
/____/\__, /\__,_/_/_/ /_/ \___/_/ /____/\___/_/ |___/\___/_/ /____/ /_/ /_/\__,_/_/ /_/\__,_/\__, /\___/_/
|
||||
/_/ /____/
|
||||
6
ct/headers/streamlink-webui
Normal file
6
ct/headers/streamlink-webui
Normal file
@@ -0,0 +1,6 @@
|
||||
__ ___ __ __ _
|
||||
_____/ /_________ ____ _____ ___ / (_)___ / /__ _ _____ / /_ __ __(_)
|
||||
/ ___/ __/ ___/ _ \/ __ `/ __ `__ \/ / / __ \/ //_/____| | /| / / _ \/ __ \/ / / / /
|
||||
(__ ) /_/ / / __/ /_/ / / / / / / / / / / / ,< /_____/ |/ |/ / __/ /_/ / /_/ / /
|
||||
/____/\__/_/ \___/\__,_/_/ /_/ /_/_/_/_/ /_/_/|_| |__/|__/\___/_.___/\__,_/_/
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||
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
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://homarr.dev/
|
||||
|
||||
APP="homarr"
|
||||
APP="Homarr"
|
||||
var_tags="${var_tags:-arr;dashboard}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
@@ -124,9 +124,7 @@ EOF
|
||||
fetch_and_deploy_gh_release "homarr-labs/homarr"
|
||||
mv /opt/homarr-data-backup/.env /opt/homarr/.env
|
||||
cd /opt/homarr
|
||||
echo "test2"
|
||||
export NODE_ENV=""
|
||||
$STD pnpm install --recursive --frozen-lockfile --shamefully-hoist
|
||||
$STD pnpm install
|
||||
$STD pnpm build
|
||||
cp /opt/homarr/apps/nextjs/next.config.ts .
|
||||
cp /opt/homarr/apps/nextjs/package.json .
|
||||
|
||||
170
ct/homeassistant-core.sh
Normal file
170
ct/homeassistant-core.sh
Normal file
@@ -0,0 +1,170 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: tteck (tteckster) | Co-Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://www.home-assistant.io/
|
||||
|
||||
APP="Home Assistant-Core"
|
||||
var_tags="${var_tags:-automation;smarthome}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-10}"
|
||||
var_os="${var_os:-ubuntu}"
|
||||
var_version="${var_version:-24.10}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
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"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /srv/homeassistant ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit 1
|
||||
fi
|
||||
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"
|
||||
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"
|
||||
$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 5
|
||||
msg_ok "Started Home Assistant"
|
||||
msg_ok "Update Successful"
|
||||
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 /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
|
||||
msg_info "Installing FileBrowser"
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/filebrowser/filebrowser/releases/latest | grep -o '"tag_name": ".*"' | sed 's/"//g' | sed 's/tag_name: //g')
|
||||
$STD curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/$RELEASE/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin
|
||||
|
||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
$STD filebrowser config init -a '0.0.0.0'
|
||||
$STD filebrowser config set -a '0.0.0.0'
|
||||
$STD filebrowser config set --auth.method=noauth
|
||||
$STD filebrowser users add ID 1 --perm.admin
|
||||
else
|
||||
$STD filebrowser config init -a '0.0.0.0'
|
||||
$STD filebrowser config set -a '0.0.0.0'
|
||||
$STD filebrowser users add admin helper-scripts.com --perm.admin
|
||||
fi
|
||||
msg_ok "Installed FileBrowser"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/filebrowser.service
|
||||
[Unit]
|
||||
Description=Filebrowser
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
User=root
|
||||
WorkingDirectory=/root/
|
||||
ExecStart=/usr/local/bin/filebrowser -r /root/.homeassistant
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
EOF
|
||||
|
||||
systemctl enable --now -q filebrowser.service
|
||||
msg_ok "Created Service"
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "FileBrowser should be reachable by going to the following URL.
|
||||
${BL}http://$IP:8080${CL} admin|helper-scripts.com\n"
|
||||
exit
|
||||
fi
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8123${CL}"
|
||||
44
ct/immich.sh
44
ct/immich.sh
@@ -46,13 +46,13 @@ function update_script() {
|
||||
rm ~/Dockerfile
|
||||
fi
|
||||
if [[ -f ~/.immich_library_revisions ]]; then
|
||||
libraries=("libjxl" "libheif" "libraw" "imagemagick" "libvips")
|
||||
readarray -d '' NEW_REVISIONS < <(for library in "${libraries[@]}"; do
|
||||
echo "$library: $(curl -fsSL https://raw.githubusercontent.com/immich-app/base-images/refs/heads/main/server/sources/"$library".json | jq -cr '.revision' -)"
|
||||
curl -fsSLO https://raw.githubusercontent.com/immich-app/base-images/refs/heads/main/server/bin/build-lock.json
|
||||
jq -cr '.sources[].revision' ./build-lock.json >~/.new_revisions
|
||||
readarray -t UPDATED_REVISIONS < <(comm -13 <(sort ~/.immich_library_revisions) <(sort ~/.new_revisions))
|
||||
if [[ "${#UPDATED_REVISIONS[@]}" -gt 0 ]]; then
|
||||
readarray -t NAMES < <(for revision in "${UPDATED_REVISIONS[@]}"; do
|
||||
jq -cr --arg jq_revision "$revision" '.sources[] | select(.revision == $jq_revision).name' ./build-lock.json
|
||||
done)
|
||||
UPDATED_REVISIONS="$(comm -13 <(sort ~/.immich_library_revisions) <(echo -n "${NEW_REVISIONS[@]}" | sort))"
|
||||
if [[ "$UPDATED_REVISIONS" ]]; then
|
||||
readarray -t NAMES < <(echo "$UPDATED_REVISIONS" | awk -F ':' '{print $1}')
|
||||
rm -rf "$SOURCE_DIR"
|
||||
mkdir -p "$SOURCE_DIR"
|
||||
cd "$BASE_DIR"
|
||||
@@ -64,13 +64,13 @@ function update_script() {
|
||||
SOURCE=${SOURCE_DIR}/libjxl
|
||||
JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62"
|
||||
JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0"
|
||||
: "${LIBJXL_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libjxl.json)}"
|
||||
: "${LIBJXL_REVISION:=$(jq -cr '.sources[] | select(.name == "libjxl").revision' $BASE_DIR/server/bin/build-lock.json)}"
|
||||
$STD git clone https://github.com/libjxl/libjxl.git "$SOURCE"
|
||||
cd "$SOURCE"
|
||||
$STD git reset --hard "$LIBJXL_REVISION"
|
||||
$STD git submodule update --init --recursive --depth 1 --recommend-shallow
|
||||
$STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-empty-dht-marker.patch
|
||||
$STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-icc-warning.patch
|
||||
$STD git apply "$BASE_DIR"/server/bin/patches/jpegli-empty-dht-marker.patch
|
||||
$STD git apply "$BASE_DIR"/server/bin/patches/jpegli-icc-warning.patch
|
||||
mkdir build
|
||||
cd build
|
||||
$STD cmake \
|
||||
@@ -102,7 +102,7 @@ function update_script() {
|
||||
if [[ "$name" == "libheif" ]]; then
|
||||
msg_info "Recompiling libheif"
|
||||
SOURCE=${SOURCE_DIR}/libheif
|
||||
: "${LIBHEIF_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libheif.json)}"
|
||||
: "${LIBHEIF_REVISION:=$(jq -cr '.sources[] | select(.name == "libheif").revision' $BASE_DIR/server/bin/build-lock.json)}"
|
||||
$STD git clone https://github.com/strukturag/libheif.git "$SOURCE"
|
||||
cd "$SOURCE"
|
||||
$STD git reset --hard "$LIBHEIF_REVISION"
|
||||
@@ -128,7 +128,7 @@ function update_script() {
|
||||
if [[ "$name" == "libraw" ]]; then
|
||||
msg_info "Recompiling libraw"
|
||||
SOURCE=${SOURCE_DIR}/libraw
|
||||
: "${LIBRAW_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libraw.json)}"
|
||||
: "${LIBRAW_REVISION:=$(jq -cr '.sources[] | select(.name == "libraw").revision' $BASE_DIR/server/bin/build-lock.json)}"
|
||||
$STD git clone https://github.com/libraw/libraw.git "$SOURCE"
|
||||
cd "$SOURCE"
|
||||
$STD git reset --hard "$LIBRAW_REVISION"
|
||||
@@ -144,7 +144,7 @@ function update_script() {
|
||||
if [[ "$name" == "imagemagick" ]]; then
|
||||
msg_info "Recompiling ImageMagick"
|
||||
SOURCE=$SOURCE_DIR/imagemagick
|
||||
: "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/imagemagick.json)}"
|
||||
: "${IMAGEMAGICK_REVISION:=$(jq -cr '.sources[] | select(.name == "imagemagick").revision' $BASE_DIR/server/bin/build-lock.json)}"
|
||||
$STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE"
|
||||
cd "$SOURCE"
|
||||
$STD git reset --hard "$IMAGEMAGICK_REVISION"
|
||||
@@ -159,7 +159,7 @@ function update_script() {
|
||||
if [[ "$name" == "libvips" ]]; then
|
||||
msg_info "Recompiling libvips"
|
||||
SOURCE=$SOURCE_DIR/libvips
|
||||
: "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}"
|
||||
: "${LIBVIPS_REVISION:=$(jq -cr '.sources[] | select(.name == "libvips").revision' $BASE_DIR/server/bin/build-lock.json)}"
|
||||
$STD git clone https://github.com/libvips/libvips.git "$SOURCE"
|
||||
cd "$SOURCE"
|
||||
$STD git reset --hard "$LIBVIPS_REVISION"
|
||||
@@ -172,9 +172,10 @@ function update_script() {
|
||||
msg_ok "Recompiled libvips"
|
||||
fi
|
||||
done
|
||||
echo -n "${NEW_REVISIONS[@]}" >~/.immich_library_revisions
|
||||
mv ~/.new_revisions ~/.immich_library_revisions
|
||||
msg_ok "Image-processing libraries compiled"
|
||||
fi
|
||||
rm ~/build-lock.json
|
||||
fi
|
||||
RELEASE=$(curl -s https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||
@@ -182,18 +183,6 @@ function update_script() {
|
||||
systemctl stop immich-web
|
||||
systemctl stop immich-ml
|
||||
msg_ok "Stopped ${APP}"
|
||||
if [[ "$(cat /opt/${APP}_version.txt)" < "1.133.0" ]]; then
|
||||
msg_info "Upgrading to the VectorChord PostgreSQL extension"
|
||||
$STD apt-get update
|
||||
$STD apt-get install postgresql-16-pgvector -y
|
||||
curl -fsSL https://github.com/tensorchord/VectorChord/releases/download/0.3.0/postgresql-16-vchord_0.3.0-1_amd64.deb -o vchord.deb
|
||||
$STD dpkg -i vchord.deb
|
||||
rm vchord.deb
|
||||
sed -i -e "s/'vectors.so'/'vchord.so, vectors.so'/" \
|
||||
-e "/^search_path/s/, vectors//" /etc/postgresql/16/main/postgresql.conf
|
||||
systemctl restart postgresql.service
|
||||
msg_ok "Upgrade in progress. When Immich restarts, watch the logs for 're-indexing' to complete"
|
||||
fi
|
||||
INSTALL_DIR="/opt/${APP}"
|
||||
UPLOAD_DIR="${INSTALL_DIR}/upload"
|
||||
SRC_DIR="${INSTALL_DIR}/source"
|
||||
@@ -224,6 +213,7 @@ function update_script() {
|
||||
cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/
|
||||
cp -a web/build "$APP_DIR"/www
|
||||
cp LICENSE "$APP_DIR"
|
||||
cp "$BASE_DIR"/server/bin/build-lock.json "$APP_DIR"
|
||||
msg_ok "Updated ${APP} web and microservices"
|
||||
|
||||
cd "$SRC_DIR"/machine-learning
|
||||
@@ -267,8 +257,6 @@ function update_script() {
|
||||
$STD npm i -g @immich/cli
|
||||
msg_ok "Updated Immich CLI"
|
||||
|
||||
sed -i "s|pgvecto.rs|vectorchord|" /opt/"${APP}"/.env
|
||||
|
||||
chown -R immich:immich "$INSTALL_DIR"
|
||||
echo "$RELEASE" >/opt/"${APP}"_version.txt
|
||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||
|
||||
@@ -6,15 +6,19 @@ source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/
|
||||
|
||||
## App Default Values
|
||||
APP="Koel"
|
||||
var_tags="${var_tags:-music}"
|
||||
var_tags="${var_tags:-music;player;homelab}"
|
||||
var_disk="${var_disk:-9}"
|
||||
var_cpu="${var_cpu:-3}"
|
||||
var_ram="${var_ram:-3072}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
var_verbose="${var_verbose:-yes}"
|
||||
|
||||
# App Output & Base Settings
|
||||
header_info "$APP"
|
||||
base_settings
|
||||
|
||||
# Core
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
@@ -38,7 +38,7 @@ function update_script() {
|
||||
|
||||
start
|
||||
build_container
|
||||
desiption
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/refs/heads/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Omar Minaya
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://lyrion.org/getting-started/
|
||||
|
||||
APP="Lyrion Music Server"
|
||||
var_tags="${var_tags:-media}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-3}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -f /lib/systemd/system/lyrionmusicserver.service ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
DEB_URL=$(curl -s 'https://lyrion.org/getting-started/' | grep -oP '<a\s[^>]*href="\K[^"]*amd64\.deb(?="[^>]*>)' | head -n 1)
|
||||
RELEASE=$(echo "$DEB_URL" | grep -oP 'lyrionmusicserver_\K[0-9.]+(?=_amd64\.deb)')
|
||||
DEB_FILE="/tmp/lyrionmusicserver_${RELEASE}_amd64.deb"
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
msg_info "Updating $APP to ${RELEASE}"
|
||||
curl -fsSL -o "$DEB_FILE" "$DEB_URL"
|
||||
$STD apt install "$DEB_FILE" -y
|
||||
systemctl restart lyrion
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated $APP to ${RELEASE}"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD rm -f "$DEB_FILE"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
else
|
||||
msg_ok "$APP is already up to date (${RELEASE})"
|
||||
fi
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access the web interface at:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9000${CL}"
|
||||
echo -e "${INFO}${YW} Check logs for setup details: ~/lyrion-install.log${CL}"
|
||||
45
ct/matterbridge.sh
Normal file
45
ct/matterbridge.sh
Normal file
@@ -0,0 +1,45 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: MickLesk (Canbiz)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/Luligu/matterbridge
|
||||
|
||||
APP="Matterbridge"
|
||||
var_tags="${var_tags:-matter;smarthome}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /root/Matterbridge ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
$STD apt-get update
|
||||
$STD apt-get upgrade -y
|
||||
NODE_VERSION="22"
|
||||
NODE_MODULE="matterbridge"
|
||||
install_node_and_modules
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8283${CL}"
|
||||
50
ct/mattermost.sh
Normal file
50
ct/mattermost.sh
Normal file
@@ -0,0 +1,50 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/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
|
||||
|
||||
APP="Mattermost"
|
||||
var_disk="${var_disk:-10}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
if [[ ! -d /opt/mattermost ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
|
||||
RELEASE=$(curl -s https://api.github.com/repos/xxxx/xxxx/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
msg_info "Stopping App"
|
||||
systemctl stop xxxx
|
||||
msg_ok "App Stopped"
|
||||
|
||||
msg_info "Updating App"
|
||||
#
|
||||
msg_ok "Updated App"
|
||||
|
||||
msg_info "Starting App"
|
||||
systemctl start App
|
||||
msg_ok "Started App"
|
||||
|
||||
msg_info "Cleaning Up"
|
||||
#rm -rf
|
||||
msg_ok "Cleaned"
|
||||
msg_ok "Updated Successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${APP} Setup should be reachable by going to the following URL.
|
||||
${BL}http://${IP}:8086${CL} \n"
|
||||
71
ct/odoo.sh
Normal file
71
ct/odoo.sh
Normal file
@@ -0,0 +1,71 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/odoo/odoo
|
||||
|
||||
APP="Odoo"
|
||||
# shellcheck disable=SC2034
|
||||
var_tags="${var_tags:-erp}"
|
||||
var_disk="${var_disk:-6}"
|
||||
var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /opt/odoo ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
RELEASE="17.0"
|
||||
if [[ ! -f /opt/odoo_version.txt ]] || [[ "$RELEASE" != "$(cat /opt/odoo_version.txt)" ]]; then
|
||||
msg_info "Stopping ${APP} service"
|
||||
systemctl stop odoo
|
||||
msg_ok "Stopped ${APP}"
|
||||
|
||||
msg_info "Updating ${APP} to ${RELEASE}"
|
||||
cd /opt
|
||||
rm -rf odoo_bak
|
||||
mv odoo odoo_bak
|
||||
git clone --depth 1 --branch "$RELEASE" https://github.com/odoo/odoo.git /opt/odoo/odoo
|
||||
cd /opt/odoo
|
||||
/opt/odoo/venv/bin/pip install -r /opt/odoo/odoo/requirements.txt
|
||||
echo "$RELEASE" >/opt/odoo_version.txt
|
||||
msg_ok "Updated ${APP} to ${RELEASE}"
|
||||
|
||||
msg_info "Starting ${APP} service"
|
||||
systemctl start odoo
|
||||
msg_ok "Started ${APP}"
|
||||
|
||||
msg_info "Cleaning Up"
|
||||
rm -rf /opt/odoo_bak
|
||||
msg_ok "Cleaned"
|
||||
|
||||
msg_ok "Updated Successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8069${CL}"
|
||||
46
ct/openobserve.sh
Normal file
46
ct/openobserve.sh
Normal file
@@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://openobserve.ai/
|
||||
|
||||
APP="OpenObserve"
|
||||
var_tags="${var_tags:-monitoring}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-3}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/openobserve/ ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating $APP"
|
||||
systemctl stop openobserve
|
||||
LATEST=$(curl -fsSL https://api.github.com/repos/openobserve/openobserve/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
|
||||
tar zxvf <(curl -fsSL https://github.com/openobserve/openobserve/releases/download/$LATEST/openobserve-${LATEST}-linux-amd64.tar.gz) -C /opt/openobserve
|
||||
systemctl start openobserve
|
||||
msg_ok "Updated $APP"
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5080${CL}"
|
||||
@@ -1,20 +1,18 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||
source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Omar Minaya
|
||||
# Author: michelroegl-brunner
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://www.kasmweb.com/docs/latest/index.html
|
||||
# Source: https://github.com/opf/openproject
|
||||
|
||||
APP="Kasm"
|
||||
var_tags="${var_tags:-os}"
|
||||
APP="OpenProject"
|
||||
var_tags="${var_tags:-project-management,erp}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4192}"
|
||||
var_disk="${var_disk:-30}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
var_fuse="${var_fuse:-yes}"
|
||||
var_tun="${var_tun:-yes}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
@@ -25,15 +23,15 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /var ]]; then
|
||||
if [[ ! -f /etc/openproject/installer.dat ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating $APP LXC"
|
||||
msg_info "Updating ${APP}"
|
||||
$STD apt-get update
|
||||
$STD apt-get -y upgrade
|
||||
msg_ok "Updated $APP LXC"
|
||||
exit
|
||||
$STD apt-get install --only-upgrade -y openproject
|
||||
msg_ok "Updated ${APP}"
|
||||
exit 0
|
||||
}
|
||||
|
||||
start
|
||||
@@ -43,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}https://${IP}${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}/openproject${CL}"
|
||||
@@ -1,73 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: havardthom
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://openwebui.com/
|
||||
|
||||
APP="Open WebUI"
|
||||
var_tags="${var_tags:-ai;interface}"
|
||||
var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-8192}"
|
||||
var_disk="${var_disk:-25}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/open-webui ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ -x "/usr/bin/ollama" ]; then
|
||||
msg_info "Updating Ollama"
|
||||
OLLAMA_VERSION=$(ollama -v | awk '{print $NF}')
|
||||
RELEASE=$(curl -s https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
|
||||
if [ "$OLLAMA_VERSION" != "$RELEASE" ]; then
|
||||
curl -fsSLO https://ollama.com/download/ollama-linux-amd64.tgz
|
||||
tar -C /usr -xzf ollama-linux-amd64.tgz
|
||||
rm -rf ollama-linux-amd64.tgz
|
||||
msg_ok "Ollama updated to version $RELEASE"
|
||||
else
|
||||
msg_ok "Ollama is already up to date."
|
||||
fi
|
||||
fi
|
||||
|
||||
msg_info "Updating ${APP} (Patience)"
|
||||
systemctl stop open-webui.service
|
||||
mkdir -p /opt/openwebui-backup
|
||||
cp -rf /opt/openwebui/backend/data /opt/openwebui-backup
|
||||
cp /opt/openwebui/.env /opt
|
||||
rm -rf /opt/openwebui
|
||||
fetch_and_deploy_gh_release "open-webui/open-webui"
|
||||
cd /opt/openwebui
|
||||
$STD npm install
|
||||
export NODE_OPTIONS="--max-old-space-size=3584"
|
||||
sed -i "s/git rev-parse HEAD/openssl rand -hex 20/g" /opt/openwebui/svelte.config.js
|
||||
$STD npm run build
|
||||
cd ./backend
|
||||
$STD pip install -r requirements.txt -U
|
||||
cp -rf /opt/openwebui-backup/* /opt/openwebui/backend
|
||||
mv /opt/.env /opt/openwebui/
|
||||
systemctl start open-webui.service
|
||||
msg_ok "Updated Successfully"
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
||||
129
ct/paperless-ngx.sh
Normal file
129
ct/paperless-ngx.sh
Normal file
@@ -0,0 +1,129 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://docs.paperless-ngx.com/
|
||||
|
||||
APP="Paperless-ngx"
|
||||
var_tags="${var_tags:-document;management}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-10}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/paperless ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||
msg_info "Stopping Paperless services"
|
||||
systemctl stop paperless-{webserver,scheduler,task-queue,consumer}
|
||||
msg_ok "Stopped Paperless services"
|
||||
|
||||
BACKUP_DIR="/opt/paperless-backup-$(date +%F_%T | tr ':' '-')"
|
||||
|
||||
MIGRATION_NEEDED=0
|
||||
if ! command -v uv &>/dev/null || [[ ! -d /opt/paperless/.venv ]]; then
|
||||
MIGRATION_NEEDED=1
|
||||
msg_info "uv not found or missing venv, migrating..."
|
||||
setup_uv
|
||||
$STD uv venv /opt/paperless/.venv
|
||||
source /opt/paperless/.venv/bin/activate
|
||||
$STD uv sync --all-extras
|
||||
fi
|
||||
|
||||
BACKUP_DIR="/opt/paperless-backup-$(date +%F_%T | tr ':' '-')"
|
||||
|
||||
setup_gs
|
||||
setup_uv
|
||||
|
||||
msg_info "Backing up Paperless folders"
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
for d in consume data media; do
|
||||
[[ -d "/opt/paperless/$d" ]] && mv "/opt/paperless/$d" "$BACKUP_DIR/"
|
||||
done
|
||||
[[ -f "/opt/paperless/paperless.conf" ]] && cp "/opt/paperless/paperless.conf" "$BACKUP_DIR/"
|
||||
msg_ok "Backup completed to $BACKUP_DIR"
|
||||
|
||||
msg_info "Updating PaperlessNGX"
|
||||
RELEASE=$(curl -fsSL "https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest" | grep 'tag_name' | cut -d '"' -f4)
|
||||
cd /tmp
|
||||
curl -fsSL "https://github.com/paperless-ngx/paperless-ngx/releases/download/$RELEASE/paperless-ngx-$RELEASE.tar.xz" -o paperless.tar.xz
|
||||
tar -xf paperless.tar.xz
|
||||
cp -r paperless-ngx/* /opt/paperless/
|
||||
rm -rf paperless.tar.xz paperless-ngx
|
||||
echo "$RELEASE" >/opt/paperless/Paperless-ngx_version.txt
|
||||
msg_ok "Updated Paperless-ngx to $RELEASE"
|
||||
|
||||
for d in consume data media; do
|
||||
[[ -d "$BACKUP_DIR/$d" ]] && mv "$BACKUP_DIR/$d" "/opt/paperless/"
|
||||
done
|
||||
[[ ! -f "/opt/paperless/paperless.conf" && -f "$BACKUP_DIR/paperless.conf" ]] && cp "$BACKUP_DIR/paperless.conf" "/opt/paperless/paperless.conf"
|
||||
$STD uv venv /opt/paperless/.venv
|
||||
source /opt/paperless/.venv/bin/activate
|
||||
echo -e "source done"
|
||||
$STD uv sync --all-extras
|
||||
echo -e "uv sync done"
|
||||
source /opt/paperless/paperless.conf
|
||||
$STD /opt/paperless/.venv/bin/python3 /opt/paperless/src/manage.py migrate
|
||||
|
||||
if [[ "$MIGRATION_NEEDED" == 1 ]]; then
|
||||
cat <<EOF >/etc/default/paperless
|
||||
PYTHONDONTWRITEBYTECODE=1
|
||||
PYTHONUNBUFFERED=1
|
||||
PNGX_CONTAINERIZED=0
|
||||
UV_LINK_MODE=copy
|
||||
EOF
|
||||
|
||||
for svc in /etc/systemd/system/paperless-*.service; do
|
||||
sed -i \
|
||||
-e "s|^ExecStart=.*manage.py|ExecStart=/opt/paperless/.venv/bin/python3 manage.py|" \
|
||||
-e "s|^ExecStart=.*celery|ExecStart=/opt/paperless/.venv/bin/celery|" \
|
||||
-e "s|^ExecStart=.*granian|ExecStart=/opt/paperless/.venv/bin/granian|" \
|
||||
-e "/^WorkingDirectory=/a EnvironmentFile=/etc/default/paperless" "$svc"
|
||||
done
|
||||
fi
|
||||
|
||||
systemctl daemon-reexec
|
||||
systemctl daemon-reload
|
||||
|
||||
msg_info "Starting Paperless services"
|
||||
systemctl start paperless-{webserver,scheduler,task-queue,consumer}.service
|
||||
sleep 1
|
||||
msg_ok "All services restarted"
|
||||
msg_ok "Updated Successfully!\n"
|
||||
read -r -p "Remove backup directory at $BACKUP_DIR? [y/N]: " CLEANUP
|
||||
if [[ "$CLEANUP" =~ ^[Yy]$ ]]; then
|
||||
rm -rf "$BACKUP_DIR"
|
||||
msg_ok "Backup directory removed"
|
||||
else
|
||||
msg_info "Backup directory retained at $BACKUP_DIR"
|
||||
fi
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"
|
||||
79
ct/pulse.sh
79
ct/pulse.sh
@@ -1,79 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: rcourtman
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://github.com/rcourtman/Pulse
|
||||
|
||||
APP="Pulse"
|
||||
var_tags="monitoring;proxmox"
|
||||
var_cpu="1"
|
||||
var_ram="1024"
|
||||
var_disk="4"
|
||||
var_os="debian"
|
||||
var_version="12"
|
||||
var_unprivileged="1"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/pulse-proxmox ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/rcourtman/Pulse/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 pulse-monitor
|
||||
msg_ok "Stopped ${APP}"
|
||||
|
||||
msg_info "Updating Pulse"
|
||||
if [[ -f /opt/pulse-proxmox/.env ]]; then
|
||||
cp /opt/pulse-proxmox/.env /tmp/.env.backup.pulse
|
||||
fi
|
||||
temp_file=$(mktemp)
|
||||
mkdir -p /opt/pulse-proxmox
|
||||
rm -rf /opt/pulse-proxmox/*
|
||||
curl -fsSL "https://github.com/rcourtman/Pulse/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||
tar zxf "$temp_file" --strip-components=1 -C /opt/pulse-proxmox
|
||||
if [[ -f /tmp/.env.backup.pulse ]]; then
|
||||
mv /tmp/.env.backup.pulse /opt/pulse-proxmox/.env
|
||||
fi
|
||||
cd /opt/pulse-proxmox
|
||||
$STD npm install --unsafe-perm
|
||||
cd /opt/pulse-proxmox/server
|
||||
$STD npm install --unsafe-perm
|
||||
cd /opt/pulse-proxmox
|
||||
$STD npm run build:css
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated Pulse to ${RELEASE}"
|
||||
|
||||
msg_info "Setting permissions for /opt/pulse-proxmox..."
|
||||
chown -R pulse:pulse "/opt/pulse-proxmox"
|
||||
find "/opt/pulse-proxmox" -type d -exec chmod 755 {} \;
|
||||
find "/opt/pulse-proxmox" -type f -exec chmod 644 {} \;
|
||||
chmod 600 /opt/pulse-proxmox/.env
|
||||
msg_ok "Set permissions."
|
||||
|
||||
msg_info "Starting ${APP}"
|
||||
systemctl start pulse-monitor
|
||||
msg_ok "Started ${APP}"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}."
|
||||
fi
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}(:your_port)${CL}"
|
||||
@@ -1,15 +1,15 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Slaviša Arežina (tremor021)
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://github.com/jitsi/jitsi-meet
|
||||
# Source: https://rclone.org/
|
||||
|
||||
APP="Jitsi-Meet"
|
||||
APP="Rclone"
|
||||
var_tags="${var_tags:-os}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-20}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-2}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
@@ -23,14 +23,14 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -f /lib/systemd/system/jitsi-videobridge2.service ]]; then
|
||||
if [[ ! -d /var ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating Jitsi-Meet LXC"
|
||||
msg_info "Updating $APP LXC"
|
||||
$STD apt-get update
|
||||
$STD apt-get upgrade -y
|
||||
msg_ok "Updated Jitsi-Meet LXC"
|
||||
$STD apt-get -y upgrade
|
||||
msg_ok "Updated $APP LXC"
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -40,5 +40,3 @@ 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}https://${IP}${CL}"
|
||||
73
ct/streamlink-webui.sh
Normal file
73
ct/streamlink-webui.sh
Normal file
@@ -0,0 +1,73 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: CrazyWolf13
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://github.com/CrazyWolf13/streamlink-webui
|
||||
|
||||
APP="streamlink-webui"
|
||||
var_tags="${var_tags:-download,streaming}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-10}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /opt/streamlink-webui ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/CrazyWolf13/streamlink-webui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||
msg_info "Stopping $APP"
|
||||
systemctl stop ${APP}
|
||||
msg_ok "Stopped $APP"
|
||||
|
||||
rm -rf /opt/${APP}
|
||||
NODE_VERSION="22"
|
||||
NODE_MODULE="npm@latest,yarn@latest"
|
||||
install_node_and_modules
|
||||
setup_uv
|
||||
fetch_and_deploy_gh_release "CrazyWolf13/streamlink-webui"
|
||||
|
||||
msg_info "Updating $APP to v${RELEASE}"
|
||||
$STD uv venv /opt/"${APP}"/backend/src/.venv
|
||||
source /opt/"${APP}"/backend/src/.venv/bin/activate
|
||||
$STD uv pip install -r /opt/streamlink-webui/backend/src/requirements.txt --python=/opt/"${APP}"/backend/src/.venv
|
||||
cd /opt/"${APP}"/frontend/src
|
||||
$STD yarn install
|
||||
$STD yarn build
|
||||
chmod +x /opt/"${APP}"/start.sh
|
||||
msg_ok "Updated $APP to v${RELEASE}"
|
||||
|
||||
msg_info "Starting $APP"
|
||||
systemctl start ${APP}
|
||||
msg_ok "Started $APP"
|
||||
|
||||
msg_ok "Update Successful"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"
|
||||
@@ -1,35 +0,0 @@
|
||||
{
|
||||
"name": "Argus",
|
||||
"slug": "argus",
|
||||
"categories": [
|
||||
11
|
||||
],
|
||||
"date_created": "2025-05-19",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 3000,
|
||||
"documentation": "https://release-argus.io/docs/overview/",
|
||||
"website": "https://release-argus.io/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/argus.webp",
|
||||
"config_path": "/opt/argus/config.yml",
|
||||
"description": "Argus will query websites at a user defined interval for new software releases and then trigger Gotify/Slack/Other notification(s) and/or WebHook(s) when one has been found. For example, you could set it to monitor the Argus repo (release-argus/argus). This will query the GitHub API and track the tag_name variable. When this variable changes from what it was on a previous query, a GitHub-style WebHook could be sent that triggers something (like AWX) to update Argus on your server.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/argus.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 256,
|
||||
"hdd": 3,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
36
frontend/public/json/asterisk.json
Normal file
36
frontend/public/json/asterisk.json
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"name": "Asterisk",
|
||||
"slug": "asterisk",
|
||||
"categories": [
|
||||
0,
|
||||
4
|
||||
],
|
||||
"date_created": "2025-05-13",
|
||||
"type": "ct",
|
||||
"updateable": false,
|
||||
"privileged": false,
|
||||
"interface_port": null,
|
||||
"documentation": "https://docs.asterisk.org/",
|
||||
"config_path": "/etc/asterisk",
|
||||
"website": "https://asterisk.org/",
|
||||
"logo": "https://docs.asterisk.org/favicon.ico",
|
||||
"description": "Asterisk is an open-source framework for building communications applications, most commonly used as a phone system (PBX). Developed by Digium (now part of Sangoma), it turns a standard computer into a powerful telephony server.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/asterisk.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 4,
|
||||
"os": "Debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
41
frontend/public/json/authentik.json
Normal file
41
frontend/public/json/authentik.json
Normal file
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"name": "authentik",
|
||||
"slug": "authentik",
|
||||
"categories": [
|
||||
6
|
||||
],
|
||||
"date_created": "2024-12-27",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 9000,
|
||||
"documentation": "https://docs.goauthentik.io/docs/",
|
||||
"website": "https://goauthentik.io/",
|
||||
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/authentik.svg",
|
||||
"config_path": "/etc/authentik/config.yml",
|
||||
"description": "authentik is an IdP (Identity Provider) and SSO (single sign on) that is built with security at the forefront of every piece of code, every feature, with an emphasis on flexibility and versatility.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/authentik.sh",
|
||||
"resources": {
|
||||
"cpu": 6,
|
||||
"ram": 8192,
|
||||
"hdd": 12,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Authentik is very resource-heavy, it is recommended to use at least 8GB RAM anytime!",
|
||||
"type": "warning"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
{
|
||||
"name": "Baby Buddy",
|
||||
"slug": "babybuddy",
|
||||
"categories": [
|
||||
23
|
||||
],
|
||||
"date_created": "2025-05-16",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 80,
|
||||
"documentation": "https://docs.baby-buddy.net/",
|
||||
"website": "https://github.com/babybuddy/babybuddy",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/baby-buddy.webp",
|
||||
"config_path": "/opt/babybuddy/babybuddy/production.py",
|
||||
"description": "Baby Buddy is an open-source web application designed to assist caregivers in tracking various aspects of a baby's daily routine, including sleep, feedings, diaper changes, tummy time, and more. By recording this data, caregivers can better understand and anticipate their baby's needs, reducing guesswork in daily care. The application offers a user-friendly dashboard for data entry and visualization, supports multiple users, and provides features like timers and reminders. Additionally, Baby Buddy can be integrated with platforms like Home Assistant and Grafana for enhanced functionality.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/babybuddy.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 5,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": "admin",
|
||||
"password": "admin"
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "for private SSL setup visit: `https://github.com/babybuddy/babybuddy/blob/master/docs/setup/ssl.md`",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
{
|
||||
"name": "Backrest",
|
||||
"slug": "backrest",
|
||||
"categories": [
|
||||
7
|
||||
],
|
||||
"date_created": "2025-05-11",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 9898,
|
||||
"documentation": "https://garethgeorge.github.io/backrest/introduction/getting-started",
|
||||
"website": "https://garethgeorge.github.io/backrest",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/backrest.webp",
|
||||
"config_path": "/opt/backrest/config/config.json",
|
||||
"description": "Backrest is a web-accessible backup solution built on top of restic and providing a WebUI which wraps the restic CLI and makes it easy to create repos, browse snapshots, and restore files. Additionally, Backrest can run in the background and take an opinionated approach to scheduling snapshots and orchestrating repo health operations.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/backrest.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 512,
|
||||
"hdd": 8,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"type": "info",
|
||||
"text": "`cat ~/.ssh/id_ed25519.pub` to view ssh public key. This key is used to authenticate with sftp targets. You can add this key on the sftp server."
|
||||
}
|
||||
]
|
||||
}
|
||||
46
frontend/public/json/bitmagnet.json
Normal file
46
frontend/public/json/bitmagnet.json
Normal file
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"name": "Bitmagnet",
|
||||
"slug": "bitmagnet",
|
||||
"categories": [
|
||||
11
|
||||
],
|
||||
"date_created": "2025-05-13",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8080,
|
||||
"documentation": "https://bitmagnet.io/setup.html",
|
||||
"website": "https://bitmagnet.io/",
|
||||
"logo": "https://github.com/bitmagnet-io/bitmagnet/blob/main/webui/public/magnet.svg",
|
||||
"config_path": "`/opt/bitmagnet/config.yml` or `/opt/bitmagnet/.env`",
|
||||
"description": "A self-hosted BitTorrent indexer, DHT crawler, content classifier and torrent search engine with web UI, GraphQL API and Servarr stack integration.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/alpine-bitmagnet.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 256,
|
||||
"hdd": 3,
|
||||
"os": "alpine",
|
||||
"version": "3.21"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "alpine",
|
||||
"script": "ct/alpine-bitmagnet.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 256,
|
||||
"hdd": 3,
|
||||
"os": "alpine",
|
||||
"version": "3.21"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
@@ -12,7 +12,7 @@
|
||||
"documentation": "https://github.com/favonia/cloudflare-ddns/blob/main/README.markdown",
|
||||
"config_path": "/etc/systemd/system/cloudflare-ddns.service",
|
||||
"website": "https://github.com/favonia/cloudflare-ddns",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/cloudflare.webp",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/cloudflare.svg",
|
||||
"description": "A feature-rich and robust Cloudflare DDNS updater with a small footprint. The program will detect your machine’s public IP addresses and update DNS records using the Cloudflare API",
|
||||
"install_methods": [
|
||||
{
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
{
|
||||
"name": "Configarr",
|
||||
"slug": "configarr",
|
||||
"categories": [
|
||||
14
|
||||
],
|
||||
"date_created": "2025-05-06",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8989,
|
||||
"documentation": "https://configarr.raydak.de/docs/intro",
|
||||
"config_path": "/opt/configarr/config.yml",
|
||||
"website": "https://configarr.raydak.de/",
|
||||
"logo": "https://github.com/raydak-labs/configarr/blob/main/docs/static/img/logo.webp",
|
||||
"description": "Configarr is an open-source tool designed to simplify configuration and synchronization for Sonarr and Radarr (and other experimental). It integrates with TRaSH Guides to automate updates of custom formats, quality profiles, and other settings, while also supporting user-defined configurations.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/configarr.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 512,
|
||||
"hdd": 4,
|
||||
"os": "Debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "change secrets file /opt/configarr/secrets.yml",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -19,9 +19,9 @@
|
||||
"type": "default",
|
||||
"script": "ct/freepbx.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 10,
|
||||
"cpu": 1,
|
||||
"ram": 1024,
|
||||
"hdd": 20,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
@@ -31,11 +31,6 @@
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "This script uses the official FreePBX install script. Check it here: https://github.com/FreePBX/sng_freepbx_debian_install",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
"notes": []
|
||||
}
|
||||
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
{
|
||||
"name": "garmin-grafana",
|
||||
"slug": "garmin-grafana",
|
||||
"categories": [
|
||||
24
|
||||
],
|
||||
"date_created": "2025-05-08",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 3000,
|
||||
"documentation": "https://github.com/arpanghosh8453/garmin-grafana",
|
||||
"config_path": "",
|
||||
"website": "https://github.com/arpanghosh8453/garmin-grafana",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/garmin-grafana.webp",
|
||||
"description": "A docker container to fetch data from Garmin servers and store the data in a local influxdb database for appealing visualization with Grafana.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/garmin-grafana.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2,
|
||||
"hdd": 8,
|
||||
"os": "Debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Show login and database credentials: `cat ~/.garmin-grafana.creds`",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "`garmin-grafana` only imports the past 7 days by default. To import historical data, use the `~/bulk-import.sh` script after installation.",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
46
frontend/public/json/gatus.json
Normal file
46
frontend/public/json/gatus.json
Normal file
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"name": "Alpine-gatus",
|
||||
"slug": "alpine-gatus",
|
||||
"categories": [
|
||||
9
|
||||
],
|
||||
"date_created": "2025-05-06",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8080,
|
||||
"documentation": "https://gatus.io/docs",
|
||||
"website": "https://gatus.io/",
|
||||
"logo": "https://raw.githubusercontent.com/TwiN/gatus/refs/heads/master/web/static/img/logo.svg",
|
||||
"config_path": "/opt/gatus/config/config.yaml",
|
||||
"description": "Gatus is a developer-oriented health dashboard that gives you the ability to monitor your services using HTTP, ICMP, TCP, and even DNS queries as well as evaluate the result of said queries by using a list of conditions on values like the status code, the response time, the certificate expiration, the body and many others. The icing on top is that each of these health checks can be paired with alerting via Slack, Teams, PagerDuty, Discord, Twilio and many more.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/gatus.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 512,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "alpine",
|
||||
"script": "ct/alpine-gatus.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 256,
|
||||
"hdd": 3,
|
||||
"os": "alpine",
|
||||
"version": "3.21"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
35
frontend/public/json/homarr.json
Normal file
35
frontend/public/json/homarr.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "Homarr",
|
||||
"slug": "homarr",
|
||||
"categories": [
|
||||
10
|
||||
],
|
||||
"date_created": "2025-05-08",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 7575,
|
||||
"documentation": null,
|
||||
"website": "https://homarr.dev/",
|
||||
"logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/homarr.svg",
|
||||
"config_path": "/opt/homarr/.env",
|
||||
"description": "Homarr is a sleek, modern dashboard that puts all of your apps and services at your fingertips.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/homarr.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 4096,
|
||||
"hdd": 8,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
@@ -11,7 +11,7 @@
|
||||
"interface_port": 2283,
|
||||
"documentation": "https://immich.app/docs/overview/introduction",
|
||||
"website": "https://immich.app",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/immich.webp",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/immich.png",
|
||||
"config_path": "/opt/immich/.env",
|
||||
"description": "High performance self-hosted photo and video management solution.",
|
||||
"install_methods": [
|
||||
@@ -38,3 +38,4 @@
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
{
|
||||
"name": "jitsi-meet",
|
||||
"slug": "jitsi-meet",
|
||||
"categories": [
|
||||
18
|
||||
],
|
||||
"date_created": "2025-05-06",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 443,
|
||||
"documentation": "https://jitsi.github.io/handbook/docs/intro",
|
||||
"website": "https://jitsi.org/jitsi-meet/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/jitsi-meet.webp",
|
||||
"config_path": "/etc/jitsi/meet/[your-hostname]-config.js",
|
||||
"description": "Go ahead, video chat with the whole team. In fact, invite everyone you know. Jitsi Meet is a fully encrypted, 100% open source video conferencing solution that you can use all day, every day, for free — with no account needed.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/jitsi-meet.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 4096,
|
||||
"hdd": 20,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user