mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-08-02 19:13:04 +02:00
Compare commits
135 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6ad7dda1ec | |||
| fc21e2c458 | |||
| 7b7d5c4fdc | |||
| e028f3eb1b | |||
| 308ef17283 | |||
| 0fb07d03e7 | |||
| 084706a3d5 | |||
| cb58c616f7 | |||
| 89e43f2753 | |||
| 63434d9a0f | |||
| 7373c26b7f | |||
| d5d336698e | |||
| a686666abd | |||
| bedc73a049 | |||
| 92b7155ff9 | |||
| 5356ce7dcc | |||
| 566cbf736d | |||
| 382ef231d8 | |||
| de122d075f | |||
| cffbe03b20 | |||
| f11aab9f17 | |||
| f12751cbd9 | |||
| 73b804bce7 | |||
| 5b65310d62 | |||
| 4a92a434e4 | |||
| 81fd7ef01a | |||
| fdb029403d | |||
| 304e73cd18 | |||
| f8bdd424eb | |||
| 70685ae8c3 | |||
| c4ae4d99e4 | |||
| d24422a533 | |||
| d7bc6b5967 | |||
| 8045921784 | |||
| 089bcd1c09 | |||
| b85de433db | |||
| 763732fc5b | |||
| e456b1fc96 | |||
| 30ab4a612d | |||
| c9bddaadc0 | |||
| a1cc2351d7 | |||
| 3157679ffe | |||
| 4d311e03df | |||
| 2f8cb52962 | |||
| 39d78754fa | |||
| 09c11fdecf | |||
| e562ab6128 | |||
| b5a9011581 | |||
| 450a5948ec | |||
| 6ff1e95334 | |||
| bf75cbd2a3 | |||
| 2098cf0f3a | |||
| 09c16ded19 | |||
| d9b12eaadf | |||
| 948f8f608f | |||
| 44483d08ae | |||
| 57c9246f59 | |||
| 00119abe89 | |||
| 645f6a2d9a | |||
| 5ce2cc3b00 | |||
| d9814ec169 | |||
| 58ac0fc22a | |||
| c1a13486a9 | |||
| c6ce72cefd | |||
| cac2d441b8 | |||
| 8029b208a6 | |||
| 7046b72981 | |||
| 8c4ed519a9 | |||
| ea6346e4ef | |||
| 8990ab702e | |||
| 57e02eee1b | |||
| 45053ea4c3 | |||
| 1fa4c1fbf7 | |||
| 0299e420e8 | |||
| db18c72bd8 | |||
| 4bf8a972bf | |||
| 47b8fbf2fb | |||
| 9cc1a739a5 | |||
| 0ce1cea6cd | |||
| e7eff1cf81 | |||
| 03edfcef85 | |||
| bc488e467c | |||
| 303bb672e6 | |||
| 69854a4f74 | |||
| dd74eef5f6 | |||
| bf0c6c4503 | |||
| 895cc7fdcf | |||
| 7cee1cb96a | |||
| b3739cebde | |||
| af497cdd38 | |||
| ba8375f4d8 | |||
| cfaed33534 | |||
| fccd4d568f | |||
| 4804aaedf7 | |||
| e7e6456cfa | |||
| 631f56b29e | |||
| a5a77dcd99 | |||
| 2b2e026928 | |||
| 8bb779ea58 | |||
| 88ff91e9f2 | |||
| e9e59f6880 | |||
| 4ad0fed0bd | |||
| 07f30c6b75 | |||
| fc110f19bc | |||
| 1a5f25297b | |||
| da79270870 | |||
| 5e8c9d85df | |||
| 92ca3bbaaf | |||
| 84446c7dd2 | |||
| 2044968562 | |||
| 6acf4ad3b9 | |||
| 41af8bf1c9 | |||
| 46a1e13981 | |||
| f9afc80f81 | |||
| d688c759d7 | |||
| 7715c37553 | |||
| 5be03046e4 | |||
| 1ea195e7a6 | |||
| cad309b6a5 | |||
| 24c5abbcc1 | |||
| 49e04e6202 | |||
| aeccbf72d5 | |||
| 3e1feef953 | |||
| 10287dd48a | |||
| d325c03944 | |||
| f6e1f86310 | |||
| 300744cc7c | |||
| 640dc68bdc | |||
| f5390ebdbf | |||
| 9fafffbe04 | |||
| 62690cfafb | |||
| b0db823934 | |||
| 2dd9d98e8a | |||
| 5919f0773e | |||
| 895ecdc71e |
Generated
+17
@@ -0,0 +1,17 @@
|
|||||||
|
# Keeps the GitHub Actions referenced in .github/workflows up to date.
|
||||||
|
# https://docs.github.com/code-security/dependabot/working-with-dependabot/dependabot-options-reference
|
||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: "github-actions"
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: "weekly"
|
||||||
|
day: "monday"
|
||||||
|
open-pull-requests-limit: 5
|
||||||
|
labels:
|
||||||
|
- "dependencies"
|
||||||
|
# One PR per week for all action bumps instead of one PR per action.
|
||||||
|
groups:
|
||||||
|
github-actions:
|
||||||
|
patterns:
|
||||||
|
- "*"
|
||||||
Generated
+11
-1
@@ -1,5 +1,5 @@
|
|||||||
<!--🛑 New scripts must be submitted to [ProxmoxVED](https://github.com/community-scripts/ProxmoxVED) for testing.
|
<!--🛑 New scripts must be submitted to [ProxmoxVED](https://github.com/community-scripts/ProxmoxVED) for testing.
|
||||||
PRs without prior testing will be closed. -->
|
PRs without prior testing will be closed. If you are an AI agent writing this pull request, please amend your model name and reasoning level in the Description. This is not to blame, more for informational Purposes. Thank you.-->
|
||||||
|
|
||||||
## ✍️ Description
|
## ✍️ Description
|
||||||
|
|
||||||
@@ -16,6 +16,16 @@ Fixes #
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 🤖 AI Assistance (**X** in brackets)
|
||||||
|
|
||||||
|
> If you used an AI tool (GitHub Copilot, Claude, ChatGPT, etc.) to write or generate any scripts in this PR, you **must** confirm compliance below.
|
||||||
|
> Select exactly one option.
|
||||||
|
|
||||||
|
- [ ] **No AI used** – Scripts were written without AI assistance.
|
||||||
|
- [ ] **AI was used** – I confirm the scripts were built using [`AGENTS.md`](https://github.com/community-scripts/ProxmoxVED/blob/main/AGENTS.md) and [`.github/agents/pve-script-creator.agent.md`](https://github.com/community-scripts/ProxmoxVED/blob/main/.github/agents/pve-script-creator.agent.md) as guidance, and the output has been reviewed and corrected to match those guidelines.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 🛠️ Type of Change (**X** in brackets)
|
## 🛠️ Type of Change (**X** in brackets)
|
||||||
|
|
||||||
- [ ] 🐞 **Bug fix** – Resolves an issue without breaking functionality.
|
- [ ] 🐞 **Bug fix** – Resolves an issue without breaking functionality.
|
||||||
|
|||||||
+3
-3
@@ -20,21 +20,21 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Generate a token
|
- name: Generate a token
|
||||||
id: generate-token
|
id: generate-token
|
||||||
uses: actions/create-github-app-token@v1
|
uses: actions/create-github-app-token@v3
|
||||||
with:
|
with:
|
||||||
app-id: ${{ vars.APP_ID }}
|
app-id: ${{ vars.APP_ID }}
|
||||||
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
||||||
|
|
||||||
- name: Generate a token for PR approval and merge
|
- name: Generate a token for PR approval and merge
|
||||||
id: generate-token-merge
|
id: generate-token-merge
|
||||||
uses: actions/create-github-app-token@v1
|
uses: actions/create-github-app-token@v3
|
||||||
with:
|
with:
|
||||||
app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
|
app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
|
||||||
private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
|
private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
|
||||||
|
|
||||||
# Step 1: Checkout repository
|
# Step 1: Checkout repository
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v7
|
||||||
|
|
||||||
# Step 2: Disable file mode changes detection
|
# Step 2: Disable file mode changes detection
|
||||||
- name: Disable file mode changes
|
- name: Disable file mode changes
|
||||||
|
|||||||
Generated
+2
-2
@@ -16,13 +16,13 @@ jobs:
|
|||||||
CONFIG_PATH: .github/autolabeler-config.json
|
CONFIG_PATH: .github/autolabeler-config.json
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v7
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm install minimatch
|
run: npm install minimatch
|
||||||
|
|
||||||
- name: Label PR based on file changes, title, and PR template
|
- name: Label PR based on file changes, title, and PR template
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v9
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const fs = require('fs').promises;
|
const fs = require('fs').promises;
|
||||||
|
|||||||
Generated
+4
-4
@@ -19,25 +19,25 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Generate a token
|
- name: Generate a token
|
||||||
id: generate-token
|
id: generate-token
|
||||||
uses: actions/create-github-app-token@v1
|
uses: actions/create-github-app-token@v3
|
||||||
with:
|
with:
|
||||||
app-id: ${{ vars.APP_ID }}
|
app-id: ${{ vars.APP_ID }}
|
||||||
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
||||||
|
|
||||||
- name: Generate a token for PR approval and merge
|
- name: Generate a token for PR approval and merge
|
||||||
id: generate-token-merge
|
id: generate-token-merge
|
||||||
uses: actions/create-github-app-token@v1
|
uses: actions/create-github-app-token@v3
|
||||||
with:
|
with:
|
||||||
app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
|
app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
|
||||||
private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
|
private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v7
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Archive old changelog entries
|
- name: Archive old changelog entries
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v9
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const fs = require('fs').promises;
|
const fs = require('fs').promises;
|
||||||
|
|||||||
Generated
+5
-5
@@ -19,20 +19,20 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Generate a token
|
- name: Generate a token
|
||||||
id: generate-token
|
id: generate-token
|
||||||
uses: actions/create-github-app-token@v1
|
uses: actions/create-github-app-token@v3
|
||||||
with:
|
with:
|
||||||
app-id: ${{ vars.APP_ID }}
|
app-id: ${{ vars.APP_ID }}
|
||||||
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
||||||
|
|
||||||
- name: Generate a token for PR approval and merge
|
- name: Generate a token for PR approval and merge
|
||||||
id: generate-token-merge
|
id: generate-token-merge
|
||||||
uses: actions/create-github-app-token@v1
|
uses: actions/create-github-app-token@v3
|
||||||
with:
|
with:
|
||||||
app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
|
app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
|
||||||
private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
|
private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v7
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Get categorized pull requests
|
- name: Get categorized pull requests
|
||||||
id: get-categorized-prs
|
id: get-categorized-prs
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v9
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
async function main() {
|
async function main() {
|
||||||
@@ -213,7 +213,7 @@ jobs:
|
|||||||
return await main();
|
return await main();
|
||||||
|
|
||||||
- name: Update CHANGELOG.md
|
- name: Update CHANGELOG.md
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v9
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const fs = require('fs').promises;
|
const fs = require('fs').promises;
|
||||||
|
|||||||
+2
-2
@@ -17,7 +17,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v7
|
||||||
with:
|
with:
|
||||||
ref: main
|
ref: main
|
||||||
|
|
||||||
@@ -242,7 +242,7 @@ jobs:
|
|||||||
checked=$((checked + 1))
|
checked=$((checked + 1))
|
||||||
|
|
||||||
# Extract our NODE_VERSION
|
# Extract our NODE_VERSION
|
||||||
our_version=$(grep -oP 'NODE_VERSION="(\d+)"' "$script" | head -1 | grep -oP '\d+' || echo "")
|
our_version=$(grep -oP 'NODE_VERSION=\K"?\d+' "$script" | head -1 | grep -oP '\d+' || echo "")
|
||||||
if [[ -z "$our_version" ]]; then
|
if [[ -z "$our_version" ]]; then
|
||||||
if grep -q 'NODE_VERSION=\$(' "$script"; then
|
if grep -q 'NODE_VERSION=\$(' "$script"; then
|
||||||
our_version="dynamic"
|
our_version="dynamic"
|
||||||
|
|||||||
+3
-3
@@ -15,7 +15,7 @@ jobs:
|
|||||||
contents: read
|
contents: read
|
||||||
steps:
|
steps:
|
||||||
- name: Close PR if it does not follow the PR template
|
- name: Close PR if it does not follow the PR template
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v9
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const pr = context.payload.pull_request;
|
const pr = context.payload.pull_request;
|
||||||
@@ -45,7 +45,7 @@ jobs:
|
|||||||
}
|
}
|
||||||
|
|
||||||
const labels = pr.labels.map((label) => label.name);
|
const labels = pr.labels.map((label) => label.name);
|
||||||
const skipLabels = ["automated pr", "keep open"];
|
const skipLabels = ["automated pr", "keep-open"];
|
||||||
|
|
||||||
if (skipLabels.some((label) => labels.includes(label))) {
|
if (skipLabels.some((label) => labels.includes(label))) {
|
||||||
core.info(`PR #${prNumber} has a skip label (${labels.join(", ")}) — skipping template validation.`);
|
core.info(`PR #${prNumber} has a skip label (${labels.join(", ")}) — skipping template validation.`);
|
||||||
@@ -136,7 +136,7 @@ jobs:
|
|||||||
``,
|
``,
|
||||||
`> Use the template sections, fill in the description, check all prerequisite boxes, and select at least one type of change.`,
|
`> Use the template sections, fill in the description, check all prerequisite boxes, and select at least one type of change.`,
|
||||||
``,
|
``,
|
||||||
`Maintainers can add the \`keep open\` label to exempt a PR from this check.`,
|
`Maintainers can add the \`keep-open\` label to exempt a PR from this check.`,
|
||||||
``,
|
``,
|
||||||
`Thank you for contributing! 🙏`,
|
`Thank you for contributing! 🙏`,
|
||||||
].join("\n");
|
].join("\n");
|
||||||
|
|||||||
+1
-1
@@ -14,7 +14,7 @@ jobs:
|
|||||||
contents: read
|
contents: read
|
||||||
steps:
|
steps:
|
||||||
- name: Close PR if unauthorized new script submission
|
- name: Close PR if unauthorized new script submission
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v9
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const pr = context.payload.pull_request;
|
const pr = context.payload.pull_request;
|
||||||
|
|||||||
+1
-1
@@ -9,7 +9,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Auto-close if tteck script detected
|
- name: Auto-close if tteck script detected
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v9
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const issue = context.payload.issue;
|
const issue = context.payload.issue;
|
||||||
|
|||||||
+106
-70
@@ -3,109 +3,145 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
types:
|
types:
|
||||||
- closed
|
- closed
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
close_issue:
|
close_issue:
|
||||||
if: github.event.pull_request.merged == true && github.repository == 'community-scripts/ProxmoxVE'
|
if: github.event.pull_request.merged == true && github.repository == 'community-scripts/ProxmoxVE'
|
||||||
runs-on: self-hosted
|
runs-on: self-hosted
|
||||||
|
env:
|
||||||
|
DEV_REPO: community-scripts/ProxmoxVED
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout target repo (merge commit)
|
- name: Checkout target repo (merge commit)
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v7
|
||||||
with:
|
with:
|
||||||
repository: community-scripts/ProxmoxVE
|
repository: community-scripts/ProxmoxVE
|
||||||
ref: ${{ github.event.pull_request.merge_commit_sha }}
|
ref: ${{ github.event.pull_request.merge_commit_sha }}
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Extract and Process PR Title
|
- name: Collect script slugs from the merged PR
|
||||||
id: extract_title
|
|
||||||
run: |
|
|
||||||
title=$(echo "${{ github.event.pull_request.title }}" | sed 's/^New Script://g' | tr '[:upper:]' '[:lower:]' | sed 's/ //g' | sed 's/-//g')
|
|
||||||
echo "Processed Title: $title"
|
|
||||||
echo "title=$title" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Get slugs from merged PR
|
|
||||||
id: get_slugs
|
id: get_slugs
|
||||||
|
shell: bash
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
PR_NUMBER: ${{ github.event.pull_request.number }}
|
||||||
run: |
|
run: |
|
||||||
pr_files=$(gh pr view ${{ github.event.pull_request.number }} --repo community-scripts/ProxmoxVE --json files -q '.files[].path' 2>/dev/null || true)
|
|
||||||
slugs=""
|
slugs=""
|
||||||
for path in $pr_files; do
|
while IFS= read -r path; do
|
||||||
[[ -f "$path" ]] || continue
|
[ -n "$path" ] || continue
|
||||||
if [[ "$path" == frontend/public/json/*.json ]]; then
|
[ -f "$path" ] || continue
|
||||||
s=$(jq -r '.slug // empty' "$path" 2>/dev/null)
|
|
||||||
[[ -n "$s" ]] && slugs="$slugs $s"
|
|
||||||
elif [[ "$path" == ct/*.sh ]] || [[ "$path" == install/*.sh ]] || [[ "$path" == tools/*.sh ]] || [[ "$path" == turnkey/*.sh ]] || [[ "$path" == vm/*.sh ]]; then
|
|
||||||
base=$(basename "$path" .sh)
|
|
||||||
if [[ "$path" == install/* && "$base" == *-install ]]; then
|
|
||||||
s="${base%-install}"
|
|
||||||
else
|
|
||||||
s="$base"
|
|
||||||
fi
|
|
||||||
[[ -n "$s" ]] && slugs="$slugs $s"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
slugs=$(echo $slugs | xargs -n1 | sort -u | tr '\n' ' ')
|
|
||||||
if [[ -z "$slugs" && -n "$title" ]]; then
|
|
||||||
slugs="$title"
|
|
||||||
fi
|
|
||||||
if [[ -z "$slugs" ]]; then
|
|
||||||
echo "count=0" >> "$GITHUB_OUTPUT"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
echo "$slugs" > pocketbase_slugs.txt
|
|
||||||
echo "count=$(echo $slugs | wc -w)" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
- name: Find matching issues in ProxmoxVED by slug
|
case "$path" in
|
||||||
|
frontend/public/json/*.json)
|
||||||
|
s=$(jq -r '.slug // empty' "$path" 2>/dev/null || true)
|
||||||
|
;;
|
||||||
|
install/*.sh)
|
||||||
|
s=$(basename "$path" .sh)
|
||||||
|
s="${s%-install}"
|
||||||
|
;;
|
||||||
|
ct/*.sh|tools/*.sh|turnkey/*.sh|vm/*.sh)
|
||||||
|
s=$(basename "$path" .sh)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
s=""
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -n "$s" ]; then
|
||||||
|
slugs="$slugs $s"
|
||||||
|
fi
|
||||||
|
done < <(gh pr view "$PR_NUMBER" --repo community-scripts/ProxmoxVE --json files --jq '.files[].path')
|
||||||
|
|
||||||
|
slugs=$(printf '%s\n' $slugs | sed '/^$/d' | sort -u | tr '\n' ' ' | xargs || true)
|
||||||
|
printf '%s' "$slugs" > pocketbase_slugs.txt
|
||||||
|
echo "count=$(printf '%s' "$slugs" | wc -w | tr -d '[:space:]')" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "Slugs in this PR: ${slugs:-<none>}"
|
||||||
|
|
||||||
|
- name: Resolve the matching ProxmoxVED issue
|
||||||
id: find_issue
|
id: find_issue
|
||||||
|
shell: bash
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
PR_BODY: ${{ github.event.pull_request.body }}
|
||||||
run: |
|
run: |
|
||||||
if [[ ! -s pocketbase_slugs.txt ]]; then
|
# move-to-main-repo.yaml stamps the source issue into the PR body it
|
||||||
echo "No slugs derived from PR — nothing to match."
|
# creates, so migration PRs carry an exact back-reference. Guessing from
|
||||||
echo "issue_numbers=" >> "$GITHUB_OUTPUT"
|
# titles or file names is never needed for them.
|
||||||
exit 0
|
matched=$(printf '%s' "$PR_BODY" \
|
||||||
|
| grep -oE 'community-scripts/ProxmoxVED#[0-9]+' \
|
||||||
|
| sed 's/.*#//' || true)
|
||||||
|
|
||||||
|
if [ -n "$matched" ]; then
|
||||||
|
echo "Back-reference in PR body -> issue(s): $(printf '%s' "$matched" | tr '\n' ' ')"
|
||||||
|
else
|
||||||
|
slugs=$(cat pocketbase_slugs.txt)
|
||||||
|
if [ -z "$slugs" ]; then
|
||||||
|
echo "No back-reference and no script slugs — nothing to close."
|
||||||
|
else
|
||||||
|
# Hand-made PR: fall back to an exact slug match, and only against
|
||||||
|
# issues a maintainer already put into migration. A substring match
|
||||||
|
# here would close unrelated issues that merely mention the app.
|
||||||
|
issues=$(gh issue list --repo "$DEV_REPO" --state open --limit 500 \
|
||||||
|
--json number,title,body,labels \
|
||||||
|
| jq -c '[.[] | select([.labels[].name]
|
||||||
|
| any(. == "Started Migration To ProxmoxVE" or . == "Migration To ProxmoxVE"))]')
|
||||||
|
|
||||||
|
echo "Migration candidates in $DEV_REPO: $(printf '%s' "$issues" | jq 'length')"
|
||||||
|
|
||||||
|
for slug in $slugs; do
|
||||||
|
while IFS= read -r row; do
|
||||||
|
[ -n "$row" ] || continue
|
||||||
|
num=$(printf '%s' "$row" | jq -r '.number')
|
||||||
|
|
||||||
|
# Same slug derivation the ProxmoxVED workflows use, so both
|
||||||
|
# sides agree on what "alpine-cinny" means.
|
||||||
|
name=$(printf '%s' "$row" | jq -r '.body // ""' \
|
||||||
|
| sed -n '/^###[[:space:]]*Name of the Script/,/^###/p' \
|
||||||
|
| sed '1d;/^###/d;/^[[:space:]]*$/d' | head -n1)
|
||||||
|
[ -n "$name" ] || name=$(printf '%s' "$row" | jq -r '.title')
|
||||||
|
issue_slug=$(printf '%s' "$name" | tr -d '\r' | tr '[:upper:]' '[:lower:]' | sed 's/[[:space:]]\+/-/g')
|
||||||
|
|
||||||
|
if [ "$issue_slug" = "$slug" ]; then
|
||||||
|
echo "Exact slug match: $slug -> #$num"
|
||||||
|
matched="$matched $num"
|
||||||
|
fi
|
||||||
|
done < <(printf '%s' "$issues" | jq -c '.[]')
|
||||||
|
done
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
slugs=$(cat pocketbase_slugs.txt)
|
|
||||||
|
|
||||||
# Normalize: lowercase, strip spaces and hyphens (same shape as the slug derivation)
|
matched=$(printf '%s\n' $matched | sed '/^$/d' | sort -un | tr '\n' ' ' | xargs || true)
|
||||||
norm() { echo "$1" | tr '[:upper:]' '[:lower:]' | sed 's/[[:space:]]//g; s/-//g'; }
|
count=$(printf '%s' "$matched" | wc -w | tr -d '[:space:]')
|
||||||
|
|
||||||
issues=$(gh issue list --repo community-scripts/ProxmoxVED --state open --limit 1000 --json number,title,body)
|
if [ "$count" -gt 3 ]; then
|
||||||
|
echo "::error::Refusing to close $count issues for a single PR ($matched) — matching is wrong."
|
||||||
matched=""
|
exit 1
|
||||||
for slug in $slugs; do
|
|
||||||
nslug=$(norm "$slug")
|
|
||||||
[[ -z "$nslug" ]] && continue
|
|
||||||
while IFS= read -r row; do
|
|
||||||
num=$(echo "$row" | jq -r '.number')
|
|
||||||
ntitle=$(norm "$(echo "$row" | jq -r '.title')")
|
|
||||||
body=$(echo "$row" | jq -r '.body // ""' | tr '[:upper:]' '[:lower:]')
|
|
||||||
# Match when the issue title contains the slug, or the body mentions it verbatim
|
|
||||||
if [[ "$ntitle" == *"$nslug"* ]] || [[ "$body" == *"$slug"* ]]; then
|
|
||||||
matched="$matched $num"
|
|
||||||
fi
|
|
||||||
done < <(echo "$issues" | jq -c '.[]')
|
|
||||||
done
|
|
||||||
|
|
||||||
matched=$(echo $matched | xargs -n1 2>/dev/null | sort -un | tr '\n' ' ')
|
|
||||||
if [[ -z "$matched" ]]; then
|
|
||||||
echo "No matching ProxmoxVED issues found for slugs: $slugs"
|
|
||||||
echo "issue_numbers=" >> "$GITHUB_OUTPUT"
|
|
||||||
exit 0
|
|
||||||
fi
|
fi
|
||||||
echo "Matched ProxmoxVED issues: $matched"
|
|
||||||
echo "issue_numbers=$matched" >> "$GITHUB_OUTPUT"
|
echo "issue_numbers=$matched" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "Closing: ${matched:-<none>}"
|
||||||
|
|
||||||
- name: Comment on and close matching ProxmoxVED issues
|
- name: Comment on and close matching ProxmoxVED issues
|
||||||
if: steps.find_issue.outputs.issue_numbers != ''
|
if: steps.find_issue.outputs.issue_numbers != ''
|
||||||
|
shell: bash
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.PAT_MICHEL }}
|
GH_TOKEN: ${{ secrets.PAT_MICHEL }}
|
||||||
|
PR_NUMBER: ${{ github.event.pull_request.number }}
|
||||||
|
ISSUE_NUMBERS: ${{ steps.find_issue.outputs.issue_numbers }}
|
||||||
run: |
|
run: |
|
||||||
for issue_number in ${{ steps.find_issue.outputs.issue_numbers }}; do
|
for issue_number in $ISSUE_NUMBERS; do
|
||||||
echo "Closing ProxmoxVED issue #$issue_number"
|
state=$(gh issue view "$issue_number" --repo "$DEV_REPO" --json state --jq '.state' 2>/dev/null || echo "MISSING")
|
||||||
gh issue comment "$issue_number" --repo community-scripts/ProxmoxVED --body "Merged with #${{ github.event.pull_request.number }} in ProxmoxVE"
|
if [ "$state" != "OPEN" ]; then
|
||||||
gh issue close "$issue_number" --repo community-scripts/ProxmoxVED
|
echo "Skipping #$issue_number (state: $state)"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
echo "Closing $DEV_REPO#$issue_number"
|
||||||
|
gh issue comment "$issue_number" --repo "$DEV_REPO" \
|
||||||
|
--body "Merged with #${PR_NUMBER} in ProxmoxVE"
|
||||||
|
gh issue close "$issue_number" --repo "$DEV_REPO"
|
||||||
done
|
done
|
||||||
|
|
||||||
- name: Set is_dev to false in PocketBase
|
- name: Set is_dev to false in PocketBase
|
||||||
|
|||||||
+1
-1
@@ -19,7 +19,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Delete branches of merged PRs
|
- name: Delete branches of merged PRs
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v9
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const owner = context.repo.owner;
|
const owner = context.repo.owner;
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@ jobs:
|
|||||||
runs-on: self-hosted
|
runs-on: self-hosted
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v7
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
|
|||||||
Generated
+1
-1
@@ -13,7 +13,7 @@ jobs:
|
|||||||
contents: write
|
contents: write
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v7
|
||||||
|
|
||||||
- name: Clean CHANGELOG (remove HTML header)
|
- name: Clean CHANGELOG (remove HTML header)
|
||||||
run: sed -n '/^## /,$p' CHANGELOG.md > changelog_cleaned.md
|
run: sed -n '/^## /,$p' CHANGELOG.md > changelog_cleaned.md
|
||||||
|
|||||||
Generated
+1
-1
@@ -14,7 +14,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Lock old issues and PRs
|
- name: Lock old issues and PRs
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v9
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const daysBeforeLock = 7;
|
const daysBeforeLock = 7;
|
||||||
|
|||||||
Generated
+1
-1
@@ -26,7 +26,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Mint GitHub App token (bot identity)
|
- name: Mint GitHub App token (bot identity)
|
||||||
id: app-token
|
id: app-token
|
||||||
uses: actions/create-github-app-token@v1
|
uses: actions/create-github-app-token@v3
|
||||||
with:
|
with:
|
||||||
app-id: ${{ secrets.PB_BOT_APP_ID }}
|
app-id: ${{ secrets.PB_BOT_APP_ID }}
|
||||||
private-key: ${{ secrets.PB_BOT_APP_PRIVATE_KEY }}
|
private-key: ${{ secrets.PB_BOT_APP_PRIVATE_KEY }}
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@ jobs:
|
|||||||
runs-on: self-hosted
|
runs-on: self-hosted
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v7
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
|
|||||||
Generated
+1
-1
@@ -16,7 +16,7 @@ jobs:
|
|||||||
contents: read
|
contents: read
|
||||||
steps:
|
steps:
|
||||||
- name: Handle stale PRs
|
- name: Handle stale PRs
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v9
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
|
|||||||
+3
-3
@@ -13,7 +13,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v7
|
||||||
|
|
||||||
- name: Create redirect page
|
- name: Create redirect page
|
||||||
run: |
|
run: |
|
||||||
@@ -33,9 +33,9 @@ jobs:
|
|||||||
</html>
|
</html>
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
- uses: actions/upload-pages-artifact@v3
|
- uses: actions/upload-pages-artifact@v5
|
||||||
with:
|
with:
|
||||||
path: site
|
path: site
|
||||||
|
|
||||||
- name: Deploy
|
- name: Deploy
|
||||||
uses: actions/deploy-pages@v4
|
uses: actions/deploy-pages@v5
|
||||||
|
|||||||
+1
-1
@@ -16,7 +16,7 @@ jobs:
|
|||||||
runs-on: self-hosted
|
runs-on: self-hosted
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v7
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
|
|||||||
+173
@@ -508,8 +508,181 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
## 2026-08-01
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Update bazarr-install.sh [@asylumexp](https://github.com/asylumexp) ([#16191](https://github.com/community-scripts/ProxmoxVE/pull/16191))
|
||||||
|
- fix romm missing 7z [@asylumexp](https://github.com/asylumexp) ([#16194](https://github.com/community-scripts/ProxmoxVE/pull/16194))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- add CLEANUPARR_CONFIG_PATH, CLEANUPARR_LOGS_PATH vars [@asylumexp](https://github.com/asylumexp) ([#16193](https://github.com/community-scripts/ProxmoxVE/pull/16193))
|
||||||
|
|
||||||
|
## 2026-07-31
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Docmost: cleanup folder at update [@MickLesk](https://github.com/MickLesk) ([#16177](https://github.com/community-scripts/ProxmoxVE/pull/16177))
|
||||||
|
- Firecrawl: Add dependency [@tremor021](https://github.com/tremor021) ([#16174](https://github.com/community-scripts/ProxmoxVE/pull/16174))
|
||||||
|
|
||||||
|
## 2026-07-30
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Firecrawl ([#16156](https://github.com/community-scripts/ProxmoxVE/pull/16156))
|
||||||
|
- OmniRoute ([#16155](https://github.com/community-scripts/ProxmoxVE/pull/16155))
|
||||||
|
- PegaProx ([#16154](https://github.com/community-scripts/ProxmoxVE/pull/16154))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Immich: Pin version to 3.1.0 [@vhsdream](https://github.com/vhsdream) ([#16170](https://github.com/community-scripts/ProxmoxVE/pull/16170))
|
||||||
|
- romm: remove stale 1.x alembic migrations on update [@Darkatek7](https://github.com/Darkatek7) ([#16101](https://github.com/community-scripts/ProxmoxVE/pull/16101))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Medusa: convert the non-free unrar source to deb822 format [@angusmaul](https://github.com/angusmaul) ([#16093](https://github.com/community-scripts/ProxmoxVE/pull/16093))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- tools.func: support dynamic gitlab URL | add setup_mysql_db function [@MickLesk](https://github.com/MickLesk) ([#16166](https://github.com/community-scripts/ProxmoxVE/pull/16166))
|
||||||
|
- core: add configurable host CA inheritance during bootstrap [@MickLesk](https://github.com/MickLesk) ([#15889](https://github.com/community-scripts/ProxmoxVE/pull/15889))
|
||||||
|
|
||||||
|
## 2026-07-29
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- backup virtual printer in bambuddy [@asylumexp](https://github.com/asylumexp) ([#16142](https://github.com/community-scripts/ProxmoxVE/pull/16142))
|
||||||
|
- ImmichFrame: check .NET SDK before update deployment [@aidaskni](https://github.com/aidaskni) ([#16104](https://github.com/community-scripts/ProxmoxVE/pull/16104))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Bichon: Migration for V2 Release [@MickLesk](https://github.com/MickLesk) ([#16145](https://github.com/community-scripts/ProxmoxVE/pull/16145))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- core: Harden remote func bootstrapping with dns issues [@MickLesk](https://github.com/MickLesk) ([#16146](https://github.com/community-scripts/ProxmoxVE/pull/16146))
|
||||||
|
|
||||||
|
## 2026-07-28
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Create search directory in wanderer-install.sh [@Isnubi](https://github.com/Isnubi) ([#16134](https://github.com/community-scripts/ProxmoxVE/pull/16134))
|
||||||
|
- npmplus: Remove duplicate msg_info for container recreation [@MickLesk](https://github.com/MickLesk) ([#16122](https://github.com/community-scripts/ProxmoxVE/pull/16122))
|
||||||
|
- fix Node.js version drift [@asylumexp](https://github.com/asylumexp) ([#16111](https://github.com/community-scripts/ProxmoxVE/pull/16111))
|
||||||
|
- UmlautAdaptarr: use the Debian 13 Microsoft repo with its 2025 signing key [@angusmaul](https://github.com/angusmaul) ([#16077](https://github.com/community-scripts/ProxmoxVE/pull/16077))
|
||||||
|
- fix(bazarr): store data in /var/lib/bazarr instead of inside /opt/bazarr [@angusmaul](https://github.com/angusmaul) ([#16098](https://github.com/community-scripts/ProxmoxVE/pull/16098))
|
||||||
|
- Cloudflare-DDNS: store API token in a 600 env file and build the binary at install time [@angusmaul](https://github.com/angusmaul) ([#16100](https://github.com/community-scripts/ProxmoxVE/pull/16100))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- tools.func: add nginx site helper and PHP socket resolver [@MickLesk](https://github.com/MickLesk) ([#16118](https://github.com/community-scripts/ProxmoxVE/pull/16118))
|
||||||
|
|
||||||
|
- #### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- Migrate Musicseerr to DroppedNeedle [@vhsdream](https://github.com/vhsdream) ([#15751](https://github.com/community-scripts/ProxmoxVE/pull/15751))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- core: fix read prompt input directly from /dev/tty [@MickLesk](https://github.com/MickLesk) ([#16126](https://github.com/community-scripts/ProxmoxVE/pull/16126))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- actual-budget-prometheus-exporter ([#16109](https://github.com/community-scripts/ProxmoxVE/pull/16109))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- fix: prometheus-paperless-exporter incompatibility with paperless v3 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#16119](https://github.com/community-scripts/ProxmoxVE/pull/16119))
|
||||||
|
|
||||||
|
### 📂 Github
|
||||||
|
|
||||||
|
- fix keep-open for close invalid pr [@asylumexp](https://github.com/asylumexp) ([#16105](https://github.com/community-scripts/ProxmoxVE/pull/16105))
|
||||||
|
- Bump GitHub Actions across workflows [@MickLesk](https://github.com/MickLesk) ([#16091](https://github.com/community-scripts/ProxmoxVE/pull/16091))
|
||||||
|
|
||||||
|
## 2026-07-27
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Unpackerr ([#16034](https://github.com/community-scripts/ProxmoxVE/pull/16034))
|
||||||
|
- CookCLI ([#16028](https://github.com/community-scripts/ProxmoxVE/pull/16028))
|
||||||
|
- Discourse ([#16024](https://github.com/community-scripts/ProxmoxVE/pull/16024))
|
||||||
|
- Mastodon ([#16029](https://github.com/community-scripts/ProxmoxVE/pull/16029))
|
||||||
|
- Docspell ([#16033](https://github.com/community-scripts/ProxmoxVE/pull/16033))
|
||||||
|
- Poznote ([#16030](https://github.com/community-scripts/ProxmoxVE/pull/16030))
|
||||||
|
- Shiori ([#16026](https://github.com/community-scripts/ProxmoxVE/pull/16026))
|
||||||
|
- Nezha ([#16025](https://github.com/community-scripts/ProxmoxVE/pull/16025))
|
||||||
|
- PasswordPusher ([#16031](https://github.com/community-scripts/ProxmoxVE/pull/16031))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Update MeiliSearch command for database upgrade [@Isnubi](https://github.com/Isnubi) ([#16081](https://github.com/community-scripts/ProxmoxVE/pull/16081))
|
||||||
|
- Mylar3 & Medusa: use trixie non-free for unrar, not bookworm [@angusmaul](https://github.com/angusmaul) ([#16072](https://github.com/community-scripts/ProxmoxVE/pull/16072))
|
||||||
|
- Vikunja: pin install/update to v2.3.0 due upstream issues [@MickLesk](https://github.com/MickLesk) ([#16059](https://github.com/community-scripts/ProxmoxVE/pull/16059))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- OpenThread-BR: Add runtime configuration options [@tomfrenzel](https://github.com/tomfrenzel) ([#16038](https://github.com/community-scripts/ProxmoxVE/pull/16038))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- core: Handle LXC upgrade prompt cancellation [@MickLesk](https://github.com/MickLesk) ([#16058](https://github.com/community-scripts/ProxmoxVE/pull/16058))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- core: fix OS version fallback when the host catalog lacks the requested version & harden template validation [@MickLesk](https://github.com/MickLesk) ([#16068](https://github.com/community-scripts/ProxmoxVE/pull/16068))
|
||||||
|
|
||||||
## 2026-07-26
|
## 2026-07-26
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Satisfactory ([#16023](https://github.com/community-scripts/ProxmoxVE/pull/16023))
|
||||||
|
- OmniTools ([#16032](https://github.com/community-scripts/ProxmoxVE/pull/16032))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Apache Tika: Remove software-properties-common from Apache Tika install [@andygrunwald](https://github.com/andygrunwald) ([#16054](https://github.com/community-scripts/ProxmoxVE/pull/16054))
|
||||||
|
- Fix inventree missing db engine (upstream issue / postinstall) [@MickLesk](https://github.com/MickLesk) ([#16022](https://github.com/community-scripts/ProxmoxVE/pull/16022))
|
||||||
|
- OPNsense VM: answer console password prompt explicitly, add inter-key delay [@MickLesk](https://github.com/MickLesk) ([#16021](https://github.com/community-scripts/ProxmoxVE/pull/16021))
|
||||||
|
- [endurain] add node update to update script [@johanngrobe](https://github.com/johanngrobe) ([#16014](https://github.com/community-scripts/ProxmoxVE/pull/16014))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Apache Tika: Switch from Debian Bookworm to Debian Trixie and replace manual install of OpenJDK with setup_java [@andygrunwald](https://github.com/andygrunwald) ([#16036](https://github.com/community-scripts/ProxmoxVE/pull/16036))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- core: improve OS mismatch message [@MickLesk](https://github.com/MickLesk) ([#16035](https://github.com/community-scripts/ProxmoxVE/pull/16035))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Improve command description for disabling pve-enterprise repo [@Marcondiro](https://github.com/Marcondiro) ([#16020](https://github.com/community-scripts/ProxmoxVE/pull/16020))
|
||||||
|
|
||||||
## 2026-07-25
|
## 2026-07-25
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|||||||
+1
-1
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
|||||||
var_ram="${var_ram:-2048}"
|
var_ram="${var_ram:-2048}"
|
||||||
var_disk="${var_disk:-10}"
|
var_disk="${var_disk:-10}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_arm64="${var_arm64:-yes}"
|
var_arm64="${var_arm64:-yes}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -42,7 +42,8 @@ function update_script() {
|
|||||||
/opt/bambuddy/data \
|
/opt/bambuddy/data \
|
||||||
/opt/bambuddy/bambuddy.db \
|
/opt/bambuddy/bambuddy.db \
|
||||||
/opt/bambuddy/bambutrack.db \
|
/opt/bambuddy/bambutrack.db \
|
||||||
/opt/bambuddy/archive
|
/opt/bambuddy/archive \
|
||||||
|
/opt/bambuddy/virtual_printer
|
||||||
msg_ok "Backed up Configuration and Data"
|
msg_ok "Backed up Configuration and Data"
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bambuddy" "maziggy/bambuddy" "tarball" "latest" "/opt/bambuddy"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bambuddy" "maziggy/bambuddy" "tarball" "latest" "/opt/bambuddy"
|
||||||
|
|||||||
@@ -28,6 +28,31 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if ! grep -qE -- "bazarr\.py.*[[:space:]](-c|--config)([[:space:]]|=)" /etc/systemd/system/bazarr.service 2>/dev/null; then
|
||||||
|
if [[ -d /opt/bazarr/data && ! -L /opt/bazarr/data && -n "$(ls -A /var/lib/bazarr/ 2>/dev/null)" ]]; then
|
||||||
|
msg_error "/opt/bazarr/data and /var/lib/bazarr both contain data - refusing to merge them. Keep the copy you want in /var/lib/bazarr, remove /opt/bazarr/data, then run the update again."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Moving Bazarr data to /var/lib/bazarr"
|
||||||
|
systemctl stop bazarr
|
||||||
|
if [[ -L /opt/bazarr/data ]]; then
|
||||||
|
rm -f /opt/bazarr/data
|
||||||
|
elif [[ -d /opt/bazarr/data ]]; then
|
||||||
|
if ! cp -a /opt/bazarr/data/. /var/lib/bazarr/; then
|
||||||
|
systemctl start bazarr
|
||||||
|
msg_error "Could not copy /opt/bazarr/data to /var/lib/bazarr - nothing was removed."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
rm -rf /opt/bazarr/data
|
||||||
|
fi
|
||||||
|
sed -i -E "s|^(ExecStart=.*bazarr\.py.*)$|\1 -c /var/lib/bazarr|" /etc/systemd/system/bazarr.service
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl start bazarr
|
||||||
|
msg_ok "Moved Bazarr data to /var/lib/bazarr"
|
||||||
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "bazarr" "morpheus65535/bazarr"; then
|
if check_for_gh_release "bazarr" "morpheus65535/bazarr"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop bazarr
|
systemctl stop bazarr
|
||||||
|
|||||||
+33
-47
@@ -34,30 +34,27 @@ function update_script() {
|
|||||||
CURRENT_VERSION=$(cat /root/.bichon)
|
CURRENT_VERSION=$(cat /root/.bichon)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
MIGRATE_V1=0
|
if [[ $CURRENT_VERSION != 1.* && $CURRENT_VERSION != 2.* ]]; then
|
||||||
if [[ $CURRENT_VERSION == 0.* ]]; then
|
msg_error "Installed ${APP} version (${CURRENT_VERSION}) is too old for an automatic update to v2.x."
|
||||||
MIGRATE_V1=1
|
msg_error "Please create a new ${APP} container and migrate your data manually."
|
||||||
DISK_USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
|
msg_error "Guide: https://github.com/rustmailer/bichon/wiki/Bichon-v2.x-Migration-Guide"
|
||||||
if [ "$DISK_USAGE" -gt 50 ]; then
|
exit
|
||||||
echo -e "\n${RD}Warning: Less than 50% free storage remaining on the root disk.${CL}"
|
fi
|
||||||
echo -e "${RD}Bichon v1 data migration temporarily duplicates data and requires free space for it.${CL}"
|
|
||||||
|
MIGRATE_V2=0
|
||||||
|
if [[ $CURRENT_VERSION == 1.* ]]; then
|
||||||
|
MIGRATE_V2=1
|
||||||
|
STORAGE_KB=$(du -sk /opt/bichon-data/bichon-storage 2>/dev/null | awk '{print $1}')
|
||||||
|
FREE_KB=$(df -Pk /opt/bichon-data | awk 'NR==2 {print $4}')
|
||||||
|
if [[ -n "$STORAGE_KB" && -n "$FREE_KB" && "$FREE_KB" -lt "$STORAGE_KB" ]]; then
|
||||||
|
echo -e "\n${RD}Warning: migration needs about $((STORAGE_KB / 1024))MB, only $((FREE_KB / 1024))MB free.${CL}"
|
||||||
|
echo -e "${RD}The new bichon-blob store is written alongside the existing fjall data.${CL}"
|
||||||
read -r -p "Are you sure you want to proceed with the update? (y/N): " proceed
|
read -r -p "Are you sure you want to proceed with the update? (y/N): " proceed
|
||||||
if [[ ! $proceed =~ ^[Yy]$ ]]; then
|
if [[ ! $proceed =~ ^[Yy]$ ]]; then
|
||||||
msg_error "Update cancelled by user."
|
msg_error "Update cancelled by user."
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RAM_TOTAL=$(free -m | awk '/^Mem:/{print $2}')
|
|
||||||
if [ "$RAM_TOTAL" -lt 2000 ]; then
|
|
||||||
echo -e "\n${RD}Warning: LXC has less than 2GB of RAM allocated (${RAM_TOTAL}MB).${CL}"
|
|
||||||
echo -e "${RD}Bichon v1 data migration consumes significant memory and may crash if insufficient.${CL}"
|
|
||||||
read -r -p "Are you sure you want to proceed with the update? (y/N): " proceed_ram
|
|
||||||
if [[ ! $proceed_ram =~ ^[Yy]$ ]]; then
|
|
||||||
msg_error "Update cancelled by user."
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "bichon" "rustmailer/bichon"; then
|
if check_for_gh_release "bichon" "rustmailer/bichon"; then
|
||||||
@@ -67,55 +64,44 @@ function update_script() {
|
|||||||
|
|
||||||
create_backup /opt/bichon/bichon.env
|
create_backup /opt/bichon/bichon.env
|
||||||
|
|
||||||
if [ "$MIGRATE_V1" -eq 1 ] && [ "$CURRENT_VERSION" != "0.3.7" ]; then
|
|
||||||
msg_info "Updating to intermediate version v0.3.7"
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bichon" "rustmailer/bichon" "prebuild" "v0.3.7" "/opt/bichon" "bichon-*-$(arch_resolve "x86_64" "aarch64")-unknown-linux-gnu.tar.gz"
|
|
||||||
restore_backup
|
|
||||||
systemctl start bichon
|
|
||||||
sleep 30
|
|
||||||
systemctl stop bichon
|
|
||||||
msg_ok "Intermediate update completed"
|
|
||||||
fi
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bichon" "rustmailer/bichon" "prebuild" "latest" "/opt/bichon" "bichon-*-$(arch_resolve "x86_64" "aarch64")-unknown-linux-gnu.tar.gz"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bichon" "rustmailer/bichon" "prebuild" "latest" "/opt/bichon" "bichon-*-$(arch_resolve "x86_64" "aarch64")-unknown-linux-gnu.tar.gz"
|
||||||
restore_backup
|
restore_backup
|
||||||
|
|
||||||
if [ "$MIGRATE_V1" -eq 1 ]; then
|
if [ "$MIGRATE_V2" -eq 1 ]; then
|
||||||
msg_info "Running Bichon v1 Data Migration (patience)"
|
msg_info "Migrating storage from fjall to bichon-blob (patience)"
|
||||||
$STD apt install -y expect
|
$STD apt install -y expect
|
||||||
|
# Menu: 0 Reset Password, 1 Migrate v0.3.7, 2 Migrate v1.x, 3 Exit
|
||||||
$STD expect <<'EOF'
|
$STD expect <<'EOF'
|
||||||
set timeout -1
|
set timeout -1
|
||||||
spawn /opt/bichon/bichon-admin
|
spawn /opt/bichon/bichon-admin
|
||||||
expect "*Select an operation*"
|
expect "*Select an operation*"
|
||||||
send "\033\[B\r"
|
send "\033\[B\033\[B\r"
|
||||||
expect "*--bichon-root-dir*"
|
expect "*--bichon-root-dir*"
|
||||||
send "/opt/bichon-data\r"
|
send "/opt/bichon-data\r"
|
||||||
expect "*--bichon-index-dir*"
|
|
||||||
send "\r"
|
|
||||||
expect "*--bichon-data-dir*"
|
expect "*--bichon-data-dir*"
|
||||||
send "\r"
|
send "\r"
|
||||||
expect "*Ready to migrate?*"
|
expect "*batch size*"
|
||||||
send "y"
|
|
||||||
expect "*Enter batch size*"
|
|
||||||
send "1000\r"
|
send "1000\r"
|
||||||
expect eof
|
expect eof
|
||||||
catch wait
|
catch wait
|
||||||
EOF
|
EOF
|
||||||
$STD apt remove --purge expect -y
|
$STD apt remove --purge expect -y
|
||||||
$STD apt autoremove -y
|
$STD apt autoremove -y
|
||||||
msg_ok "Migration completed"
|
|
||||||
|
|
||||||
msg_info "Cleaning up legacy Bichon v0.x storage files"
|
if [[ ! -d /opt/bichon-data/bichon-storage/blobs ]] ||
|
||||||
rm -rf /opt/bichon-data/envelope
|
[[ "$(cat /opt/bichon-data/STORAGE_VERSION 2>/dev/null)" != "2" ]]; then
|
||||||
rm -rf /opt/bichon-data/eml
|
msg_error "Storage migration did not complete - service left stopped, legacy data untouched."
|
||||||
rm -f /opt/bichon-data/mailbox.db
|
msg_error "Run /opt/bichon/bichon-admin manually and select 'Migrate v1.x Storage to v2.x'."
|
||||||
rm -f /opt/bichon-data/meta.db
|
exit
|
||||||
msg_ok "Cleanup completed"
|
fi
|
||||||
|
msg_ok "Migrated storage to bichon-blob"
|
||||||
|
|
||||||
msg_info "Updating Bichon service for v1"
|
msg_info "Removing legacy fjall files"
|
||||||
sed -i 's|ExecStart=/opt/bichon/bichon|ExecStart=/opt/bichon/bichon-server|g; s|RestartSec=5|RestartSec=5\n\nLimitNOFILE=65536|g' /etc/systemd/system/bichon.service
|
rm -rf /opt/bichon-data/bichon-storage/keyspaces
|
||||||
systemctl daemon-reload
|
rm -f /opt/bichon-data/bichon-storage/0.jnl
|
||||||
msg_ok "Service updated"
|
rm -f /opt/bichon-data/bichon-storage/lock
|
||||||
|
rm -f /opt/bichon-data/bichon-storage/version
|
||||||
|
msg_ok "Removed legacy fjall files"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Starting service"
|
msg_info "Starting service"
|
||||||
|
|||||||
+13
-1
@@ -33,7 +33,19 @@ function update_script() {
|
|||||||
systemctl stop cleanuparr
|
systemctl stop cleanuparr
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
create_backup /opt/cleanuparr/config
|
if [[ ! -d /etc/cleanuparr ]]; then
|
||||||
|
msg_info "Migrating Configuration to /etc/cleanuparr"
|
||||||
|
mv /opt/cleanuparr/config /etc/cleanuparr
|
||||||
|
mkdir -p /etc/cleanuparr /var/log/cleanuparr
|
||||||
|
rm -rf /etc/cleanuparr/logs
|
||||||
|
sed -i -e 's|^Environment="CONFIG_DIR=.*|Environment="CLEANUPARR_CONFIG_PATH=/etc/cleanuparr"|' \
|
||||||
|
-e '/^Environment="CLEANUPARR_CONFIG_PATH=/a Environment="CLEANUPARR_LOGS_PATH=/var/log/cleanuparr"' \
|
||||||
|
/etc/systemd/system/cleanuparr.service
|
||||||
|
systemctl daemon-reload
|
||||||
|
msg_ok "Migrated Configuration to /etc/cleanuparr"
|
||||||
|
fi
|
||||||
|
|
||||||
|
create_backup /etc/cleanuparr
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Cleanuparr" "Cleanuparr/Cleanuparr" "prebuild" "latest" "/opt/cleanuparr" "*linux-$(arch_resolve).zip"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Cleanuparr" "Cleanuparr/Cleanuparr" "prebuild" "latest" "/opt/cleanuparr" "*linux-$(arch_resolve).zip"
|
||||||
|
|
||||||
|
|||||||
+27
-3
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
|||||||
var_ram="${var_ram:-1024}"
|
var_ram="${var_ram:-1024}"
|
||||||
var_disk="${var_disk:-3}"
|
var_disk="${var_disk:-3}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_arm64="${var_arm64:-yes}"
|
var_arm64="${var_arm64:-yes}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
@@ -24,11 +24,35 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -f /etc/systemd/system/cloudflare-ddns.service ]]; then
|
|
||||||
|
if [[ ! -f /usr/local/bin/ddns ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
msg_error "There is no update function for ${APP}."
|
|
||||||
|
if check_for_gh_release "cloudflare-ddns" "favonia/cloudflare-ddns"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop cloudflare-ddns
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
setup_go
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "cloudflare-ddns" "favonia/cloudflare-ddns" "tarball"
|
||||||
|
|
||||||
|
msg_info "Updating ${APP}"
|
||||||
|
cd /opt/cloudflare-ddns
|
||||||
|
export CGO_ENABLED=0 GOOS=linux
|
||||||
|
$STD go build -trimpath -ldflags="-s -w" -o /usr/local/bin/ddns ./cmd/ddns
|
||||||
|
msg_ok "Updated ${APP}"
|
||||||
|
|
||||||
|
msg_info "Removing Build Dependencies"
|
||||||
|
rm -rf /usr/local/go /usr/local/bin/go /usr/local/bin/gofmt /root/go /root/.cache/go-build /opt/cloudflare-ddns
|
||||||
|
msg_ok "Removed Build Dependencies"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start cloudflare-ddns
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,60 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/cooklang/cookcli
|
||||||
|
|
||||||
|
APP="CookCLI"
|
||||||
|
var_tags="${var_tags:-recipes;cooking;food}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-512}"
|
||||||
|
var_disk="${var_disk:-8}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_arm64="${var_arm64:-yes}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -f /opt/cookcli/cook ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "cook" "cooklang/cookcli"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop cookcli
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
create_backup /opt/cookcli/recipes
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "cook" "cooklang/cookcli" "prebuild" "latest" "/opt/cookcli" "cook-$(arch_resolve "x86_64-unknown-linux-gnu" "aarch64-unknown-linux-musl").tar.gz"
|
||||||
|
chmod +x /opt/cookcli/cook
|
||||||
|
|
||||||
|
restore_backup
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start cookcli
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
|
||||||
|
echo -e "${GATEWAY}${BGN}http://${IP}:9080${CL}"
|
||||||
+1
-1
@@ -25,7 +25,7 @@ function update_script() {
|
|||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
NODE_VERSION="24" setup_nodejs
|
NODE_VERSION="26" setup_nodejs
|
||||||
ensure_dependencies build-essential
|
ensure_dependencies build-essential
|
||||||
|
|
||||||
if command -v cross-seed &>/dev/null; then
|
if command -v cross-seed &>/dev/null; then
|
||||||
|
|||||||
@@ -0,0 +1,71 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://www.discourse.org/
|
||||||
|
|
||||||
|
APP="Discourse"
|
||||||
|
var_tags="${var_tags:-forum;community;discussion}"
|
||||||
|
var_cpu="${var_cpu:-4}"
|
||||||
|
var_ram="${var_ram:-4096}"
|
||||||
|
var_disk="${var_disk:-20}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_arm64="${var_arm64:-no}"
|
||||||
|
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/discourse ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f /opt/discourse/.env ]]; then
|
||||||
|
msg_error "No Discourse Configuration Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop discourse
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
create_backup /opt/discourse/.env
|
||||||
|
|
||||||
|
msg_info "Updating Discourse"
|
||||||
|
PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql
|
||||||
|
cd /opt/discourse
|
||||||
|
git pull origin main
|
||||||
|
$STD bundle install --deployment --without test development
|
||||||
|
$STD yarn install
|
||||||
|
$STD runuser -u postgres -- psql -d discourse -c "CREATE EXTENSION IF NOT EXISTS vector;"
|
||||||
|
$STD bundle exec rails assets:precompile
|
||||||
|
$STD bundle exec rails db:migrate
|
||||||
|
msg_ok "Updated Discourse"
|
||||||
|
|
||||||
|
restore_backup
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start discourse
|
||||||
|
msg_ok "Started 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 "${GATEWAY}${BGN}http://${IP}${CL}"
|
||||||
+1
-1
@@ -100,7 +100,7 @@ server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
systemctl reload nginx
|
nginx_enable_site dispatcharr.conf
|
||||||
msg_ok "Migrated Nginx Configuration"
|
msg_ok "Migrated Nginx Configuration"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
+5
-5
@@ -27,8 +27,8 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if ! command -v node >/dev/null || [[ "$(/usr/bin/env node -v | grep -oP '^v\K[0-9]+')" != "22" ]]; then
|
if ! command -v node >/dev/null || [[ "$(/usr/bin/env node -v | grep -oP '^v\K[0-9]+')" != "26" ]]; then
|
||||||
NODE_VERSION="22" NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/docmost/docmost/main/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs
|
NODE_VERSION="26" NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/docmost/docmost/main/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs
|
||||||
fi
|
fi
|
||||||
export NODE_OPTIONS="--max_old_space_size=4096"
|
export NODE_OPTIONS="--max_old_space_size=4096"
|
||||||
|
|
||||||
@@ -37,9 +37,9 @@ function update_script() {
|
|||||||
systemctl stop docmost
|
systemctl stop docmost
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
create_backup /opt/docmost/.env \
|
create_backup /opt/docmost/.env /opt/docmost/data
|
||||||
/opt/docmost/data
|
|
||||||
fetch_and_deploy_gh_release "docmost" "docmost/docmost" "tarball"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "docmost" "docmost/docmost" "tarball"
|
||||||
|
|
||||||
restore_backup
|
restore_backup
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,61 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://docspell.org/
|
||||||
|
|
||||||
|
APP="Docspell"
|
||||||
|
var_tags="${var_tags:-documents;ocr;paperless;productivity}"
|
||||||
|
var_cpu="${var_cpu:-4}"
|
||||||
|
var_ram="${var_ram:-4096}"
|
||||||
|
var_disk="${var_disk:-16}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_arm64="${var_arm64:-yes}"
|
||||||
|
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/docspell-restserver/docspell-server.conf ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "docspell-joex" "eikek/docspell"; then
|
||||||
|
msg_info "Stopping Services"
|
||||||
|
systemctl stop docspell-joex docspell-restserver
|
||||||
|
msg_ok "Stopped Services"
|
||||||
|
|
||||||
|
create_backup /etc/docspell-joex/docspell-joex.conf \
|
||||||
|
/etc/docspell-restserver/docspell-server.conf
|
||||||
|
|
||||||
|
DPKG_FORCE_CONFOLD=1 fetch_and_deploy_gh_release "docspell-joex" "eikek/docspell" "binary" "latest" "/opt/docspell" "docspell-joex_*_all.deb"
|
||||||
|
DPKG_FORCE_CONFOLD=1 fetch_and_deploy_gh_release "docspell-restserver" "eikek/docspell" "binary" "latest" "/opt/docspell" "docspell-restserver_*_all.deb"
|
||||||
|
|
||||||
|
restore_backup
|
||||||
|
|
||||||
|
msg_info "Starting Services"
|
||||||
|
systemctl start docspell-restserver docspell-joex
|
||||||
|
msg_ok "Started Services"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
|
||||||
|
echo -e "${GATEWAY}${BGN}http://${IP}:7880${CL}"
|
||||||
@@ -0,0 +1,147 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: michelroegl-brunner | Co-Author: vhsdream
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://droppedneedle.com/ | Github: https://github.com/DroppedNeedle/DroppedNeedle
|
||||||
|
|
||||||
|
APP="DroppedNeedle"
|
||||||
|
var_tags="${var_tags:-arr;media}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-4096}"
|
||||||
|
var_disk="${var_disk:-8}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_arm64="${var_arm64:-yes}"
|
||||||
|
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/droppedneedle && ! -d /opt/musicseerr ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
MIGRATING=false
|
||||||
|
[[ -d /opt/musicseerr ]] && MIGRATING=true
|
||||||
|
|
||||||
|
if [[ "$MIGRATING" == "true" ]] || check_for_gh_release "droppedneedle" "DroppedNeedle/DroppedNeedle"; then
|
||||||
|
if [[ "$MIGRATING" == "true" ]]; then
|
||||||
|
msg_warn "Migrating Musicseerr to DroppedNeedle"
|
||||||
|
msg_info "Stopping Musicseerr Service"
|
||||||
|
systemctl disable -q --now musicseerr
|
||||||
|
msg_ok "Stopped Musicseerr Service"
|
||||||
|
DATA_DIR="/opt/musicseerr/backend"
|
||||||
|
else
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop droppedneedle
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
DATA_DIR="/opt/droppedneedle/backend"
|
||||||
|
fi
|
||||||
|
|
||||||
|
create_backup "$DATA_DIR/config" "$DATA_DIR/cache"
|
||||||
|
|
||||||
|
PYTHON_VERSION="3.13" setup_uv
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "droppedneedle" "DroppedNeedle/DroppedNeedle" "tarball"
|
||||||
|
NODE_VERSION="25" NODE_MODULE="pnpm@10.33.0" setup_nodejs
|
||||||
|
|
||||||
|
msg_info "Building Frontend"
|
||||||
|
cd /opt/droppedneedle/frontend
|
||||||
|
export NODE_OPTIONS="--max-old-space-size=3072"
|
||||||
|
rm -rf node_modules build
|
||||||
|
$STD pnpm install --frozen-lockfile
|
||||||
|
$STD pnpm run build
|
||||||
|
msg_ok "Built Frontend"
|
||||||
|
|
||||||
|
msg_info "Updating Application"
|
||||||
|
mkdir -p /opt/droppedneedle/backend/config /opt/droppedneedle/backend/cache
|
||||||
|
$STD uv venv --clear /opt/droppedneedle/venv
|
||||||
|
$STD uv pip install -r /opt/droppedneedle/backend/requirements.txt --python=/opt/droppedneedle/venv/bin/python
|
||||||
|
rm -rf /opt/droppedneedle/backend/static
|
||||||
|
cp -r /opt/droppedneedle/frontend/build /opt/droppedneedle/backend/static
|
||||||
|
msg_ok "Updated Application"
|
||||||
|
|
||||||
|
restore_backup
|
||||||
|
|
||||||
|
if [[ "$MIGRATING" == "true" ]]; then
|
||||||
|
msg_info "Migrating Musicseerr Data"
|
||||||
|
rm -rf /opt/droppedneedle/backend/config /opt/droppedneedle/backend/cache
|
||||||
|
cp -a /opt/musicseerr/backend/config /opt/droppedneedle/backend/config
|
||||||
|
cp -a /opt/musicseerr/backend/cache /opt/droppedneedle/backend/cache
|
||||||
|
msg_ok "Migrated Musicseerr Data"
|
||||||
|
|
||||||
|
msg_info "Replacing systemd Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/droppedneedle.service
|
||||||
|
[Unit]
|
||||||
|
Description=DroppedNeedle Service
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=root
|
||||||
|
WorkingDirectory=/opt/droppedneedle/backend
|
||||||
|
Environment=ROOT_APP_DIR=/opt/droppedneedle/backend
|
||||||
|
Environment=PORT=8688
|
||||||
|
# Environment=SLSKD_DOWNLOADS_PATH=<path-to-slskd-downloads>
|
||||||
|
ExecStart=/opt/droppedneedle/venv/bin/uvicorn main:app --host 0.0.0.0 --port 8688 --loop uvloop --http httptools --workers 1
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
rm -f /etc/systemd/system/musicseerr.service
|
||||||
|
msg_ok "Replaced systemd Service"
|
||||||
|
elif ! grep -q 'SLSKD' /etc/systemd/system/droppedneedle.service; then
|
||||||
|
sed -i '\|=8688$|a# Environment=SLSKD_DOWNLOADS_PATH=<path-to-slskd-downloads>' /etc/systemd/system/droppedneedle.service
|
||||||
|
fi
|
||||||
|
|
||||||
|
systemctl daemon-reload
|
||||||
|
if [[ "$MIGRATING" == "true" ]]; then
|
||||||
|
msg_info "Enabling DroppedNeedle Service"
|
||||||
|
systemctl enable -q --now droppedneedle
|
||||||
|
msg_ok "Enabled DroppedNeedle Service"
|
||||||
|
|
||||||
|
sed -i 's/musicseerr/droppedneedle/g' /bin/update
|
||||||
|
rm -rf /opt/musicseerr
|
||||||
|
|
||||||
|
msg_info "Waiting up to 1min for backend to boot and retrieve Admin Username"
|
||||||
|
for i in {1..30}; do
|
||||||
|
username=$(/opt/droppedneedle/venv/bin/python -c 'import sqlite3; conn = sqlite3.connect("/opt/droppedneedle/backend/cache/library.db"); c = conn.cursor(); c.execute("SELECT username FROM auth_users WHERE role=\"admin\""); admin=c.fetchone(); print(admin[0]) if (admin and admin[0]) else None' 2>/dev/null || true)
|
||||||
|
if [[ -n "$username" ]]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
sleep 2
|
||||||
|
done
|
||||||
|
if [[ -n "$username" ]]; then
|
||||||
|
msg_ok "Admin Username retrieved (Admin Username is: ${username})"
|
||||||
|
else
|
||||||
|
msg_warn "Failed to retrieve Admin Username. The backend might still be starting."
|
||||||
|
fi
|
||||||
|
msg_ok "Migrated successfully!"
|
||||||
|
else
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start droppedneedle
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
|
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 "${GATEWAY}${BGN}http://${IP}:8688${CL}"
|
||||||
@@ -34,6 +34,8 @@ function update_script() {
|
|||||||
systemctl stop endurain
|
systemctl stop endurain
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
|
||||||
create_backup /opt/endurain/.env /opt/endurain/frontend/dist/env.js
|
create_backup /opt/endurain/.env /opt/endurain/frontend/dist/env.js
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_codeberg_release "endurain" "endurain-project/endurain" "tarball" "latest" "/opt/endurain"
|
CLEAN_INSTALL=1 fetch_and_deploy_codeberg_release "endurain" "endurain-project/endurain" "tarball" "latest" "/opt/endurain"
|
||||||
|
|
||||||
|
|||||||
+1
-3
@@ -59,9 +59,7 @@ function update_script() {
|
|||||||
|
|
||||||
envsubst </opt/feishin/settings.js.template >/etc/nginx/conf.d/settings.js
|
envsubst </opt/feishin/settings.js.template >/etc/nginx/conf.d/settings.js
|
||||||
envsubst '${PUBLIC_PATH}' </opt/feishin/ng.conf.template >/etc/nginx/sites-available/feishin
|
envsubst '${PUBLIC_PATH}' </opt/feishin/ng.conf.template >/etc/nginx/sites-available/feishin
|
||||||
ln -sf /etc/nginx/sites-available/feishin /etc/nginx/sites-enabled/feishin
|
nginx_enable_site feishin
|
||||||
rm -f /etc/nginx/sites-enabled/default
|
|
||||||
systemctl restart nginx
|
|
||||||
msg_ok "Published Web Assets"
|
msg_ok "Published Web Assets"
|
||||||
|
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
|
|||||||
@@ -0,0 +1,93 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: esatbayhan
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://www.firecrawl.dev/
|
||||||
|
|
||||||
|
APP="Firecrawl"
|
||||||
|
var_tags="${var_tags:-scraping;ai;crawler}"
|
||||||
|
var_cpu="${var_cpu:-4}"
|
||||||
|
var_ram="${var_ram:-4096}"
|
||||||
|
var_disk="${var_disk:-30}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_arm64="${var_arm64:-no}"
|
||||||
|
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/firecrawl/apps/api ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
ensure_dependencies build-essential
|
||||||
|
|
||||||
|
if check_for_gh_release "firecrawl" "firecrawl/firecrawl"; then
|
||||||
|
msg_info "Stopping Services"
|
||||||
|
systemctl stop firecrawl firecrawl-playwright
|
||||||
|
msg_ok "Stopped Services"
|
||||||
|
|
||||||
|
create_backup /opt/firecrawl/.env
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "firecrawl" "firecrawl/firecrawl" "tarball" "latest" "/opt/firecrawl"
|
||||||
|
|
||||||
|
restore_backup
|
||||||
|
|
||||||
|
FDB_VERSION="$(awk -F= '/^ARG FDB_VERSION=/{print $2; exit}' /opt/firecrawl/apps/api/Dockerfile)"
|
||||||
|
if [[ -z "$FDB_VERSION" ]]; then
|
||||||
|
msg_error "FDB_VERSION pin not found in upstream Dockerfile"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [[ "$(dpkg-query -W -f='${Version}' foundationdb-clients 2>/dev/null)" != "${FDB_VERSION}-"* ]]; then
|
||||||
|
FDB_ARCH="$(get_system_arch)"
|
||||||
|
[[ "$FDB_ARCH" == "arm64" ]] && FDB_ARCH="aarch64"
|
||||||
|
fetch_and_deploy_gh_release "foundationdb-clients" "apple/foundationdb" "binary" "$FDB_VERSION" "/opt/foundationdb-clients" "foundationdb-clients_${FDB_VERSION}-1_${FDB_ARCH}.deb"
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Building Go Library"
|
||||||
|
cd /opt/firecrawl/apps/api/sharedLibs/go-html-to-md
|
||||||
|
$STD go build -o libhtml-to-markdown.so -buildmode=c-shared html-to-markdown.go
|
||||||
|
msg_ok "Built Go Library"
|
||||||
|
|
||||||
|
msg_info "Building Firecrawl API"
|
||||||
|
source "$HOME/.cargo/env"
|
||||||
|
cd /opt/firecrawl/apps/api
|
||||||
|
$STD pnpm install --frozen-lockfile
|
||||||
|
$STD pnpm build
|
||||||
|
CI=true $STD pnpm prune --prod --ignore-scripts
|
||||||
|
msg_ok "Built Firecrawl API"
|
||||||
|
|
||||||
|
msg_info "Building Playwright Service"
|
||||||
|
cd /opt/firecrawl/apps/playwright-service-ts
|
||||||
|
$STD npm install
|
||||||
|
$STD npx playwright install chromium --with-deps
|
||||||
|
$STD npm run build
|
||||||
|
$STD npm prune --omit=dev
|
||||||
|
msg_ok "Built Playwright Service"
|
||||||
|
|
||||||
|
msg_info "Starting Services"
|
||||||
|
systemctl start firecrawl-playwright firecrawl
|
||||||
|
msg_ok "Started Services"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
|
||||||
|
echo -e "${GATEWAY}${BGN}http://${IP}:3002${CL}"
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
______ __ ________ ____
|
||||||
|
/ ____/___ ____ / /__/ ____/ / / _/
|
||||||
|
/ / / __ \/ __ \/ //_/ / / / / /
|
||||||
|
/ /___/ /_/ / /_/ / ,< / /___/ /____/ /
|
||||||
|
\____/\____/\____/_/|_|\____/_____/___/
|
||||||
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
____ _
|
||||||
|
/ __ \(_)_____________ __ _______________
|
||||||
|
/ / / / / ___/ ___/ __ \/ / / / ___/ ___/ _ \
|
||||||
|
/ /_/ / (__ ) /__/ /_/ / /_/ / / (__ ) __/
|
||||||
|
/_____/_/____/\___/\____/\__,_/_/ /____/\___/
|
||||||
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
____ ____
|
||||||
|
/ __ \____ ______________ ___ / / /
|
||||||
|
/ / / / __ \/ ___/ ___/ __ \/ _ \/ / /
|
||||||
|
/ /_/ / /_/ / /__(__ ) /_/ / __/ / /
|
||||||
|
/_____/\____/\___/____/ .___/\___/_/_/
|
||||||
|
/_/
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
____ ___ __ ____
|
||||||
|
/ __ \_________ ____ ____ ___ ____/ / | / /__ ___ ____/ / /__
|
||||||
|
/ / / / ___/ __ \/ __ \/ __ \/ _ \/ __ / |/ / _ \/ _ \/ __ / / _ \
|
||||||
|
/ /_/ / / / /_/ / /_/ / /_/ / __/ /_/ / /| / __/ __/ /_/ / / __/
|
||||||
|
/_____/_/ \____/ .___/ .___/\___/\__,_/_/ |_/\___/\___/\__,_/_/\___/
|
||||||
|
/_/ /_/
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
_______ __
|
||||||
|
/ ____(_)_______ ______________ __ __/ /
|
||||||
|
/ /_ / / ___/ _ \/ ___/ ___/ __ `/ | /| / / /
|
||||||
|
/ __/ / / / / __/ /__/ / / /_/ /| |/ |/ / /
|
||||||
|
/_/ /_/_/ \___/\___/_/ \__,_/ |__/|__/_/
|
||||||
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
__ ___ __ __
|
||||||
|
/ |/ /___ ______/ /_____ ____/ /___ ____
|
||||||
|
/ /|_/ / __ `/ ___/ __/ __ \/ __ / __ \/ __ \
|
||||||
|
/ / / / /_/ (__ ) /_/ /_/ / /_/ / /_/ / / / /
|
||||||
|
/_/ /_/\__,_/____/\__/\____/\__,_/\____/_/ /_/
|
||||||
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
_ __ __
|
||||||
|
/ | / /__ ____ / /_ ____ _
|
||||||
|
/ |/ / _ \/_ / / __ \/ __ `/
|
||||||
|
/ /| / __/ / /_/ / / / /_/ /
|
||||||
|
/_/ |_/\___/ /___/_/ /_/\__,_/
|
||||||
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
____ _ ____ __
|
||||||
|
/ __ \____ ___ ____ (_) __ \____ __ __/ /____
|
||||||
|
/ / / / __ `__ \/ __ \/ / /_/ / __ \/ / / / __/ _ \
|
||||||
|
/ /_/ / / / / / / / / / / _, _/ /_/ / /_/ / /_/ __/
|
||||||
|
\____/_/ /_/ /_/_/ /_/_/_/ |_|\____/\__,_/\__/\___/
|
||||||
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
____ _ ______ __
|
||||||
|
/ __ \____ ___ ____ (_)_ __/___ ____ / /____
|
||||||
|
/ / / / __ `__ \/ __ \/ / / / / __ \/ __ \/ / ___/
|
||||||
|
/ /_/ / / / / / / / / / / / / / /_/ / /_/ / (__ )
|
||||||
|
\____/_/ /_/ /_/_/ /_/_/ /_/ \____/\____/_/____/
|
||||||
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
____ ______ __
|
||||||
|
/ __ \____ ____________ ______ _________/ / __ \__ _______/ /_ ___ _____
|
||||||
|
/ /_/ / __ `/ ___/ ___/ | /| / / __ \/ ___/ __ / /_/ / / / / ___/ __ \/ _ \/ ___/
|
||||||
|
/ ____/ /_/ (__ |__ )| |/ |/ / /_/ / / / /_/ / ____/ /_/ (__ ) / / / __/ /
|
||||||
|
/_/ \__,_/____/____/ |__/|__/\____/_/ \__,_/_/ \__,_/____/_/ /_/\___/_/
|
||||||
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
____ ____
|
||||||
|
/ __ \___ ____ _____ _/ __ \_________ _ __
|
||||||
|
/ /_/ / _ \/ __ `/ __ `/ /_/ / ___/ __ \| |/_/
|
||||||
|
/ ____/ __/ /_/ / /_/ / ____/ / / /_/ /> <
|
||||||
|
/_/ \___/\__, /\__,_/_/ /_/ \____/_/|_|
|
||||||
|
/____/
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
____ __
|
||||||
|
/ __ \____ ____ ____ ____ / /____
|
||||||
|
/ /_/ / __ \/_ / / __ \/ __ \/ __/ _ \
|
||||||
|
/ ____/ /_/ / / /_/ / / / /_/ / /_/ __/
|
||||||
|
/_/ \____/ /___/_/ /_/\____/\__/\___/
|
||||||
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
_____ __ _ ____ __
|
||||||
|
/ ___/____ _/ /_(_)____/ __/___ ______/ /_____ _______ __
|
||||||
|
\__ \/ __ `/ __/ / ___/ /_/ __ `/ ___/ __/ __ \/ ___/ / / /
|
||||||
|
___/ / /_/ / /_/ (__ ) __/ /_/ / /__/ /_/ /_/ / / / /_/ /
|
||||||
|
/____/\__,_/\__/_/____/_/ \__,_/\___/\__/\____/_/ \__, /
|
||||||
|
/____/
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
_____ __ _ _
|
||||||
|
/ ___// /_ (_)___ _____(_)
|
||||||
|
\__ \/ __ \/ / __ \/ ___/ /
|
||||||
|
___/ / / / / / /_/ / / / /
|
||||||
|
/____/_/ /_/_/\____/_/ /_/
|
||||||
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
__ __ __
|
||||||
|
/ / / /___ ____ ____ ______/ /_____ __________
|
||||||
|
/ / / / __ \/ __ \/ __ `/ ___/ //_/ _ \/ ___/ ___/
|
||||||
|
/ /_/ / / / / /_/ / /_/ / /__/ ,< / __/ / / /
|
||||||
|
\____/_/ /_/ .___/\__,_/\___/_/|_|\___/_/ /_/
|
||||||
|
/_/
|
||||||
+2
-1
@@ -110,7 +110,7 @@ EOF
|
|||||||
msg_ok "Image-processing libraries up to date"
|
msg_ok "Image-processing libraries up to date"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE="v3.0.3"
|
RELEASE="v3.1.0"
|
||||||
if check_for_gh_release "Immich" "immich-app/immich" "${RELEASE}" "each release is tested individually before the version is updated. Please do not open issues for this"; then
|
if check_for_gh_release "Immich" "immich-app/immich" "${RELEASE}" "each release is tested individually before the version is updated. Please do not open issues for this"; then
|
||||||
if [[ $(cat ~/.immich) > "2.5.1" ]]; then
|
if [[ $(cat ~/.immich) > "2.5.1" ]]; then
|
||||||
msg_info "Enabling Maintenance Mode"
|
msg_info "Enabling Maintenance Mode"
|
||||||
@@ -310,6 +310,7 @@ EOF
|
|||||||
grep -rl /usr/src | xargs -n1 sed -i "s|\/usr/src|$INSTALL_DIR|g"
|
grep -rl /usr/src | xargs -n1 sed -i "s|\/usr/src|$INSTALL_DIR|g"
|
||||||
grep -rlE "'/build'" | xargs -n1 sed -i "s|'/build'|'$APP_DIR'|g"
|
grep -rlE "'/build'" | xargs -n1 sed -i "s|'/build'|'$APP_DIR'|g"
|
||||||
sed -i "s@\"/cache\"@\"$INSTALL_DIR/cache\"@g" "$ML_DIR"/immich_ml/config.py
|
sed -i "s@\"/cache\"@\"$INSTALL_DIR/cache\"@g" "$ML_DIR"/immich_ml/config.py
|
||||||
|
[[ ! -f "$GEO_DIR/countryInfo.txt" ]] && curl_with_retry "https://download.geonames.org/export/dump/countryInfo.txt" "countryInfo.txt"
|
||||||
ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$APP_DIR"/upload
|
ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$APP_DIR"/upload
|
||||||
ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$ML_DIR"/upload
|
ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$ML_DIR"/upload
|
||||||
ln -s "$GEO_DIR" "$APP_DIR"
|
ln -s "$GEO_DIR" "$APP_DIR"
|
||||||
|
|||||||
@@ -30,6 +30,25 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if ! dotnet --list-sdks 2>/dev/null | grep -q '^8\.'; then
|
||||||
|
msg_info "Installing .NET SDK 8.0"
|
||||||
|
if [[ "$(arch_resolve)" == "arm64" ]]; then
|
||||||
|
curl -fsSL https://dot.net/v1/dotnet-install.sh -o /tmp/dotnet-install.sh
|
||||||
|
$STD bash /tmp/dotnet-install.sh --channel 8.0 --install-dir /usr/lib/dotnet8
|
||||||
|
ln -sf /usr/lib/dotnet8/dotnet /usr/bin/dotnet
|
||||||
|
rm -f /tmp/dotnet-install.sh
|
||||||
|
else
|
||||||
|
setup_deb822_repo \
|
||||||
|
"microsoft" \
|
||||||
|
"https://packages.microsoft.com/keys/microsoft-2025.asc" \
|
||||||
|
"https://packages.microsoft.com/debian/13/prod/" \
|
||||||
|
"trixie" \
|
||||||
|
"main"
|
||||||
|
$STD apt install -y dotnet-sdk-8.0
|
||||||
|
fi
|
||||||
|
msg_ok "Installed .NET SDK 8.0"
|
||||||
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "immichframe" "immichFrame/ImmichFrame"; then
|
if check_for_gh_release "immichframe" "immichFrame/ImmichFrame"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop immichframe
|
systemctl stop immichframe
|
||||||
|
|||||||
@@ -0,0 +1,81 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/mastodon/mastodon
|
||||||
|
|
||||||
|
APP="Mastodon"
|
||||||
|
var_tags="${var_tags:-social;fediverse;activitypub}"
|
||||||
|
var_cpu="${var_cpu:-4}"
|
||||||
|
var_ram="${var_ram:-4096}"
|
||||||
|
var_disk="${var_disk:-20}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_arm64="${var_arm64:-yes}"
|
||||||
|
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/mastodon ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "mastodon" "mastodon/mastodon"; then
|
||||||
|
msg_info "Stopping Services"
|
||||||
|
systemctl stop mastodon-web mastodon-sidekiq mastodon-streaming
|
||||||
|
msg_ok "Stopped Services"
|
||||||
|
|
||||||
|
create_backup /opt/mastodon/public/system /opt/mastodon/.env.production
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "mastodon" "mastodon/mastodon" "tarball"
|
||||||
|
sed -i "s/config.force_ssl = true/config.force_ssl = ENV.fetch('LOCAL_HTTPS', 'false') == 'true'/" /opt/mastodon/config/environments/production.rb
|
||||||
|
sed -i "s/https = Rails.env.production? || ENV\['LOCAL_HTTPS'\] == 'true'/https = ENV.fetch('LOCAL_HTTPS', 'false') == 'true'/" /opt/mastodon/config/initializers/1_hosts.rb
|
||||||
|
|
||||||
|
msg_info "Installing Ruby Dependencies"
|
||||||
|
cd /opt/mastodon
|
||||||
|
export PATH="$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
|
||||||
|
$STD bundle config set --local without 'development test'
|
||||||
|
$STD bundle config set --local deployment 'true'
|
||||||
|
$STD bundle install -j"$(nproc)"
|
||||||
|
msg_ok "Installed Ruby Dependencies"
|
||||||
|
|
||||||
|
msg_info "Installing Node.js Dependencies"
|
||||||
|
$STD yarn install
|
||||||
|
msg_ok "Installed Node.js Dependencies"
|
||||||
|
|
||||||
|
restore_backup
|
||||||
|
|
||||||
|
msg_info "Running Database Migrations"
|
||||||
|
RAILS_ENV=production $STD bundle exec rails db:migrate
|
||||||
|
msg_ok "Ran Database Migrations"
|
||||||
|
|
||||||
|
msg_info "Precompiling Assets"
|
||||||
|
RAILS_ENV=production SECRET_KEY_BASE_DUMMY=1 $STD bundle exec rails assets:precompile
|
||||||
|
msg_ok "Precompiled Assets"
|
||||||
|
|
||||||
|
msg_info "Starting Services"
|
||||||
|
systemctl start mastodon-web mastodon-sidekiq mastodon-streaming
|
||||||
|
msg_ok "Started Services"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
|
||||||
|
echo -e "${GATEWAY}${BGN}http://${IP}${CL}"
|
||||||
+6
-74
@@ -1,85 +1,17 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
# Author: michelroegl-brunner
|
# Author: michelroegl-brunner | Co-Author: vhsdream
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://musicseerr.com/ | Github: https://github.com/HabiRabbu/Musicseerr
|
|
||||||
|
|
||||||
APP="MusicSeerr"
|
APP="MusicSeerr"
|
||||||
var_tags="${var_tags:-arr;media}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-4096}"
|
|
||||||
var_disk="${var_disk:-8}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_arm64="${var_arm64:-yes}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
color
|
color
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
msg_error "This script is no longer available."
|
||||||
header_info
|
msg_warn "MusicSeerr has been renamed to DroppedNeedle."
|
||||||
check_container_storage
|
msg_warn "Run the DroppedNeedle script to migrate an existing installation:"
|
||||||
check_container_resources
|
echo 'bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/droppedneedle.sh)"'
|
||||||
|
exit 1
|
||||||
if [[ ! -d /opt/musicseerr ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "musicseerr" "HabiRabbu/Musicseerr"; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop musicseerr
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Backing up Data"
|
|
||||||
cp -a /opt/musicseerr/backend/config /opt/musicseerr_config_backup
|
|
||||||
cp -a /opt/musicseerr/backend/cache /opt/musicseerr_cache_backup
|
|
||||||
msg_ok "Backed up Data"
|
|
||||||
|
|
||||||
PYTHON_VERSION="3.13" setup_uv
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "musicseerr" "HabiRabbu/Musicseerr" "tarball"
|
|
||||||
NODE_VERSION="25" NODE_MODULE="pnpm@10.33.0" setup_nodejs
|
|
||||||
|
|
||||||
msg_info "Building Frontend"
|
|
||||||
cd /opt/musicseerr/frontend
|
|
||||||
export NODE_OPTIONS="--max-old-space-size=3072"
|
|
||||||
rm -rf node_modules build
|
|
||||||
$STD pnpm install --frozen-lockfile
|
|
||||||
$STD pnpm run build
|
|
||||||
msg_ok "Built Frontend"
|
|
||||||
|
|
||||||
msg_info "Updating Application"
|
|
||||||
mkdir -p /opt/musicseerr/backend/config /opt/musicseerr/backend/cache
|
|
||||||
$STD uv venv --clear /opt/musicseerr/venv
|
|
||||||
$STD uv pip install -r /opt/musicseerr/backend/requirements.txt --python=/opt/musicseerr/venv/bin/python
|
|
||||||
rm -rf /opt/musicseerr/backend/static
|
|
||||||
cp -r /opt/musicseerr/frontend/build /opt/musicseerr/backend/static
|
|
||||||
msg_ok "Updated Application"
|
|
||||||
|
|
||||||
msg_info "Restoring Data"
|
|
||||||
rm -rf /opt/musicseerr/backend/config /opt/musicseerr/backend/cache
|
|
||||||
cp -a /opt/musicseerr_config_backup/. /opt/musicseerr/backend/config/
|
|
||||||
cp -a /opt/musicseerr_cache_backup/. /opt/musicseerr/backend/cache/
|
|
||||||
rm -rf /opt/musicseerr_config_backup /opt/musicseerr_cache_backup
|
|
||||||
msg_ok "Restored Data"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start musicseerr
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
|
|
||||||
echo -e "${GATEWAY}${BGN}http://${IP}:8688${CL}"
|
|
||||||
|
|||||||
+64
@@ -0,0 +1,64 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/nezhahq/nezha
|
||||||
|
|
||||||
|
APP="Nezha"
|
||||||
|
var_tags="${var_tags:-monitoring;infrastructure;analytics}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-2048}"
|
||||||
|
var_disk="${var_disk:-8}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_arm64="${var_arm64:-no}"
|
||||||
|
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/nezha ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "nezha" "nezhahq/nezha"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop nezha
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
create_backup /opt/nezha/data
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "nezha" "nezhahq/nezha" "prebuild" "latest" "/opt/nezha" "dashboard-linux-amd64.zip"
|
||||||
|
|
||||||
|
if [[ -f /opt/nezha/dashboard-linux-amd64 ]]; then
|
||||||
|
mv /opt/nezha/dashboard-linux-amd64 /opt/nezha/dashboard
|
||||||
|
chmod +x /opt/nezha/dashboard
|
||||||
|
fi
|
||||||
|
|
||||||
|
restore_backup
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start nezha
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
|
||||||
|
echo -e "${GATEWAY}${BGN}http://${IP}:8008${CL}"
|
||||||
@@ -21,8 +21,6 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
header_info "$APP"
|
|
||||||
|
|
||||||
msg_info "Updating Alpine OS"
|
msg_info "Updating Alpine OS"
|
||||||
$STD apk -U upgrade
|
$STD apk -U upgrade
|
||||||
msg_ok "System updated"
|
msg_ok "System updated"
|
||||||
@@ -30,10 +28,8 @@ function update_script() {
|
|||||||
msg_info "Pulling latest NPMplus container image"
|
msg_info "Pulling latest NPMplus container image"
|
||||||
cd /opt
|
cd /opt
|
||||||
$STD docker compose pull
|
$STD docker compose pull
|
||||||
msg_info "Recreating container"
|
|
||||||
$STD docker compose up -d
|
$STD docker compose up -d
|
||||||
msg_ok "Updated NPMplus container"
|
msg_ok "Updated NPMplus container"
|
||||||
|
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,69 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/diegosouzapw/OmniRoute
|
||||||
|
|
||||||
|
APP="OmniRoute"
|
||||||
|
var_tags="${var_tags:-ai;gateway;llm}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-2048}"
|
||||||
|
var_disk="${var_disk:-10}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_arm64="${var_arm64:-no}"
|
||||||
|
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/omniroute ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Checking for Updates"
|
||||||
|
local LATEST
|
||||||
|
LATEST=$(npm view omniroute version 2>/dev/null)
|
||||||
|
if [[ -z "$LATEST" ]]; then
|
||||||
|
msg_error "Could not determine latest OmniRoute version"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
if [[ "$LATEST" == "$(omniroute --version 2>/dev/null)" ]]; then
|
||||||
|
msg_ok "Already up to date (${LATEST})"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
msg_ok "New version available: ${LATEST}"
|
||||||
|
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop omniroute
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Updating OmniRoute to ${LATEST}"
|
||||||
|
$STD npm install -g omniroute@latest
|
||||||
|
msg_ok "Updated OmniRoute to ${LATEST}"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start omniroute
|
||||||
|
msg_ok "Started 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}:20128${CL}"
|
||||||
|
echo -e "${INFO}${YW} The admin password is stored in /opt/omniroute/.env (INITIAL_PASSWORD)${CL}"
|
||||||
Executable
+65
@@ -0,0 +1,65 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: Majiiin
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/iib0011/omni-tools
|
||||||
|
|
||||||
|
APP="OmniTools"
|
||||||
|
var_tags="${var_tags:-utilities;tools;converter}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-2048}"
|
||||||
|
var_disk="${var_disk:-8}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_arm64="${var_arm64:-yes}"
|
||||||
|
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/omnitools ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
|
||||||
|
if check_for_gh_release "omnitools" "iib0011/omni-tools"; then
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "omnitools" "iib0011/omni-tools" "tarball"
|
||||||
|
|
||||||
|
msg_info "Building OmniTools"
|
||||||
|
cd /opt/omnitools
|
||||||
|
export HUSKY=0
|
||||||
|
$STD npm ci
|
||||||
|
$STD npm run build
|
||||||
|
msg_ok "Built OmniTools"
|
||||||
|
|
||||||
|
msg_info "Publishing Web Assets"
|
||||||
|
rm -rf /usr/share/nginx/html
|
||||||
|
mkdir -p /usr/share/nginx/html
|
||||||
|
cp -a /opt/omnitools/dist/. /usr/share/nginx/html/
|
||||||
|
rm -rf /opt/omnitools/node_modules
|
||||||
|
systemctl reload nginx
|
||||||
|
msg_ok "Published Web Assets"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
|
||||||
|
echo -e "${GATEWAY}${BGN}http://${IP}${CL}"
|
||||||
@@ -70,7 +70,9 @@ function update_script() {
|
|||||||
-DOTBR_BACKBONE_ROUTER=ON \
|
-DOTBR_BACKBONE_ROUTER=ON \
|
||||||
-DOTBR_SYSTEMD_UNIT_DIR=/etc/systemd/system \
|
-DOTBR_SYSTEMD_UNIT_DIR=/etc/systemd/system \
|
||||||
-DOT_FIREWALL=ON \
|
-DOT_FIREWALL=ON \
|
||||||
|
-DOTBR_NAT64=ON \
|
||||||
-DOT_POSIX_NAT64_CIDR="192.168.255.0/24" \
|
-DOT_POSIX_NAT64_CIDR="192.168.255.0/24" \
|
||||||
|
-DOTBR_DNS_UPSTREAM_QUERY=ON \
|
||||||
..
|
..
|
||||||
$STD ninja
|
$STD ninja
|
||||||
$STD ninja install
|
$STD ninja install
|
||||||
@@ -101,6 +103,31 @@ EOF
|
|||||||
mv /etc/default/otbr-agent.bak /etc/default/otbr-agent
|
mv /etc/default/otbr-agent.bak /etc/default/otbr-agent
|
||||||
msg_ok "Restored Configuration"
|
msg_ok "Restored Configuration"
|
||||||
|
|
||||||
|
if [[ ! -f /etc/systemd/system/otbr-agent.service.d/10-otbr-post-start.conf ]]; then
|
||||||
|
msg_info "Configuring OpenThread Border Router post-start service"
|
||||||
|
cat <<'EOF' >/usr/local/bin/otbr-post-start.sh
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# OpenThread Border Router post-start script
|
||||||
|
# Run custom commands for runtime configuration options
|
||||||
|
|
||||||
|
# Wait for the otbr-agent service to be initialized
|
||||||
|
#sleep 3
|
||||||
|
|
||||||
|
# Configure routing and translation features
|
||||||
|
#ot-ctl nat64 enable
|
||||||
|
#ot-ctl dns server upstream enable
|
||||||
|
EOF
|
||||||
|
chmod +x /usr/local/bin/otbr-post-start.sh
|
||||||
|
mkdir -p /etc/systemd/system/otbr-agent.service.d
|
||||||
|
cat <<'EOF' >/etc/systemd/system/otbr-agent.service.d/10-otbr-post-start.conf
|
||||||
|
[Service]
|
||||||
|
ExecStartPost=/usr/local/bin/otbr-post-start.sh
|
||||||
|
EOF
|
||||||
|
systemctl daemon-reload
|
||||||
|
msg_ok "Configured OpenThread Border Router post-start service"
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Starting Services"
|
msg_info "Starting Services"
|
||||||
systemctl start otbr-agent
|
systemctl start otbr-agent
|
||||||
systemctl start otbr-web
|
systemctl start otbr-web
|
||||||
|
|||||||
+1
-1
@@ -29,7 +29,7 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
NODE_VERSION="24" NODE_MODULE="corepack" setup_nodejs
|
NODE_VERSION="26" NODE_MODULE="corepack" setup_nodejs
|
||||||
|
|
||||||
if check_for_gh_release "outline" "outline/outline"; then
|
if check_for_gh_release "outline" "outline/outline"; then
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
|
|||||||
@@ -31,6 +31,8 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
NODE_VERSION="26" setup_nodejs
|
||||||
|
|
||||||
if check_for_gh_release "OxiCloud" "DioCrafts/OxiCloud"; then
|
if check_for_gh_release "OxiCloud" "DioCrafts/OxiCloud"; then
|
||||||
msg_info "Stopping OxiCloud"
|
msg_info "Stopping OxiCloud"
|
||||||
systemctl stop oxicloud
|
systemctl stop oxicloud
|
||||||
|
|||||||
@@ -0,0 +1,79 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/pglombardo/PasswordPusher
|
||||||
|
|
||||||
|
APP="PasswordPusher"
|
||||||
|
var_tags="${var_tags:-security;sharing;password}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-2048}"
|
||||||
|
var_disk="${var_disk:-4}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_arm64="${var_arm64:-yes}"
|
||||||
|
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/passwordpusher ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "passwordpusher" "pglombardo/PasswordPusher"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop passwordpusher
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
create_backup /opt/passwordpusher/storage /opt/passwordpusher/.env.production
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "passwordpusher" "pglombardo/PasswordPusher" "tarball"
|
||||||
|
|
||||||
|
msg_info "Installing Gem Dependencies"
|
||||||
|
cd /opt/passwordpusher
|
||||||
|
export PATH="$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
|
||||||
|
$STD bundle config set --local without 'development test'
|
||||||
|
$STD bundle config set --local deployment 'true'
|
||||||
|
$STD bundle install
|
||||||
|
msg_ok "Installed Gem Dependencies"
|
||||||
|
|
||||||
|
msg_info "Installing JS Dependencies"
|
||||||
|
$STD yarn install --frozen-lockfile
|
||||||
|
msg_ok "Installed JS Dependencies"
|
||||||
|
|
||||||
|
msg_info "Running Database Migrations"
|
||||||
|
RAILS_ENV=production $STD bundle exec rails db:migrate
|
||||||
|
msg_ok "Ran Database Migrations"
|
||||||
|
|
||||||
|
msg_info "Precompiling Assets"
|
||||||
|
RAILS_ENV=production SECRET_KEY_BASE_DUMMY=1 $STD bundle exec rails assets:precompile
|
||||||
|
msg_ok "Precompiled Assets"
|
||||||
|
|
||||||
|
restore_backup
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start passwordpusher
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
|
||||||
|
echo -e "${GATEWAY}${BGN}http://${IP}:5100${CL}"
|
||||||
+3
-2
@@ -34,8 +34,9 @@ function update_script() {
|
|||||||
if [[ "$CURRENT_PHP" != "8.3" ]]; then
|
if [[ "$CURRENT_PHP" != "8.3" ]]; then
|
||||||
PHP_VERSION="8.3" PHP_FPM="YES" setup_php
|
PHP_VERSION="8.3" PHP_FPM="YES" setup_php
|
||||||
setup_composer
|
setup_composer
|
||||||
sed -i 's|php8\.2-fpm\.sock|php8.3-fpm.sock|g' /etc/nginx/sites-available/paymenter.conf
|
PHP_SOCK=$(get_php_fpm_socket)
|
||||||
$STD systemctl reload nginx
|
sed -i "s|fastcgi_pass unix:.*|fastcgi_pass unix:${PHP_SOCK};|" /etc/nginx/sites-available/paymenter.conf
|
||||||
|
nginx_enable_site paymenter.conf
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "paymenter" "paymenter/paymenter"; then
|
if check_for_gh_release "paymenter" "paymenter/paymenter"; then
|
||||||
|
|||||||
@@ -0,0 +1,64 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/PegaProx/project-pegaprox
|
||||||
|
|
||||||
|
APP="PegaProx"
|
||||||
|
var_tags="${var_tags:-proxmox;management}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-2048}"
|
||||||
|
var_disk="${var_disk:-8}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_arm64="${var_arm64:-no}"
|
||||||
|
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/pegaprox ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "pegaprox" "PegaProx/project-pegaprox"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop pegaprox
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
create_backup /opt/pegaprox/config /etc/pegaprox/secret.key
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "pegaprox" "PegaProx/project-pegaprox" "tarball"
|
||||||
|
|
||||||
|
msg_info "Updating Python Environment"
|
||||||
|
$STD uv venv --python 3.12 /opt/pegaprox/venv
|
||||||
|
$STD uv pip install --python /opt/pegaprox/venv/bin/python -r /opt/pegaprox/requirements.txt
|
||||||
|
msg_ok "Updated Python Environment"
|
||||||
|
|
||||||
|
restore_backup
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start pegaprox
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:5000${CL}"
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/timothepoznanski/poznote
|
||||||
|
|
||||||
|
APP="Poznote"
|
||||||
|
var_tags="${var_tags:-notes;documentation;php}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-512}"
|
||||||
|
var_disk="${var_disk:-4}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_arm64="${var_arm64:-yes}"
|
||||||
|
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/www/html/data ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "poznote" "timothepoznanski/poznote"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop nginx
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
create_backup /var/www/html/data
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "poznote" "timothepoznanski/poznote" "tarball"
|
||||||
|
|
||||||
|
msg_info "Deploying New Version"
|
||||||
|
cp -r /opt/poznote/src/. /var/www/html/
|
||||||
|
chown -R www-data:www-data /var/www/html
|
||||||
|
msg_ok "Deployed New Version"
|
||||||
|
|
||||||
|
restore_backup
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start nginx
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
|
||||||
|
echo -e "${GATEWAY}${BGN}http://${IP}:8040${CL}"
|
||||||
@@ -28,6 +28,9 @@ function update_script() {
|
|||||||
msg_error "No ${APP} installation found!"
|
msg_error "No ${APP} installation found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
NODE_VERSION="24" NODE_MODULE="playactor" setup_nodejs
|
||||||
|
|
||||||
if check_for_gh_release "ps5-mqtt" "FunkeyFlo/ps5-mqtt"; then
|
if check_for_gh_release "ps5-mqtt" "FunkeyFlo/ps5-mqtt"; then
|
||||||
msg_info "Stopping service"
|
msg_info "Stopping service"
|
||||||
systemctl stop ps5-mqtt
|
systemctl stop ps5-mqtt
|
||||||
|
|||||||
+2
-2
@@ -62,9 +62,9 @@ function update_script() {
|
|||||||
msg_ok "Updated Configuration"
|
msg_ok "Updated Configuration"
|
||||||
|
|
||||||
msg_info "Starting Services"
|
msg_info "Starting Services"
|
||||||
$STD nginx -t
|
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
systemctl start nginx rackula-api
|
nginx_enable_site rackula
|
||||||
|
systemctl start rackula-api
|
||||||
msg_ok "Started Services"
|
msg_ok "Started Services"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
fi
|
fi
|
||||||
|
|||||||
+11
-1
@@ -30,6 +30,12 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ ! -x /usr/bin/7zz || ! -x /usr/bin/bsdtar ]]; then
|
||||||
|
msg_info "Installing Archive Tools"
|
||||||
|
$STD apt install -y 7zip-standalone libarchive-tools
|
||||||
|
msg_ok "Installed Archive Tools"
|
||||||
|
fi
|
||||||
|
|
||||||
NODE_VERSION="24" setup_nodejs
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
|
||||||
if check_for_gh_release "romm" "rommapp/romm"; then
|
if check_for_gh_release "romm" "rommapp/romm"; then
|
||||||
@@ -44,6 +50,10 @@ function update_script() {
|
|||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "romm" "rommapp/romm" "tarball" "latest" "/opt/romm"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "romm" "rommapp/romm" "tarball" "latest" "/opt/romm"
|
||||||
|
|
||||||
|
find /opt/romm/backend/alembic/versions -maxdepth 1 -type f -name '1.*.py' -delete 2>/dev/null || true
|
||||||
|
find /opt/romm/backend/alembic/versions -maxdepth 1 -type f -name '2.0.0_.py' -delete 2>/dev/null || true
|
||||||
|
find /opt/romm/backend -name '__pycache__' -type d -prune -exec rm -rf {} + 2>/dev/null || true
|
||||||
|
|
||||||
restore_backup
|
restore_backup
|
||||||
|
|
||||||
msg_info "Updating ROMM"
|
msg_info "Updating ROMM"
|
||||||
@@ -75,7 +85,7 @@ function update_script() {
|
|||||||
systemctl reload angie
|
systemctl reload angie
|
||||||
elif [[ -f /etc/nginx/sites-available/romm ]]; then
|
elif [[ -f /etc/nginx/sites-available/romm ]]; then
|
||||||
sed -i "s|alias .*/library/;|alias ${ROMM_BASE}/library/;|" /etc/nginx/sites-available/romm
|
sed -i "s|alias .*/library/;|alias ${ROMM_BASE}/library/;|" /etc/nginx/sites-available/romm
|
||||||
systemctl reload nginx
|
nginx_enable_site romm
|
||||||
fi
|
fi
|
||||||
msg_ok "Updated ROMM"
|
msg_ok "Updated ROMM"
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,70 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: n8flx
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://www.satisfactorygame.com/
|
||||||
|
|
||||||
|
APP="Satisfactory"
|
||||||
|
var_tags="${var_tags:-gaming;server}"
|
||||||
|
var_cpu="${var_cpu:-4}"
|
||||||
|
var_ram="${var_ram:-8192}"
|
||||||
|
var_disk="${var_disk:-20}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_arm64="${var_arm64:-no}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -x /opt/steamcmd/steamcmd.sh || ! -d /opt/satisfactory/server ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Stopping Satisfactory"
|
||||||
|
systemctl stop satisfactory
|
||||||
|
msg_ok "Stopped Satisfactory"
|
||||||
|
|
||||||
|
create_backup /home/steam/.config/Epic/FactoryGame/Saved
|
||||||
|
|
||||||
|
msg_info "Updating Satisfactory"
|
||||||
|
if $STD runuser -u steam -- /opt/steamcmd/steamcmd.sh \
|
||||||
|
+force_install_dir /opt/satisfactory/server \
|
||||||
|
+login anonymous \
|
||||||
|
+app_update 1690800 -beta public validate \
|
||||||
|
+quit; then
|
||||||
|
msg_ok "Updated Satisfactory"
|
||||||
|
else
|
||||||
|
restore_backup
|
||||||
|
systemctl start satisfactory
|
||||||
|
msg_error "Failed to update Satisfactory"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
restore_backup
|
||||||
|
|
||||||
|
msg_info "Starting Satisfactory"
|
||||||
|
systemctl start satisfactory
|
||||||
|
msg_ok "Started Satisfactory"
|
||||||
|
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} Add the server in Satisfactory Server Manager:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}${IP}:7777${CL}"
|
||||||
|
echo -e "${INFO}${YW} Required ports:${CL} ${BGN}7777 TCP/UDP and 8888 TCP${CL}"
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/go-shiori/shiori
|
||||||
|
|
||||||
|
APP="Shiori"
|
||||||
|
var_tags="${var_tags:-bookmarks;read-it-later;notes}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-1024}"
|
||||||
|
var_disk="${var_disk:-4}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_arm64="${var_arm64:-yes}"
|
||||||
|
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/shiori ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "shiori" "go-shiori/shiori"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop shiori
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
create_backup /opt/shiori/data
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "shiori" "go-shiori/shiori" "prebuild" "latest" "/opt/shiori" "shiori_Linux_$(arch_resolve "x86_64" "aarch64")_*.tar.gz"
|
||||||
|
chmod +x /opt/shiori/shiori
|
||||||
|
restore_backup
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start shiori
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
|
||||||
|
echo -e "${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
||||||
+2
-1
@@ -93,7 +93,8 @@ EOF
|
|||||||
msg_ok "Refreshed SparkyFitness Service"
|
msg_ok "Refreshed SparkyFitness Service"
|
||||||
|
|
||||||
msg_info "Starting Services"
|
msg_info "Starting Services"
|
||||||
$STD systemctl start sparkyfitness-server nginx
|
$STD systemctl start sparkyfitness-server
|
||||||
|
nginx_enable_site sparkyfitness
|
||||||
msg_ok "Started Services"
|
msg_ok "Started Services"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
|
||||||
if check_for_gh_release "sync-in" "Sync-in/server"; then
|
if check_for_gh_release "sync-in" "Sync-in/server"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop sync-in
|
systemctl stop sync-in
|
||||||
|
|||||||
+1
-1
@@ -30,7 +30,7 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
NODE_VERSION="24" setup_nodejs
|
NODE_VERSION="26" setup_nodejs
|
||||||
|
|
||||||
if check_for_gh_tag "guacd" "apache/guacamole-server"; then
|
if check_for_gh_tag "guacd" "apache/guacamole-server"; then
|
||||||
msg_info "Stopping guacd"
|
msg_info "Stopping guacd"
|
||||||
|
|||||||
@@ -29,6 +29,18 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if grep -qs "packages.microsoft.com/debian/12" /etc/apt/sources.list.d/microsoft*.sources; then
|
||||||
|
msg_info "Migrating Microsoft Repository to Debian 13"
|
||||||
|
setup_deb822_repo \
|
||||||
|
"microsoft" \
|
||||||
|
"https://packages.microsoft.com/keys/microsoft-2025.asc" \
|
||||||
|
"https://packages.microsoft.com/debian/13/prod/" \
|
||||||
|
"trixie" \
|
||||||
|
"main"
|
||||||
|
rm -f /usr/share/keyrings/microsoft-prod.gpg
|
||||||
|
msg_ok "Migrated Microsoft Repository to Debian 13"
|
||||||
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "UmlautAdaptarr" "PCJones/Umlautadaptarr"; then
|
if check_for_gh_release "UmlautAdaptarr" "PCJones/Umlautadaptarr"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop umlautadaptarr
|
systemctl stop umlautadaptarr
|
||||||
|
|||||||
@@ -0,0 +1,59 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://unpackerr.zip/
|
||||||
|
|
||||||
|
APP="Unpackerr"
|
||||||
|
var_tags="${var_tags:-downloads;arr;automation;extraction}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-512}"
|
||||||
|
var_disk="${var_disk:-2}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_arm64="${var_arm64:-yes}"
|
||||||
|
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/unpackerr/unpackerr.conf ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "unpackerr" "Unpackerr/unpackerr"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop unpackerr
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
create_backup /etc/unpackerr/unpackerr.conf
|
||||||
|
|
||||||
|
DPKG_FORCE_CONFOLD=1 fetch_and_deploy_gh_release "unpackerr" "Unpackerr/unpackerr" "binary" "latest" "/opt/unpackerr" "unpackerr_*_$(arch_resolve).deb"
|
||||||
|
|
||||||
|
restore_backup
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start unpackerr
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW}Configure integrations in:${CL}"
|
||||||
|
echo -e "${GATEWAY}${BGN}/etc/unpackerr/unpackerr.conf${CL}"
|
||||||
+6
-5
@@ -29,9 +29,9 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE="$( [[ -f "$HOME/.vikunja" ]] && cat "$HOME/.vikunja" 2>/dev/null || [[ -f /opt/Vikunja_version ]] && cat /opt/Vikunja_version 2>/dev/null || true)"
|
INSTALLED_VERSION="$( [[ -f "$HOME/.vikunja" ]] && cat "$HOME/.vikunja" 2>/dev/null || [[ -f /opt/Vikunja_version ]] && cat /opt/Vikunja_version 2>/dev/null || true)"
|
||||||
if [[ -z "$RELEASE" ]] || [[ "$RELEASE" == "unstable" ]] || dpkg --compare-versions "${RELEASE:-0.0.0}" lt "1.0.0"; then
|
if [[ -z "$INSTALLED_VERSION" ]] || [[ "$INSTALLED_VERSION" == "unstable" ]] || dpkg --compare-versions "${INSTALLED_VERSION:-0.0.0}" lt "1.0.0"; then
|
||||||
msg_warn "You are upgrading from Vikunja '$RELEASE'."
|
msg_warn "You are upgrading from Vikunja '$INSTALLED_VERSION'."
|
||||||
msg_warn "This requires MANUAL config changes in /etc/vikunja/config.yml."
|
msg_warn "This requires MANUAL config changes in /etc/vikunja/config.yml."
|
||||||
msg_warn "See: https://vikunja.io/changelog/whats-new-in-vikunja-1.0.0/#config-changes"
|
msg_warn "See: https://vikunja.io/changelog/whats-new-in-vikunja-1.0.0/#config-changes"
|
||||||
|
|
||||||
@@ -46,7 +46,8 @@ function update_script() {
|
|||||||
[[ "$CONFIRM2" =~ ^[yY]$ ]] || exit 0
|
[[ "$CONFIRM2" =~ ^[yY]$ ]] || exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "vikunja" "go-vikunja/vikunja"; then
|
RELEASE="v2.3.0"
|
||||||
|
if check_for_gh_release "vikunja" "go-vikunja/vikunja" "${RELEASE}" "v2.4.0 is killed at startup by the systemd SystemCallFilter shipped in the .deb (upstream go-vikunja/vikunja#3252); pinned until a fixed release is out"; then
|
||||||
echo
|
echo
|
||||||
msg_warn "The package update may include config file changes."
|
msg_warn "The package update may include config file changes."
|
||||||
echo -e "${TAB}${YW}How do you want to handle /etc/vikunja/config.yml?${CL}"
|
echo -e "${TAB}${YW}How do you want to handle /etc/vikunja/config.yml?${CL}"
|
||||||
@@ -65,7 +66,7 @@ function update_script() {
|
|||||||
systemctl stop vikunja
|
systemctl stop vikunja
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "vikunja" "go-vikunja/vikunja" "binary" "latest" "" "vikunja-*-$(arch_resolve "x86_64" "aarch64").deb"
|
fetch_and_deploy_gh_release "vikunja" "go-vikunja/vikunja" "binary" "${RELEASE}" "" "vikunja-*-$(arch_resolve "x86_64" "aarch64").deb"
|
||||||
$STD systemctl daemon-reload
|
$STD systemctl daemon-reload
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ chmod -R 755 /opt/2fauth
|
|||||||
msg_ok "Setup 2fauth"
|
msg_ok "Setup 2fauth"
|
||||||
|
|
||||||
msg_info "Configure Service"
|
msg_info "Configure Service"
|
||||||
|
PHP_SOCK=$(get_php_fpm_socket)
|
||||||
cat <<EOF >/etc/nginx/conf.d/2fauth.conf
|
cat <<EOF >/etc/nginx/conf.d/2fauth.conf
|
||||||
server {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
@@ -67,7 +68,7 @@ server {
|
|||||||
error_page 404 /index.php;
|
error_page 404 /index.php;
|
||||||
|
|
||||||
location ~ \.php\$ {
|
location ~ \.php\$ {
|
||||||
fastcgi_pass unix:/var/run/php/php${PHP_VERSION}-fpm.sock;
|
fastcgi_pass unix:${PHP_SOCK};
|
||||||
fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;
|
fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;
|
||||||
include fastcgi_params;
|
include fastcgi_params;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -207,9 +207,7 @@ server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
ln -sf /etc/nginx/sites-available/affine.conf /etc/nginx/sites-enabled/
|
nginx_enable_site affine.conf
|
||||||
rm -f /etc/nginx/sites-enabled/default
|
|
||||||
systemctl enable -q --now nginx
|
|
||||||
msg_ok "Configured Nginx"
|
msg_ok "Configured Nginx"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ update_os
|
|||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
software-properties-common \
|
|
||||||
gdal-bin \
|
gdal-bin \
|
||||||
tesseract-ocr \
|
tesseract-ocr \
|
||||||
tesseract-ocr-eng \
|
tesseract-ocr-eng \
|
||||||
@@ -33,10 +32,7 @@ $STD apt-get install -y \
|
|||||||
cabextract
|
cabextract
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Setup OpenJDK"
|
JAVA_VERSION="21" setup_java
|
||||||
$STD apt-get install -y \
|
|
||||||
openjdk-17-jre-headless
|
|
||||||
msg_ok "Setup OpenJDK"
|
|
||||||
|
|
||||||
msg_info "Installing Apache Tika"
|
msg_info "Installing Apache Tika"
|
||||||
mkdir -p /opt/apache-tika
|
mkdir -p /opt/apache-tika
|
||||||
|
|||||||
@@ -89,10 +89,7 @@ server {
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
ln -sf /etc/nginx/sites-available/babybuddy /etc/nginx/sites-enabled/babybuddy
|
nginx_enable_site babybuddy
|
||||||
rm /etc/nginx/sites-enabled/default
|
|
||||||
systemctl enable -q --now nginx
|
|
||||||
service nginx reload
|
|
||||||
msg_ok "Configured NGINX"
|
msg_ok "Configured NGINX"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ $STD npm run build
|
|||||||
msg_ok "Installed Salt Rim"
|
msg_ok "Installed Salt Rim"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
|
PHP_SOCK=$(get_php_fpm_socket)
|
||||||
cat <<EOF >/etc/nginx/sites-available/barassistant.conf
|
cat <<EOF >/etc/nginx/sites-available/barassistant.conf
|
||||||
server {
|
server {
|
||||||
listen 80 default_server;
|
listen 80 default_server;
|
||||||
@@ -126,7 +127,7 @@ server {
|
|||||||
error_page 404 /index.php;
|
error_page 404 /index.php;
|
||||||
|
|
||||||
location ~ ^/index\.php(/|$) {
|
location ~ ^/index\.php(/|$) {
|
||||||
fastcgi_pass unix:/var/run/php/php$PHPVER-fpm.sock;
|
fastcgi_pass unix:${PHP_SOCK};
|
||||||
fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;
|
fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;
|
||||||
include fastcgi_params;
|
include fastcgi_params;
|
||||||
fastcgi_hide_header X-Powered-By;
|
fastcgi_hide_header X-Powered-By;
|
||||||
@@ -148,9 +149,7 @@ server {
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
ln -s /etc/nginx/sites-available/barassistant.conf /etc/nginx/sites-enabled/
|
nginx_enable_site barassistant.conf
|
||||||
rm -f /etc/nginx/sites-enabled/default
|
|
||||||
$STD systemctl reload nginx
|
|
||||||
msg_ok "Created Service"
|
msg_ok "Created Service"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ chmod 775 /opt/bazarr /var/lib/bazarr/
|
|||||||
sed -i.bak 's/--only-binary=Pillow//g' /opt/bazarr/requirements.txt
|
sed -i.bak 's/--only-binary=Pillow//g' /opt/bazarr/requirements.txt
|
||||||
$STD uv venv --clear /opt/bazarr/venv --python 3.12
|
$STD uv venv --clear /opt/bazarr/venv --python 3.12
|
||||||
$STD uv pip install -r /opt/bazarr/requirements.txt --python /opt/bazarr/venv/bin/python3
|
$STD uv pip install -r /opt/bazarr/requirements.txt --python /opt/bazarr/venv/bin/python3
|
||||||
|
$STD uv pip install psycopg2-binary --python /opt/bazarr/venv/bin/python3
|
||||||
msg_ok "Installed Bazarr"
|
msg_ok "Installed Bazarr"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
@@ -36,7 +37,7 @@ UMask=0002
|
|||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
RestartSec=5
|
RestartSec=5
|
||||||
Type=simple
|
Type=simple
|
||||||
ExecStart=/opt/bazarr/venv/bin/python3 /opt/bazarr/bazarr.py
|
ExecStart=/opt/bazarr/venv/bin/python3 /opt/bazarr/bazarr.py -c /var/lib/bazarr
|
||||||
KillSignal=SIGINT
|
KillSignal=SIGINT
|
||||||
TimeoutStopSec=20
|
TimeoutStopSec=20
|
||||||
SyslogIdentifier=bazarr
|
SyslogIdentifier=bazarr
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ LimitNOFILE=65536
|
|||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
systemctl enable -q --now bichon
|
systemctl enable -q --now bichon
|
||||||
msg_info "Created Service"
|
msg_ok "Created Service"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|||||||
@@ -122,9 +122,7 @@ server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
ln -sf /etc/nginx/sites-available/checkmate /etc/nginx/sites-enabled/checkmate
|
nginx_enable_site checkmate
|
||||||
rm -f /etc/nginx/sites-enabled/default
|
|
||||||
$STD systemctl reload nginx
|
|
||||||
msg_ok "Configured Nginx Reverse Proxy"
|
msg_ok "Configured Nginx Reverse Proxy"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ update_os
|
|||||||
fetch_and_deploy_gh_release "Cleanuparr" "Cleanuparr/Cleanuparr" "prebuild" "latest" "/opt/cleanuparr" "*linux-$(arch_resolve).zip"
|
fetch_and_deploy_gh_release "Cleanuparr" "Cleanuparr/Cleanuparr" "prebuild" "latest" "/opt/cleanuparr" "*linux-$(arch_resolve).zip"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
|
mkdir -p /etc/cleanuparr /var/log/cleanuparr
|
||||||
cat <<EOF >/etc/systemd/system/cleanuparr.service
|
cat <<EOF >/etc/systemd/system/cleanuparr.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Cleanuparr Daemon
|
Description=Cleanuparr Daemon
|
||||||
@@ -29,7 +30,8 @@ ExecStart=/opt/cleanuparr/Cleanuparr
|
|||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
RestartSec=5
|
RestartSec=5
|
||||||
Environment="PORT=11011"
|
Environment="PORT=11011"
|
||||||
Environment="CONFIG_DIR=/opt/cleanuparr/config"
|
Environment="CLEANUPARR_CONFIG_PATH=/etc/cleanuparr"
|
||||||
|
Environment="CLEANUPARR_LOGS_PATH=/var/log/cleanuparr"
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
|
|||||||
@@ -13,8 +13,6 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
setup_go
|
|
||||||
|
|
||||||
var_cf_api_token="default"
|
var_cf_api_token="default"
|
||||||
read -rp "${TAB3}Enter the Cloudflare API token: " var_cf_api_token
|
read -rp "${TAB3}Enter the Cloudflare API token: " var_cf_api_token
|
||||||
|
|
||||||
@@ -53,23 +51,50 @@ while true; do
|
|||||||
done
|
done
|
||||||
msg_ok "Configured Application"
|
msg_ok "Configured Application"
|
||||||
|
|
||||||
|
setup_go
|
||||||
|
fetch_and_deploy_gh_release "cloudflare-ddns" "favonia/cloudflare-ddns" "tarball"
|
||||||
|
|
||||||
|
msg_info "Building ${APPLICATION}"
|
||||||
|
cd /opt/cloudflare-ddns
|
||||||
|
export CGO_ENABLED=0 GOOS=linux
|
||||||
|
$STD go build -trimpath -ldflags="-s -w" -o /usr/local/bin/ddns ./cmd/ddns
|
||||||
|
msg_ok "Built ${APPLICATION}"
|
||||||
|
|
||||||
|
# The binary is statically linked (CGO_ENABLED=0), so Go is only a build-time
|
||||||
|
# dependency. Removing it keeps the container small; update_script reinstalls it
|
||||||
|
# via setup_go when a rebuild is needed.
|
||||||
|
msg_info "Removing Build Dependencies"
|
||||||
|
rm -rf /usr/local/go /usr/local/bin/go /usr/local/bin/gofmt /root/go /root/.cache/go-build /opt/cloudflare-ddns
|
||||||
|
msg_ok "Removed Build Dependencies"
|
||||||
|
|
||||||
msg_info "Setting up service"
|
msg_info "Setting up service"
|
||||||
mkdir -p /root/go
|
useradd --system --no-create-home --shell /usr/sbin/nologin cloudflare-ddns 2>/dev/null || true
|
||||||
|
cat <<EOF >/etc/cloudflare-ddns.env
|
||||||
|
CLOUDFLARE_API_TOKEN=${var_cf_api_token}
|
||||||
|
DOMAINS=${var_cf_domains}
|
||||||
|
PROXIED=${var_cf_proxied}
|
||||||
|
IP6_PROVIDER=${var_cf_ip6_provider}
|
||||||
|
EOF
|
||||||
|
chown root:root /etc/cloudflare-ddns.env
|
||||||
|
chmod 600 /etc/cloudflare-ddns.env
|
||||||
cat <<EOF >/etc/systemd/system/cloudflare-ddns.service
|
cat <<EOF >/etc/systemd/system/cloudflare-ddns.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Cloudflare DDNS Service (Go run)
|
Description=Cloudflare DDNS Service
|
||||||
After=network.target
|
After=network-online.target
|
||||||
|
Wants=network-online.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Environment="CLOUDFLARE_API_TOKEN=${var_cf_api_token}"
|
Type=simple
|
||||||
Environment="DOMAINS=${var_cf_domains}"
|
User=cloudflare-ddns
|
||||||
Environment="PROXIED=${var_cf_proxied}"
|
Group=cloudflare-ddns
|
||||||
Environment="IP6_PROVIDER=${var_cf_ip6_provider}"
|
EnvironmentFile=/etc/cloudflare-ddns.env
|
||||||
Environment="GOPATH=/root/go"
|
ExecStart=/usr/local/bin/ddns
|
||||||
Environment="GOCACHE=/tmp/go-build"
|
|
||||||
ExecStart=/usr/local/bin/go run github.com/favonia/cloudflare-ddns/cmd/ddns@latest
|
|
||||||
Restart=always
|
Restart=always
|
||||||
RestartSec=300
|
RestartSec=300
|
||||||
|
NoNewPrivileges=true
|
||||||
|
ProtectSystem=strict
|
||||||
|
ProtectHome=true
|
||||||
|
PrivateTmp=true
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/cooklang/cookcli
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "cook" "cooklang/cookcli" "prebuild" "latest" "/opt/cookcli" "cook-$(arch_resolve "x86_64-unknown-linux-gnu" "aarch64-unknown-linux-musl").tar.gz"
|
||||||
|
|
||||||
|
msg_info "Configuring CookCLI"
|
||||||
|
chmod +x /opt/cookcli/cook
|
||||||
|
mkdir -p /opt/cookcli/recipes
|
||||||
|
cd /opt/cookcli/recipes
|
||||||
|
$STD /opt/cookcli/cook seed
|
||||||
|
msg_ok "Configured CookCLI"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/cookcli.service
|
||||||
|
[Unit]
|
||||||
|
Description=CookCLI Recipe Server
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=root
|
||||||
|
WorkingDirectory=/opt/cookcli/recipes
|
||||||
|
ExecStart=/opt/cookcli/cook server --host 0.0.0.0 --port 9080
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now cookcli
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
@@ -17,7 +17,7 @@ msg_info "Installing Dependencies"
|
|||||||
$STD apt install -y build-essential
|
$STD apt install -y build-essential
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_VERSION="24" setup_nodejs
|
NODE_VERSION="26" setup_nodejs
|
||||||
|
|
||||||
msg_info "Setup Cross-Seed"
|
msg_info "Setup Cross-Seed"
|
||||||
$STD npm install cross-seed@latest -g
|
$STD npm install cross-seed@latest -g
|
||||||
|
|||||||
@@ -185,11 +185,7 @@ server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
ln -sf /etc/nginx/sites-available/databasus /etc/nginx/sites-enabled/databasus
|
nginx_enable_site databasus
|
||||||
rm -f /etc/nginx/sites-enabled/default
|
|
||||||
$STD nginx -t
|
|
||||||
$STD systemctl enable -q --now nginx
|
|
||||||
$STD systemctl reload nginx
|
|
||||||
msg_ok "Configured Nginx"
|
msg_ok "Configured Nginx"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
@@ -174,9 +174,7 @@ server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
ln -sf /etc/nginx/sites-available/dawarich.conf /etc/nginx/sites-enabled/
|
nginx_enable_site dawarich.conf
|
||||||
rm -f /etc/nginx/sites-enabled/default
|
|
||||||
systemctl enable -q --now nginx
|
|
||||||
msg_ok "Configured Nginx"
|
msg_ok "Configured Nginx"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
@@ -0,0 +1,215 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://www.discourse.org/
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt install -y \
|
||||||
|
build-essential \
|
||||||
|
git \
|
||||||
|
libssl-dev \
|
||||||
|
libreadline-dev \
|
||||||
|
zlib1g-dev \
|
||||||
|
libyaml-dev \
|
||||||
|
imagemagick \
|
||||||
|
gsfonts \
|
||||||
|
brotli \
|
||||||
|
nginx \
|
||||||
|
redis-server
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
PG_VERSION="17" PG_MODULES="pgvector" setup_postgresql
|
||||||
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
RUBY_VERSION="3.4.4" setup_ruby
|
||||||
|
|
||||||
|
msg_info "Configuring PostgreSQL for Discourse"
|
||||||
|
DISCOURSE_DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||||
|
PG_HBA=$(find /etc/postgresql -name pg_hba.conf 2>/dev/null | head -n1)
|
||||||
|
sed -i 's/^local\s\+all\s\+all\s\+peer$/local all all md5/' "$PG_HBA"
|
||||||
|
$STD systemctl restart postgresql
|
||||||
|
PG_DB_NAME="discourse" PG_DB_USER="discourse" PG_DB_PASS="$DISCOURSE_DB_PASS" PG_DB_EXTENSIONS="vector" setup_postgresql_db
|
||||||
|
msg_ok "Configured PostgreSQL for Discourse"
|
||||||
|
|
||||||
|
msg_info "Configuring Discourse"
|
||||||
|
DISCOURSE_SECRET_KEY=$(openssl rand -hex 64)
|
||||||
|
$STD git clone --depth 1 https://github.com/discourse/discourse.git /opt/discourse
|
||||||
|
cd /opt/discourse
|
||||||
|
cat <<EOF >/opt/discourse/.env
|
||||||
|
RAILS_ENV=production
|
||||||
|
RAILS_LOG_TO_STDOUT=true
|
||||||
|
RAILS_SERVE_STATIC_FILES=true
|
||||||
|
SECRET_KEY_BASE=${DISCOURSE_SECRET_KEY}
|
||||||
|
DISCOURSE_DB_HOST=/var/run/postgresql
|
||||||
|
DISCOURSE_DB_PORT=5432
|
||||||
|
DISCOURSE_DB_NAME=discourse
|
||||||
|
DISCOURSE_DB_USERNAME=discourse
|
||||||
|
DISCOURSE_DB_PASSWORD=${DISCOURSE_DB_PASS}
|
||||||
|
DISCOURSE_REDIS_URL=redis://localhost:6379
|
||||||
|
DISCOURSE_DEVELOPER_EMAILS=admin@discourse.local
|
||||||
|
DISCOURSE_HOSTNAME=${LOCAL_IP}
|
||||||
|
DISCOURSE_SMTP_ADDRESS=localhost
|
||||||
|
DISCOURSE_SMTP_PORT=25
|
||||||
|
DISCOURSE_SMTP_AUTHENTICATION=none
|
||||||
|
DISCOURSE_NOTIFICATION_EMAIL=noreply@${LOCAL_IP}
|
||||||
|
DISCOURSE_SKIP_NEW_ACCOUNT_EMAIL=true
|
||||||
|
APP_ROOT=/opt/discourse
|
||||||
|
EOF
|
||||||
|
|
||||||
|
mkdir -p /opt/discourse/tmp/sockets /opt/discourse/tmp/pids /opt/discourse/log
|
||||||
|
chown -R root:root /opt/discourse
|
||||||
|
chmod 755 /opt/discourse
|
||||||
|
msg_ok "Configured Discourse"
|
||||||
|
|
||||||
|
msg_info "Installing Discourse Dependencies"
|
||||||
|
$STD systemctl enable --now redis-server
|
||||||
|
cd /opt/discourse
|
||||||
|
export PATH="$HOME/.rbenv/bin:$HOME/.rbenv/shims:$PATH"
|
||||||
|
eval "$(rbenv init - bash)" 2>/dev/null || true
|
||||||
|
export RAILS_ENV=production
|
||||||
|
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||||
|
$STD corepack enable
|
||||||
|
$STD bundle config set --local deployment true
|
||||||
|
$STD bundle config set --local without 'test development'
|
||||||
|
$STD bundle install
|
||||||
|
$STD pnpm install
|
||||||
|
msg_ok "Installed Discourse Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setting Up Database"
|
||||||
|
cd /opt/discourse
|
||||||
|
export PATH="$HOME/.rbenv/bin:$HOME/.rbenv/shims:$PATH"
|
||||||
|
eval "$(rbenv init - bash)" 2>/dev/null || true
|
||||||
|
export RAILS_ENV=production
|
||||||
|
set -a
|
||||||
|
source /opt/discourse/.env
|
||||||
|
set +a
|
||||||
|
$STD bundle exec rails db:migrate
|
||||||
|
$STD bundle exec rails db:seed
|
||||||
|
msg_ok "Set Up Database"
|
||||||
|
|
||||||
|
msg_info "Creating Admin Account"
|
||||||
|
ADMIN_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c16)
|
||||||
|
$STD bundle exec rails runner "
|
||||||
|
user = User.new(email: 'admin@discourse.local', username: 'admin', password: '${ADMIN_PASS}')
|
||||||
|
user.active = true
|
||||||
|
user.admin = true
|
||||||
|
user.approved = true
|
||||||
|
user.save!(validate: false)
|
||||||
|
user.activate
|
||||||
|
user.grant_admin!
|
||||||
|
user.change_trust_level!(TrustLevel[4])
|
||||||
|
SiteSetting.has_login_hint = false
|
||||||
|
SiteSetting.wizard_enabled = false
|
||||||
|
"
|
||||||
|
cat <<EOF >~/discourse.creds
|
||||||
|
Discourse Credentials
|
||||||
|
Admin Username: admin
|
||||||
|
Admin Email: admin@discourse.local
|
||||||
|
Admin Password: ${ADMIN_PASS}
|
||||||
|
Database Password: ${DISCOURSE_DB_PASS}
|
||||||
|
EOF
|
||||||
|
msg_ok "Created Admin Account"
|
||||||
|
|
||||||
|
msg_info "Building Discourse Assets"
|
||||||
|
cd /opt/discourse
|
||||||
|
export PATH="$HOME/.rbenv/bin:$HOME/.rbenv/shims:$PATH"
|
||||||
|
eval "$(rbenv init - bash)" 2>/dev/null || true
|
||||||
|
export RAILS_ENV=production
|
||||||
|
set -a && source /opt/discourse/.env && set +a
|
||||||
|
$STD bundle exec rails assets:precompile
|
||||||
|
msg_ok "Built Discourse Assets"
|
||||||
|
|
||||||
|
msg_info "Creating Services"
|
||||||
|
cat <<EOF >/etc/systemd/system/discourse.service
|
||||||
|
[Unit]
|
||||||
|
Description=Discourse Forum
|
||||||
|
After=network.target postgresql.service redis-server.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=root
|
||||||
|
WorkingDirectory=/opt/discourse
|
||||||
|
EnvironmentFile=/opt/discourse/.env
|
||||||
|
Environment=PATH=/root/.rbenv/shims:/root/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||||
|
ExecStart=/root/.rbenv/shims/bundle exec pitchfork -c config/pitchfork.conf.rb
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF >/etc/systemd/system/discourse-sidekiq.service
|
||||||
|
[Unit]
|
||||||
|
Description=Discourse Sidekiq
|
||||||
|
After=network.target postgresql.service redis-server.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=root
|
||||||
|
WorkingDirectory=/opt/discourse
|
||||||
|
EnvironmentFile=/opt/discourse/.env
|
||||||
|
Environment=PATH=/root/.rbenv/shims:/root/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||||
|
ExecStart=/root/.rbenv/shims/bundle exec sidekiq -q critical -q default -q low -q ultra_low
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now discourse discourse-sidekiq
|
||||||
|
msg_ok "Created Services"
|
||||||
|
|
||||||
|
msg_info "Configuring Nginx"
|
||||||
|
cat <<EOF >/etc/nginx/sites-available/discourse
|
||||||
|
server {
|
||||||
|
listen 80 default_server;
|
||||||
|
server_name _;
|
||||||
|
root /opt/discourse/public;
|
||||||
|
|
||||||
|
client_max_body_size 100M;
|
||||||
|
proxy_busy_buffers_size 512k;
|
||||||
|
proxy_buffers 4 512k;
|
||||||
|
|
||||||
|
location /assets/ {
|
||||||
|
gzip_static on;
|
||||||
|
expires max;
|
||||||
|
add_header Cache-Control public,immutable;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /uploads/ {
|
||||||
|
expires 1h;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
try_files \$uri @discourse;
|
||||||
|
}
|
||||||
|
|
||||||
|
location @discourse {
|
||||||
|
proxy_pass http://127.0.0.1:3000;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade \$http_upgrade;
|
||||||
|
proxy_set_header Connection "upgrade";
|
||||||
|
proxy_set_header Host \$host;
|
||||||
|
proxy_set_header X-Real-IP \$remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto \$scheme;
|
||||||
|
proxy_set_header X-Accel-Mapping /opt/discourse/public/=/downloads/;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
nginx_enable_site discourse
|
||||||
|
msg_ok "Configured Nginx"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
@@ -139,9 +139,7 @@ server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
ln -sf /etc/nginx/sites-available/dispatcharr.conf /etc/nginx/sites-enabled/dispatcharr.conf
|
nginx_enable_site dispatcharr.conf
|
||||||
rm -f /etc/nginx/sites-enabled/default
|
|
||||||
systemctl restart nginx
|
|
||||||
msg_ok "Configured Nginx"
|
msg_ok "Configured Nginx"
|
||||||
|
|
||||||
msg_info "Creating Services"
|
msg_info "Creating Services"
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ $STD apt install -y \
|
|||||||
make
|
make
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_VERSION="22" NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/docmost/docmost/main/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs
|
NODE_VERSION="26" NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/docmost/docmost/main/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs
|
||||||
PG_VERSION="16" setup_postgresql
|
PG_VERSION="16" setup_postgresql
|
||||||
PG_DB_NAME="docmost_db" PG_DB_USER="docmost_user" setup_postgresql_db
|
PG_DB_NAME="docmost_db" PG_DB_USER="docmost_user" setup_postgresql_db
|
||||||
fetch_and_deploy_gh_release "docmost" "docmost/docmost" "tarball"
|
fetch_and_deploy_gh_release "docmost" "docmost/docmost" "tarball"
|
||||||
|
|||||||
@@ -0,0 +1,108 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://docspell.org/
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt install -y \
|
||||||
|
ocrmypdf \
|
||||||
|
tesseract-ocr \
|
||||||
|
tesseract-ocr-deu \
|
||||||
|
tesseract-ocr-eng \
|
||||||
|
unpaper \
|
||||||
|
weasyprint \
|
||||||
|
libreoffice-core \
|
||||||
|
ghostscript \
|
||||||
|
libreoffice-writer \
|
||||||
|
libreoffice-calc \
|
||||||
|
python3-pip \
|
||||||
|
python3-uno \
|
||||||
|
python3-venv
|
||||||
|
|
||||||
|
python3 -m venv \
|
||||||
|
--system-site-packages \
|
||||||
|
/opt/unoserver
|
||||||
|
|
||||||
|
$STD /opt/unoserver/bin/pip install --upgrade pip
|
||||||
|
$STD /opt/unoserver/bin/pip install unoserver
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
JAVA_VERSION="21" setup_java
|
||||||
|
PG_VERSION="17" setup_postgresql
|
||||||
|
PG_DB_NAME="docspell" PG_DB_USER="docspell" setup_postgresql_db
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "docspell-joex" "eikek/docspell" "binary" "latest" "/opt/docspell" "docspell-joex_*_all.deb"
|
||||||
|
fetch_and_deploy_gh_release "docspell-restserver" "eikek/docspell" "binary" "latest" "/opt/docspell" "docspell-restserver_*_all.deb"
|
||||||
|
|
||||||
|
msg_info "Configuring Docspell"
|
||||||
|
DOCSPELL_SECRET=$(openssl rand -hex 32)
|
||||||
|
DOCSPELL_ADMIN_SECRET=$(openssl rand -hex 32)
|
||||||
|
cat <<EOF >/etc/docspell-restserver/docspell-server.conf
|
||||||
|
docspell.server {
|
||||||
|
app-id = "rest1"
|
||||||
|
base-url = "http://${LOCAL_IP}:7880"
|
||||||
|
internal-url = "http://127.0.0.1:7880"
|
||||||
|
bind {
|
||||||
|
address = "0.0.0.0"
|
||||||
|
port = 7880
|
||||||
|
}
|
||||||
|
auth.server-secret = "hex:${DOCSPELL_SECRET}"
|
||||||
|
admin-endpoint.secret = "${DOCSPELL_ADMIN_SECRET}"
|
||||||
|
full-text-search {
|
||||||
|
enabled = true
|
||||||
|
backend = "postgresql"
|
||||||
|
postgresql.use-default-connection = true
|
||||||
|
}
|
||||||
|
backend {
|
||||||
|
jdbc {
|
||||||
|
url = "jdbc:postgresql://127.0.0.1:5432/${PG_DB_NAME}"
|
||||||
|
user = "${PG_DB_USER}"
|
||||||
|
password = "${PG_DB_PASS}"
|
||||||
|
}
|
||||||
|
signup.mode = "open"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
cat <<EOF >/etc/docspell-joex/docspell-joex.conf
|
||||||
|
docspell.joex {
|
||||||
|
app-id = "joex1"
|
||||||
|
base-url = "http://127.0.0.1:7878"
|
||||||
|
bind {
|
||||||
|
address = "127.0.0.1"
|
||||||
|
port = 7878
|
||||||
|
}
|
||||||
|
jdbc {
|
||||||
|
url = "jdbc:postgresql://127.0.0.1:5432/${PG_DB_NAME}"
|
||||||
|
user = "${PG_DB_USER}"
|
||||||
|
password = "${PG_DB_PASS}"
|
||||||
|
}
|
||||||
|
full-text-search {
|
||||||
|
enabled = true
|
||||||
|
backend = "postgresql"
|
||||||
|
postgresql.use-default-connection = true
|
||||||
|
}
|
||||||
|
scheduler.pool-size = 1
|
||||||
|
text-analysis.nlp.mode = "basic"
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
chown root:docspell /etc/docspell-joex/docspell-joex.conf /etc/docspell-restserver/docspell-server.conf
|
||||||
|
chmod 640 /etc/docspell-joex/docspell-joex.conf /etc/docspell-restserver/docspell-server.conf
|
||||||
|
msg_ok "Configured Docspell"
|
||||||
|
|
||||||
|
msg_info "Creating Services"
|
||||||
|
systemctl enable -q --now docspell-restserver docspell-joex
|
||||||
|
msg_ok "Created Services"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: michelroegl-brunner | Co-Author: vhsdream
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://droppedneedle.com/ | Github: https://github.com/DroppedNeedle/DroppedNeedle
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
PYTHON_VERSION="3.13" setup_uv
|
||||||
|
fetch_and_deploy_gh_release "droppedneedle" "DroppedNeedle/DroppedNeedle" "tarball"
|
||||||
|
NODE_VERSION="25" NODE_MODULE="pnpm@10.33.0" setup_nodejs
|
||||||
|
|
||||||
|
msg_info "Building Frontend"
|
||||||
|
cd /opt/droppedneedle/frontend
|
||||||
|
export NODE_OPTIONS="--max-old-space-size=3072"
|
||||||
|
$STD pnpm install --frozen-lockfile
|
||||||
|
$STD pnpm run build
|
||||||
|
msg_ok "Built Frontend"
|
||||||
|
|
||||||
|
msg_info "Setting up Application"
|
||||||
|
mkdir -p /opt/droppedneedle/backend/config /opt/droppedneedle/backend/cache
|
||||||
|
$STD uv venv /opt/droppedneedle/venv
|
||||||
|
$STD uv pip install -r /opt/droppedneedle/backend/requirements.txt --python=/opt/droppedneedle/venv/bin/python
|
||||||
|
rm -rf /opt/droppedneedle/backend/static
|
||||||
|
cp -r /opt/droppedneedle/frontend/build /opt/droppedneedle/backend/static
|
||||||
|
msg_ok "Set up Application"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/droppedneedle.service
|
||||||
|
[Unit]
|
||||||
|
Description=DroppedNeedle Service
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=root
|
||||||
|
WorkingDirectory=/opt/droppedneedle/backend
|
||||||
|
Environment=ROOT_APP_DIR=/opt/droppedneedle/backend
|
||||||
|
Environment=PORT=8688
|
||||||
|
# Environment=SLSKD_DOWNLOADS_PATH=<path-to-slskd-downloads>
|
||||||
|
ExecStart=/opt/droppedneedle/venv/bin/uvicorn main:app --host 0.0.0.0 --port 8688 --loop uvloop --http httptools --workers 1
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now droppedneedle
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
@@ -46,11 +46,7 @@ server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
ln -sf /etc/nginx/sites-available/espconnect /etc/nginx/sites-enabled/espconnect
|
nginx_enable_site espconnect
|
||||||
rm -f /etc/nginx/sites-enabled/default
|
|
||||||
$STD nginx -t
|
|
||||||
systemctl enable -q nginx
|
|
||||||
systemctl restart nginx
|
|
||||||
msg_ok "Configured Nginx"
|
msg_ok "Configured Nginx"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
@@ -108,9 +108,7 @@ server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
ln -sf /etc/nginx/sites-available/excalidash /etc/nginx/sites-enabled/excalidash
|
nginx_enable_site excalidash
|
||||||
rm -f /etc/nginx/sites-enabled/default
|
|
||||||
systemctl reload nginx
|
|
||||||
msg_ok "Configured Nginx"
|
msg_ok "Configured Nginx"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
|
|||||||
@@ -57,10 +57,7 @@ set +a
|
|||||||
envsubst </opt/feishin/settings.js.template >/etc/nginx/conf.d/settings.js
|
envsubst </opt/feishin/settings.js.template >/etc/nginx/conf.d/settings.js
|
||||||
envsubst '${PUBLIC_PATH}' </opt/feishin/ng.conf.template >/etc/nginx/sites-available/feishin
|
envsubst '${PUBLIC_PATH}' </opt/feishin/ng.conf.template >/etc/nginx/sites-available/feishin
|
||||||
|
|
||||||
ln -sf /etc/nginx/sites-available/feishin /etc/nginx/sites-enabled/feishin
|
nginx_enable_site feishin
|
||||||
rm -f /etc/nginx/sites-enabled/default
|
|
||||||
systemctl enable -q --now nginx
|
|
||||||
systemctl reload nginx
|
|
||||||
msg_ok "Published Web Assets"
|
msg_ok "Published Web Assets"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user