mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 10:22:50 +00:00 
			
		
		
		
	Compare commits
	
		
			14 Commits
		
	
	
		
			2025-10-26
			...
			2025-10-27
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					8b54f615a8 | ||
| 
						 | 
					57d435647b | ||
| 
						 | 
					fe2734f96a | ||
| 
						 | 
					01f1985d2d | ||
| 
						 | 
					92f9033981 | ||
| 
						 | 
					e1603bebec | ||
| 
						 | 
					abdbca59ff | ||
| 
						 | 
					6c662ae6ea | ||
| 
						 | 
					5c04c89f3f | ||
| 
						 | 
					fba1d16626 | ||
| 
						 | 
					3666f4981f | ||
| 
						 | 
					db9809a817 | ||
| 
						 | 
					e69da3846a | ||
| 
						 | 
					cfb76fd0ab | 
							
								
								
									
										14
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -10,8 +10,22 @@
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
 | 
			
		||||
 | 
			
		||||
## 2025-10-28
 | 
			
		||||
 | 
			
		||||
## 2025-10-27
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Dispatcharr ([#8658](https://github.com/community-scripts/ProxmoxVE/pull/8658))
 | 
			
		||||
- Garage | Alpine-Garage ([#8656](https://github.com/community-scripts/ProxmoxVE/pull/8656))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Add typescript and esbuild to browserless setup [@MickLesk](https://github.com/MickLesk) ([#8666](https://github.com/community-scripts/ProxmoxVE/pull/8666))
 | 
			
		||||
    - jellyfin: fix: intel deps [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8657](https://github.com/community-scripts/ProxmoxVE/pull/8657))
 | 
			
		||||
 | 
			
		||||
## 2025-10-26
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										63
									
								
								ct/alpine-garage.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								ct/alpine-garage.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://garagehq.deuxfleurs.fr/
 | 
			
		||||
 | 
			
		||||
APP="Alpine-Garage"
 | 
			
		||||
var_tags="${var_tags:-alpine;object-storage}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_disk="${var_disk:-5}"
 | 
			
		||||
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() {
 | 
			
		||||
  header_info
 | 
			
		||||
  if [[ ! -f /usr/local/bin/garage ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  GITEA_RELEASE=$(curl -fsSL https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name')
 | 
			
		||||
  if [[ "${GITEA_RELEASE}" != "$(cat ~/.garage 2>/dev/null)" ]] || [[ ! -f ~/.garage ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    rc-service garage stop || true
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Backing Up Data"
 | 
			
		||||
    cp /usr/local/bin/garage /usr/local/bin/garage.old 2>/dev/null || true
 | 
			
		||||
    cp /etc/garage.toml /etc/garage.toml.bak 2>/dev/null || true
 | 
			
		||||
    msg_ok "Backed Up Data"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Garage"
 | 
			
		||||
    curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage
 | 
			
		||||
    chmod +x /usr/local/bin/garage
 | 
			
		||||
    echo "${GITEA_RELEASE}" >~/.garage
 | 
			
		||||
    msg_ok "Updated Garage"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    rc-service garage start || rc-service garage restart
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
    msg_ok "Update Successfully!"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. Garage is already at ${GITEA_RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
			
		||||
							
								
								
									
										136
									
								
								ct/dispatcharr.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								ct/dispatcharr.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,136 @@
 | 
			
		||||
#!/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: ekke85 | MickLesk
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/Dispatcharr/Dispatcharr
 | 
			
		||||
 | 
			
		||||
APP="Dispatcharr"
 | 
			
		||||
var_tags="${var_tags:-media;arr}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
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 "/opt/dispatcharr" ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  setup_uv
 | 
			
		||||
  NODE_VERSION="24" setup_nodejs
 | 
			
		||||
 | 
			
		||||
  if check_for_gh_release "Dispatcharr" "Dispatcharr/Dispatcharr"; then
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
    systemctl stop dispatcharr-celery
 | 
			
		||||
    systemctl stop dispatcharr-celerybeat
 | 
			
		||||
    systemctl stop dispatcharr-daphne
 | 
			
		||||
    systemctl stop dispatcharr
 | 
			
		||||
    msg_ok "Stopped Services"
 | 
			
		||||
 | 
			
		||||
    msg_info "Creating Backup"
 | 
			
		||||
    BACKUP_FILE="/opt/dispatcharr_backup_$(date +%F_%H-%M-%S).tar.gz"
 | 
			
		||||
    if [[ -f /opt/dispatcharr/.env ]]; then
 | 
			
		||||
      cp /opt/dispatcharr/.env /tmp/dispatcharr.env.backup
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /opt/dispatcharr/start-gunicorn.sh ]]; then
 | 
			
		||||
      cp /opt/dispatcharr/start-gunicorn.sh /tmp/start-gunicorn.sh.backup
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /opt/dispatcharr/start-celery.sh ]]; then
 | 
			
		||||
      cp /opt/dispatcharr/start-celery.sh /tmp/start-celery.sh.backup
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /opt/dispatcharr/start-celerybeat.sh ]]; then
 | 
			
		||||
      cp /opt/dispatcharr/start-celerybeat.sh /tmp/start-celerybeat.sh.backup
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /opt/dispatcharr/start-daphne.sh ]]; then
 | 
			
		||||
      cp /opt/dispatcharr/start-daphne.sh /tmp/start-daphne.sh.backup
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /opt/dispatcharr/.env ]]; then
 | 
			
		||||
      set -o allexport
 | 
			
		||||
      source /opt/dispatcharr/.env
 | 
			
		||||
      set +o allexport
 | 
			
		||||
      if [[ -n "$POSTGRES_DB" ]] && [[ -n "$POSTGRES_USER" ]] && [[ -n "$POSTGRES_PASSWORD" ]]; then
 | 
			
		||||
        PGPASSWORD=$POSTGRES_PASSWORD pg_dump -U $POSTGRES_USER -h ${POSTGRES_HOST:-localhost} $POSTGRES_DB >/tmp/dispatcharr_db_$(date +%F).sql
 | 
			
		||||
        msg_info "Database backup created"
 | 
			
		||||
      fi
 | 
			
		||||
    fi
 | 
			
		||||
    $STD tar -czf "$BACKUP_FILE" -C /opt dispatcharr /tmp/dispatcharr_db_*.sql
 | 
			
		||||
    msg_ok "Backup created: $BACKUP_FILE"
 | 
			
		||||
 | 
			
		||||
    CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dispatcharr" "Dispatcharr/Dispatcharr"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Dispatcharr Backend"
 | 
			
		||||
    if [[ -f /tmp/dispatcharr.env.backup ]]; then
 | 
			
		||||
      mv /tmp/dispatcharr.env.backup /opt/dispatcharr/.env
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /tmp/start-gunicorn.sh.backup ]]; then
 | 
			
		||||
      mv /tmp/start-gunicorn.sh.backup /opt/dispatcharr/start-gunicorn.sh
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /tmp/start-celery.sh.backup ]]; then
 | 
			
		||||
      mv /tmp/start-celery.sh.backup /opt/dispatcharr/start-celery.sh
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /tmp/start-celerybeat.sh.backup ]]; then
 | 
			
		||||
      mv /tmp/start-celerybeat.sh.backup /opt/dispatcharr/start-celerybeat.sh
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /tmp/start-daphne.sh.backup ]]; then
 | 
			
		||||
      mv /tmp/start-daphne.sh.backup /opt/dispatcharr/start-daphne.sh
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    cd /opt/dispatcharr
 | 
			
		||||
    rm -rf .venv
 | 
			
		||||
    $STD uv venv
 | 
			
		||||
    $STD uv pip install -r requirements.txt --index-strategy unsafe-best-match
 | 
			
		||||
    $STD uv pip install gunicorn gevent celery redis daphne
 | 
			
		||||
    msg_ok "Updated Dispatcharr Backend"
 | 
			
		||||
 | 
			
		||||
    msg_info "Building Frontend"
 | 
			
		||||
    cd /opt/dispatcharr/frontend
 | 
			
		||||
    $STD npm install --legacy-peer-deps
 | 
			
		||||
    $STD npm run build
 | 
			
		||||
    msg_ok "Built Frontend"
 | 
			
		||||
 | 
			
		||||
    msg_info "Running Django Migrations"
 | 
			
		||||
    cd /opt/dispatcharr
 | 
			
		||||
    if [[ -f .env ]]; then
 | 
			
		||||
      set -o allexport
 | 
			
		||||
      source .env
 | 
			
		||||
      set +o allexport
 | 
			
		||||
    fi
 | 
			
		||||
    $STD uv run python manage.py migrate --noinput
 | 
			
		||||
    $STD uv run python manage.py collectstatic --noinput
 | 
			
		||||
    msg_ok "Migrations Complete"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Services"
 | 
			
		||||
    systemctl start dispatcharr
 | 
			
		||||
    systemctl start dispatcharr-celery
 | 
			
		||||
    systemctl start dispatcharr-celerybeat
 | 
			
		||||
    systemctl start dispatcharr-daphne
 | 
			
		||||
    msg_ok "Started Services"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -f /tmp/dispatcharr_db_*.sql
 | 
			
		||||
    msg_ok "Cleanup completed"
 | 
			
		||||
    msg_ok "Update 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}${CL}"
 | 
			
		||||
							
								
								
									
										64
									
								
								ct/garage.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								ct/garage.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://garagehq.deuxfleurs.fr/
 | 
			
		||||
 | 
			
		||||
APP="Garage"
 | 
			
		||||
var_tags="${var_tags:-object-storage}"
 | 
			
		||||
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 [[ ! -f /usr/local/bin/garage ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  GITEA_RELEASE=$(curl -fsSL https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name')
 | 
			
		||||
  if [[ "${GITEA_RELEASE}" != "$(cat ~/.garage 2>/dev/null)" ]] || [[ ! -f ~/.garage ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop garage
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Backing Up Data"
 | 
			
		||||
    cp /usr/local/bin/garage /usr/local/bin/garage.old 2>/dev/null || true
 | 
			
		||||
    cp /etc/garage.toml /etc/garage.toml.bak 2>/dev/null || true
 | 
			
		||||
    msg_ok "Backed Up Data"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Garage"
 | 
			
		||||
    curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage
 | 
			
		||||
    chmod +x /usr/local/bin/garage
 | 
			
		||||
    echo "${GITEA_RELEASE}" >~/.garage
 | 
			
		||||
    msg_ok "Updated Garage"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start garage
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
    msg_ok "Update Successfully!"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. Garage is already at ${GITEA_RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/alpine-garage
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/alpine-garage
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    ___    __      _                  ______                          
 | 
			
		||||
   /   |  / /___  (_)___  ___        / ____/___ __________ _____ ____ 
 | 
			
		||||
  / /| | / / __ \/ / __ \/ _ \______/ / __/ __ `/ ___/ __ `/ __ `/ _ \
 | 
			
		||||
 / ___ |/ / /_/ / / / / /  __/_____/ /_/ / /_/ / /  / /_/ / /_/ /  __/
 | 
			
		||||
/_/  |_/_/ .___/_/_/ /_/\___/      \____/\__,_/_/   \__,_/\__, /\___/ 
 | 
			
		||||
        /_/                                              /____/       
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/dispatcharr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/dispatcharr
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    ____  _                  __       __                   
 | 
			
		||||
   / __ \(_)________  ____ _/ /______/ /_  ____ ___________
 | 
			
		||||
  / / / / / ___/ __ \/ __ `/ __/ ___/ __ \/ __ `/ ___/ ___/
 | 
			
		||||
 / /_/ / (__  ) /_/ / /_/ / /_/ /__/ / / / /_/ / /  / /    
 | 
			
		||||
/_____/_/____/ .___/\__,_/\__/\___/_/ /_/\__,_/_/  /_/     
 | 
			
		||||
            /_/                                            
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/garage
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/garage
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
   ______                          
 | 
			
		||||
  / ____/___ __________ _____ ____ 
 | 
			
		||||
 / / __/ __ `/ ___/ __ `/ __ `/ _ \
 | 
			
		||||
/ /_/ / /_/ / /  / /_/ / /_/ /  __/
 | 
			
		||||
\____/\__,_/_/   \__,_/\__, /\___/ 
 | 
			
		||||
                      /____/       
 | 
			
		||||
@@ -30,6 +30,7 @@ function update_script() {
 | 
			
		||||
 | 
			
		||||
  if ! grep -qEi 'ubuntu' /etc/os-release; then
 | 
			
		||||
    msg_info "Updating Intel Dependencies"
 | 
			
		||||
    rm .intel-*
 | 
			
		||||
    fetch_and_deploy_gh_release "intel-igc-core-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-core-2_*_amd64.deb"
 | 
			
		||||
    fetch_and_deploy_gh_release "intel-igc-opencl-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-opencl-2_*_amd64.deb"
 | 
			
		||||
    fetch_and_deploy_gh_release "intel-libgdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb"
 | 
			
		||||
 
 | 
			
		||||
@@ -66,6 +66,8 @@ function update_script() {
 | 
			
		||||
    $STD unzip "$brwsr_tmp"
 | 
			
		||||
    mv browserless-"$TAG"/ /opt/browserless
 | 
			
		||||
    cd /opt/browserless
 | 
			
		||||
    $STD npm install typescript
 | 
			
		||||
    $STD npm install esbuild
 | 
			
		||||
    $STD npm install
 | 
			
		||||
    rm -rf src/routes/{chrome,edge,firefox,webkit}
 | 
			
		||||
    $STD node_modules/playwright-core/cli.js install --with-deps chromium
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										35
									
								
								frontend/public/json/dispatcharr.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								frontend/public/json/dispatcharr.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Dispatcharr",
 | 
			
		||||
  "slug": "dispatcharr",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    14
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-10-27",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 9191,
 | 
			
		||||
  "documentation": "https://dispatcharr.github.io/Dispatcharr-Docs/",
 | 
			
		||||
  "website": "https://github.com/Dispatcharr/Dispatcharr",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/dispatcharr.webp",
 | 
			
		||||
  "config_path": "/opt/dispatcharr/.env",
 | 
			
		||||
  "description": "Dispatcharr is an open-source powerhouse for managing IPTV streams and EPG data with elegance and control. Born from necessity and built with passion, it started as a personal project by OkinawaBoss and evolved with contributions from legends like dekzter, SergeantPanda and Bucatini.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/dispatcharr.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 8,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										59
									
								
								frontend/public/json/garage.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								frontend/public/json/garage.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Garage",
 | 
			
		||||
  "slug": "garage",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    8
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-10-27",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 3900,
 | 
			
		||||
  "documentation": "https://garagehq.deuxfleurs.fr/documentation/quick-start/",
 | 
			
		||||
  "website": "https://garagehq.deuxfleurs.fr/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/garage.webp",
 | 
			
		||||
  "config_path": "/etc/garage.toml",
 | 
			
		||||
  "description": "Garage is a lightweight, self-hosted, S3-compatible object storage service built for distributed environments. It is designed to be simple, efficient, and easy to deploy across multiple nodes.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/garage.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 5,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "alpine",
 | 
			
		||||
      "script": "ct/alpine-garage.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 512,
 | 
			
		||||
        "hdd": 5,
 | 
			
		||||
        "os": "alpine",
 | 
			
		||||
        "version": "3.22"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "The Garage configuration file is located at `/etc/garage.toml`. You can edit RPC and API bindings, tokens, and data directories there.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Admin API runs by default on port `3903`, S3 API on port `3900`, Web UI on `3902`. Adjust firewall rules accordingly.",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "To view your generated tokens and RPC secret, check `~/garage.creds` after installation.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -1,9 +1,149 @@
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
    "name": "chrisbenincasa/tunarr",
 | 
			
		||||
    "version": "v0.23.0-alpha.18",
 | 
			
		||||
    "date": "2025-10-27T23:09:56Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "OliveTin/OliveTin",
 | 
			
		||||
    "version": "3000.2.1",
 | 
			
		||||
    "date": "2025-10-27T21:08:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "tailscale/tailscale",
 | 
			
		||||
    "version": "v1.90.3",
 | 
			
		||||
    "date": "2025-10-27T20:21:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "goauthentik/authentik",
 | 
			
		||||
    "version": "version/2025.10.0",
 | 
			
		||||
    "date": "2025-10-27T19:58:39Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "azukaar/Cosmos-Server",
 | 
			
		||||
    "version": "v0.18.4",
 | 
			
		||||
    "date": "2025-04-05T19:12:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "BerriAI/litellm",
 | 
			
		||||
    "version": "v1.77.7.dev2",
 | 
			
		||||
    "date": "2025-10-27T18:50:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "runtipi/runtipi",
 | 
			
		||||
    "version": "v4.5.3",
 | 
			
		||||
    "date": "2025-10-25T13:27:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "dgtlmoon/changedetection.io",
 | 
			
		||||
    "version": "0.50.33",
 | 
			
		||||
    "date": "2025-10-27T17:57:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mattermost/mattermost",
 | 
			
		||||
    "version": "server/public/v0.1.21",
 | 
			
		||||
    "date": "2025-10-16T09:46:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rabbitmq/rabbitmq-server",
 | 
			
		||||
    "version": "v4.1.4",
 | 
			
		||||
    "date": "2025-09-02T14:26:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "semaphoreui/semaphore",
 | 
			
		||||
    "version": "v2.17.0-beta14",
 | 
			
		||||
    "date": "2025-10-27T14:18:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "n8n-io/n8n",
 | 
			
		||||
    "version": "n8n@1.117.2",
 | 
			
		||||
    "date": "2025-10-27T12:23:36Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pocket-id/pocket-id",
 | 
			
		||||
    "version": "v1.14.1",
 | 
			
		||||
    "date": "2025-10-27T13:19:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Graylog2/graylog2-server",
 | 
			
		||||
    "version": "7.0.0-rc.2",
 | 
			
		||||
    "date": "2025-10-27T12:19:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fuma-nama/fumadocs",
 | 
			
		||||
    "version": "create-fumadocs-app@16.0.5",
 | 
			
		||||
    "date": "2025-10-27T11:34:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "juanfont/headscale",
 | 
			
		||||
    "version": "v0.27.0",
 | 
			
		||||
    "date": "2025-10-27T11:16:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "redis/redis",
 | 
			
		||||
    "version": "8.4-rc1-int",
 | 
			
		||||
    "date": "2025-10-27T09:57:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "emqx/emqx",
 | 
			
		||||
    "version": "e6.0.1-alpha.2",
 | 
			
		||||
    "date": "2025-10-27T09:36:30Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zitadel/zitadel",
 | 
			
		||||
    "version": "v4.5.0",
 | 
			
		||||
    "date": "2025-10-27T08:29:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "syncthing/syncthing",
 | 
			
		||||
    "version": "v2.0.10",
 | 
			
		||||
    "date": "2025-09-24T08:33:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Jackett/Jackett",
 | 
			
		||||
    "version": "v0.24.196",
 | 
			
		||||
    "date": "2025-10-27T05:55:28Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "javedh-dev/tracktor",
 | 
			
		||||
    "version": "0.4.0",
 | 
			
		||||
    "date": "2025-10-27T05:49:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "firefly-iii/firefly-iii",
 | 
			
		||||
    "version": "v6.4.2",
 | 
			
		||||
    "date": "2025-10-07T08:11:58Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jellyfin/jellyfin",
 | 
			
		||||
    "version": "v10.11.1",
 | 
			
		||||
    "date": "2025-10-27T02:02:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "sassanix/Warracker",
 | 
			
		||||
    "version": "1.0.1",
 | 
			
		||||
    "date": "2025-10-27T01:35:01Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jeedom/core",
 | 
			
		||||
    "version": "4.4.20",
 | 
			
		||||
    "date": "2025-10-27T00:27:04Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "steveiliop56/tinyauth",
 | 
			
		||||
    "version": "v4.0.1",
 | 
			
		||||
    "date": "2025-10-15T16:53:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mongodb/mongo",
 | 
			
		||||
    "version": "r8.0.16-rc1",
 | 
			
		||||
    "date": "2025-10-26T23:32:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "keycloak/keycloak",
 | 
			
		||||
    "version": "26.4.2",
 | 
			
		||||
    "date": "2025-10-23T06:59:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Radarr/Radarr",
 | 
			
		||||
    "version": "v5.28.0.10274",
 | 
			
		||||
@@ -14,11 +154,6 @@
 | 
			
		||||
    "version": "v1.30.4",
 | 
			
		||||
    "date": "2025-10-26T17:22:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fuma-nama/fumadocs",
 | 
			
		||||
    "version": "fumapress@0.0.8",
 | 
			
		||||
    "date": "2025-10-26T16:44:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "outline/outline",
 | 
			
		||||
    "version": "v1.0.0",
 | 
			
		||||
@@ -34,11 +169,6 @@
 | 
			
		||||
    "version": "v0.15.0",
 | 
			
		||||
    "date": "2025-10-26T15:20:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "OliveTin/OliveTin",
 | 
			
		||||
    "version": "3000.1.2",
 | 
			
		||||
    "date": "2025-10-26T14:46:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "openhab/openhab-core",
 | 
			
		||||
    "version": "5.1.0.M2",
 | 
			
		||||
@@ -49,41 +179,16 @@
 | 
			
		||||
    "version": "v25.8.0",
 | 
			
		||||
    "date": "2025-10-26T14:23:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "firefly-iii/firefly-iii",
 | 
			
		||||
    "version": "v6.4.2",
 | 
			
		||||
    "date": "2025-10-07T08:11:58Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "forgejo/forgejo",
 | 
			
		||||
    "version": "v13.0.2",
 | 
			
		||||
    "date": "2025-10-26T06:33:05Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Jackett/Jackett",
 | 
			
		||||
    "version": "v0.24.191",
 | 
			
		||||
    "date": "2025-10-26T06:00:26Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "cross-seed/cross-seed",
 | 
			
		||||
    "version": "v6.13.5",
 | 
			
		||||
    "date": "2025-09-27T01:10:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "BerriAI/litellm",
 | 
			
		||||
    "version": "v1.79.0.rc.1",
 | 
			
		||||
    "date": "2025-10-26T01:36:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jeedom/core",
 | 
			
		||||
    "version": "4.4.20",
 | 
			
		||||
    "date": "2025-10-26T00:27:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "steveiliop56/tinyauth",
 | 
			
		||||
    "version": "v4.0.1",
 | 
			
		||||
    "date": "2025-10-15T16:53:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TwiN/gatus",
 | 
			
		||||
    "version": "v5.29.0",
 | 
			
		||||
@@ -99,26 +204,11 @@
 | 
			
		||||
    "version": "v1.19.19",
 | 
			
		||||
    "date": "2025-10-25T19:39:58Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "dgtlmoon/changedetection.io",
 | 
			
		||||
    "version": "0.50.32",
 | 
			
		||||
    "date": "2025-10-25T17:29:19Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "sassanix/Warracker",
 | 
			
		||||
    "version": "1.0.0",
 | 
			
		||||
    "date": "2025-10-25T14:25:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "danielbrendel/hortusfox-web",
 | 
			
		||||
    "version": "v5.3",
 | 
			
		||||
    "date": "2025-10-25T13:50:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "runtipi/runtipi",
 | 
			
		||||
    "version": "v4.5.3",
 | 
			
		||||
    "date": "2025-10-25T13:27:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pi-hole/pi-hole",
 | 
			
		||||
    "version": "v6.2.1",
 | 
			
		||||
@@ -129,11 +219,6 @@
 | 
			
		||||
    "version": "v1.24.7",
 | 
			
		||||
    "date": "2025-10-25T01:23:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "keycloak/keycloak",
 | 
			
		||||
    "version": "26.4.2",
 | 
			
		||||
    "date": "2025-10-23T06:59:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "home-assistant/core",
 | 
			
		||||
    "version": "2025.10.4",
 | 
			
		||||
@@ -144,11 +229,6 @@
 | 
			
		||||
    "version": "v1.43.0",
 | 
			
		||||
    "date": "2025-10-24T19:16:05Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "tailscale/tailscale",
 | 
			
		||||
    "version": "v1.90.2",
 | 
			
		||||
    "date": "2025-10-24T18:02:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "influxdata/influxdb",
 | 
			
		||||
    "version": "v2.7.12",
 | 
			
		||||
@@ -169,16 +249,6 @@
 | 
			
		||||
    "version": "v0.25.2",
 | 
			
		||||
    "date": "2025-10-24T12:30:04Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pocket-id/pocket-id",
 | 
			
		||||
    "version": "v1.14.0",
 | 
			
		||||
    "date": "2025-10-24T11:59:09Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "n8n-io/n8n",
 | 
			
		||||
    "version": "n8n@1.116.2",
 | 
			
		||||
    "date": "2025-10-21T11:39:58Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "sabnzbd/sabnzbd",
 | 
			
		||||
    "version": "4.5.5",
 | 
			
		||||
@@ -239,16 +309,6 @@
 | 
			
		||||
    "version": "v2.7.0",
 | 
			
		||||
    "date": "2025-10-23T17:15:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zitadel/zitadel",
 | 
			
		||||
    "version": "v4.4.0",
 | 
			
		||||
    "date": "2025-10-16T07:20:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "juanfont/headscale",
 | 
			
		||||
    "version": "v0.26.1",
 | 
			
		||||
    "date": "2025-06-06T11:22:02Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "HabitRPG/habitica",
 | 
			
		||||
    "version": "v5.41.5",
 | 
			
		||||
@@ -324,11 +384,6 @@
 | 
			
		||||
    "version": "release-1.24.1",
 | 
			
		||||
    "date": "2025-10-22T10:28:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mattermost/mattermost",
 | 
			
		||||
    "version": "server/public/v0.1.21",
 | 
			
		||||
    "date": "2025-10-16T09:46:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zabbix/zabbix",
 | 
			
		||||
    "version": "7.4.4rc1",
 | 
			
		||||
@@ -344,11 +399,6 @@
 | 
			
		||||
    "version": "v1.5.3",
 | 
			
		||||
    "date": "2025-09-20T12:12:33Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "chrisbenincasa/tunarr",
 | 
			
		||||
    "version": "v0.23.0-alpha.17",
 | 
			
		||||
    "date": "2025-10-22T00:33:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "bluenviron/mediamtx",
 | 
			
		||||
    "version": "v1.15.3",
 | 
			
		||||
@@ -379,11 +429,6 @@
 | 
			
		||||
    "version": "server-v3.4.4",
 | 
			
		||||
    "date": "2025-09-25T13:19:26Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "goauthentik/authentik",
 | 
			
		||||
    "version": "version/2025.10.0-rc2",
 | 
			
		||||
    "date": "2025-10-21T00:19:36Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "AlexxIT/go2rtc",
 | 
			
		||||
    "version": "v1.9.11",
 | 
			
		||||
@@ -434,21 +479,11 @@
 | 
			
		||||
    "version": "v1.71.2",
 | 
			
		||||
    "date": "2025-10-20T15:25:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Graylog2/graylog2-server",
 | 
			
		||||
    "version": "7.0.0-rc.1",
 | 
			
		||||
    "date": "2025-10-20T11:53:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jupyter/notebook",
 | 
			
		||||
    "version": "@jupyter-notebook/ui-components@7.5.0-beta.1",
 | 
			
		||||
    "date": "2025-10-20T07:01:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jellyfin/jellyfin",
 | 
			
		||||
    "version": "v10.11.0",
 | 
			
		||||
    "date": "2025-10-20T00:45:19Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pelican-dev/panel",
 | 
			
		||||
    "version": "v1.0.0-beta27",
 | 
			
		||||
@@ -546,8 +581,8 @@
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ollama/ollama",
 | 
			
		||||
    "version": "v0.12.6-rc1",
 | 
			
		||||
    "date": "2025-10-16T16:36:25Z"
 | 
			
		||||
    "version": "v0.12.6",
 | 
			
		||||
    "date": "2025-10-16T20:07:41Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "minio/minio",
 | 
			
		||||
@@ -704,21 +739,6 @@
 | 
			
		||||
    "version": "10.1.48",
 | 
			
		||||
    "date": "2025-10-10T14:46:53Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "semaphoreui/semaphore",
 | 
			
		||||
    "version": "v2.16.34",
 | 
			
		||||
    "date": "2025-10-10T11:57:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "azukaar/Cosmos-Server",
 | 
			
		||||
    "version": "v0.18.4",
 | 
			
		||||
    "date": "2025-04-05T19:12:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "emqx/emqx",
 | 
			
		||||
    "version": "e6.0.1-alpha.1",
 | 
			
		||||
    "date": "2025-10-10T06:57:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mealie-recipes/mealie",
 | 
			
		||||
    "version": "v3.3.2",
 | 
			
		||||
@@ -744,11 +764,6 @@
 | 
			
		||||
    "version": "11.0.1",
 | 
			
		||||
    "date": "2025-10-09T12:34:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rabbitmq/rabbitmq-server",
 | 
			
		||||
    "version": "v4.1.4",
 | 
			
		||||
    "date": "2025-09-02T14:26:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ipfs/kubo",
 | 
			
		||||
    "version": "v0.38.1",
 | 
			
		||||
@@ -834,11 +849,6 @@
 | 
			
		||||
    "version": "2.520",
 | 
			
		||||
    "date": "2025-10-05T00:51:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "redis/redis",
 | 
			
		||||
    "version": "8.2.2",
 | 
			
		||||
    "date": "2025-10-03T06:22:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "actualbudget/actual",
 | 
			
		||||
    "version": "v25.10.0",
 | 
			
		||||
@@ -899,11 +909,6 @@
 | 
			
		||||
    "version": "1.27.1",
 | 
			
		||||
    "date": "2025-09-27T13:07:26Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "javedh-dev/tracktor",
 | 
			
		||||
    "version": "0.3.18",
 | 
			
		||||
    "date": "2025-09-27T10:32:09Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Dolibarr/dolibarr",
 | 
			
		||||
    "version": "22.0.2",
 | 
			
		||||
@@ -924,11 +929,6 @@
 | 
			
		||||
    "version": "2025.09.24",
 | 
			
		||||
    "date": "2025-09-24T13:51:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "syncthing/syncthing",
 | 
			
		||||
    "version": "v2.0.10",
 | 
			
		||||
    "date": "2025-09-24T08:33:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "postgres/postgres",
 | 
			
		||||
    "version": "REL_18_0",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										84
									
								
								install/alpine-garage-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								install/alpine-garage-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,84 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://garagehq.deuxfleurs.fr/
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apk add --no-cache openssl
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
GITEA_RELEASE=$(curl -s https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name')
 | 
			
		||||
curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage
 | 
			
		||||
chmod +x /usr/local/bin/garage
 | 
			
		||||
mkdir -p /var/lib/garage/{data,meta,snapshots}
 | 
			
		||||
mkdir -p /etc/garage
 | 
			
		||||
RPC_SECRET=$(openssl rand -hex 64 | cut -c1-64)
 | 
			
		||||
ADMIN_TOKEN=$(openssl rand -base64 32)
 | 
			
		||||
METRICS_TOKEN=$(openssl rand -base64 32)
 | 
			
		||||
{
 | 
			
		||||
  echo "Garage Tokens and Secrets"
 | 
			
		||||
  echo "RPC Secret: $RPC_SECRET"
 | 
			
		||||
  echo "Admin Token: $ADMIN_TOKEN"
 | 
			
		||||
  echo "Metrics Token: $METRICS_TOKEN"
 | 
			
		||||
} >~/garage.creds
 | 
			
		||||
echo $GITEA_RELEASE >>~/.garage
 | 
			
		||||
cat <<EOF >/etc/garage.toml
 | 
			
		||||
metadata_dir = "/var/lib/garage/meta"
 | 
			
		||||
data_dir = "/var/lib/garage/data"
 | 
			
		||||
db_engine = "sqlite"
 | 
			
		||||
replication_factor = 1
 | 
			
		||||
 | 
			
		||||
rpc_bind_addr = "0.0.0.0:3901"
 | 
			
		||||
rpc_public_addr = "127.0.0.1:3901"
 | 
			
		||||
rpc_secret = "${RPC_SECRET}"
 | 
			
		||||
 | 
			
		||||
[s3_api]
 | 
			
		||||
s3_region = "garage"
 | 
			
		||||
api_bind_addr = "0.0.0.0:3900"
 | 
			
		||||
root_domain = ".s3.garage"
 | 
			
		||||
 | 
			
		||||
[s3_web]
 | 
			
		||||
bind_addr = "0.0.0.0:3902"
 | 
			
		||||
root_domain = ".web.garage"
 | 
			
		||||
index = "index.html"
 | 
			
		||||
 | 
			
		||||
[k2v_api]
 | 
			
		||||
api_bind_addr = "0.0.0.0:3904"
 | 
			
		||||
 | 
			
		||||
[admin]
 | 
			
		||||
api_bind_addr = "0.0.0.0:3903"
 | 
			
		||||
admin_token = "${ADMIN_TOKEN}"
 | 
			
		||||
metrics_token = "${METRICS_TOKEN}"
 | 
			
		||||
EOF
 | 
			
		||||
msg_ok "Configured Garage"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<'EOF' >/etc/init.d/garage
 | 
			
		||||
#!/sbin/openrc-run
 | 
			
		||||
name="Garage Object Storage"
 | 
			
		||||
command="/usr/local/bin/garage"
 | 
			
		||||
command_args="server"
 | 
			
		||||
command_background="yes"
 | 
			
		||||
pidfile="/run/garage.pid"
 | 
			
		||||
depend() {
 | 
			
		||||
    need net
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
chmod +x /etc/init.d/garage
 | 
			
		||||
$STD rc-update add garage default
 | 
			
		||||
$STD rc-service garage restart || rc-service garage start
 | 
			
		||||
msg_ok "Service active"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
							
								
								
									
										263
									
								
								install/dispatcharr-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										263
									
								
								install/dispatcharr-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,263 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: ekke85
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/Dispatcharr/Dispatcharr
 | 
			
		||||
 | 
			
		||||
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-dev \
 | 
			
		||||
  libpq-dev \
 | 
			
		||||
  nginx \
 | 
			
		||||
  redis-server \
 | 
			
		||||
  ffmpeg \
 | 
			
		||||
  procps \
 | 
			
		||||
  streamlink
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
setup_uv
 | 
			
		||||
NODE_VERSION="24" setup_nodejs
 | 
			
		||||
PG_VERSION="16" setup_postgresql
 | 
			
		||||
 | 
			
		||||
msg_info "Creating PostgreSQL Database"
 | 
			
		||||
DB_NAME=dispatcharr_db
 | 
			
		||||
DB_USER=dispatcharr_usr
 | 
			
		||||
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 "Dispatcharr Credentials"
 | 
			
		||||
  echo "Database Name: $DB_NAME"
 | 
			
		||||
  echo "Database User: $DB_USER"
 | 
			
		||||
  echo "Database Password: $DB_PASS"
 | 
			
		||||
  echo ""
 | 
			
		||||
} >>~/dispatcharr.creds
 | 
			
		||||
msg_ok "Created PostgreSQL Database"
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "dispatcharr" "Dispatcharr/Dispatcharr"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Python Dependencies with uv"
 | 
			
		||||
cd /opt/dispatcharr
 | 
			
		||||
$STD uv venv
 | 
			
		||||
$STD uv pip install -r requirements.txt --index-strategy unsafe-best-match
 | 
			
		||||
$STD uv pip install gunicorn gevent celery redis daphne
 | 
			
		||||
msg_ok "Installed Python Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring Dispatcharr"
 | 
			
		||||
export DATABASE_URL="postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}"
 | 
			
		||||
export POSTGRES_DB=$DB_NAME
 | 
			
		||||
export POSTGRES_USER=$DB_USER
 | 
			
		||||
export POSTGRES_PASSWORD=$DB_PASS
 | 
			
		||||
export POSTGRES_HOST=localhost
 | 
			
		||||
$STD uv run python manage.py migrate --noinput
 | 
			
		||||
$STD uv run python manage.py collectstatic --noinput
 | 
			
		||||
cat <<EOF >/opt/dispatcharr/.env
 | 
			
		||||
DATABASE_URL=postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}
 | 
			
		||||
POSTGRES_DB=$DB_NAME
 | 
			
		||||
POSTGRES_USER=$DB_USER
 | 
			
		||||
POSTGRES_PASSWORD=$DB_PASS
 | 
			
		||||
POSTGRES_HOST=localhost
 | 
			
		||||
CELERY_BROKER_URL=redis://localhost:6379/0
 | 
			
		||||
EOF
 | 
			
		||||
cd /opt/dispatcharr/frontend
 | 
			
		||||
$STD npm install --legacy-peer-deps
 | 
			
		||||
$STD npm run build
 | 
			
		||||
msg_ok "Configured Dispatcharr"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring Nginx"
 | 
			
		||||
cat <<EOF >/etc/nginx/sites-available/dispatcharr.conf
 | 
			
		||||
server {
 | 
			
		||||
    listen 80;
 | 
			
		||||
    server_name _;
 | 
			
		||||
 | 
			
		||||
    # Serve static assets with correct MIME types
 | 
			
		||||
    location /assets/ {
 | 
			
		||||
        alias /opt/dispatcharr/frontend/dist/assets/;
 | 
			
		||||
        expires 30d;
 | 
			
		||||
        add_header Cache-Control "public, immutable";
 | 
			
		||||
 | 
			
		||||
        # Explicitly set MIME types for webpack-built assets
 | 
			
		||||
        types {
 | 
			
		||||
            text/javascript js;
 | 
			
		||||
            text/css css;
 | 
			
		||||
            image/png png;
 | 
			
		||||
            image/svg+xml svg svgz;
 | 
			
		||||
            font/woff2 woff2;
 | 
			
		||||
            font/woff woff;
 | 
			
		||||
            font/ttf ttf;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location /static/ {
 | 
			
		||||
        alias /opt/dispatcharr/static/;
 | 
			
		||||
        expires 30d;
 | 
			
		||||
        add_header Cache-Control "public, immutable";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location /media/ {
 | 
			
		||||
        alias /opt/dispatcharr/media/;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location /ws/ {
 | 
			
		||||
        proxy_pass http://127.0.0.1:8001;
 | 
			
		||||
        proxy_http_version 1.1;
 | 
			
		||||
        proxy_set_header Upgrade \$http_upgrade;
 | 
			
		||||
        proxy_set_header Connection "Upgrade";
 | 
			
		||||
        proxy_set_header Host \$host;
 | 
			
		||||
        proxy_set_header X-Real-IP \$remote_addr;
 | 
			
		||||
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
 | 
			
		||||
        proxy_set_header X-Forwarded-Proto \$scheme;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # All other requests proxy to Gunicorn
 | 
			
		||||
    location / {
 | 
			
		||||
        include proxy_params;
 | 
			
		||||
        proxy_pass http://127.0.0.1:5656;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
ln -sf /etc/nginx/sites-available/dispatcharr.conf /etc/nginx/sites-enabled/dispatcharr.conf
 | 
			
		||||
rm -f /etc/nginx/sites-enabled/default
 | 
			
		||||
systemctl restart nginx
 | 
			
		||||
msg_ok "Configured Nginx"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Services"
 | 
			
		||||
cat <<EOF >/opt/dispatcharr/start-gunicorn.sh
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
cd /opt/dispatcharr
 | 
			
		||||
set -a
 | 
			
		||||
source .env
 | 
			
		||||
set +a
 | 
			
		||||
exec uv run gunicorn \\
 | 
			
		||||
    --workers=4 \\
 | 
			
		||||
    --worker-class=gevent \\
 | 
			
		||||
    --timeout=300 \\
 | 
			
		||||
    --bind 0.0.0.0:5656 \\
 | 
			
		||||
    dispatcharr.wsgi:application
 | 
			
		||||
EOF
 | 
			
		||||
chmod +x /opt/dispatcharr/start-gunicorn.sh
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/opt/dispatcharr/start-celery.sh
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
cd /opt/dispatcharr
 | 
			
		||||
set -a
 | 
			
		||||
source .env
 | 
			
		||||
set +a
 | 
			
		||||
exec uv run celery -A dispatcharr worker -l info -c 4
 | 
			
		||||
EOF
 | 
			
		||||
chmod +x /opt/dispatcharr/start-celery.sh
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/opt/dispatcharr/start-celerybeat.sh
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
cd /opt/dispatcharr
 | 
			
		||||
set -a
 | 
			
		||||
source .env
 | 
			
		||||
set +a
 | 
			
		||||
exec uv run celery -A dispatcharr beat -l info
 | 
			
		||||
EOF
 | 
			
		||||
chmod +x /opt/dispatcharr/start-celerybeat.sh
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/opt/dispatcharr/start-daphne.sh
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
cd /opt/dispatcharr
 | 
			
		||||
set -a
 | 
			
		||||
source .env
 | 
			
		||||
set +a
 | 
			
		||||
exec uv run daphne -b 0.0.0.0 -p 8001 dispatcharr.asgi:application
 | 
			
		||||
EOF
 | 
			
		||||
chmod +x /opt/dispatcharr/start-daphne.sh
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/systemd/system/dispatcharr.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Dispatcharr Web Server
 | 
			
		||||
After=network.target postgresql.service redis-server.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
WorkingDirectory=/opt/dispatcharr
 | 
			
		||||
ExecStart=/opt/dispatcharr/start-gunicorn.sh
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
RestartSec=10
 | 
			
		||||
User=root
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/systemd/system/dispatcharr-celery.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Dispatcharr Celery Worker
 | 
			
		||||
After=network.target redis-server.service
 | 
			
		||||
Requires=dispatcharr.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
WorkingDirectory=/opt/dispatcharr
 | 
			
		||||
ExecStart=/opt/dispatcharr/start-celery.sh
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
RestartSec=10
 | 
			
		||||
User=root
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/systemd/system/dispatcharr-celerybeat.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Dispatcharr Celery Beat Scheduler
 | 
			
		||||
After=network.target redis-server.service
 | 
			
		||||
Requires=dispatcharr.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
WorkingDirectory=/opt/dispatcharr
 | 
			
		||||
ExecStart=/opt/dispatcharr/start-celerybeat.sh
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
RestartSec=10
 | 
			
		||||
User=root
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/systemd/system/dispatcharr-daphne.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Dispatcharr WebSocket Server (Daphne)
 | 
			
		||||
After=network.target
 | 
			
		||||
Requires=dispatcharr.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
WorkingDirectory=/opt/dispatcharr
 | 
			
		||||
ExecStart=/opt/dispatcharr/start-daphne.sh
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
RestartSec=10
 | 
			
		||||
User=root
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now dispatcharr dispatcharr-celery dispatcharr-celerybeat dispatcharr-daphne
 | 
			
		||||
msg_ok "Created Services"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt -y autoremove
 | 
			
		||||
$STD apt -y autoclean
 | 
			
		||||
$STD apt -y clean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
							
								
								
									
										95
									
								
								install/garage-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								install/garage-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,95 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://garagehq.deuxfleurs.fr/
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Setup Garage"
 | 
			
		||||
GITEA_RELEASE=$(curl -s https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name')
 | 
			
		||||
curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage
 | 
			
		||||
chmod +x /usr/local/bin/garage
 | 
			
		||||
mkdir -p /var/lib/garage/{data,meta,snapshots}
 | 
			
		||||
mkdir -p /etc/garage
 | 
			
		||||
RPC_SECRET=$(openssl rand -hex 32)
 | 
			
		||||
ADMIN_TOKEN=$(openssl rand -base64 32)
 | 
			
		||||
METRICS_TOKEN=$(openssl rand -base64 32)
 | 
			
		||||
{
 | 
			
		||||
    echo "Garage Tokens and Secrets"
 | 
			
		||||
    echo "RPC Secret: $RPC_SECRET"
 | 
			
		||||
    echo "Admin Token: $ADMIN_TOKEN"
 | 
			
		||||
    echo "Metrics Token: $METRICS_TOKEN"
 | 
			
		||||
} >>~/garage.creds
 | 
			
		||||
echo $GITEA_RELEASE >>~/.garage
 | 
			
		||||
cat <<EOF >/etc/garage.toml
 | 
			
		||||
metadata_dir = "/var/lib/garage/meta"
 | 
			
		||||
data_dir = "/var/lib/garage/data"
 | 
			
		||||
db_engine = "sqlite"
 | 
			
		||||
replication_factor = 1
 | 
			
		||||
 | 
			
		||||
rpc_bind_addr = "[::]:3901"
 | 
			
		||||
rpc_public_addr = "127.0.0.1:3901"
 | 
			
		||||
rpc_secret = "${RPC_SECRET}"
 | 
			
		||||
 | 
			
		||||
[s3_api]
 | 
			
		||||
s3_region = "garage"
 | 
			
		||||
api_bind_addr = "[::]:3900"
 | 
			
		||||
root_domain = ".s3.garage.localhost"
 | 
			
		||||
 | 
			
		||||
[s3_web]
 | 
			
		||||
bind_addr = "[::]:3902"
 | 
			
		||||
root_domain = ".web.garage.localhost"
 | 
			
		||||
index = "index.html"
 | 
			
		||||
 | 
			
		||||
[k2v_api]
 | 
			
		||||
api_bind_addr = "[::]:3904"
 | 
			
		||||
 | 
			
		||||
[admin]
 | 
			
		||||
api_bind_addr = "[::]:3903"
 | 
			
		||||
admin_token = "${ADMIN_TOKEN}"
 | 
			
		||||
metrics_token = "${METRICS_TOKEN}"
 | 
			
		||||
EOF
 | 
			
		||||
msg_ok "Set up Garage"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
msg_info "Creating service"
 | 
			
		||||
cat <<'EOF' >/etc/systemd/system/garage.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Garage Object Storage (Deuxfleurs)
 | 
			
		||||
After=network-online.target
 | 
			
		||||
Wants=network-online.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
ExecStart=/usr/local/bin/garage -c /etc/garage.toml server
 | 
			
		||||
Restart=always
 | 
			
		||||
RestartSec=5
 | 
			
		||||
User=root
 | 
			
		||||
WorkingDirectory=/var/lib/garage
 | 
			
		||||
Environment=RUST_LOG=info
 | 
			
		||||
StandardOutput=append:/var/log/garage.log
 | 
			
		||||
StandardError=append:/var/log/garage.log
 | 
			
		||||
LimitNOFILE=65536
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
$STD systemctl enable -q --now garage
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt -y autoremove
 | 
			
		||||
$STD apt -y autoclean
 | 
			
		||||
$STD apt -y clean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -19,9 +19,11 @@ if ! grep -qEi 'ubuntu' /etc/os-release; then
 | 
			
		||||
  fetch_and_deploy_gh_release "intel-igc-opencl-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-opencl-2_*_amd64.deb"
 | 
			
		||||
  fetch_and_deploy_gh_release "intel-libgdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb"
 | 
			
		||||
  fetch_and_deploy_gh_release "intel-opencl-icd" "intel/compute-runtime" "binary" "latest" "" "intel-opencl-icd_*_amd64.deb"
 | 
			
		||||
else
 | 
			
		||||
  $STD apt -y install intel-opencl-icd
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
$STD apt -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
 | 
			
		||||
$STD apt -y install {va-driver-all,ocl-icd-libopencl1,vainfo,intel-gpu-tools}
 | 
			
		||||
if [[ "$CTTYPE" == "0" ]]; then
 | 
			
		||||
  chgrp video /dev/dri
 | 
			
		||||
  chmod 755 /dev/dri
 | 
			
		||||
 
 | 
			
		||||
@@ -61,6 +61,8 @@ cd /opt/browserless
 | 
			
		||||
$STD npm install
 | 
			
		||||
rm -rf src/routes/{chrome,edge,firefox,webkit}
 | 
			
		||||
$STD node_modules/playwright-core/cli.js install --with-deps chromium
 | 
			
		||||
$STD npm install typescript --save-dev
 | 
			
		||||
$STD npm install esbuild --save-dev
 | 
			
		||||
$STD npm run build
 | 
			
		||||
$STD npm run build:function
 | 
			
		||||
$STD npm prune production
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user