Compare commits

..

17 Commits

Author SHA1 Message Date
e759335bfc Update CHANGELOG.md (#9074)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-12 00:14:57 +00:00
1c09feabde Update versions.json (#9073)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-12 01:14:36 +01:00
e150afa583 Update CHANGELOG.md (#9066)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-11 18:34:59 +00:00
a770f27396 Update CHANGELOG.md (#9065)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-11 18:34:48 +00:00
533650f434 Update date in json (#9064)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-11-11 18:34:38 +00:00
23587df184 'Add new script' (#9029) 2025-11-11 19:34:22 +01:00
1893cb93d4 Update CHANGELOG.md (#9062)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-11 16:22:59 +00:00
32cd65d5e1 Refactor: openHAB (#9060) 2025-11-11 17:22:34 +01:00
681932c491 Update CHANGELOG.md (#9059)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-11 15:20:05 +00:00
b8a9beb56a Fix JDK count variable initialization in setup_java (#9058) 2025-11-11 16:19:35 +01:00
6cccb49363 qf: phpipham php8.3 2025-11-11 14:54:27 +01:00
5adfc83281 Update versions.json (#9052)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-11 13:07:22 +01:00
f099f472ce Update CHANGELOG.md (#9051)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-11 10:34:00 +00:00
00b978df29 [docs / gh]: modernize README | Change Version Support in SECURITY.md | Shoutout to selfhst\icons (#9049) 2025-11-11 11:33:33 +01:00
c054403325 Remove Dashy (#9050) 2025-11-11 11:32:44 +01:00
45aec67359 Update CHANGELOG.md (#9048)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-11 09:19:43 +00:00
774127eece flaresolverr: unpin - use latest version (#9046)
* revert: flaresolverr: latest update again

* Update FlareSolverr installation to use latest version

* fix
2025-11-11 10:19:23 +01:00
20 changed files with 656 additions and 812 deletions

View File

@ -10,14 +10,32 @@
> [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-11-12
## 2025-11-11
### 🆕 New Scripts
- Domain-Monitor ([#9029](https://github.com/community-scripts/ProxmoxVE/pull/9029))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- tools.func: fix JDK count variable initialization in setup_java [@MickLesk](https://github.com/MickLesk) ([#9058](https://github.com/community-scripts/ProxmoxVE/pull/9058))
- flaresolverr: unpin - use latest version [@CrazyWolf13](https://github.com/CrazyWolf13) ([#9046](https://github.com/community-scripts/ProxmoxVE/pull/9046))
- Part-DB: Increase amount of RAM [@tremor021](https://github.com/tremor021) ([#9039](https://github.com/community-scripts/ProxmoxVE/pull/9039))
- #### 🔧 Refactor
- Refactor: openHAB [@MickLesk](https://github.com/MickLesk) ([#9060](https://github.com/community-scripts/ProxmoxVE/pull/9060))
### 🧰 Maintenance
- #### 📂 Github
- [docs / gh]: modernize README | Change Version Support in SECURITY.md | Shoutout to selfhst\icons [@MickLesk](https://github.com/MickLesk) ([#9049](https://github.com/community-scripts/ProxmoxVE/pull/9049))
## 2025-11-10
### 🚀 Updated Scripts

288
README.md
View File

@ -1,114 +1,266 @@
<div align="center">
<p align="center">
<a href="#">
<img src="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo-81x112.png" height="100px" />
</a>
</p>
</div>
<img src="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo-81x112.png" height="120px" alt="Proxmox VE Helper-Scripts Logo" />
<h1>Proxmox VE Helper-Scripts</h1>
<p><em>A Community Legacy in Memory of @tteck</em></p>
<div style="border: 2px solid #d1d5db; padding: 20px; border-radius: 8px; background-color: #f9fafb;">
<h2 align="center">Proxmox VE Helper-Scripts</h2>
<p align="center">A Community Legacy in Memory of @tteck</p>
<p align="center">
<p>
<a href="https://helper-scripts.com">
<img src="https://img.shields.io/badge/Website-4c9b3f?style=for-the-badge&logo=github&logoColor=white" alt="Website" />
<img src="https://img.shields.io/badge/🌐_Website-Visit-4c9b3f?style=for-the-badge&labelColor=2d3748" alt="Website" />
</a>
<a href="https://discord.gg/3AnUqsXnmK">
<img src="https://img.shields.io/badge/Discord-7289da?style=for-the-badge&logo=discord&logoColor=white" alt="Discord" />
</a>
<a href="https://ko-fi.com/community_scripts">
<img src="https://img.shields.io/badge/Support-FF5F5F?style=for-the-badge&logo=ko-fi&logoColor=white" alt="Donate" />
<img src="https://img.shields.io/badge/💬_Discord-Join-7289da?style=for-the-badge&labelColor=2d3748" alt="Discord" />
</a>
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/CONTRIBUTING.md">
<img src="https://img.shields.io/badge/Contribute-ff4785?style=for-the-badge&logo=git&logoColor=white" alt="Contribute" />
</a>
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/USER_SUBMITTED_GUIDES.md">
<img src="https://img.shields.io/badge/Guides-0077b5?style=for-the-badge&logo=read-the-docs&logoColor=white" alt="Guides" />
</a>
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/CHANGELOG.md">
<img src="https://img.shields.io/badge/Changelog-6c5ce7?style=for-the-badge&logo=git&logoColor=white" alt="Changelog" />
<a href="https://ko-fi.com/community_scripts">
<img src="https://img.shields.io/badge/_Support-Donate-FF5F5F?style=for-the-badge&labelColor=2d3748" alt="Donate" />
</a>
</p>
<p>
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/CONTRIBUTING.md">
<img src="https://img.shields.io/badge/🤝_Contribute-Guidelines-ff4785?style=for-the-badge&labelColor=2d3748" alt="Contribute" />
</a>
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/USER_SUBMITTED_GUIDES.md">
<img src="https://img.shields.io/badge/📚_Guides-Read-0077b5?style=for-the-badge&labelColor=2d3748" alt="Guides" />
</a>
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/CHANGELOG.md">
<img src="https://img.shields.io/badge/📋_Changelog-View-6c5ce7?style=for-the-badge&labelColor=2d3748" alt="Changelog" />
</a>
</p>
<br />
> **Simplify your Proxmox VE setup with community-driven automation scripts**
> Originally created by tteck, now maintained and expanded by the community
</div>
<br />
<div align="center">
<sub>🙌 <strong>Shoutout to</strong></sub>
<br />
<br />
<a href="https://selfh.st/">
<img src="https://img.shields.io/badge/selfh.st-Icons_for_Self--Hosted-2563eb?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6IiBmaWxsPSJ3aGl0ZSIvPjwvc3ZnPg==&labelColor=1e3a8a" alt="selfh.st Icons" />
</a>
<br />
<sub><a href="https://github.com/selfhst/icons">View on GitHub</a> • Consistent, beautiful icons for 5000+ self-hosted apps</sub>
</div>
---
## 🚀 Project Overview
## 🎯 Key Features
**Proxmox VE Helper-Scripts** is a collection of tools to simplify the setup and management of Proxmox Virtual Environment (VE). Originally created by [tteck](https://github.com/tteck), these scripts are now continued by the community. Our goal is to preserve and expand upon tteck's work, providing an ongoing resource for Proxmox users worldwide.
<div align="center">
<table>
<tr>
<td align="center" width="25%">
<h3>⚡ Quick Setup</h3>
<p>One-command installations for popular services and containers</p>
</td>
<td align="center" width="25%">
<h3>⚙️ Flexible Config</h3>
<p>Simple mode for beginners, advanced options for power users</p>
</td>
<td align="center" width="25%">
<h3>🔄 Auto Updates</h3>
<p>Keep your installations current with built-in update mechanisms</p>
</td>
<td align="center" width="25%">
<h3>🛠️ Easy Management</h3>
<p>Post-install scripts for configuration and troubleshooting</p>
</td>
</tr>
<tr>
<td align="center" width="25%">
<h3>👥 Community Driven</h3>
<p>Actively maintained with contributions from users worldwide</p>
</td>
<td align="center" width="25%">
<h3>📖 Well Documented</h3>
<p>Comprehensive guides and community support</p>
</td>
<td align="center" width="25%">
<h3>🔒 Secure</h3>
<p>Regular security updates and best practices</p>
</td>
<td align="center" width="25%">
<h3>⚡ Performance</h3>
<p>Optimized configurations for best performance</p>
</td>
</tr>
</table>
</div>
---
## 📦 Features
## 📋 Requirements
- **Interactive Setup**: Choose between simple and advanced options for configuring VMs and LXC containers.
- **Customizable Configurations**: Advanced setup for fine-tuning your environment.
- **Seamless Integration**: Works seamlessly with Proxmox VE for a smooth experience.
- **Community-driven**: Actively maintained and improved by the Proxmox community.
<div align="center">
---
## ✅ Requirements
<table>
<tr>
<td align="center" width="33%">
<h3>🖥️ Proxmox VE</h3>
<p>Version 8.4.x or 9.0.x</p>
</td>
<td align="center" width="33%">
<h3>🐧 Operating System</h3>
<p>Debian-based with Proxmox Tools</p>
</td>
<td align="center" width="33%">
<h3>🌐 Network</h3>
<p>Internet connection required</p>
</td>
</tr>
</table>
Ensure your system meets the following prerequisites:
- **Proxmox VE version**: 8.x or higher
- **Linux**: Compatible with most distributions
- **Dependencies**: bash and curl should be installed.
</div>
---
## 🚀 Installation
## 📥 Getting Started
To install the Proxmox Helper Scripts, follow these steps:
Choose your preferred installation method:
1. Visit the [Website](https://helper-scripts.com/).
2. Search for the desired script, e.g., **"Home Assistant OS VM"**.
3. Copy the provided **Bash command** from the **"How To Install"** section.
4. Open the Proxmox shell on your **main node** and paste the command.
5. Press enter to start the installation! 🚀
### Method 1: One-Click Web Installer
The fastest way to get started:
1. Visit **[helper-scripts.com](https://helper-scripts.com/)** 🌐
2. Search for your desired script (e.g., "Home Assistant", "Docker")
3. Copy the bash command displayed on the script page
4. Open your **Proxmox Shell** and paste the command
5. Press Enter and follow the interactive prompts
### Method 2: PVEScripts-Local
Install a convenient script manager directly in your Proxmox UI:
```bash
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/pve-scripts-local.sh)"
```
This adds a menu to your Proxmox interface for easy script access without visiting the website.
📖 **Learn more:** [ProxmoxVE-Local Repository](https://github.com/community-scripts/ProxmoxVE-Local)
---
## ❤️ Community and Contributions
## 💬 Join the Community
We appreciate any contributions to the project—whether it's bug reports, feature requests, documentation improvements, or spreading the word. Your involvement helps keep the project alive and sustainable.
<div align="center">
## 💖 Donate to Support the Project
- **Ko-Fi for Community Edition**: [Donate to support this project](https://ko-fi.com/community_scripts) Donations go towards maintaining the project, testing infrastructure, and charity (cancer research, hospice care). 30% of the funds will be donated to charity.
<table>
<tr>
<td align="center" width="33%">
<h3>💬 Discord</h3>
<p>Real-time chat, support, and discussions</p>
<a href="https://discord.gg/3AnUqsXnmK">
<img src="https://img.shields.io/badge/Join-7289da?style=for-the-badge&logo=discord&logoColor=white" alt="Discord" />
</a>
</td>
<td align="center" width="33%">
<h3>💭 Discussions</h3>
<p>Feature requests, Q&A, and ideas</p>
<a href="https://github.com/community-scripts/ProxmoxVE/discussions">
<img src="https://img.shields.io/badge/Discuss-238636?style=for-the-badge&logo=github&logoColor=white" alt="Discussions" />
</a>
</td>
<td align="center" width="33%">
<h3>🐛 Issues</h3>
<p>Bug reports and issue tracking</p>
<a href="https://github.com/community-scripts/ProxmoxVE/issues">
<img src="https://img.shields.io/badge/Report-d73a4a?style=for-the-badge&logo=github&logoColor=white" alt="Issues" />
</a>
</td>
</tr>
</table>
</div>
---
## 💬 Get Help
## 🛠️ Contribute
Join our community for support:
<div align="center">
- **Discord**: Join our [Proxmox Helper Scripts Discord server](https://discord.gg/3AnUqsXnmK) for real-time support.
- **GitHub Discussions**: [Ask questions or report issues](https://github.com/community-scripts/ProxmoxVE/discussions).
<table>
<tr>
<td align="center" width="25%">
<h3>💻 Code</h3>
<p>Add new scripts or improve existing ones</p>
</td>
<td align="center" width="25%">
<h3>📝 Documentation</h3>
<p>Write guides, improve READMEs, translate content</p>
</td>
<td align="center" width="25%">
<h3>🧪 Testing</h3>
<p>Test scripts and report compatibility issues</p>
</td>
<td align="center" width="25%">
<h3>💡 Ideas</h3>
<p>Suggest features or workflow improvements</p>
</td>
</tr>
</table>
## 🤝 Report a Bug or Feature Request
</div>
If you encounter any issues or have suggestions for improvement, file a new issue on our [GitHub issues page](https://github.com/community-scripts/ProxmoxVE/issues). You can also submit pull requests with solutions or enhancements!
<div align="center">
<br />
👉 Check our **[Contributing Guidelines](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/CONTRIBUTING.md)** to get started
</div>
---
## ⭐ Star History
## ❤️ Support the Project
<a href="https://star-history.com/#community-scripts/ProxmoxVE&Date">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" />
</picture>
This project is maintained by volunteers in memory of tteck. Your support helps us maintain infrastructure, improve documentation, and give back to important causes.
**🎗️ 30% of all donations go directly to cancer research and hospice care**
<div align="center">
<a href="https://ko-fi.com/community_scripts">
<img src="https://img.shields.io/badge/☕_Buy_us_a_coffee-Support_on_Ko--fi-FF5F5F?style=for-the-badge&labelColor=2d3748" alt="Support on Ko-fi" />
</a>
<br />
<sub>Every contribution helps keep this project alive and supports meaningful causes</sub>
</div>
---
## 📈 Project Growth
<div align="center">
<a href="https://star-history.com/#community-scripts/ProxmoxVE&Date">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" />
</picture>
</a>
</div>
---
## 📜 License
This project is licensed under the [MIT License](LICENSE).
</br>
</br>
<p align="center">
<i style="font-size: smaller;"><b>Proxmox</b>® is a registered trademark of <a href="https://www.proxmox.com/en/about/company">Proxmox Server Solutions GmbH</a>.</i>
</p>
This project is licensed under the **[MIT License](LICENSE)** - feel free to use, modify, and distribute.
---
<div align="center">
<sub>Made with ❤️ by the Proxmox community in memory of tteck</sub>
<br />
<sub><i>Proxmox® is a registered trademark of <a href="https://www.proxmox.com/en/about/company">Proxmox Server Solutions GmbH</a></i></sub>
</div>

View File

@ -8,13 +8,15 @@ This project currently supports the following versions of Proxmox VE (PVE):
| ------- | ------------------ |
| 9.0.x | :white_check_mark: |
| 8.4.x | :white_check_mark: |
| 8.3.x | :white_check_mark: |
| 8.2.x | :white_check_mark: |
| 8.1.x | :white_check_mark: |
| 8.3.x | Limited support* ❕ |
| 8.2.x | Limited support* ❕ |
| 8.1.x | Limited support* ❕ |
| 8.0.x | Limited support* ❕ |
| < 8.0 | :x: |
*Version 8.0.x has limited support. Security updates may not be provided for all issues affecting this version.
*Version 8.0.x - 8.3.x has limited support. Security updates may not be provided for all issues affecting this version.
*Debian 13 Containers may fail to install. You can write var_version=12 before the bash call.
---

View File

@ -1,77 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://dashy.to/
APP="Dashy"
var_tags="${var_tags:-dashboard}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-6}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/dashy/public/ ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "dashy" "Lissy93/dashy"; then
msg_info "Stopping Service"
systemctl stop dashy
msg_ok "Stopped Service"
msg_info "Backing up conf.yml"
cd ~
if [[ -f /opt/dashy/public/conf.yml ]]; then
cp -R /opt/dashy/public/conf.yml conf.yml
else
cp -R /opt/dashy/user-data/conf.yml conf.yml
fi
msg_ok "Backed up conf.yml"
rm -rf /opt/dashy
fetch_and_deploy_gh_release "dashy" "Lissy93/dashy"
msg_info "Updating ${APP}"
cd /opt/dashy
npm install
npm run build
msg_ok "Updated ${APP}"
msg_info "Restoring conf.yml"
cd ~
cp -R conf.yml /opt/dashy/user-data
msg_ok "Restored conf.yml"
msg_info "Cleaning"
rm -rf conf.yml /opt/dashy/public/conf.yml
msg_ok "Cleaned"
msg_info "Starting Dashy"
systemctl start dashy
msg_ok "Started Dashy"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4000${CL}"

67
ct/domain-monitor.sh Normal file
View File

@ -0,0 +1,67 @@
#!/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: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/Hosteroid/domain-monitor
APP="Domain-Monitor"
var_tags="${var_tags:-proxy}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-2}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/domain-monitor ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "domain-monitor" "Hosteroid/domain-monitor"; then
msg_info "Stopping Service"
systemctl stop apache2
msg_info "Service stopped"
msg_info "Creating backup"
mv /opt/domain-monitor/.env /opt
msg_ok "Created backup"
setup_composer
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "domain-monitor" "Hosteroid/domain-monitor" "prebuild" "latest" "/opt/domain-monitor" "domain-monitor-v*.zip"
msg_info "Updating Domain Monitor"
cd /opt/domain-monitor
$STD composer install
msg_ok "Updated Domain Monitor"
msg_info "Restoring backup"
mv /opt/.env /opt/domain-monitor
msg_ok "Restored backup"
msg_info "Restarting Services"
systemctl reload apache2
msg_ok "Restarted Services"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"

View File

@ -33,13 +33,13 @@ function update_script() {
msg_error "You must upgrade your LXC to Debian Trixie before updating."
exit
fi
if check_for_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "3.4.3"; then
if check_for_gh_release "flaresolverr" "FlareSolverr/FlareSolverr"; then
msg_info "Stopping service"
systemctl stop flaresolverr
msg_ok "Stopped service"
rm -rf /opt/flaresolverr
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "v3.4.3" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
msg_info "Starting service"
systemctl start flaresolverr

View File

@ -1,6 +0,0 @@
____ __
/ __ \____ ______/ /_ __ __
/ / / / __ `/ ___/ __ \/ / / /
/ /_/ / /_/ (__ ) / / / /_/ /
/_____/\__,_/____/_/ /_/\__, /
/____/

View File

@ -0,0 +1,6 @@
____ _ __ ___ _ __
/ __ \____ ____ ___ ____ _(_)___ / |/ /___ ____ (_) /_____ _____
/ / / / __ \/ __ `__ \/ __ `/ / __ \______/ /|_/ / __ \/ __ \/ / __/ __ \/ ___/
/ /_/ / /_/ / / / / / / /_/ / / / / /_____/ / / / /_/ / / / / / /_/ /_/ / /
/_____/\____/_/ /_/ /_/\__,_/_/_/ /_/ /_/ /_/\____/_/ /_/_/\__/\____/_/

View File

@ -20,18 +20,18 @@ color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /etc/apt/sources.list.d/openhab.list ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating ${APP} LXC"
$STD apt update
$STD apt -y upgrade
msg_ok "Updated successfully!"
header_info
check_container_storage
check_container_resources
if [[ ! -f /usr/lib/systemd/system/openhab.service ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating ${APP} LXC"
$STD apt update
$STD apt upgrade -y
msg_ok "Updated successfully!"
exit
}
start

View File

@ -33,7 +33,7 @@ function update_script() {
systemctl stop apache2
msg_ok "Stopped Service"
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_FPM="YES" PHP_MODULE="mysql,gmp,snmp,ldap,apcu" setup_php
PHP_VERSION="8.3" PHP_APACHE="YES" PHP_FPM="YES" PHP_MODULE="mysql,gmp,snmp,ldap,apcu" setup_php
msg_info "Installing PHP-PEAR"
$STD apt install -y \

View File

@ -1,35 +0,0 @@
{
"name": "Dashy",
"slug": "dashy",
"categories": [
10
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 4000,
"documentation": "https://dashy.to/docs",
"website": "https://dashy.to/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/dashy.webp",
"config_path": "/opt/dashy/user-data/conf.yml",
"description": "Dashy is a solution that helps you organize your self-hosted services by centralizing access to them through a single interface.",
"install_methods": [
{
"type": "default",
"script": "ct/dashy.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 6,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@ -0,0 +1,35 @@
{
"name": "Domain Monitor",
"slug": "domain-monitor",
"categories": [
9
],
"date_created": "2025-11-11",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 80,
"documentation": "https://github.com/Hosteroid/domain-monitor/blob/main/README.md",
"config_path": "/opt/domain-monitor/.env",
"website": "https://github.com/Hosteroid/domain-monitor",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/domain-monitor.png",
"description": "A self-hosted PHP domain expiration monitoring tool that tracks domain expiry dates, RDAP/WHOIS data, and SSL certificate validity. Supports alerts, multi-user setup, and cron automation. Built for developers, hosting providers, and IT admins who want full control without third-party services.",
"install_methods": [
{
"type": "default",
"script": "ct/domain-monitor.sh",
"resources": {
"cpu": 2,
"ram": 512,
"hdd": 2,
"os": "Debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@ -1,4 +1,164 @@
[
{
"name": "moghtech/komodo",
"version": "v1.19.5",
"date": "2025-09-27T20:59:46Z"
},
{
"name": "Brandawg93/PeaNUT",
"version": "v5.17.0",
"date": "2025-11-11T20:15:54Z"
},
{
"name": "BerriAI/litellm",
"version": "v1.79.dev.1",
"date": "2025-11-11T20:13:32Z"
},
{
"name": "rcourtman/Pulse",
"version": "v4.29.0",
"date": "2025-11-11T19:45:56Z"
},
{
"name": "juanfont/headscale",
"version": "v0.27.1",
"date": "2025-11-11T19:32:29Z"
},
{
"name": "karlomikus/bar-assistant",
"version": "v5.9.2",
"date": "2025-11-11T19:29:32Z"
},
{
"name": "runtipi/runtipi",
"version": "v4.6.4",
"date": "2025-11-11T17:47:15Z"
},
{
"name": "gethomepage/homepage",
"version": "v1.7.0",
"date": "2025-11-11T17:24:27Z"
},
{
"name": "mattermost/mattermost",
"version": "mattermost-redux@11.1.0",
"date": "2025-11-11T17:15:00Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.536",
"date": "2025-11-11T17:03:28Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.30.10",
"date": "2025-11-11T16:26:27Z"
},
{
"name": "kimai/kimai",
"version": "2.41.0",
"date": "2025-11-11T15:17:21Z"
},
{
"name": "netbox-community/netbox",
"version": "v4.4.6",
"date": "2025-11-11T14:59:23Z"
},
{
"name": "seerr-team/seerr",
"version": "preview-test-fix-subscriptions",
"date": "2025-11-11T14:38:10Z"
},
{
"name": "CrazyWolf13/web-check",
"version": "1.1.0",
"date": "2025-11-11T14:30:28Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "create-fumadocs-app@16.0.13",
"date": "2025-11-11T14:04:06Z"
},
{
"name": "openobserve/openobserve",
"version": "v0.16.1",
"date": "2025-11-11T13:14:28Z"
},
{
"name": "BookStackApp/BookStack",
"version": "v25.11.1",
"date": "2025-11-11T12:23:00Z"
},
{
"name": "element-hq/synapse",
"version": "v1.142.0",
"date": "2025-11-11T10:33:50Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.119.1",
"date": "2025-11-10T14:21:10Z"
},
{
"name": "zitadel/zitadel",
"version": "v4.6.5",
"date": "2025-11-11T09:55:47Z"
},
{
"name": "emqx/emqx",
"version": "e6.0.1",
"date": "2025-11-11T09:46:06Z"
},
{
"name": "NginxProxyManager/nginx-proxy-manager",
"version": "v2.13.3",
"date": "2025-11-11T07:36:54Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.275",
"date": "2025-11-11T05:56:40Z"
},
{
"name": "FlareSolverr/FlareSolverr",
"version": "v3.4.5",
"date": "2025-11-11T01:58:31Z"
},
{
"name": "chrisbenincasa/tunarr",
"version": "v0.23.0-alpha.22",
"date": "2025-11-11T01:36:48Z"
},
{
"name": "MediaBrowser/Emby.Releases",
"version": "4.9.1.90",
"date": "2025-11-11T01:00:32Z"
},
{
"name": "OliveTin/OliveTin",
"version": "2025.11.11",
"date": "2025-11-11T00:35:03Z"
},
{
"name": "jeedom/core",
"version": "4.4.20",
"date": "2025-11-11T00:27:07Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.0.1",
"date": "2025-10-15T16:53:55Z"
},
{
"name": "qbittorrent/qBittorrent",
"version": "release-5.1.3",
"date": "2025-11-10T22:29:05Z"
},
{
"name": "postgres/postgres",
"version": "REL_13_23",
"date": "2025-11-10T21:59:18Z"
},
{
"name": "chrisvel/tududi",
"version": "v0.86",
@ -9,11 +169,6 @@
"version": "v0.62.17",
"date": "2025-11-10T19:45:49Z"
},
{
"name": "chrisbenincasa/tunarr",
"version": "v0.22.13",
"date": "2025-11-10T18:12:24Z"
},
{
"name": "autobrr/autobrr",
"version": "v1.69.0",
@ -30,19 +185,9 @@
"date": "2025-11-10T16:51:44Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.30.9",
"date": "2025-11-10T16:23:29Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-mdx@13.0.6",
"date": "2025-11-10T14:43:06Z"
},
{
"name": "n8n-io/n8n",
"version": "v1.0.0",
"date": "2025-11-07T12:52:42Z"
"name": "keycloak/keycloak",
"version": "26.4.4",
"date": "2025-11-07T08:55:27Z"
},
{
"name": "grokability/snipe-it",
@ -59,51 +204,21 @@
"version": "0.50.42",
"date": "2025-11-10T12:32:49Z"
},
{
"name": "emqx/emqx",
"version": "e6.0.1",
"date": "2025-11-10T11:58:39Z"
},
{
"name": "documenso/documenso",
"version": "v2.0.6",
"date": "2025-11-10T08:08:43Z"
},
{
"name": "mattermost/mattermost",
"version": "v10.11.6",
"date": "2025-11-04T09:43:16Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.270",
"date": "2025-11-10T05:57:22Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.4.6",
"date": "2025-11-08T22:45:35Z"
},
{
"name": "jeedom/core",
"version": "4.4.20",
"date": "2025-11-10T00:27:05Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.0.1",
"date": "2025-10-15T16:53:55Z"
},
{
"name": "navidrome/navidrome",
"version": "v0.58.5",
"date": "2025-11-09T19:12:41Z"
},
{
"name": "rcourtman/Pulse",
"version": "v4.27.2",
"date": "2025-11-09T18:39:30Z"
},
{
"name": "pelican-dev/panel",
"version": "v1.0.0-beta28",
@ -129,26 +244,11 @@
"version": "v14.0.1",
"date": "2025-11-09T13:03:18Z"
},
{
"name": "BookStackApp/BookStack",
"version": "v25.11",
"date": "2025-11-09T13:00:14Z"
},
{
"name": "karakeep-app/karakeep",
"version": "extension/v1.2.7",
"date": "2025-11-09T12:21:54Z"
},
{
"name": "NginxProxyManager/nginx-proxy-manager",
"version": "v2.13.2",
"date": "2025-11-09T11:56:25Z"
},
{
"name": "keycloak/keycloak",
"version": "26.4.4",
"date": "2025-11-07T08:55:27Z"
},
{
"name": "authelia/authelia",
"version": "v4.39.14",
@ -159,11 +259,6 @@
"version": "3.5.1",
"date": "2025-11-09T05:09:28Z"
},
{
"name": "BerriAI/litellm",
"version": "v1.79.3.rc.1",
"date": "2025-11-09T02:52:13Z"
},
{
"name": "inventree/InvenTree",
"version": "1.1.3",
@ -199,11 +294,6 @@
"version": "v7.13.0",
"date": "2025-11-08T13:36:25Z"
},
{
"name": "runtipi/runtipi",
"version": "v4.6.3",
"date": "2025-11-08T10:06:18Z"
},
{
"name": "pocketbase/pocketbase",
"version": "v0.32.0",
@ -244,16 +334,6 @@
"version": "v25.4",
"date": "2025-10-09T10:27:01Z"
},
{
"name": "openobserve/openobserve",
"version": "v0.16.0",
"date": "2025-11-07T12:55:42Z"
},
{
"name": "element-hq/synapse",
"version": "v1.142.0rc2",
"date": "2025-11-04T16:22:11Z"
},
{
"name": "Paymenter/Paymenter",
"version": "v1.4.3",
@ -261,19 +341,14 @@
},
{
"name": "wazuh/wazuh",
"version": "coverity-w45-4.14.1",
"date": "2025-11-05T16:56:57Z"
"version": "coverity-w46-4.14.1",
"date": "2025-11-07T08:46:03Z"
},
{
"name": "umami-software/umami",
"version": "v3.0.0",
"date": "2025-11-07T06:13:49Z"
},
{
"name": "OliveTin/OliveTin",
"version": "3000.3.2",
"date": "2025-11-07T01:05:59Z"
},
{
"name": "FlowiseAI/Flowise",
"version": "flowise@3.0.10",
@ -359,11 +434,6 @@
"version": "0.5.1",
"date": "2025-11-05T16:14:37Z"
},
{
"name": "zitadel/zitadel",
"version": "v4.6.4",
"date": "2025-11-05T15:57:00Z"
},
{
"name": "Graylog2/graylog2-server",
"version": "6.2.9",
@ -399,11 +469,6 @@
"version": "0.209.7",
"date": "2025-11-05T08:32:08Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.535",
"date": "2025-11-05T05:30:07Z"
},
{
"name": "slskd/slskd",
"version": "0.24.0",
@ -414,16 +479,6 @@
"version": "v4.0.16.2944",
"date": "2025-11-05T01:56:48Z"
},
{
"name": "gethomepage/homepage",
"version": "v1.6.1",
"date": "2025-11-05T00:21:14Z"
},
{
"name": "FlareSolverr/FlareSolverr",
"version": "v3.4.4",
"date": "2025-11-04T23:05:14Z"
},
{
"name": "henrygd/beszel",
"version": "v0.15.4",
@ -519,11 +574,6 @@
"version": "v1.9.1",
"date": "2025-11-02T21:14:50Z"
},
{
"name": "karlomikus/bar-assistant",
"version": "v5.9.1",
"date": "2025-11-02T20:54:28Z"
},
{
"name": "tobychui/zoraxy",
"version": "v3.2.9",
@ -664,21 +714,11 @@
"version": "v1.0.1",
"date": "2025-10-29T03:25:13Z"
},
{
"name": "moghtech/komodo",
"version": "v1.19.5",
"date": "2025-09-27T20:59:46Z"
},
{
"name": "booklore-app/booklore",
"version": "v1.10.0",
"date": "2025-10-28T19:04:35Z"
},
{
"name": "netbox-community/netbox",
"version": "v4.4.5",
"date": "2025-10-28T18:35:47Z"
},
{
"name": "pi-hole/pi-hole",
"version": "v6.2.2",
@ -704,11 +744,6 @@
"version": "v4.2.0",
"date": "2025-10-27T16:56:40Z"
},
{
"name": "juanfont/headscale",
"version": "v0.27.0",
"date": "2025-10-27T11:16:35Z"
},
{
"name": "Radarr/Radarr",
"version": "v5.28.0.10274",
@ -804,11 +839,6 @@
"version": "v4.105.1",
"date": "2025-10-20T20:19:23Z"
},
{
"name": "MediaBrowser/Emby.Releases",
"version": "4.9.1.80",
"date": "2025-09-30T20:25:16Z"
},
{
"name": "rclone/rclone",
"version": "v1.71.2",
@ -894,11 +924,6 @@
"version": "2.1.2",
"date": "2025-10-15T06:51:32Z"
},
{
"name": "seerr-team/seerr",
"version": "preview-seerr",
"date": "2025-10-14T22:21:33Z"
},
{
"name": "crafty-controller/crafty-4",
"version": "v4.5.5",
@ -929,11 +954,6 @@
"version": "v0.27.0",
"date": "2025-10-10T20:11:48Z"
},
{
"name": "Brandawg93/PeaNUT",
"version": "v5.16.0",
"date": "2025-10-10T16:17:02Z"
},
{
"name": "projectsend/projectsend",
"version": "r1945",
@ -1009,11 +1029,6 @@
"version": "v0.10.1",
"date": "2025-09-28T08:55:44Z"
},
{
"name": "kimai/kimai",
"version": "2.40.0",
"date": "2025-09-27T16:19:26Z"
},
{
"name": "FreshRSS/FreshRSS",
"version": "1.27.1",
@ -1034,11 +1049,6 @@
"version": "2025.09.24",
"date": "2025-09-24T13:51:23Z"
},
{
"name": "postgres/postgres",
"version": "REL_18_0",
"date": "2025-09-22T20:11:33Z"
},
{
"name": "itsmng/itsm-ng",
"version": "v2.1.0",
@ -1274,11 +1284,6 @@
"version": "250707-d28b3101e",
"date": "2025-07-07T15:15:21Z"
},
{
"name": "qbittorrent/qBittorrent",
"version": "release-5.1.2",
"date": "2025-07-02T06:13:16Z"
},
{
"name": "hivemq/hivemq-community-edition",
"version": "2025.4",
@ -1534,11 +1539,6 @@
"version": "v1.11.13",
"date": "2024-05-08T04:20:34Z"
},
{
"name": "CrazyWolf13/web-check",
"version": "1.0.0",
"date": "2024-05-05T02:01:51Z"
},
{
"name": "thelounge/thelounge-deb",
"version": "v4.4.3",

View File

@ -1,46 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://dashy.to/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
NODE_VERSION="22" setup_nodejs
fetch_and_deploy_gh_release "dashy" "Lissy93/dashy"
msg_info "Installing Dashy"
cd /opt/dashy
$STD npm install
$STD npm run build
msg_ok "Installed Dashy"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/dashy.service
[Unit]
Description=dashy
[Service]
Type=simple
WorkingDirectory=/opt/dashy
ExecStart=/usr/bin/npm start
[Install]
WantedBy=multi-user.target
EOF
systemctl -q --now enable dashy
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@ -0,0 +1,65 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/Hosteroid/domain-monitor
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 --no-install-recommends \
libicu-dev \
libzip-dev \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
libxml2-dev \
libcurl4-openssl-dev \
libonig-dev \
pkg-config
msg_ok "Installed Dependencies"
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_FPM="YES" PHP_MODULE="mysql" setup_php
setup_composer
setup_mariadb
MARIADB_DB_NAME="domain_monitor" MARIADB_DB_USER="domainmonitor" setup_mariadb_db
fetch_and_deploy_gh_release "domain-monitor" "Hosteroid/domain-monitor" "prebuild" "latest" "/opt/domain-monitor" "domain-monitor-v*.zip"
msg_info "Setting up Domain Monitor"
ENC_KEY=$(openssl rand -base64 48 | tr -dc 'A-Za-z0-9' | head -c 32)
cd /opt/domain-monitor
$STD composer install
cp env.example.txt .env
sed -i -e "s|^APP_ENV=.*|APP_ENV=production|" \
-e "s|^APP_ENCRYPTION_KEY=.*|APP_ENCRYPTION_KEY=$ENC_KEY|" \
-e "s|^SESSION_COOKIE_HTTPONLY=.*|SESSION_COOKIE_HTTPONLY=0|" \
-e "s|^DB_USERNAME=.*|DB_USERNAME=$MARIADB_DB_USER|" \
-e "s|^DB_PASSWORD=.*|DB_PASSWORD=$MARIADB_DB_PASS|" \
-e "s|^DB_DATABASE=.*|DB_DATABASE=$MARIADB_DB_NAME|" .env
cat <<EOF >/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
ServerName domainmonitor.local
DocumentRoot "/opt/domain-monitor/public"
<Directory "/opt/domain-monitor/public">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
EOF
chown -R www-data:www-data /opt/domain-monitor
$STD a2enmod rewrite headers
$STD systemctl reload apache2
msg_ok "Setup Domain Monitor"
motd_ssh
customize
cleanup_lxc

View File

@ -32,7 +32,7 @@ $STD apt install -y google-chrome-stable
rm /etc/apt/sources.list.d/google-chrome.list
msg_ok "Installed Chrome"
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "v3.4.3" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/flaresolverr.service

View File

@ -13,35 +13,30 @@ setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
ca-certificates \
apt-transport-https
msg_ok "Installed Dependencies"
JAVA_VERSION="21" setup_java
msg_info "Installing openHAB"
curl -fsSL "https://openhab.jfrog.io/artifactory/api/gpg/key/public" | gpg --dearmor -o /usr/share/keyrings/openhab.gpg
chmod u=rw,g=r,o=r /usr/share/keyrings/openhab.gpg
cat <<EOF >/etc/apt/sources.list.d/openhab.sources
Types: deb
URIs: https://openhab.jfrog.io/artifactory/openhab-linuxpkg
Suites: stable
Components: main
Signed-By: /usr/share/keyrings/openhab.gpg
EOF
$STD apt update
$STD apt -y install openhab
setup_deb822_repo \
"openhab" \
"https://openhab.jfrog.io/artifactory/api/gpg/key/public" \
"https://openhab.jfrog.io/artifactory/openhab-linuxpkg" \
"stable" \
"main"
$STD apt install -y openhab
msg_ok "Installed openHAB"
msg_info "Initializing openHAB directories"
mkdir -p /var/lib/openhab/{tmp,etc,cache}
mkdir -p /etc/openhab
mkdir -p /var/log/openhab
chown -R openhab:openhab /var/lib/openhab /etc/openhab /var/log/openhab
msg_ok "Initialized openHAB directories"
msg_info "Starting Service"
systemctl daemon-reload
systemctl enable -q --now openhab
msg_ok "Installed openHAB"
msg_ok "Started Service"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt -y autoremove
$STD apt -y autoclean
$STD apt -y clean
msg_ok "Cleaned"
cleanup_lxc

View File

@ -13,7 +13,7 @@ setting_up_container
network_check
update_os
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_FPM="YES" PHP_MODULE="mysql,gmp,snmp,ldap,apcu" setup_php
PHP_VERSION="8.3" PHP_APACHE="YES" PHP_FPM="YES" PHP_MODULE="mysql,gmp,snmp,ldap,apcu" setup_php
msg_info "Installing PHP-PEAR"
$STD apt install -y \
@ -33,7 +33,7 @@ sed -i -e "s/\(\$disable_installer = \).*/\1true;/" \
-e "s/\(\$db\['pass'\] = \).*/\1'$MARIADB_DB_PASS';/" \
-e "s/\(\$db\['name'\] = \).*/\1'$MARIADB_DB_NAME';/" \
/opt/phpipam/config.php
sed -i '/max_execution_time/s/= .*/= 600/' /etc/php/8.4/apache2/php.ini
sed -i '/max_execution_time/s/= .*/= 600/' /etc/php/8.3/apache2/php.ini
msg_ok "Installed phpIPAM"
msg_info "Creating Service"

View File

@ -2787,8 +2787,9 @@ function setup_java() {
fi
# Validate INSTALLED_VERSION is not empty if matched
local JDK_COUNT=$(dpkg -l 2>/dev/null | grep -c "temurin-.*-jdk" || echo "0")
if [[ -z "$INSTALLED_VERSION" && "$JDK_COUNT" -gt 0 ]]; then
local JDK_COUNT=0
JDK_COUNT=$(dpkg -l 2>/dev/null | grep -c "temurin-.*-jdk" || echo "0")
if [[ -z "$INSTALLED_VERSION" && "${JDK_COUNT:-0}" -gt 0 ]]; then
msg_warn "Found Temurin JDK but cannot determine version"
INSTALLED_VERSION="0"
fi

View File

@ -5,8 +5,6 @@
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
source /dev/stdin <<<$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func)
# Load Cloud-Init library for VM configuration
source /dev/stdin <<<$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/vm/cloud-init-lib.sh) 2>/dev/null || true
function header_info() {
clear
@ -26,12 +24,8 @@ RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
METHOD=""
NSAPP="docker-vm"
var_os="debian"
var_version="13"
var_version="12"
DISK_SIZE="10G"
USE_CLOUD_INIT="no"
INSTALL_PORTAINER="no"
OS_TYPE=""
OS_VERSION=""
YW=$(echo "\033[33m")
BL=$(echo "\033[36m")
@ -135,21 +129,6 @@ function msg_error() {
echo -e "${BFR}${CROSS}${RD}${msg}${CL}"
}
function spinner() {
local pid=$1
local msg="$2"
local spin='⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏'
local i=0
echo -ne "${TAB}${YW}${msg} "
while kill -0 $pid 2>/dev/null; do
i=$(((i + 1) % 10))
echo -ne "\b${spin:$i:1}"
sleep 0.1
done
echo -ne "\b"
}
function check_root() {
if [[ "$(id -u)" -ne 0 || $(ps -o comm= -p $PPID) == "sudo" ]]; then
clear
@ -174,7 +153,6 @@ pve_check() {
msg_error "Supported: Proxmox VE version 8.0 8.9"
exit 1
fi
PVE_MAJOR=8
return 0
fi
@ -186,7 +164,6 @@ pve_check() {
msg_error "Supported: Proxmox VE version 9.0"
exit 1
fi
PVE_MAJOR=9
return 0
fi
@ -225,114 +202,14 @@ function exit-script() {
exit
}
function select_os() {
if OS_CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SELECT OS" --radiolist \
"Choose Operating System for Docker VM" 14 68 4 \
"debian13" "Debian 13 (Trixie) - Latest" ON \
"debian12" "Debian 12 (Bookworm) - Stable" OFF \
"ubuntu2404" "Ubuntu 24.04 LTS (Noble)" OFF \
"ubuntu2204" "Ubuntu 22.04 LTS (Jammy)" OFF \
3>&1 1>&2 2>&3); then
case $OS_CHOICE in
debian13)
OS_TYPE="debian"
OS_VERSION="13"
OS_CODENAME="trixie"
OS_DISPLAY="Debian 13 (Trixie)"
;;
debian12)
OS_TYPE="debian"
OS_VERSION="12"
OS_CODENAME="bookworm"
OS_DISPLAY="Debian 12 (Bookworm)"
;;
ubuntu2404)
OS_TYPE="ubuntu"
OS_VERSION="24.04"
OS_CODENAME="noble"
OS_DISPLAY="Ubuntu 24.04 LTS"
;;
ubuntu2204)
OS_TYPE="ubuntu"
OS_VERSION="22.04"
OS_CODENAME="jammy"
OS_DISPLAY="Ubuntu 22.04 LTS"
;;
esac
echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}${OS_DISPLAY}${CL}"
else
exit-script
fi
}
function select_cloud_init() {
# Ubuntu only has cloudimg variant (always Cloud-Init), so no choice needed
if [ "$OS_TYPE" = "ubuntu" ]; then
USE_CLOUD_INIT="yes"
echo -e "${CLOUD}${BOLD}${DGN}Cloud-Init: ${BGN}yes (Ubuntu requires Cloud-Init)${CL}"
return
fi
# Debian has two image variants, so user can choose
if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "CLOUD-INIT" \
--yesno "Enable Cloud-Init for VM configuration?\n\nCloud-Init allows automatic configuration of:\n• User accounts and passwords\n• SSH keys\n• Network settings (DHCP/Static)\n• DNS configuration\n\nYou can also configure these settings later in Proxmox UI.\n\nNote: Debian without Cloud-Init will use nocloud image with console auto-login." 18 68); then
USE_CLOUD_INIT="yes"
echo -e "${CLOUD}${BOLD}${DGN}Cloud-Init: ${BGN}yes${CL}"
else
USE_CLOUD_INIT="no"
echo -e "${CLOUD}${BOLD}${DGN}Cloud-Init: ${BGN}no${CL}"
fi
}
function select_portainer() {
if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "PORTAINER" \
--yesno "Install Portainer for Docker management?\n\nPortainer is a lightweight management UI for Docker.\n\nAccess after installation:\n• HTTP: http://<VM-IP>:9000\n• HTTPS: https://<VM-IP>:9443" 14 68); then
INSTALL_PORTAINER="yes"
echo -e "${ADVANCED}${BOLD}${DGN}Portainer: ${BGN}yes${CL}"
else
INSTALL_PORTAINER="no"
echo -e "${ADVANCED}${BOLD}${DGN}Portainer: ${BGN}no${CL}"
fi
}
function get_image_url() {
local arch=$(dpkg --print-architecture)
case $OS_TYPE in
debian)
# Debian has two variants:
# - generic: For Cloud-Init enabled VMs
# - nocloud: For VMs without Cloud-Init (has console auto-login)
if [ "$USE_CLOUD_INIT" = "yes" ]; then
echo "https://cloud.debian.org/images/cloud/${OS_CODENAME}/latest/debian-${OS_VERSION}-generic-${arch}.qcow2"
else
echo "https://cloud.debian.org/images/cloud/${OS_CODENAME}/latest/debian-${OS_VERSION}-nocloud-${arch}.qcow2"
fi
;;
ubuntu)
# Ubuntu only has cloudimg variant (always with Cloud-Init support)
echo "https://cloud-images.ubuntu.com/${OS_CODENAME}/current/${OS_CODENAME}-server-cloudimg-${arch}.img"
;;
esac
}
function default_settings() {
# OS Selection - ALWAYS ask
select_os
# Cloud-Init Selection - ALWAYS ask
select_cloud_init
# Portainer Selection - ALWAYS ask
select_portainer
# Set defaults for other settings
VMID=$(get_valid_nextid)
FORMAT=""
MACHINE=" -machine q35"
FORMAT=",efitype=4m"
MACHINE=""
DISK_CACHE=""
DISK_SIZE="10G"
HN="docker"
CPU_TYPE=" -cpu host"
CPU_TYPE=""
CORE_COUNT="2"
RAM_SIZE="4096"
BRG="vmbr0"
@ -341,14 +218,12 @@ function default_settings() {
MTU=""
START_VM="yes"
METHOD="default"
# Display summary
echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}${VMID}${CL}"
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}Q35 (Modern)${CL}"
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx${CL}"
echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}None${CL}"
echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}${HN}${CL}"
echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}Host${CL}"
echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}KVM64${CL}"
echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}${CORE_COUNT}${CL}"
echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}${RAM_SIZE}${CL}"
echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}${BRG}${CL}"
@ -356,19 +231,10 @@ function default_settings() {
echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}Default${CL}"
echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}Default${CL}"
echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}yes${CL}"
echo -e "${CREATING}${BOLD}${DGN}Creating a Docker VM using the above settings${CL}"
echo -e "${CREATING}${BOLD}${DGN}Creating a Docker VM using the above default settings${CL}"
}
function advanced_settings() {
# OS Selection - ALWAYS ask (at the beginning)
select_os
# Cloud-Init Selection - ALWAYS ask (at the beginning)
select_cloud_init
# Portainer Selection - ALWAYS ask (at the beginning)
select_portainer
METHOD="advanced"
[ -z "${VMID:-}" ] && VMID=$(get_valid_nextid)
while true; do
@ -389,15 +255,15 @@ function advanced_settings() {
done
if MACH=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "MACHINE TYPE" --radiolist --cancel-button Exit-Script "Choose Type" 10 58 2 \
"q35" "Q35 (Modern, PCIe)" ON \
"i440fx" "i440fx (Legacy, PCI)" OFF \
"i440fx" "Machine i440fx" ON \
"q35" "Machine q35" OFF \
3>&1 1>&2 2>&3); then
if [ $MACH = q35 ]; then
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}Q35 (Modern)${CL}"
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}$MACH${CL}"
FORMAT=""
MACHINE=" -machine q35"
else
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx (Legacy)${CL}"
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}$MACH${CL}"
FORMAT=",efitype=4m"
MACHINE=""
fi
@ -448,8 +314,8 @@ function advanced_settings() {
fi
if CPU_TYPE1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CPU MODEL" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
"1" "Host (Recommended)" ON \
"0" "KVM64" OFF \
"0" "KVM64 (Default)" ON \
"1" "Host" OFF \
3>&1 1>&2 2>&3); then
if [ $CPU_TYPE1 = "1" ]; then
echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}Host${CL}"
@ -596,18 +462,8 @@ else
fi
msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location."
msg_ok "Virtual Machine ID is ${CL}${BL}$VMID${CL}."
if ! command -v virt-customize &>/dev/null; then
msg_info "Installing Pre-Requisite libguestfs-tools onto Host"
apt-get -qq update >/dev/null
apt-get -qq install libguestfs-tools lsb-release -y >/dev/null
# Workaround for Proxmox VE 9.0 libguestfs issue
apt-get -qq install dhcpcd-base -y >/dev/null 2>&1 || true
msg_ok "Installed libguestfs-tools successfully"
fi
msg_info "Retrieving the URL for the ${OS_DISPLAY} Qcow2 Disk Image"
URL=$(get_image_url)
msg_info "Retrieving the URL for the Debian 12 Qcow2 Disk Image"
URL="https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-nocloud-$(dpkg --print-architecture).qcow2"
sleep 2
msg_ok "${CL}${BL}${URL}${CL}"
curl -f#SL -o "$(basename "$URL")" "$URL"
@ -637,162 +493,32 @@ for i in {0,1}; do
eval DISK${i}_REF=${STORAGE}:${DISK_REF:-}${!disk}
done
echo -e "${INFO}${BOLD}${GN}Preparing ${OS_DISPLAY} Qcow2 Disk Image${CL}"
# Set DNS for libguestfs appliance environment (not the guest)
export LIBGUESTFS_BACKEND_SETTINGS=dns=8.8.8.8,1.1.1.1
# Always create first-boot installation script as fallback
virt-customize -q -a "${FILE}" --run-command "cat > /root/install-docker.sh << 'INSTALLEOF'
#!/bin/bash
# Log output to file
exec > /var/log/install-docker.log 2>&1
echo \"[\\$(date)] Starting Docker installation on first boot\"
# Check if Docker is already installed
if command -v docker >/dev/null 2>&1; then
echo \"[\\$(date)] Docker already installed, checking if running\"
systemctl start docker 2>/dev/null || true
if docker info >/dev/null 2>&1; then
echo \"[\\$(date)] Docker is already working, exiting\"
exit 0
fi
if ! command -v virt-customize &>/dev/null; then
msg_info "Installing Pre-Requisite libguestfs-tools onto Host"
apt-get -qq update >/dev/null
apt-get -qq install libguestfs-tools lsb-release -y >/dev/null
# Workaround for Proxmox VE 9.0 libguestfs issue
apt-get -qq install dhcpcd-base -y >/dev/null 2>&1 || true
msg_ok "Installed libguestfs-tools successfully"
fi
# Wait for network to be fully available
for i in {1..30}; do
if ping -c 1 8.8.8.8 >/dev/null 2>&1; then
echo \"[\\$(date)] Network is available\"
break
fi
echo \"[\\$(date)] Waiting for network... attempt \\$i/30\"
sleep 2
done
# Configure DNS
echo \"[\\$(date)] Configuring DNS\"
mkdir -p /etc/systemd/resolved.conf.d
cat > /etc/systemd/resolved.conf.d/dns.conf << DNSEOF
[Resolve]
DNS=8.8.8.8 1.1.1.1
FallbackDNS=8.8.4.4 1.0.0.1
DNSEOF
systemctl restart systemd-resolved 2>/dev/null || true
# Update package lists
echo \"[\\$(date)] Updating package lists\"
apt-get update
# Install base packages if not already installed
echo \"[\\$(date)] Installing base packages\"
apt-get install -y qemu-guest-agent curl ca-certificates 2>/dev/null || true
# Install Docker
echo \"[\\$(date)] Installing Docker\"
curl -fsSL https://get.docker.com | sh
systemctl enable docker
systemctl start docker
# Wait for Docker to be ready
for i in {1..10}; do
if docker info >/dev/null 2>&1; then
echo \"[\\$(date)] Docker is ready\"
break
fi
sleep 1
done
# Install Portainer if requested
INSTALL_PORTAINER_PLACEHOLDER
# Create completion flag
echo \"[\\$(date)] Docker installation completed successfully\"
touch /root/.docker-installed
INSTALLEOF" >/dev/null
# Replace Portainer placeholder based on user choice
if [ "$INSTALL_PORTAINER" = "yes" ]; then
virt-customize -q -a "${FILE}" --run-command "sed -i 's|INSTALL_PORTAINER_PLACEHOLDER|echo \"[\\\\\\$(date)] Installing Portainer\"\\\ndocker volume create portainer_data\\\ndocker run -d -p 9000:9000 -p 9443:9443 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest\\\necho \"[\\\\\\$(date)] Portainer installed and started\"|' /root/install-docker.sh" >/dev/null
else
virt-customize -q -a "${FILE}" --run-command "sed -i 's|INSTALL_PORTAINER_PLACEHOLDER|echo \"[\\\\\\$(date)] Skipping Portainer installation\"|' /root/install-docker.sh" >/dev/null
fi
virt-customize -q -a "${FILE}" --run-command "chmod +x /root/install-docker.sh" >/dev/null
virt-customize -q -a "${FILE}" --run-command "cat > /etc/systemd/system/install-docker.service << 'SERVICEEOF'
[Unit]
Description=Install Docker on First Boot
After=network-online.target
Wants=network-online.target
ConditionPathExists=!/root/.docker-installed
[Service]
Type=oneshot
ExecStart=/root/install-docker.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
SERVICEEOF" >/dev/null
virt-customize -q -a "${FILE}" --run-command "systemctl enable install-docker.service" >/dev/null
# Try to install packages and Docker during image customization
DOCKER_INSTALLED_ON_FIRST_BOOT="yes" # Assume first-boot by default
msg_info "Installing base packages (qemu-guest-agent, curl, ca-certificates)"
if virt-customize -a "${FILE}" --install qemu-guest-agent,curl,ca-certificates >/dev/null 2>&1; then
msg_ok "Installed base packages"
msg_info "Installing Docker via get.docker.com"
if virt-customize -q -a "${FILE}" --run-command "curl -fsSL https://get.docker.com | sh" >/dev/null 2>&1 &&
virt-customize -q -a "${FILE}" --run-command "systemctl enable docker" >/dev/null 2>&1; then
msg_ok "Installed Docker"
# Optimize Docker daemon configuration
virt-customize -q -a "${FILE}" --run-command "mkdir -p /etc/docker" >/dev/null 2>&1
virt-customize -q -a "${FILE}" --run-command "cat > /etc/docker/daemon.json << 'DOCKEREOF'
{
\"storage-driver\": \"overlay2\",
\"log-driver\": \"json-file\",
\"log-opts\": {
\"max-size\": \"10m\",
\"max-file\": \"3\"
}
}
DOCKEREOF" >/dev/null 2>&1
# Create completion flag to prevent first-boot script from running
virt-customize -q -a "${FILE}" --run-command "touch /root/.docker-installed" >/dev/null 2>&1
DOCKER_INSTALLED_ON_FIRST_BOOT="no"
else
msg_ok "Docker will be installed on first boot (installation failed during image preparation)"
fi
else
msg_ok "Packages will be installed on first boot (network not available during image preparation)"
fi
# Set hostname and clean machine-id
virt-customize -q -a "${FILE}" --hostname "${HN}" >/dev/null 2>&1
virt-customize -q -a "${FILE}" --run-command "truncate -s 0 /etc/machine-id" >/dev/null 2>&1
virt-customize -q -a "${FILE}" --run-command "rm -f /var/lib/dbus/machine-id" >/dev/null 2>&1
# Configure SSH to allow root login with password when Cloud-Init is enabled
# (Cloud-Init will set the password, but SSH needs to accept password authentication)
if [ "$USE_CLOUD_INIT" = "yes" ]; then
virt-customize -q -a "${FILE}" --run-command "sed -i 's/^#*PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config" >/dev/null 2>&1 || true
virt-customize -q -a "${FILE}" --run-command "sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config" >/dev/null 2>&1 || true
fi
msg_info "Adding Docker and Docker Compose Plugin to Debian 12 Qcow2 Disk Image"
virt-customize -q -a "${FILE}" --install qemu-guest-agent,apt-transport-https,ca-certificates,curl,gnupg,software-properties-common,lsb-release >/dev/null &&
virt-customize -q -a "${FILE}" --run-command "mkdir -p /etc/apt/keyrings && curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg" >/dev/null &&
virt-customize -q -a "${FILE}" --run-command "echo 'deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian bookworm stable' > /etc/apt/sources.list.d/docker.list" >/dev/null &&
virt-customize -q -a "${FILE}" --run-command "apt-get update -qq && apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin" >/dev/null &&
virt-customize -q -a "${FILE}" --run-command "systemctl enable docker" >/dev/null &&
virt-customize -q -a "${FILE}" --hostname "${HN}" >/dev/null &&
virt-customize -q -a "${FILE}" --run-command "echo -n > /etc/machine-id" >/dev/null
msg_ok "Added Docker and Docker Compose Plugin to Debian 12 Qcow2 Disk Image successfully"
msg_info "Expanding root partition to use full disk space"
qemu-img create -f qcow2 expanded.qcow2 ${DISK_SIZE} >/dev/null 2>&1
virt-resize --quiet --expand /dev/sda1 ${FILE} expanded.qcow2 >/dev/null 2>&1
virt-resize --expand /dev/sda1 ${FILE} expanded.qcow2 >/dev/null 2>&1
mv expanded.qcow2 ${FILE} >/dev/null 2>&1
msg_ok "Expanded image to full size"
msg_info "Creating a Docker VM"
qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios ovmf${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \
-name $HN -tags community-script -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
@ -802,22 +528,9 @@ qm set $VMID \
-scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=${DISK_SIZE} \
-boot order=scsi0 \
-serial0 socket >/dev/null
qm resize $VMID scsi0 8G >/dev/null
qm set $VMID --agent enabled=1 >/dev/null
# Proxmox 9: Enable I/O Thread for better disk performance
if [ "${PVE_MAJOR:-8}" = "9" ]; then
qm set $VMID -iothread 1 >/dev/null 2>&1 || true
fi
msg_ok "Created a Docker VM ${CL}${BL}(${HN})${CL}"
# Add Cloud-Init drive if requested
if [ "$USE_CLOUD_INIT" = "yes" ]; then
msg_info "Configuring Cloud-Init"
setup_cloud_init "$VMID" "$STORAGE" "$HN" "yes" >/dev/null 2>&1
msg_ok "Cloud-Init configured"
fi
DESCRIPTION=$(
cat <<EOF
<div align='center'>
@ -850,57 +563,11 @@ EOF
)
qm set "$VMID" -description "$DESCRIPTION" >/dev/null
msg_ok "Created a Docker VM ${CL}${BL}(${HN})"
if [ "$START_VM" == "yes" ]; then
msg_info "Starting Docker VM"
qm start $VMID >/dev/null 2>&1
qm start $VMID
msg_ok "Started Docker VM"
fi
# Try to get VM IP address silently in background (max 10 seconds)
VM_IP=""
if [ "$START_VM" == "yes" ]; then
for i in {1..5}; do
VM_IP=$(qm guest cmd "$VMID" network-get-interfaces 2>/dev/null |
jq -r '.[] | select(.name != "lo") | ."ip-addresses"[]? | select(."ip-address-type" == "ipv4") | ."ip-address"' 2>/dev/null |
grep -v "^127\." | head -1)
if [ -n "$VM_IP" ]; then
break
fi
sleep 2
done
fi
# Display information about installed components
echo -e "\n${INFO}${BOLD}${GN}VM Configuration Summary:${CL}"
echo -e "${TAB}${DGN}VM ID: ${BGN}${VMID}${CL}"
echo -e "${TAB}${DGN}Hostname: ${BGN}${HN}${CL}"
echo -e "${TAB}${DGN}OS: ${BGN}${OS_DISPLAY}${CL}"
if [ -n "$VM_IP" ]; then
echo -e "${TAB}${DGN}IP Address: ${BGN}${VM_IP}${CL}"
fi
if [ "$DOCKER_INSTALLED_ON_FIRST_BOOT" = "yes" ]; then
echo -e "${TAB}${DGN}Docker: ${BGN}Will be installed on first boot${CL}"
echo -e "${TAB}${YW}⚠️ Docker installation will happen automatically after VM starts${CL}"
echo -e "${TAB}${YW}⚠️ Wait 2-3 minutes after boot for installation to complete${CL}"
echo -e "${TAB}${YW}⚠️ Check installation progress: ${BL}cat /var/log/install-docker.log${CL}"
else
echo -e "${TAB}${DGN}Docker: ${BGN}Latest (via get.docker.com)${CL}"
fi
if [ "$INSTALL_PORTAINER" = "yes" ]; then
if [ -n "$VM_IP" ]; then
echo -e "${TAB}${DGN}Portainer: ${BGN}https://${VM_IP}:9443${CL}"
else
echo -e "${TAB}${DGN}Portainer: ${BGN}Will be accessible at https://<VM-IP>:9443${CL}"
echo -e "${TAB}${YW}⚠️ Get IP with: ${BL}qm guest cmd ${VMID} network-get-interfaces${CL}"
fi
fi
if [ "$USE_CLOUD_INIT" = "yes" ]; then
display_cloud_init_info "$VMID" "$HN"
fi
post_update_to_api "done" "none"
msg_ok "Completed Successfully!\n"