Merge branch 'main' of https://github.com/community-scripts/ProxmoxVED
This commit is contained in:
commit
dcfb8d34f2
2
.github/pull_request_template.md
generated
vendored
2
.github/pull_request_template.md
generated
vendored
@ -46,5 +46,5 @@ Link: #
|
|||||||
> PRs that do not meet these requirements may be closed without review.
|
> PRs that do not meet these requirements may be closed without review.
|
||||||
- [ ] The application is **at least 6 months old**
|
- [ ] The application is **at least 6 months old**
|
||||||
- [ ] The application is **actively maintained**
|
- [ ] The application is **actively maintained**
|
||||||
- [ ] The application has **200+ GitHub stars**
|
- [ ] The application has **600+ GitHub stars**
|
||||||
- [ ] Official **release tarballs** are published
|
- [ ] Official **release tarballs** are published
|
||||||
|
|||||||
159
.github/workflows/update_issue.yml
generated
vendored
Normal file
159
.github/workflows/update_issue.yml
generated
vendored
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
name: Update Issue on PR Merge
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [closed]
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
|
pull-requests: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
update_issues:
|
||||||
|
if: github.event.pull_request.merged == true && github.repository == 'community-scripts/ProxmoxVED'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Extract Script Names from Changed Files
|
||||||
|
id: extract_scripts
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
CHANGED_FILES=$(gh pr diff ${{ github.event.pull_request.number }} --repo ${{ github.repository }} --name-only)
|
||||||
|
|
||||||
|
SCRIPT_NAMES=()
|
||||||
|
|
||||||
|
while IFS= read -r FILE; do
|
||||||
|
if [[ $FILE =~ ^ct/(.+)\.sh$ ]]; then
|
||||||
|
SCRIPT_NAME="${BASH_REMATCH[1]}"
|
||||||
|
if [[ ! " ${SCRIPT_NAMES[@]} " =~ " ${SCRIPT_NAME} " ]]; then
|
||||||
|
SCRIPT_NAMES+=("$SCRIPT_NAME")
|
||||||
|
fi
|
||||||
|
elif [[ $FILE =~ ^install/(.+)-install\.sh$ ]]; then
|
||||||
|
SCRIPT_NAME="${BASH_REMATCH[1]}"
|
||||||
|
if [[ ! " ${SCRIPT_NAMES[@]} " =~ " ${SCRIPT_NAME} " ]]; then
|
||||||
|
SCRIPT_NAMES+=("$SCRIPT_NAME")
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done <<< "$CHANGED_FILES"
|
||||||
|
|
||||||
|
if [ ${#SCRIPT_NAMES[@]} -eq 0 ]; then
|
||||||
|
echo "No script files found in PR"
|
||||||
|
echo "script_names=[]" >> $GITHUB_OUTPUT
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
JSON_NAMES=$(printf '%s\n' "${SCRIPT_NAMES[@]}" | jq -R . | jq -s -c .)
|
||||||
|
echo "script_names=$JSON_NAMES" >> $GITHUB_OUTPUT
|
||||||
|
echo "Found script names: ${SCRIPT_NAMES[*]}"
|
||||||
|
|
||||||
|
- name: Process Each Script
|
||||||
|
if: steps.extract_scripts.outputs.script_names != '[]'
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
env:
|
||||||
|
PR_AUTHOR: ${{ github.event.pull_request.user.login }}
|
||||||
|
SCRIPT_NAMES: ${{ steps.extract_scripts.outputs.script_names }}
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const scriptNames = JSON.parse(process.env.SCRIPT_NAMES);
|
||||||
|
const prAuthor = process.env.PR_AUTHOR;
|
||||||
|
const message = `@${prAuthor} This PR got merged now and is in the testing phase, it will be migrated to ProxmoxVE when testing is completed`;
|
||||||
|
const labelName = 'Ready For Testing';
|
||||||
|
|
||||||
|
for (const scriptName of scriptNames) {
|
||||||
|
console.log(`Processing script: ${scriptName}`);
|
||||||
|
|
||||||
|
const { data: issues } = await github.rest.issues.listForRepo({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
state: 'open',
|
||||||
|
per_page: 100
|
||||||
|
});
|
||||||
|
|
||||||
|
const scriptNameLower = scriptName.toLowerCase();
|
||||||
|
let existingIssue = issues.find(issue =>
|
||||||
|
!issue.pull_request && issue.title.toLowerCase() === scriptNameLower
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!existingIssue) {
|
||||||
|
const { data: searchResults } = await github.rest.search.issuesAndPullRequests({
|
||||||
|
q: `repo:${context.repo.owner}/${context.repo.repo} is:issue is:open ${scriptName}`,
|
||||||
|
per_page: 100
|
||||||
|
});
|
||||||
|
|
||||||
|
existingIssue = searchResults.items.find(issue =>
|
||||||
|
issue.title.toLowerCase() === scriptNameLower
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (existingIssue) {
|
||||||
|
console.log(`Found existing issue #${existingIssue.number}: ${existingIssue.title}`);
|
||||||
|
|
||||||
|
await github.rest.issues.createComment({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: existingIssue.number,
|
||||||
|
body: message
|
||||||
|
});
|
||||||
|
|
||||||
|
const { data: labels } = await github.rest.issues.listLabelsOnIssue({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: existingIssue.number
|
||||||
|
});
|
||||||
|
|
||||||
|
const hasLabel = labels.some(label => label.name === labelName);
|
||||||
|
|
||||||
|
if (!hasLabel) {
|
||||||
|
await github.rest.issues.addLabels({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: existingIssue.number,
|
||||||
|
labels: [labelName]
|
||||||
|
});
|
||||||
|
console.log(`Added "${labelName}" label to issue #${existingIssue.number}`);
|
||||||
|
} else {
|
||||||
|
console.log(`Issue #${existingIssue.number} already has "${labelName}" label`);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log(`No existing issue found for "${scriptName}", creating new issue`);
|
||||||
|
|
||||||
|
const scriptType = 'CT (LXC Container)';
|
||||||
|
|
||||||
|
const formattedName = scriptName
|
||||||
|
.split(/[-_]/)
|
||||||
|
.map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
||||||
|
.join(' ');
|
||||||
|
|
||||||
|
const issueBody = '# 🛠️ **New Script**\n' +
|
||||||
|
'Create an Issue when you want to merge a new Script. The name of the Issue must be the same as your APP.sh file. (Example: SnipeIT, snipeit.sh; Alpine-Docker, alpine-docker.sh)\n\n' +
|
||||||
|
'### Name of the Script\n\n' +
|
||||||
|
formattedName + '\n\n' +
|
||||||
|
'### Script Type\n\n' +
|
||||||
|
scriptType + '\n\n' +
|
||||||
|
'### 📋 Script Details\n\n' +
|
||||||
|
'This script has been merged and is ready for testing. ';
|
||||||
|
|
||||||
|
const { data: newIssue } = await github.rest.issues.create({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
title: scriptName,
|
||||||
|
body: issueBody,
|
||||||
|
labels: [labelName]
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(`Created new issue #${newIssue.number}: ${newIssue.title}`);
|
||||||
|
|
||||||
|
await github.rest.issues.createComment({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: newIssue.number,
|
||||||
|
body: message
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
71
ct/alpine-loki.sh
Normal file
71
ct/alpine-loki.sh
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: hoholms
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/grafana/loki
|
||||||
|
|
||||||
|
APP="Alpine-Loki"
|
||||||
|
var_tags="${var_tags:-alpine;monitoring}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-256}"
|
||||||
|
var_disk="${var_disk:-1}"
|
||||||
|
var_os="${var_os:-alpine}"
|
||||||
|
var_version="${var_version:-3.22}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
if ! apk -e info newt >/dev/null 2>&1; then
|
||||||
|
apk add -q newt
|
||||||
|
fi
|
||||||
|
LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
|
||||||
|
while true; do
|
||||||
|
CHOICE=$(
|
||||||
|
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 3 \
|
||||||
|
"1" "Check for Loki Updates" \
|
||||||
|
"2" "Allow 0.0.0.0 for listening" \
|
||||||
|
"3" "Allow only ${LXCIP} for listening" 3>&2 2>&1 1>&3
|
||||||
|
)
|
||||||
|
exit_status=$?
|
||||||
|
if [ $exit_status == 1 ]; then
|
||||||
|
clear
|
||||||
|
exit-script
|
||||||
|
fi
|
||||||
|
header_info
|
||||||
|
case $CHOICE in
|
||||||
|
1)
|
||||||
|
$STD apk -U upgrade
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/loki
|
||||||
|
service loki restart
|
||||||
|
msg_ok "Allowed listening on all interfaces!"
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/loki
|
||||||
|
service loki restart
|
||||||
|
msg_ok "Allowed listening only on ${LXCIP}!"
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${APP} should be reachable by going to the following URL.
|
||||||
|
${BL}http://${IP}:3100${CL} \n"
|
||||||
|
echo -e "Promtail should be reachable by going to the following URL.
|
||||||
|
${BL}http://${IP}:9080${CL} \n"
|
||||||
45
ct/cronmaster.sh
Normal file
45
ct/cronmaster.sh
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||||
|
# Source:
|
||||||
|
|
||||||
|
APP="CRONMASTER"
|
||||||
|
var_tags="${var_tags:-}"
|
||||||
|
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_unprivileged="${var_unprivileged:-1}"
|
||||||
|
#var_fuse="${var_fuse:-no}"
|
||||||
|
#var_tun="${var_tun:-no}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if [[ ! -d /opt/cronmaster ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
msg_info "Updating Debian LXC"
|
||||||
|
$STD apt update
|
||||||
|
$STD apt upgrade -y
|
||||||
|
msg_ok "Updated Debian LXC"
|
||||||
|
cleanup_lxc
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed successfully!"
|
||||||
|
msg_custom "🚀" "${GN}" "${APP} setup has been successfully initialized!"
|
||||||
34
ct/ente.sh
34
ct/ente.sh
@ -8,10 +8,10 @@ source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxV
|
|||||||
APP="Ente"
|
APP="Ente"
|
||||||
var_tags="${var_tags:-photos}"
|
var_tags="${var_tags:-photos}"
|
||||||
var_cpu="${var_cpu:-4}"
|
var_cpu="${var_cpu:-4}"
|
||||||
var_ram="${var_ram:-4096}"
|
var_ram="${var_ram:-6144}"
|
||||||
var_disk="${var_disk:-10}"
|
var_disk="${var_disk:-20}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@ -20,23 +20,25 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -d /var ]]; then
|
if [[ ! -d /var ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
|
||||||
fi
|
|
||||||
msg_info "Updating Ente LXC"
|
|
||||||
$STD apt-get update
|
|
||||||
$STD apt-get -y upgrade
|
|
||||||
msg_ok "Updated Ente LXC"
|
|
||||||
exit
|
exit
|
||||||
|
fi
|
||||||
|
msg_info "Updating Ente LXC"
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get -y upgrade
|
||||||
|
msg_ok "Updated Ente LXC"
|
||||||
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
build_container
|
build_container
|
||||||
description
|
description
|
||||||
|
|
||||||
msg_ok "Completed successfully!"
|
msg_ok "Completed successfully!\n"
|
||||||
msg_custom "🚀" "${GN}" "${APP} setup has been successfully initialized!"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||||
|
|||||||
68
ct/fladder.sh
Normal file
68
ct/fladder.sh
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: wendyliga
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/DonutWare/Fladder
|
||||||
|
|
||||||
|
APP="Fladder"
|
||||||
|
var_tags="${var_tags:-media}"
|
||||||
|
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_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/fladder ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "Fladder" "DonutWare/Fladder"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop nginx
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Backing up configuration"
|
||||||
|
if [[ -f /opt/fladder/assets/config/config.json ]]; then
|
||||||
|
cp /opt/fladder/assets/config/config.json /tmp/fladder_config.json.bak
|
||||||
|
msg_ok "Configuration backed up"
|
||||||
|
fi
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Fladder" "DonutWare/Fladder" "prebuild" "latest" "/opt/fladder" "Fladder-Web-*.zip"
|
||||||
|
|
||||||
|
msg_info "Restoring configuration"
|
||||||
|
if [[ -f /tmp/fladder_config.json.bak ]]; then
|
||||||
|
mkdir -p /opt/fladder/assets/config
|
||||||
|
cp /tmp/fladder_config.json.bak /opt/fladder/assets/config/config.json
|
||||||
|
rm -f /tmp/fladder_config.json.bak
|
||||||
|
msg_ok "Configuration restored"
|
||||||
|
fi
|
||||||
|
|
||||||
|
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 IP:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
||||||
42
ct/gwn-manager.sh
Normal file
42
ct/gwn-manager.sh
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: Slaviša Arežina (tremor021)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://www.grandstream.com/products/networking-solutions/wi-fi-management/product/gwn-manager
|
||||||
|
|
||||||
|
APP="GWN-Manager"
|
||||||
|
var_tags="${var_tags:-network;management}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-6144}"
|
||||||
|
var_disk="${var_disk:-8}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
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 /gwn ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_ok "Application is updated via the web interface!"
|
||||||
|
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}:8443${CL}"
|
||||||
6
ct/headers/alpine-loki
Normal file
6
ct/headers/alpine-loki
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
___ __ _ __ __ _
|
||||||
|
/ | / /___ (_)___ ___ / / ____ / /__(_)
|
||||||
|
/ /| | / / __ \/ / __ \/ _ \______/ / / __ \/ //_/ /
|
||||||
|
/ ___ |/ / /_/ / / / / / __/_____/ /___/ /_/ / ,< / /
|
||||||
|
/_/ |_/_/ .___/_/_/ /_/\___/ /_____/\____/_/|_/_/
|
||||||
|
/_/
|
||||||
5
ct/headers/loki
Normal file
5
ct/headers/loki
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
__ __ _
|
||||||
|
/ / ____ / /__(_)
|
||||||
|
/ / / __ \/ //_/ /
|
||||||
|
/ /___/ /_/ / ,< / /
|
||||||
|
/_____/\____/_/|_/_/
|
||||||
6
ct/headers/tracearr
Normal file
6
ct/headers/tracearr
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
______
|
||||||
|
/_ __/________ _________ ____ ___________
|
||||||
|
/ / / ___/ __ `/ ___/ _ \/ __ `/ ___/ ___/
|
||||||
|
/ / / / / /_/ / /__/ __/ /_/ / / / /
|
||||||
|
/_/ /_/ \__,_/\___/\___/\__,_/_/ /_/
|
||||||
|
|
||||||
@ -33,7 +33,7 @@ function update_script() {
|
|||||||
PHP_VERSION="8.4"
|
PHP_VERSION="8.4"
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
systemctl stop nginx php${PHP_VERSION}-fpm
|
systemctl stop nginx php${PHP_VERSION}-fpm
|
||||||
supervisorctl stop all
|
$STD supervisorctl stop all
|
||||||
msg_ok "Services Stopped"
|
msg_ok "Services Stopped"
|
||||||
|
|
||||||
PHP_FPM=YES PHP_MODULE="gd,zip,intl,pdo,pgsql,pdo-pgsql,bcmath,opcache,mbstring,redis" setup_php
|
PHP_FPM=YES PHP_MODULE="gd,zip,intl,pdo,pgsql,pdo-pgsql,bcmath,opcache,mbstring,redis" setup_php
|
||||||
@ -56,7 +56,7 @@ function update_script() {
|
|||||||
cp /opt/.env.backup /opt/investbrain/.env
|
cp /opt/.env.backup /opt/investbrain/.env
|
||||||
cp -r /opt/investbrain_backup/ /opt/investbrain/storage
|
cp -r /opt/investbrain_backup/ /opt/investbrain/storage
|
||||||
export COMPOSER_ALLOW_SUPERUSER=1
|
export COMPOSER_ALLOW_SUPERUSER=1
|
||||||
$STD composer install --no-interaction --no-dev --optimize-autoloader
|
$STD /usr/local/bin/composer install --no-interaction --no-dev --optimize-autoloader
|
||||||
$STD npm install
|
$STD npm install
|
||||||
$STD npm run build
|
$STD npm run build
|
||||||
$STD php artisan storage:link
|
$STD php artisan storage:link
|
||||||
@ -74,7 +74,7 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Starting Services"
|
msg_info "Starting Services"
|
||||||
systemctl start php${PHP_VERSION}-fpm nginx
|
systemctl start php${PHP_VERSION}-fpm nginx
|
||||||
supervisorctl start all
|
$STD supervisorctl start all
|
||||||
msg_ok "Services Started"
|
msg_ok "Services Started"
|
||||||
msg_ok "Updated Successfully!"
|
msg_ok "Updated Successfully!"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
# Author: tomfrenzel
|
# Author: tomfrenzel
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||||
|
|||||||
62
ct/loki.sh
Normal file
62
ct/loki.sh
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: hoholms
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/grafana/loki
|
||||||
|
|
||||||
|
APP="Loki"
|
||||||
|
var_tags="${var_tags:-monitoring;logs}"
|
||||||
|
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_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if ! dpkg -s loki >/dev/null 2>&1; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Stopping Loki"
|
||||||
|
systemctl stop loki
|
||||||
|
systemctl stop promtail
|
||||||
|
msg_ok "Stopped Loki"
|
||||||
|
|
||||||
|
msg_info "Updating Loki"
|
||||||
|
$STD apt update
|
||||||
|
$STD apt --only-upgrade install -y loki
|
||||||
|
$STD apt --only-upgrade install -y promtail
|
||||||
|
msg_ok "Updated Loki"
|
||||||
|
|
||||||
|
msg_info "Starting Loki"
|
||||||
|
systemctl start loki
|
||||||
|
systemctl start promtail
|
||||||
|
msg_ok "Started Loki"
|
||||||
|
|
||||||
|
msg_ok "Update Successful"
|
||||||
|
|
||||||
|
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}:3100${CL}\n"
|
||||||
|
echo -e "${INFO}${YW} Access promtail using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9080${CL}"
|
||||||
40
ct/minthcm.sh
Normal file
40
ct/minthcm.sh
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 minthcm
|
||||||
|
# Author: MintHCM
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/minthcm/minthcm
|
||||||
|
|
||||||
|
APP="MintHCM"
|
||||||
|
var_tags="${var_tags:-hcm}"
|
||||||
|
var_disk="${var_disk:-20}"
|
||||||
|
var_cpu="${var_cpu:-4}"
|
||||||
|
var_ram="${var_ram:-4096}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
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/MintHCM ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
msg_error "Currently we don't provide an update function for this ${APP}."
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
||||||
48
ct/netbird.sh
Normal file
48
ct/netbird.sh
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: TechHutTV
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://netbird.io/
|
||||||
|
|
||||||
|
APP="NetBird"
|
||||||
|
var_tags="${var_tags:-network;vpn}"
|
||||||
|
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_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_tun="${var_tun:-yes}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -f /etc/netbird/config.json ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Updating Netbird"
|
||||||
|
$STD apt update
|
||||||
|
$STD apt upgrade -y
|
||||||
|
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 NetBird by entering the container and running:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}netbird up${CL}"
|
||||||
66
ct/tor-snowflake.sh
Normal file
66
ct/tor-snowflake.sh
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: KernelSailor
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://snowflake.torproject.org/
|
||||||
|
|
||||||
|
APP="tor-snowflake"
|
||||||
|
var_tags="${var_tags:-privacy;proxy;tor}"
|
||||||
|
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_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_nesting="${var_nesting:-0}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
msg_info "Updating Container OS"
|
||||||
|
$STD apt update
|
||||||
|
$STD apt upgrade -y
|
||||||
|
msg_ok "Updated Container OS"
|
||||||
|
|
||||||
|
RELEASE=$(curl -fsSL https://gitlab.torproject.org/api/v4/projects/tpo%2Fanti-censorship%2Fpluggable-transports%2Fsnowflake/releases | jq -r '.[0].tag_name' | sed 's/^v//')
|
||||||
|
if [[ ! -f "~/.tor-snowflake" ]] || [[ "${RELEASE}" != "$(cat "~/.tor-snowflake")" ]]; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop snowflake-proxy
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
setup_go
|
||||||
|
|
||||||
|
msg_info "Updating Snowflake"
|
||||||
|
$STD curl -fsSL "https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/archive/v${RELEASE}/snowflake-v${RELEASE}.tar.gz" -o /opt/snowflake.tar.gz
|
||||||
|
$STD tar -xzf /opt/snowflake.tar.gz -C /opt
|
||||||
|
$STD rm -rf /opt/snowflake.tar.gz
|
||||||
|
$STD rm -rf /opt/tor-snowflake
|
||||||
|
$STD mv /opt/snowflake-v${RELEASE} /opt/tor-snowflake
|
||||||
|
$STD chown -R snowflake:snowflake /opt/tor-snowflake
|
||||||
|
$STD sudo -H -u snowflake bash -c "cd /opt/tor-snowflake/proxy && go build -o snowflake-proxy ."
|
||||||
|
echo "${RELEASE}" >~/.tor-snowflake
|
||||||
|
msg_ok "Updated Snowflake to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start snowflake-proxy
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. Snowflake is already at v${RELEASE}."
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
86
ct/tracearr.sh
Normal file
86
ct/tracearr.sh
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: durzo
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/connorgallopo/Tracearr
|
||||||
|
|
||||||
|
APP="Tracearr"
|
||||||
|
var_tags="${var_tags:-media}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-2048}"
|
||||||
|
var_disk="${var_disk:-5}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if [[ ! -f /etc/systemd/system/tracearr.service ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "tracearr" "connorgallopo/Tracearr"; then
|
||||||
|
msg_info "Stopping Services"
|
||||||
|
systemctl stop tracearr postgresql redis
|
||||||
|
msg_ok "Stopped Services"
|
||||||
|
|
||||||
|
PNPM_VERSION="$(curl -fsSL "https://raw.githubusercontent.com/connorgallopo/Tracearr/refs/heads/main/package.json" | jq -r '.packageManager | split("@")[1]')"
|
||||||
|
NODE_VERSION="22" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tracearr" "connorgallopo/Tracearr" "tarball" "latest" "/opt/tracearr.build"
|
||||||
|
|
||||||
|
msg_info "Building Tracearr"
|
||||||
|
export TZ=$(cat /etc/timezone)
|
||||||
|
cd /opt/tracearr.build
|
||||||
|
$STD pnpm install --frozen-lockfile --force
|
||||||
|
$STD pnpm turbo telemetry disable
|
||||||
|
$STD pnpm turbo run build --no-daemon --filter=@tracearr/shared --filter=@tracearr/server --filter=@tracearr/web
|
||||||
|
rm -rf /opt/tracearr
|
||||||
|
mkdir -p /opt/tracearr/{packages/shared,apps/server,apps/web,apps/server/src/db}
|
||||||
|
cp -rf package.json /opt/tracearr/
|
||||||
|
cp -rf pnpm-workspace.yaml /opt/tracearr/
|
||||||
|
cp -rf pnpm-lock.yaml /opt/tracearr/
|
||||||
|
cp -rf apps/server/package.json /opt/tracearr/apps/server/
|
||||||
|
cp -rf apps/server/dist /opt/tracearr/apps/server/dist
|
||||||
|
cp -rf apps/web/dist /opt/tracearr/apps/web/dist
|
||||||
|
cp -rf packages/shared/package.json /opt/tracearr/packages/shared/
|
||||||
|
cp -rf packages/shared/dist /opt/tracearr/packages/shared/dist
|
||||||
|
cp -rf apps/server/src/db/migrations /opt/tracearr/apps/server/src/db/migrations
|
||||||
|
cp -rf data /opt/tracearr/data
|
||||||
|
mkdir -p /opt/tracearr/data/image-cache
|
||||||
|
rm -rf /opt/tracearr.build
|
||||||
|
cd /opt/tracearr
|
||||||
|
$STD pnpm install --prod --frozen-lockfile --ignore-scripts
|
||||||
|
$STD chown -R tracearr:tracearr /opt/tracearr
|
||||||
|
msg_ok "Built Tracearr"
|
||||||
|
|
||||||
|
msg_info "Configuring Tracearr"
|
||||||
|
sed -i "s/^APP_VERSION=.*/APP_VERSION=$(cat /root/.tracearr)/" /data/tracearr/.env
|
||||||
|
chmod 600 /data/tracearr/.env
|
||||||
|
chown -R tracearr:tracearr /data/tracearr
|
||||||
|
msg_ok "Configured Tracearr"
|
||||||
|
|
||||||
|
msg_info "Starting Services"
|
||||||
|
systemctl start postgresql redis tracearr
|
||||||
|
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 "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||||
77
ct/wishlist.sh
Normal file
77
ct/wishlist.sh
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: Dunky13
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/cmintey/wishlist
|
||||||
|
|
||||||
|
APP="Wishlist"
|
||||||
|
var_tags="${var_tags:-sharing}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-1024}"
|
||||||
|
var_disk="${var_disk:-5}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
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/wishlist ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "wishlist" "cmintey/wishlist"; then
|
||||||
|
NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs
|
||||||
|
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop wishlist
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
mkdir -p /opt/wishlist-backup
|
||||||
|
cp /opt/wishlist/.env /opt/wishlist-backup/.env
|
||||||
|
cp -a /opt/wishlist/uploads /opt/wishlist-backup
|
||||||
|
cp -a /opt/wishlist/data /opt/wishlist-backup
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "wishlist" "cmintey/wishlist" "tarball"
|
||||||
|
LATEST_APP_VERSION=$(get_latest_github_release "cmintey/wishlist" false)
|
||||||
|
|
||||||
|
msg_info "Updating Wishlist"
|
||||||
|
cd /opt/wishlist
|
||||||
|
|
||||||
|
$STD pnpm install
|
||||||
|
$STD pnpm svelte-kit sync
|
||||||
|
$STD pnpm prisma generate
|
||||||
|
sed -i 's|/usr/src/app/|/opt/wishlist/|g' $(grep -rl '/usr/src/app/' /opt/wishlist)
|
||||||
|
export VERSION="${LATEST_APP_VERSION}"
|
||||||
|
export SHA="${LATEST_APP_VERSION}"
|
||||||
|
$STD pnpm run build
|
||||||
|
$STD pnpm prune --prod
|
||||||
|
chmod +x /opt/wishlist/entrypoint.sh
|
||||||
|
cp /opt/wishlist-backup/.env /opt/wishlist/.env
|
||||||
|
cp -a /opt/wishlist-backup/uploads /opt/wishlist
|
||||||
|
cp -a /opt/wishlist-backup/data /opt/wishlist
|
||||||
|
rm -rf /opt/wishlist-backup
|
||||||
|
msg_ok "Updated Wishlist"
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start wishlist
|
||||||
|
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}http://${IP}:3280${CL}"
|
||||||
@ -34,16 +34,8 @@ function update_script() {
|
|||||||
systemctl stop yubal
|
systemctl stop yubal
|
||||||
msg_ok "Stopped Services"
|
msg_ok "Stopped Services"
|
||||||
|
|
||||||
msg_info "Backing up"
|
|
||||||
cp /opt/yubal/.env /opt/yubal.env
|
|
||||||
msg_ok "Backed up"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "yubal" "guillevc/yubal" "tarball" "latest" "/opt/yubal"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "yubal" "guillevc/yubal" "tarball" "latest" "/opt/yubal"
|
||||||
|
|
||||||
msg_info "Restoring Backup"
|
|
||||||
mv /opt/yubal.env /opt/yubal/.env
|
|
||||||
msg_ok "Restored Backup"
|
|
||||||
|
|
||||||
msg_info "Building Frontend"
|
msg_info "Building Frontend"
|
||||||
cd /opt/yubal/web
|
cd /opt/yubal/web
|
||||||
$STD bun install --frozen-lockfile
|
$STD bun install --frozen-lockfile
|
||||||
|
|||||||
35
frontend/public/json/fladder.json
Normal file
35
frontend/public/json/fladder.json
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"name": "Fladder",
|
||||||
|
"slug": "fladder",
|
||||||
|
"categories": [
|
||||||
|
14
|
||||||
|
],
|
||||||
|
"date_created": "2025-12-26",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 80,
|
||||||
|
"documentation": "https://github.com/DonutWare/Fladder/blob/develop/INSTALL.md#ubuntudebian",
|
||||||
|
"website": "https://github.com/DonutWare/Fladder",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/fladder.webp",
|
||||||
|
"config_path": "/opt/fladder/assets/config/config.json",
|
||||||
|
"description": "Fladder is a simple Jellyfin frontend built on top of Flutter. It provides a modern interface to stream and sync content locally, manage libraries, support multiple profiles, and offers direct, transcode and offline playback with media segments skipping.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/fladder.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 2048,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "13"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
40
frontend/public/json/gwn-manager.json
Normal file
40
frontend/public/json/gwn-manager.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"name": "GWN Manager",
|
||||||
|
"slug": "gwn-manager",
|
||||||
|
"categories": [
|
||||||
|
9
|
||||||
|
],
|
||||||
|
"date_created": "2025-12-02",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 8443,
|
||||||
|
"documentation": "https://documentation.grandstream.com/article-categories/gwn-mgmt/",
|
||||||
|
"website": "https://www.grandstream.com/products/networking-solutions/wi-fi-management/product/gwn-manager",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/gwn-manager.webp",
|
||||||
|
"config_path": "/gwn/conf/gwn.conf",
|
||||||
|
"description": "GWN Manager is a free on-premise enterprise-grade, management platform for Grandstream GWN series devices. Typically deployed on a customer’s private network, this flexible, scalable solution offers simplified configuration and management.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/gwn-manager.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 6144,
|
||||||
|
"hdd": 8,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "13"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Installation package is pulled from GrandStream website. Installation may take a while.",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -10,7 +10,7 @@
|
|||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 443,
|
"interface_port": 443,
|
||||||
"documentation": "https://github.com/thedevs-network/kutt/",
|
"documentation": "https://github.com/thedevs-network/kutt/",
|
||||||
"config_path": "/etc/kutt-data/.env",
|
"config_path": "/opt/kutt/.env",
|
||||||
"website": "https://kutt.it",
|
"website": "https://kutt.it",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/kutt.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/kutt.webp",
|
||||||
"description": "Kutt is a modern URL shortener with support for custom domains. Create and edit links, view statistics, manage users, and more.",
|
"description": "Kutt is a modern URL shortener with support for custom domains. Create and edit links, view statistics, manage users, and more.",
|
||||||
|
|||||||
44
frontend/public/json/loki.json
Normal file
44
frontend/public/json/loki.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"name": "Loki",
|
||||||
|
"slug": "loki",
|
||||||
|
"categories": [9],
|
||||||
|
"date_created": "2025-12-10",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 3100,
|
||||||
|
"documentation": "https://grafana.com/docs/loki/latest/",
|
||||||
|
"website": "https://github.com/grafana/loki",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/loki.webp",
|
||||||
|
"config_path": "Debian: /etc/loki/config.yml | Alpine: /etc/loki/loki-local-config.yaml",
|
||||||
|
"description": "Grafana Loki is a set of open source components that can be composed into a fully featured logging stack. A small index and highly compressed chunks simplifies the operation and significantly lowers the cost of Loki.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/loki.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 512,
|
||||||
|
"hdd": 2,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "13"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "alpine",
|
||||||
|
"script": "ct/alpine-loki.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 256,
|
||||||
|
"hdd": 1,
|
||||||
|
"os": "alpine",
|
||||||
|
"version": "3.22"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
40
frontend/public/json/minthcm.json
Normal file
40
frontend/public/json/minthcm.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"name": "MintHCM",
|
||||||
|
"slug": "minthcm",
|
||||||
|
"categories": [
|
||||||
|
25
|
||||||
|
],
|
||||||
|
"date_created": "2025-12-12",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": false,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 80,
|
||||||
|
"documentation": "https://wiki.minthcm.org/",
|
||||||
|
"config_path": "/var/www/MintHCM",
|
||||||
|
"website": "https://minthcm.org/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/minthcm.webp",
|
||||||
|
"description": "MintCHM is a free and open-source tool for Human Capital Management. Main features: recruitment, time management, onboarding & offboarding, calendar, leave management, resources booking, travel & expenses, workplace management, analytics, roles & permissions management, job descriptions, employer branding, employee profiles, competences & skills, employment history, employee evaluations.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/minthcm.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 4,
|
||||||
|
"ram": 4096,
|
||||||
|
"hdd": 20,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "13"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": "admin",
|
||||||
|
"password": "minthcm"
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Database credentials are stored in ~/minthcm.creds",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
50
frontend/public/json/netbird.json
Normal file
50
frontend/public/json/netbird.json
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
{
|
||||||
|
"name": "NetBird",
|
||||||
|
"slug": "netbird",
|
||||||
|
"categories": [4],
|
||||||
|
"date_created": "2025-12-02",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": null,
|
||||||
|
"documentation": "https://docs.netbird.io/",
|
||||||
|
"website": "https://netbird.io/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/netbird.webp",
|
||||||
|
"config_path": "/etc/netbird/config.json",
|
||||||
|
"description": "NetBird is an open source VPN management platform that creates secure peer-to-peer networks using WireGuard. It enables secure connectivity between devices anywhere in the world without complex firewall configurations or port forwarding. NetBird offers features like zero-configuration networking, SSO integration, access control policies, and a centralized management dashboard. It's designed to be simple to deploy and manage, making it ideal for connecting remote teams, securing IoT devices, or building secure infrastructure networks.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/netbird.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 512,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "13"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "The NetBird client (agent) allows a peer to join a pre-existing NetBird deployment. If a NetBird deployment is not yet available, there are both managed and self-hosted options available.",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "After installation, enter the container and run `netbird` to view the commands.",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Use a Setup Key from your NetBird dashboard or SSO login to authenticate during setup or in the container.",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Check connection status with `netbird status`.",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
35
frontend/public/json/tor-snowflake.json
Normal file
35
frontend/public/json/tor-snowflake.json
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"name": "Tor Snowflake",
|
||||||
|
"slug": "tor-snowflake",
|
||||||
|
"categories": [
|
||||||
|
4
|
||||||
|
],
|
||||||
|
"date_created": "2025-12-19",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": null,
|
||||||
|
"documentation": "https://community.torproject.org/relay/setup/snowflake/standalone/",
|
||||||
|
"website": "https://snowflake.torproject.org/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/tor.webp",
|
||||||
|
"config_path": null,
|
||||||
|
"description": "Snowflake is a pluggable transport that proxies traffic through temporary proxies using WebRTC. Snowflake allows users in censored locations to access the open internet by connecting through volunteer-run proxies. Running a Snowflake proxy helps users circumvent internet censorship by forwarding their traffic through your server.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/tor-snowflake.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 512,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "13"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
35
frontend/public/json/tracearr.json
Normal file
35
frontend/public/json/tracearr.json
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"name": "Tracearr",
|
||||||
|
"slug": "tracearr",
|
||||||
|
"categories": [
|
||||||
|
13
|
||||||
|
],
|
||||||
|
"date_created": "2025-12-28",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 3000,
|
||||||
|
"documentation": "https://github.com/connorgallopo/Tracearr#readme",
|
||||||
|
"config_path": "",
|
||||||
|
"website": "https://github.com/connorgallopo/Tracearr",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/tracearr.webp",
|
||||||
|
"description": "Tracearr is a streaming access manager for Plex, Jellyfin and Emby servers. It answers the question every server owner eventually asks: \"Who's actually using my server, and are they sharing their login?\"",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/tracearr.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 2048,
|
||||||
|
"hdd": 5,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "13"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
33
frontend/public/json/wishlist.json
Normal file
33
frontend/public/json/wishlist.json
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"name": "Wishlist",
|
||||||
|
"slug": "wishlist",
|
||||||
|
"categories": [0],
|
||||||
|
"date_created": "2025-12-29",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 3280,
|
||||||
|
"documentation": "https://github.com/cmintey/wishlist/blob/main/README.md#getting-started",
|
||||||
|
"config_path": "/opt/wishlist/.env",
|
||||||
|
"website": "https://github.com/cmintey/wishlist",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/cmintey-wishlist.webp",
|
||||||
|
"description": "Wishlist is a self-hosted wishlist application that you can share with your friends and family. You no longer have to wonder what to get your family for the holidays, simply check their wishlist and claim any available item!",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/wishlist.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 1024,
|
||||||
|
"hdd": 5,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "13"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
41
install/alpine-loki-install.sh
Normal file
41
install/alpine-loki-install.sh
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: hoholms
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/grafana/loki
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Loki"
|
||||||
|
$STD apk add loki
|
||||||
|
$STD sed -i '/http_addr/s/127.0.0.1/0.0.0.0/g' /etc/conf.d/loki
|
||||||
|
$STD rc-service loki start
|
||||||
|
$STD rc-update add loki default
|
||||||
|
$STD mkdir /tmp/loki/
|
||||||
|
$STD chown -R loki:grafana /tmp/loki/
|
||||||
|
$STD mkdir /var/log/loki/
|
||||||
|
$STD chown -R loki:grafana /var/log/loki/
|
||||||
|
$STD chmod 755 /etc/loki/loki-local-config.yaml
|
||||||
|
$STD sed -i '/^querier:/,/enable_multi_variant_queries: false/ s/^/#/' /etc/loki/loki-local-config.yaml
|
||||||
|
$STD echo "output_log=\"\${output_log:-/var/log/loki/output.log}\"" >> /etc/init.d/loki
|
||||||
|
$STD echo "error_log=\"\${error_log:-/var/log/loki/error.log}\"" >> /etc/init.d/loki
|
||||||
|
$STD echo "start_stop_daemon_args=\"\${SSD_OPTS} -1 \${output_log} -2 \${error_log}\"" >> /etc/init.d/loki
|
||||||
|
$STD rc-service loki restart
|
||||||
|
msg_ok "Installed Loki"
|
||||||
|
|
||||||
|
msg_info "Installing Promtail"
|
||||||
|
$STD apk add loki-promtail
|
||||||
|
$STD sed -i '/http_addr/s/127.0.0.1/0.0.0.0/g' /etc/conf.d/loki
|
||||||
|
$STD rc-service loki-promtail start
|
||||||
|
$STD rc-update add loki-promtail default
|
||||||
|
msg_ok "Installed Promtail"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
@ -14,19 +14,22 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt-get install -y \
|
$STD apt install -y \
|
||||||
libsodium23 \
|
libsodium23 \
|
||||||
libsodium-dev \
|
libsodium-dev \
|
||||||
pkg-config \
|
pkg-config \
|
||||||
caddy \
|
caddy \
|
||||||
gcc \
|
gcc
|
||||||
curl \
|
|
||||||
jq
|
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
PG_VERSION="17" setup_postgresql
|
PG_VERSION="17" setup_postgresql
|
||||||
|
PG_DB_NAME="ente_db" PG_DB_USER="ente" setup_postgresql_db
|
||||||
setup_go
|
setup_go
|
||||||
NODE_VERSION="24" NODE_MODULE="yarn" setup_nodejs
|
NODE_VERSION="24" NODE_MODULE="yarn" setup_nodejs
|
||||||
|
RUST_CRATES="wasm-pack" setup_rust
|
||||||
|
$STD rustup target add wasm32-unknown-unknown
|
||||||
|
import_local_ip
|
||||||
|
|
||||||
ENTE_CLI_VERSION=$(curl -s https://api.github.com/repos/ente-io/ente/releases | jq -r '[.[] | select(.tag_name | startswith("cli-v"))][0].tag_name')
|
ENTE_CLI_VERSION=$(curl -s https://api.github.com/repos/ente-io/ente/releases | jq -r '[.[] | select(.tag_name | startswith("cli-v"))][0].tag_name')
|
||||||
fetch_and_deploy_gh_release "ente-server" "ente-io/ente" "tarball" "latest" "/opt/ente"
|
fetch_and_deploy_gh_release "ente-server" "ente-io/ente" "tarball" "latest" "/opt/ente"
|
||||||
fetch_and_deploy_gh_release "ente-cli" "ente-io/ente" "prebuild" "$ENTE_CLI_VERSION" "/usr/local/bin" "ente-$ENTE_CLI_VERSION-linux-amd64.tar.gz"
|
fetch_and_deploy_gh_release "ente-cli" "ente-io/ente" "prebuild" "$ENTE_CLI_VERSION" "/usr/local/bin" "ente-$ENTE_CLI_VERSION-linux-amd64.tar.gz"
|
||||||
@ -45,28 +48,15 @@ endpoint:
|
|||||||
EOF
|
EOF
|
||||||
msg_ok "Configured Ente CLI"
|
msg_ok "Configured Ente CLI"
|
||||||
|
|
||||||
msg_info "Setting up PostgreSQL"
|
msg_info "Saving Ente Credentials"
|
||||||
DB_NAME="ente_db"
|
|
||||||
DB_USER="ente"
|
|
||||||
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
|
|
||||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
|
||||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
|
|
||||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
|
||||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
|
|
||||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
|
|
||||||
{
|
{
|
||||||
echo "Ente Credentials"
|
|
||||||
echo "Database Name: $DB_NAME"
|
|
||||||
echo "Database User: $DB_USER"
|
|
||||||
echo "Database Password: $DB_PASS"
|
|
||||||
echo ""
|
|
||||||
echo "Important Configuration Notes:"
|
echo "Important Configuration Notes:"
|
||||||
echo "- Frontend is built with IP: $(hostname -I | awk '{print $1}')"
|
echo "- Frontend is built with IP: $LOCAL_IP"
|
||||||
echo "- If IP changes, run: /opt/ente/rebuild-frontend.sh"
|
echo "- If IP changes, run: /opt/ente/rebuild-frontend.sh"
|
||||||
echo "- Museum API: http://$(hostname -I | awk '{print $1}'):8080"
|
echo "- Museum API: http://$LOCAL_IP:8080"
|
||||||
echo "- Photos UI: http://$(hostname -I | awk '{print $1}'):3000"
|
echo "- Photos UI: http://$LOCAL_IP:3000"
|
||||||
echo "- Accounts UI: http://$(hostname -I | awk '{print $1}'):3001"
|
echo "- Accounts UI: http://$LOCAL_IP:3001"
|
||||||
echo "- Auth UI: http://$(hostname -I | awk '{print $1}'):3003"
|
echo "- Auth UI: http://$LOCAL_IP:3003"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Post-Installation Steps Required:"
|
echo "Post-Installation Steps Required:"
|
||||||
echo "1. Create your first user account via the web UI"
|
echo "1. Create your first user account via the web UI"
|
||||||
@ -78,7 +68,7 @@ $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
|
|||||||
echo ""
|
echo ""
|
||||||
echo "Note: Email verification requires manual intervention since SMTP is not configured"
|
echo "Note: Email verification requires manual intervention since SMTP is not configured"
|
||||||
} >>~/ente.creds
|
} >>~/ente.creds
|
||||||
msg_ok "Set up PostgreSQL"
|
msg_ok "Saved Ente Credentials"
|
||||||
|
|
||||||
msg_info "Building Museum (server)"
|
msg_info "Building Museum (server)"
|
||||||
cd /opt/ente/server
|
cd /opt/ente/server
|
||||||
@ -105,14 +95,13 @@ SECRET_JWT=$(go run tools/gen-random-keys/main.go 2>/dev/null | grep "jwt" | awk
|
|||||||
msg_ok "Generated Secrets"
|
msg_ok "Generated Secrets"
|
||||||
|
|
||||||
msg_info "Creating museum.yaml"
|
msg_info "Creating museum.yaml"
|
||||||
CONTAINER_IP=$(hostname -I | awk '{print $1}')
|
|
||||||
cat <<EOF >/opt/ente/server/museum.yaml
|
cat <<EOF >/opt/ente/server/museum.yaml
|
||||||
db:
|
db:
|
||||||
host: 127.0.0.1
|
host: 127.0.0.1
|
||||||
port: 5432
|
port: 5432
|
||||||
name: $DB_NAME
|
name: $PG_DB_NAME
|
||||||
user: $DB_USER
|
user: $PG_DB_USER
|
||||||
password: $DB_PASS
|
password: $PG_DB_PASS
|
||||||
|
|
||||||
s3:
|
s3:
|
||||||
are_local_buckets: true
|
are_local_buckets: true
|
||||||
@ -125,9 +114,9 @@ s3:
|
|||||||
bucket: ente-dev
|
bucket: ente-dev
|
||||||
|
|
||||||
apps:
|
apps:
|
||||||
public-albums: http://${CONTAINER_IP}:3002
|
public-albums: http://${LOCAL_IP}:3002
|
||||||
cast: http://${CONTAINER_IP}:3004
|
cast: http://${LOCAL_IP}:3004
|
||||||
accounts: http://${CONTAINER_IP}:3001
|
accounts: http://${LOCAL_IP}:3001
|
||||||
|
|
||||||
key:
|
key:
|
||||||
encryption: $SECRET_ENC
|
encryption: $SECRET_ENC
|
||||||
@ -149,26 +138,24 @@ msg_ok "Created museum.yaml"
|
|||||||
|
|
||||||
read -r -p "Enter the public URL for Ente backend (e.g., https://api.ente.yourdomain.com or http://192.168.1.100:8080) leave empty to use container IP: " backend_url
|
read -r -p "Enter the public URL for Ente backend (e.g., https://api.ente.yourdomain.com or http://192.168.1.100:8080) leave empty to use container IP: " backend_url
|
||||||
if [[ -z "$backend_url" ]]; then
|
if [[ -z "$backend_url" ]]; then
|
||||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
ENTE_BACKEND_URL="http://$LOCAL_IP:8080"
|
||||||
ENTE_BACKEND_URL="http://$LOCAL_IP:8080"
|
msg_info "No URL provided"
|
||||||
msg_info "No URL provided"
|
msg_ok "using local IP: $ENTE_BACKEND_URL\n"
|
||||||
msg_ok "using local IP: $ENTE_BACKEND_URL\n"
|
|
||||||
else
|
else
|
||||||
ENTE_BACKEND_URL="$backend_url"
|
ENTE_BACKEND_URL="$backend_url"
|
||||||
msg_info "URL provided"
|
msg_info "URL provided"
|
||||||
msg_ok "Using provided URL: $ENTE_BACKEND_URL\n"
|
msg_ok "Using provided URL: $ENTE_BACKEND_URL\n"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
read -r -p "Enter the public URL for Ente albums (e.g., https://albums.ente.yourdomain.com or http://192.168.1.100:3002) leave empty to use container IP: " albums_url
|
read -r -p "Enter the public URL for Ente albums (e.g., https://albums.ente.yourdomain.com or http://192.168.1.100:3002) leave empty to use container IP: " albums_url
|
||||||
if [[ -z "$albums_url" ]]; then
|
if [[ -z "$albums_url" ]]; then
|
||||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
ENTE_ALBUMS_URL="http://$LOCAL_IP:3002"
|
||||||
ENTE_ALBUMS_URL="http://$LOCAL_IP:3002"
|
msg_info "No URL provided"
|
||||||
msg_info "No URL provided"
|
msg_ok "using local IP: $ENTE_ALBUMS_URL\n"
|
||||||
msg_ok "using local IP: $ENTE_ALBUMS_URL\n"
|
|
||||||
else
|
else
|
||||||
ENTE_ALBUMS_URL="$albums_url"
|
ENTE_ALBUMS_URL="$albums_url"
|
||||||
msg_info "URL provided"
|
msg_info "URL provided"
|
||||||
msg_ok "Using provided URL: $ENTE_ALBUMS_URL\n"
|
msg_ok "Using provided URL: $ENTE_ALBUMS_URL\n"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export NEXT_PUBLIC_ENTE_ENDPOINT=$ENTE_BACKEND_URL
|
export NEXT_PUBLIC_ENTE_ENDPOINT=$ENTE_BACKEND_URL
|
||||||
@ -177,6 +164,7 @@ export NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=$ENTE_ALBUMS_URL
|
|||||||
msg_info "Building Web Applications"
|
msg_info "Building Web Applications"
|
||||||
cd /opt/ente/web
|
cd /opt/ente/web
|
||||||
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||||
|
source "$HOME/.cargo/env"
|
||||||
$STD yarn install
|
$STD yarn install
|
||||||
$STD yarn build
|
$STD yarn build
|
||||||
$STD yarn build:accounts
|
$STD yarn build:accounts
|
||||||
@ -188,37 +176,38 @@ cp -r apps/accounts/out /var/www/ente/apps/accounts
|
|||||||
cp -r apps/auth/out /var/www/ente/apps/auth
|
cp -r apps/auth/out /var/www/ente/apps/auth
|
||||||
cp -r apps/cast/out /var/www/ente/apps/cast
|
cp -r apps/cast/out /var/www/ente/apps/cast
|
||||||
|
|
||||||
# Save build configuration for future rebuilds
|
cat <<'EOF' >/opt/ente/rebuild-frontend.sh
|
||||||
cat <<REBUILD_EOF >/opt/ente/rebuild-frontend.sh
|
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Rebuild Ente frontend
|
# Rebuild Ente frontend
|
||||||
# Prompt for backend URL
|
# Prompt for backend URL
|
||||||
read -r -p "Enter the public URL for Ente backend (e.g., https://api.ente.yourdomain.com or http://192.168.1.100:8080) leave empty to use container IP: " backend_url
|
read -r -p "Enter the public URL for Ente backend (e.g., https://api.ente.yourdomain.com or http://192.168.1.100:8080) leave empty to use container IP: " backend_url
|
||||||
if [[ -z "\$backend_url" ]]; then
|
if [[ -z "$backend_url" ]]; then
|
||||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
||||||
ENTE_BACKEND_URL="http://\$LOCAL_IP:8080"
|
ENTE_BACKEND_URL="http://$LOCAL_IP:8080"
|
||||||
echo "No URL provided, using local IP: \$ENTE_BACKEND_URL\n"
|
echo "No URL provided, using local IP: $ENTE_BACKEND_URL"
|
||||||
else
|
else
|
||||||
ENTE_BACKEND_URL="\$backend_url"
|
ENTE_BACKEND_URL="$backend_url"
|
||||||
echo "Using provided URL: \$ENTE_BACKEND_URL\n"
|
echo "Using provided URL: $ENTE_BACKEND_URL"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Prompt for albums URL
|
# Prompt for albums URL
|
||||||
read -r -p "Enter the public URL for Ente albums (e.g., https://albums.ente.yourdomain.com or http://192.168.1.100:3002) leave empty to use container IP: " albums_url
|
read -r -p "Enter the public URL for Ente albums (e.g., https://albums.ente.yourdomain.com or http://192.168.1.100:3002) leave empty to use container IP: " albums_url
|
||||||
if [[ -z "\$albums_url" ]]; then
|
if [[ -z "$albums_url" ]]; then
|
||||||
LOCAL_IP=\$(hostname -I | awk '{print $1}')
|
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
||||||
ENTE_ALBUMS_URL="http://\$LOCAL_IP:3002"
|
ENTE_ALBUMS_URL="http://$LOCAL_IP:3002"
|
||||||
echo "No URL provided, using local IP: \$ENTE_ALBUMS_URL\n"
|
echo "No URL provided, using local IP: $ENTE_ALBUMS_URL"
|
||||||
else
|
else
|
||||||
ENTE_ALBUMS_URL="\$albums_url"
|
ENTE_ALBUMS_URL="$albums_url"
|
||||||
echo "Using provided URL: \$ENTE_ALBUMS_URL\n"
|
echo "Using provided URL: $ENTE_ALBUMS_URL"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export NEXT_PUBLIC_ENTE_ENDPOINT=\$ENTE_BACKEND_URL
|
export NEXT_PUBLIC_ENTE_ENDPOINT=$ENTE_BACKEND_URL
|
||||||
export NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=\$ENTE_ALBUMS_URL
|
export NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=$ENTE_ALBUMS_URL
|
||||||
|
|
||||||
echo "Building Web Applications\n"
|
echo "Building Web Applications..."
|
||||||
|
|
||||||
|
# Ensure Rust/wasm-pack is available for WASM build
|
||||||
|
source "$HOME/.cargo/env"
|
||||||
cd /opt/ente/web
|
cd /opt/ente/web
|
||||||
yarn build
|
yarn build
|
||||||
yarn build:accounts
|
yarn build:accounts
|
||||||
@ -231,7 +220,7 @@ cp -r apps/auth/out /var/www/ente/apps/auth
|
|||||||
cp -r apps/cast/out /var/www/ente/apps/cast
|
cp -r apps/cast/out /var/www/ente/apps/cast
|
||||||
systemctl reload caddy
|
systemctl reload caddy
|
||||||
echo "Frontend rebuilt successfully!"
|
echo "Frontend rebuilt successfully!"
|
||||||
REBUILD_EOF
|
EOF
|
||||||
chmod +x /opt/ente/rebuild-frontend.sh
|
chmod +x /opt/ente/rebuild-frontend.sh
|
||||||
msg_ok "Built Web Applications"
|
msg_ok "Built Web Applications"
|
||||||
|
|
||||||
@ -253,7 +242,6 @@ systemctl enable -q --now ente-museum
|
|||||||
msg_ok "Created Museum Service"
|
msg_ok "Created Museum Service"
|
||||||
|
|
||||||
msg_info "Configuring Caddy"
|
msg_info "Configuring Caddy"
|
||||||
CONTAINER_IP=$(hostname -I | awk '{print $1}')
|
|
||||||
cat <<EOF >/etc/caddy/Caddyfile
|
cat <<EOF >/etc/caddy/Caddyfile
|
||||||
# Ente Photos - Main Application
|
# Ente Photos - Main Application
|
||||||
:3000 {
|
:3000 {
|
||||||
@ -334,18 +322,15 @@ EOF
|
|||||||
systemctl reload caddy
|
systemctl reload caddy
|
||||||
msg_ok "Configured Caddy"
|
msg_ok "Configured Caddy"
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
|
|
||||||
msg_info "Creating helper scripts"
|
msg_info "Creating helper scripts"
|
||||||
cat <<'HELPER_EOF' >/usr/local/bin/ente-get-verification
|
cat <<'EOF' >/usr/local/bin/ente-get-verification
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
echo "Searching for verification codes in museum logs..."
|
echo "Searching for verification codes in museum logs..."
|
||||||
journalctl -u ente-museum --no-pager | grep -i "verification\|verify\|code" | tail -20
|
journalctl -u ente-museum --no-pager | grep -i "verification\|verify\|code" | tail -20
|
||||||
HELPER_EOF
|
EOF
|
||||||
chmod +x /usr/local/bin/ente-get-verification
|
chmod +x /usr/local/bin/ente-get-verification
|
||||||
|
|
||||||
cat <<'HELPER_EOF' >/usr/local/bin/ente-upgrade-subscription
|
cat <<'EOF' >/usr/local/bin/ente-upgrade-subscription
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
if [ -z "$1" ]; then
|
if [ -z "$1" ]; then
|
||||||
echo "Usage: ente-upgrade-subscription <email>"
|
echo "Usage: ente-upgrade-subscription <email>"
|
||||||
@ -355,46 +340,11 @@ fi
|
|||||||
EMAIL="$1"
|
EMAIL="$1"
|
||||||
echo "Upgrading subscription for: $EMAIL"
|
echo "Upgrading subscription for: $EMAIL"
|
||||||
ente admin update-subscription -a "$EMAIL" -u "$EMAIL" --no-limit
|
ente admin update-subscription -a "$EMAIL" -u "$EMAIL" --no-limit
|
||||||
HELPER_EOF
|
EOF
|
||||||
chmod +x /usr/local/bin/ente-upgrade-subscription
|
chmod +x /usr/local/bin/ente-upgrade-subscription
|
||||||
|
|
||||||
msg_ok "Created helper scripts"
|
msg_ok "Created helper scripts"
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
motd_ssh
|
||||||
$STD apt -y autoremove
|
customize
|
||||||
$STD apt -y autoclean
|
#cleanup_lxc
|
||||||
msg_ok "Cleaned"
|
|
||||||
|
|
||||||
# Final setup summary
|
|
||||||
CONTAINER_IP=$(hostname -I | awk '{print $1}')
|
|
||||||
echo -e "\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
||||||
echo -e " ${GN}Ente Installation Complete!${CL}"
|
|
||||||
echo -e "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
||||||
echo -e "\n${BL}Access URLs:${CL}"
|
|
||||||
echo -e " Photos: http://${CONTAINER_IP}:3000"
|
|
||||||
echo -e " Accounts: http://${CONTAINER_IP}:3001"
|
|
||||||
echo -e " Albums: ${ENTE_ALBUMS_URL}"
|
|
||||||
echo -e " Auth: http://${CONTAINER_IP}:3003"
|
|
||||||
echo -e " API: ${ENTE_BACKEND_URL}"
|
|
||||||
echo -e "\n${YW}⚠️ Important Post-Installation Steps:${CL}"
|
|
||||||
echo -e "\n${BL}1. Create your first account:${CL}"
|
|
||||||
echo -e " • Open http://${CONTAINER_IP}:3000 in your browser"
|
|
||||||
echo -e " • Click 'Sign Up' and create an account"
|
|
||||||
echo -e "\n${BL}2. Verify your email (required):${CL}"
|
|
||||||
echo -e " • Run: ${GN}ente-get-verification${CL}"
|
|
||||||
echo -e " • Look for the verification code in the output"
|
|
||||||
echo -e " • Enter the code in the web UI to complete registration"
|
|
||||||
echo -e "\n${BL}3. Remove storage limit:${CL}"
|
|
||||||
echo -e " • After email verification is complete"
|
|
||||||
echo -e " • Run: ${GN}ente-upgrade-subscription your@email.com${CL}"
|
|
||||||
echo -e " • This removes the 10GB limit"
|
|
||||||
echo -e "\n${BL}4. If IP changes:${CL}"
|
|
||||||
echo -e " • Run: ${GN}/opt/ente/rebuild-frontend.sh${CL}"
|
|
||||||
echo -e " • This rebuilds the frontend with the new IP"
|
|
||||||
echo -e "\n${YW}Known Limitations:${CL}"
|
|
||||||
echo -e " • Email verification requires checking logs (no SMTP configured)"
|
|
||||||
echo -e " • Account creation must be done manually via web UI"
|
|
||||||
echo -e " • Subscription upgrade requires CLI after account creation"
|
|
||||||
echo -e " • Frontend must be rebuilt if container IP changes"
|
|
||||||
echo -e "\n${BL}Credentials saved to:${CL} ~/ente.creds"
|
|
||||||
echo -e "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"
|
|
||||||
|
|||||||
46
install/fladder-install.sh
Normal file
46
install/fladder-install.sh
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: wendyliga
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/DonutWare/Fladder
|
||||||
|
|
||||||
|
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 nginx
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "Fladder" "DonutWare/Fladder" "prebuild" "latest" "/opt/fladder" "Fladder-Web-*.zip"
|
||||||
|
|
||||||
|
msg_info "Configuring Nginx"
|
||||||
|
cat <<EOF >/etc/nginx/conf.d/fladder.conf
|
||||||
|
server {
|
||||||
|
listen 80 default_server;
|
||||||
|
listen [::]:80 default_server;
|
||||||
|
|
||||||
|
server_name _;
|
||||||
|
|
||||||
|
root /opt/fladder;
|
||||||
|
index index.html;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
try_files \$uri \$uri/ /index.html;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
rm -f /etc/nginx/sites-enabled/default
|
||||||
|
rm -f /etc/nginx/sites-available/default
|
||||||
|
systemctl enable -q --now nginx
|
||||||
|
systemctl reload nginx
|
||||||
|
msg_ok "Configured Nginx"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
53
install/gwn-manager-install.sh
Normal file
53
install/gwn-manager-install.sh
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: Slaviša Arežina (tremor021)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://www.grandstream.com/products/networking-solutions/wi-fi-management/product/gwn-manager
|
||||||
|
|
||||||
|
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 \
|
||||||
|
xfonts-utils \
|
||||||
|
fontconfig
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setting up GWN Manager (Patience)"
|
||||||
|
RELEASE=$(curl -s https://www.grandstream.com/support/tools#gwntools \
|
||||||
|
| grep -oP 'https://firmware\.grandstream\.com/GWN_Manager-[^"]+-Ubuntu\.tar\.gz')
|
||||||
|
download_file "$RELEASE" "/tmp/gwnmanager.tar.gz"
|
||||||
|
cd /tmp
|
||||||
|
tar -xzf gwnmanager.tar.gz --strip-components=1
|
||||||
|
$STD ./install
|
||||||
|
msg_ok "Setup GWN Manager"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/gwnmanager.service
|
||||||
|
[Unit]
|
||||||
|
Description=GWN Manager
|
||||||
|
After=network.target
|
||||||
|
Requires=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=/gwn
|
||||||
|
ExecStart=/gwn/gwn start
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=10
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q gwnmanager
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
@ -27,7 +27,8 @@ $STD apt install -y \
|
|||||||
libpq-dev
|
libpq-dev
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
PHP_VERSION="8.4" PHP_FPM=YES PHP_MODULE="gd,zip,intl,pdo,pgsql,pdo-pgsql,bcmath,opcache,mbstring,redis" setup_php
|
export PHP_VERSION="8.4"
|
||||||
|
PHP_FPM=YES PHP_MODULE="gd,zip,intl,pdo,pgsql,pdo-pgsql,bcmath,opcache,mbstring,redis" setup_php
|
||||||
setup_composer
|
setup_composer
|
||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
PG_VERSION="17" setup_postgresql
|
PG_VERSION="17" setup_postgresql
|
||||||
@ -92,7 +93,7 @@ MAIL_FROM_ADDRESS="investbrain@${LOCAL_IP}"
|
|||||||
VITE_APP_NAME=Investbrain
|
VITE_APP_NAME=Investbrain
|
||||||
EOF
|
EOF
|
||||||
export COMPOSER_ALLOW_SUPERUSER=1
|
export COMPOSER_ALLOW_SUPERUSER=1
|
||||||
$STD composer install --no-interaction --no-dev --optimize-autoloader
|
$STD /usr/local/bin/composer install --no-interaction --no-dev --optimize-autoloader
|
||||||
$STD npm install
|
$STD npm install
|
||||||
$STD npm run build
|
$STD npm run build
|
||||||
mkdir -p /opt/investbrain/storage/{framework/cache,framework/sessions,framework/views,app,logs}
|
mkdir -p /opt/investbrain/storage/{framework/cache,framework/sessions,framework/views,app,logs}
|
||||||
|
|||||||
@ -47,7 +47,7 @@ msg_info "Configuring Kutt"
|
|||||||
cd /opt/kutt
|
cd /opt/kutt
|
||||||
cp .example.env ".env"
|
cp .example.env ".env"
|
||||||
sed -i "s|JWT_SECRET=|JWT_SECRET=$(openssl rand -base64 32)|g" ".env"
|
sed -i "s|JWT_SECRET=|JWT_SECRET=$(openssl rand -base64 32)|g" ".env"
|
||||||
sed -i "s|DEFAULT_DOMAIN=.*|DEFAULT_DOMAIN=https://$DEFAULT_HOST|g" ".env"
|
sed -i "s|DEFAULT_DOMAIN=.*|DEFAULT_DOMAIN=$DEFAULT_HOST|g" ".env"
|
||||||
$STD npm install
|
$STD npm install
|
||||||
$STD npm run migrate
|
$STD npm run migrate
|
||||||
msg_ok "Configured Kutt"
|
msg_ok "Configured Kutt"
|
||||||
|
|||||||
37
install/loki-install.sh
Normal file
37
install/loki-install.sh
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: hoholms
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/grafana/loki
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Setting up Grafana Repository"
|
||||||
|
setup_deb822_repo \
|
||||||
|
"grafana" \
|
||||||
|
"https://apt.grafana.com/gpg.key" \
|
||||||
|
"https://apt.grafana.com" \
|
||||||
|
"stable" \
|
||||||
|
"main"
|
||||||
|
msg_ok "Grafana Repository setup sucessfully"
|
||||||
|
|
||||||
|
msg_info "Installing Loki"
|
||||||
|
$STD apt install -y loki
|
||||||
|
systemctl enable -q --now loki
|
||||||
|
msg_ok "Installed Loki"
|
||||||
|
|
||||||
|
msg_info "Installing Promtail"
|
||||||
|
$STD apt install -y promtail
|
||||||
|
systemctl enable -q --now promtail
|
||||||
|
msg_ok "Installed Promtail"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
96
install/minthcm-install.sh
Normal file
96
install/minthcm-install.sh
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 minthcm
|
||||||
|
# Author: MintHCM
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/minthcm/minthcm
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
PHP_APACHE="YES" PHP_VERSION="8.2" PHP_MODULE="mysql,cli,redis" PHP_FPM="YES" setup_php
|
||||||
|
setup_composer
|
||||||
|
|
||||||
|
msg_info "Enabling Apache modules (rewrite, headers)"
|
||||||
|
$STD a2enmod rewrite
|
||||||
|
$STD a2enmod headers
|
||||||
|
msg_ok "Enabled Apache modules (rewrite, headers)"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "MintHCM" "minthcm/minthcm" "tarball" "latest" "/var/www/MintHCM"
|
||||||
|
|
||||||
|
msg_info "Configuring MintHCM"
|
||||||
|
mkdir -p /etc/php/${PHP_VERSION}/mods-available
|
||||||
|
cp /var/www/MintHCM/docker/config/000-default.conf /etc/apache2/sites-available/000-default.conf
|
||||||
|
cp /var/www/MintHCM/docker/config/php-minthcm.ini /etc/php/${PHP_VERSION}/mods-available/php-minthcm.ini
|
||||||
|
mkdir -p "/etc/php/${PHP_VERSION}/cli/conf.d" "/etc/php/${PHP_VERSION}/apache2/conf.d"
|
||||||
|
ln -s "/etc/php/${PHP_VERSION}/mods-available/php-minthcm.ini" "/etc/php/${PHP_VERSION}/cli/conf.d/20-minthcm.ini"
|
||||||
|
ln -s "/etc/php/${PHP_VERSION}/mods-available/php-minthcm.ini" "/etc/php/${PHP_VERSION}/apache2/conf.d/20-minthcm.ini"
|
||||||
|
chown -R www-data:www-data /var/www/MintHCM
|
||||||
|
find /var/www/MintHCM -type d -exec chmod 755 {} \;
|
||||||
|
find /var/www/MintHCM -type f -exec chmod 644 {} \;
|
||||||
|
mkdir -p /var/www/script
|
||||||
|
cp /var/www/MintHCM/docker/script/generate_config.php /var/www/script/generate_config.php
|
||||||
|
cp /var/www/MintHCM/docker/.env /var/www/script/.env
|
||||||
|
chown -R www-data:www-data /var/www/script
|
||||||
|
msg_ok "Configured MintHCM"
|
||||||
|
|
||||||
|
msg_info "Restarting Apache2"
|
||||||
|
$STD systemctl restart apache2
|
||||||
|
msg_ok "Restarted Apache2"
|
||||||
|
|
||||||
|
msg_info "Setting up Elasticsearch"
|
||||||
|
setup_deb822_repo \
|
||||||
|
"elasticsearch" \
|
||||||
|
"https://artifacts.elastic.co/GPG-KEY-elasticsearch" \
|
||||||
|
"https://artifacts.elastic.co/packages/7.x/apt" \
|
||||||
|
"stable" \
|
||||||
|
"main"
|
||||||
|
$STD apt install -y elasticsearch
|
||||||
|
echo "-Xms2g" >>/etc/elasticsearch/jvm.options
|
||||||
|
echo "-Xmx2g" >>/etc/elasticsearch/jvm.options
|
||||||
|
$STD /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-attachment -b
|
||||||
|
systemctl enable -q --now elasticsearch
|
||||||
|
msg_ok "Set up Elasticsearch"
|
||||||
|
|
||||||
|
setup_mariadb
|
||||||
|
msg_info "Setting up MariaDB"
|
||||||
|
$STD mariadb -u root -e "SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'";
|
||||||
|
msg_ok "Set up MariaDB"
|
||||||
|
|
||||||
|
msg_info "Configuring Database"
|
||||||
|
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||||
|
$STD mariadb -u root -e "CREATE USER 'minthcm'@'localhost' IDENTIFIED BY '${DB_PASS}';"
|
||||||
|
$STD mariadb -u root -e "GRANT ALL ON *.* TO 'minthcm'@'localhost'; FLUSH PRIVILEGES;"
|
||||||
|
sed -i 's/^DB_HOST=.*/DB_HOST=localhost/' /var/www/script/.env
|
||||||
|
sed -i 's/^DB_USER=.*/DB_USER=minthcm/' /var/www/script/.env
|
||||||
|
sed -i "s/^DB_PASS=.*/DB_PASS=${DB_PASS}/" /var/www/script/.env
|
||||||
|
sed -i 's/^ELASTICSEARCH_HOST=.*/ELASTICSEARCH_HOST=localhost/' /var/www/script/.env
|
||||||
|
msg_ok "Configured MariaDB"
|
||||||
|
{
|
||||||
|
echo "MintHCM DB Credentials"
|
||||||
|
echo "MariaDB User: minthcm"
|
||||||
|
echo "MariaDB Password: $DB_PASS"
|
||||||
|
} >>~/minthcm.creds
|
||||||
|
|
||||||
|
msg_info "Generating configuration file"
|
||||||
|
set -a
|
||||||
|
source /var/www/script/.env
|
||||||
|
set +a
|
||||||
|
php /var/www/script/generate_config.php
|
||||||
|
msg_ok "Generated configuration file"
|
||||||
|
|
||||||
|
msg_info "Installing MintHCM"
|
||||||
|
cd /var/www/MintHCM && su -s /bin/bash -c 'php /var/www/MintHCM/MintCLI install < /var/www/MintHCM/configMint4' www-data
|
||||||
|
printf "* * * * * cd /var/www/MintHCM/legacy; php -f cron.php > /dev/null 2>&1\n" > /var/spool/cron/crontabs/www-data
|
||||||
|
service cron start
|
||||||
|
rm -f /var/www/MintHCM/configMint4
|
||||||
|
msg_ok "Installed MintHCM"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
161
install/netbird-install.sh
Normal file
161
install/netbird-install.sh
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: TechHutTV
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://netbird.io/
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Setting up NetBird Repository"
|
||||||
|
setup_deb882_repo \
|
||||||
|
"netbird" \
|
||||||
|
"https://pkgs.netbird.io/debian/public.key" \
|
||||||
|
"https://pkgs.netbird.io/debian" \
|
||||||
|
"stable"
|
||||||
|
msg_ok "Set up NetBird Repository"
|
||||||
|
|
||||||
|
msg_info "Installing NetBird"
|
||||||
|
$STD apt install -y netbird
|
||||||
|
msg_ok "Installed NetBird"
|
||||||
|
|
||||||
|
msg_info "Enabling NetBird Service"
|
||||||
|
$STD systemctl enable -q --now netbird
|
||||||
|
msg_ok "Enabled NetBird Service"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo ""
|
||||||
|
echo -e "${BL}NetBird Deployment Type${CL}"
|
||||||
|
echo "─────────────────────────────────────────"
|
||||||
|
echo "Are you using NetBird Managed or Self-Hosted?"
|
||||||
|
echo ""
|
||||||
|
echo " 1) NetBird Managed (default) - Use NetBird's managed service"
|
||||||
|
echo " 2) Self-Hosted - Use your own NetBird management server"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
read -r -p "${TAB3}Select deployment type [1]: " DEPLOYMENT_TYPE
|
||||||
|
DEPLOYMENT_TYPE="${DEPLOYMENT_TYPE:-1}"
|
||||||
|
|
||||||
|
NETBIRD_MGMT_URL=""
|
||||||
|
case "$DEPLOYMENT_TYPE" in
|
||||||
|
1)
|
||||||
|
msg_ok "Using NetBird Managed service"
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
echo ""
|
||||||
|
echo -e "${BL}Self-Hosted Configuration${CL}"
|
||||||
|
echo "─────────────────────────────────────────"
|
||||||
|
echo "Enter your NetBird management server URL."
|
||||||
|
echo "Example: https://management.example.com"
|
||||||
|
echo ""
|
||||||
|
read -r -p "Management URL: " NETBIRD_MGMT_URL
|
||||||
|
|
||||||
|
if [[ -z "$NETBIRD_MGMT_URL" ]]; then
|
||||||
|
msg_warn "No management URL provided. Run 'netbird up --management-url <url>' to connect."
|
||||||
|
else
|
||||||
|
NETBIRD_MGMT_URL="${NETBIRD_MGMT_URL%/}"
|
||||||
|
msg_ok "Management URL configured: ${NETBIRD_MGMT_URL}"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
msg_warn "Invalid selection. Using NetBird Managed service."
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo ""
|
||||||
|
echo -e "${BL}NetBird Connection Setup${CL}"
|
||||||
|
echo "─────────────────────────────────────────"
|
||||||
|
echo "Choose how to connect to your NetBird network:"
|
||||||
|
echo ""
|
||||||
|
echo " 1) Setup Key (default) - Use a pre-generated setup key"
|
||||||
|
echo " 2) SSO Login - Authenticate via browser with your identity provider"
|
||||||
|
echo " 3) Skip - Configure later with 'netbird up'"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
read -r -p "Select authentication method [1]: " AUTH_METHOD
|
||||||
|
AUTH_METHOD="${AUTH_METHOD:-1}"
|
||||||
|
|
||||||
|
case "$AUTH_METHOD" in
|
||||||
|
1)
|
||||||
|
echo ""
|
||||||
|
echo "Enter your NetBird setup key from the NetBird dashboard."
|
||||||
|
echo ""
|
||||||
|
read -r -p "Setup key: " NETBIRD_SETUP_KEY
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [[ -z "$NETBIRD_SETUP_KEY" ]]; then
|
||||||
|
if [[ -n "$NETBIRD_MGMT_URL" ]]; then
|
||||||
|
msg_warn "No setup key provided. Run 'netbird up -k <key> --management-url $NETBIRD_MGMT_URL' to connect."
|
||||||
|
else
|
||||||
|
msg_warn "No setup key provided. Run 'netbird up -k <key>' to connect."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
msg_info "Connecting to NetBird with setup key"
|
||||||
|
if [[ -n "$NETBIRD_MGMT_URL" ]]; then
|
||||||
|
if $STD netbird up -k "$NETBIRD_SETUP_KEY" --management-url "$NETBIRD_MGMT_URL"; then
|
||||||
|
msg_ok "Connected to NetBird"
|
||||||
|
else
|
||||||
|
msg_warn "Connection failed. Run 'netbird up -k <key> --management-url $NETBIRD_MGMT_URL' to retry."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if $STD netbird up -k "$NETBIRD_SETUP_KEY"; then
|
||||||
|
msg_ok "Connected to NetBird"
|
||||||
|
else
|
||||||
|
msg_warn "Connection failed. Run 'netbird up -k <key>' to retry."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
echo ""
|
||||||
|
echo -e "${BL}SSO Authentication${CL}"
|
||||||
|
echo "─────────────────────────────────────────"
|
||||||
|
echo "A login URL will appear below."
|
||||||
|
echo "Copy the URL and open it in your browser to authenticate."
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
msg_info "Starting SSO login"
|
||||||
|
if [[ -n "$NETBIRD_MGMT_URL" ]]; then
|
||||||
|
netbird login --management-url "$NETBIRD_MGMT_URL" 2>&1 || true
|
||||||
|
else
|
||||||
|
netbird login 2>&1 || true
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
msg_info "Connecting to NetBird"
|
||||||
|
if [[ -n "$NETBIRD_MGMT_URL" ]]; then
|
||||||
|
if $STD netbird up --management-url "$NETBIRD_MGMT_URL"; then
|
||||||
|
msg_ok "Connected to NetBird"
|
||||||
|
else
|
||||||
|
msg_warn "Connection failed. Run 'netbird up --management-url $NETBIRD_MGMT_URL' to retry."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if $STD netbird up; then
|
||||||
|
msg_ok "Connected to NetBird"
|
||||||
|
else
|
||||||
|
msg_warn "Connection failed. Run 'netbird up' to retry."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
if [[ -n "$NETBIRD_MGMT_URL" ]]; then
|
||||||
|
msg_ok "Skipped. Run 'netbird up --management-url $NETBIRD_MGMT_URL' to connect."
|
||||||
|
else
|
||||||
|
msg_ok "Skipped. Run 'netbird up' to connect."
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
msg_warn "Invalid selection. Run 'netbird up' to connect."
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
@ -91,6 +91,12 @@ SESSION_SECRET="${SECRET}"
|
|||||||
# ONLYOFFICE_FORCE_SAVE=
|
# ONLYOFFICE_FORCE_SAVE=
|
||||||
# ONLYOFFICE_FILE_EXTENSIONS=
|
# ONLYOFFICE_FILE_EXTENSIONS=
|
||||||
|
|
||||||
|
# COLLABORA_URL=
|
||||||
|
# COLLABORA_DISCOVERY_URL=
|
||||||
|
# COLLABORA_SECRET=
|
||||||
|
# COLLABORA_LANG=
|
||||||
|
# COLLABORA_FILE_EXTENSIONS=
|
||||||
|
|
||||||
SHOW_VOLUME_USAGE=true
|
SHOW_VOLUME_USAGE=true
|
||||||
# USER_DIR_ENABLED=
|
# USER_DIR_ENABLED=
|
||||||
# SKIP_HOME=
|
# SKIP_HOME=
|
||||||
|
|||||||
@ -120,7 +120,7 @@ CONFIGEOF
|
|||||||
chmod 644 /var/lib/romm/config/config.yml
|
chmod 644 /var/lib/romm/config/config.yml
|
||||||
msg_ok "Created configuration file"
|
msg_ok "Created configuration file"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "RetroAchievements" "RetroAchievements/RALibretro" "prebuild" "latest" "/opt/RALibretro" "RAHasher-x64-Linux.zip"
|
fetch_and_deploy_gh_release "RetroAchievements" "RetroAchievements/RALibretro" "prebuild" "latest" "/opt/RALibretro" "RAHasher-x64-Linux-*.zip"
|
||||||
|
|
||||||
msg_info "Building RAHasher (RetroAchievements)"
|
msg_info "Building RAHasher (RetroAchievements)"
|
||||||
cd /opt/RALibretro
|
cd /opt/RALibretro
|
||||||
|
|||||||
58
install/tor-snowflake-install.sh
Normal file
58
install/tor-snowflake-install.sh
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: KernelSailor
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://snowflake.torproject.org/
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
setup_go
|
||||||
|
|
||||||
|
msg_info "Creating snowflake user"
|
||||||
|
useradd -m -r -s /usr/sbin/nologin -d /home/snowflake snowflake
|
||||||
|
msg_ok "Created snowflake user"
|
||||||
|
|
||||||
|
msg_info "Building Snowflake"
|
||||||
|
RELEASE=$(curl -fsSL https://gitlab.torproject.org/api/v4/projects/tpo%2Fanti-censorship%2Fpluggable-transports%2Fsnowflake/releases | jq -r '.[0].tag_name' | sed 's/^v//')
|
||||||
|
$STD curl -fsSL "https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/archive/v${RELEASE}/snowflake-v${RELEASE}.tar.gz" -o /opt/snowflake.tar.gz
|
||||||
|
$STD tar -xzf /opt/snowflake.tar.gz -C /opt
|
||||||
|
$STD rm -rf /opt/snowflake.tar.gz
|
||||||
|
$STD mv /opt/snowflake-v${RELEASE} /opt/tor-snowflake
|
||||||
|
$STD chown -R snowflake:snowflake /opt/tor-snowflake
|
||||||
|
$STD sudo -H -u snowflake bash -c "cd /opt/tor-snowflake/proxy && go build -o snowflake-proxy ."
|
||||||
|
echo "${RELEASE}" >~/.tor-snowflake
|
||||||
|
msg_ok "Built Snowflake Proxy v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/snowflake-proxy.service
|
||||||
|
[Unit]
|
||||||
|
Description=Snowflake Proxy Service
|
||||||
|
Documentation=https://snowflake.torproject.org/
|
||||||
|
After=network-online.target
|
||||||
|
Wants=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=snowflake
|
||||||
|
Group=snowflake
|
||||||
|
WorkingDirectory=/opt/tor-snowflake/proxy
|
||||||
|
ExecStart=/opt/tor-snowflake/proxy/snowflake-proxy -verbose -unsafe-logging
|
||||||
|
Restart=always
|
||||||
|
RestartSec=10
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now snowflake-proxy
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
151
install/tracearr-install.sh
Normal file
151
install/tracearr-install.sh
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: durzo
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/connorgallopo/Tracearr
|
||||||
|
|
||||||
|
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 redis-server
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
PNPM_VERSION="$(curl -fsSL "https://raw.githubusercontent.com/connorgallopo/Tracearr/refs/heads/main/package.json" | jq -r '.packageManager | split("@")[1]')"
|
||||||
|
NODE_VERSION="22" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs
|
||||||
|
PG_VERSION="18" setup_postgresql
|
||||||
|
|
||||||
|
msg_info "Installing TimescaleDB"
|
||||||
|
setup_deb822_repo \
|
||||||
|
"timescaledb" \
|
||||||
|
"https://packagecloud.io/timescale/timescaledb/gpgkey" \
|
||||||
|
"https://packagecloud.io/timescale/timescaledb/debian" \
|
||||||
|
"$(get_os_info codename)" \
|
||||||
|
"main"
|
||||||
|
$STD apt install -y \
|
||||||
|
timescaledb-2-postgresql-18 \
|
||||||
|
timescaledb-tools \
|
||||||
|
timescaledb-toolkit-postgresql-18
|
||||||
|
total_ram_kb=$(grep MemTotal /proc/meminfo | awk '{print $2}')
|
||||||
|
ram_for_tsdb=$((total_ram_kb / 1024 / 2))
|
||||||
|
$STD timescaledb-tune -yes -memory "$ram_for_tsdb"MB
|
||||||
|
$STD systemctl restart postgresql
|
||||||
|
msg_ok "Installed TimescaleDB"
|
||||||
|
|
||||||
|
msg_info "Creating PostgreSQL Database"
|
||||||
|
PG_DB_NAME="tracearr" PG_DB_USER="tracearr" PG_DB_EXTENSIONS="timescaledb,timescaledb_toolkit" setup_postgresql_db
|
||||||
|
msg_ok "Created PostgreSQL Database"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "tracearr" "connorgallopo/Tracearr" "tarball" "latest" "/opt/tracearr.build"
|
||||||
|
|
||||||
|
msg_info "Building Tracearr"
|
||||||
|
export TZ=$(cat /etc/timezone)
|
||||||
|
cd /opt/tracearr.build
|
||||||
|
$STD pnpm install --frozen-lockfile --force
|
||||||
|
$STD pnpm turbo telemetry disable
|
||||||
|
$STD pnpm turbo run build --no-daemon --filter=@tracearr/shared --filter=@tracearr/server --filter=@tracearr/web
|
||||||
|
mkdir -p /opt/tracearr/{packages/shared,apps/server,apps/web,apps/server/src/db}
|
||||||
|
cp -rf package.json /opt/tracearr/
|
||||||
|
cp -rf pnpm-workspace.yaml /opt/tracearr/
|
||||||
|
cp -rf pnpm-lock.yaml /opt/tracearr/
|
||||||
|
cp -rf apps/server/package.json /opt/tracearr/apps/server/
|
||||||
|
cp -rf apps/server/dist /opt/tracearr/apps/server/dist
|
||||||
|
cp -rf apps/web/dist /opt/tracearr/apps/web/dist
|
||||||
|
cp -rf packages/shared/package.json /opt/tracearr/packages/shared/
|
||||||
|
cp -rf packages/shared/dist /opt/tracearr/packages/shared/dist
|
||||||
|
cp -rf apps/server/src/db/migrations /opt/tracearr/apps/server/src/db/migrations
|
||||||
|
cp -rf data /opt/tracearr/data
|
||||||
|
mkdir -p /opt/tracearr/data/image-cache
|
||||||
|
rm -rf /opt/tracearr.build
|
||||||
|
cd /opt/tracearr
|
||||||
|
$STD pnpm install --prod --frozen-lockfile --ignore-scripts
|
||||||
|
msg_ok "Built Tracearr"
|
||||||
|
|
||||||
|
msg_info "Configuring Tracearr"
|
||||||
|
$STD useradd -r -s /bin/false -U tracearr
|
||||||
|
$STD chown -R tracearr:tracearr /opt/tracearr
|
||||||
|
install -d -m 750 -o tracearr -g tracearr /data/tracearr
|
||||||
|
export JWT_SECRET=$(openssl rand -hex 32)
|
||||||
|
export COOKIE_SECRET=$(openssl rand -hex 32)
|
||||||
|
cat <<EOF >/data/tracearr/.env
|
||||||
|
DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@127.0.0.1:5432/${PG_DB_NAME}
|
||||||
|
REDIS_URL=redis://127.0.0.1:6379
|
||||||
|
PORT=3000
|
||||||
|
HOST=0.0.0.0
|
||||||
|
NODE_ENV=production
|
||||||
|
TZ=${TZ}
|
||||||
|
LOG_LEVEL=info
|
||||||
|
JWT_SECRET=$JWT_SECRET
|
||||||
|
COOKIE_SECRET=$COOKIE_SECRET
|
||||||
|
APP_VERSION=$(cat /root/.tracearr)
|
||||||
|
#CORS_ORIGIN=http://localhost:5173
|
||||||
|
#MOBILE_BETA_MODE=true
|
||||||
|
EOF
|
||||||
|
chmod 600 /data/tracearr/.env
|
||||||
|
chown -R tracearr:tracearr /data/tracearr
|
||||||
|
msg_ok "Configured Tracearr"
|
||||||
|
|
||||||
|
msg_info "Creating Services"
|
||||||
|
cat <<EOF >/data/tracearr/prestart.sh
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# =============================================================================
|
||||||
|
# Tune PostgreSQL for available resources (runs every startup)
|
||||||
|
# =============================================================================
|
||||||
|
# timescaledb-tune automatically optimizes PostgreSQL settings based on
|
||||||
|
# available RAM and CPU. Safe to run repeatedly - recalculates if resources change.
|
||||||
|
if command -v timescaledb-tune &> /dev/null; then
|
||||||
|
total_ram_kb=\$(grep MemTotal /proc/meminfo | awk '{print \$2}')
|
||||||
|
ram_for_tsdb=\$((total_ram_kb / 1024 / 2))
|
||||||
|
timescaledb-tune -yes -memory "\$ram_for_tsdb"MB --quiet 2>/dev/null \
|
||||||
|
|| echo "Warning: timescaledb-tune failed (non-fatal)"
|
||||||
|
fi
|
||||||
|
# =============================================================================
|
||||||
|
# Ensure TimescaleDB decompression limit is set (for existing databases)
|
||||||
|
# =============================================================================
|
||||||
|
# This setting allows migrations to modify compressed hypertable data.
|
||||||
|
# Without it, bulk UPDATEs on compressed sessions will fail with
|
||||||
|
# "tuple decompression limit exceeded" errors.
|
||||||
|
pg_config_file="/etc/postgresql/18/main/postgresql.conf"
|
||||||
|
if [ -f \$pg_config_file ]; then
|
||||||
|
if ! grep -q "max_tuples_decompressed_per_dml_transaction" \$pg_config_file; then
|
||||||
|
echo "" >> \$pg_config_file
|
||||||
|
echo "# Allow unlimited tuple decompression for migrations on compressed hypertables" >> \$pg_config_file
|
||||||
|
echo "timescaledb.max_tuples_decompressed_per_dml_transaction = 0" >> \$pg_config_file
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
systemctl restart postgresql
|
||||||
|
EOF
|
||||||
|
chmod +x /data/tracearr/prestart.sh
|
||||||
|
cat <<EOF >/lib/systemd/system/tracearr.service
|
||||||
|
[Unit]
|
||||||
|
Description=Tracearr Web Server
|
||||||
|
After=network.target postgresql.service redis-server.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
KillMode=control-group
|
||||||
|
EnvironmentFile=/data/tracearr/.env
|
||||||
|
WorkingDirectory=/opt/tracearr
|
||||||
|
ExecStartPre=+/data/tracearr/prestart.sh
|
||||||
|
ExecStart=node /opt/tracearr/apps/server/dist/index.js
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=10
|
||||||
|
User=tracearr
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now postgresql
|
||||||
|
systemctl enable -q --now redis-server
|
||||||
|
systemctl enable -q --now tracearr
|
||||||
|
msg_ok "Created Services"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
65
install/wishlist-install.sh
Normal file
65
install/wishlist-install.sh
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: Dunky13
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/cmintey/wishlist
|
||||||
|
|
||||||
|
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 \
|
||||||
|
python3 \
|
||||||
|
openssl \
|
||||||
|
caddy
|
||||||
|
msg_ok "Installed dependencies"
|
||||||
|
|
||||||
|
NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs
|
||||||
|
fetch_and_deploy_gh_release "wishlist" "cmintey/wishlist" "tarball"
|
||||||
|
LATEST_APP_VERSION=$(get_latest_github_release "cmintey/wishlist" false)
|
||||||
|
|
||||||
|
msg_info "Installing Wishlist"
|
||||||
|
cd /opt/wishlist
|
||||||
|
cp .env.example .env
|
||||||
|
echo "NODE_ENV=production" >> /opt/wishlist/.env
|
||||||
|
$STD pnpm install
|
||||||
|
$STD pnpm svelte-kit sync
|
||||||
|
$STD pnpm prisma generate
|
||||||
|
sed -i 's|/usr/src/app/|/opt/wishlist/|g' $(grep -rl '/usr/src/app/' /opt/wishlist)
|
||||||
|
export VERSION="v${LATEST_APP_VERSION}"
|
||||||
|
export SHA="v${LATEST_APP_VERSION}"
|
||||||
|
$STD pnpm run build
|
||||||
|
$STD pnpm prune --prod
|
||||||
|
chmod +x /opt/wishlist/entrypoint.sh
|
||||||
|
mkdir -p /opt/wishlist/uploads
|
||||||
|
mkdir -p /opt/wishlist/data
|
||||||
|
msg_ok "Installed Wishlist"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/wishlist.service
|
||||||
|
[Unit]
|
||||||
|
Description=Wishlist Service
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
WorkingDirectory=/opt/wishlist
|
||||||
|
EnvironmentFile=/opt/wishlist/.env
|
||||||
|
ExecStart=/usr/bin/env sh -c './entrypoint.sh'
|
||||||
|
Restart=on-failure
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now wishlist
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
@ -57,9 +57,9 @@ $STD uv sync --no-dev --frozen
|
|||||||
msg_ok "Installed Python Dependencies"
|
msg_ok "Installed Python Dependencies"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/opt/yubal/.env
|
cat <<EOF >/opt/yubal.env
|
||||||
YUBAL_HOST=0.0.0.0
|
YUBAL_HOST=0.0.0.0
|
||||||
YUBAL_PORT=8000
|
YUBAL_PORT=8001
|
||||||
YUBAL_DATA_DIR=/opt/yubal_data
|
YUBAL_DATA_DIR=/opt/yubal_data
|
||||||
YUBAL_BEETS_DIR=/opt/yubal/beets
|
YUBAL_BEETS_DIR=/opt/yubal/beets
|
||||||
YUBAL_YTDLP_DIR=/opt/yubal/ytdlp
|
YUBAL_YTDLP_DIR=/opt/yubal/ytdlp
|
||||||
@ -74,7 +74,7 @@ After=network.target
|
|||||||
Type=simple
|
Type=simple
|
||||||
User=root
|
User=root
|
||||||
WorkingDirectory=/opt/yubal
|
WorkingDirectory=/opt/yubal
|
||||||
EnvironmentFile=/opt/yubal/.env
|
EnvironmentFile=/opt/yubal.env
|
||||||
Environment="PATH=/opt/yubal/.venv/bin:/usr/local/bin:/usr/bin:/bin"
|
Environment="PATH=/opt/yubal/.venv/bin:/usr/local/bin:/usr/bin:/bin"
|
||||||
ExecStart=/opt/yubal/.venv/bin/python -m yubal
|
ExecStart=/opt/yubal/.venv/bin/python -m yubal
|
||||||
Restart=always
|
Restart=always
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user