mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-12-14 11:13:27 +01:00
Compare commits
42 Commits
fix/debian
...
2025-12-09
| Author | SHA1 | Date | |
|---|---|---|---|
| 96dc87ddd5 | |||
| f0f1708c31 | |||
| 76c4277f4b | |||
| 10ee5f2eb4 | |||
| 9611267657 | |||
| 4dce90530b | |||
| cb28199964 | |||
| c28e404bd9 | |||
| 42d1f2980a | |||
| 0ab80c814b | |||
| 0f183d0b2f | |||
| fd75b03435 | |||
| 2abb7db794 | |||
| f07e6a92b0 | |||
| ee3c4f843d | |||
| 5ad841da76 | |||
| 02da3fc888 | |||
| d51c37d134 | |||
| 938a66a67e | |||
| bea9a62cce | |||
| 1458aade19 | |||
| cf7d32548f | |||
| 3be34bdac8 | |||
| 6cdc26badc | |||
| 92a26677f7 | |||
| 0bcffdc8b0 | |||
| f2597f4d35 | |||
| 7b139fa763 | |||
| f6f131efab | |||
| e4d5ce221b | |||
| 4e182bd5b9 | |||
| 12a7ecd85d | |||
| b658959c7b | |||
| 5eb9d2bcdf | |||
| 7d37743981 | |||
| b0e7cdfe13 | |||
| 31c19bed09 | |||
| bff0650d72 | |||
| d9b05882a3 | |||
| 31dbf2554c | |||
| f95cc5a7ad | |||
| 3fb9d02f36 |
54
CHANGELOG.md
54
CHANGELOG.md
@ -10,16 +10,70 @@
|
||||
> [!CAUTION]
|
||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
||||
|
||||
## 2025-12-10
|
||||
|
||||
## 2025-12-09
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Dokploy ([#9793](https://github.com/community-scripts/ProxmoxVE/pull/9793))
|
||||
- Coolify ([#9792](https://github.com/community-scripts/ProxmoxVE/pull/9792))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Refactor: Zerotier-One [@tremor021](https://github.com/tremor021) ([#9804](https://github.com/community-scripts/ProxmoxVE/pull/9804))
|
||||
- Refactor: Zabbix [@tremor021](https://github.com/tremor021) ([#9807](https://github.com/community-scripts/ProxmoxVE/pull/9807))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: Zigbee2MQTT [@tremor021](https://github.com/tremor021) ([#9803](https://github.com/community-scripts/ProxmoxVE/pull/9803))
|
||||
- Refactor: Wordpress [@tremor021](https://github.com/tremor021) ([#9808](https://github.com/community-scripts/ProxmoxVE/pull/9808))
|
||||
- Wizarr: Various fixes [@tremor021](https://github.com/tremor021) ([#9809](https://github.com/community-scripts/ProxmoxVE/pull/9809))
|
||||
- Refactor: Wiki.js [@tremor021](https://github.com/tremor021) ([#9810](https://github.com/community-scripts/ProxmoxVE/pull/9810))
|
||||
- Zammad: Various fixes [@tremor021](https://github.com/tremor021) ([#9805](https://github.com/community-scripts/ProxmoxVE/pull/9805))
|
||||
- Refactor: Zipline [@tremor021](https://github.com/tremor021) ([#9801](https://github.com/community-scripts/ProxmoxVE/pull/9801))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix(tools): handle repos with 30+ pre-releases in check_for_gh_release [@vidonnus](https://github.com/vidonnus) ([#9786](https://github.com/community-scripts/ProxmoxVE/pull/9786))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Feature: extend advanced settings with more options & inherit app defaults [@MickLesk](https://github.com/MickLesk) ([#9776](https://github.com/community-scripts/ProxmoxVE/pull/9776))
|
||||
|
||||
### 📚 Documentation
|
||||
|
||||
- website: fix/check updateable flags [@MickLesk](https://github.com/MickLesk) ([#9777](https://github.com/community-scripts/ProxmoxVE/pull/9777))
|
||||
- fixed grammar on alert that pops up when you copy the curl command [@Sarthak-Sidhant](https://github.com/Sarthak-Sidhant) ([#9799](https://github.com/community-scripts/ProxmoxVE/pull/9799))
|
||||
|
||||
### ❔ Uncategorized
|
||||
|
||||
- Website: Remove Palmr script [@tremor021](https://github.com/tremor021) ([#9824](https://github.com/community-scripts/ProxmoxVE/pull/9824))
|
||||
|
||||
## 2025-12-08
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- typo: tandoor instead of trandoor [@Neonize](https://github.com/Neonize) ([#9771](https://github.com/community-scripts/ProxmoxVE/pull/9771))
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Tandoor: Remove postgres17-contrib package [@tremor021](https://github.com/tremor021) ([#9781](https://github.com/community-scripts/ProxmoxVE/pull/9781))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- feat: Add var_gpu flag for GPU passthrough configuration [@MickLesk](https://github.com/MickLesk) ([#9764](https://github.com/community-scripts/ProxmoxVE/pull/9764))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix: always show SSH access dialog in advanced settings [@MickLesk](https://github.com/MickLesk) ([#9765](https://github.com/community-scripts/ProxmoxVE/pull/9765))
|
||||
|
||||
## 2025-12-07
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
46
ct/coolify.sh
Normal file
46
ct/coolify.sh
Normal file
@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://coolify.io/
|
||||
|
||||
APP="Coolify"
|
||||
var_tags="${var_tags:-docker;paas}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-30}"
|
||||
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 /data/coolify ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
msg_info "Updating Coolify"
|
||||
$STD bash <(curl -fsSL https://cdn.coollabs.io/coolify/install.sh)
|
||||
msg_ok "Updated Coolify"
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"
|
||||
46
ct/dokploy.sh
Normal file
46
ct/dokploy.sh
Normal file
@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://dokploy.com/
|
||||
|
||||
APP="Dokploy"
|
||||
var_tags="${var_tags:-docker;paas}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-10}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /etc/dokploy ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
msg_info "Updating Dokploy"
|
||||
$STD bash <(curl -sSL https://dokploy.com/install.sh)
|
||||
msg_ok "Updated Dokploy"
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||
6
ct/headers/coolify
Normal file
6
ct/headers/coolify
Normal file
@ -0,0 +1,6 @@
|
||||
______ ___ ____
|
||||
/ ____/___ ____ / (_) __/_ __
|
||||
/ / / __ \/ __ \/ / / /_/ / / /
|
||||
/ /___/ /_/ / /_/ / / / __/ /_/ /
|
||||
\____/\____/\____/_/_/_/ \__, /
|
||||
/____/
|
||||
6
ct/headers/dokploy
Normal file
6
ct/headers/dokploy
Normal file
@ -0,0 +1,6 @@
|
||||
____ __ __
|
||||
/ __ \____ / /______ / /___ __ __
|
||||
/ / / / __ \/ //_/ __ \/ / __ \/ / / /
|
||||
/ /_/ / /_/ / ,< / /_/ / / /_/ / /_/ /
|
||||
/_____/\____/_/|_/ .___/_/\____/\__, /
|
||||
/_/ /____/
|
||||
@ -55,7 +55,7 @@ function update_script() {
|
||||
cd /opt/tandoor/vue3
|
||||
$STD yarn install
|
||||
$STD yarn build
|
||||
TANDOOR_VERSION="$(curl -fsSL https://api.github.com/repos/TandoorRecipes/recipes/releases/latest | jq -r .tag_name)"
|
||||
TANDOOR_VERSION=$(get_latest_github_release "TandoorRecipes/recipes")
|
||||
cat <<EOF >/opt/tandoor/cookbook/version_info.py
|
||||
TANDOOR_VERSION = "$TANDOOR_VERSION"
|
||||
TANDOOR_REF = "bare-metal"
|
||||
|
||||
11
ct/zammad.sh
11
ct/zammad.sh
@ -27,21 +27,22 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop zammad
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
msg_info "Updating Zammad"
|
||||
$STD apt update
|
||||
$STD apt-mark hold zammad
|
||||
$STD apt -y upgrade
|
||||
$STD apt upgrade -y
|
||||
$STD apt-mark unhold zammad
|
||||
$STD apt -y upgrade
|
||||
msg_ok "Updated ${APP}"
|
||||
$STD apt upgrade -y
|
||||
msg_ok "Updated Zammad"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start zammad
|
||||
msg_ok "Updated ${APP} LXC"
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
@ -33,10 +33,10 @@ function update_script() {
|
||||
systemctl stop zerotier-one
|
||||
msg_ok "Stopping Service"
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
msg_info "Updating Zerotier-One"
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
msg_ok "Updated ${APP}"
|
||||
$STD apt upgrade -y
|
||||
msg_ok "Updated Zerotier-One"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start zerotier-one
|
||||
|
||||
@ -43,7 +43,7 @@ function update_script() {
|
||||
|
||||
fetch_and_deploy_gh_release "Zigbee2MQTT" "Koenkk/zigbee2mqtt" "tarball" "latest" "/opt/zigbee2mqtt"
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
msg_info "Updating Zigbee2MQTT"
|
||||
rm -rf /opt/zigbee2mqtt/data
|
||||
mv /opt/z2m_backup/data /opt/zigbee2mqtt
|
||||
cd /opt/zigbee2mqtt
|
||||
|
||||
164
docs/misc/build.func/BUILD_FUNC_ADVANCED_SETTINGS.md
Normal file
164
docs/misc/build.func/BUILD_FUNC_ADVANCED_SETTINGS.md
Normal file
@ -0,0 +1,164 @@
|
||||
# Advanced Settings Wizard Reference
|
||||
|
||||
## Overview
|
||||
|
||||
The Advanced Settings wizard provides a 28-step interactive configuration for LXC container creation. It allows users to customize every aspect of the container while inheriting sensible defaults from the CT script.
|
||||
|
||||
## Key Features
|
||||
|
||||
- **Inherit App Defaults**: All `var_*` values from CT scripts pre-populate wizard fields
|
||||
- **Back Navigation**: Press Cancel/Back to return to previous step
|
||||
- **App Default Hints**: Each dialog shows `(App default: X)` to indicate script defaults
|
||||
- **Full Customization**: Every configurable option is accessible
|
||||
|
||||
## Wizard Steps
|
||||
|
||||
| Step | Title | Variable(s) | Description |
|
||||
| ---- | ------------------------ | --------------------------------- | ----------------------------------------------------- |
|
||||
| 1 | Container Type | `var_unprivileged` | Privileged (0) or Unprivileged (1) container |
|
||||
| 2 | Root Password | `var_pw` | Set password or use automatic login |
|
||||
| 3 | Container ID | `var_ctid` | Unique container ID (auto-suggested) |
|
||||
| 4 | Hostname | `var_hostname` | Container hostname |
|
||||
| 5 | Disk Size | `var_disk` | Disk size in GB |
|
||||
| 6 | CPU Cores | `var_cpu` | Number of CPU cores |
|
||||
| 7 | RAM Size | `var_ram` | RAM size in MiB |
|
||||
| 8 | Network Bridge | `var_brg` | Network bridge (vmbr0, etc.) |
|
||||
| 9 | IPv4 Configuration | `var_net`, `var_gateway` | DHCP or static IP with gateway |
|
||||
| 10 | IPv6 Configuration | `var_ipv6_method` | Auto, DHCP, Static, or None |
|
||||
| 11 | MTU Size | `var_mtu` | Network MTU (default: 1500) |
|
||||
| 12 | DNS Search Domain | `var_searchdomain` | DNS search domain |
|
||||
| 13 | DNS Server | `var_ns` | Custom DNS server IP |
|
||||
| 14 | MAC Address | `var_mac` | Custom MAC address (auto-generated if empty) |
|
||||
| 15 | VLAN Tag | `var_vlan` | VLAN tag ID |
|
||||
| 16 | Tags | `var_tags` | Container tags (comma/semicolon separated) |
|
||||
| 17 | SSH Settings | `var_ssh` | SSH key selection and root access |
|
||||
| 18 | FUSE Support | `var_fuse` | Enable FUSE for rclone, mergerfs, AppImage |
|
||||
| 19 | TUN/TAP Support | `var_tun` | Enable for VPN apps (WireGuard, OpenVPN, Tailscale) |
|
||||
| 20 | Nesting Support | `var_nesting` | Enable for Docker, LXC in LXC, Podman |
|
||||
| 21 | GPU Passthrough | `var_gpu` | Auto-detect and pass through Intel/AMD/NVIDIA GPUs |
|
||||
| 22 | Keyctl Support | `var_keyctl` | Enable for Docker, systemd-networkd |
|
||||
| 23 | APT Cacher Proxy | `var_apt_cacher`, `var_apt_cacher_ip` | Use apt-cacher-ng for faster downloads |
|
||||
| 24 | Container Timezone | `var_timezone` | Set timezone (e.g., Europe/Berlin) |
|
||||
| 25 | Container Protection | `var_protection` | Prevent accidental deletion |
|
||||
| 26 | Device Node Creation | `var_mknod` | Allow mknod (experimental, kernel 5.3+) |
|
||||
| 27 | Mount Filesystems | `var_mount_fs` | Allow specific mounts: nfs, cifs, fuse, etc. |
|
||||
| 28 | Verbose Mode & Confirm | `var_verbose` | Enable verbose output + final confirmation |
|
||||
|
||||
## Default Value Inheritance
|
||||
|
||||
The wizard inherits defaults from multiple sources:
|
||||
|
||||
```text
|
||||
CT Script (var_*) → default.vars → app.vars → User Input
|
||||
```
|
||||
|
||||
### Example: VPN Container (alpine-wireguard.sh)
|
||||
|
||||
```bash
|
||||
# CT script sets:
|
||||
var_tun="${var_tun:-1}" # TUN enabled by default
|
||||
|
||||
# In Advanced Settings Step 19:
|
||||
# Dialog shows: "(App default: 1)" and pre-selects "Yes"
|
||||
```
|
||||
|
||||
### Example: Media Server (jellyfin.sh)
|
||||
|
||||
```bash
|
||||
# CT script sets:
|
||||
var_gpu="${var_gpu:-yes}" # GPU enabled by default
|
||||
|
||||
# In Advanced Settings Step 21:
|
||||
# Dialog shows: "(App default: yes)" and pre-selects "Yes"
|
||||
```
|
||||
|
||||
## Feature Matrix
|
||||
|
||||
| Feature | Variable | When to Enable |
|
||||
| ----------------- | ---------------- | --------------------------------------------------- |
|
||||
| FUSE | `var_fuse` | rclone, mergerfs, AppImage, SSHFS |
|
||||
| TUN/TAP | `var_tun` | WireGuard, OpenVPN, Tailscale, VPN containers |
|
||||
| Nesting | `var_nesting` | Docker, Podman, LXC-in-LXC, systemd-nspawn |
|
||||
| GPU Passthrough | `var_gpu` | Plex, Jellyfin, Emby, Frigate, Ollama, ComfyUI |
|
||||
| Keyctl | `var_keyctl` | Docker (unprivileged), systemd-networkd |
|
||||
| Protection | `var_protection` | Production containers, prevent accidental deletion |
|
||||
| Mknod | `var_mknod` | Device node creation (experimental) |
|
||||
| Mount FS | `var_mount_fs` | NFS mounts, CIFS shares, custom filesystems |
|
||||
| APT Cacher | `var_apt_cacher` | Speed up downloads with local apt-cacher-ng |
|
||||
|
||||
## Confirmation Summary
|
||||
|
||||
Step 28 displays a comprehensive summary before creation:
|
||||
|
||||
```text
|
||||
Container Type: Unprivileged
|
||||
Container ID: 100
|
||||
Hostname: jellyfin
|
||||
|
||||
Resources:
|
||||
Disk: 8 GB
|
||||
CPU: 2 cores
|
||||
RAM: 2048 MiB
|
||||
|
||||
Network:
|
||||
Bridge: vmbr0
|
||||
IPv4: dhcp
|
||||
IPv6: auto
|
||||
|
||||
Features:
|
||||
FUSE: no | TUN: no
|
||||
Nesting: Enabled | Keyctl: Disabled
|
||||
GPU: yes | Protection: No
|
||||
|
||||
Advanced:
|
||||
Timezone: Europe/Berlin
|
||||
APT Cacher: no
|
||||
Verbose: no
|
||||
```
|
||||
|
||||
## Usage Examples
|
||||
|
||||
### Skip to Advanced Settings
|
||||
|
||||
```bash
|
||||
# Run script, select "Advanced" from menu
|
||||
bash -c "$(curl -fsSL https://...jellyfin.sh)"
|
||||
# Then select option 3 "Advanced"
|
||||
```
|
||||
|
||||
### Pre-set Defaults via Environment
|
||||
|
||||
```bash
|
||||
# Set defaults before running
|
||||
export var_cpu=4
|
||||
export var_ram=4096
|
||||
export var_gpu=yes
|
||||
bash -c "$(curl -fsSL https://...jellyfin.sh)"
|
||||
# Advanced settings will inherit these values
|
||||
```
|
||||
|
||||
### Non-Interactive with All Options
|
||||
|
||||
```bash
|
||||
# Set all variables for fully automated deployment
|
||||
export var_unprivileged=1
|
||||
export var_cpu=2
|
||||
export var_ram=2048
|
||||
export var_disk=8
|
||||
export var_net=dhcp
|
||||
export var_fuse=no
|
||||
export var_tun=no
|
||||
export var_gpu=yes
|
||||
export var_nesting=1
|
||||
export var_protection=no
|
||||
export var_verbose=no
|
||||
bash -c "$(curl -fsSL https://...jellyfin.sh)"
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- **Cancel at Step 1**: Exits the script entirely
|
||||
- **Cancel at Steps 2-28**: Goes back to previous step
|
||||
- **Empty fields**: Use default value
|
||||
- **Keyctl**: Automatically enabled for unprivileged containers
|
||||
- **Nesting**: Enabled by default (required for many apps)
|
||||
@ -66,17 +66,36 @@ This document provides a comprehensive reference of all environment variables us
|
||||
|
||||
### Feature Flags
|
||||
|
||||
| Variable | Description | Default | Set In | Used In |
|
||||
| --------------------- | --------------------------- | ------- | --------------- | ------------------ |
|
||||
| `ENABLE_FUSE` | Enable FUSE support | "true" | base_settings() | Container features |
|
||||
| `ENABLE_TUN` | Enable TUN/TAP support | "true" | base_settings() | Container features |
|
||||
| `ENABLE_KEYCTL` | Enable keyctl support | "true" | base_settings() | Container features |
|
||||
| `ENABLE_MOUNT` | Enable mount support | "true" | base_settings() | Container features |
|
||||
| `ENABLE_NESTING` | Enable nesting support | "false" | base_settings() | Container features |
|
||||
| `ENABLE_PRIVILEGED` | Enable privileged mode | "false" | base_settings() | Container features |
|
||||
| `ENABLE_UNPRIVILEGED` | Enable unprivileged mode | "true" | base_settings() | Container features |
|
||||
| `VERBOSE` | Enable verbose output | "false" | Environment | Logging |
|
||||
| `SSH` | Enable SSH key provisioning | "true" | base_settings() | SSH setup |
|
||||
| Variable | Description | Default | Set In | Used In |
|
||||
| ---------------- | ------------------------------ | ------- | ------------------------------- | ------------------ |
|
||||
| `var_fuse` | Enable FUSE support | "no" | CT script / Advanced Settings | Container features |
|
||||
| `var_tun` | Enable TUN/TAP support | "no" | CT script / Advanced Settings | Container features |
|
||||
| `var_nesting` | Enable nesting support | "1" | CT script / Advanced Settings | Container features |
|
||||
| `var_keyctl` | Enable keyctl support | "0" | CT script / Advanced Settings | Container features |
|
||||
| `var_mknod` | Allow device node creation | "0" | CT script / Advanced Settings | Container features |
|
||||
| `var_mount_fs` | Allowed filesystem mounts | "" | CT script / Advanced Settings | Container features |
|
||||
| `var_protection` | Enable container protection | "no" | CT script / Advanced Settings | Container creation |
|
||||
| `var_timezone` | Container timezone | "" | CT script / Advanced Settings | Container creation |
|
||||
| `var_verbose` | Enable verbose output | "no" | Environment / Advanced Settings | Logging |
|
||||
| `var_ssh` | Enable SSH key provisioning | "no" | CT script / Advanced Settings | SSH setup |
|
||||
| `ENABLE_FUSE` | FUSE flag (internal) | "no" | Advanced Settings | Container creation |
|
||||
| `ENABLE_TUN` | TUN/TAP flag (internal) | "no" | Advanced Settings | Container creation |
|
||||
| `ENABLE_NESTING` | Nesting flag (internal) | "1" | Advanced Settings | Container creation |
|
||||
| `ENABLE_KEYCTL` | Keyctl flag (internal) | "0" | Advanced Settings | Container creation |
|
||||
| `ENABLE_MKNOD` | Mknod flag (internal) | "0" | Advanced Settings | Container creation |
|
||||
| `PROTECT_CT` | Protection flag (internal) | "no" | Advanced Settings | Container creation |
|
||||
| `CT_TIMEZONE` | Timezone setting (internal) | "" | Advanced Settings | Container creation |
|
||||
| `VERBOSE` | Verbose mode flag | "no" | Environment | Logging |
|
||||
| `SSH` | SSH access flag | "no" | Advanced Settings | SSH setup |
|
||||
|
||||
### APT Cacher Configuration
|
||||
|
||||
| Variable | Description | Default | Set In | Used In |
|
||||
| ------------------ | ------------------------ | ------- | ----------------------------- | ------------------- |
|
||||
| `var_apt_cacher` | Enable APT cacher proxy | "no" | CT script / Advanced Settings | Package management |
|
||||
| `var_apt_cacher_ip`| APT cacher server IP | "" | CT script / Advanced Settings | Package management |
|
||||
| `APT_CACHER` | APT cacher flag | "no" | Advanced Settings | Container creation |
|
||||
| `APT_CACHER_IP` | APT cacher IP (internal) | "" | Advanced Settings | Container creation |
|
||||
|
||||
### GPU Passthrough Variables
|
||||
|
||||
|
||||
@ -9,30 +9,35 @@ This document provides a comprehensive reference of all functions in `build.func
|
||||
### Initialization Functions
|
||||
|
||||
#### `start()`
|
||||
|
||||
**Purpose**: Main entry point when build.func is sourced or executed
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Detects execution context (Proxmox host vs container)
|
||||
- Captures hard environment variables
|
||||
- Sets CT_TYPE based on context
|
||||
- Routes to appropriate workflow (install_script or update_script)
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `CT_TYPE`, `APP`, `CTID`
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `CT_TYPE`, `APP`, `CTID`
|
||||
|
||||
#### `variables()`
|
||||
|
||||
**Purpose**: Load and resolve all configuration variables using precedence chain
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Loads app-specific .vars file
|
||||
- Loads global default.vars file
|
||||
- Applies variable precedence chain
|
||||
- Sets all configuration variables
|
||||
**Dependencies**: `base_settings()`
|
||||
**Environment Variables Used**: All configuration variables
|
||||
**Dependencies**: `base_settings()`
|
||||
**Environment Variables Used**: All configuration variables
|
||||
|
||||
#### `base_settings()`
|
||||
|
||||
**Purpose**: Set built-in default values for all configuration variables
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
@ -43,28 +48,33 @@ This document provides a comprehensive reference of all functions in `build.func
|
||||
### UI and Menu Functions
|
||||
|
||||
#### `install_script()`
|
||||
|
||||
**Purpose**: Main installation workflow coordinator
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Displays installation mode selection menu
|
||||
- Coordinates the entire installation process
|
||||
- Handles user interaction and validation
|
||||
**Dependencies**: `variables()`, `build_container()`, `default_var_settings()`
|
||||
**Environment Variables Used**: `APP`, `CTID`, `var_hostname`
|
||||
**Dependencies**: `variables()`, `build_container()`, `default_var_settings()`
|
||||
**Environment Variables Used**: `APP`, `CTID`, `var_hostname`
|
||||
|
||||
#### `advanced_settings()`
|
||||
|
||||
**Purpose**: Provide advanced configuration options via whiptail menus
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Displays whiptail menus for configuration
|
||||
- Updates configuration variables based on user input
|
||||
- Validates user selections
|
||||
**Dependencies**: `select_storage()`, `detect_gpu_devices()`
|
||||
**Environment Variables Used**: All configuration variables
|
||||
**Dependencies**: `select_storage()`, `detect_gpu_devices()`
|
||||
**Environment Variables Used**: All configuration variables
|
||||
|
||||
#### `settings_menu()`
|
||||
|
||||
**Purpose**: Display and handle settings configuration menu
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
@ -75,58 +85,68 @@ This document provides a comprehensive reference of all functions in `build.func
|
||||
### Storage Functions
|
||||
|
||||
#### `select_storage()`
|
||||
|
||||
**Purpose**: Handle storage selection for templates and containers
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Resolves storage preselection
|
||||
- Prompts user for storage selection if needed
|
||||
- Validates storage availability
|
||||
- Sets var_template_storage and var_container_storage
|
||||
**Dependencies**: `resolve_storage_preselect()`, `choose_and_set_storage_for_file()`
|
||||
**Environment Variables Used**: `var_template_storage`, `var_container_storage`, `TEMPLATE_STORAGE`, `CONTAINER_STORAGE`
|
||||
**Dependencies**: `resolve_storage_preselect()`, `choose_and_set_storage_for_file()`
|
||||
**Environment Variables Used**: `var_template_storage`, `var_container_storage`, `TEMPLATE_STORAGE`, `CONTAINER_STORAGE`
|
||||
|
||||
#### `resolve_storage_preselect()`
|
||||
|
||||
**Purpose**: Resolve preselected storage options
|
||||
**Parameters**:
|
||||
|
||||
- `storage_type`: Type of storage (template or container)
|
||||
**Returns**: Storage name if valid, empty if invalid
|
||||
**Side Effects**: Validates storage availability
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `var_template_storage`, `var_container_storage`
|
||||
**Returns**: Storage name if valid, empty if invalid
|
||||
**Side Effects**: Validates storage availability
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `var_template_storage`, `var_container_storage`
|
||||
|
||||
#### `choose_and_set_storage_for_file()`
|
||||
|
||||
**Purpose**: Interactive storage selection via whiptail
|
||||
**Parameters**:
|
||||
|
||||
- `storage_type`: Type of storage (template or container)
|
||||
- `content_type`: Content type (vztmpl or rootdir)
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
- Displays whiptail menu
|
||||
- Updates storage variables
|
||||
- Validates selection
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `var_template_storage`, `var_container_storage`
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `var_template_storage`, `var_container_storage`
|
||||
|
||||
### Container Creation Functions
|
||||
|
||||
#### `build_container()`
|
||||
|
||||
**Purpose**: Validate settings and prepare container creation
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Validates all configuration
|
||||
- Checks for conflicts
|
||||
- Prepares container configuration
|
||||
- Calls create_lxc_container()
|
||||
**Dependencies**: `create_lxc_container()`
|
||||
**Environment Variables Used**: All configuration variables
|
||||
**Dependencies**: `create_lxc_container()`
|
||||
**Environment Variables Used**: All configuration variables
|
||||
|
||||
#### `create_lxc_container()`
|
||||
|
||||
**Purpose**: Create the actual LXC container
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Creates LXC container with basic configuration
|
||||
- Configures network settings
|
||||
- Sets up storage and mount points
|
||||
@ -134,108 +154,176 @@ This document provides a comprehensive reference of all functions in `build.func
|
||||
- Sets resource limits
|
||||
- Configures startup options
|
||||
- Starts container
|
||||
**Dependencies**: `configure_gpu_passthrough()`, `fix_gpu_gids()`
|
||||
**Environment Variables Used**: All configuration variables
|
||||
**Dependencies**: `configure_gpu_passthrough()`, `fix_gpu_gids()`
|
||||
**Environment Variables Used**: All configuration variables
|
||||
|
||||
### GPU and Hardware Functions
|
||||
|
||||
#### `detect_gpu_devices()`
|
||||
|
||||
**Purpose**: Detect available GPU hardware on the system
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Scans for Intel, AMD, and NVIDIA GPUs
|
||||
- Updates var_gpu_type and var_gpu_devices
|
||||
- Determines GPU capabilities
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `var_gpu_type`, `var_gpu_devices`, `GPU_APPS`
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `var_gpu_type`, `var_gpu_devices`, `GPU_APPS`
|
||||
|
||||
#### `configure_gpu_passthrough()`
|
||||
|
||||
**Purpose**: Configure GPU passthrough for the container
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Adds GPU device entries to container config
|
||||
- Configures proper device permissions
|
||||
- Sets up device mapping
|
||||
- Updates /etc/pve/lxc/<ctid>.conf
|
||||
**Dependencies**: `detect_gpu_devices()`
|
||||
**Environment Variables Used**: `var_gpu`, `var_gpu_type`, `var_gpu_devices`, `CTID`
|
||||
**Dependencies**: `detect_gpu_devices()`
|
||||
**Environment Variables Used**: `var_gpu`, `var_gpu_type`, `var_gpu_devices`, `CTID`
|
||||
|
||||
#### `fix_gpu_gids()`
|
||||
|
||||
**Purpose**: Fix GPU group IDs after container creation
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Updates GPU group IDs in container
|
||||
- Ensures proper GPU access permissions
|
||||
- Configures video and render groups
|
||||
**Dependencies**: `configure_gpu_passthrough()`
|
||||
**Environment Variables Used**: `CTID`, `var_gpu_type`
|
||||
**Dependencies**: `configure_gpu_passthrough()`
|
||||
**Environment Variables Used**: `CTID`, `var_gpu_type`
|
||||
|
||||
### SSH Configuration Functions
|
||||
|
||||
#### `configure_ssh_settings()`
|
||||
|
||||
**Purpose**: Interactive SSH key and access configuration wizard
|
||||
**Parameters**:
|
||||
|
||||
- `step_info` (optional): Step indicator string (e.g., "Step 17/19") for consistent dialog headers
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
- Creates temporary file for SSH keys
|
||||
- Discovers and presents available SSH keys from host
|
||||
- Allows manual key entry or folder/glob scanning
|
||||
- Sets `SSH` variable to "yes" or "no" based on user selection
|
||||
- Sets `SSH_AUTHORIZED_KEY` if manual key provided
|
||||
- Populates `SSH_KEYS_FILE` with selected keys
|
||||
**Dependencies**: `ssh_discover_default_files()`, `ssh_build_choices_from_files()`
|
||||
**Environment Variables Used**: `SSH`, `SSH_AUTHORIZED_KEY`, `SSH_KEYS_FILE`
|
||||
|
||||
**SSH Key Source Options**:
|
||||
|
||||
1. `found` - Select from auto-detected host keys
|
||||
2. `manual` - Paste a single public key
|
||||
3. `folder` - Scan custom folder or glob pattern
|
||||
4. `none` - No SSH keys
|
||||
|
||||
**Note**: The "Enable root SSH access?" dialog is always shown, regardless of whether SSH keys or password are configured. This ensures users can always enable SSH access even with automatic login.
|
||||
|
||||
#### `ssh_discover_default_files()`
|
||||
|
||||
**Purpose**: Discover SSH public key files on the host system
|
||||
**Parameters**: None
|
||||
**Returns**: Array of discovered key file paths
|
||||
**Side Effects**: Scans common SSH key locations
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `var_ssh_import_glob`
|
||||
|
||||
#### `ssh_build_choices_from_files()`
|
||||
|
||||
**Purpose**: Build whiptail checklist choices from SSH key files
|
||||
**Parameters**:
|
||||
|
||||
- Array of file paths to process
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
- Sets `CHOICES` array for whiptail checklist
|
||||
- Sets `COUNT` variable with number of keys found
|
||||
- Creates `MAPFILE` for key tag to content mapping
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `CHOICES`, `COUNT`, `MAPFILE`
|
||||
|
||||
### Settings Persistence Functions
|
||||
|
||||
#### `default_var_settings()`
|
||||
|
||||
**Purpose**: Offer to save current settings as defaults
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Prompts user to save settings
|
||||
- Saves to default.vars file
|
||||
- Saves to app-specific .vars file
|
||||
**Dependencies**: `maybe_offer_save_app_defaults()`
|
||||
**Environment Variables Used**: All configuration variables
|
||||
**Dependencies**: `maybe_offer_save_app_defaults()`
|
||||
**Environment Variables Used**: All configuration variables
|
||||
|
||||
#### `maybe_offer_save_app_defaults()`
|
||||
|
||||
**Purpose**: Offer to save app-specific defaults
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Prompts user to save app-specific settings
|
||||
- Saves to app.vars file
|
||||
- Updates app-specific configuration
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `APP`, `SAVE_APP_DEFAULTS`
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `APP`, `SAVE_APP_DEFAULTS`
|
||||
|
||||
### Utility Functions
|
||||
|
||||
#### `validate_settings()`
|
||||
|
||||
**Purpose**: Validate all configuration settings
|
||||
**Parameters**: None
|
||||
**Returns**: 0 if valid, 1 if invalid
|
||||
**Side Effects**:
|
||||
|
||||
- Checks for configuration conflicts
|
||||
- Validates resource limits
|
||||
- Validates network configuration
|
||||
- Validates storage configuration
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: All configuration variables
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: All configuration variables
|
||||
|
||||
#### `check_conflicts()`
|
||||
|
||||
**Purpose**: Check for configuration conflicts
|
||||
**Parameters**: None
|
||||
**Returns**: 0 if no conflicts, 1 if conflicts found
|
||||
**Side Effects**:
|
||||
|
||||
- Checks for conflicting settings
|
||||
- Validates resource allocation
|
||||
- Checks network configuration
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: All configuration variables
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: All configuration variables
|
||||
|
||||
#### `cleanup_on_error()`
|
||||
|
||||
**Purpose**: Clean up resources on error
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Removes partially created containers
|
||||
- Cleans up temporary files
|
||||
- Resets configuration
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `CTID`
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `CTID`
|
||||
|
||||
## Function Call Flow
|
||||
|
||||
### Main Installation Flow
|
||||
|
||||
```
|
||||
start()
|
||||
├── variables()
|
||||
@ -259,6 +347,7 @@ start()
|
||||
```
|
||||
|
||||
### Error Handling Flow
|
||||
|
||||
```
|
||||
Error Detection
|
||||
├── validate_settings()
|
||||
@ -271,24 +360,29 @@ Error Detection
|
||||
## Function Dependencies
|
||||
|
||||
### Core Dependencies
|
||||
|
||||
- `start()` → `install_script()` → `build_container()` → `create_lxc_container()`
|
||||
- `variables()` → `base_settings()`
|
||||
- `advanced_settings()` → `select_storage()` → `detect_gpu_devices()`
|
||||
|
||||
### Storage Dependencies
|
||||
|
||||
- `select_storage()` → `resolve_storage_preselect()`
|
||||
- `select_storage()` → `choose_and_set_storage_for_file()`
|
||||
|
||||
### GPU Dependencies
|
||||
|
||||
- `configure_gpu_passthrough()` → `detect_gpu_devices()`
|
||||
- `fix_gpu_gids()` → `configure_gpu_passthrough()`
|
||||
|
||||
### Settings Dependencies
|
||||
|
||||
- `default_var_settings()` → `maybe_offer_save_app_defaults()`
|
||||
|
||||
## Function Usage Examples
|
||||
|
||||
### Basic Container Creation
|
||||
|
||||
```bash
|
||||
# Set required variables
|
||||
export APP="plex"
|
||||
@ -304,6 +398,7 @@ start() # Entry point
|
||||
```
|
||||
|
||||
### Advanced Configuration
|
||||
|
||||
```bash
|
||||
# Set advanced variables
|
||||
export var_os="debian"
|
||||
@ -319,6 +414,7 @@ advanced_settings() # Interactive configuration
|
||||
```
|
||||
|
||||
### GPU Passthrough
|
||||
|
||||
```bash
|
||||
# Enable GPU passthrough
|
||||
export GPU_APPS="plex"
|
||||
@ -331,6 +427,7 @@ fix_gpu_gids() # Fix permissions
|
||||
```
|
||||
|
||||
### Settings Persistence
|
||||
|
||||
```bash
|
||||
# Save settings as defaults
|
||||
export SAVE_DEFAULTS="true"
|
||||
@ -344,15 +441,18 @@ maybe_offer_save_app_defaults() # Save app defaults
|
||||
## Function Error Handling
|
||||
|
||||
### Validation Functions
|
||||
|
||||
- `validate_settings()`: Returns 0 for valid, 1 for invalid
|
||||
- `check_conflicts()`: Returns 0 for no conflicts, 1 for conflicts
|
||||
|
||||
### Error Recovery
|
||||
|
||||
- `cleanup_on_error()`: Cleans up on any error
|
||||
- Error codes are propagated up the call stack
|
||||
- Critical errors cause script termination
|
||||
|
||||
### Error Types
|
||||
|
||||
1. **Configuration Errors**: Invalid settings or conflicts
|
||||
2. **Resource Errors**: Insufficient resources or conflicts
|
||||
3. **Network Errors**: Invalid network configuration
|
||||
|
||||
@ -6,6 +6,16 @@ This directory contains comprehensive documentation for the `build.func` script,
|
||||
|
||||
## Documentation Files
|
||||
|
||||
### 🎛️ [BUILD_FUNC_ADVANCED_SETTINGS.md](./BUILD_FUNC_ADVANCED_SETTINGS.md)
|
||||
Complete reference for the 28-step Advanced Settings wizard, including all configurable options and their inheritance behavior.
|
||||
|
||||
**Contents:**
|
||||
- All 28 wizard steps explained
|
||||
- Default value inheritance
|
||||
- Feature matrix (when to enable each feature)
|
||||
- Confirmation summary format
|
||||
- Usage examples
|
||||
|
||||
### 📊 [BUILD_FUNC_FLOWCHART.md](./BUILD_FUNC_FLOWCHART.md)
|
||||
Visual ASCII flowchart showing the main execution flow, decision trees, and key decision points in the build.func script.
|
||||
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
],
|
||||
"date_created": "2024-05-02",
|
||||
"type": "ct",
|
||||
"updateable": false,
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 6880,
|
||||
"documentation": "https://aria2.github.io/manual/en/html/index.html",
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
],
|
||||
"date_created": "2024-05-02",
|
||||
"type": "ct",
|
||||
"updateable": false,
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 80,
|
||||
"documentation": "https://wiki.casaos.io/en/home",
|
||||
|
||||
52
frontend/public/json/coolify.json
Normal file
52
frontend/public/json/coolify.json
Normal file
@ -0,0 +1,52 @@
|
||||
{
|
||||
"name": "Coolify",
|
||||
"slug": "coolify",
|
||||
"categories": [
|
||||
6
|
||||
],
|
||||
"date_created": "2025-12-09",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8000,
|
||||
"documentation": "https://coolify.io/docs",
|
||||
"config_path": "/data/coolify",
|
||||
"website": "https://coolify.io/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/coolify.webp",
|
||||
"description": "Coolify is an open-source & self-hostable alternative to Heroku, Netlify, and Vercel. It helps you manage your servers, applications, and databases on your own hardware with Docker. Deploy any application from Git repositories, Docker images, or use pre-built templates.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/coolify.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 4096,
|
||||
"hdd": 30,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Initial setup will be done via the web interface on first access.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Coolify has built-in auto-updates. You can configure update frequency in Settings.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Coolify requires SSH access to manage deployments. SSH is enabled automatically.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "This container uses Docker-in-Docker (nesting) for application deployments.",
|
||||
"type": "warning"
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
],
|
||||
"date_created": "2024-05-02",
|
||||
"type": "ct",
|
||||
"updateable": false,
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8084,
|
||||
"documentation": null,
|
||||
|
||||
48
frontend/public/json/dokploy.json
Normal file
48
frontend/public/json/dokploy.json
Normal file
@ -0,0 +1,48 @@
|
||||
{
|
||||
"name": "Dokploy",
|
||||
"slug": "dokploy",
|
||||
"categories": [
|
||||
6
|
||||
],
|
||||
"date_created": "2025-12-09",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 3000,
|
||||
"documentation": "https://docs.dokploy.com/",
|
||||
"config_path": "/etc/dokploy",
|
||||
"website": "https://dokploy.com/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/dokploy.png",
|
||||
"description": "Dokploy is a free, self-hostable Platform as a Service (PaaS) that simplifies the deployment and management of applications and databases. Built with Docker and Traefik, it offers features like automatic SSL, Docker Compose support, database backups, and a real-time monitoring dashboard.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/dokploy.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 10,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Initial setup will be done via the web interface on first access.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Dokploy has built-in auto-updates via the web interface.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "This container uses Docker-in-Docker (nesting) for application deployments.",
|
||||
"type": "warning"
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
],
|
||||
"date_created": "2024-05-02",
|
||||
"type": "ct",
|
||||
"updateable": false,
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8081,
|
||||
"documentation": "https://www.iobroker.net/#en/documentation",
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
],
|
||||
"date_created": "2025-11-14",
|
||||
"type": "ct",
|
||||
"updateable": false,
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 80,
|
||||
"documentation": "https://docs.librenms.org/",
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
],
|
||||
"date_created": "2024-05-02",
|
||||
"type": "ct",
|
||||
"updateable": false,
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 80,
|
||||
"documentation": "https://ylianst.github.io/MeshCentral/",
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
],
|
||||
"date_created": "2024-05-02",
|
||||
"type": "ct",
|
||||
"updateable": false,
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 4443,
|
||||
"documentation": "https://docs.nextcloudpi.com/",
|
||||
|
||||
@ -9,6 +9,7 @@
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 3000,
|
||||
"disable": true,
|
||||
"documentation": "https://palmr.kyantech.com.br/docs/3.1-beta",
|
||||
"config_path": "/opt/palmr/apps/server/.env, /opt/palmr/apps/web/.env",
|
||||
"website": "https://palmr.kyantech.com.br/",
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
],
|
||||
"date_created": "2024-05-02",
|
||||
"type": "ct",
|
||||
"updateable": false,
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": null,
|
||||
"documentation": "https://podman.io/docs",
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
],
|
||||
"date_created": "2024-05-02",
|
||||
"type": "ct",
|
||||
"updateable": false,
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 9999,
|
||||
"documentation": null,
|
||||
|
||||
@ -1,8 +1,253 @@
|
||||
[
|
||||
{
|
||||
"name": "pelican-dev/panel",
|
||||
"version": "v1.0.0-beta29",
|
||||
"date": "2025-12-09T23:07:15Z"
|
||||
},
|
||||
{
|
||||
"name": "pelican-dev/wings",
|
||||
"version": "v1.0.0-beta20",
|
||||
"date": "2025-12-09T22:59:09Z"
|
||||
},
|
||||
{
|
||||
"name": "BookStackApp/BookStack",
|
||||
"version": "v25.11.6",
|
||||
"date": "2025-12-09T21:08:17Z"
|
||||
},
|
||||
{
|
||||
"name": "fccview/jotty",
|
||||
"version": "1.12.2",
|
||||
"date": "2025-12-09T20:39:50Z"
|
||||
},
|
||||
{
|
||||
"name": "mayanayza/netvisor",
|
||||
"version": "v0.11.4",
|
||||
"date": "2025-12-09T20:10:45Z"
|
||||
},
|
||||
{
|
||||
"name": "metabase/metabase",
|
||||
"version": "v0.56.x",
|
||||
"date": "2025-12-09T18:34:00Z"
|
||||
},
|
||||
{
|
||||
"name": "valkey-io/valkey",
|
||||
"version": "9.0.1",
|
||||
"date": "2025-12-09T18:13:25Z"
|
||||
},
|
||||
{
|
||||
"name": "esphome/esphome",
|
||||
"version": "2025.11.5",
|
||||
"date": "2025-12-09T17:54:33Z"
|
||||
},
|
||||
{
|
||||
"name": "MediaBrowser/Emby.Releases",
|
||||
"version": "4.9.1.90",
|
||||
"date": "2025-11-11T01:00:32Z"
|
||||
},
|
||||
{
|
||||
"name": "Infisical/infisical",
|
||||
"version": "v0.154.6",
|
||||
"date": "2025-12-09T16:36:25Z"
|
||||
},
|
||||
{
|
||||
"name": "netbox-community/netbox",
|
||||
"version": "v4.4.8",
|
||||
"date": "2025-12-09T16:29:50Z"
|
||||
},
|
||||
{
|
||||
"name": "element-hq/synapse",
|
||||
"version": "v1.144.0",
|
||||
"date": "2025-12-09T16:29:00Z"
|
||||
},
|
||||
{
|
||||
"name": "readeck/readeck",
|
||||
"version": "0.21.4",
|
||||
"date": "2025-12-09T15:25:28Z"
|
||||
},
|
||||
{
|
||||
"name": "nzbgetcom/nzbget",
|
||||
"version": "v25.4",
|
||||
"date": "2025-10-09T10:27:01Z"
|
||||
},
|
||||
{
|
||||
"name": "gelbphoenix/autocaliweb",
|
||||
"version": "v0.11.3",
|
||||
"date": "2025-12-09T14:41:10Z"
|
||||
},
|
||||
{
|
||||
"name": "release-argus/Argus",
|
||||
"version": "0.27.0",
|
||||
"date": "2025-12-09T14:33:38Z"
|
||||
},
|
||||
{
|
||||
"name": "wizarrrr/wizarr",
|
||||
"version": "v2025.12.0",
|
||||
"date": "2025-12-09T14:30:23Z"
|
||||
},
|
||||
{
|
||||
"name": "zabbix/zabbix",
|
||||
"version": "7.0.22rc1",
|
||||
"date": "2025-12-09T14:23:34Z"
|
||||
},
|
||||
{
|
||||
"name": "home-assistant/operating-system",
|
||||
"version": "16.3",
|
||||
"date": "2025-11-04T12:28:47Z"
|
||||
},
|
||||
{
|
||||
"name": "LimeSurvey/LimeSurvey",
|
||||
"version": "6.16.1+251125",
|
||||
"date": "2025-12-09T12:27:31Z"
|
||||
},
|
||||
{
|
||||
"name": "joaovitoriasilva/endurain",
|
||||
"version": "v0.16.0",
|
||||
"date": "2025-12-09T12:26:46Z"
|
||||
},
|
||||
{
|
||||
"name": "Paymenter/Paymenter",
|
||||
"version": "v1.4.7",
|
||||
"date": "2025-12-09T11:44:49Z"
|
||||
},
|
||||
{
|
||||
"name": "fuma-nama/fumadocs",
|
||||
"version": "fumadocs-typescript@4.0.14",
|
||||
"date": "2025-12-09T11:11:49Z"
|
||||
},
|
||||
{
|
||||
"name": "documenso/documenso",
|
||||
"version": "v2.2.6",
|
||||
"date": "2025-12-09T10:11:01Z"
|
||||
},
|
||||
{
|
||||
"name": "morpheus65535/bazarr",
|
||||
"version": "v1.5.3",
|
||||
"date": "2025-09-20T12:12:33Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.24.425",
|
||||
"date": "2025-12-09T05:59:35Z"
|
||||
},
|
||||
{
|
||||
"name": "mongodb/mongo",
|
||||
"version": "r7.0.27-rc0",
|
||||
"date": "2025-12-09T04:34:48Z"
|
||||
},
|
||||
{
|
||||
"name": "ollama/ollama",
|
||||
"version": "v0.13.2",
|
||||
"date": "2025-12-08T05:49:52Z"
|
||||
},
|
||||
{
|
||||
"name": "BerriAI/litellm",
|
||||
"version": "v1.80.9.dev1",
|
||||
"date": "2025-12-09T01:38:18Z"
|
||||
},
|
||||
{
|
||||
"name": "jeedom/core",
|
||||
"version": "4.5",
|
||||
"date": "2025-12-09T00:27:10Z"
|
||||
},
|
||||
{
|
||||
"name": "steveiliop56/tinyauth",
|
||||
"version": "v4.1.0",
|
||||
"date": "2025-11-23T12:13:34Z"
|
||||
},
|
||||
{
|
||||
"name": "alexta69/metube",
|
||||
"version": "2025.12.09",
|
||||
"date": "2025-12-09T00:16:11Z"
|
||||
},
|
||||
{
|
||||
"name": "Dispatcharr/Dispatcharr",
|
||||
"version": "v0.14.0",
|
||||
"date": "2025-12-09T00:04:09Z"
|
||||
},
|
||||
{
|
||||
"name": "seerr-team/seerr",
|
||||
"version": "preview-test-fix-subscriptions",
|
||||
"date": "2025-12-08T23:15:30Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.4.7",
|
||||
"date": "2025-12-01T08:14:11Z"
|
||||
},
|
||||
{
|
||||
"name": "sabnzbd/sabnzbd",
|
||||
"version": "4.5.5",
|
||||
"date": "2025-10-24T11:12:22Z"
|
||||
},
|
||||
{
|
||||
"name": "home-assistant/core",
|
||||
"version": "2025.12.2",
|
||||
"date": "2025-12-08T21:36:42Z"
|
||||
},
|
||||
{
|
||||
"name": "fosrl/pangolin",
|
||||
"version": "1.13.0-rc.0",
|
||||
"date": "2025-12-08T21:17:44Z"
|
||||
},
|
||||
{
|
||||
"name": "Dokploy/dokploy",
|
||||
"version": "v0.26.0",
|
||||
"date": "2025-12-08T20:44:09Z"
|
||||
},
|
||||
{
|
||||
"name": "hansmi/prometheus-paperless-exporter",
|
||||
"version": "v0.0.9",
|
||||
"date": "2025-12-08T20:37:45Z"
|
||||
},
|
||||
{
|
||||
"name": "influxdata/telegraf",
|
||||
"version": "v1.37.0",
|
||||
"date": "2025-12-08T20:36:16Z"
|
||||
},
|
||||
{
|
||||
"name": "pommee/goaway",
|
||||
"version": "v0.62.23",
|
||||
"date": "2025-12-08T20:30:54Z"
|
||||
},
|
||||
{
|
||||
"name": "TuroYT/snowshare",
|
||||
"version": "v1.1.2",
|
||||
"date": "2025-12-08T20:29:51Z"
|
||||
},
|
||||
{
|
||||
"name": "coollabsio/coolify",
|
||||
"version": "v4.0.0-beta.453",
|
||||
"date": "2025-12-08T20:23:48Z"
|
||||
},
|
||||
{
|
||||
"name": "n8n-io/n8n",
|
||||
"version": "n8n@1.123.4",
|
||||
"date": "2025-12-08T13:30:40Z"
|
||||
},
|
||||
{
|
||||
"name": "homarr-labs/homarr",
|
||||
"version": "v1.45.3",
|
||||
"date": "2025-12-08T16:11:16Z"
|
||||
},
|
||||
{
|
||||
"name": "AdguardTeam/AdGuardHome",
|
||||
"version": "v0.107.71",
|
||||
"date": "2025-12-08T14:34:55Z"
|
||||
},
|
||||
{
|
||||
"name": "chrisbenincasa/tunarr",
|
||||
"version": "v0.22.18",
|
||||
"date": "2025-12-08T14:26:24Z"
|
||||
},
|
||||
{
|
||||
"name": "openobserve/openobserve",
|
||||
"version": "v0.30.0-rc1",
|
||||
"date": "2025-12-08T11:46:24Z"
|
||||
"date": "2025-12-08T13:29:14Z"
|
||||
},
|
||||
{
|
||||
"name": "wavelog/wavelog",
|
||||
"version": "2.2.1",
|
||||
"date": "2025-12-08T12:01:34Z"
|
||||
},
|
||||
{
|
||||
"name": "ventoy/Ventoy",
|
||||
@ -29,51 +274,21 @@
|
||||
"version": "v10.11.8",
|
||||
"date": "2025-11-21T17:06:07Z"
|
||||
},
|
||||
{
|
||||
"name": "nzbgetcom/nzbget",
|
||||
"version": "v25.4",
|
||||
"date": "2025-10-09T10:27:01Z"
|
||||
},
|
||||
{
|
||||
"name": "morpheus65535/bazarr",
|
||||
"version": "v1.5.3",
|
||||
"date": "2025-09-20T12:12:33Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.24.420",
|
||||
"date": "2025-12-08T05:55:34Z"
|
||||
},
|
||||
{
|
||||
"name": "firefly-iii/firefly-iii",
|
||||
"version": "v6.4.9",
|
||||
"date": "2025-11-28T20:36:20Z"
|
||||
},
|
||||
{
|
||||
"name": "documenso/documenso",
|
||||
"version": "v2.2.0",
|
||||
"date": "2025-12-08T03:33:34Z"
|
||||
},
|
||||
{
|
||||
"name": "chrisbenincasa/tunarr",
|
||||
"version": "v0.23.0-alpha.31",
|
||||
"date": "2025-12-08T02:39:59Z"
|
||||
},
|
||||
{
|
||||
"name": "jeedom/core",
|
||||
"version": "4.5",
|
||||
"date": "2025-12-08T00:27:05Z"
|
||||
},
|
||||
{
|
||||
"name": "steveiliop56/tinyauth",
|
||||
"version": "v4.1.0",
|
||||
"date": "2025-11-23T12:13:34Z"
|
||||
},
|
||||
{
|
||||
"name": "maxdorninger/MediaManager",
|
||||
"version": "v1.10.0",
|
||||
"date": "2025-12-07T23:41:51Z"
|
||||
},
|
||||
{
|
||||
"name": "nickheyer/discopanel",
|
||||
"version": "v1.0.12-dev",
|
||||
"date": "2025-12-07T22:56:11Z"
|
||||
},
|
||||
{
|
||||
"name": "Part-DB/Part-DB-server",
|
||||
"version": "v2.3.0",
|
||||
@ -84,25 +299,20 @@
|
||||
"version": "v6.11.1",
|
||||
"date": "2025-12-07T19:19:08Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.4.7",
|
||||
"date": "2025-12-01T08:14:11Z"
|
||||
},
|
||||
{
|
||||
"name": "seerr-team/seerr",
|
||||
"version": "preview-test-fix-subscriptions",
|
||||
"date": "2025-12-07T14:31:55Z"
|
||||
},
|
||||
{
|
||||
"name": "bluenviron/mediamtx",
|
||||
"version": "v1.15.5",
|
||||
"date": "2025-12-07T12:24:21Z"
|
||||
},
|
||||
{
|
||||
"name": "BerriAI/litellm",
|
||||
"version": "v1.80.8.rc.1",
|
||||
"date": "2025-12-07T01:36:40Z"
|
||||
"name": "livebook-dev/livebook",
|
||||
"version": "v0.18.1",
|
||||
"date": "2025-12-07T11:35:51Z"
|
||||
},
|
||||
{
|
||||
"name": "ghostfolio/ghostfolio",
|
||||
"version": "2.222.0",
|
||||
"date": "2025-12-07T09:09:47Z"
|
||||
},
|
||||
{
|
||||
"name": "umami-software/umami",
|
||||
@ -140,9 +350,9 @@
|
||||
"date": "2025-12-06T14:31:36Z"
|
||||
},
|
||||
{
|
||||
"name": "fuma-nama/fumadocs",
|
||||
"version": "fumadocs-openapi@10.1.1",
|
||||
"date": "2025-12-06T11:27:58Z"
|
||||
"name": "prometheus/blackbox_exporter",
|
||||
"version": "v0.28.0",
|
||||
"date": "2025-12-06T13:32:18Z"
|
||||
},
|
||||
{
|
||||
"name": "YunoHost/yunohost",
|
||||
@ -174,30 +384,15 @@
|
||||
"version": "v13.1.3",
|
||||
"date": "2025-12-06T04:40:09Z"
|
||||
},
|
||||
{
|
||||
"name": "ollama/ollama",
|
||||
"version": "v0.13.2-rc1",
|
||||
"date": "2025-12-04T23:19:06Z"
|
||||
},
|
||||
{
|
||||
"name": "Stirling-Tools/Stirling-PDF",
|
||||
"version": "v2.1.1",
|
||||
"date": "2025-12-05T23:48:08Z"
|
||||
},
|
||||
{
|
||||
"name": "home-assistant/core",
|
||||
"version": "2025.12.1",
|
||||
"date": "2025-12-05T21:10:31Z"
|
||||
},
|
||||
{
|
||||
"name": "n8n-io/n8n",
|
||||
"version": "n8n@1.122.5",
|
||||
"date": "2025-12-04T14:09:39Z"
|
||||
},
|
||||
{
|
||||
"name": "homarr-labs/homarr",
|
||||
"version": "v1.45.2",
|
||||
"date": "2025-12-05T19:17:09Z"
|
||||
"name": "HydroshieldMKII/Guardian",
|
||||
"version": "v1.3.1",
|
||||
"date": "2025-12-05T19:12:48Z"
|
||||
},
|
||||
{
|
||||
"name": "booklore-app/booklore",
|
||||
@ -209,6 +404,11 @@
|
||||
"version": "v1.92.1",
|
||||
"date": "2025-12-05T15:53:22Z"
|
||||
},
|
||||
{
|
||||
"name": "community-scripts/ProxmoxVE-Local",
|
||||
"version": "v0.5.2",
|
||||
"date": "2025-12-05T15:13:46Z"
|
||||
},
|
||||
{
|
||||
"name": "FlowiseAI/Flowise",
|
||||
"version": "flowise@3.0.12",
|
||||
@ -235,14 +435,9 @@
|
||||
"date": "2025-12-05T09:58:17Z"
|
||||
},
|
||||
{
|
||||
"name": "alexta69/metube",
|
||||
"version": "2025.12.05",
|
||||
"date": "2025-12-05T09:45:02Z"
|
||||
},
|
||||
{
|
||||
"name": "esphome/esphome",
|
||||
"version": "2025.11.4",
|
||||
"date": "2025-12-05T03:54:58Z"
|
||||
"name": "alam00000/bentopdf",
|
||||
"version": "v1.10.5",
|
||||
"date": "2025-12-05T09:28:50Z"
|
||||
},
|
||||
{
|
||||
"name": "transmission/transmission",
|
||||
@ -264,11 +459,6 @@
|
||||
"version": "v1.30.20",
|
||||
"date": "2025-12-04T18:17:47Z"
|
||||
},
|
||||
{
|
||||
"name": "AdguardTeam/AdGuardHome",
|
||||
"version": "v0.107.70",
|
||||
"date": "2025-12-03T16:12:15Z"
|
||||
},
|
||||
{
|
||||
"name": "wazuh/wazuh",
|
||||
"version": "coverity-w49-4.14.2",
|
||||
@ -284,6 +474,11 @@
|
||||
"version": "v0.34.2",
|
||||
"date": "2025-12-04T13:08:18Z"
|
||||
},
|
||||
{
|
||||
"name": "qdrant/qdrant",
|
||||
"version": "v1.16.2",
|
||||
"date": "2025-12-04T11:03:49Z"
|
||||
},
|
||||
{
|
||||
"name": "glpi-project/glpi",
|
||||
"version": "11.0.4",
|
||||
@ -319,11 +514,6 @@
|
||||
"version": "v5.5",
|
||||
"date": "2025-12-03T21:20:30Z"
|
||||
},
|
||||
{
|
||||
"name": "gelbphoenix/autocaliweb",
|
||||
"version": "v0.11.1",
|
||||
"date": "2025-12-03T18:24:51Z"
|
||||
},
|
||||
{
|
||||
"name": "actualbudget/actual",
|
||||
"version": "v25.12.0",
|
||||
@ -334,11 +524,6 @@
|
||||
"version": "v0.29.1",
|
||||
"date": "2025-12-03T16:56:18Z"
|
||||
},
|
||||
{
|
||||
"name": "BookStackApp/BookStack",
|
||||
"version": "v25.11.5",
|
||||
"date": "2025-12-03T14:51:03Z"
|
||||
},
|
||||
{
|
||||
"name": "Graylog2/graylog2-server",
|
||||
"version": "6.2.10",
|
||||
@ -354,6 +539,11 @@
|
||||
"version": "v0.104.0",
|
||||
"date": "2025-12-03T06:48:38Z"
|
||||
},
|
||||
{
|
||||
"name": "comfyanonymous/ComfyUI",
|
||||
"version": "v0.3.77",
|
||||
"date": "2025-12-03T05:02:09Z"
|
||||
},
|
||||
{
|
||||
"name": "hyperion-project/hyperion.ng",
|
||||
"version": "2.1.1",
|
||||
@ -367,7 +557,7 @@
|
||||
{
|
||||
"name": "mealie-recipes/mealie",
|
||||
"version": "v3.6.1",
|
||||
"date": "2025-12-02T22:54:10Z"
|
||||
"date": "2025-12-02T23:08:41Z"
|
||||
},
|
||||
{
|
||||
"name": "apache/tomcat",
|
||||
@ -379,11 +569,6 @@
|
||||
"version": "v0.6.41",
|
||||
"date": "2025-12-02T22:28:58Z"
|
||||
},
|
||||
{
|
||||
"name": "element-hq/synapse",
|
||||
"version": "v1.143.0",
|
||||
"date": "2025-11-25T16:49:54Z"
|
||||
},
|
||||
{
|
||||
"name": "9001/copyparty",
|
||||
"version": "v1.19.21",
|
||||
@ -459,6 +644,11 @@
|
||||
"version": "v0.16.0",
|
||||
"date": "2025-12-01T21:35:19Z"
|
||||
},
|
||||
{
|
||||
"name": "martabal/qbittorrent-exporter",
|
||||
"version": "v1.13.0",
|
||||
"date": "2025-12-01T21:06:38Z"
|
||||
},
|
||||
{
|
||||
"name": "slskd/slskd",
|
||||
"version": "0.24.1",
|
||||
@ -484,6 +674,11 @@
|
||||
"version": "0.211.0",
|
||||
"date": "2025-12-01T11:22:11Z"
|
||||
},
|
||||
{
|
||||
"name": "opencloud-eu/opencloud",
|
||||
"version": "v4.0.0",
|
||||
"date": "2025-12-01T09:33:08Z"
|
||||
},
|
||||
{
|
||||
"name": "cockpit-project/cockpit",
|
||||
"version": "310.6",
|
||||
@ -539,16 +734,6 @@
|
||||
"version": "v11.8.2",
|
||||
"date": "2025-11-30T08:39:28Z"
|
||||
},
|
||||
{
|
||||
"name": "pommee/goaway",
|
||||
"version": "v0.62.20",
|
||||
"date": "2025-11-30T06:51:31Z"
|
||||
},
|
||||
{
|
||||
"name": "MediaBrowser/Emby.Releases",
|
||||
"version": "4.9.1.90",
|
||||
"date": "2025-11-11T01:00:32Z"
|
||||
},
|
||||
{
|
||||
"name": "ErsatzTV/ErsatzTV",
|
||||
"version": "v25.9.0",
|
||||
@ -574,11 +759,6 @@
|
||||
"version": "v3.4.6",
|
||||
"date": "2025-11-29T02:43:00Z"
|
||||
},
|
||||
{
|
||||
"name": "Paymenter/Paymenter",
|
||||
"version": "v1.4.6",
|
||||
"date": "2025-11-28T15:12:24Z"
|
||||
},
|
||||
{
|
||||
"name": "dgtlmoon/changedetection.io",
|
||||
"version": "0.51.4",
|
||||
@ -624,11 +804,6 @@
|
||||
"version": "v4.7.0",
|
||||
"date": "2025-11-26T16:59:45Z"
|
||||
},
|
||||
{
|
||||
"name": "readeck/readeck",
|
||||
"version": "0.21.3",
|
||||
"date": "2025-11-26T16:08:17Z"
|
||||
},
|
||||
{
|
||||
"name": "duplicati/duplicati",
|
||||
"version": "v2.2.0.2-2.2.0.2_beta_2025-11-26",
|
||||
@ -644,16 +819,6 @@
|
||||
"version": "release-1.24.2",
|
||||
"date": "2025-11-26T11:22:30Z"
|
||||
},
|
||||
{
|
||||
"name": "wizarrrr/wizarr",
|
||||
"version": "v2025.11.3",
|
||||
"date": "2025-11-25T20:20:38Z"
|
||||
},
|
||||
{
|
||||
"name": "netbox-community/netbox",
|
||||
"version": "v4.4.7",
|
||||
"date": "2025-11-25T19:58:16Z"
|
||||
},
|
||||
{
|
||||
"name": "karlomikus/bar-assistant",
|
||||
"version": "v5.9.3",
|
||||
@ -699,16 +864,16 @@
|
||||
"version": "v1.18.0",
|
||||
"date": "2025-11-23T17:42:53Z"
|
||||
},
|
||||
{
|
||||
"name": "wavelog/wavelog",
|
||||
"version": "2.2",
|
||||
"date": "2025-11-23T17:32:38Z"
|
||||
},
|
||||
{
|
||||
"name": "crafty-controller/crafty-4",
|
||||
"version": "v4.6.1",
|
||||
"date": "2025-11-23T16:42:50Z"
|
||||
},
|
||||
{
|
||||
"name": "dedicatedcode/reitti",
|
||||
"version": "v2.5.0",
|
||||
"date": "2025-11-23T12:49:50Z"
|
||||
},
|
||||
{
|
||||
"name": "go-gitea/gitea",
|
||||
"version": "v1.25.2",
|
||||
@ -744,11 +909,6 @@
|
||||
"version": "5.2.4",
|
||||
"date": "2025-11-21T10:25:05Z"
|
||||
},
|
||||
{
|
||||
"name": "sabnzbd/sabnzbd",
|
||||
"version": "4.5.5",
|
||||
"date": "2025-10-24T11:12:22Z"
|
||||
},
|
||||
{
|
||||
"name": "MariaDB/server",
|
||||
"version": "mariadb-12.1.2",
|
||||
@ -819,6 +979,11 @@
|
||||
"version": "v7.5.0",
|
||||
"date": "2025-11-19T08:36:29Z"
|
||||
},
|
||||
{
|
||||
"name": "PatchMon/PatchMon",
|
||||
"version": "v1.3.6",
|
||||
"date": "2025-11-18T22:01:02Z"
|
||||
},
|
||||
{
|
||||
"name": "redis/redis",
|
||||
"version": "8.4.0",
|
||||
@ -829,6 +994,11 @@
|
||||
"version": "v2.13.5",
|
||||
"date": "2025-11-18T11:47:48Z"
|
||||
},
|
||||
{
|
||||
"name": "Hosteroid/domain-monitor",
|
||||
"version": "v1.1.1",
|
||||
"date": "2025-11-18T11:32:30Z"
|
||||
},
|
||||
{
|
||||
"name": "PCJones/UmlautAdaptarr",
|
||||
"version": "v0.7.5",
|
||||
@ -840,9 +1010,14 @@
|
||||
"date": "2025-11-18T05:51:46Z"
|
||||
},
|
||||
{
|
||||
"name": "influxdata/telegraf",
|
||||
"version": "v1.36.4",
|
||||
"date": "2025-11-17T17:15:29Z"
|
||||
"name": "passbolt/passbolt_api",
|
||||
"version": "v5.7.2",
|
||||
"date": "2025-11-17T15:17:55Z"
|
||||
},
|
||||
{
|
||||
"name": "librenms/librenms",
|
||||
"version": "25.11.0",
|
||||
"date": "2025-11-17T13:29:57Z"
|
||||
},
|
||||
{
|
||||
"name": "rabbitmq/rabbitmq-server",
|
||||
@ -889,6 +1064,11 @@
|
||||
"version": "4.10.1",
|
||||
"date": "2025-11-15T04:36:48Z"
|
||||
},
|
||||
{
|
||||
"name": "Lissy93/domain-locker",
|
||||
"version": "v0.1.2",
|
||||
"date": "2025-11-14T22:08:23Z"
|
||||
},
|
||||
{
|
||||
"name": "runtipi/runtipi",
|
||||
"version": "v4.6.5",
|
||||
@ -904,6 +1084,11 @@
|
||||
"version": "v1.0.25",
|
||||
"date": "2025-11-12T16:57:54Z"
|
||||
},
|
||||
{
|
||||
"name": "jason5ng32/MyIP",
|
||||
"version": "v5.1.0",
|
||||
"date": "2025-11-12T10:44:24Z"
|
||||
},
|
||||
{
|
||||
"name": "moghtech/komodo",
|
||||
"version": "v1.19.5",
|
||||
@ -924,16 +1109,6 @@
|
||||
"version": "REL_13_23",
|
||||
"date": "2025-11-10T21:59:18Z"
|
||||
},
|
||||
{
|
||||
"name": "pelican-dev/panel",
|
||||
"version": "v1.0.0-beta28",
|
||||
"date": "2025-11-09T17:36:07Z"
|
||||
},
|
||||
{
|
||||
"name": "pelican-dev/wings",
|
||||
"version": "v1.0.0-beta19",
|
||||
"date": "2025-11-09T17:26:30Z"
|
||||
},
|
||||
{
|
||||
"name": "apache/couchdb",
|
||||
"version": "3.5.1",
|
||||
@ -959,6 +1134,11 @@
|
||||
"version": "v4.52.0",
|
||||
"date": "2025-11-06T22:39:26Z"
|
||||
},
|
||||
{
|
||||
"name": "deuxfleurs-org/garage",
|
||||
"version": "v1.99.3-internal",
|
||||
"date": "2025-11-06T17:27:21Z"
|
||||
},
|
||||
{
|
||||
"name": "Notifiarr/notifiarr",
|
||||
"version": "v0.9.1",
|
||||
@ -984,6 +1164,11 @@
|
||||
"version": "1.5.0",
|
||||
"date": "2025-11-05T11:10:20Z"
|
||||
},
|
||||
{
|
||||
"name": "SonarSource/sonarqube",
|
||||
"version": "25.11.0.114957",
|
||||
"date": "2025-11-05T10:26:59Z"
|
||||
},
|
||||
{
|
||||
"name": "nicolargo/glances",
|
||||
"version": "v4.4.1",
|
||||
@ -1004,11 +1189,6 @@
|
||||
"version": "v6.13.6",
|
||||
"date": "2025-11-04T13:35:35Z"
|
||||
},
|
||||
{
|
||||
"name": "home-assistant/operating-system",
|
||||
"version": "16.3",
|
||||
"date": "2025-11-04T12:28:47Z"
|
||||
},
|
||||
{
|
||||
"name": "clusterzx/paperless-ai",
|
||||
"version": "v3.0.9",
|
||||
@ -1020,9 +1200,9 @@
|
||||
"date": "2020-06-07T07:27:04Z"
|
||||
},
|
||||
{
|
||||
"name": "zabbix/zabbix",
|
||||
"version": "7.4.5",
|
||||
"date": "2025-10-31T14:39:13Z"
|
||||
"name": "wanetty/upgopher",
|
||||
"version": "v1.12.0",
|
||||
"date": "2025-11-01T14:32:38Z"
|
||||
},
|
||||
{
|
||||
"name": "plankanban/planka",
|
||||
@ -1034,16 +1214,16 @@
|
||||
"version": "v1.10.1",
|
||||
"date": "2025-10-31T08:25:57Z"
|
||||
},
|
||||
{
|
||||
"name": "mongodb/mongo",
|
||||
"version": "r7.0.26",
|
||||
"date": "2025-10-30T18:44:14Z"
|
||||
},
|
||||
{
|
||||
"name": "sassanix/Warracker",
|
||||
"version": "1.0.2",
|
||||
"date": "2025-10-30T18:23:23Z"
|
||||
},
|
||||
{
|
||||
"name": "LogicLabs-OU/OpenArchiver",
|
||||
"version": "v0.4.0",
|
||||
"date": "2025-10-30T16:35:23Z"
|
||||
},
|
||||
{
|
||||
"name": "homebridge/homebridge",
|
||||
"version": "v1.11.1",
|
||||
@ -1064,6 +1244,11 @@
|
||||
"version": "v3.0.0-beta.2",
|
||||
"date": "2025-10-28T10:16:29Z"
|
||||
},
|
||||
{
|
||||
"name": "bakito/adguardhome-sync",
|
||||
"version": "v0.8.2",
|
||||
"date": "2025-10-24T17:13:47Z"
|
||||
},
|
||||
{
|
||||
"name": "drakkan/sftpgo",
|
||||
"version": "v2.7.0",
|
||||
@ -1074,6 +1259,11 @@
|
||||
"version": "v0.8.8.3",
|
||||
"date": "2025-10-23T12:31:49Z"
|
||||
},
|
||||
{
|
||||
"name": "miniflux/v2",
|
||||
"version": "2.2.14",
|
||||
"date": "2025-10-23T02:12:05Z"
|
||||
},
|
||||
{
|
||||
"name": "louislam/uptime-kuma",
|
||||
"version": "2.0.2",
|
||||
@ -1129,6 +1319,11 @@
|
||||
"version": "v1.5.9",
|
||||
"date": "2025-10-06T08:34:01Z"
|
||||
},
|
||||
{
|
||||
"name": "donetick/donetick",
|
||||
"version": "v0.1.64",
|
||||
"date": "2025-10-03T05:18:24Z"
|
||||
},
|
||||
{
|
||||
"name": "MagicMirrorOrg/MagicMirror",
|
||||
"version": "v2.33.0",
|
||||
@ -1174,6 +1369,11 @@
|
||||
"version": "v0.17.0",
|
||||
"date": "2025-09-19T22:23:28Z"
|
||||
},
|
||||
{
|
||||
"name": "Flomp/wanderer",
|
||||
"version": "v0.18.3",
|
||||
"date": "2025-09-19T16:16:11Z"
|
||||
},
|
||||
{
|
||||
"name": "docmost/docmost",
|
||||
"version": "v0.23.2",
|
||||
@ -1209,6 +1409,11 @@
|
||||
"version": "v0.8.1",
|
||||
"date": "2025-09-14T06:45:23Z"
|
||||
},
|
||||
{
|
||||
"name": "ThePhaseless/Byparr",
|
||||
"version": "v2.0.1",
|
||||
"date": "2025-09-11T20:29:38Z"
|
||||
},
|
||||
{
|
||||
"name": "zerotier/ZeroTierOne",
|
||||
"version": "1.16.0",
|
||||
@ -1309,6 +1514,11 @@
|
||||
"version": "1.34.3",
|
||||
"date": "2025-07-30T09:10:59Z"
|
||||
},
|
||||
{
|
||||
"name": "eko/pihole-exporter",
|
||||
"version": "v1.2.0",
|
||||
"date": "2025-07-29T19:15:37Z"
|
||||
},
|
||||
{
|
||||
"name": "caddyserver/xcaddy",
|
||||
"version": "v0.4.5",
|
||||
@ -1354,21 +1564,11 @@
|
||||
"version": "v0.8.4",
|
||||
"date": "2025-06-10T07:57:14Z"
|
||||
},
|
||||
{
|
||||
"name": "release-argus/Argus",
|
||||
"version": "0.26.3",
|
||||
"date": "2025-05-29T21:18:15Z"
|
||||
},
|
||||
{
|
||||
"name": "stonith404/pingvin-share",
|
||||
"version": "v1.13.0",
|
||||
"date": "2025-05-25T20:21:13Z"
|
||||
},
|
||||
{
|
||||
"name": "hansmi/prometheus-paperless-exporter",
|
||||
"version": "v0.0.8",
|
||||
"date": "2025-05-18T11:37:31Z"
|
||||
},
|
||||
{
|
||||
"name": "stackblitz-labs/bolt.diy",
|
||||
"version": "1.0.0",
|
||||
@ -1384,6 +1584,11 @@
|
||||
"version": "2025-05-07-r1",
|
||||
"date": "2025-05-07T12:18:42Z"
|
||||
},
|
||||
{
|
||||
"name": "CyferShepard/Jellystat",
|
||||
"version": "1.1.6",
|
||||
"date": "2025-05-01T17:11:00Z"
|
||||
},
|
||||
{
|
||||
"name": "dotnetfactory/fluid-calendar",
|
||||
"version": "v1.4.0",
|
||||
@ -1543,10 +1748,5 @@
|
||||
"name": "thelounge/thelounge-deb",
|
||||
"version": "v4.4.3",
|
||||
"date": "2024-04-06T12:24:35Z"
|
||||
},
|
||||
{
|
||||
"name": "deepch/RTSPtoWeb",
|
||||
"version": "v2.4.3",
|
||||
"date": "2023-03-29T12:05:02Z"
|
||||
}
|
||||
]
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
],
|
||||
"date_created": "2025-03-24",
|
||||
"type": "ct",
|
||||
"updateable": false,
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 443,
|
||||
"documentation": "https://documentation.wazuh.com/",
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
],
|
||||
"date_created": "2024-05-02",
|
||||
"type": "ct",
|
||||
"updateable": false,
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 6969,
|
||||
"documentation": "https://wiki.servarr.com/en/whisparr",
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 3000,
|
||||
"documentation": "https://docs.requarks.io/",
|
||||
"website": "https://js.wiki/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/wiki-js.webp",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/wiki-js.webp",
|
||||
"config_path": "/opt/wikijs/config.yml",
|
||||
"description": "Wiki.js is a free, open-source, and modern wiki application built using Node.js. It is designed to be fast, easy to use, and flexible, with a range of features for collaboration, knowledge management, and content creation. Wiki.js supports Markdown syntax for editing pages, and includes features such as version control, page history, and access control, making it easy to manage content and collaborate with others. The software is fully customizable, with a range of themes and extensions available, and can be deployed on a local server or in the cloud, making it an ideal choice for small teams and organizations looking to create and manage a wiki. Wiki.js provides a modern, user-friendly interface, and supports a range of data sources, including local file systems, databases, and cloud storage services.",
|
||||
"install_methods": [
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
"interface_port": 5690,
|
||||
"documentation": "https://docs.wizarr.dev/",
|
||||
"website": "https://docs.wizarr.dev/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/wizarr.webp",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/wizarr.webp",
|
||||
"config_path": "/opt/wizarr/.env",
|
||||
"description": "Wizarr is an automatic user invitation system for Plex, Jellyfin and Emby. Create a unique link and share it to a user and they will automatically be invited to your media Server",
|
||||
"install_methods": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 80,
|
||||
"documentation": "https://wordpress.org/documentation/",
|
||||
"website": "https://wordpress.org/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/wordpress.webp",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/wordpress.webp",
|
||||
"config_path": "/var/www/html/wordpress/wp-config.php",
|
||||
"description": "WordPress is the simplest, most popular way to create your own website or blog. In fact, WordPress powers over 43.6% of all the websites on the Internet. Yes – more than one in four websites that you visit are likely powered by WordPress.\n\nOn a slightly more technical level, WordPress is an open-source content management system licensed under GPLv2, which means that anyone can use or modify the WordPress software for free.",
|
||||
"install_methods": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": null,
|
||||
"documentation": "https://www.zabbix.com/documentation/current/en/manual",
|
||||
"website": "https://www.zabbix.com/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/zabbix.webp",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/zabbix.webp",
|
||||
"config_path": "/etc/zabbix/zabbix_server.conf",
|
||||
"description": "Zabbix is an all-in-one monitoring solution with a variety of enterprise-grade features available right out of the box.",
|
||||
"install_methods": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": null,
|
||||
"documentation": "https://docs.zammad.org/en/latest/",
|
||||
"website": "https://zammad.org/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/zammad.webp",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/zammad.webp",
|
||||
"config_path": "/etc/nginx/sites-available/zammad.conf",
|
||||
"description": "Zammad is a web based open source helpdesk/customer support system with many features to manage customer communication via several channels like telephone, facebook, twitter, chat and emails. It is distributed under version 3 of the GNU AFFERO General Public License (GNU AGPLv3).",
|
||||
"install_methods": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 3443,
|
||||
"documentation": "https://docs.zerotier.com/",
|
||||
"website": "https://www.zerotier.com/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/zerotier.webp",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/zerotier.webp",
|
||||
"config_path": "/opt/key-networks/ztncui/.env",
|
||||
"description": "ZeroTier is a secure network overlay that allows you to manage all of your network resources as if they were on the same LAN. The software-defined solution can be deployed in minutes from anywhere. No matter how many devices you need to connect, or where they are in the world, ZeroTier makes global networking simple.",
|
||||
"install_methods": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 9442,
|
||||
"documentation": "https://www.zigbee2mqtt.io/guide/getting-started/",
|
||||
"website": "https://www.zigbee2mqtt.io/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/zigbee2mqtt.webp",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/zigbee2mqtt.webp",
|
||||
"config_path": "debian: /opt/zigbee2mqtt/data/configuration.yaml | alpine: /var/lib/zigbee2mqtt/configuration.yaml",
|
||||
"description": "Zigbee2MQTT is an open-source software project that allows you to use Zigbee-based smart home devices (such as those sold under the Philips Hue and Ikea Tradfri brands) with MQTT-based home automation systems, like Home Assistant, Node-RED, and others. The software acts as a bridge between your Zigbee devices and MQTT, allowing you to control and monitor these devices from your home automation system.",
|
||||
"install_methods": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 3000,
|
||||
"documentation": "https://zipline.diced.sh/docs/get-started",
|
||||
"website": "https://zipline.diced.sh/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/zipline.webp",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/zipline.webp",
|
||||
"config_path": "/opt/zipline/.env",
|
||||
"description": "Zipline is a file-sharing and URL-shortening server designed for easy setup and extensive features. It allows users to upload files, organize them into folders, create shortened URLs, and manage uploads through a user-friendly dashboard. Additional features include image compression, video thumbnails, password protection, 2FA, OAuth2 registration, and API access for custom control. It supports integrations with platforms like Discord.",
|
||||
"install_methods": [
|
||||
|
||||
@ -34,7 +34,7 @@ export default function CodeCopyButton({
|
||||
localStorage.setItem("warning", "1");
|
||||
setTimeout(() => {
|
||||
toast.error(
|
||||
"Be careful when copying scripts from the internet. Always remember check the source!",
|
||||
"Be careful when copying scripts from the internet. Always remember to check the source!",
|
||||
{ duration: 8000 },
|
||||
);
|
||||
}, 500);
|
||||
|
||||
39
install/coolify-install.sh
Normal file
39
install/coolify-install.sh
Normal file
@ -0,0 +1,39 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://coolify.io/
|
||||
|
||||
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 \
|
||||
git \
|
||||
openssl
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_warn "WARNING: This script will run an external installer from a third-party source (https://coolify.io/)."
|
||||
msg_warn "The following code is NOT maintained or audited by our repository."
|
||||
msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:"
|
||||
msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→ https://cdn.coollabs.io/coolify/install.sh"
|
||||
echo
|
||||
read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM
|
||||
if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
|
||||
msg_error "Aborted by user. No changes have been made."
|
||||
exit 10
|
||||
fi
|
||||
|
||||
msg_info "Installing Coolify (Patience - this installs Docker and pulls containers)"
|
||||
$STD bash <(curl -fsSL https://cdn.coollabs.io/coolify/install.sh)
|
||||
msg_ok "Installed Coolify"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
39
install/dokploy-install.sh
Normal file
39
install/dokploy-install.sh
Normal file
@ -0,0 +1,39 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://dokploy.com/
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
git \
|
||||
openssl
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_warn "WARNING: This script will run an external installer from a third-party source (https://dokploy.com/)."
|
||||
msg_warn "The following code is NOT maintained or audited by our repository."
|
||||
msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:"
|
||||
msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→ https://dokploy.com/install.sh"
|
||||
echo
|
||||
read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM
|
||||
if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
|
||||
msg_error "Aborted by user. No changes have been made."
|
||||
exit 10
|
||||
fi
|
||||
|
||||
msg_info "Installing Dokploy (Patience - this installs Docker and pulls containers)"
|
||||
$STD bash <(curl -sSL https://dokploy.com/install.sh)
|
||||
msg_ok "Installed Dokploy"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@ -32,28 +32,10 @@ msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
|
||||
fetch_and_deploy_gh_release "tandoor" "TandoorRecipes/recipes" "tarball" "latest" "/opt/tandoor"
|
||||
PG_VERSION="17" PG_MODULES="contrib" setup_postgresql
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
|
||||
msg_info "Set up PostgreSQL Database"
|
||||
DB_NAME=db_recipes
|
||||
DB_USER=tandoor
|
||||
PG_DB_USER="tandoor" PG_DB_NAME="db_recipes" PG_DB_EXTENSIONS="unaccent,pg_trgm" setup_postgresql_db
|
||||
SECRET_KEY=$(openssl rand -base64 45 | sed 's/\//\\\//g')
|
||||
DB_PASS="$(openssl rand -base64 18 | 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 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'"
|
||||
$STD sudo -u postgres psql -d "$DB_NAME" -c "CREATE EXTENSION IF NOT EXISTS unaccent;"
|
||||
$STD sudo -u postgres psql -d "$DB_NAME" -c "CREATE EXTENSION IF NOT EXISTS pg_trgm;"
|
||||
{
|
||||
echo "Tandoor-Credentials"
|
||||
echo "Tandoor Database Name: $DB_NAME"
|
||||
echo "Tandoor Database User: $DB_USER"
|
||||
echo "Tandoor Database Password: $DB_PASS"
|
||||
} >>~/tandoor.creds
|
||||
msg_ok "Set up PostgreSQL Database"
|
||||
|
||||
msg_info "Setup Tandoor"
|
||||
mkdir -p /opt/tandoor/{config,api,mediafiles,staticfiles}
|
||||
@ -69,16 +51,16 @@ TZ=Europe/Berlin
|
||||
|
||||
DB_ENGINE=django.db.backends.postgresql
|
||||
POSTGRES_HOST=localhost
|
||||
POSTGRES_DB=$DB_NAME
|
||||
POSTGRES_DB=$PG_DB_NAME
|
||||
POSTGRES_PORT=5432
|
||||
POSTGRES_USER=$DB_USER
|
||||
POSTGRES_PASSWORD=$DB_PASS
|
||||
POSTGRES_USER=$PG_DB_USER
|
||||
POSTGRES_PASSWORD=$PG_DB_PASS
|
||||
|
||||
STATIC_URL=/staticfiles/
|
||||
MEDIA_URL=/media/
|
||||
EOF
|
||||
|
||||
TANDOOR_VERSION="$(curl -s https://api.github.com/repos/TandoorRecipes/recipes/releases/latest | jq -r .tag_name)"
|
||||
TANDOOR_VERSION=$(get_latest_github_release "TandoorRecipes/recipes")
|
||||
cat <<EOF >/opt/tandoor/cookbook/version_info.py
|
||||
TANDOOR_VERSION = "$TANDOOR_VERSION"
|
||||
TANDOOR_REF = "bare-metal"
|
||||
|
||||
@ -14,36 +14,18 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
git
|
||||
$STD apt install -y git
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="yarn,node-gyp" setup_nodejs
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="wiki" PG_DB_USER="wikijs_user" PG_DB_EXTENSIONS="pg_trgm" setup_postgresql_db
|
||||
fetch_and_deploy_gh_release "wikijs" "requarks/wiki" "prebuild" "latest" "/opt/wikijs" "wiki-js.tar.gz"
|
||||
|
||||
msg_info "Set up PostgreSQL"
|
||||
DB_NAME="wiki"
|
||||
DB_USER="wikijs_user"
|
||||
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 "CREATE EXTENSION IF NOT EXISTS pg_trgm;" $DB_NAME
|
||||
$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 "WikiJS-Credentials"
|
||||
echo "WikiJS Database User: $DB_USER"
|
||||
echo "WikiJS Database Password: $DB_PASS"
|
||||
echo "WikiJS Database Name: $DB_NAME"
|
||||
} >>~/wikijs.creds
|
||||
msg_ok "Set up PostgreSQL"
|
||||
|
||||
msg_info "Configuring Wiki.js"
|
||||
mv /opt/wikijs/config.sample.yml /opt/wikijs/config.yml
|
||||
sed -i -E 's|^( *user: ).*|\1'"$DB_USER"'|' /opt/wikijs/config.yml
|
||||
sed -i -E 's|^( *pass: ).*|\1'"$DB_PASS"'|' /opt/wikijs/config.yml
|
||||
sed -i -E 's|^( *user: ).*|\1'"$PG_DB_USER"'|' /opt/wikijs/config.yml
|
||||
sed -i -E 's|^( *pass: ).*|\1'"$PG_DB_PASS"'|' /opt/wikijs/config.yml
|
||||
msg_ok "Configured Wiki.js"
|
||||
|
||||
msg_info "Creating Service"
|
||||
|
||||
@ -19,25 +19,23 @@ msg_ok "Installed Dependencies"
|
||||
|
||||
setup_uv
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
fetch_and_deploy_gh_release "wizarr" "wizarrrr/wizarr"
|
||||
fetch_and_deploy_gh_release "wizarr" "wizarrrr/wizarr" "tarball"
|
||||
import_local_ip
|
||||
|
||||
msg_info "Configure Wizarr"
|
||||
cd /opt/wizarr || exit
|
||||
cd /opt/wizarr
|
||||
$STD /usr/local/bin/uv sync --frozen
|
||||
$STD /usr/local/bin/uv run --frozen pybabel compile -d app/translations
|
||||
$STD npm --prefix app/static install
|
||||
$STD npm --prefix app/static run build:css
|
||||
mkdir -p ./.cache
|
||||
|
||||
LOCAL_IP="$(hostname -I | awk '{print $1}')"
|
||||
VERSION="$(sed 's/^20/v&/' ~/.wizarr)"
|
||||
cat <<EOF >/opt/wizarr/.env
|
||||
FLASK_ENV=production
|
||||
GUNICORN_WORKERS=4
|
||||
APP_URL=http://${LOCAL_IP}
|
||||
DISABLE_BUILTIN_AUTH=false
|
||||
LOG_LEVEL=INFO
|
||||
APP_VERSION=${VERSION}
|
||||
APP_VERSION=v$(get_latest_github_release "wizarrrr/wizarr")
|
||||
EOF
|
||||
|
||||
cat <<EOF >/opt/wizarr/start.sh
|
||||
|
||||
@ -15,34 +15,20 @@ update_os
|
||||
|
||||
PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="common,snmp,imap,mysql" PHP_APACHE="YES" setup_php
|
||||
setup_mariadb
|
||||
|
||||
msg_info "Setting up Database"
|
||||
DB_NAME=wordpress_db
|
||||
DB_USER=wordpress
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
$STD mariadb -u root -e "CREATE DATABASE $DB_NAME;"
|
||||
$STD mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
|
||||
$STD mariadb -u root -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
||||
{
|
||||
echo "WordPress Credentials"
|
||||
echo "Database User: $DB_USER"
|
||||
echo "Database Password: $DB_PASS"
|
||||
echo "Database Name: $DB_NAME"
|
||||
} >>~/wordpress.creds
|
||||
msg_ok "Set up Database"
|
||||
MARIADB_DB_NAME="wordpress_db" MARIADB_DB_USER="wordpress" setup_mariadb_db
|
||||
|
||||
msg_info "Installing Wordpress (Patience)"
|
||||
cd /var/www/html || exit
|
||||
cd /var/www/html
|
||||
curl -fsSL "https://wordpress.org/latest.zip" -o "latest.zip"
|
||||
$STD unzip latest.zip
|
||||
chown -R www-data:www-data wordpress/
|
||||
cd /var/www/html/wordpress || exit
|
||||
cd /var/www/html/wordpress
|
||||
find . -type d -exec chmod 755 {} \;
|
||||
find . -type f -exec chmod 644 {} \;
|
||||
mv wp-config-sample.php wp-config.php
|
||||
sed -i -e "s|^define( 'DB_NAME', '.*' );|define( 'DB_NAME', '$DB_NAME' );|" \
|
||||
-e "s|^define( 'DB_USER', '.*' );|define( 'DB_USER', '$DB_USER' );|" \
|
||||
-e "s|^define( 'DB_PASSWORD', '.*' );|define( 'DB_PASSWORD', '$DB_PASS' );|" \
|
||||
sed -i -e "s|^define( 'DB_NAME', '.*' );|define( 'DB_NAME', '$MARIADB_DB_NAME' );|" \
|
||||
-e "s|^define( 'DB_USER', '.*' );|define( 'DB_USER', '$MARIADB_DB_USER' );|" \
|
||||
-e "s|^define( 'DB_PASSWORD', '.*' );|define( 'DB_PASSWORD', '$MARIADB_DB_PASS' );|" \
|
||||
/var/www/html/wordpress/wp-config.php
|
||||
rm -rf /var/www/html/latest.zip
|
||||
msg_ok "Installed Wordpress"
|
||||
|
||||
@ -14,6 +14,7 @@ network_check
|
||||
update_os
|
||||
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="zabbixdb" PG_DB_USER="zabbix" setup_postgresql_db
|
||||
|
||||
read -rp "Choose Zabbix version [1] 7.0 LTS [2] 7.4 (Latest Stable) [3] Latest available (default: 2): " ZABBIX_CHOICE
|
||||
ZABBIX_CHOICE=${ZABBIX_CHOICE:-2}
|
||||
@ -35,6 +36,10 @@ curl -fsSL "$ZABBIX_DEB_URL" -o /tmp/zabbix-release_latest+debian13_all.deb
|
||||
$STD dpkg -i /tmp/zabbix-release_latest+debian13_all.deb
|
||||
$STD apt update
|
||||
$STD apt install -y zabbix-server-pgsql zabbix-frontend-php php8.4-pgsql zabbix-apache-conf zabbix-sql-scripts
|
||||
zcat /usr/share/zabbix/sql-scripts/postgresql/server.sql.gz | sudo -u "$PG_DB_USER" psql "$PG_DB_NAME" &>/dev/null
|
||||
sed -i "s/^DBName=.*/DBName=$PG_DB_NAME/" /etc/zabbix/zabbix_server.conf
|
||||
sed -i "s/^DBUser=.*/DBUser=$PG_DB_USER/" /etc/zabbix/zabbix_server.conf
|
||||
sed -i "s/^# DBPassword=.*/DBPassword=$PG_DB_PASS/" /etc/zabbix/zabbix_server.conf
|
||||
msg_ok "Installed Zabbix $ZABBIX_VERSION"
|
||||
|
||||
while true; do
|
||||
@ -78,28 +83,6 @@ else
|
||||
$STD apt install -y zabbix-agent
|
||||
fi
|
||||
|
||||
msg_info "Setting up PostgreSQL"
|
||||
DB_NAME=zabbixdb
|
||||
DB_USER=zabbix
|
||||
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 "Zabbix-Credentials"
|
||||
echo "Zabbix Database User: $DB_USER"
|
||||
echo "Zabbix Database Password: $DB_PASS"
|
||||
echo "Zabbix Database Name: $DB_NAME"
|
||||
} >>~/zabbix.creds
|
||||
|
||||
zcat /usr/share/zabbix/sql-scripts/postgresql/server.sql.gz | sudo -u $DB_USER psql $DB_NAME &>/dev/null
|
||||
sed -i "s/^DBName=.*/DBName=$DB_NAME/" /etc/zabbix/zabbix_server.conf
|
||||
sed -i "s/^DBUser=.*/DBUser=$DB_USER/" /etc/zabbix/zabbix_server.conf
|
||||
sed -i "s/^# DBPassword=.*/DBPassword=$DB_PASS/" /etc/zabbix/zabbix_server.conf
|
||||
msg_ok "Set up PostgreSQL"
|
||||
|
||||
msg_info "Configuring Fping"
|
||||
if command -v fping >/dev/null 2>&1; then
|
||||
FPING_PATH=$(command -v fping)
|
||||
|
||||
@ -20,6 +20,8 @@ $STD apt install -y \
|
||||
apt-transport-https
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
import_local_ip
|
||||
|
||||
msg_info "Setting up Elasticsearch"
|
||||
setup_deb822_repo \
|
||||
"elasticsearch" \
|
||||
@ -27,7 +29,7 @@ setup_deb822_repo \
|
||||
"https://artifacts.elastic.co/packages/7.x/apt" \
|
||||
"stable" \
|
||||
"main"
|
||||
$STD apt -y install elasticsearch
|
||||
$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
|
||||
@ -42,15 +44,14 @@ setup_deb822_repo \
|
||||
"https://dl.packager.io/srv/deb/zammad/zammad/stable/debian" \
|
||||
"$(get_os_info version_id)" \
|
||||
"main"
|
||||
$STD apt -y install zammad
|
||||
$STD apt install -y zammad
|
||||
$STD zammad run rails r "Setting.set('es_url', 'http://localhost:9200')"
|
||||
$STD zammad run rake zammad:searchindex:rebuild
|
||||
msg_ok "Installed Zammad"
|
||||
|
||||
msg_info "Setup Services"
|
||||
cp /opt/zammad/contrib/nginx/zammad.conf /etc/nginx/sites-available/zammad.conf
|
||||
IPADDRESS=$(hostname -I | awk '{print $1}')
|
||||
sed -i "s/server_name localhost;/server_name $IPADDRESS;/g" /etc/nginx/sites-available/zammad.conf
|
||||
sed -i "s/server_name localhost;/server_name $LOCAL_IP;/g" /etc/nginx/sites-available/zammad.conf
|
||||
$STD systemctl reload nginx
|
||||
msg_ok "Created Service"
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: tremor021
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://www.zerotier.com/
|
||||
@ -13,6 +13,17 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_warn "WARNING: This script will run an external installer from a third-party source (https://install.zerotier.com)."
|
||||
msg_warn "The following code is NOT maintained or audited by our repository."
|
||||
msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:"
|
||||
msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→ https://install.zerotier.com"
|
||||
echo
|
||||
read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM
|
||||
if [[ ! $CONFIRM =~ ^([yY][eE][sS]|[yY])$ ]]; then
|
||||
msg_error "Aborted by user. No changes have been made."
|
||||
exit 10
|
||||
fi
|
||||
|
||||
msg_info "Setting up Zerotier-One"
|
||||
curl -fsSL https://raw.githubusercontent.com/zerotier/ZeroTierOne/main/doc/contact%40zerotier.com.gpg | gpg --import >/dev/null 2>&1
|
||||
curl -fsSL https://install.zerotier.com -o /tmp/zerotier-install.sh
|
||||
@ -33,7 +44,7 @@ echo NODE_ENV=production >>/opt/key-networks/ztncui/.env
|
||||
chmod 400 /opt/key-networks/ztncui/.env
|
||||
chown ztncui:ztncui /opt/key-networks/ztncui/.env
|
||||
systemctl restart ztncui
|
||||
msg_ok "Done setting up UI."
|
||||
msg_ok "Setup UI."
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
@ -16,31 +16,26 @@ update_os
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
git \
|
||||
make \
|
||||
g++ \
|
||||
gcc \
|
||||
ca-certificates \
|
||||
jq
|
||||
build-essential
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="24" NODE_MODULE="pnpm@$(curl -fsSL https://raw.githubusercontent.com/Koenkk/zigbee2mqtt/master/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs
|
||||
|
||||
fetch_and_deploy_gh_release "Zigbee2MQTT" "Koenkk/zigbee2mqtt" "tarball" "latest" "/opt/zigbee2mqtt"
|
||||
|
||||
msg_info "Setting up Zigbee2MQTT"
|
||||
cd /opt/zigbee2mqtt/data || exit
|
||||
mv configuration.example.yaml configuration.yaml
|
||||
cd /opt/zigbee2mqtt || exit
|
||||
mv /opt/zigbee2mqtt/data/configuration.example.yaml /opt/zigbee2mqtt/data/configuration.yaml
|
||||
cd /opt/zigbee2mqtt
|
||||
echo "packageImportMethod: hardlink" >>./pnpm-workspace.yaml
|
||||
$STD pnpm install --no-frozen-lockfile
|
||||
$STD pnpm build
|
||||
msg_ok "Installed Zigbee2MQTT"
|
||||
msg_ok "Setup Zigbee2MQTT"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/zigbee2mqtt.service
|
||||
[Unit]
|
||||
Description=zigbee2mqtt
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Environment=NODE_ENV=production
|
||||
ExecStart=/usr/bin/pnpm start
|
||||
@ -49,6 +44,7 @@ StandardOutput=inherit
|
||||
StandardError=inherit
|
||||
Restart=always
|
||||
User=root
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
@ -16,31 +16,15 @@ update_os
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="ziplinedb" PG_DB_USER="zipline" setup_postgresql_db
|
||||
fetch_and_deploy_gh_release "zipline" "diced/zipline" "tarball"
|
||||
|
||||
msg_info "Setting up PostgreSQL"
|
||||
DB_NAME=ziplinedb
|
||||
DB_USER=zipline
|
||||
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
|
||||
SECRET_KEY="$(openssl rand -base64 42 | tr -dc 'a-zA-Z0-9')"
|
||||
$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 "Zipline-Credentials"
|
||||
echo "Zipline Database User: $DB_USER"
|
||||
echo "Zipline Database Password: $DB_PASS"
|
||||
echo "Zipline Database Name: $DB_NAME"
|
||||
echo "Zipline Secret Key: $SECRET_KEY"
|
||||
} >>~/zipline.creds
|
||||
msg_ok "Set up PostgreSQL"
|
||||
echo "Zipline Secret Key: ${SECRET_KEY}" >>~/zipline.creds
|
||||
|
||||
msg_info "Installing Zipline (Patience)"
|
||||
cd /opt/zipline || exit
|
||||
cat <<EOF >/opt/zipline/.env
|
||||
DATABASE_URL=postgres://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME
|
||||
DATABASE_URL=postgres://$PG_DB_USER:$PG_DB_PASS@localhost:5432/$PG_DB_NAME
|
||||
CORE_SECRET=$SECRET_KEY
|
||||
CORE_HOSTNAME=0.0.0.0
|
||||
CORE_PORT=3000
|
||||
|
||||
388
misc/build.func
388
misc/build.func
@ -816,6 +816,7 @@ _build_current_app_vars_tmp() {
|
||||
_apt_cacher_ip="${APT_CACHER_IP:-}"
|
||||
_fuse="${ENABLE_FUSE:-no}"
|
||||
_tun="${ENABLE_TUN:-no}"
|
||||
_gpu="${ENABLE_GPU:-no}"
|
||||
_nesting="${ENABLE_NESTING:-1}"
|
||||
_keyctl="${ENABLE_KEYCTL:-0}"
|
||||
_mknod="${ENABLE_MKNOD:-0}"
|
||||
@ -865,6 +866,7 @@ _build_current_app_vars_tmp() {
|
||||
|
||||
[ -n "$_fuse" ] && echo "var_fuse=$(_sanitize_value "$_fuse")"
|
||||
[ -n "$_tun" ] && echo "var_tun=$(_sanitize_value "$_tun")"
|
||||
[ -n "$_gpu" ] && echo "var_gpu=$(_sanitize_value "$_gpu")"
|
||||
[ -n "$_nesting" ] && echo "var_nesting=$(_sanitize_value "$_nesting")"
|
||||
[ -n "$_keyctl" ] && echo "var_keyctl=$(_sanitize_value "$_keyctl")"
|
||||
[ -n "$_mknod" ] && echo "var_mknod=$(_sanitize_value "$_mknod")"
|
||||
@ -1011,38 +1013,49 @@ advanced_settings() {
|
||||
# Initialize defaults
|
||||
TAGS="community-script;${var_tags:-}"
|
||||
local STEP=1
|
||||
local MAX_STEP=20
|
||||
local MAX_STEP=28
|
||||
|
||||
# Store values for back navigation
|
||||
local _ct_type="${CT_TYPE:-1}"
|
||||
# Store values for back navigation - inherit from var_* app defaults
|
||||
local _ct_type="${var_unprivileged:-1}"
|
||||
local _pw=""
|
||||
local _pw_display="Automatic Login"
|
||||
local _ct_id="$NEXTID"
|
||||
local _hostname="$NSAPP"
|
||||
local _disk_size="$var_disk"
|
||||
local _core_count="$var_cpu"
|
||||
local _ram_size="$var_ram"
|
||||
local _bridge="vmbr0"
|
||||
local _net="dhcp"
|
||||
local _gate=""
|
||||
local _ipv6_method="auto"
|
||||
local _disk_size="${var_disk:-4}"
|
||||
local _core_count="${var_cpu:-1}"
|
||||
local _ram_size="${var_ram:-1024}"
|
||||
local _bridge="${var_brg:-vmbr0}"
|
||||
local _net="${var_net:-dhcp}"
|
||||
local _gate="${var_gateway:-}"
|
||||
local _ipv6_method="${var_ipv6_method:-auto}"
|
||||
local _ipv6_addr=""
|
||||
local _ipv6_gate=""
|
||||
local _apt_cacher_ip=""
|
||||
local _mtu=""
|
||||
local _sd=""
|
||||
local _ns=""
|
||||
local _mac=""
|
||||
local _vlan=""
|
||||
local _apt_cacher="${var_apt_cacher:-no}"
|
||||
local _apt_cacher_ip="${var_apt_cacher_ip:-}"
|
||||
local _mtu="${var_mtu:-}"
|
||||
local _sd="${var_searchdomain:-}"
|
||||
local _ns="${var_ns:-}"
|
||||
local _mac="${var_mac:-}"
|
||||
local _vlan="${var_vlan:-}"
|
||||
local _tags="$TAGS"
|
||||
local _enable_fuse="no"
|
||||
local _enable_fuse="${var_fuse:-no}"
|
||||
local _enable_tun="${var_tun:-no}"
|
||||
local _enable_gpu="${var_gpu:-no}"
|
||||
local _verbose="no"
|
||||
local _enable_keyctl="0"
|
||||
local _enable_mknod="0"
|
||||
local _mount_fs=""
|
||||
local _protect_ct="no"
|
||||
local _ct_timezone=""
|
||||
local _enable_nesting="${var_nesting:-1}"
|
||||
local _verbose="${var_verbose:-no}"
|
||||
local _enable_keyctl="${var_keyctl:-0}"
|
||||
local _enable_mknod="${var_mknod:-0}"
|
||||
local _mount_fs="${var_mount_fs:-}"
|
||||
local _protect_ct="${var_protection:-no}"
|
||||
|
||||
# Detect host timezone for default (if not set via var_timezone)
|
||||
local _host_timezone=""
|
||||
if command -v timedatectl >/dev/null 2>&1; then
|
||||
_host_timezone=$(timedatectl show --value --property=Timezone 2>/dev/null || echo "")
|
||||
elif [ -f /etc/timezone ]; then
|
||||
_host_timezone=$(cat /etc/timezone 2>/dev/null || echo "")
|
||||
fi
|
||||
local _ct_timezone="${var_timezone:-$_host_timezone}"
|
||||
|
||||
# Helper to show current progress
|
||||
show_progress() {
|
||||
@ -1492,20 +1505,23 @@ advanced_settings() {
|
||||
# STEP 17: SSH Settings
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
17)
|
||||
configure_ssh_settings
|
||||
configure_ssh_settings "Step $STEP/$MAX_STEP"
|
||||
# configure_ssh_settings handles its own flow, always advance
|
||||
((STEP++))
|
||||
;;
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# STEP 18: FUSE & Verbose Mode
|
||||
# STEP 18: FUSE Support
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
18)
|
||||
local fuse_default_flag="--defaultno"
|
||||
[[ "$_enable_fuse" == "yes" || "$_enable_fuse" == "1" ]] && fuse_default_flag=""
|
||||
|
||||
if whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \
|
||||
--title "FUSE SUPPORT" \
|
||||
--ok-button "Next" --cancel-button "Back" \
|
||||
--defaultno \
|
||||
--yesno "\nEnable FUSE support?\n\nRequired for: rclone, mergerfs, AppImage, etc." 12 58; then
|
||||
$fuse_default_flag \
|
||||
--yesno "\nEnable FUSE support?\n\nRequired for: rclone, mergerfs, AppImage, etc.\n\n(App default: ${var_fuse:-no})" 14 58; then
|
||||
_enable_fuse="yes"
|
||||
else
|
||||
if [ $? -eq 1 ]; then
|
||||
@ -1515,30 +1531,69 @@ advanced_settings() {
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
((STEP++))
|
||||
;;
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# STEP 19: TUN/TAP Support
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
19)
|
||||
local tun_default_flag="--defaultno"
|
||||
[[ "$_enable_tun" == "yes" || "$_enable_tun" == "1" ]] && tun_default_flag=""
|
||||
|
||||
if whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \
|
||||
--title "VERBOSE MODE" \
|
||||
--defaultno \
|
||||
--yesno "\nEnable Verbose Mode?\n\nShows detailed output during installation." 12 58; then
|
||||
_verbose="yes"
|
||||
--title "TUN/TAP SUPPORT" \
|
||||
--ok-button "Next" --cancel-button "Back" \
|
||||
$tun_default_flag \
|
||||
--yesno "\nEnable TUN/TAP device support?\n\nRequired for: VPN apps (WireGuard, OpenVPN, Tailscale),\nnetwork tunneling, and containerized networking.\n\n(App default: ${var_tun:-no})" 14 62; then
|
||||
_enable_tun="yes"
|
||||
else
|
||||
_verbose="no"
|
||||
if [ $? -eq 1 ]; then
|
||||
_enable_tun="no"
|
||||
else
|
||||
((STEP--))
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
((STEP++))
|
||||
;;
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# STEP 19: GPU Passthrough
|
||||
# STEP 20: Nesting Support
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
19)
|
||||
local gpu_default="OFF"
|
||||
[[ "$_enable_gpu" == "yes" ]] && gpu_default="ON"
|
||||
20)
|
||||
local nesting_default_flag=""
|
||||
[[ "$_enable_nesting" == "0" || "$_enable_nesting" == "no" ]] && nesting_default_flag="--defaultno"
|
||||
|
||||
if whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \
|
||||
--title "NESTING SUPPORT" \
|
||||
--ok-button "Next" --cancel-button "Back" \
|
||||
$nesting_default_flag \
|
||||
--yesno "\nEnable Nesting?\n\nRequired for: Docker, LXC inside LXC, Podman,\nand other containerization tools.\n\n(App default: ${var_nesting:-1})" 14 58; then
|
||||
_enable_nesting="1"
|
||||
else
|
||||
if [ $? -eq 1 ]; then
|
||||
_enable_nesting="0"
|
||||
else
|
||||
((STEP--))
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
((STEP++))
|
||||
;;
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# STEP 21: GPU Passthrough
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
21)
|
||||
local gpu_default_flag="--defaultno"
|
||||
[[ "$_enable_gpu" == "yes" ]] && gpu_default_flag=""
|
||||
|
||||
if whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \
|
||||
--title "GPU PASSTHROUGH" \
|
||||
--ok-button "Next" --cancel-button "Back" \
|
||||
--defaultno \
|
||||
--yesno "\nEnable GPU Passthrough?\n\nAutomatically detects and passes through available GPUs\n(Intel/AMD/NVIDIA) for hardware acceleration.\n\nRecommended for: Media servers, AI/ML, Transcoding" 14 62; then
|
||||
$gpu_default_flag \
|
||||
--yesno "\nEnable GPU Passthrough?\n\nAutomatically detects and passes through available GPUs\n(Intel/AMD/NVIDIA) for hardware acceleration.\n\nRecommended for: Media servers, AI/ML, Transcoding\n\n(App default: ${var_gpu:-no})" 16 62; then
|
||||
_enable_gpu="yes"
|
||||
else
|
||||
if [ $? -eq 1 ]; then
|
||||
@ -1552,13 +1607,179 @@ advanced_settings() {
|
||||
;;
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# STEP 20: Confirmation
|
||||
# STEP 22: Keyctl Support (Docker/systemd)
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
20)
|
||||
22)
|
||||
local keyctl_default_flag="--defaultno"
|
||||
[[ "$_enable_keyctl" == "1" ]] && keyctl_default_flag=""
|
||||
|
||||
if whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \
|
||||
--title "KEYCTL SUPPORT" \
|
||||
--ok-button "Next" --cancel-button "Back" \
|
||||
$keyctl_default_flag \
|
||||
--yesno "\nEnable Keyctl support?\n\nRequired for: Docker containers, systemd-networkd,\nand kernel keyring operations.\n\nNote: Automatically enabled for unprivileged containers.\n\n(App default: ${var_keyctl:-0})" 16 62; then
|
||||
_enable_keyctl="1"
|
||||
else
|
||||
if [ $? -eq 1 ]; then
|
||||
_enable_keyctl="0"
|
||||
else
|
||||
((STEP--))
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
((STEP++))
|
||||
;;
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# STEP 23: APT Cacher Proxy
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
23)
|
||||
local apt_cacher_default_flag="--defaultno"
|
||||
[[ "$_apt_cacher" == "yes" ]] && apt_cacher_default_flag=""
|
||||
|
||||
if whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \
|
||||
--title "APT CACHER PROXY" \
|
||||
--ok-button "Next" --cancel-button "Back" \
|
||||
$apt_cacher_default_flag \
|
||||
--yesno "\nUse APT Cacher-NG proxy?\n\nSpeeds up package downloads by caching them locally.\nRequires apt-cacher-ng running on your network.\n\n(App default: ${var_apt_cacher:-no})" 14 62; then
|
||||
_apt_cacher="yes"
|
||||
# Ask for IP if enabled
|
||||
if result=$(whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \
|
||||
--title "APT CACHER IP" \
|
||||
--inputbox "\nEnter APT Cacher-NG server IP address:" 10 58 "$_apt_cacher_ip" \
|
||||
3>&1 1>&2 2>&3); then
|
||||
_apt_cacher_ip="$result"
|
||||
fi
|
||||
else
|
||||
if [ $? -eq 1 ]; then
|
||||
_apt_cacher="no"
|
||||
_apt_cacher_ip=""
|
||||
else
|
||||
((STEP--))
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
((STEP++))
|
||||
;;
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# STEP 24: Container Timezone
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
24)
|
||||
local tz_hint="$_ct_timezone"
|
||||
[[ -z "$tz_hint" ]] && tz_hint="(empty - will use host timezone)"
|
||||
|
||||
if result=$(whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \
|
||||
--title "CONTAINER TIMEZONE" \
|
||||
--ok-button "Next" --cancel-button "Back" \
|
||||
--inputbox "\nSet container timezone.\n\nExamples: Europe/Berlin, America/New_York, Asia/Tokyo\n\nHost timezone: ${_host_timezone:-unknown}\n\nLeave empty to inherit from host." 16 62 "$_ct_timezone" \
|
||||
3>&1 1>&2 2>&3); then
|
||||
_ct_timezone="$result"
|
||||
((STEP++))
|
||||
else
|
||||
((STEP--))
|
||||
fi
|
||||
;;
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# STEP 25: Container Protection
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
25)
|
||||
local protect_default_flag="--defaultno"
|
||||
[[ "$_protect_ct" == "yes" || "$_protect_ct" == "1" ]] && protect_default_flag=""
|
||||
|
||||
if whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \
|
||||
--title "CONTAINER PROTECTION" \
|
||||
--ok-button "Next" --cancel-button "Back" \
|
||||
$protect_default_flag \
|
||||
--yesno "\nEnable Container Protection?\n\nPrevents accidental deletion of this container.\nYou must disable protection before removing.\n\n(App default: ${var_protection:-no})" 14 62; then
|
||||
_protect_ct="yes"
|
||||
else
|
||||
if [ $? -eq 1 ]; then
|
||||
_protect_ct="no"
|
||||
else
|
||||
((STEP--))
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
((STEP++))
|
||||
;;
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# STEP 26: Device Node Creation (mknod)
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
26)
|
||||
local mknod_default_flag="--defaultno"
|
||||
[[ "$_enable_mknod" == "1" ]] && mknod_default_flag=""
|
||||
|
||||
if whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \
|
||||
--title "DEVICE NODE CREATION" \
|
||||
--ok-button "Next" --cancel-button "Back" \
|
||||
$mknod_default_flag \
|
||||
--yesno "\nAllow device node creation (mknod)?\n\nRequired for: Creating device files inside container.\nExperimental feature (requires kernel 5.3+).\n\n(App default: ${var_mknod:-0})" 14 62; then
|
||||
_enable_mknod="1"
|
||||
else
|
||||
if [ $? -eq 1 ]; then
|
||||
_enable_mknod="0"
|
||||
else
|
||||
((STEP--))
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
((STEP++))
|
||||
;;
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# STEP 27: Mount Filesystems
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
27)
|
||||
local mount_hint=""
|
||||
[[ -n "$_mount_fs" ]] && mount_hint="$_mount_fs" || mount_hint="(none)"
|
||||
|
||||
if result=$(whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \
|
||||
--title "MOUNT FILESYSTEMS" \
|
||||
--ok-button "Next" --cancel-button "Back" \
|
||||
--inputbox "\nAllow specific filesystem mounts.\n\nComma-separated list: nfs, cifs, fuse, ext4, etc.\nLeave empty for defaults (none).\n\nCurrent: $mount_hint" 14 62 "$_mount_fs" \
|
||||
3>&1 1>&2 2>&3); then
|
||||
_mount_fs="$result"
|
||||
((STEP++))
|
||||
else
|
||||
((STEP--))
|
||||
fi
|
||||
;;
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# STEP 28: Verbose Mode & Confirmation
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
28)
|
||||
local verbose_default_flag="--defaultno"
|
||||
[[ "$_verbose" == "yes" ]] && verbose_default_flag=""
|
||||
|
||||
if whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \
|
||||
--title "VERBOSE MODE" \
|
||||
$verbose_default_flag \
|
||||
--yesno "\nEnable Verbose Mode?\n\nShows detailed output during installation." 12 58; then
|
||||
_verbose="yes"
|
||||
else
|
||||
_verbose="no"
|
||||
fi
|
||||
# Build summary
|
||||
local ct_type_desc="Unprivileged"
|
||||
[[ "$_ct_type" == "0" ]] && ct_type_desc="Privileged"
|
||||
|
||||
local nesting_desc="Disabled"
|
||||
[[ "$_enable_nesting" == "1" ]] && nesting_desc="Enabled"
|
||||
|
||||
local keyctl_desc="Disabled"
|
||||
[[ "$_enable_keyctl" == "1" ]] && keyctl_desc="Enabled"
|
||||
|
||||
local protect_desc="No"
|
||||
[[ "$_protect_ct" == "yes" || "$_protect_ct" == "1" ]] && protect_desc="Yes"
|
||||
|
||||
local tz_display="${_ct_timezone:-Host TZ}"
|
||||
local apt_display="${_apt_cacher:-no}"
|
||||
[[ "$_apt_cacher" == "yes" && -n "$_apt_cacher_ip" ]] && apt_display="$_apt_cacher_ip"
|
||||
|
||||
local summary="Container Type: $ct_type_desc
|
||||
Container ID: $_ct_id
|
||||
Hostname: $_hostname
|
||||
@ -1573,15 +1794,20 @@ Network:
|
||||
IPv4: $_net
|
||||
IPv6: $_ipv6_method
|
||||
|
||||
Options:
|
||||
FUSE: $_enable_fuse
|
||||
GPU Passthrough: $_enable_gpu
|
||||
Features:
|
||||
FUSE: $_enable_fuse | TUN: $_enable_tun
|
||||
Nesting: $nesting_desc | Keyctl: $keyctl_desc
|
||||
GPU: $_enable_gpu | Protection: $protect_desc
|
||||
|
||||
Advanced:
|
||||
Timezone: $tz_display
|
||||
APT Cacher: $apt_display
|
||||
Verbose: $_verbose"
|
||||
|
||||
if whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \
|
||||
--title "CONFIRM SETTINGS" \
|
||||
--ok-button "Create LXC" --cancel-button "Back" \
|
||||
--yesno "$summary\n\nCreate ${APP} LXC with these settings?" 28 58; then
|
||||
--yesno "$summary\n\nCreate ${APP} LXC with these settings?" 32 62; then
|
||||
((STEP++))
|
||||
else
|
||||
((STEP--))
|
||||
@ -1608,11 +1834,30 @@ Options:
|
||||
IPV6_GATE="$_ipv6_gate"
|
||||
TAGS="$_tags"
|
||||
ENABLE_FUSE="$_enable_fuse"
|
||||
ENABLE_TUN="$_enable_tun"
|
||||
ENABLE_GPU="$_enable_gpu"
|
||||
ENABLE_NESTING="$_enable_nesting"
|
||||
ENABLE_KEYCTL="$_enable_keyctl"
|
||||
ENABLE_MKNOD="$_enable_mknod"
|
||||
ALLOW_MOUNT_FS="$_mount_fs"
|
||||
PROTECT_CT="$_protect_ct"
|
||||
CT_TIMEZONE="$_ct_timezone"
|
||||
APT_CACHER="$_apt_cacher"
|
||||
APT_CACHER_IP="$_apt_cacher_ip"
|
||||
VERBOSE="$_verbose"
|
||||
|
||||
# Update var_gpu based on user choice (for is_gpu_app function)
|
||||
# Update var_* based on user choice (for functions that check these)
|
||||
var_gpu="$_enable_gpu"
|
||||
var_fuse="$_enable_fuse"
|
||||
var_tun="$_enable_tun"
|
||||
var_nesting="$_enable_nesting"
|
||||
var_keyctl="$_enable_keyctl"
|
||||
var_mknod="$_enable_mknod"
|
||||
var_mount_fs="$_mount_fs"
|
||||
var_protection="$_protect_ct"
|
||||
var_timezone="$_ct_timezone"
|
||||
var_apt_cacher="$_apt_cacher"
|
||||
var_apt_cacher_ip="$_apt_cacher_ip"
|
||||
|
||||
# Format optional values
|
||||
[[ -n "$_mtu" ]] && MTU=",mtu=$_mtu" || MTU=""
|
||||
@ -1648,7 +1893,13 @@ Options:
|
||||
echo -e "${NETWORK}${BOLD}${DGN}IPv4: ${BGN}$NET${CL}"
|
||||
echo -e "${NETWORK}${BOLD}${DGN}IPv6: ${BGN}$IPV6_METHOD${CL}"
|
||||
echo -e "${FUSE}${BOLD}${DGN}FUSE Support: ${BGN}$ENABLE_FUSE${CL}"
|
||||
[[ "$ENABLE_TUN" == "yes" ]] && echo -e "${NETWORK}${BOLD}${DGN}TUN/TAP Support: ${BGN}$ENABLE_TUN${CL}"
|
||||
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Nesting: ${BGN}$([ "$ENABLE_NESTING" == "1" ] && echo "Enabled" || echo "Disabled")${CL}"
|
||||
[[ "$ENABLE_KEYCTL" == "1" ]] && echo -e "${CONTAINERTYPE}${BOLD}${DGN}Keyctl: ${BGN}Enabled${CL}"
|
||||
echo -e "${GPU}${BOLD}${DGN}GPU Passthrough: ${BGN}$ENABLE_GPU${CL}"
|
||||
[[ "$PROTECT_CT" == "yes" || "$PROTECT_CT" == "1" ]] && echo -e "${CONTAINERTYPE}${BOLD}${DGN}Protection: ${BGN}Enabled${CL}"
|
||||
[[ -n "$CT_TIMEZONE" ]] && echo -e "${INFO}${BOLD}${DGN}Timezone: ${BGN}$CT_TIMEZONE${CL}"
|
||||
[[ "$APT_CACHER" == "yes" ]] && echo -e "${INFO}${BOLD}${DGN}APT Cacher: ${BGN}$APT_CACHER_IP${CL}"
|
||||
echo -e "${SEARCH}${BOLD}${DGN}Verbose Mode: ${BGN}$VERBOSE${CL}"
|
||||
echo -e "${CREATING}${BOLD}${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
|
||||
}
|
||||
@ -2114,6 +2365,10 @@ ssh_discover_default_files() {
|
||||
}
|
||||
|
||||
configure_ssh_settings() {
|
||||
local step_info="${1:-}"
|
||||
local backtitle="Proxmox VE Helper Scripts"
|
||||
[[ -n "$step_info" ]] && backtitle="Proxmox VE Helper Scripts [${step_info}]"
|
||||
|
||||
SSH_KEYS_FILE="$(mktemp)"
|
||||
: >"$SSH_KEYS_FILE"
|
||||
|
||||
@ -2123,14 +2378,14 @@ configure_ssh_settings() {
|
||||
|
||||
local ssh_key_mode
|
||||
if [[ "$default_key_count" -gt 0 ]]; then
|
||||
ssh_key_mode=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SSH KEY SOURCE" --menu \
|
||||
ssh_key_mode=$(whiptail --backtitle "$backtitle" --title "SSH KEY SOURCE" --menu \
|
||||
"Provision SSH keys for root:" 14 72 4 \
|
||||
"found" "Select from detected keys (${default_key_count})" \
|
||||
"manual" "Paste a single public key" \
|
||||
"folder" "Scan another folder (path or glob)" \
|
||||
"none" "No keys" 3>&1 1>&2 2>&3) || exit_script
|
||||
else
|
||||
ssh_key_mode=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SSH KEY SOURCE" --menu \
|
||||
ssh_key_mode=$(whiptail --backtitle "$backtitle" --title "SSH KEY SOURCE" --menu \
|
||||
"No host keys detected; choose manual/none:" 12 72 2 \
|
||||
"manual" "Paste a single public key" \
|
||||
"none" "No keys" 3>&1 1>&2 2>&3) || exit_script
|
||||
@ -2139,7 +2394,7 @@ configure_ssh_settings() {
|
||||
case "$ssh_key_mode" in
|
||||
found)
|
||||
local selection
|
||||
selection=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SELECT HOST KEYS" \
|
||||
selection=$(whiptail --backtitle "$backtitle" --title "SELECT HOST KEYS" \
|
||||
--checklist "Select one or more keys to import:" 20 140 10 "${CHOICES[@]}" 3>&1 1>&2 2>&3) || exit_script
|
||||
for tag in $selection; do
|
||||
tag="${tag%\"}"
|
||||
@ -2150,13 +2405,13 @@ configure_ssh_settings() {
|
||||
done
|
||||
;;
|
||||
manual)
|
||||
SSH_AUTHORIZED_KEY="$(whiptail --backtitle "Proxmox VE Helper Scripts" \
|
||||
SSH_AUTHORIZED_KEY="$(whiptail --backtitle "$backtitle" \
|
||||
--inputbox "Paste one SSH public key line (ssh-ed25519/ssh-rsa/...)" 10 72 --title "SSH Public Key" 3>&1 1>&2 2>&3)"
|
||||
[[ -n "$SSH_AUTHORIZED_KEY" ]] && printf '%s\n' "$SSH_AUTHORIZED_KEY" >>"$SSH_KEYS_FILE"
|
||||
;;
|
||||
folder)
|
||||
local glob_path
|
||||
glob_path=$(whiptail --backtitle "Proxmox VE Helper Scripts" \
|
||||
glob_path=$(whiptail --backtitle "$backtitle" \
|
||||
--inputbox "Enter a folder or glob to scan (e.g. /root/.ssh/*.pub)" 10 72 --title "Scan Folder/Glob" 3>&1 1>&2 2>&3)
|
||||
if [[ -n "$glob_path" ]]; then
|
||||
shopt -s nullglob
|
||||
@ -2166,7 +2421,7 @@ configure_ssh_settings() {
|
||||
ssh_build_choices_from_files "${_scan_files[@]}"
|
||||
if [[ "$COUNT" -gt 0 ]]; then
|
||||
local folder_selection
|
||||
folder_selection=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SELECT FOLDER KEYS" \
|
||||
folder_selection=$(whiptail --backtitle "$backtitle" --title "SELECT FOLDER KEYS" \
|
||||
--checklist "Select key(s) to import:" 20 78 10 "${CHOICES[@]}" 3>&1 1>&2 2>&3) || exit_script
|
||||
for tag in $folder_selection; do
|
||||
tag="${tag%\"}"
|
||||
@ -2176,10 +2431,10 @@ configure_ssh_settings() {
|
||||
[[ -n "$line" ]] && printf '%s\n' "$line" >>"$SSH_KEYS_FILE"
|
||||
done
|
||||
else
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox "No keys found in: $glob_path" 8 60
|
||||
whiptail --backtitle "$backtitle" --msgbox "No keys found in: $glob_path" 8 60
|
||||
fi
|
||||
else
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox "Path/glob returned no files." 8 60
|
||||
whiptail --backtitle "$backtitle" --msgbox "Path/glob returned no files." 8 60
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
@ -2193,12 +2448,9 @@ configure_ssh_settings() {
|
||||
printf '\n' >>"$SSH_KEYS_FILE"
|
||||
fi
|
||||
|
||||
if [[ -s "$SSH_KEYS_FILE" || "$PW" == -password* ]]; then
|
||||
if (whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "SSH ACCESS" --yesno "Enable root SSH access?" 10 58); then
|
||||
SSH="yes"
|
||||
else
|
||||
SSH="no"
|
||||
fi
|
||||
# Always show SSH access dialog - user should be able to enable SSH even without keys
|
||||
if (whiptail --backtitle "$backtitle" --defaultno --title "SSH ACCESS" --yesno "Enable root SSH access?" 10 58); then
|
||||
SSH="yes"
|
||||
else
|
||||
SSH="no"
|
||||
fi
|
||||
@ -2316,15 +2568,23 @@ build_container() {
|
||||
none) ;;
|
||||
esac
|
||||
|
||||
# Build FEATURES string
|
||||
if [ "$CT_TYPE" == "1" ]; then
|
||||
FEATURES="keyctl=1,nesting=1"
|
||||
else
|
||||
# Build FEATURES string based on container type and user choices
|
||||
FEATURES=""
|
||||
|
||||
# Nesting support (user configurable, default enabled)
|
||||
if [ "${ENABLE_NESTING:-1}" == "1" ]; then
|
||||
FEATURES="nesting=1"
|
||||
fi
|
||||
|
||||
# Keyctl for unprivileged containers (needed for Docker)
|
||||
if [ "$CT_TYPE" == "1" ]; then
|
||||
[ -n "$FEATURES" ] && FEATURES="$FEATURES,"
|
||||
FEATURES="${FEATURES}keyctl=1"
|
||||
fi
|
||||
|
||||
if [ "$ENABLE_FUSE" == "yes" ]; then
|
||||
FEATURES="$FEATURES,fuse=1"
|
||||
[ -n "$FEATURES" ] && FEATURES="$FEATURES,"
|
||||
FEATURES="${FEATURES}fuse=1"
|
||||
fi
|
||||
|
||||
# Build PCT_OPTIONS as string for export
|
||||
|
||||
@ -1453,15 +1453,32 @@ check_for_gh_release() {
|
||||
|
||||
ensure_dependencies jq
|
||||
|
||||
# Fetch releases and exclude drafts/prereleases
|
||||
local releases_json
|
||||
releases_json=$(curl -fsSL --max-time 20 \
|
||||
-H 'Accept: application/vnd.github+json' \
|
||||
-H 'X-GitHub-Api-Version: 2022-11-28' \
|
||||
"https://api.github.com/repos/${source}/releases") || {
|
||||
msg_error "Unable to fetch releases for ${app}"
|
||||
return 1
|
||||
}
|
||||
# Try /latest endpoint for non-pinned versions (most efficient)
|
||||
local releases_json=""
|
||||
|
||||
if [[ -z "$pinned_version_in" ]]; then
|
||||
releases_json=$(curl -fsSL --max-time 20 \
|
||||
-H 'Accept: application/vnd.github+json' \
|
||||
-H 'X-GitHub-Api-Version: 2022-11-28' \
|
||||
"https://api.github.com/repos/${source}/releases/latest" 2>/dev/null)
|
||||
|
||||
if [[ $? -eq 0 ]] && [[ -n "$releases_json" ]]; then
|
||||
# Wrap single release in array for consistent processing
|
||||
releases_json="[$releases_json]"
|
||||
fi
|
||||
fi
|
||||
|
||||
# If no releases yet (pinned version OR /latest failed), fetch up to 100
|
||||
if [[ -z "$releases_json" ]]; then
|
||||
# Fetch releases and exclude drafts/prereleases
|
||||
releases_json=$(curl -fsSL --max-time 20 \
|
||||
-H 'Accept: application/vnd.github+json' \
|
||||
-H 'X-GitHub-Api-Version: 2022-11-28' \
|
||||
"https://api.github.com/repos/${source}/releases?per_page=100") || {
|
||||
msg_error "Unable to fetch releases for ${app}"
|
||||
return 1
|
||||
}
|
||||
fi
|
||||
|
||||
mapfile -t raw_tags < <(jq -r '.[] | select(.draft==false and .prerelease==false) | .tag_name' <<<"$releases_json")
|
||||
if ((${#raw_tags[@]} == 0)); then
|
||||
|
||||
Reference in New Issue
Block a user