mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-12-16 20:23:32 +01:00
Compare commits
357 Commits
2025-12-01
...
github-act
| Author | SHA1 | Date | |
|---|---|---|---|
| d343367b7c | |||
| 5a263b5036 | |||
| 60635feeab | |||
| 7261ffe8a2 | |||
| 44ea7cecb8 | |||
| 5f6af94ca6 | |||
| 059aaac914 | |||
| 951fb3d53a | |||
| 000c8b5fc9 | |||
| baaf6a9f58 | |||
| 4ff31f3dcf | |||
| 0dd4a9e6ed | |||
| 3dc2ea7d50 | |||
| 1333624879 | |||
| c1831f9bc8 | |||
| 4b09cb3d00 | |||
| 01b147d28a | |||
| e95ae11f88 | |||
| f2a2ec30ba | |||
| 798015df6f | |||
| 2773faee08 | |||
| b524cbe232 | |||
| 7b55077a00 | |||
| 7ab0327376 | |||
| 51ba8ca7c8 | |||
| 6d78e4da6b | |||
| a3fb28105d | |||
| cc7eb7fd35 | |||
| b605e463d1 | |||
| 71c2f4e7f8 | |||
| 648ca5e4d0 | |||
| 0917921225 | |||
| c269dc3b13 | |||
| d0a09ccd5d | |||
| 494ab1cee3 | |||
| 568bbb7f32 | |||
| 3026a405c8 | |||
| 7d98f80eb7 | |||
| f4c1b68881 | |||
| a949a1cc97 | |||
| 1e6b9a7001 | |||
| 8672aa075a | |||
| aaa20f7845 | |||
| 6da27a7112 | |||
| 8e07685aab | |||
| 5ba55d1f5a | |||
| 126b0c339a | |||
| c2034039e8 | |||
| 9374e5d183 | |||
| 6311584fef | |||
| 5bbf0861e9 | |||
| 7cb02a0cc3 | |||
| 010e8d5f27 | |||
| 2b322bf182 | |||
| d12215dea8 | |||
| f258ab7ae5 | |||
| 33f167f278 | |||
| 3568cf52f9 | |||
| 5f5144c661 | |||
| 09134d94dd | |||
| 33103ad256 | |||
| fd75da89c4 | |||
| ee49576f3a | |||
| e651c14f76 | |||
| 1fc5c031cc | |||
| 35793051a1 | |||
| 9a6a0379a6 | |||
| 4fab369a5b | |||
| f977f6c987 | |||
| 2524dd1af7 | |||
| dfcaa70647 | |||
| 7b911403a3 | |||
| 1a96ed2221 | |||
| b180694d46 | |||
| f807ec748d | |||
| b9f29f2bd3 | |||
| 66aa0f163a | |||
| e22284635a | |||
| c978c49cc9 | |||
| 882babeaf3 | |||
| a411d780ea | |||
| 86a3099452 | |||
| 26a8caa2eb | |||
| 415a2c1215 | |||
| 308a1cb91e | |||
| 1e97124c0c | |||
| 3f8685067f | |||
| 5adf98fada | |||
| 4cd81a9769 | |||
| d83af67c62 | |||
| e9d14b3a15 | |||
| 13cbe0fdbf | |||
| 52db0d94ed | |||
| e38436340b | |||
| 139e86b945 | |||
| a91151549d | |||
| 5ec7d0fd4d | |||
| 02911dc07c | |||
| 1bb3837646 | |||
| 8e6f911963 | |||
| 05a66e3729 | |||
| 5ef41a8ef0 | |||
| 9f264ff4a1 | |||
| 21f55e5cab | |||
| d3f21bf6a0 | |||
| c1a953cd29 | |||
| 909c323b57 | |||
| d03b38ea13 | |||
| 276e1bbf10 | |||
| 6135f1f8a6 | |||
| cf14c1b540 | |||
| e27a68275b | |||
| ec433b3abc | |||
| b4db6a6c70 | |||
| 11a407b54f | |||
| af5172a8cf | |||
| 115ea10ecd | |||
| 8549f2a84d | |||
| c80c2a2ecb | |||
| 7255edc21b | |||
| 18d620705d | |||
| 2b1f62e74f | |||
| f5b0c03362 | |||
| 1afefd20e9 | |||
| 723f9d63d6 | |||
| 1ea0172b75 | |||
| ef63f853b4 | |||
| 179233810e | |||
| 748c08ddb5 | |||
| de944792de | |||
| 091271c8d6 | |||
| 7fae5d71f5 | |||
| 3bc45aa0a2 | |||
| 313b1b0b00 | |||
| 3ad0777048 | |||
| 7dcb2fa985 | |||
| 6e86fa4c3b | |||
| 747e472d1f | |||
| 38a9ad8e09 | |||
| 5854318163 | |||
| 39eda9cb81 | |||
| c757c7a8eb | |||
| 94126be8f9 | |||
| d2cce38266 | |||
| 59fa15af88 | |||
| cafee135c4 | |||
| fe8e1be644 | |||
| 840bdae6f3 | |||
| 6352694326 | |||
| fb5fc0524b | |||
| 9cbbcbdda5 | |||
| 300b4d2a3a | |||
| 0ed1e36d9d | |||
| ca27ae4e4c | |||
| 43f1e88b98 | |||
| f98d2d3d15 | |||
| e22f9fbce7 | |||
| 12e8ca6a95 | |||
| b9967cb56a | |||
| 4134136918 | |||
| da7cafd82c | |||
| 7800578ad4 | |||
| 7c39bc8787 | |||
| 7a91dc765a | |||
| 8b858f4a65 | |||
| 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 | |||
| a748be9a1f | |||
| 4d4ced6b63 | |||
| a5d017c83b | |||
| 5378d822f8 | |||
| 243cb34d47 | |||
| 59699425f8 | |||
| 155a8571ba | |||
| 1cae72bdec | |||
| 531ecad4c7 | |||
| 9e8ab9de01 | |||
| 70557798ec | |||
| 4b554900ca | |||
| 9f84eae07f | |||
| ba5bdd94ad | |||
| d18baa2177 | |||
| 779c06f232 | |||
| 9e2b6524c4 | |||
| a328d7b8ba | |||
| dfa4d82951 | |||
| 5e5a8cd104 | |||
| 0da3231d3c | |||
| 5a6a30e594 | |||
| 97ac2520ec | |||
| bd5fe17228 | |||
| f42586c083 | |||
| fab5539c82 | |||
| 1ecb5bbeab | |||
| 64dbd4e9f7 | |||
| 2ba63b28f0 | |||
| 2a3b09b413 | |||
| d6ca5676df | |||
| 478194ba1a | |||
| d241c03b3d | |||
| 8cd037ff88 | |||
| fb15c13833 | |||
| e95541260b | |||
| a37ac14907 | |||
| 74a870bc5c | |||
| e0f65f2db8 | |||
| 01b246f375 | |||
| 53dd0efddd | |||
| f31978a503 | |||
| 4971bc46be | |||
| 28b894db2b | |||
| 6ec4aeb4f0 | |||
| 6409d64b93 | |||
| 08cb3cc76a | |||
| 170d44e2aa | |||
| b436ba548d | |||
| ed435d58d6 | |||
| dd5993d7ab | |||
| 0c2521c05e | |||
| 89595627a6 | |||
| a0e8ee2130 | |||
| e462aba7c2 | |||
| 338762b30b | |||
| bda700a6c3 | |||
| 976b9188a0 | |||
| 2ef2ce0a4b | |||
| 6dc73981d9 | |||
| f64bed06d0 | |||
| ca4de7bbe9 | |||
| 00ccef68bf | |||
| e0dc02a3e7 | |||
| 1c325f6885 | |||
| 64407dfccb | |||
| c7f04f379c | |||
| 86491da8b5 | |||
| 0d6ea7fa59 | |||
| a0c1243c94 | |||
| 2799201cfe | |||
| f971c077d6 | |||
| d2e9997d0d | |||
| 316082eaaa | |||
| a81c074228 | |||
| 33ce3fdbc5 | |||
| e73f35e2c8 | |||
| eb53af44c9 | |||
| 7ce32cc320 | |||
| 0e263ad54e | |||
| 85c20e3b25 | |||
| 268464781e | |||
| 775caae9c9 | |||
| 0f7c201b57 | |||
| 5780dc1532 | |||
| 5333e9f4b6 | |||
| 513e11569b | |||
| 9ed56051b9 | |||
| 4b496ebf2e | |||
| 530438a721 | |||
| 62201a0872 | |||
| 8e93f5cb1d | |||
| 838e663a6d | |||
| a826769899 | |||
| a5e6810872 | |||
| 7c73dac819 | |||
| cf616cbc9f | |||
| 84057a657a | |||
| fc1389ce8f | |||
| 952c35ecc7 | |||
| d41538e1b1 | |||
| 3b84a80f7a | |||
| cb7fb45edb | |||
| 462b68637d | |||
| fb12b1eea6 | |||
| 41329f919a | |||
| 72efc88a96 | |||
| d29a11acda | |||
| 5fd2a7cade | |||
| 3d4e7ea986 | |||
| 7d40b03359 | |||
| 1c9e03d6b7 | |||
| 056d064584 | |||
| 1603d930ae | |||
| 4801aca8aa | |||
| 5d1c6a7460 | |||
| c34a229f02 | |||
| 6944797213 | |||
| 1b1677ab7c | |||
| 833866d097 | |||
| 277abdf0e4 | |||
| 3ab710472c | |||
| a06cab39a9 | |||
| 0f1db8cc8e | |||
| fc2f72b2ac | |||
| 433aafe365 | |||
| 7978c3176c | |||
| e53bb2d825 | |||
| d079ac7d67 | |||
| f513fd09db | |||
| fb118eb0ca | |||
| dd440be505 | |||
| dcbec67b65 | |||
| 34b17c4b18 | |||
| 3bc2c968ab | |||
| 188e33485b | |||
| b55deb69ac | |||
| 787882db51 | |||
| 3e2c9c997c | |||
| 55fed2209d | |||
| b4feb4331d | |||
| 183dc7ac69 | |||
| d52908bd6e | |||
| 327cb37a55 | |||
| d2f86996db | |||
| 8cf12d7f4d | |||
| a2c31c7eaf | |||
| fa5ccdf3f1 | |||
| bd21c9f8ad | |||
| 6341ca0cf7 |
14
.github/CONTRIBUTOR_AND_GUIDES/CODE-AUDIT.md
generated
vendored
14
.github/CONTRIBUTOR_AND_GUIDES/CODE-AUDIT.md
generated
vendored
@ -1,14 +0,0 @@
|
|||||||
<div align="center">
|
|
||||||
<img src="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo.png" height="100px" />
|
|
||||||
</div>
|
|
||||||
<h2><div align="center">Exploring the Scripts and Steps Involved in an Application LXC Installation</div></h2>
|
|
||||||
|
|
||||||
1) [adguard.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/ct/adguard.sh): This script collects system parameters. (Also holds the function to update the application.)
|
|
||||||
2) [build.func](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/build.func): Adds user settings and integrates collected information.
|
|
||||||
3) [create_lxc.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/create_lxc.sh): Constructs the LXC container.
|
|
||||||
4) [adguard-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/install/adguard-install.sh): Executes functions from [install.func](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/install.func), and installs the application.
|
|
||||||
5) [adguard.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/ct/adguard.sh) (again): To display the completion message.
|
|
||||||
|
|
||||||
The installation process uses reusable scripts: [build.func](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/build.func), [create_lxc.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/create_lxc.sh), and [install.func](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/install.func), which are not specific to any particular application.
|
|
||||||
|
|
||||||
To gain a better understanding, focus on reviewing [adguard-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/install/adguard-install.sh). This script contains the commands and configurations for installing and configuring AdGuard Home within the LXC container.
|
|
||||||
129
.github/CONTRIBUTOR_AND_GUIDES/CONTRIBUTING.md
generated
vendored
129
.github/CONTRIBUTOR_AND_GUIDES/CONTRIBUTING.md
generated
vendored
@ -1,129 +0,0 @@
|
|||||||
|
|
||||||
# Community Scripts Contribution Guide
|
|
||||||
|
|
||||||
## **Welcome to the communty-scripts Repository!**
|
|
||||||
|
|
||||||
📜 These documents outline the essential coding standards for all our scripts and JSON files. Adhering to these standards ensures that our codebase remains consistent, readable, and maintainable. By following these guidelines, we can improve collaboration, reduce errors, and enhance the overall quality of our project.
|
|
||||||
|
|
||||||
### Why Coding Standards Matter
|
|
||||||
|
|
||||||
Coding standards are crucial for several reasons:
|
|
||||||
|
|
||||||
1. **Consistency**: Consistent code is easier to read, understand, and maintain. It helps new team members quickly get up to speed and reduces the learning curve.
|
|
||||||
2. **Readability**: Clear and well-structured code is easier to debug and extend. It allows developers to quickly identify and fix issues.
|
|
||||||
3. **Maintainability**: Code that follows a standard structure is easier to refactor and update. It ensures that changes can be made with minimal risk of introducing new bugs.
|
|
||||||
4. **Collaboration**: When everyone follows the same standards, it becomes easier to collaborate on code. It reduces friction and misunderstandings during code reviews and merges.
|
|
||||||
|
|
||||||
### Scope of These Documents
|
|
||||||
|
|
||||||
These documents cover the coding standards for the following types of files in our project:
|
|
||||||
|
|
||||||
- **`install/$AppName-install.sh` Scripts**: These scripts are responsible for the installation of applications.
|
|
||||||
- **`ct/$AppName.sh` Scripts**: These scripts handle the creation and updating of containers.
|
|
||||||
- **`frontend/public/json/$AppName.json`**: These files store structured data and are used for the website.
|
|
||||||
|
|
||||||
Each section provides detailed guidelines on various aspects of coding, including shebang usage, comments, variable naming, function naming, indentation, error handling, command substitution, quoting, script structure, and logging. Additionally, examples are provided to illustrate the application of these standards.
|
|
||||||
|
|
||||||
By following the coding standards outlined in this document, we ensure that our scripts and JSON files are of high quality, making our project more robust and easier to manage. Please refer to this guide whenever you create or update scripts and JSON files to maintain a high standard of code quality across the project. 📚🔍
|
|
||||||
|
|
||||||
Let's work together to keep our codebase clean, efficient, and maintainable! 💪🚀
|
|
||||||
|
|
||||||
|
|
||||||
## Getting Started
|
|
||||||
|
|
||||||
Before contributing, please ensure that you have the following setup:
|
|
||||||
|
|
||||||
1. **Visual Studio Code** (recommended for script development)
|
|
||||||
2. **Recommended VS Code Extensions:**
|
|
||||||
- [Shell Syntax](https://marketplace.visualstudio.com/items?itemName=bmalehorn.shell-syntax)
|
|
||||||
- [ShellCheck](https://marketplace.visualstudio.com/items?itemName=timonwong.shellcheck)
|
|
||||||
- [Shell Format](https://marketplace.visualstudio.com/items?itemName=foxundermoon.shell-format)
|
|
||||||
|
|
||||||
### Important Notes
|
|
||||||
- Use [AppName.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.sh) and [AppName-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.sh) as templates when creating new scripts. Final version of the script (the one you will push for review), must have all comments removed, except the ones in the file header.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# 🚀 The Application Script (ct/AppName.sh)
|
|
||||||
|
|
||||||
- You can find all coding standards, as well as the structure for this file [here](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.md).
|
|
||||||
- These scripts are responsible for container creation, setting the necessary variables and handling the update of the application once installed.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# 🛠 The Installation Script (install/AppName-install.sh)
|
|
||||||
|
|
||||||
- You can find all coding standards, as well as the structure for this file [here](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.md).
|
|
||||||
- These scripts are responsible for the installation of the application.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚀 Building Your Own Scripts
|
|
||||||
|
|
||||||
Start with the [template script](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.sh)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🤝 Contribution Process
|
|
||||||
|
|
||||||
All PR's related to new scripts should be made against our Dev repository first, where we can test the scripts before they are pushed and merged in the official repository.
|
|
||||||
|
|
||||||
**Our Dev repo is `http://www.github.com/community-scripts/ProxmoxVED`**
|
|
||||||
|
|
||||||
You will need to adjust paths mentioned further down this document to match the repo you're pushing the scripts to.
|
|
||||||
|
|
||||||
### 1. Fork the repository
|
|
||||||
Fork to your GitHub account
|
|
||||||
|
|
||||||
### 2. Clone your fork on your local environment
|
|
||||||
```bash
|
|
||||||
git clone https://github.com/yourUserName/ForkName
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. Create a new branch
|
|
||||||
```bash
|
|
||||||
git switch -c your-feature-branch
|
|
||||||
```
|
|
||||||
|
|
||||||
### 4. Change paths in build.func install.func and AppName.sh
|
|
||||||
To be able to develop from your own branch you need to change:\
|
|
||||||
`https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main`\
|
|
||||||
to\
|
|
||||||
`https://raw.githubusercontent.com/[USER]/[REPOSITORY]/refs/heads/[BRANCH]`\
|
|
||||||
in following files:
|
|
||||||
|
|
||||||
`misc/build.func`\
|
|
||||||
`misc/install.func`\
|
|
||||||
`ct/AppName.sh`
|
|
||||||
|
|
||||||
Example: `https://raw.githubusercontent.com/tremor021/PromoxVE/refs/heads/testbranch`
|
|
||||||
|
|
||||||
Also you need to change:\
|
|
||||||
`https://raw.githubusercontent.com/community-scripts/ProxmoxVE/raw/main`\
|
|
||||||
to\
|
|
||||||
`https://raw.githubusercontent.com/[USER]/[REPOSITORY]/raw/[BRANCH]`\
|
|
||||||
in `misc/install.func` in order for `update` shell command to work.\
|
|
||||||
These changes are only while writing and testing your scripts. Before opening a Pull Request, you should change all above mentioned paths in `misc/build.func`, `misc/install.func` and `ct/AppName.sh` to point to the original paths.
|
|
||||||
|
|
||||||
### 4. Commit changes (without build.func and install.func!)
|
|
||||||
```bash
|
|
||||||
git commit -m "Your commit message"
|
|
||||||
```
|
|
||||||
|
|
||||||
### 5. Push to your fork
|
|
||||||
```bash
|
|
||||||
git push origin your-feature-branch
|
|
||||||
```
|
|
||||||
|
|
||||||
### 6. Create a Pull Request
|
|
||||||
Open a Pull Request from your feature branch to the main branch on the Dev repository. You must only include your **$AppName.sh**, **$AppName-install.sh** and **$AppName.json** files in the pull request.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📚 Pages
|
|
||||||
|
|
||||||
- [CT Template: AppName.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.sh)
|
|
||||||
- [Install Template: AppName-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.sh)
|
|
||||||
- [JSON Template: AppName.json](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/json/AppName.json)
|
|
||||||
|
|
||||||
|
|
||||||
44
.github/CONTRIBUTOR_AND_GUIDES/USER_SUBMITTED_GUIDES.md
generated
vendored
44
.github/CONTRIBUTOR_AND_GUIDES/USER_SUBMITTED_GUIDES.md
generated
vendored
@ -1,44 +0,0 @@
|
|||||||
<div align="center">
|
|
||||||
<a href="#">
|
|
||||||
<img src="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo.png" height="100px" />
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<h2 align="center">User Submitted Guides </h2>
|
|
||||||
|
|
||||||
<sub> In order to contribute a guide on installing with Proxmox VE Helper Scripts, you should open a pull request that adds the guide to the `USER_SUBMITTED_GUIDES.md` file. </sub>
|
|
||||||
|
|
||||||
[Proxmox Automation with Proxmox Helper Scripts!](https://www.youtube.com/watch?v=kcpu4z5eSEU)
|
|
||||||
|
|
||||||
[Installing Home Assistant OS using Proxmox 8](https://community.home-assistant.io/t/installing-home-assistant-os-using-proxmox-8/201835)
|
|
||||||
|
|
||||||
[How To Separate Zigbee2MQTT From Home Assistant In Proxmox](https://smarthomescene.com/guides/how-to-separate-zigbee2mqtt-from-home-assistant-in-proxmox/)
|
|
||||||
|
|
||||||
[How To Install Home Assistant On Proxmox: The Easy Way](https://smarthomescene.com/guides/how-to-install-home-assistant-on-proxmox-the-easy-way/)
|
|
||||||
|
|
||||||
[Home Assistant: Installing InfluxDB (LXC)](https://www.derekseaman.com/2023/04/home-assistant-installing-influxdb-lxc.html)
|
|
||||||
|
|
||||||
[Home Assistant: Proxmox Quick Start Guide](https://www.derekseaman.com/2023/10/home-assistant-proxmox-ve-8-0-quick-start-guide-2.html)
|
|
||||||
|
|
||||||
[Home Assistant: Installing Grafana (LXC) with Let’s Encrypt SSL](https://www.derekseaman.com/2023/04/home-assistant-installing-grafana-lxc.html)
|
|
||||||
|
|
||||||
[Proxmox: Plex LXC with Alder Lake Transcoding](https://www.derekseaman.com/2023/04/proxmox-plex-lxc-with-alder-lake-transcoding.html)
|
|
||||||
|
|
||||||
[How To Backup Home Assistant In Proxmox](https://smarthomescene.com/guides/how-to-backup-home-assistant-in-proxmox/)
|
|
||||||
|
|
||||||
[Running Frigate on Proxmox](https://www.homeautomationguy.io/blog/running-frigate-on-proxmox)
|
|
||||||
|
|
||||||
[Frigate VM on Proxmox with PCIe Coral TPU](https://www.derekseaman.com/2023/06/home-assistant-frigate-vm-on-proxmox-with-pcie-coral-tpu.html)
|
|
||||||
|
|
||||||
[Moving Home Assistant’s Database To MariaDB On Proxmox](https://smarthomescene.com/guides/moving-home-assistants-database-to-mariadb-on-proxmox/)
|
|
||||||
|
|
||||||
[How-to: Proxmox VE 7.4 to 8.0 Upgrade](https://www.derekseaman.com/2023/06/how-to-proxmox-7-4-to-8-0-upgrade.html)
|
|
||||||
|
|
||||||
[iGPU Transcoding In Proxmox with Jellyfin](https://www.youtube.com/watch?v=XAa_qpNmzZs)
|
|
||||||
|
|
||||||
[Proxmox + NetData](<https://dbt3ch.com/books/proxmox-netdata-for-better-insights-and-notifications/page/proxmox-netdata-for-better-insights-and-notifications>)
|
|
||||||
|
|
||||||
[Proxmox Homelab Series](<https://blog.kye.dev/proxmox-series>)
|
|
||||||
|
|
||||||
[The fastest installation of Docker and Portainer on Proxmox VE](https://lavr.site/en-fastest-install-docker-portainer-proxmox/)
|
|
||||||
|
|
||||||
[How To Setup Proxmox Backuper Server Using Helper Scripts](<https://youtu.be/6C2JOsrZZZw?si=kkrrcL_nLCDBJkOB>)
|
|
||||||
287
.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.md
generated
vendored
287
.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.md
generated
vendored
@ -1,287 +0,0 @@
|
|||||||
# **AppName<span></span>.sh Scripts**
|
|
||||||
|
|
||||||
`AppName.sh` scripts found in the `/ct` directory. These scripts are responsible for the installation of the desired application. For this guide we take `/ct/snipeit.sh` as example.
|
|
||||||
|
|
||||||
## Table of Contents
|
|
||||||
|
|
||||||
- [**AppName.sh Scripts**](#appnamesh-scripts)
|
|
||||||
- [Table of Contents](#table-of-contents)
|
|
||||||
- [1. **File Header**](#1-file-header)
|
|
||||||
- [1.1 **Shebang**](#11-shebang)
|
|
||||||
- [1.2 **Import Functions**](#12-import-functions)
|
|
||||||
- [1.3 **Metadata**](#13-metadata)
|
|
||||||
- [2 **Variables and function import**](#2-variables-and-function-import)
|
|
||||||
- [2.1 **Default Values**](#21-default-values)
|
|
||||||
- [2.2 **📋 App output \& base settings**](#22--app-output--base-settings)
|
|
||||||
- [2.3 **🛠 Core functions**](#23--core-functions)
|
|
||||||
- [3 **Update function**](#3-update-function)
|
|
||||||
- [3.1 **Function Header**](#31-function-header)
|
|
||||||
- [3.2 **Check APP**](#32-check-app)
|
|
||||||
- [3.3 **Check version**](#33-check-version)
|
|
||||||
- [3.4 **Verbosity**](#34-verbosity)
|
|
||||||
- [3.5 **Backups**](#35-backups)
|
|
||||||
- [3.6 **Cleanup**](#36-cleanup)
|
|
||||||
- [3.7 **No update function**](#37-no-update-function)
|
|
||||||
- [4 **End of the script**](#4-end-of-the-script)
|
|
||||||
- [5. **Contribution checklist**](#5-contribution-checklist)
|
|
||||||
|
|
||||||
## 1. **File Header**
|
|
||||||
|
|
||||||
### 1.1 **Shebang**
|
|
||||||
|
|
||||||
- Use `#!/usr/bin/env bash` as the shebang.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
#!/usr/bin/env bash
|
|
||||||
```
|
|
||||||
|
|
||||||
### 1.2 **Import Functions**
|
|
||||||
|
|
||||||
- Import the build.func file.
|
|
||||||
- When developing your own script, change the URL to your own repository.
|
|
||||||
|
|
||||||
> [!IMPORTANT]
|
|
||||||
> You also need to change all apperances of this URL in `misc/build.func` and `misc/install.func`
|
|
||||||
|
|
||||||
Example for development:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
source <(curl -s https://raw.githubusercontent.com/[USER]/[REPO]/refs/heads/[BRANCH]/misc/build.func)
|
|
||||||
```
|
|
||||||
|
|
||||||
Final script:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
|
||||||
```
|
|
||||||
|
|
||||||
> [!CAUTION]
|
|
||||||
> Before opening a Pull Request, change the URLs to point to the community-scripts repo.
|
|
||||||
|
|
||||||
### 1.3 **Metadata**
|
|
||||||
|
|
||||||
- Add clear comments for script metadata, including author, copyright, and license information.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
|
||||||
# Author: [YourUserName]
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: [SOURCE_URL]
|
|
||||||
```
|
|
||||||
|
|
||||||
> [!NOTE]:
|
|
||||||
>
|
|
||||||
> - Add your username and source URL
|
|
||||||
> - For existing scripts, add "| Co-Author [YourUserName]" after the current author
|
|
||||||
> - Source is a URL of github repo containting source files of the application you're installing (not URL of your homepage or a blog)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 2 **Variables and function import**
|
|
||||||
>
|
|
||||||
> [!NOTE]
|
|
||||||
> You need to have all this set in your script, otherwise it will not work!
|
|
||||||
|
|
||||||
### 2.1 **Default Values**
|
|
||||||
|
|
||||||
- This section sets the default values for the container.
|
|
||||||
- `APP` needs to be set to the application name and must be equal to the filenames of your scripts.
|
|
||||||
- `var_tags`: You can set Tags for the CT wich show up in the Proxmox UI. Don´t overdo it!
|
|
||||||
|
|
||||||
>[!NOTE]
|
|
||||||
>Description for all Default Values
|
|
||||||
>
|
|
||||||
>| Variable | Description | Notes |
|
|
||||||
>|----------|-------------|-------|
|
|
||||||
>| `APP` | Application name | Must match ct\AppName.sh |
|
|
||||||
>| `var_tags` | Proxmox display tags without Spaces, only ; | Limit the number to 2 |
|
|
||||||
>| `var_cpu` | CPU cores | Number of cores |
|
|
||||||
>| `var_ram` | RAM | In MB |
|
|
||||||
>| `var_disk` | Disk capacity | In GB |
|
|
||||||
>| `var_os` | Operating system | alpine, debian, ubuntu |
|
|
||||||
>| `var_version` | OS version | e.g., 3.20, 11, 12, 20.04 |
|
|
||||||
>| `var_unprivileged` | Container type | 1 = Unprivileged, 0 = Privileged |
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
APP="SnipeIT"
|
|
||||||
var_tags="${var_tags:-asset-management;foss}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-2048}"
|
|
||||||
var_disk="${var_disk:-4}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-12}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
```
|
|
||||||
|
|
||||||
## 2.2 **📋 App output & base settings**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
header_info "$APP"
|
|
||||||
```
|
|
||||||
- `header_info`: Generates ASCII header for APP
|
|
||||||
|
|
||||||
## 2.3 **🛠 Core functions**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
```
|
|
||||||
|
|
||||||
- `variables`: Processes input and prepares variables
|
|
||||||
- `color`: Sets icons, colors, and formatting
|
|
||||||
- `catch_errors`: Enables error handling
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 3 **Update function**
|
|
||||||
|
|
||||||
### 3.1 **Function Header**
|
|
||||||
|
|
||||||
- If applicable write a function that updates the application and the OS in the container.
|
|
||||||
- Each update function starts with the same code:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3.2 **Check APP**
|
|
||||||
|
|
||||||
- Before doing anything update-wise, check if the app is installed in the container.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
if [[ ! -d /opt/snipe-it ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3.3 **Check version**
|
|
||||||
|
|
||||||
- Before updating, check if a new version exists.
|
|
||||||
- We use the `${APPLICATION}_version.txt` file created in `/opt` during the install to compare new versions against the currently installed version.
|
|
||||||
|
|
||||||
Example with a Github Release:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/snipe/snipe-it/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
|
||||||
#DO UPDATE
|
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}."
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3.4 **Verbosity**
|
|
||||||
|
|
||||||
- Use the appropriate flag (**-q** in the examples) for a command to suppress its output.
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
wget -q
|
|
||||||
unzip -q
|
|
||||||
```
|
|
||||||
|
|
||||||
- If a command does not come with this functionality use `$STD` to suppress it's output.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$STD php artisan migrate --force
|
|
||||||
$STD php artisan config:clear
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3.5 **Backups**
|
|
||||||
|
|
||||||
- Backup user data if necessary.
|
|
||||||
- Move all user data back in the directory when the update is finished.
|
|
||||||
|
|
||||||
>[!NOTE]
|
|
||||||
>This is not meant to be a permanent backup
|
|
||||||
|
|
||||||
Example backup:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
mv /opt/snipe-it /opt/snipe-it-backup
|
|
||||||
```
|
|
||||||
|
|
||||||
Example config restore:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cp /opt/snipe-it-backup/.env /opt/snipe-it/.env
|
|
||||||
cp -r /opt/snipe-it-backup/public/uploads/ /opt/snipe-it/public/uploads/
|
|
||||||
cp -r /opt/snipe-it-backup/storage/private_uploads /opt/snipe-it/storage/private_uploads
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3.6 **Cleanup**
|
|
||||||
|
|
||||||
- Do not forget to remove any temporary files/folders such as zip-files or temporary backups.
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
rm -rf /opt/v${RELEASE}.zip
|
|
||||||
rm -rf /opt/snipe-it-backup
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3.7 **No update function**
|
|
||||||
|
|
||||||
- In case you can not provide an update function use the following code to provide user feedback.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
if [[ ! -d /opt/snipeit ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
msg_error "Currently we don't provide an update function for this ${APP}."
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 4 **End of the script**
|
|
||||||
|
|
||||||
- `start`: Launches Whiptail dialogue
|
|
||||||
- `build_container`: Collects and integrates user settings
|
|
||||||
- `description`: Sets LXC container description
|
|
||||||
- With `echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"` you can point the user to the IP:PORT/folder needed to access the app.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
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}"
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 5. **Contribution checklist**
|
|
||||||
|
|
||||||
- [ ] Shebang is correctly set (`#!/usr/bin/env bash`).
|
|
||||||
- [ ] Correct link to *build.func*
|
|
||||||
- [ ] Metadata (author, license) is included at the top.
|
|
||||||
- [ ] Variables follow naming conventions.
|
|
||||||
- [ ] Update function exists.
|
|
||||||
- [ ] Update functions checks if app is installed and for new version.
|
|
||||||
- [ ] Update function cleans up temporary files.
|
|
||||||
- [ ] Script ends with a helpful message for the user to reach the application.
|
|
||||||
86
.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.sh
generated
vendored
86
.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.sh
generated
vendored
@ -1,86 +0,0 @@
|
|||||||
#!/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: [YourUserName]
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: [SOURCE_URL]
|
|
||||||
|
|
||||||
# App Default Values
|
|
||||||
# Name of the app (e.g. Google, Adventurelog, Apache-Guacamole"
|
|
||||||
APP="[APP_NAME]"
|
|
||||||
# Tags for Proxmox VE, maximum 2 pcs., no spaces allowed, separated by a semicolon ; (e.g. database | adblock;dhcp)
|
|
||||||
var_tags="${var_tags:-[TAGS]}"
|
|
||||||
# Number of cores (1-X) (e.g. 4) - default are 2
|
|
||||||
var_cpu="${var_cpu:-[CPU]}"
|
|
||||||
# Amount of used RAM in MB (e.g. 2048 or 4096)
|
|
||||||
var_ram="${var_ram:-[RAM]}"
|
|
||||||
# Amount of used disk space in GB (e.g. 4 or 10)
|
|
||||||
var_disk="${var_disk:-[DISK]}"
|
|
||||||
# Default OS (e.g. debian, ubuntu, alpine)
|
|
||||||
var_os="${var_os:-[OS]}"
|
|
||||||
# Default OS version (e.g. 12 for debian, 24.04 for ubuntu, 3.20 for alpine)
|
|
||||||
var_version="${var_version:-[VERSION]}"
|
|
||||||
# 1 = unprivileged container, 0 = privileged container
|
|
||||||
var_unprivileged="${var_unprivileged:-[UNPRIVILEGED]}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
# Check if installation is present | -f for file, -d for folder
|
|
||||||
if [[ ! -f [INSTALLATION_CHECK_PATH] ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Crawling the new version and checking whether an update is required
|
|
||||||
RELEASE=$(curl -fsSL [RELEASE_URL] | [PARSE_RELEASE_COMMAND])
|
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
|
||||||
# Stopping Services
|
|
||||||
msg_info "Stopping $APP"
|
|
||||||
systemctl stop [SERVICE_NAME]
|
|
||||||
msg_ok "Stopped $APP"
|
|
||||||
|
|
||||||
# Creating Backup
|
|
||||||
msg_info "Creating Backup"
|
|
||||||
tar -czf "/opt/${APP}_backup_$(date +%F).tar.gz" [IMPORTANT_PATHS]
|
|
||||||
msg_ok "Backup Created"
|
|
||||||
|
|
||||||
# Execute Update
|
|
||||||
msg_info "Updating $APP to v${RELEASE}"
|
|
||||||
[UPDATE_COMMANDS]
|
|
||||||
msg_ok "Updated $APP to v${RELEASE}"
|
|
||||||
|
|
||||||
# Starting Services
|
|
||||||
msg_info "Starting $APP"
|
|
||||||
systemctl start [SERVICE_NAME]
|
|
||||||
msg_ok "Started $APP"
|
|
||||||
|
|
||||||
# Cleaning up
|
|
||||||
msg_info "Cleaning Up"
|
|
||||||
rm -rf [TEMP_FILES]
|
|
||||||
msg_ok "Cleanup Completed"
|
|
||||||
|
|
||||||
# Last Action
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Update Successful"
|
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:[PORT]${CL}"
|
|
||||||
354
.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.md
generated
vendored
354
.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.md
generated
vendored
@ -1,354 +0,0 @@
|
|||||||
|
|
||||||
# **AppName<span></span>-install.sh Scripts**
|
|
||||||
|
|
||||||
`AppName-install.sh` scripts found in the `/install` directory. These scripts are responsible for the installation of the application. For this guide we take `/install/snipeit-install.sh` as example.
|
|
||||||
|
|
||||||
## Table of Contents
|
|
||||||
|
|
||||||
- [**AppName-install.sh Scripts**](#appname-installsh-scripts)
|
|
||||||
- [Table of Contents](#table-of-contents)
|
|
||||||
- [1. **File header**](#1-file-header)
|
|
||||||
- [1.1 **Shebang**](#11-shebang)
|
|
||||||
- [1.2 **Comments**](#12-comments)
|
|
||||||
- [1.3 **Variables and function import**](#13-variables-and-function-import)
|
|
||||||
- [2. **Variable naming and management**](#2-variable-naming-and-management)
|
|
||||||
- [2.1 **Naming conventions**](#21-naming-conventions)
|
|
||||||
- [3. **Dependencies**](#3-dependencies)
|
|
||||||
- [3.1 **Install all at once**](#31-install-all-at-once)
|
|
||||||
- [3.2 **Collapse dependencies**](#32-collapse-dependencies)
|
|
||||||
- [4. **Paths to application files**](#4-paths-to-application-files)
|
|
||||||
- [5. **Version management**](#5-version-management)
|
|
||||||
- [5.1 **Install the latest release**](#51-install-the-latest-release)
|
|
||||||
- [5.2 **Save the version for update checks**](#52-save-the-version-for-update-checks)
|
|
||||||
- [6. **Input and output management**](#6-input-and-output-management)
|
|
||||||
- [6.1 **User feedback**](#61-user-feedback)
|
|
||||||
- [6.2 **Verbosity**](#62-verbosity)
|
|
||||||
- [7. **String/File Manipulation**](#7-stringfile-manipulation)
|
|
||||||
- [7.1 **File Manipulation**](#71-file-manipulation)
|
|
||||||
- [8. **Security practices**](#8-security-practices)
|
|
||||||
- [8.1 **Password generation**](#81-password-generation)
|
|
||||||
- [8.2 **File permissions**](#82-file-permissions)
|
|
||||||
- [9. **Service Configuration**](#9-service-configuration)
|
|
||||||
- [9.1 **Configuration files**](#91-configuration-files)
|
|
||||||
- [9.2 **Credential management**](#92-credential-management)
|
|
||||||
- [9.3 **Enviroment files**](#93-enviroment-files)
|
|
||||||
- [9.4 **Services**](#94-services)
|
|
||||||
- [10. **Cleanup**](#10-cleanup)
|
|
||||||
- [10.1 **Remove temporary files**](#101-remove-temporary-files)
|
|
||||||
- [10.2 **Autoremove and autoclean**](#102-autoremove-and-autoclean)
|
|
||||||
- [11. **Best Practices Checklist**](#11-best-practices-checklist)
|
|
||||||
- [Example: High-Level Script Flow](#example-high-level-script-flow)
|
|
||||||
|
|
||||||
## 1. **File header**
|
|
||||||
|
|
||||||
### 1.1 **Shebang**
|
|
||||||
|
|
||||||
- Use `#!/usr/bin/env bash` as the shebang.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
#!/usr/bin/env bash
|
|
||||||
```
|
|
||||||
|
|
||||||
### 1.2 **Comments**
|
|
||||||
|
|
||||||
- Add clear comments for script metadata, including author, copyright, and license information.
|
|
||||||
- Use meaningful inline comments to explain complex commands or logic.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
|
||||||
# Author: [YourUserName]
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: [SOURCE_URL]
|
|
||||||
```
|
|
||||||
|
|
||||||
> [!NOTE]:
|
|
||||||
>
|
|
||||||
> - Add your username
|
|
||||||
> - When updating/reworking scripts, add "| Co-Author [YourUserName]"
|
|
||||||
> - Source is a URL of github repo containting source files of the application you're installing (not URL of your homepage or a blog)
|
|
||||||
|
|
||||||
### 1.3 **Variables and function import**
|
|
||||||
|
|
||||||
- This sections adds the support for all needed functions and variables.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
|
||||||
color
|
|
||||||
verb_ip6
|
|
||||||
catch_errors
|
|
||||||
setting_up_container
|
|
||||||
network_check
|
|
||||||
update_os
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 2. **Variable naming and management**
|
|
||||||
|
|
||||||
### 2.1 **Naming conventions**
|
|
||||||
|
|
||||||
- Use uppercase names for constants and environment variables.
|
|
||||||
- Use lowercase names for local script variables.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
DB_NAME=snipeit_db # Environment-like variable (constant)
|
|
||||||
db_user="snipeit" # Local variable
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 3. **Dependencies**
|
|
||||||
|
|
||||||
### 3.1 **Install all at once**
|
|
||||||
|
|
||||||
- Install all dependencies with a single command if possible
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$STD apt-get install -y \
|
|
||||||
composer \
|
|
||||||
git \
|
|
||||||
nginx
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3.2 **Collapse dependencies**
|
|
||||||
|
|
||||||
Collapse dependencies to keep the code readable.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
Use
|
|
||||||
|
|
||||||
```bash
|
|
||||||
php8.2-{bcmath,common,ctype}
|
|
||||||
```
|
|
||||||
|
|
||||||
instead of
|
|
||||||
|
|
||||||
```bash
|
|
||||||
php8.2-bcmath php8.2-common php8.2-ctype
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 4. **Paths to application files**
|
|
||||||
|
|
||||||
If possible install the app and all necessary files in `/opt/`
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 5. **Version management**
|
|
||||||
|
|
||||||
### 5.1 **Install the latest release**
|
|
||||||
|
|
||||||
- Always try and install the latest release
|
|
||||||
- Do not hardcode any version if not absolutely necessary
|
|
||||||
|
|
||||||
Example for a git release:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/snipe/snipe-it/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
curl -fsSL "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
|
|
||||||
```
|
|
||||||
|
|
||||||
### 5.2 **Save the version for update checks**
|
|
||||||
|
|
||||||
- Write the installed version into a file.
|
|
||||||
- This is used for the update function in **AppName.sh** to check for if a Update is needed.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 6. **Input and output management**
|
|
||||||
|
|
||||||
### 6.1 **User feedback**
|
|
||||||
|
|
||||||
- Use standard functions like `msg_info`, `msg_ok` or `msg_error` to print status messages.
|
|
||||||
- Each `msg_info` must be followed with a `msg_ok` before any other output is made.
|
|
||||||
- Display meaningful progress messages at key stages.
|
|
||||||
- Taking user input with `read -p` must be outside of `msg_info`...`msg_ok` code block
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
msg_info "Installing Dependencies"
|
|
||||||
$STD apt-get install -y ...
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
read -p "${TAB3}Do you wish to enable HTTPS mode? (y/N): " httpschoice
|
|
||||||
```
|
|
||||||
|
|
||||||
### 6.2 **Verbosity**
|
|
||||||
|
|
||||||
- Use the appropiate flag (**-q** in the examples) for a command to suppres its output
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
wget -q
|
|
||||||
unzip -q
|
|
||||||
```
|
|
||||||
|
|
||||||
- If a command dose not come with such a functionality use `$STD` (a custom standard redirection variable) for managing output verbosity.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$STD apt-get install -y nginx
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 7. **String/File Manipulation**
|
|
||||||
|
|
||||||
### 7.1 **File Manipulation**
|
|
||||||
|
|
||||||
- Use `sed` to replace placeholder values in configuration files.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sed -i -e "s|^DB_DATABASE=.*|DB_DATABASE=$DB_NAME|" \
|
|
||||||
-e "s|^DB_USERNAME=.*|DB_USERNAME=$DB_USER|" \
|
|
||||||
-e "s|^DB_PASSWORD=.*|DB_PASSWORD=$DB_PASS|" .env
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 8. **Security practices**
|
|
||||||
|
|
||||||
### 8.1 **Password generation**
|
|
||||||
|
|
||||||
- Use `openssl` to generate random passwords.
|
|
||||||
- Use only alphanumeric values to not introduce unknown behaviour.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
|
||||||
```
|
|
||||||
|
|
||||||
### 8.2 **File permissions**
|
|
||||||
|
|
||||||
Explicitly set secure ownership and permissions for sensitive files.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
chown -R www-data: /opt/snipe-it
|
|
||||||
chmod -R 755 /opt/snipe-it
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 9. **Service Configuration**
|
|
||||||
|
|
||||||
### 9.1 **Configuration files**
|
|
||||||
|
|
||||||
Use `cat <<EOF` to write configuration files in a clean and readable way.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cat <<EOF >/etc/nginx/conf.d/snipeit.conf
|
|
||||||
server {
|
|
||||||
listen 80;
|
|
||||||
root /opt/snipe-it/public;
|
|
||||||
index index.php;
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
```
|
|
||||||
|
|
||||||
### 9.2 **Credential management**
|
|
||||||
|
|
||||||
Store the generated credentials in a file.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
USERNAME=username
|
|
||||||
PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
|
||||||
{
|
|
||||||
echo "Application-Credentials"
|
|
||||||
echo "Username: $USERNAME"
|
|
||||||
echo "Password: $PASSWORD"
|
|
||||||
} >> ~/application.creds
|
|
||||||
```
|
|
||||||
|
|
||||||
### 9.3 **Enviroment files**
|
|
||||||
|
|
||||||
Use `cat <<EOF` to write enviromental files in a clean and readable way.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cat <<EOF >/path/to/.env
|
|
||||||
VARIABLE="value"
|
|
||||||
PORT=3000
|
|
||||||
DB_NAME="${DB_NAME}"
|
|
||||||
EOF
|
|
||||||
```
|
|
||||||
|
|
||||||
### 9.4 **Services**
|
|
||||||
|
|
||||||
Enable affected services after configuration changes and start them right away.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
systemctl enable -q --now nginx
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 10. **Cleanup**
|
|
||||||
|
|
||||||
### 10.1 **Remove temporary files**
|
|
||||||
|
|
||||||
Remove temporary files and downloads after use.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
rm -rf /opt/v${RELEASE}.zip
|
|
||||||
```
|
|
||||||
|
|
||||||
### 10.2 **Autoremove and autoclean**
|
|
||||||
|
|
||||||
Remove unused dependencies to reduce disk space usage.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
apt-get -y autoremove
|
|
||||||
apt-get -y autoclean
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 11. **Best Practices Checklist**
|
|
||||||
|
|
||||||
- [ ] Shebang is correctly set (`#!/usr/bin/env bash`).
|
|
||||||
- [ ] Metadata (author, license) is included at the top.
|
|
||||||
- [ ] Variables follow naming conventions.
|
|
||||||
- [ ] Sensitive values are dynamically generated.
|
|
||||||
- [ ] Files and services have proper permissions.
|
|
||||||
- [ ] Script cleans up temporary files.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Example: High-Level Script Flow
|
|
||||||
|
|
||||||
1. Dependencies installation
|
|
||||||
2. Database setup
|
|
||||||
3. Download and configure application
|
|
||||||
4. Service configuration
|
|
||||||
5. Final cleanup
|
|
||||||
78
.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.sh
generated
vendored
78
.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.sh
generated
vendored
@ -1,78 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
|
||||||
# Author: [YourUserName]
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: [SOURCE_URL]
|
|
||||||
|
|
||||||
# Import Functions und Setup
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
|
||||||
color
|
|
||||||
verb_ip6
|
|
||||||
catch_errors
|
|
||||||
setting_up_container
|
|
||||||
network_check
|
|
||||||
update_os
|
|
||||||
|
|
||||||
# Installing Dependencies
|
|
||||||
msg_info "Installing Dependencies"
|
|
||||||
$STD apt-get install -y \
|
|
||||||
[PACKAGE_1] \
|
|
||||||
[PACKAGE_2] \
|
|
||||||
[PACKAGE_3]
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
# Template: MySQL Database
|
|
||||||
msg_info "Setting up Database"
|
|
||||||
DB_NAME=[DB_NAME]
|
|
||||||
DB_USER=[DB_USER]
|
|
||||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
|
||||||
$STD mysql -u root -e "CREATE DATABASE $DB_NAME;"
|
|
||||||
$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED WITH mysql_native_password AS PASSWORD('$DB_PASS');"
|
|
||||||
$STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
|
||||||
{
|
|
||||||
echo "${APPLICATION} Credentials"
|
|
||||||
echo "Database User: $DB_USER"
|
|
||||||
echo "Database Password: $DB_PASS"
|
|
||||||
echo "Database Name: $DB_NAME"
|
|
||||||
} >>~/"$APP_NAME".creds
|
|
||||||
msg_ok "Set up Database"
|
|
||||||
|
|
||||||
# Setup App
|
|
||||||
msg_info "Setup ${APPLICATION}"
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/[REPO]/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
|
||||||
curl -fsSL -o "${RELEASE}.zip" "https://github.com/[REPO]/archive/refs/tags/${RELEASE}.zip"
|
|
||||||
unzip -q "${RELEASE}.zip"
|
|
||||||
mv "${APPLICATION}-${RELEASE}/" "/opt/${APPLICATION}"
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
echo "${RELEASE}" >/opt/"${APPLICATION}"_version.txt
|
|
||||||
msg_ok "Setup ${APPLICATION}"
|
|
||||||
|
|
||||||
# Creating Service (if needed)
|
|
||||||
msg_info "Creating Service"
|
|
||||||
cat <<EOF >/etc/systemd/system/"${APPLICATION}".service
|
|
||||||
[Unit]
|
|
||||||
Description=${APPLICATION} Service
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
ExecStart=[START_COMMAND]
|
|
||||||
Restart=always
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
systemctl enable -q --now "${APPLICATION}"
|
|
||||||
msg_ok "Created Service"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
|
|
||||||
# Cleanup
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
rm -f "${RELEASE}".zip
|
|
||||||
$STD apt-get -y autoremove
|
|
||||||
$STD apt-get -y autoclean
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
114
.github/autolabeler-config.json
generated
vendored
114
.github/autolabeler-config.json
generated
vendored
@ -4,9 +4,7 @@
|
|||||||
"fileStatus": "added",
|
"fileStatus": "added",
|
||||||
"includeGlobs": [
|
"includeGlobs": [
|
||||||
"ct/**",
|
"ct/**",
|
||||||
"tools/**",
|
|
||||||
"install/**",
|
"install/**",
|
||||||
"misc/**",
|
|
||||||
"turnkey/**",
|
"turnkey/**",
|
||||||
"vm/**"
|
"vm/**"
|
||||||
],
|
],
|
||||||
@ -18,9 +16,7 @@
|
|||||||
"fileStatus": "modified",
|
"fileStatus": "modified",
|
||||||
"includeGlobs": [
|
"includeGlobs": [
|
||||||
"ct/**",
|
"ct/**",
|
||||||
"tools/**",
|
|
||||||
"install/**",
|
"install/**",
|
||||||
"misc/**",
|
|
||||||
"turnkey/**",
|
"turnkey/**",
|
||||||
"vm/**"
|
"vm/**"
|
||||||
],
|
],
|
||||||
@ -32,71 +28,27 @@
|
|||||||
"fileStatus": "removed",
|
"fileStatus": "removed",
|
||||||
"includeGlobs": [
|
"includeGlobs": [
|
||||||
"ct/**",
|
"ct/**",
|
||||||
"tools/**",
|
|
||||||
"install/**",
|
"install/**",
|
||||||
"misc/**",
|
|
||||||
"turnkey/**",
|
"turnkey/**",
|
||||||
"vm/**"
|
"vm/**"
|
||||||
],
|
],
|
||||||
"excludeGlobs": []
|
"excludeGlobs": []
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"maintenance": [
|
"vm": [
|
||||||
{
|
{
|
||||||
"fileStatus": null,
|
"fileStatus": null,
|
||||||
"includeGlobs": [
|
"includeGlobs": [
|
||||||
"*.md"
|
"vm/**"
|
||||||
],
|
],
|
||||||
"excludeGlobs": []
|
"excludeGlobs": []
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"core": [
|
"tools": [
|
||||||
{
|
{
|
||||||
"fileStatus": null,
|
"fileStatus": null,
|
||||||
"includeGlobs": [
|
"includeGlobs": [
|
||||||
"misc/*.func",
|
"tools/**"
|
||||||
"misc/create_lxc.sh"
|
|
||||||
],
|
|
||||||
"excludeGlobs": [
|
|
||||||
"misc/api.func"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"website": [
|
|
||||||
{
|
|
||||||
"fileStatus": null,
|
|
||||||
"includeGlobs": [
|
|
||||||
"frontend/**"
|
|
||||||
],
|
|
||||||
"excludeGlobs": [
|
|
||||||
"frontend/public/json/**"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"api": [
|
|
||||||
{
|
|
||||||
"fileStatus": null,
|
|
||||||
"includeGlobs": [
|
|
||||||
"api/**",
|
|
||||||
"misc/api.func"
|
|
||||||
],
|
|
||||||
"excludeGlobs": []
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"github": [
|
|
||||||
{
|
|
||||||
"fileStatus": null,
|
|
||||||
"includeGlobs": [
|
|
||||||
".github/**"
|
|
||||||
],
|
|
||||||
"excludeGlobs": []
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"json": [
|
|
||||||
{
|
|
||||||
"fileStatus": "modified",
|
|
||||||
"includeGlobs": [
|
|
||||||
"frontend/public/json/**"
|
|
||||||
],
|
],
|
||||||
"excludeGlobs": []
|
"excludeGlobs": []
|
||||||
}
|
}
|
||||||
@ -119,11 +71,65 @@
|
|||||||
"excludeGlobs": []
|
"excludeGlobs": []
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"vm": [
|
"core": [
|
||||||
{
|
{
|
||||||
"fileStatus": null,
|
"fileStatus": null,
|
||||||
"includeGlobs": [
|
"includeGlobs": [
|
||||||
"vm/**"
|
"misc/*.func"
|
||||||
|
],
|
||||||
|
"excludeGlobs": [
|
||||||
|
"misc/api.func"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"documentation": [
|
||||||
|
{
|
||||||
|
"fileStatus": null,
|
||||||
|
"includeGlobs": [
|
||||||
|
"docs/**"
|
||||||
|
],
|
||||||
|
"excludeGlobs": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"github": [
|
||||||
|
{
|
||||||
|
"fileStatus": null,
|
||||||
|
"includeGlobs": [
|
||||||
|
".github/**",
|
||||||
|
"README.md",
|
||||||
|
"SECURITY.md",
|
||||||
|
"LICENSE",
|
||||||
|
"CHANGELOG.md"
|
||||||
|
],
|
||||||
|
"excludeGlobs": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"api": [
|
||||||
|
{
|
||||||
|
"fileStatus": null,
|
||||||
|
"includeGlobs": [
|
||||||
|
"api/**",
|
||||||
|
"misc/api.func"
|
||||||
|
],
|
||||||
|
"excludeGlobs": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"website": [
|
||||||
|
{
|
||||||
|
"fileStatus": null,
|
||||||
|
"includeGlobs": [
|
||||||
|
"frontend/**"
|
||||||
|
],
|
||||||
|
"excludeGlobs": [
|
||||||
|
"frontend/public/json/**"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"json": [
|
||||||
|
{
|
||||||
|
"fileStatus": "modified",
|
||||||
|
"includeGlobs": [
|
||||||
|
"frontend/public/json/**"
|
||||||
],
|
],
|
||||||
"excludeGlobs": []
|
"excludeGlobs": []
|
||||||
}
|
}
|
||||||
|
|||||||
84
.github/changelog-pr-config.json
generated
vendored
84
.github/changelog-pr-config.json
generated
vendored
@ -42,9 +42,15 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "🧰 Maintenance",
|
"title": "🗑️ Deleted Scripts",
|
||||||
"labels": [
|
"labels": [
|
||||||
"maintenance"
|
"delete script"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "💾 Core",
|
||||||
|
"labels": [
|
||||||
|
"core"
|
||||||
],
|
],
|
||||||
"subCategories": [
|
"subCategories": [
|
||||||
{
|
{
|
||||||
@ -69,30 +75,86 @@
|
|||||||
"notes": []
|
"notes": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "📡 API",
|
"title": "🔧 Refactor",
|
||||||
"labels": [
|
"labels": [
|
||||||
"api"
|
"refactor"
|
||||||
|
],
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "🧰 Tools",
|
||||||
|
"labels": [
|
||||||
|
"tools"
|
||||||
|
],
|
||||||
|
"subCategories": [
|
||||||
|
{
|
||||||
|
"title": "🐞 Bug Fixes",
|
||||||
|
"labels": [
|
||||||
|
"bugfix"
|
||||||
],
|
],
|
||||||
"notes": []
|
"notes": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "💾 Core",
|
"title": "✨ New Features",
|
||||||
"labels": [
|
"labels": [
|
||||||
"core"
|
"feature"
|
||||||
],
|
],
|
||||||
"notes": []
|
"notes": []
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"title": "💥 Breaking Changes",
|
||||||
|
"labels": [
|
||||||
|
"breaking change"
|
||||||
|
],
|
||||||
|
"notes": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "🔧 Refactor",
|
||||||
|
"labels": [
|
||||||
|
"refactor"
|
||||||
|
],
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "📚 Documentation",
|
||||||
|
"labels": [
|
||||||
|
"documentation"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"title": "📂 Github",
|
"title": "📂 Github",
|
||||||
"labels": [
|
"labels": [
|
||||||
"github"
|
"github"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "📡 API",
|
||||||
|
"labels": [
|
||||||
|
"api"
|
||||||
|
],
|
||||||
|
"subCategories": [
|
||||||
|
{
|
||||||
|
"title": "🐞 Bug Fixes",
|
||||||
|
"labels": [
|
||||||
|
"bugfix"
|
||||||
],
|
],
|
||||||
"notes": []
|
"notes": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "📝 Documentation",
|
"title": "✨ New Features",
|
||||||
"labels": [
|
"labels": [
|
||||||
"maintenance"
|
"feature"
|
||||||
|
],
|
||||||
|
"notes": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "💥 Breaking Changes",
|
||||||
|
"labels": [
|
||||||
|
"breaking change"
|
||||||
],
|
],
|
||||||
"notes": []
|
"notes": []
|
||||||
},
|
},
|
||||||
@ -142,7 +204,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "❔ Unlabelled",
|
"title": "❔ Uncategorized",
|
||||||
"labels": []
|
"labels": [
|
||||||
|
"needs triage"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
6
.github/pull_request_template.md
generated
vendored
6
.github/pull_request_template.md
generated
vendored
@ -1,12 +1,12 @@
|
|||||||
<!--🛑 New scripts must be submitted to [ProxmoxVED](https://github.com/community-scripts/ProxmoxVED) for testing.
|
<!--🛑 New scripts must be submitted to [ProxmoxVED](https://github.com/community-scripts/ProxmoxVED) for testing.
|
||||||
PRs without prior testing will be closed. -->
|
PRs without prior testing will be closed. -->
|
||||||
|
|
||||||
## ✍️ Description
|
## ✍️ Description
|
||||||
|
|
||||||
|
|
||||||
|
## 🔗 Related Issue
|
||||||
|
|
||||||
## 🔗 Related PR / Issue
|
Fixes #
|
||||||
Link: #
|
|
||||||
|
|
||||||
|
|
||||||
## ✅ Prerequisites (**X** in brackets)
|
## ✅ Prerequisites (**X** in brackets)
|
||||||
|
|
||||||
|
|||||||
32
.github/workflows/autolabeler.yml
generated
vendored
32
.github/workflows/autolabeler.yml
generated
vendored
@ -57,10 +57,10 @@ jobs:
|
|||||||
|
|
||||||
if (shouldAddLabel) {
|
if (shouldAddLabel) {
|
||||||
labelsToAdd.add(label);
|
labelsToAdd.add(label);
|
||||||
if (label === "update script") {
|
// Add specific sub-labels for tools
|
||||||
|
if (label === "tools") {
|
||||||
for (const prFile of prFiles) {
|
for (const prFile of prFiles) {
|
||||||
const filename = prFile.filename;
|
const filename = prFile.filename;
|
||||||
if (filename.startsWith("vm/")) labelsToAdd.add("vm");
|
|
||||||
if (filename.startsWith("tools/addon/")) labelsToAdd.add("addon");
|
if (filename.startsWith("tools/addon/")) labelsToAdd.add("addon");
|
||||||
if (filename.startsWith("tools/pve/")) labelsToAdd.add("pve-tool");
|
if (filename.startsWith("tools/pve/")) labelsToAdd.add("pve-tool");
|
||||||
}
|
}
|
||||||
@ -68,15 +68,14 @@ jobs:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (labelsToAdd.size < 2) {
|
// Always parse template checkboxes to add content-type labels (bugfix, feature, etc.)
|
||||||
const templateLabelMappings = {
|
const templateLabelMappings = {
|
||||||
"🐞 **Bug fix**": "bugfix",
|
"🐞 **Bug fix**": "bugfix",
|
||||||
"✨ **New feature**": "feature",
|
"✨ **New feature**": "feature",
|
||||||
"💥 **Breaking change**": "breaking change",
|
"💥 **Breaking change**": "breaking change",
|
||||||
"🆕 **New script**": "new script",
|
"🆕 **New script**": "new script",
|
||||||
"🌍 **Website update**": "website", // handled special
|
|
||||||
"🔧 **Refactoring / Code Cleanup**": "refactor",
|
"🔧 **Refactoring / Code Cleanup**": "refactor",
|
||||||
"📝 **Documentation update**": "documentation" // mapped to maintenance
|
"📝 **Documentation update**": "documentation"
|
||||||
};
|
};
|
||||||
|
|
||||||
for (const [checkbox, label] of Object.entries(templateLabelMappings)) {
|
for (const [checkbox, label] of Object.entries(templateLabelMappings)) {
|
||||||
@ -84,22 +83,27 @@ jobs:
|
|||||||
const regex = new RegExp(`- \\[(x|X)\\]\\s*${escapedCheckbox}`, "i");
|
const regex = new RegExp(`- \\[(x|X)\\]\\s*${escapedCheckbox}`, "i");
|
||||||
|
|
||||||
if (regex.test(prBody)) {
|
if (regex.test(prBody)) {
|
||||||
if (label === "website") {
|
labelsToAdd.add(label);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle website checkbox specially - only add if not already an update script with content label
|
||||||
|
const websiteCheckbox = "🌍 **Website update**";
|
||||||
|
const escapedWebsite = websiteCheckbox.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1");
|
||||||
|
const websiteRegex = new RegExp(`- \\[(x|X)\\]\\s*${escapedWebsite}`, "i");
|
||||||
|
|
||||||
|
if (websiteRegex.test(prBody)) {
|
||||||
const hasJson = prFiles.some((f) => f.filename.startsWith("frontend/public/json/"));
|
const hasJson = prFiles.some((f) => f.filename.startsWith("frontend/public/json/"));
|
||||||
const hasUpdateScript = labelsToAdd.has("update script");
|
const hasUpdateScript = labelsToAdd.has("update script");
|
||||||
const hasContentLabel = ["bugfix", "feature", "refactor"].some((l) => labelsToAdd.has(l));
|
const hasContentLabel = ["bugfix", "feature", "refactor"].some((l) => labelsToAdd.has(l));
|
||||||
|
|
||||||
if (!(hasUpdateScript && hasContentLabel)) {
|
// If it's an update script PR with json changes and a content label, skip adding website/json
|
||||||
|
// The PR should be categorized as update script with the content label
|
||||||
|
if (!(hasUpdateScript && hasJson && hasContentLabel)) {
|
||||||
labelsToAdd.add(hasJson ? "json" : "website");
|
labelsToAdd.add(hasJson ? "json" : "website");
|
||||||
}
|
}
|
||||||
} else if (label === "documentation") {
|
|
||||||
labelsToAdd.add("maintenance");
|
|
||||||
} else {
|
|
||||||
labelsToAdd.add(label);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (labelsToAdd.size === 0) {
|
if (labelsToAdd.size === 0) {
|
||||||
labelsToAdd.add("needs triage");
|
labelsToAdd.add("needs triage");
|
||||||
}
|
}
|
||||||
|
|||||||
29
.github/workflows/changelog-pr.yml
generated
vendored
29
.github/workflows/changelog-pr.yml
generated
vendored
@ -157,13 +157,31 @@ jobs:
|
|||||||
|
|
||||||
let categorized = false;
|
let categorized = false;
|
||||||
const priorityCategories = categorizedPRs.slice();
|
const priorityCategories = categorizedPRs.slice();
|
||||||
|
|
||||||
|
// Priority order for content-type labels (highest priority first)
|
||||||
|
const subCategoryPriority = ["breaking change", "bugfix", "feature", "refactor"];
|
||||||
|
|
||||||
for (const category of priorityCategories) {
|
for (const category of priorityCategories) {
|
||||||
if (categorized) break;
|
if (categorized) break;
|
||||||
if (category.labels.some(label => prLabels.includes(label))) {
|
if (category.labels.some(label => prLabels.includes(label))) {
|
||||||
if (category.subCategories && category.subCategories.length > 0) {
|
if (category.subCategories && category.subCategories.length > 0) {
|
||||||
const subCategory = category.subCategories.find(sub =>
|
// Find subcategory by priority order instead of first match
|
||||||
|
let subCategory = null;
|
||||||
|
for (const priorityLabel of subCategoryPriority) {
|
||||||
|
if (prLabels.includes(priorityLabel)) {
|
||||||
|
subCategory = category.subCategories.find(sub =>
|
||||||
|
sub.labels.includes(priorityLabel)
|
||||||
|
);
|
||||||
|
if (subCategory) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fallback: check for any other subcategory match (api, github, json, etc.)
|
||||||
|
if (!subCategory) {
|
||||||
|
subCategory = category.subCategories.find(sub =>
|
||||||
sub.labels.some(label => prLabels.includes(label))
|
sub.labels.some(label => prLabels.includes(label))
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (subCategory) {
|
if (subCategory) {
|
||||||
subCategory.notes.push(prNote);
|
subCategory.notes.push(prNote);
|
||||||
@ -176,6 +194,15 @@ jobs:
|
|||||||
categorized = true;
|
categorized = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fallback: Add to Uncategorized if no category matched
|
||||||
|
if (!categorized) {
|
||||||
|
const uncategorized = categorizedPRs.find(category =>
|
||||||
|
category.title.includes("Uncategorized") || category.labels.includes("needs triage"));
|
||||||
|
if (uncategorized) {
|
||||||
|
uncategorized.notes.push(prNote);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
4
.github/workflows/validate-filenames.yml
generated
vendored
4
.github/workflows/validate-filenames.yml
generated
vendored
@ -51,10 +51,6 @@ jobs:
|
|||||||
|
|
||||||
NON_COMPLIANT_FILES=""
|
NON_COMPLIANT_FILES=""
|
||||||
for FILE in $CHANGED_FILES; do
|
for FILE in $CHANGED_FILES; do
|
||||||
# Skip File "misc/create_lxc.sh"
|
|
||||||
if [[ "$FILE" == "misc/create_lxc.sh" ]]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
BASENAME=$(echo "$(basename "${FILE%.*}")")
|
BASENAME=$(echo "$(basename "${FILE%.*}")")
|
||||||
if [[ ! "$BASENAME" =~ ^[a-z0-9-]+$ ]]; then
|
if [[ ! "$BASENAME" =~ ^[a-z0-9-]+$ ]]; then
|
||||||
NON_COMPLIANT_FILES="$NON_COMPLIANT_FILES $FILE"
|
NON_COMPLIANT_FILES="$NON_COMPLIANT_FILES $FILE"
|
||||||
|
|||||||
406
CHANGELOG.md
406
CHANGELOG.md
@ -10,8 +10,414 @@
|
|||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
||||||
|
|
||||||
|
## 2025-12-16
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- [REFACTOR]: NetVisor => Scanopy [@vhsdream](https://github.com/vhsdream) ([#10011](https://github.com/community-scripts/ProxmoxVE/pull/10011))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- zabbix: fix repo url after change [@MickLesk](https://github.com/MickLesk) ([#10042](https://github.com/community-scripts/ProxmoxVE/pull/10042))
|
||||||
|
- Fix: mariadb repo in update_scripts [@MickLesk](https://github.com/MickLesk) ([#10034](https://github.com/community-scripts/ProxmoxVE/pull/10034))
|
||||||
|
- 2fauth: update PHP version from 8.3 to 8.4 in update_script [@MickLesk](https://github.com/MickLesk) ([#10035](https://github.com/community-scripts/ProxmoxVE/pull/10035))
|
||||||
|
- pdm: add rsyslog to fix /dev/log Connection refused errors [@MickLesk](https://github.com/MickLesk) ([#10018](https://github.com/community-scripts/ProxmoxVE/pull/10018))
|
||||||
|
- 2fauth: bump to php8.4 [@MickLesk](https://github.com/MickLesk) ([#10019](https://github.com/community-scripts/ProxmoxVE/pull/10019))
|
||||||
|
- Miniflux: use correct systemctl to check service instead of file path [@MickLesk](https://github.com/MickLesk) ([#10024](https://github.com/community-scripts/ProxmoxVE/pull/10024))
|
||||||
|
- PhotoPrism: export env variables for CLI tools [@MickLesk](https://github.com/MickLesk) ([#10023](https://github.com/community-scripts/ProxmoxVE/pull/10023))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- core: IP-Range-Scan Support (app.vars / default.vars) [@MickLesk](https://github.com/MickLesk) ([#10038](https://github.com/community-scripts/ProxmoxVE/pull/10038))
|
||||||
|
- tools.func: add optional enabled parameter to setup_deb822_repo [@MickLesk](https://github.com/MickLesk) ([#10017](https://github.com/community-scripts/ProxmoxVE/pull/10017))
|
||||||
|
- core: map Etc/* timezones to 'host' for pct compatibility [@MickLesk](https://github.com/MickLesk) ([#10020](https://github.com/community-scripts/ProxmoxVE/pull/10020))
|
||||||
|
|
||||||
|
## 2025-12-15
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Koel ([#9972](https://github.com/community-scripts/ProxmoxVE/pull/9972))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Fix DiscoPanel build [@PouletteMC](https://github.com/PouletteMC) ([#10009](https://github.com/community-scripts/ProxmoxVE/pull/10009))
|
||||||
|
- fix:ct/openwebui.sh adding progressbar and minimize service downtime [@jobben-2025](https://github.com/jobben-2025) ([#9894](https://github.com/community-scripts/ProxmoxVE/pull/9894))
|
||||||
|
- homarr: add: temp note aboute deb13 requirement [@CrazyWolf13](https://github.com/CrazyWolf13) ([#9992](https://github.com/community-scripts/ProxmoxVE/pull/9992))
|
||||||
|
- paperless-ai: backup data and recreate venv during update [@MickLesk](https://github.com/MickLesk) ([#9987](https://github.com/community-scripts/ProxmoxVE/pull/9987))
|
||||||
|
- fix(booklore): add setup_yq to update script [@MickLesk](https://github.com/MickLesk) ([#9989](https://github.com/community-scripts/ProxmoxVE/pull/9989))
|
||||||
|
- fix(pangolin-install): add network-online dependency [@worried-networking](https://github.com/worried-networking) ([#9984](https://github.com/community-scripts/ProxmoxVE/pull/9984))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- OPNsense: dynamic crawl latest stable FreeBSD [@austindsmith](https://github.com/austindsmith) ([#9831](https://github.com/community-scripts/ProxmoxVE/pull/9831))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: Heimdall Dashboard [@tremor021](https://github.com/tremor021) ([#9959](https://github.com/community-scripts/ProxmoxVE/pull/9959))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- tools: prevent awk errors in setup_rust on restricted containers [@MickLesk](https://github.com/MickLesk) ([#9985](https://github.com/community-scripts/ProxmoxVE/pull/9985))
|
||||||
|
- core: App Defaults force mode and prevent unbound variables [@MickLesk](https://github.com/MickLesk) ([#9971](https://github.com/community-scripts/ProxmoxVE/pull/9971))
|
||||||
|
- core: load app defaults before applying base_settings / fix composer cleanup after install/update [@MickLesk](https://github.com/MickLesk) ([#9965](https://github.com/community-scripts/ProxmoxVE/pull/9965))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- tools: handle flat repositories in setup_deb822_repo [@MickLesk](https://github.com/MickLesk) ([#9994](https://github.com/community-scripts/ProxmoxVE/pull/9994))
|
||||||
|
|
||||||
|
### 📚 Documentation
|
||||||
|
|
||||||
|
- (github) remove old files and assets [@MickLesk](https://github.com/MickLesk) ([#9991](https://github.com/community-scripts/ProxmoxVE/pull/9991))
|
||||||
|
- README; add project statistics / formatting [@MickLesk](https://github.com/MickLesk) ([#9967](https://github.com/community-scripts/ProxmoxVE/pull/9967))
|
||||||
|
|
||||||
|
## 2025-12-14
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- SonarQube: Fix database variables [@tremor021](https://github.com/tremor021) ([#9946](https://github.com/community-scripts/ProxmoxVE/pull/9946))
|
||||||
|
|
||||||
|
- #### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- refactor: homarr [@CrazyWolf13](https://github.com/CrazyWolf13) ([#9948](https://github.com/community-scripts/ProxmoxVE/pull/9948))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- Update dependencies and remove unused files [@BramSuurdje](https://github.com/BramSuurdje) ([#9945](https://github.com/community-scripts/ProxmoxVE/pull/9945))
|
||||||
|
|
||||||
|
## 2025-12-13
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Umami: Use `pnpm` [@tremor021](https://github.com/tremor021) ([#9937](https://github.com/community-scripts/ProxmoxVE/pull/9937))
|
||||||
|
- Tunarr: Switch to prebuild archive [@tremor021](https://github.com/tremor021) ([#9920](https://github.com/community-scripts/ProxmoxVE/pull/9920))
|
||||||
|
- [HOTFIX] NetVisor: backup OIDC config before update [@vhsdream](https://github.com/vhsdream) ([#9895](https://github.com/community-scripts/ProxmoxVE/pull/9895))
|
||||||
|
- Update OPNsense download URL to version 14.3 [@jaredcarling42-design](https://github.com/jaredcarling42-design) ([#9899](https://github.com/community-scripts/ProxmoxVE/pull/9899))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Add optional TLS setup to Valkey installer [@pshankinclarke](https://github.com/pshankinclarke) ([#9789](https://github.com/community-scripts/ProxmoxVE/pull/9789))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: Spoolman [@tremor021](https://github.com/tremor021) ([#9873](https://github.com/community-scripts/ProxmoxVE/pull/9873))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- AdGuardHome-Sync ([#9783](https://github.com/community-scripts/ProxmoxVE/pull/9783))
|
||||||
|
|
||||||
|
### ❔ Uncategorized
|
||||||
|
|
||||||
|
- Update category value in glance.json and adguard-home.json [@Bensonheimer992](https://github.com/Bensonheimer992) ([#9932](https://github.com/community-scripts/ProxmoxVE/pull/9932))
|
||||||
|
- Change category ID from 6 to 3 in coolify.json and dokploy.json [@Bensonheimer992](https://github.com/Bensonheimer992) ([#9930](https://github.com/community-scripts/ProxmoxVE/pull/9930))
|
||||||
|
|
||||||
|
## 2025-12-12
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Wallabag ([#9904](https://github.com/community-scripts/ProxmoxVE/pull/9904))
|
||||||
|
- InvoiceNinja ([#9905](https://github.com/community-scripts/ProxmoxVE/pull/9905))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Pangolin: URL fixes [@tremor021](https://github.com/tremor021) ([#9902](https://github.com/community-scripts/ProxmoxVE/pull/9902))
|
||||||
|
|
||||||
|
## 2025-12-11
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Speedtest-Tracker ([#9802](https://github.com/community-scripts/ProxmoxVE/pull/9802))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- dokploy: require unprivileged LXC environment [@MickLesk](https://github.com/MickLesk) ([#9891](https://github.com/community-scripts/ProxmoxVE/pull/9891))
|
||||||
|
- Update NetVisor repo information [@vhsdream](https://github.com/vhsdream) ([#9864](https://github.com/community-scripts/ProxmoxVE/pull/9864))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Syncthing: Various fixes [@tremor021](https://github.com/tremor021) ([#9872](https://github.com/community-scripts/ProxmoxVE/pull/9872))
|
||||||
|
- Sonarr: Fix standard [@tremor021](https://github.com/tremor021) ([#9874](https://github.com/community-scripts/ProxmoxVE/pull/9874))
|
||||||
|
- Refactor: Snipe-IT [@tremor021](https://github.com/tremor021) ([#9876](https://github.com/community-scripts/ProxmoxVE/pull/9876))
|
||||||
|
- Technitium DNS: Various fixes [@tremor021](https://github.com/tremor021) ([#9863](https://github.com/community-scripts/ProxmoxVE/pull/9863))
|
||||||
|
- SonarQube: Fixes [@tremor021](https://github.com/tremor021) ([#9875](https://github.com/community-scripts/ProxmoxVE/pull/9875))
|
||||||
|
- endurain: remove unneeded deps [@johanngrobe](https://github.com/johanngrobe) ([#9855](https://github.com/community-scripts/ProxmoxVE/pull/9855))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- core: skip -features flag when empty [@MickLesk](https://github.com/MickLesk) ([#9871](https://github.com/community-scripts/ProxmoxVE/pull/9871))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- paperless: add note on website (uv usage) [@MickLesk](https://github.com/MickLesk) ([#9833](https://github.com/community-scripts/ProxmoxVE/pull/9833))
|
||||||
|
|
||||||
|
## 2025-12-10
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- DiscoPanel ([#9847](https://github.com/community-scripts/ProxmoxVE/pull/9847))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: UmlautAdaptarr [@tremor021](https://github.com/tremor021) ([#9839](https://github.com/community-scripts/ProxmoxVE/pull/9839))
|
||||||
|
- Verdaccio: Small fixes [@tremor021](https://github.com/tremor021) ([#9836](https://github.com/community-scripts/ProxmoxVE/pull/9836))
|
||||||
|
- Refactor: WaveLog [@tremor021](https://github.com/tremor021) ([#9835](https://github.com/community-scripts/ProxmoxVE/pull/9835))
|
||||||
|
- Refactor: Unifi Network Server [@tremor021](https://github.com/tremor021) ([#9838](https://github.com/community-scripts/ProxmoxVE/pull/9838))
|
||||||
|
- Refactor: Umami [@tremor021](https://github.com/tremor021) ([#9840](https://github.com/community-scripts/ProxmoxVE/pull/9840))
|
||||||
|
- Refactor: UrBackup Server [@tremor021](https://github.com/tremor021) ([#9837](https://github.com/community-scripts/ProxmoxVE/pull/9837))
|
||||||
|
- Refactor: Tianji [@tremor021](https://github.com/tremor021) ([#9842](https://github.com/community-scripts/ProxmoxVE/pull/9842))
|
||||||
|
- Tracktor: Remove unused variable [@tremor021](https://github.com/tremor021) ([#9841](https://github.com/community-scripts/ProxmoxVE/pull/9841))
|
||||||
|
|
||||||
|
### ❔ Uncategorized
|
||||||
|
|
||||||
|
- Update icon URLs from master to main branch [@MickLesk](https://github.com/MickLesk) ([#9834](https://github.com/community-scripts/ProxmoxVE/pull/9834))
|
||||||
|
|
||||||
|
## 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
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- wanderer: add meilisearch dumpless upgrade for database migration [@MickLesk](https://github.com/MickLesk) ([#9749](https://github.com/community-scripts/ProxmoxVE/pull/9749))
|
||||||
|
|
||||||
|
- #### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- Refactor: Inventree (uses now ubuntu 24.04) [@MickLesk](https://github.com/MickLesk) ([#9752](https://github.com/community-scripts/ProxmoxVE/pull/9752))
|
||||||
|
- Revert Zammad: use Debian 12 and dynamic APT source version [@MickLesk](https://github.com/MickLesk) ([#9750](https://github.com/community-scripts/ProxmoxVE/pull/9750))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- tools.func: handle empty grep results in stop_all_services [@MickLesk](https://github.com/MickLesk) ([#9748](https://github.com/community-scripts/ProxmoxVE/pull/9748))
|
||||||
|
- Remove Debian from GPU passthrough [@MickLesk](https://github.com/MickLesk) ([#9754](https://github.com/community-scripts/ProxmoxVE/pull/9754))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- core: motd - dynamically read OS version on each login [@MickLesk](https://github.com/MickLesk) ([#9751](https://github.com/community-scripts/ProxmoxVE/pull/9751))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- FAQ update [@tremor021](https://github.com/tremor021) ([#9742](https://github.com/community-scripts/ProxmoxVE/pull/9742))
|
||||||
|
|
||||||
|
## 2025-12-06
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Update domain-locker-install.sh to enable auto-start after reboot [@alexindigo](https://github.com/alexindigo) ([#9715](https://github.com/community-scripts/ProxmoxVE/pull/9715))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- InfluxDB: Remove InfluxData source list post-installation [@tremor021](https://github.com/tremor021) ([#9723](https://github.com/community-scripts/ProxmoxVE/pull/9723))
|
||||||
|
- InfluxDB: Update InfluxDB repository key URL [@tremor021](https://github.com/tremor021) ([#9720](https://github.com/community-scripts/ProxmoxVE/pull/9720))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- pin Portainer Update to CE Version only [@sgaert](https://github.com/sgaert) ([#9710](https://github.com/community-scripts/ProxmoxVE/pull/9710))
|
||||||
|
|
||||||
|
## 2025-12-05
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Endurain ([#9681](https://github.com/community-scripts/ProxmoxVE/pull/9681))
|
||||||
|
- MeTube ([#9671](https://github.com/community-scripts/ProxmoxVE/pull/9671))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- libretranslate: pin uv python to 3.12 (pytorch fix) [@MickLesk](https://github.com/MickLesk) ([#9699](https://github.com/community-scripts/ProxmoxVE/pull/9699))
|
||||||
|
- alpine: (mariadb/postgresql): correct php-cgi path for php83 (adminer) [@MickLesk](https://github.com/MickLesk) ([#9698](https://github.com/community-scripts/ProxmoxVE/pull/9698))
|
||||||
|
- fix(librespeed-rs): use correct service name [@jniles](https://github.com/jniles) ([#9683](https://github.com/community-scripts/ProxmoxVE/pull/9683))
|
||||||
|
- NetVisor: fix daemon auto-config [@vhsdream](https://github.com/vhsdream) ([#9682](https://github.com/community-scripts/ProxmoxVE/pull/9682))
|
||||||
|
- Improve NVIDIA device detection for container passthrough [@MickLesk](https://github.com/MickLesk) ([#9670](https://github.com/community-scripts/ProxmoxVE/pull/9670))
|
||||||
|
- Fix AdventureLog installation failure: missing postgis extension permissions [@Copilot](https://github.com/Copilot) ([#9674](https://github.com/community-scripts/ProxmoxVE/pull/9674))
|
||||||
|
- paperless: ASGI interface typo [@MickLesk](https://github.com/MickLesk) ([#9668](https://github.com/community-scripts/ProxmoxVE/pull/9668))
|
||||||
|
- var. core fixes (bash to sh in fix_gpu_gids ...) [@MickLesk](https://github.com/MickLesk) ([#9666](https://github.com/community-scripts/ProxmoxVE/pull/9666))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- tools.func: handle GitHub 300 Multiple Choices in tarball mode [@MickLesk](https://github.com/MickLesk) ([#9697](https://github.com/community-scripts/ProxmoxVE/pull/9697))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: OneDev [@MickLesk](https://github.com/MickLesk) ([#9597](https://github.com/community-scripts/ProxmoxVE/pull/9597))
|
||||||
|
|
||||||
|
### 📂 Github
|
||||||
|
|
||||||
|
- chore(github): improve PR template and cleanup obsolete references | move contribution guide [@MickLesk](https://github.com/MickLesk) ([#9700](https://github.com/community-scripts/ProxmoxVE/pull/9700))
|
||||||
|
|
||||||
|
## 2025-12-04
|
||||||
|
|
||||||
|
### 🛠️ Core Overhaul
|
||||||
|
|
||||||
|
- Major refactor of the entire `/misc` subsystem introducing a secure, modular and fully extensible foundation for all future scripts.
|
||||||
|
Includes the new three-tier defaults architecture (ENV → App → User), strict variable whitelisting, safe `.vars` parsing without `source/eval`, centralized `error_handler.func`, structured logging, an improved 19-step advanced wizard, unified container creation, dedicated storage selector, updated sysctl handling, IPv6 disable mode, cloud-init library, SSH key auto-discovery, and a complete cleanup of legacy components.
|
||||||
|
Documentation added under `/docs/guides`.
|
||||||
|
[@MickLesk](https://github.com/MickLesk) ([#9540](https://github.com/community-scripts/ProxmoxVE/pull/9540))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Fix kimai.sh update script path typo for local.yaml [@Copilot](https://github.com/Copilot) ([#9645](https://github.com/community-scripts/ProxmoxVE/pull/9645))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- core: extend storage type support (rbd, nfs, cifs) and validation (iscidirect, isci, zfs, cephfs, pbs) [@MickLesk](https://github.com/MickLesk) ([#9646](https://github.com/community-scripts/ProxmoxVE/pull/9646))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- update pdm repo to stable [@CrazyWolf13](https://github.com/CrazyWolf13) ([#9648](https://github.com/community-scripts/ProxmoxVE/pull/9648))
|
||||||
|
|
||||||
|
## 2025-12-03
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- fix(opnsense-vm): improve script and add single-interface mode [@AlphaLawless](https://github.com/AlphaLawless) ([#9614](https://github.com/community-scripts/ProxmoxVE/pull/9614))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Fix Homebridge update detection for Debian 13 DEB822 format [@Copilot](https://github.com/Copilot) ([#9629](https://github.com/community-scripts/ProxmoxVE/pull/9629))
|
||||||
|
- go2rtc: Add WorkingDirectory to go2rtc service configuration [@tremor021](https://github.com/tremor021) ([#9618](https://github.com/community-scripts/ProxmoxVE/pull/9618))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- explicit node versions [@CrazyWolf13](https://github.com/CrazyWolf13) ([#9594](https://github.com/community-scripts/ProxmoxVE/pull/9594))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- Bump next from 15.5.2 to 15.5.7 in /frontend in the npm_and_yarn group across 1 directory [@dependabot[bot]](https://github.com/dependabot[bot]) ([#9632](https://github.com/community-scripts/ProxmoxVE/pull/9632))
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- Update logo URL in swizzin.json [@MickLesk](https://github.com/MickLesk) ([#9627](https://github.com/community-scripts/ProxmoxVE/pull/9627))
|
||||||
|
|
||||||
## 2025-12-02
|
## 2025-12-02
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Snowshare ([#9578](https://github.com/community-scripts/ProxmoxVE/pull/9578))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- NetVisor: patch systemd file to fix new OIDC config [@vhsdream](https://github.com/vhsdream) ([#9562](https://github.com/community-scripts/ProxmoxVE/pull/9562))
|
||||||
|
- Refactor: BookStack [@tremor021](https://github.com/tremor021) ([#9567](https://github.com/community-scripts/ProxmoxVE/pull/9567))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Matterbridge: Fix ExecStart command in service install script to allow childbridge mode [@jonalbr](https://github.com/jonalbr) ([#9603](https://github.com/community-scripts/ProxmoxVE/pull/9603))
|
||||||
|
- Open-webui add .env backup and restore functionality from older versions [@DrDonoso](https://github.com/DrDonoso) ([#9592](https://github.com/community-scripts/ProxmoxVE/pull/9592))
|
||||||
|
- Booklore: Downgrad Java from 25 to 21 [@Pr0mises](https://github.com/Pr0mises) ([#9566](https://github.com/community-scripts/ProxmoxVE/pull/9566))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Set Valkey memory and eviction defaults [@pshankinclarke](https://github.com/pshankinclarke) ([#9602](https://github.com/community-scripts/ProxmoxVE/pull/9602))
|
||||||
|
- Add auth via requirepass to Valkey [@pshankinclarke](https://github.com/pshankinclarke) ([#9570](https://github.com/community-scripts/ProxmoxVE/pull/9570))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: 2FAuth [@tremor021](https://github.com/tremor021) ([#9582](https://github.com/community-scripts/ProxmoxVE/pull/9582))
|
||||||
|
- Refactor: Paperless-AI [@MickLesk](https://github.com/MickLesk) ([#9588](https://github.com/community-scripts/ProxmoxVE/pull/9588))
|
||||||
|
- Refactor: AdventureLog [@tremor021](https://github.com/tremor021) ([#9583](https://github.com/community-scripts/ProxmoxVE/pull/9583))
|
||||||
|
- CommaFeed: Bump Java and service file [@tremor021](https://github.com/tremor021) ([#9564](https://github.com/community-scripts/ProxmoxVE/pull/9564))
|
||||||
|
- Refactor: Docmost [@tremor021](https://github.com/tremor021) ([#9563](https://github.com/community-scripts/ProxmoxVE/pull/9563))
|
||||||
|
- Cloudflared: Add repo via helper function [@tremor021](https://github.com/tremor021) ([#9565](https://github.com/community-scripts/ProxmoxVE/pull/9565))
|
||||||
|
|
||||||
|
### 🧰 Maintenance
|
||||||
|
|
||||||
|
- #### 📝 Documentation
|
||||||
|
|
||||||
|
- add configuration and deployment guides to docs [@MickLesk](https://github.com/MickLesk) ([#9591](https://github.com/community-scripts/ProxmoxVE/pull/9591))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- Update category for "Wanderer" [@Lorondos](https://github.com/Lorondos) ([#9607](https://github.com/community-scripts/ProxmoxVE/pull/9607))
|
||||||
|
|
||||||
## 2025-12-01
|
## 2025-12-01
|
||||||
|
|
||||||
### 🆕 New Scripts
|
### 🆕 New Scripts
|
||||||
|
|||||||
39
README.md
39
README.md
@ -17,10 +17,10 @@
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/CONTRIBUTING.md">
|
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/docs/contribution/README.md">
|
||||||
<img src="https://img.shields.io/badge/🤝_Contribute-Guidelines-ff4785?style=for-the-badge&labelColor=2d3748" alt="Contribute" />
|
<img src="https://img.shields.io/badge/🤝_Contribute-Guidelines-ff4785?style=for-the-badge&labelColor=2d3748" alt="Contribute" />
|
||||||
</a>
|
</a>
|
||||||
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/USER_SUBMITTED_GUIDES.md">
|
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/docs/contribution/USER_SUBMITTED_GUIDES.md">
|
||||||
<img src="https://img.shields.io/badge/📚_Guides-Read-0077b5?style=for-the-badge&labelColor=2d3748" alt="Guides" />
|
<img src="https://img.shields.io/badge/📚_Guides-Read-0077b5?style=for-the-badge&labelColor=2d3748" alt="Guides" />
|
||||||
</a>
|
</a>
|
||||||
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/CHANGELOG.md">
|
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/CHANGELOG.md">
|
||||||
@ -30,8 +30,8 @@
|
|||||||
|
|
||||||
<br />
|
<br />
|
||||||
|
|
||||||
> **Simplify your Proxmox VE setup with community-driven automation scripts**
|
**Simplify your Proxmox VE setup with community-driven automation scripts**
|
||||||
> Originally created by tteck, now maintained and expanded by the community
|
Originally created by tteck, now maintained and expanded by the community
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -214,7 +214,7 @@ This adds a menu to your Proxmox interface for easy script access without visiti
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
<br />
|
<br />
|
||||||
|
|
||||||
👉 Check our **[Contributing Guidelines](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/CONTRIBUTING.md)** to get started
|
👉 Check our **[Contributing Guidelines](https://github.com/community-scripts/ProxmoxVE/blob/main/docs/contribution/README.md)** to get started
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -239,17 +239,34 @@ This project is maintained by volunteers in memory of tteck. Your support helps
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📈 Project Growth
|
## 📈 Project Statistics
|
||||||
|
<p align="center">
|
||||||
|
<img
|
||||||
|
src="https://repobeats.axiom.co/api/embed/57edde03e00f88d739bdb5b844ff7d07dd079375.svg"
|
||||||
|
alt="Repobeats analytics"
|
||||||
|
width="650"
|
||||||
|
/>
|
||||||
|
</p>
|
||||||
|
|
||||||
<div align="center">
|
<p align="center">
|
||||||
<a href="https://star-history.com/#community-scripts/ProxmoxVE&Date">
|
<a href="https://star-history.com/#community-scripts/ProxmoxVE&Date">
|
||||||
<picture>
|
<picture>
|
||||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date&theme=dark" />
|
<source
|
||||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" />
|
media="(prefers-color-scheme: dark)"
|
||||||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" />
|
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"
|
||||||
|
width="650"
|
||||||
|
/>
|
||||||
</picture>
|
</picture>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</p>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
12
ct/2fauth.sh
12
ct/2fauth.sh
@ -28,23 +28,21 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
if check_for_gh_release "2fauth" "Bubka/2FAuth"; then
|
if check_for_gh_release "2fauth" "Bubka/2FAuth"; then
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt -y upgrade
|
$STD apt -y upgrade
|
||||||
|
|
||||||
msg_info "Creating Backup"
|
msg_info "Creating Backup"
|
||||||
mv "/opt/2fauth" "/opt/2fauth-backup"
|
mv "/opt/2fauth" "/opt/2fauth-backup"
|
||||||
if ! dpkg -l | grep -q 'php8.3'; then
|
if ! dpkg -l | grep -q 'php8.4'; then
|
||||||
cp /etc/nginx/conf.d/2fauth.conf /etc/nginx/conf.d/2fauth.conf.bak
|
cp /etc/nginx/conf.d/2fauth.conf /etc/nginx/conf.d/2fauth.conf.bak
|
||||||
fi
|
fi
|
||||||
msg_ok "Backup Created"
|
msg_ok "Backup Created"
|
||||||
|
|
||||||
if ! dpkg -l | grep -q 'php8.3'; then
|
if ! dpkg -l | grep -q 'php8.4'; then
|
||||||
$STD apt-get install -y \
|
PHP_VERSION="8.4" PHP_MODULE="common,ctype,fileinfo,mysql,cli,tokenizer,dom,redis,session,openssl" PHP_FPM="YES" setup_php
|
||||||
lsb-release \
|
sed -i 's/php8\.[0-9]/php8.4/g' /etc/nginx/conf.d/2fauth.conf
|
||||||
gnupg2
|
|
||||||
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,mysql,cli" PHP_FPM="YES" setup_php
|
|
||||||
sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/2fauth.conf
|
|
||||||
fi
|
fi
|
||||||
fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth"
|
fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth"
|
||||||
setup_composer
|
setup_composer
|
||||||
|
|||||||
@ -45,10 +45,14 @@ function update_script() {
|
|||||||
fetch_and_deploy_gh_release "adventurelog" "seanmorley15/adventurelog"
|
fetch_and_deploy_gh_release "adventurelog" "seanmorley15/adventurelog"
|
||||||
PYTHON_VERSION="3.13" setup_uv
|
PYTHON_VERSION="3.13" setup_uv
|
||||||
|
|
||||||
|
msg_info "Ensuring PostgreSQL Extensions"
|
||||||
|
$STD sudo -u postgres psql -d adventurelog_db -c "CREATE EXTENSION IF NOT EXISTS postgis;"
|
||||||
|
msg_ok "PostgreSQL Extensions Ready"
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
msg_info "Updating ${APP}"
|
||||||
cp /opt/adventurelog-backup/backend/server/.env /opt/adventurelog/backend/server/.env
|
cp /opt/adventurelog-backup/backend/server/.env /opt/adventurelog/backend/server/.env
|
||||||
cp -r /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media
|
cp -r /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media
|
||||||
cd /opt/adventurelog/backend/server || exit
|
cd /opt/adventurelog/backend/server
|
||||||
if [[ ! -x .venv/bin/python ]]; then
|
if [[ ! -x .venv/bin/python ]]; then
|
||||||
$STD uv venv .venv
|
$STD uv venv .venv
|
||||||
$STD .venv/bin/python -m ensurepip --upgrade
|
$STD .venv/bin/python -m ensurepip --upgrade
|
||||||
@ -59,7 +63,7 @@ function update_script() {
|
|||||||
$STD .venv/bin/python -m manage migrate
|
$STD .venv/bin/python -m manage migrate
|
||||||
|
|
||||||
cp /opt/adventurelog-backup/frontend/.env /opt/adventurelog/frontend/.env
|
cp /opt/adventurelog-backup/frontend/.env /opt/adventurelog/frontend/.env
|
||||||
cd /opt/adventurelog/frontend || exit
|
cd /opt/adventurelog/frontend
|
||||||
$STD pnpm i
|
$STD pnpm i
|
||||||
$STD pnpm build
|
$STD pnpm build
|
||||||
rm -rf /opt/adventurelog-backup
|
rm -rf /opt/adventurelog-backup
|
||||||
|
|||||||
@ -27,6 +27,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
msg_error "Currently we don't provide an update function for this ${APP}."
|
msg_error "Currently we don't provide an update function for this ${APP}."
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,6 +28,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
if check_for_gh_release "booklore" "booklore-app/BookLore"; then
|
if check_for_gh_release "booklore" "booklore-app/BookLore"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop booklore
|
systemctl stop booklore
|
||||||
@ -45,7 +46,8 @@ function update_script() {
|
|||||||
$STD npm run build --configuration=production
|
$STD npm run build --configuration=production
|
||||||
msg_ok "Built Frontend"
|
msg_ok "Built Frontend"
|
||||||
|
|
||||||
JAVA_VERSION="25" setup_java
|
JAVA_VERSION="21" setup_java
|
||||||
|
setup_yq
|
||||||
|
|
||||||
msg_info "Building Backend"
|
msg_info "Building Backend"
|
||||||
cd /opt/booklore/booklore-api
|
cd /opt/booklore/booklore-api
|
||||||
|
|||||||
@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
|||||||
var_ram="${var_ram:-1024}"
|
var_ram="${var_ram:-1024}"
|
||||||
var_disk="${var_disk:-4}"
|
var_disk="${var_disk:-4}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@ -28,6 +28,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
if check_for_gh_release "bookstack" "BookStackApp/BookStack"; then
|
if check_for_gh_release "bookstack" "BookStackApp/BookStack"; then
|
||||||
msg_info "Stopping Apache2"
|
msg_info "Stopping Apache2"
|
||||||
systemctl stop apache2
|
systemctl stop apache2
|
||||||
@ -51,7 +52,7 @@ function update_script() {
|
|||||||
msg_info "Configuring BookStack"
|
msg_info "Configuring BookStack"
|
||||||
cd /opt/bookstack
|
cd /opt/bookstack
|
||||||
export COMPOSER_ALLOW_SUPERUSER=1
|
export COMPOSER_ALLOW_SUPERUSER=1
|
||||||
$STD composer install --no-dev
|
$STD /usr/local/bin/composer install --no-dev
|
||||||
$STD php artisan migrate --force
|
$STD php artisan migrate --force
|
||||||
chown www-data:www-data -R /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage
|
chown www-data:www-data -R /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage
|
||||||
chmod -R 755 /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage
|
chmod -R 755 /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage
|
||||||
|
|||||||
@ -1,138 +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) | Co-Author: remz1337
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/janeczku/calibre-web
|
|
||||||
|
|
||||||
APP="Calibre-Web"
|
|
||||||
var_tags="${var_tags:-eBook}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-2048}"
|
|
||||||
var_disk="${var_disk:-4}"
|
|
||||||
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 [[ ! -f /etc/systemd/system/cps.service ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop cps
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
|
||||||
cd /opt/kepubify
|
|
||||||
rm -rf kepubify-linux-64bit
|
|
||||||
curl -fsSLO https://github.com/pgaskin/kepubify/releases/latest/download/kepubify-linux-64bit
|
|
||||||
chmod +x kepubify-linux-64bit
|
|
||||||
menu_array=("1" "Enables gdrive as storage backend for your ebooks" OFF
|
|
||||||
"2" "Enables sending emails via a googlemail account without enabling insecure apps" OFF
|
|
||||||
"3" "Enables displaying of additional author infos on the authors page" OFF
|
|
||||||
"4" "Enables login via LDAP server" OFF
|
|
||||||
"5" "Enables login via google or github oauth" OFF
|
|
||||||
"6" "Enables extracting of metadata from epub, fb2, pdf files, and also extraction of covers from cbr, cbz, cbt files" OFF
|
|
||||||
"7" "Enables extracting of metadata from cbr, cbz, cbt files" OFF
|
|
||||||
"8" "Enables syncing with your kobo reader" OFF)
|
|
||||||
if [ -f "/opt/calibre-web/options.txt" ]; then
|
|
||||||
cps_options="$(cat /opt/calibre-web/options.txt)"
|
|
||||||
IFS=',' read -ra ADDR <<<"$cps_options"
|
|
||||||
for i in "${ADDR[@]}"; do
|
|
||||||
if [ $i == "gdrive" ]; then
|
|
||||||
line=0
|
|
||||||
elif [ $i == "gmail" ]; then
|
|
||||||
line=1
|
|
||||||
elif [ $i == "goodreads" ]; then
|
|
||||||
line=2
|
|
||||||
elif [ $i == "ldap" ]; then
|
|
||||||
line=3
|
|
||||||
elif [ $i == "oauth" ]; then
|
|
||||||
line=4
|
|
||||||
elif [ $i == "metadata" ]; then
|
|
||||||
line=5
|
|
||||||
elif [ $i == "comics" ]; then
|
|
||||||
line=6
|
|
||||||
elif [ $i == "kobo" ]; then
|
|
||||||
line=7
|
|
||||||
fi
|
|
||||||
array_index=$((3 * line + 2))
|
|
||||||
menu_array[$array_index]=ON
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
|
|
||||||
CHOICES=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CALIBRE-WEB OPTIONS" --separate-output --checklist "Choose Additional Options" 15 125 8 "${menu_array[@]}" 3>&1 1>&2 2>&3)
|
|
||||||
spinner &
|
|
||||||
SPINNER_PID=$!
|
|
||||||
options=()
|
|
||||||
if [ ! -z "$CHOICES" ]; then
|
|
||||||
for CHOICE in $CHOICES; do
|
|
||||||
case "$CHOICE" in
|
|
||||||
"1")
|
|
||||||
options+=(gdrive)
|
|
||||||
;;
|
|
||||||
"2")
|
|
||||||
options+=(gmail)
|
|
||||||
;;
|
|
||||||
"3")
|
|
||||||
options+=(goodreads)
|
|
||||||
;;
|
|
||||||
"4")
|
|
||||||
options+=(ldap)
|
|
||||||
apt-get install -qqy libldap2-dev libsasl2-dev
|
|
||||||
;;
|
|
||||||
"5")
|
|
||||||
options+=(oauth)
|
|
||||||
;;
|
|
||||||
"6")
|
|
||||||
options+=(metadata)
|
|
||||||
;;
|
|
||||||
"7")
|
|
||||||
options+=(comics)
|
|
||||||
;;
|
|
||||||
"8")
|
|
||||||
options+=(kobo)
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Unsupported item $CHOICE!" >&2
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
if [ ${#options[@]} -gt 0 ]; then
|
|
||||||
cps_options=$(
|
|
||||||
IFS=,
|
|
||||||
echo "${options[*]}"
|
|
||||||
)
|
|
||||||
echo $cps_options >/opt/calibre-web/options.txt
|
|
||||||
$STD pip install --upgrade calibreweb[$cps_options]
|
|
||||||
else
|
|
||||||
rm -rf /opt/calibre-web/options.txt
|
|
||||||
$STD pip install --upgrade calibreweb
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start cps
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8083${CL}"
|
|
||||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-8}"
|
|||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-12}"
|
||||||
var_unprivileged="${var_unprivileged:-0}"
|
var_unprivileged="${var_unprivileged:-0}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
@ -24,11 +24,11 @@ function update_script() {
|
|||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
if [[ ! -f /opt/${APP} ]]; then
|
if [[ ! -d /opt/ComfyUI ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
msg_error "To update use the ${APP} Manager."
|
msg_error "To update use the ComfyUI Manager."
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -28,6 +28,9 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
JAVA_VERSION="25" setup_java
|
||||||
|
|
||||||
if check_for_gh_release "commafeed" "Athou/commafeed"; then
|
if check_for_gh_release "commafeed" "Athou/commafeed"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop commafeed
|
systemctl stop commafeed
|
||||||
|
|||||||
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}"
|
||||||
82
ct/discopanel.sh
Normal file
82
ct/discopanel.sh
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
#!/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: DragoQC
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://discopanel.app/
|
||||||
|
|
||||||
|
APP="DiscoPanel"
|
||||||
|
var_tags="${var_tags:-gaming}"
|
||||||
|
var_cpu="${var_cpu:-4}"
|
||||||
|
var_ram="${var_ram:-4096}"
|
||||||
|
var_disk="${var_disk:-15}"
|
||||||
|
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/discopanel" ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
setup_docker
|
||||||
|
|
||||||
|
if check_for_gh_release "discopanel" "nickheyer/discopanel"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop discopanel
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Creating Backup"
|
||||||
|
mkdir -p /opt/discopanel_backup_temp
|
||||||
|
cp -r /opt/discopanel/data/discopanel.db \
|
||||||
|
/opt/discopanel/data/.recovery_key \
|
||||||
|
/opt/discopanel_backup_temp/
|
||||||
|
if [[ -d /opt/discopanel/data/servers ]]; then
|
||||||
|
cp -r /opt/discopanel/data/servers /opt/discopanel_backup_temp/
|
||||||
|
fi
|
||||||
|
msg_ok "Created Backup"
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "discopanel" "nickheyer/discopanel" "tarball" "latest" "/opt/discopanel"
|
||||||
|
|
||||||
|
msg_info "Setting up DiscoPanel"
|
||||||
|
cd /opt/discopanel
|
||||||
|
$STD make gen
|
||||||
|
cd /opt/discopanel/web/discopanel
|
||||||
|
$STD npm install
|
||||||
|
$STD npm run build
|
||||||
|
cd /opt/discopanel
|
||||||
|
$STD go build -o discopanel cmd/discopanel/main.go
|
||||||
|
msg_ok "Setup DiscoPanel"
|
||||||
|
|
||||||
|
msg_info "Restoring Data"
|
||||||
|
mkdir -p /opt/discopanel/data
|
||||||
|
cp -a /opt/discopanel_backup_temp/. /opt/discopanel/data/
|
||||||
|
rm -rf /opt/discopanel_backup_temp
|
||||||
|
msg_ok "Restored Data"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start discopanel
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Updated Successfully!"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
||||||
@ -87,6 +87,11 @@ function update_script() {
|
|||||||
mv /tmp/start-daphne.sh.backup /opt/dispatcharr/start-daphne.sh
|
mv /tmp/start-daphne.sh.backup /opt/dispatcharr/start-daphne.sh
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if ! grep -q "DJANGO_SECRET_KEY" /opt/dispatcharr/.env; then
|
||||||
|
DJANGO_SECRET=$(openssl rand -base64 48 | tr -dc 'a-zA-Z0-9' | cut -c1-50)
|
||||||
|
echo "DJANGO_SECRET_KEY=$DJANGO_SECRET" >> /opt/dispatcharr/.env
|
||||||
|
fi
|
||||||
|
|
||||||
cd /opt/dispatcharr
|
cd /opt/dispatcharr
|
||||||
rm -rf .venv
|
rm -rf .venv
|
||||||
$STD uv venv
|
$STD uv venv
|
||||||
|
|||||||
@ -47,7 +47,7 @@ function update_script() {
|
|||||||
msg_ok "Docker Compose updated"
|
msg_ok "Docker Compose updated"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if docker ps -a --format '{{.Names}}' | grep -q '^portainer$'; then
|
if docker ps -a --format '{{.Image}}' | grep -q '^portainer/portainer-ce:latest$'; then
|
||||||
msg_info "Updating Portainer"
|
msg_info "Updating Portainer"
|
||||||
$STD docker pull portainer/portainer-ce:latest
|
$STD docker pull portainer/portainer-ce:latest
|
||||||
$STD docker stop portainer && docker rm portainer
|
$STD docker stop portainer && docker rm portainer
|
||||||
|
|||||||
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:-0}"
|
||||||
|
|
||||||
|
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}"
|
||||||
@ -27,6 +27,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
msg_error "To update ${APP}, use the applications web interface."
|
msg_error "To update ${APP}, use the applications web interface."
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@ -34,7 +34,7 @@ function update_script() {
|
|||||||
msg_info "Service stopped"
|
msg_info "Service stopped"
|
||||||
|
|
||||||
PG_VERSION="17" setup_postgresql
|
PG_VERSION="17" setup_postgresql
|
||||||
setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "domain-locker" "Lissy93/domain-locker"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "domain-locker" "Lissy93/domain-locker"
|
||||||
|
|
||||||
msg_info "Installing Modules (patience)"
|
msg_info "Installing Modules (patience)"
|
||||||
|
|||||||
@ -27,6 +27,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
|
|
||||||
if ! grep -Fq "root /usr/bin/php /opt/domain-monitor/cron/check_domains.php" /etc/crontab; then
|
if ! grep -Fq "root /usr/bin/php /opt/domain-monitor/cron/check_domains.php" /etc/crontab; then
|
||||||
echo "0 0 * * * root /usr/bin/php /opt/domain-monitor/cron/check_domains.php" >>/etc/crontab
|
echo "0 0 * * * root /usr/bin/php /opt/domain-monitor/cron/check_domains.php" >>/etc/crontab
|
||||||
|
|||||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-8}"
|
|||||||
var_os="${var_os:-ubuntu}"
|
var_os="${var_os:-ubuntu}"
|
||||||
var_version="${var_version:-24.04}"
|
var_version="${var_version:-24.04}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
83
ct/endurain.sh
Normal file
83
ct/endurain.sh
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
#!/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: johanngrobe
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/joaovitoriasilva/endurain
|
||||||
|
|
||||||
|
APP="Endurain"
|
||||||
|
var_tags="${var_tags:-sport;social-media}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-2048}"
|
||||||
|
var_disk="${var_disk:-5}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -d /opt/endurain ]]; then
|
||||||
|
msg_error "No ${APP} installation found!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if check_for_gh_release "endurain" "joaovitoriasilva/endurain"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop endurain
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Creating Backup"
|
||||||
|
cp /opt/endurain/.env /opt/endurain.env
|
||||||
|
cp /opt/endurain/frontend/app/dist/env.js /opt/endurain.env.js
|
||||||
|
msg_ok "Created Backup"
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "endurain" "joaovitoriasilva/endurain" "tarball" "latest" "/opt/endurain"
|
||||||
|
|
||||||
|
msg_info "Preparing Update"
|
||||||
|
cd /opt/endurain
|
||||||
|
rm -rf \
|
||||||
|
/opt/endurain/{docs,example.env,screenshot_01.png} \
|
||||||
|
/opt/endurain/docker* \
|
||||||
|
/opt/endurain/*.yml
|
||||||
|
cp /opt/endurain.env /opt/endurain/.env
|
||||||
|
rm /opt/endurain.env
|
||||||
|
msg_ok "Prepared Update"
|
||||||
|
|
||||||
|
msg_info "Updating Frontend"
|
||||||
|
cd /opt/endurain/frontend/app
|
||||||
|
$STD npm ci
|
||||||
|
$STD npm run build
|
||||||
|
cp /opt/endurain.env.js /opt/endurain/frontend/app/dist/env.js
|
||||||
|
rm /opt/endurain.env.js
|
||||||
|
msg_ok "Updated Frontend"
|
||||||
|
|
||||||
|
msg_info "Updating Backend"
|
||||||
|
cd /opt/endurain/backend
|
||||||
|
$STD poetry export -f requirements.txt --output requirements.txt --without-hashes
|
||||||
|
$STD uv venv
|
||||||
|
$STD uv pip install -r requirements.txt
|
||||||
|
msg_ok "Backend Updated"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start endurain
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Update Completed 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}:8080${CL}"
|
||||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-5}"
|
|||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-12}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-8}"
|
|||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-12}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
@ -28,7 +28,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
if check_for_gh_release "firefly" "firefly-iii/firefly-iii"; then
|
if check_for_gh_release "firefly" "firefly-iii/firefly-iii"; then
|
||||||
systemctl stop apache2
|
systemctl stop apache2
|
||||||
cp /opt/firefly/.env /opt/.env
|
cp /opt/firefly/.env /opt/.env
|
||||||
|
|||||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-20}"
|
|||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-11}"
|
var_version="${var_version:-11}"
|
||||||
var_unprivileged="${var_unprivileged:-0}"
|
var_unprivileged="${var_unprivileged:-0}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
@ -23,6 +23,7 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
setup_mariadb
|
||||||
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
|
||||||
|
|||||||
@ -28,6 +28,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/glpi-project/glpi/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/glpi-project/glpi/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/')
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||||
msg_error "Currently we don't provide an update function for this ${APP}."
|
msg_error "Currently we don't provide an update function for this ${APP}."
|
||||||
|
|||||||
@ -1,6 +0,0 @@
|
|||||||
______ ___ __ _ __ __
|
|
||||||
/ ____/___ _/ (_) /_ ________ | | / /__ / /_
|
|
||||||
/ / / __ `/ / / __ \/ ___/ _ \_____| | /| / / _ \/ __ \
|
|
||||||
/ /___/ /_/ / / / /_/ / / / __/_____/ |/ |/ / __/ /_/ /
|
|
||||||
\____/\__,_/_/_/_.___/_/ \___/ |__/|__/\___/_.___/
|
|
||||||
|
|
||||||
6
ct/headers/coolify
Normal file
6
ct/headers/coolify
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
______ ___ ____
|
||||||
|
/ ____/___ ____ / (_) __/_ __
|
||||||
|
/ / / __ \/ __ \/ / / /_/ / / /
|
||||||
|
/ /___/ /_/ / /_/ / / / __/ /_/ /
|
||||||
|
\____/\____/\____/_/_/_/ \__, /
|
||||||
|
/____/
|
||||||
6
ct/headers/discopanel
Normal file
6
ct/headers/discopanel
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
____ _ ____ __
|
||||||
|
/ __ \(_)_____________ / __ \____ _____ ___ / /
|
||||||
|
/ / / / / ___/ ___/ __ \/ /_/ / __ `/ __ \/ _ \/ /
|
||||||
|
/ /_/ / (__ ) /__/ /_/ / ____/ /_/ / / / / __/ /
|
||||||
|
/_____/_/____/\___/\____/_/ \__,_/_/ /_/\___/_/
|
||||||
|
|
||||||
6
ct/headers/dokploy
Normal file
6
ct/headers/dokploy
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
____ __ __
|
||||||
|
/ __ \____ / /______ / /___ __ __
|
||||||
|
/ / / / __ \/ //_/ __ \/ / __ \/ / / /
|
||||||
|
/ /_/ / /_/ / ,< / /_/ / / /_/ / /_/ /
|
||||||
|
/_____/\____/_/|_/ .___/_/\____/\__, /
|
||||||
|
/_/ /____/
|
||||||
6
ct/headers/endurain
Normal file
6
ct/headers/endurain
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
______ __ _
|
||||||
|
/ ____/___ ____/ /_ ___________ _(_)___
|
||||||
|
/ __/ / __ \/ __ / / / / ___/ __ `/ / __ \
|
||||||
|
/ /___/ / / / /_/ / /_/ / / / /_/ / / / / /
|
||||||
|
/_____/_/ /_/\__,_/\__,_/_/ \__,_/_/_/ /_/
|
||||||
|
|
||||||
6
ct/headers/invoiceninja
Normal file
6
ct/headers/invoiceninja
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
____ _ _ ___ _
|
||||||
|
/ _/___ _ ______ (_)_______ / | / (_)___ (_)___ _
|
||||||
|
/ // __ \ | / / __ \/ / ___/ _ \/ |/ / / __ \ / / __ `/
|
||||||
|
_/ // / / / |/ / /_/ / / /__/ __/ /| / / / / / / / /_/ /
|
||||||
|
/___/_/ /_/|___/\____/_/\___/\___/_/ |_/_/_/ /_/_/ /\__,_/
|
||||||
|
/___/
|
||||||
6
ct/headers/koel
Normal file
6
ct/headers/koel
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
__ __ __
|
||||||
|
/ //_/___ ___ / /
|
||||||
|
/ ,< / __ \/ _ \/ /
|
||||||
|
/ /| / /_/ / __/ /
|
||||||
|
/_/ |_\____/\___/_/
|
||||||
|
|
||||||
6
ct/headers/metube
Normal file
6
ct/headers/metube
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
__ ___ ______ __
|
||||||
|
/ |/ /__/_ __/_ __/ /_ ___
|
||||||
|
/ /|_/ / _ \/ / / / / / __ \/ _ \
|
||||||
|
/ / / / __/ / / /_/ / /_/ / __/
|
||||||
|
/_/ /_/\___/_/ \__,_/_.___/\___/
|
||||||
|
|
||||||
@ -1,6 +1,6 @@
|
|||||||
_ __ __ _ ___
|
_____
|
||||||
/ | / /__ / /| | / (_)________ _____
|
/ ___/_________ _____ ____ ____ __ __
|
||||||
/ |/ / _ \/ __/ | / / / ___/ __ \/ ___/
|
\__ \/ ___/ __ `/ __ \/ __ \/ __ \/ / / /
|
||||||
/ /| / __/ /_ | |/ / (__ ) /_/ / /
|
___/ / /__/ /_/ / / / / /_/ / /_/ / /_/ /
|
||||||
/_/ |_/\___/\__/ |___/_/____/\____/_/
|
/____/\___/\__,_/_/ /_/\____/ .___/\__, /
|
||||||
|
/_/ /____/
|
||||||
|
|||||||
6
ct/headers/scanopy
Normal file
6
ct/headers/scanopy
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
_____
|
||||||
|
/ ___/_________ _____ ____ ____ __ __
|
||||||
|
\__ \/ ___/ __ `/ __ \/ __ \/ __ \/ / / /
|
||||||
|
___/ / /__/ /_/ / / / / /_/ / /_/ / /_/ /
|
||||||
|
/____/\___/\__,_/_/ /_/\____/ .___/\__, /
|
||||||
|
/_/ /____/
|
||||||
6
ct/headers/snowshare
Normal file
6
ct/headers/snowshare
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
_____ _____ __
|
||||||
|
/ ___/____ ____ _ __/ ___// /_ ____ _________
|
||||||
|
\__ \/ __ \/ __ \ | /| / /\__ \/ __ \/ __ `/ ___/ _ \
|
||||||
|
___/ / / / / /_/ / |/ |/ /___/ / / / / /_/ / / / __/
|
||||||
|
/____/_/ /_/\____/|__/|__//____/_/ /_/\__,_/_/ \___/
|
||||||
|
|
||||||
6
ct/headers/speedtest-tracker
Normal file
6
ct/headers/speedtest-tracker
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
_____ ____ __ ______ __
|
||||||
|
/ ___/____ ___ ___ ____/ / /____ _____/ /_ /_ __/________ ______/ /_____ _____
|
||||||
|
\__ \/ __ \/ _ \/ _ \/ __ / __/ _ \/ ___/ __/_____/ / / ___/ __ `/ ___/ //_/ _ \/ ___/
|
||||||
|
___/ / /_/ / __/ __/ /_/ / /_/ __(__ ) /_/_____/ / / / / /_/ / /__/ ,< / __/ /
|
||||||
|
/____/ .___/\___/\___/\__,_/\__/\___/____/\__/ /_/ /_/ \__,_/\___/_/|_|\___/_/
|
||||||
|
/_/
|
||||||
6
ct/headers/wallabag
Normal file
6
ct/headers/wallabag
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
_ __ ____ __
|
||||||
|
| | / /___ _/ / /___ _/ /_ ____ _____ _
|
||||||
|
| | /| / / __ `/ / / __ `/ __ \/ __ `/ __ `/
|
||||||
|
| |/ |/ / /_/ / / / /_/ / /_/ / /_/ / /_/ /
|
||||||
|
|__/|__/\__,_/_/_/\__,_/_.___/\__,_/\__, /
|
||||||
|
/____/
|
||||||
@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
|||||||
var_ram="${var_ram:-512}"
|
var_ram="${var_ram:-512}"
|
||||||
var_disk="${var_disk:-2}"
|
var_disk="${var_disk:-2}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@ -27,45 +27,45 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL "https://api.github.com/repos/linuxserver/Heimdall/releases/latest" | awk '/tag_name/{print $4;exit}' FS='[""]')
|
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
if check_for_gh_release "Heimdall" "linuxserver/Heimdall"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop heimdall
|
systemctl stop heimdall
|
||||||
sleep 1
|
sleep 1
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Backing up Data"
|
msg_info "Backing up Data"
|
||||||
cp -R /opt/Heimdall/database database-backup
|
cp -R /opt/Heimdall/database database-backup
|
||||||
cp -R /opt/Heimdall/public public-backup
|
cp -R /opt/Heimdall/public public-backup
|
||||||
sleep 1
|
sleep 1
|
||||||
msg_ok "Backed up Data"
|
msg_ok "Backed up Data"
|
||||||
msg_info "Updating Heimdall Dashboard to ${RELEASE}"
|
|
||||||
curl -fsSL "https://github.com/linuxserver/Heimdall/archive/${RELEASE}.tar.gz" -o $(basename "https://github.com/linuxserver/Heimdall/archive/${RELEASE}.tar.gz")
|
setup_composer
|
||||||
tar xzf "${RELEASE}".tar.gz
|
fetch_and_deploy_gh_release "Heimdall" "linuxserver/Heimdall" "tarball"
|
||||||
VER=$(curl -fsSL https://api.github.com/repos/linuxserver/Heimdall/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
cp -R Heimdall-"${VER}"/* /opt/Heimdall
|
msg_info "Updating Heimdall-Dashboard"
|
||||||
cd /opt/Heimdall
|
cd /opt/Heimdall
|
||||||
$STD apt-get install -y composer
|
|
||||||
export COMPOSER_ALLOW_SUPERUSER=1
|
export COMPOSER_ALLOW_SUPERUSER=1
|
||||||
$STD composer dump-autoload
|
$STD composer dump-autoload
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
msg_ok "Updated Heimdall-Dashboard"
|
||||||
msg_ok "Updated Heimdall Dashboard to ${RELEASE}"
|
|
||||||
msg_info "Restoring Data"
|
msg_info "Restoring Data"
|
||||||
cd ~
|
cd ~
|
||||||
cp -R database-backup/* /opt/Heimdall/database
|
cp -R database-backup/* /opt/Heimdall/database
|
||||||
cp -R public-backup/* /opt/Heimdall/public
|
cp -R public-backup/* /opt/Heimdall/public
|
||||||
sleep 1
|
sleep 1
|
||||||
msg_ok "Restored Data"
|
msg_ok "Restored Data"
|
||||||
msg_info "Cleanup"
|
|
||||||
rm -rf {"${RELEASE}".tar.gz,Heimdall-"${VER}",public-backup,database-backup,Heimdall}
|
msg_info "Cleaning Up"
|
||||||
|
rm -rf {public-backup,database-backup}
|
||||||
sleep 1
|
sleep 1
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned Up"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start heimdall.service
|
systemctl start heimdall.service
|
||||||
sleep 2
|
sleep 2
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}."
|
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
155
ct/homarr.sh
155
ct/homarr.sh
@ -1,21 +1,20 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: CrazyWolf13
|
# Author: MickLesk (CanbiZ) | Co-Author: CrazyWolf13
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://homarr.dev/
|
# Source: https://homarr.dev/
|
||||||
|
|
||||||
APP="homarr"
|
APP="homarr"
|
||||||
var_tags="${var_tags:-arr;dashboard}"
|
var_tags="${var_tags:-arr;dashboard}"
|
||||||
var_cpu="${var_cpu:-3}"
|
var_cpu="${var_cpu:-2}"
|
||||||
var_ram="${var_ram:-6144}"
|
var_ram="${var_ram:-1024}"
|
||||||
var_disk="${var_disk:-8}"
|
var_disk="${var_disk:-8}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
|
|
||||||
variables
|
variables
|
||||||
color
|
color
|
||||||
catch_errors
|
catch_errors
|
||||||
@ -28,69 +27,43 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if [[ -f /opt/homarr/database/db.sqlite ]]; then
|
|
||||||
msg_error "Old Homarr detected due to existing database file (/opt/homarr/database/db.sqlite)."
|
|
||||||
msg_error "Update not supported. Refer to:"
|
|
||||||
msg_error " - https://github.com/community-scripts/ProxmoxVE/discussions/1551"
|
|
||||||
msg_error " - https://homarr.dev/docs/getting-started/after-the-installation/#importing-a-zip-from-version-before-100"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
if [[ ! -f /opt/run_homarr.sh ]]; then
|
|
||||||
msg_info "Detected outdated and missing service files"
|
|
||||||
msg_error "Warning - The port of homarr changed from 3000 to 7575"
|
|
||||||
$STD apt-get install -y nginx gettext openssl gpg
|
|
||||||
sed -i '/^NODE_ENV=/d' /opt/homarr/.env && echo "NODE_ENV='production'" >>/opt/homarr/.env
|
|
||||||
sed -i '/^DB_DIALECT=/d' /opt/homarr/.env && echo "DB_DIALECT='sqlite'" >>/opt/homarr/.env
|
|
||||||
cat <<'EOF' >/opt/run_homarr.sh
|
|
||||||
#!/bin/bash
|
|
||||||
set -a
|
|
||||||
source /opt/homarr/.env
|
|
||||||
set +a
|
|
||||||
export DB_DIALECT='sqlite'
|
|
||||||
export AUTH_SECRET=$(openssl rand -base64 32)
|
|
||||||
export CRON_JOB_API_KEY=$(openssl rand -base64 32)
|
|
||||||
node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT
|
|
||||||
for dir in $(find /opt/homarr_db/migrations/migrations -mindepth 1 -maxdepth 1 -type d); do
|
|
||||||
dirname=$(basename "$dir")
|
|
||||||
mkdir -p "/opt/homarr_db/migrations/$dirname"
|
|
||||||
cp -r "$dir"/* "/opt/homarr_db/migrations/$dirname/" 2>/dev/null || true
|
|
||||||
done
|
|
||||||
export HOSTNAME=$(ip route get 1.1.1.1 | grep -oP 'src \K[^ ]+')
|
|
||||||
envsubst '${HOSTNAME}' < /etc/nginx/templates/nginx.conf > /etc/nginx/nginx.conf
|
|
||||||
nginx -g 'daemon off;' &
|
|
||||||
redis-server /opt/homarr/packages/redis/redis.conf &
|
|
||||||
node apps/tasks/tasks.cjs &
|
|
||||||
node apps/websocket/wssServer.cjs &
|
|
||||||
node apps/nextjs/server.js & PID=$!
|
|
||||||
wait $PID
|
|
||||||
EOF
|
|
||||||
chmod +x /opt/run_homarr.sh
|
|
||||||
rm /etc/systemd/system/homarr.service
|
|
||||||
cat <<EOF >/etc/systemd/system/homarr.service
|
|
||||||
[Unit]
|
|
||||||
Description=Homarr Service
|
|
||||||
After=network.target
|
|
||||||
[Service]
|
|
||||||
Type=exec
|
|
||||||
WorkingDirectory=/opt/homarr
|
|
||||||
EnvironmentFile=-/opt/homarr/.env
|
|
||||||
ExecStart=/opt/run_homarr.sh
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
msg_ok "Updated Services"
|
|
||||||
systemctl daemon-reload
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "homarr" "homarr-labs/homarr"; then
|
if check_for_gh_release "homarr" "homarr-labs/homarr"; then
|
||||||
msg_info "Stopping Services (Patience)"
|
msg_info "Stopping Services (Patience)"
|
||||||
systemctl stop homarr
|
systemctl stop homarr
|
||||||
|
systemctl stop redis-server
|
||||||
msg_ok "Services Stopped"
|
msg_ok "Services Stopped"
|
||||||
|
|
||||||
msg_info "Backup Data"
|
if ! { grep -q '^REDIS_IS_EXTERNAL=' /opt/homarr/.env 2>/dev/null || grep -q '^REDIS_IS_EXTERNAL=' /opt/homarr.env 2>/dev/null; }; then
|
||||||
mkdir -p /opt/homarr-data-backup
|
DEBIAN_VERSION=$(cat /etc/debian_version 2>/dev/null | cut -d'.' -f1)
|
||||||
cp /opt/homarr/.env /opt/homarr-data-backup/.env
|
if [[ -n "$DEBIAN_VERSION" ]] && [[ "$DEBIAN_VERSION" -lt 13 ]]; then
|
||||||
msg_ok "Backup Data"
|
msg_warn "⚠️ COMPATIBILITY WARNING ⚠️"
|
||||||
|
msg_warn "You are running Debian ${DEBIAN_VERSION}. Homarr's requires Debian 13"
|
||||||
|
msg_warn ""
|
||||||
|
msg_warn "Please Upgrade to Debian 13:"
|
||||||
|
msg_warn "See: https://github.com/community-scripts/ProxmoxVE/discussions/7489"
|
||||||
|
msg_warn ""
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
msg_info "Fixing old structure"
|
||||||
|
# fix musl issues because homarr compiles on alpine not debian soure: https://github.com/alexander-akhmetov/python-telegram/issues/3
|
||||||
|
$STD apt install -y musl-dev
|
||||||
|
ln -s /usr/lib/x86_64-linux-musl/libc.so /lib/libc.musl-x86_64.so.1
|
||||||
|
cp /opt/homarr/.env /opt/homarr.env
|
||||||
|
echo "REDIS_IS_EXTERNAL='true'" >> /opt/homarr.env
|
||||||
|
sed -i 's|^ExecStart=.*|ExecStart=/opt/homarr/run.sh|' /etc/systemd/system/homarr.service
|
||||||
|
sed -i 's|^EnvironmentFile=.*|EnvironmentFile=-/opt/homarr.env|' /etc/systemd/system/homarr.service
|
||||||
|
chown -R redis:redis /appdata/redis
|
||||||
|
chmod 744 /appdata/redis
|
||||||
|
mkdir -p /etc/systemd/system/redis-server.service.d/
|
||||||
|
cat <<EOF >/etc/systemd/system/redis-server.service.d/override.conf
|
||||||
|
[Service]
|
||||||
|
ReadWritePaths=-/appdata/redis -/var/lib/redis -/var/log/redis -/var/run/redis -/etc/redis
|
||||||
|
EOF
|
||||||
|
systemctl daemon-reload
|
||||||
|
rm /opt/run_homarr.sh
|
||||||
|
msg_ok "Fixed old structure"
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Updating Nodejs"
|
msg_info "Updating Nodejs"
|
||||||
$STD apt update
|
$STD apt update
|
||||||
@ -98,69 +71,21 @@ EOF
|
|||||||
msg_ok "Updated Nodejs"
|
msg_ok "Updated Nodejs"
|
||||||
|
|
||||||
NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
|
NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
|
||||||
NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.packageManager | split("@")[1]')"
|
|
||||||
setup_nodejs
|
setup_nodejs
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr" "prebuild" "latest" "/opt/homarr" "build-amd64.tar.gz"
|
||||||
|
|
||||||
rm -rf /opt/homarr
|
msg_info "Updating Homarr"
|
||||||
fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr"
|
cp /opt/homarr/redis.conf /etc/redis/redis.conf
|
||||||
|
|
||||||
msg_info "Updating and rebuilding ${APP} (Patience)"
|
|
||||||
rm /opt/run_homarr.sh
|
|
||||||
cat <<'EOF' >/opt/run_homarr.sh
|
|
||||||
#!/bin/bash
|
|
||||||
set -a
|
|
||||||
source /opt/homarr/.env
|
|
||||||
set +a
|
|
||||||
export DB_DIALECT='sqlite'
|
|
||||||
export AUTH_SECRET=$(openssl rand -base64 32)
|
|
||||||
export CRON_JOB_API_KEY=$(openssl rand -base64 32)
|
|
||||||
node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT
|
|
||||||
for dir in $(find /opt/homarr_db/migrations/migrations -mindepth 1 -maxdepth 1 -type d); do
|
|
||||||
dirname=$(basename "$dir")
|
|
||||||
mkdir -p "/opt/homarr_db/migrations/$dirname"
|
|
||||||
cp -r "$dir"/* "/opt/homarr_db/migrations/$dirname/" 2>/dev/null || true
|
|
||||||
done
|
|
||||||
export HOSTNAME=$(ip route get 1.1.1.1 | grep -oP 'src \K[^ ]+')
|
|
||||||
envsubst '${HOSTNAME}' < /etc/nginx/templates/nginx.conf > /etc/nginx/nginx.conf
|
|
||||||
nginx -g 'daemon off;' &
|
|
||||||
redis-server /opt/homarr/packages/redis/redis.conf &
|
|
||||||
node apps/tasks/tasks.cjs &
|
|
||||||
node apps/websocket/wssServer.cjs &
|
|
||||||
node apps/nextjs/server.js & PID=$!
|
|
||||||
wait $PID
|
|
||||||
EOF
|
|
||||||
chmod +x /opt/run_homarr.sh
|
|
||||||
mv /opt/homarr-data-backup/.env /opt/homarr/.env
|
|
||||||
cd /opt/homarr
|
|
||||||
$STD pnpm install --recursive --frozen-lockfile --shamefully-hoist
|
|
||||||
$STD pnpm build
|
|
||||||
cp /opt/homarr/apps/nextjs/next.config.ts .
|
|
||||||
cp /opt/homarr/apps/nextjs/package.json .
|
|
||||||
cp -r /opt/homarr/packages/db/migrations /opt/homarr_db/migrations
|
|
||||||
cp -r /opt/homarr/apps/nextjs/.next/standalone/* /opt/homarr
|
|
||||||
mkdir -p /appdata/redis
|
|
||||||
cp /opt/homarr/packages/redis/redis.conf /opt/homarr/redis.conf
|
|
||||||
rm /etc/nginx/nginx.conf
|
rm /etc/nginx/nginx.conf
|
||||||
mkdir -p /etc/nginx/templates
|
|
||||||
cp /opt/homarr/nginx.conf /etc/nginx/templates/nginx.conf
|
cp /opt/homarr/nginx.conf /etc/nginx/templates/nginx.conf
|
||||||
|
msg_ok "Updated Homarr"
|
||||||
mkdir -p /opt/homarr/apps/cli
|
|
||||||
cp /opt/homarr/packages/cli/cli.cjs /opt/homarr/apps/cli/cli.cjs
|
|
||||||
echo $'#!/bin/bash\ncd /opt/homarr/apps/cli && node ./cli.cjs "$@"' >/usr/bin/homarr
|
|
||||||
chmod +x /usr/bin/homarr
|
|
||||||
|
|
||||||
mkdir /opt/homarr/build
|
|
||||||
cp ./node_modules/better-sqlite3/build/Release/better_sqlite3.node ./build/better_sqlite3.node
|
|
||||||
msg_ok "Updated ${APP}"
|
|
||||||
|
|
||||||
msg_info "Starting Services"
|
msg_info "Starting Services"
|
||||||
|
chmod +x /opt/homarr/run.sh
|
||||||
systemctl start homarr
|
systemctl start homarr
|
||||||
|
systemctl start redis-server
|
||||||
msg_ok "Started Services"
|
msg_ok "Started Services"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
read -p "${TAB3}It's recommended to reboot the LXC after an update, would you like to reboot the LXC now ? (y/n): " choice
|
|
||||||
if [[ "$choice" =~ ^[Yy]$ ]]; then
|
|
||||||
reboot
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,7 +23,7 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -f /etc/apt/sources.list.d/homebridge.list ]]; then
|
if ! dpkg -s homebridge >/dev/null 2>&1; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|||||||
@ -27,6 +27,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
if check_for_gh_release "hortusfox" "danielbrendel/hortusfox-web"; then
|
if check_for_gh_release "hortusfox" "danielbrendel/hortusfox-web"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop apache2
|
systemctl stop apache2
|
||||||
|
|||||||
@ -13,6 +13,7 @@ var_ram="${var_ram:-4096}"
|
|||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
@ -10,8 +10,8 @@ var_tags="${var_tags:-inventory}"
|
|||||||
var_cpu="${var_cpu:-2}"
|
var_cpu="${var_cpu:-2}"
|
||||||
var_ram="${var_ram:-2048}"
|
var_ram="${var_ram:-2048}"
|
||||||
var_disk="${var_disk:-6}"
|
var_disk="${var_disk:-6}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-ubuntu}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-24.04}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@ -28,10 +28,16 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
msg_info "Updating $APP"
|
|
||||||
|
if ! grep -qE "^ID=(ubuntu)$" /etc/os-release; then
|
||||||
|
msg_error "Unsupported OS. InvenTree requires Ubuntu (20.04/22.04/24.04)."
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Updating InvenTree"
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt install --only-upgrade inventree -y
|
$STD apt install --only-upgrade inventree -y
|
||||||
msg_ok "Updated $APP"
|
msg_ok "Updated InvenTree"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
79
ct/invoiceninja.sh
Normal file
79
ct/invoiceninja.sh
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://invoiceninja.com/
|
||||||
|
|
||||||
|
APP="InvoiceNinja"
|
||||||
|
var_tags="${var_tags:-invoicing;business}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-2048}"
|
||||||
|
var_disk="${var_disk:-8}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_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/invoiceninja ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
setup_mariadb
|
||||||
|
if check_for_gh_release "invoiceninja" "invoiceninja/invoiceninja"; then
|
||||||
|
msg_info "Stopping Services"
|
||||||
|
systemctl stop supervisor nginx php8.4-fpm
|
||||||
|
msg_ok "Stopped Services"
|
||||||
|
|
||||||
|
msg_info "Creating Backup"
|
||||||
|
mkdir -p /tmp/invoiceninja_backup
|
||||||
|
cp /opt/invoiceninja/.env /tmp/invoiceninja_backup/
|
||||||
|
cp -r /opt/invoiceninja/storage /tmp/invoiceninja_backup/ 2>/dev/null || true
|
||||||
|
cp -r /opt/invoiceninja/public/storage /tmp/invoiceninja_backup/public_storage 2>/dev/null || true
|
||||||
|
msg_ok "Created Backup"
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "invoiceninja" "invoiceninja/invoiceninja" "prebuild" "latest" "/opt/invoiceninja" "invoiceninja.tar.gz"
|
||||||
|
|
||||||
|
msg_info "Restoring Data"
|
||||||
|
cp /tmp/invoiceninja_backup/.env /opt/invoiceninja/
|
||||||
|
cp -r /tmp/invoiceninja_backup/storage/* /opt/invoiceninja/storage/ 2>/dev/null || true
|
||||||
|
cp -r /tmp/invoiceninja_backup/public_storage/* /opt/invoiceninja/public/storage/ 2>/dev/null || true
|
||||||
|
rm -rf /tmp/invoiceninja_backup
|
||||||
|
msg_ok "Restored Data"
|
||||||
|
|
||||||
|
msg_info "Running Migrations"
|
||||||
|
cd /opt/invoiceninja
|
||||||
|
$STD php artisan migrate --force
|
||||||
|
$STD php artisan config:clear
|
||||||
|
$STD php artisan cache:clear
|
||||||
|
$STD php artisan optimize
|
||||||
|
chown -R www-data:www-data /opt/invoiceninja
|
||||||
|
chmod -R 755 /opt/invoiceninja/storage
|
||||||
|
msg_ok "Ran Migrations"
|
||||||
|
|
||||||
|
msg_info "Starting Services"
|
||||||
|
systemctl start php8.4-fpm nginx supervisor
|
||||||
|
msg_ok "Started Services"
|
||||||
|
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/setup${CL}"
|
||||||
@ -28,6 +28,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
|
|
||||||
msg_info "Updating LXC"
|
msg_info "Updating LXC"
|
||||||
$STD apt update
|
$STD apt update
|
||||||
|
|||||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-16}"
|
|||||||
var_os="${var_os:-ubuntu}"
|
var_os="${var_os:-ubuntu}"
|
||||||
var_version="${var_version:-24.04}"
|
var_version="${var_version:-24.04}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
@ -30,6 +30,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
|
|
||||||
PHP_VERSION="8.4" PHP_MODULE="mysql" PHP_APACHE="YES" setup_php
|
PHP_VERSION="8.4" PHP_MODULE="mysql" PHP_APACHE="YES" setup_php
|
||||||
setup_composer
|
setup_composer
|
||||||
@ -56,7 +57,7 @@ function update_script() {
|
|||||||
[ -f "$BACKUP_DIR/local.yaml" ] && cp "$BACKUP_DIR/local.yaml" /opt/kimai/config/packages/
|
[ -f "$BACKUP_DIR/local.yaml" ] && cp "$BACKUP_DIR/local.yaml" /opt/kimai/config/packages/
|
||||||
rm -rf "$BACKUP_DIR"
|
rm -rf "$BACKUP_DIR"
|
||||||
cd /opt/kimai
|
cd /opt/kimai
|
||||||
sed -i '/^admin_lte:/,/^[^[:space:]]/d' config/local.yaml
|
sed -i '/^admin_lte:/,/^[^[:space:]]/d' config/packages/local.yaml
|
||||||
$STD composer install --no-dev --optimize-autoloader
|
$STD composer install --no-dev --optimize-autoloader
|
||||||
$STD bin/console kimai:update
|
$STD bin/console kimai:update
|
||||||
msg_ok "Updated Kimai"
|
msg_ok "Updated Kimai"
|
||||||
|
|||||||
81
ct/koel.sh
Normal file
81
ct/koel.sh
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://koel.dev/
|
||||||
|
|
||||||
|
APP="Koel"
|
||||||
|
var_tags="${var_tags:-music;streaming}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-2048}"
|
||||||
|
var_disk="${var_disk:-8}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_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/koel ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "koel" "koel/koel"; then
|
||||||
|
msg_info "Stopping Services"
|
||||||
|
systemctl stop nginx php8.4-fpm
|
||||||
|
msg_ok "Stopped Services"
|
||||||
|
|
||||||
|
msg_info "Creating Backup"
|
||||||
|
mkdir -p /tmp/koel_backup
|
||||||
|
cp /opt/koel/.env /tmp/koel_backup/
|
||||||
|
cp -r /opt/koel/storage /tmp/koel_backup/ 2>/dev/null || true
|
||||||
|
cp -r /opt/koel/public/img /tmp/koel_backup/ 2>/dev/null || true
|
||||||
|
msg_ok "Created Backup"
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "koel" "koel/koel" "prebuild" "latest" "/opt/koel" "koel-*.tar.gz"
|
||||||
|
|
||||||
|
msg_info "Restoring Data"
|
||||||
|
cp /tmp/koel_backup/.env /opt/koel/
|
||||||
|
cp -r /tmp/koel_backup/storage/* /opt/koel/storage/ 2>/dev/null || true
|
||||||
|
cp -r /tmp/koel_backup/img/* /opt/koel/public/img/ 2>/dev/null || true
|
||||||
|
rm -rf /tmp/koel_backup
|
||||||
|
msg_ok "Restored Data"
|
||||||
|
|
||||||
|
msg_info "Running Migrations"
|
||||||
|
cd /opt/koel
|
||||||
|
export COMPOSER_ALLOW_SUPERUSER=1
|
||||||
|
$STD composer install --no-interaction --no-dev --optimize-autoloader
|
||||||
|
$STD php artisan migrate --force
|
||||||
|
$STD php artisan config:clear
|
||||||
|
$STD php artisan cache:clear
|
||||||
|
$STD php artisan view:clear
|
||||||
|
$STD php artisan koel:init --no-assets --no-interaction
|
||||||
|
chown -R www-data:www-data /opt/koel
|
||||||
|
chmod -R 775 /opt/koel/storage
|
||||||
|
msg_ok "Ran Migrations"
|
||||||
|
|
||||||
|
msg_info "Starting Services"
|
||||||
|
systemctl start php8.4-fpm nginx
|
||||||
|
msg_ok "Started Services"
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
||||||
@ -28,7 +28,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
if check_for_gh_release "leantime" "Leantime/leantime"; then
|
if check_for_gh_release "leantime" "Leantime/leantime"; then
|
||||||
msg_info "Creating Backup"
|
msg_info "Creating Backup"
|
||||||
mariadb-dump leantime >"/opt/${APP}_db_backup_$(date +%F).sql"
|
mariadb-dump leantime >"/opt/${APP}_db_backup_$(date +%F).sql"
|
||||||
|
|||||||
@ -27,6 +27,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
msg_info "Updating LibreNMS"
|
msg_info "Updating LibreNMS"
|
||||||
su librenms
|
su librenms
|
||||||
cd /opt/librenms
|
cd /opt/librenms
|
||||||
|
|||||||
@ -30,13 +30,13 @@ function update_script() {
|
|||||||
|
|
||||||
if check_for_gh_release "librespeed-rust" "librespeed/speedtest-rust"; then
|
if check_for_gh_release "librespeed-rust" "librespeed/speedtest-rust"; then
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
systemctl stop librespeed_rs
|
systemctl stop speedtest_rs
|
||||||
msg_ok "Services Stopped"
|
msg_ok "Services Stopped"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "librespeed-rust" "librespeed/speedtest-rust" "binary" "latest" "/opt/librespeed-rust" "librespeed-rs-x86_64-unknown-linux-gnu.deb"
|
fetch_and_deploy_gh_release "librespeed-rust" "librespeed/speedtest-rust" "binary" "latest" "/opt/librespeed-rust" "librespeed-rs-x86_64-unknown-linux-gnu.deb"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start librespeed_rs
|
systemctl start speedtest_rs
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@ -29,7 +29,7 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
setup_uv
|
PYTHON_VERSION="3.12" setup_uv
|
||||||
|
|
||||||
if check_for_gh_release "libretranslate" "LibreTranslate/LibreTranslate"; then
|
if check_for_gh_release "libretranslate" "LibreTranslate/LibreTranslate"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
@ -39,7 +39,7 @@ function update_script() {
|
|||||||
msg_info "Updating LibreTranslate"
|
msg_info "Updating LibreTranslate"
|
||||||
cd /opt/libretranslate
|
cd /opt/libretranslate
|
||||||
source .venv/bin/activate
|
source .venv/bin/activate
|
||||||
$STD pip install -U libretranslate
|
$STD uv pip install -U libretranslate
|
||||||
msg_ok "Updated LibreTranslate"
|
msg_ok "Updated LibreTranslate"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
|
|||||||
@ -27,6 +27,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
|
|
||||||
msg_warn "Application is updated via Web Interface"
|
msg_warn "Application is updated via Web Interface"
|
||||||
exit
|
exit
|
||||||
|
|||||||
@ -28,6 +28,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
if check_for_gh_release "mmdl" "intri-in/manage-my-damn-life-nextjs"; then
|
if check_for_gh_release "mmdl" "intri-in/manage-my-damn-life-nextjs"; then
|
||||||
msg_info "Stopping service"
|
msg_info "Stopping service"
|
||||||
systemctl stop mmdl
|
systemctl stop mmdl
|
||||||
|
|||||||
@ -27,6 +27,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
msg_info "Updating ${APP} LXC"
|
msg_info "Updating ${APP} LXC"
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt -y upgrade
|
$STD apt -y upgrade
|
||||||
|
|||||||
113
ct/metube.sh
Normal file
113
ct/metube.sh
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
#!/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://github.com/alexta69/metube
|
||||||
|
|
||||||
|
APP="MeTube"
|
||||||
|
var_tags="${var_tags:-media;youtube}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
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 /opt/metube ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $(echo ":$PATH:" != *":/usr/local/bin:"*) ]]; then
|
||||||
|
echo -e "\nexport PATH=\"/usr/local/bin:\$PATH\"" >>~/.bashrc
|
||||||
|
source ~/.bashrc
|
||||||
|
if ! command -v deno &>/dev/null; then
|
||||||
|
export DENO_INSTALL="/usr/local"
|
||||||
|
curl -fsSL https://deno.land/install.sh | $STD sh -s -- -y
|
||||||
|
else
|
||||||
|
$STD deno upgrade
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "metube" "alexta69/metube"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop metube
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Backing up Old Installation"
|
||||||
|
if [[ -d /opt/metube_bak ]]; then
|
||||||
|
rm -rf /opt/metube_bak
|
||||||
|
fi
|
||||||
|
mv /opt/metube /opt/metube_bak
|
||||||
|
msg_ok "Backup created"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "metube" "alexta69/metube" "tarball" "latest"
|
||||||
|
|
||||||
|
msg_info "Building Frontend"
|
||||||
|
cd /opt/metube/ui
|
||||||
|
$STD npm install
|
||||||
|
$STD node_modules/.bin/ng build
|
||||||
|
msg_ok "Built Frontend"
|
||||||
|
|
||||||
|
PYTHON_VERSION="3.13" setup_uv
|
||||||
|
|
||||||
|
msg_info "Installing Backend Requirements"
|
||||||
|
cd /opt/metube
|
||||||
|
$STD uv sync
|
||||||
|
msg_ok "Installed Backend"
|
||||||
|
|
||||||
|
msg_info "Restoring .env"
|
||||||
|
if [[ -f /opt/metube_bak/.env ]]; then
|
||||||
|
cp /opt/metube_bak/.env /opt/metube/.env
|
||||||
|
fi
|
||||||
|
rm -rf /opt/metube_bak
|
||||||
|
msg_ok "Restored .env"
|
||||||
|
|
||||||
|
if grep -q 'pipenv' /etc/systemd/system/metube.service; then
|
||||||
|
msg_info "Patching systemd Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/metube.service
|
||||||
|
[Unit]
|
||||||
|
Description=Metube - YouTube Downloader
|
||||||
|
After=network.target
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=/opt/metube
|
||||||
|
EnvironmentFile=/opt/metube/.env
|
||||||
|
ExecStart=/opt/metube/.venv/bin/python3 app/main.py
|
||||||
|
Restart=always
|
||||||
|
User=root
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
msg_ok "Patched systemd Service"
|
||||||
|
fi
|
||||||
|
$STD systemctl daemon-reload
|
||||||
|
msg_ok "Service Updated"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start metube
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8081${CL}"
|
||||||
@ -23,7 +23,7 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -f /etc/systemd/system/miniflux.service ]]; then
|
if ! systemctl -q is-enabled miniflux 2>/dev/null; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|||||||
@ -27,6 +27,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
|
|
||||||
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
|
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
|
||||||
|
|
||||||
|
|||||||
@ -3,9 +3,9 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
|||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: vhsdream
|
# Author: vhsdream
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://github.com/maynayza/netvisor
|
# Source: https://github.com/scanopy/scanopy
|
||||||
|
|
||||||
APP="NetVisor"
|
APP="Scanopy"
|
||||||
var_tags="${var_tags:-analytics}"
|
var_tags="${var_tags:-analytics}"
|
||||||
var_cpu="${var_cpu:-2}"
|
var_cpu="${var_cpu:-2}"
|
||||||
var_ram="${var_ram:-3072}"
|
var_ram="${var_ram:-3072}"
|
||||||
@ -29,16 +29,12 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "netvisor" "mayanayza/netvisor"; then
|
|
||||||
msg_info "Stopping services"
|
msg_info "Stopping services"
|
||||||
systemctl stop netvisor-daemon netvisor-server
|
systemctl -q disable --now netvisor-daemon netvisor-server
|
||||||
msg_ok "Stopped services"
|
msg_ok "Stopped services"
|
||||||
|
|
||||||
msg_info "Backing up configurations"
|
NODE_VERSION="24" setup_nodejs
|
||||||
cp /opt/netvisor/.env /opt/netvisor.env.bak
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "scanopy" "scanopy/scanopy" "tarball" "latest" "/opt/scanopy"
|
||||||
msg_ok "Backed up configurations"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "netvisor" "mayanayza/netvisor" "tarball" "latest" "/opt/netvisor"
|
|
||||||
|
|
||||||
if ! dpkg -l | grep -q "pkg-config"; then
|
if ! dpkg -l | grep -q "pkg-config"; then
|
||||||
$STD apt install -y pkg-config
|
$STD apt install -y pkg-config
|
||||||
@ -46,45 +42,61 @@ function update_script() {
|
|||||||
if ! dpkg -l | grep -q "libssl-dev"; then
|
if ! dpkg -l | grep -q "libssl-dev"; then
|
||||||
$STD apt install -y libssl-dev
|
$STD apt install -y libssl-dev
|
||||||
fi
|
fi
|
||||||
TOOLCHAIN="$(grep "channel" /opt/netvisor/backend/rust-toolchain.toml | awk -F\" '{print $2}')"
|
TOOLCHAIN="$(grep "channel" /opt/scanopy/backend/rust-toolchain.toml | awk -F\" '{print $2}')"
|
||||||
RUST_TOOLCHAIN=$TOOLCHAIN setup_rust
|
RUST_TOOLCHAIN=$TOOLCHAIN setup_rust
|
||||||
|
|
||||||
cp /opt/netvisor.env.bak /opt/netvisor/.env
|
mv /opt/netvisor/.env /opt/scanopy/.env
|
||||||
LOCAL_IP="$(hostname -I | awk '{print $1}')"
|
if [[ -f /opt/netvisor/oidc.toml ]]; then
|
||||||
if ! grep -q "PUBLIC_URL" /opt/netvisor/.env; then
|
mv /opt/netvisor/oidc.toml /opt/scanopy/oidc.toml
|
||||||
sed -i "\|_PATH=|a\NETVISOR_PUBLIC_URL=http://${LOCAL_IP}:60072" /opt/netvisor/.env
|
|
||||||
fi
|
fi
|
||||||
sed -i 's|_TARGET=.*$|_URL=http://127.0.0.1:60072|' /opt/netvisor/.env
|
LOCAL_IP="$(hostname -I | awk '{print $1}')"
|
||||||
|
if ! grep -q "PUBLIC_URL" /opt/scanopy/.env; then
|
||||||
|
sed -i "\|_PATH=|a\NETVISOR_PUBLIC_URL=http://${LOCAL_IP}:60072" /opt/scanopy/.env
|
||||||
|
fi
|
||||||
|
sed -i 's|_TARGET=.*$|_URL=http://127.0.0.1:60072|' /opt/scanopy/.env
|
||||||
|
sed -i 's/NETVISOR/SCANOPY/g; s|netvisor/|scanopy/|' /opt/scanopy/.env
|
||||||
|
|
||||||
msg_info "Creating frontend UI"
|
msg_info "Creating frontend UI"
|
||||||
export PUBLIC_SERVER_HOSTNAME=default
|
export PUBLIC_SERVER_HOSTNAME=default
|
||||||
export PUBLIC_SERVER_PORT=""
|
export PUBLIC_SERVER_PORT=""
|
||||||
cd /opt/netvisor/ui
|
cd /opt/scanopy/ui
|
||||||
$STD npm ci --no-fund --no-audit
|
$STD npm ci --no-fund --no-audit
|
||||||
$STD npm run build
|
$STD npm run build
|
||||||
msg_ok "Created frontend UI"
|
msg_ok "Created frontend UI"
|
||||||
|
|
||||||
msg_info "Building Netvisor-server (patience)"
|
msg_info "Building Scanopy-server (patience)"
|
||||||
cd /opt/netvisor/backend
|
cd /opt/scanopy/backend
|
||||||
$STD cargo build --release --bin server
|
$STD cargo build --release --bin server
|
||||||
mv ./target/release/server /usr/bin/netvisor-server
|
mv ./target/release/server /usr/bin/scanopy-server
|
||||||
msg_ok "Built Netvisor-server"
|
msg_ok "Built Scanopy-server"
|
||||||
|
|
||||||
msg_info "Building Netvisor-daemon"
|
msg_info "Building Scanopy-daemon"
|
||||||
$STD cargo build --release --bin daemon
|
$STD cargo build --release --bin daemon
|
||||||
cp ./target/release/daemon /usr/bin/netvisor-daemon
|
cp ./target/release/daemon /usr/bin/scanopy-daemon
|
||||||
msg_ok "Built Netvisor-daemon"
|
msg_ok "Built Scanopy-daemon"
|
||||||
|
|
||||||
|
sed -i '/^ \"server_target.*$/d' /root/.config/daemon/config.json
|
||||||
sed -i -e 's|-target|-url|' \
|
sed -i -e 's|-target|-url|' \
|
||||||
-e 's| --server-port |:|' \
|
-e 's| --server-port |:|' \
|
||||||
|
-e 's/NetVisor/Scanopy/' \
|
||||||
|
-e 's/netvisor/scanopy/' \
|
||||||
/etc/systemd/system/netvisor-daemon.service
|
/etc/systemd/system/netvisor-daemon.service
|
||||||
sed -i '/^ \"server_target.*$/d' /root/.config/daemon/config.json
|
mv /etc/systemd/system/netvisor-daemon.service /etc/systemd/system/scanopy-daemon.service
|
||||||
|
sed -i -e 's/NetVisor/Scanopy/' \
|
||||||
|
-e 's/netvisor/scanopy/g' \
|
||||||
|
/etc/systemd/system/netvisor-server.service
|
||||||
|
mv /etc/systemd/system/netvisor-server.service /etc/systemd/system/scanopy-server.service
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
|
|
||||||
msg_info "Starting services"
|
msg_info "Starting services"
|
||||||
systemctl start netvisor-server netvisor-daemon
|
systemctl -q enable --now scanopy-server scanopy-daemon
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
fi
|
|
||||||
|
sed -i 's/netvisor/scanopy/' /usr/bin/update
|
||||||
|
mv ~/NetVisor.creds ~/scanopy.creds
|
||||||
|
rm ~/.netvisor
|
||||||
|
rm -rf /opt/netvisor
|
||||||
|
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,3 +108,4 @@ msg_ok "Completed Successfully!\n"
|
|||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:60072${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:60072${CL}"
|
||||||
|
echo -e "${INFO}${YW} Then create your account, and run the 'configure_daemon.sh' script to setup the daemon.${CL}"
|
||||||
|
|||||||
@ -12,6 +12,7 @@ var_ram="${var_ram:-4096}"
|
|||||||
var_disk="${var_disk:-35}"
|
var_disk="${var_disk:-35}"
|
||||||
var_os="${var_os:-ubuntu}"
|
var_os="${var_os:-ubuntu}"
|
||||||
var_version="${var_version:-24.04}"
|
var_version="${var_version:-24.04}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
19
ct/onedev.sh
19
ct/onedev.sh
@ -27,31 +27,30 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
GITHUB_RELEASE=$(curl -fsSL https://api.github.com/repos/theonedev/onedev/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${GITHUB_RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if check_for_gh_release "onedev" "theonedev/onedev"; then
|
||||||
|
JAVA_VERSION="21" setup_java
|
||||||
|
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop onedev
|
systemctl stop onedev
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${GITHUB_RELEASE}"
|
msg_info "Updating OneDev"
|
||||||
cd /opt
|
cd /opt
|
||||||
curl -fsSL "https://code.onedev.io/onedev/server/~site/onedev-latest.tar.gz" -o $(basename "https://code.onedev.io/onedev/server/~site/onedev-latest.tar.gz")
|
curl -fsSL "https://code.onedev.io/onedev/server/~site/onedev-latest.tar.gz" -o onedev-latest.tar.gz
|
||||||
tar -xzf onedev-latest.tar.gz
|
tar -xzf onedev-latest.tar.gz
|
||||||
$STD /opt/onedev-latest/bin/upgrade.sh /opt/onedev
|
$STD /opt/onedev-latest/bin/upgrade.sh /opt/onedev
|
||||||
RELEASE=$(cat /opt/onedev/release.properties | grep "version" | cut -d'=' -f2)
|
|
||||||
rm -rf /opt/onedev-latest
|
rm -rf /opt/onedev-latest
|
||||||
rm -rf /opt/onedev-latest.tar.gz
|
rm -rf /opt/onedev-latest.tar.gz
|
||||||
echo "${RELEASE}" >"/opt/${APP}_version.txt"
|
echo "${CHECK_UPDATE_RELEASE}" >~/.onedev
|
||||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
msg_ok "Updated OneDev"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start onedev
|
systemctl start onedev
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}."
|
|
||||||
fi
|
|
||||||
exit
|
exit
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-25}"
|
|||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
@ -33,6 +34,7 @@ function update_script() {
|
|||||||
msg_info "Creating Backup"
|
msg_info "Creating Backup"
|
||||||
mkdir -p /opt/open-webui-backup
|
mkdir -p /opt/open-webui-backup
|
||||||
cp -a /opt/open-webui/backend/data /opt/open-webui-backup/data || true
|
cp -a /opt/open-webui/backend/data /opt/open-webui-backup/data || true
|
||||||
|
cp -a /opt/open-webui/.env /opt/open-webui-backup/.env || true
|
||||||
msg_ok "Created Backup"
|
msg_ok "Created Backup"
|
||||||
|
|
||||||
msg_info "Removing legacy installation"
|
msg_info "Removing legacy installation"
|
||||||
@ -48,6 +50,7 @@ function update_script() {
|
|||||||
msg_info "Restoring data"
|
msg_info "Restoring data"
|
||||||
mkdir -p /root/.open-webui
|
mkdir -p /root/.open-webui
|
||||||
cp -a /opt/open-webui-backup/data/* /root/.open-webui/ || true
|
cp -a /opt/open-webui-backup/data/* /root/.open-webui/ || true
|
||||||
|
cp -a /opt/open-webui-backup/.env /root/.env || true
|
||||||
rm -rf /opt/open-webui-backup || true
|
rm -rf /opt/open-webui-backup || true
|
||||||
msg_ok "Restored data"
|
msg_ok "Restored data"
|
||||||
|
|
||||||
@ -85,22 +88,36 @@ EOF
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -x "/usr/bin/ollama" ]; then
|
if [ -x "/usr/bin/ollama" ]; then
|
||||||
msg_info "Updating Ollama"
|
msg_info "Checking for Ollama Update"
|
||||||
OLLAMA_VERSION=$(ollama -v | awk '{print $NF}')
|
OLLAMA_VERSION=$(ollama -v | awk '{print $NF}')
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
|
RELEASE=$(curl -s https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
|
||||||
if [ "$OLLAMA_VERSION" != "$RELEASE" ]; then
|
if [ "$OLLAMA_VERSION" != "$RELEASE" ]; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Ollama update available: v$OLLAMA_VERSION -> v$RELEASE"
|
||||||
|
msg_info "Downloading Ollama v$RELEASE \n"
|
||||||
|
curl -fS#LO https://ollama.com/download/ollama-linux-amd64.tgz
|
||||||
|
msg_ok "Download Complete"
|
||||||
|
|
||||||
|
if [ -f "ollama-linux-amd64.tgz" ]; then
|
||||||
|
|
||||||
|
msg_info "Stopping Ollama Service"
|
||||||
systemctl stop ollama
|
systemctl stop ollama
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
curl -fsSLO -C - https://ollama.com/download/ollama-linux-amd64.tgz
|
|
||||||
|
msg_info "Installing Ollama"
|
||||||
rm -rf /usr/lib/ollama
|
rm -rf /usr/lib/ollama
|
||||||
rm -rf /usr/bin/ollama
|
rm -rf /usr/bin/ollama
|
||||||
tar -C /usr -xzf ollama-linux-amd64.tgz
|
tar -C /usr -xzf ollama-linux-amd64.tgz
|
||||||
rm -rf ollama-linux-amd64.tgz
|
rm -rf ollama-linux-amd64.tgz
|
||||||
msg_info "Starting Service"
|
msg_ok "Installed Ollama"
|
||||||
|
|
||||||
|
msg_info "Starting Ollama Service"
|
||||||
systemctl start ollama
|
systemctl start ollama
|
||||||
msg_info "Started Service"
|
msg_ok "Started Service"
|
||||||
|
|
||||||
msg_ok "Ollama updated to version $RELEASE"
|
msg_ok "Ollama updated to version $RELEASE"
|
||||||
|
else
|
||||||
|
msg_error "Ollama download failed. Aborting update."
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
msg_ok "Ollama is already up to date."
|
msg_ok "Ollama is already up to date."
|
||||||
fi
|
fi
|
||||||
|
|||||||
@ -27,58 +27,46 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if ! dpkg -s python3-pip >/dev/null 2>&1; then
|
|
||||||
$STD apt install -y python3-pip
|
if check_for_gh_release "paperless-ai" "clusterzx/paperless-ai"; then
|
||||||
fi
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/clusterzx/paperless-ai/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop paperless-ai
|
systemctl stop paperless-ai paperless-rag
|
||||||
msg_info "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Updating $APP to v${RELEASE}"
|
msg_info "Backing up data"
|
||||||
cd /opt
|
cp -r /opt/paperless-ai/data /opt/paperless-ai-data-backup
|
||||||
mv /opt/paperless-ai /opt/paperless-ai_bak
|
msg_ok "Backed up data"
|
||||||
curl -fsSL "https://github.com/clusterzx/paperless-ai/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/clusterzx/paperless-ai/archive/refs/tags/v${RELEASE}.zip")
|
|
||||||
$STD unzip v${RELEASE}.zip
|
fetch_and_deploy_gh_release "paperless-ai" "clusterzx/paperless-ai"
|
||||||
mv paperless-ai-${RELEASE} /opt/paperless-ai
|
|
||||||
mkdir -p /opt/paperless-ai/data
|
msg_info "Restoring data"
|
||||||
cp -a /opt/paperless-ai_bak/data/. /opt/paperless-ai/data/
|
cp -r /opt/paperless-ai-data-backup/* /opt/paperless-ai/data/
|
||||||
|
rm -rf /opt/paperless-ai-data-backup
|
||||||
|
msg_ok "Restored data"
|
||||||
|
|
||||||
|
msg_info "Updating Paperless-AI"
|
||||||
cd /opt/paperless-ai
|
cd /opt/paperless-ai
|
||||||
if [[ ! -f /etc/systemd/system/paperless-rag.service ]]; then
|
if [[ ! -d /opt/paperless-ai/venv ]]; then
|
||||||
cat <<EOF >/etc/systemd/system/paperless-rag.service
|
msg_info "Recreating Python venv"
|
||||||
[Unit]
|
$STD python3 -m venv /opt/paperless-ai/venv
|
||||||
Description=PaperlessAI-RAG Service
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
WorkingDirectory=/opt/paperless-ai
|
|
||||||
ExecStart=/usr/bin/python3 main.py --host 0.0.0.0 --port 8000 --initialize
|
|
||||||
Restart=always
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
echo "RAG_SERVICE_URL=http://localhost:8000" >>/opt/paperless-ai/data/.env
|
|
||||||
echo "RAG_SERVICE_ENABLED=true" >>/opt/paperless-ai/data/.env
|
|
||||||
fi
|
fi
|
||||||
|
source /opt/paperless-ai/venv/bin/activate
|
||||||
|
$STD pip install --upgrade pip
|
||||||
$STD pip install --no-cache-dir -r requirements.txt
|
$STD pip install --no-cache-dir -r requirements.txt
|
||||||
mkdir -p data/chromadb
|
mkdir -p data/chromadb
|
||||||
$STD npm install
|
$STD npm ci --only=production
|
||||||
rm -rf /opt/v${RELEASE}.zip
|
msg_ok "Updated Paperless-AI"
|
||||||
rm -rf /opt/paperless-ai_bak
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
|
systemctl start paperless-rag
|
||||||
|
sleep 3
|
||||||
systemctl start paperless-ai
|
systemctl start paperless-ai
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
build_container
|
build_container
|
||||||
description
|
description
|
||||||
|
|||||||
@ -28,12 +28,12 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check for old data structure and prompt migration
|
# Check for old data structure and prompt migration (exclude symlinks)
|
||||||
if [[ -f /opt/paperless/paperless.conf ]]; then
|
if [[ -f /opt/paperless/paperless.conf ]]; then
|
||||||
local OLD_DIRS=()
|
local OLD_DIRS=()
|
||||||
[[ -d /opt/paperless/consume ]] && OLD_DIRS+=("consume")
|
[[ -d /opt/paperless/consume && ! -L /opt/paperless/consume ]] && OLD_DIRS+=("consume")
|
||||||
[[ -d /opt/paperless/data ]] && OLD_DIRS+=("data")
|
[[ -d /opt/paperless/data && ! -L /opt/paperless/data ]] && OLD_DIRS+=("data")
|
||||||
[[ -d /opt/paperless/media ]] && OLD_DIRS+=("media")
|
[[ -d /opt/paperless/media && ! -L /opt/paperless/media ]] && OLD_DIRS+=("media")
|
||||||
|
|
||||||
if [[ ${#OLD_DIRS[@]} -gt 0 ]]; then
|
if [[ ${#OLD_DIRS[@]} -gt 0 ]]; then
|
||||||
msg_error "Old data structure detected in /opt/paperless/"
|
msg_error "Old data structure detected in /opt/paperless/"
|
||||||
|
|||||||
@ -27,6 +27,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
msg_info "Updating $APP LXC"
|
msg_info "Updating $APP LXC"
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt upgrade -y
|
$STD apt upgrade -y
|
||||||
|
|||||||
@ -27,6 +27,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
|
|
||||||
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
|
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
|
||||||
if [[ "$CURRENT_PHP" != "8.3" ]]; then
|
if [[ "$CURRENT_PHP" != "8.3" ]]; then
|
||||||
|
|||||||
@ -27,6 +27,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
|
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
|
||||||
|
|
||||||
if [[ "$CURRENT_PHP" != "8.4" ]]; then
|
if [[ "$CURRENT_PHP" != "8.4" ]]; then
|
||||||
|
|||||||
@ -32,6 +32,13 @@ function update_script() {
|
|||||||
systemctl stop photoprism
|
systemctl stop photoprism
|
||||||
msg_ok "Stopped PhotoPrism"
|
msg_ok "Stopped PhotoPrism"
|
||||||
|
|
||||||
|
if ! grep -q "photoprism/config/.env" ~/.bashrc 2>/dev/null; then
|
||||||
|
msg_info "Adding environment export for CLI tools"
|
||||||
|
echo '# Load PhotoPrism environment variables for CLI tools' >>~/.bashrc
|
||||||
|
echo 'export $(grep -v "^#" /opt/photoprism/config/.env | xargs)' >>~/.bashrc
|
||||||
|
msg_ok "Added environment export"
|
||||||
|
fi
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "photoprism" "photoprism/photoprism" "prebuild" "latest" "/opt/photoprism" "*linux-amd64.tar.gz"
|
fetch_and_deploy_gh_release "photoprism" "photoprism/photoprism" "prebuild" "latest" "/opt/photoprism" "*linux-amd64.tar.gz"
|
||||||
|
|
||||||
LIBHEIF_URL=$(curl -fsSL "https://dl.photoprism.app/dist/libheif/" | grep -oP "libheif-bookworm-amd64-v[0-9\.]+\.tar\.gz" | sort -V | tail -n 1)
|
LIBHEIF_URL=$(curl -fsSL "https://dl.photoprism.app/dist/libheif/" | grep -oP "libheif-bookworm-amd64-v[0-9\.]+\.tar\.gz" | sort -V | tail -n 1)
|
||||||
|
|||||||
@ -27,7 +27,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
if check_for_gh_release "phpipam" "phpipam/phpipam"; then
|
if check_for_gh_release "phpipam" "phpipam/phpipam"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop apache2
|
systemctl stop apache2
|
||||||
|
|||||||
@ -27,6 +27,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
if check_for_gh_release "plant-it" "MDeLuise/plant-it"; then
|
if check_for_gh_release "plant-it" "MDeLuise/plant-it"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop plant-it
|
systemctl stop plant-it
|
||||||
|
|||||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-8}"
|
|||||||
var_os="${var_os:-ubuntu}"
|
var_os="${var_os:-ubuntu}"
|
||||||
var_version="${var_version:-24.04}"
|
var_version="${var_version:-24.04}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
@ -23,8 +24,8 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -f /etc/apt/sources.list.d/plexmediaserver.list ]] \
|
if [[ ! -f /etc/apt/sources.list.d/plexmediaserver.list ]] &&
|
||||||
&& [[ ! -f /etc/apt/sources.list.d/plexmediaserver.sources ]]; then
|
[[ ! -f /etc/apt/sources.list.d/plexmediaserver.sources ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|||||||
@ -27,6 +27,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
|
|
||||||
if check_for_gh_release "projectsend" "projectsend/projectsend"; then
|
if check_for_gh_release "projectsend" "projectsend/projectsend"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
|
|||||||
@ -37,6 +37,20 @@ function update_script() {
|
|||||||
msg_ok "Updated old sources"
|
msg_ok "Updated old sources"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if grep -q 'Debian GNU/Linux 13' /etc/os-release; then
|
||||||
|
if [ -f "/etc/apt/sources.list.d/pdm-test.sources" ]; then
|
||||||
|
if ! grep -qx "Enabled: false" "/etc/apt/sources.list.d/pdm-test.sources"; then
|
||||||
|
echo "Enabled: false" >> "/etc/apt/sources.list.d/pdm-test.sources"
|
||||||
|
setup_deb822_repo \
|
||||||
|
"pdm" \
|
||||||
|
"https://enterprise.proxmox.com/debian/proxmox-archive-keyring-trixie.gpg" \
|
||||||
|
"http://download.proxmox.com/debian/pdm" \
|
||||||
|
"trixie" \
|
||||||
|
"pdm-no-subscription"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Updating $APP LXC"
|
msg_info "Updating $APP LXC"
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt -y upgrade
|
$STD apt -y upgrade
|
||||||
|
|||||||
@ -27,6 +27,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
|
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
|
||||||
|
|
||||||
if [[ "$CURRENT_PHP" != "8.4" ]]; then
|
if [[ "$CURRENT_PHP" != "8.4" ]]; then
|
||||||
|
|||||||
99
ct/scanopy.sh
Normal file
99
ct/scanopy.sh
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
#!/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: vhsdream
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/scanopy/scanopy
|
||||||
|
|
||||||
|
APP="Scanopy"
|
||||||
|
var_tags="${var_tags:-analytics}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-3072}"
|
||||||
|
var_disk="${var_disk:-6}"
|
||||||
|
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/scanopy ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "scanopy" "scanopy-io/scanopy"; then
|
||||||
|
msg_info "Stopping services"
|
||||||
|
systemctl stop scanopy-daemon scanopy-server
|
||||||
|
msg_ok "Stopped services"
|
||||||
|
|
||||||
|
msg_info "Backing up configurations"
|
||||||
|
cp /opt/scanopy/.env /opt/scanopy.env.bak
|
||||||
|
if [[ -f /opt/scanopy/oidc.toml ]]; then
|
||||||
|
cp /opt/scanopy/oidc.toml /opt/scanopy.oidc.toml
|
||||||
|
fi
|
||||||
|
msg_ok "Backed up configurations"
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "scanopy" "scanopy/scanopy" "tarball" "latest" "/opt/scanopy"
|
||||||
|
|
||||||
|
if ! dpkg -l | grep -q "pkg-config"; then
|
||||||
|
$STD apt install -y pkg-config
|
||||||
|
fi
|
||||||
|
if ! dpkg -l | grep -q "libssl-dev"; then
|
||||||
|
$STD apt install -y libssl-dev
|
||||||
|
fi
|
||||||
|
TOOLCHAIN="$(grep "channel" /opt/scanopy/backend/rust-toolchain.toml | awk -F\" '{print $2}')"
|
||||||
|
RUST_TOOLCHAIN=$TOOLCHAIN setup_rust
|
||||||
|
|
||||||
|
mv /opt/scanopy.env.bak /opt/scanopy/.env
|
||||||
|
if [[ -f /opt/scanopy.oidc.toml ]]; then
|
||||||
|
mv /opt/scanopy.oidc.toml /opt/scanopy/oidc.toml
|
||||||
|
fi
|
||||||
|
LOCAL_IP="$(hostname -I | awk '{print $1}')"
|
||||||
|
if ! grep -q "PUBLIC_URL" /opt/scanopy/.env; then
|
||||||
|
sed -i "\|_PATH=|a\scanopy_PUBLIC_URL=http://${LOCAL_IP}:60072" /opt/scanopy/.env
|
||||||
|
fi
|
||||||
|
sed -i 's|_TARGET=.*$|_URL=http://127.0.0.1:60072|' /opt/scanopy/.env
|
||||||
|
|
||||||
|
msg_info "Creating frontend UI"
|
||||||
|
export PUBLIC_SERVER_HOSTNAME=default
|
||||||
|
export PUBLIC_SERVER_PORT=""
|
||||||
|
cd /opt/scanopy/ui
|
||||||
|
$STD npm ci --no-fund --no-audit
|
||||||
|
$STD npm run build
|
||||||
|
msg_ok "Created frontend UI"
|
||||||
|
|
||||||
|
msg_info "Building scanopy-server (patience)"
|
||||||
|
cd /opt/scanopy/backend
|
||||||
|
$STD cargo build --release --bin server
|
||||||
|
mv ./target/release/server /usr/bin/scanopy-server
|
||||||
|
msg_ok "Built scanopy-server"
|
||||||
|
|
||||||
|
msg_info "Building scanopy-daemon"
|
||||||
|
$STD cargo build --release --bin daemon
|
||||||
|
cp ./target/release/daemon /usr/bin/scanopy-daemon
|
||||||
|
msg_ok "Built scanopy-daemon"
|
||||||
|
|
||||||
|
msg_info "Starting services"
|
||||||
|
systemctl start scanopy-server scanopy-daemon
|
||||||
|
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}:60072${CL}"
|
||||||
|
echo -e "${INFO}${YW} Then create your account, and run the 'configure_daemon.sh' script to setup the daemon.${CL}"
|
||||||
@ -27,6 +27,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
msg_info "Updating Shinobi"
|
msg_info "Updating Shinobi"
|
||||||
cd /opt/Shinobi
|
cd /opt/Shinobi
|
||||||
$STD sh UPDATE.sh
|
$STD sh UPDATE.sh
|
||||||
|
|||||||
@ -27,6 +27,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_mariadb
|
||||||
if ! grep -q "client_max_body_size[[:space:]]\+100M;" /etc/nginx/conf.d/snipeit.conf; then
|
if ! grep -q "client_max_body_size[[:space:]]\+100M;" /etc/nginx/conf.d/snipeit.conf; then
|
||||||
sed -i '/index index.php;/i \ client_max_body_size 100M;' /etc/nginx/conf.d/snipeit.conf
|
sed -i '/index index.php;/i \ client_max_body_size 100M;' /etc/nginx/conf.d/snipeit.conf
|
||||||
fi
|
fi
|
||||||
@ -36,16 +37,16 @@ function update_script() {
|
|||||||
systemctl stop nginx
|
systemctl stop nginx
|
||||||
msg_ok "Services Stopped"
|
msg_ok "Services Stopped"
|
||||||
|
|
||||||
msg_info "Creating backup"
|
msg_info "Creating Backup"
|
||||||
mv /opt/snipe-it /opt/snipe-it-backup
|
mv /opt/snipe-it /opt/snipe-it-backup
|
||||||
msg_ok "Backup created"
|
msg_ok "Created Backup"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "snipe-it" "grokability/snipe-it" "tarball"
|
fetch_and_deploy_gh_release "snipe-it" "grokability/snipe-it" "tarball"
|
||||||
[[ "$(php -v 2>/dev/null)" == PHP\ 8.2* ]] && PHP_VERSION="8.3" PHP_MODULE="common,ctype,ldap,fileinfo,iconv,mysql,soap,xsl" PHP_FPM="YES" setup_php
|
[[ "$(php -v 2>/dev/null)" == PHP\ 8.2* ]] && PHP_VERSION="8.3" PHP_MODULE="common,ctype,ldap,fileinfo,iconv,mysql,soap,xsl" PHP_FPM="YES" setup_php
|
||||||
sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/snipeit.conf
|
sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/snipeit.conf
|
||||||
setup_composer
|
setup_composer
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
msg_info "Updating Snipe-IT"
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt -y upgrade
|
$STD apt -y upgrade
|
||||||
cp /opt/snipe-it-backup/.env /opt/snipe-it/.env
|
cp /opt/snipe-it-backup/.env /opt/snipe-it/.env
|
||||||
@ -63,7 +64,7 @@ function update_script() {
|
|||||||
chown -R www-data: /opt/snipe-it
|
chown -R www-data: /opt/snipe-it
|
||||||
chmod -R 755 /opt/snipe-it
|
chmod -R 755 /opt/snipe-it
|
||||||
rm -rf /opt/snipe-it-backup
|
rm -rf /opt/snipe-it-backup
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated Snipe-IT"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start nginx
|
systemctl start nginx
|
||||||
|
|||||||
60
ct/snowshare.sh
Normal file
60
ct/snowshare.sh
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: TuroYT
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/TuroYT/snowshare
|
||||||
|
|
||||||
|
APP="SnowShare"
|
||||||
|
var_tags="${var_tags:-file-sharing}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-1024}"
|
||||||
|
var_disk="${var_disk:-5}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if [[ ! -d /opt/snowshare ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "snowshare" "TuroYT/snowshare"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop snowshare
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "snowshare" "TuroYT/snowshare"
|
||||||
|
|
||||||
|
msg_info "Updating Snowshare"
|
||||||
|
cd /opt/snowshare
|
||||||
|
$STD npm ci
|
||||||
|
$STD npx prisma generate
|
||||||
|
$STD npm run build
|
||||||
|
msg_ok "Updated Snowshare"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start snowshare
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||||
@ -33,30 +33,30 @@ function update_script() {
|
|||||||
systemctl stop sonarqube
|
systemctl stop sonarqube
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Creating backup"
|
msg_info "Creating Backup"
|
||||||
BACKUP_DIR="/opt/sonarqube-backup"
|
BACKUP_DIR="/opt/sonarqube-backup"
|
||||||
mv /opt/sonarqube ${BACKUP_DIR}
|
mv /opt/sonarqube ${BACKUP_DIR}
|
||||||
msg_ok "Backup created"
|
msg_ok "Created Backup"
|
||||||
|
|
||||||
msg_info "Installing sonarqube"
|
msg_info "Updating SonarQube"
|
||||||
temp_file=$(mktemp)
|
temp_file=$(mktemp)
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/SonarSource/sonarqube/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(get_latest_github_release "SonarSource/sonarqube")
|
||||||
curl -fsSL "https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-${RELEASE}.zip" -o $temp_file
|
curl -fsSL "https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-${RELEASE}.zip" -o $temp_file
|
||||||
unzip -q "$temp_file" -d /opt
|
unzip -q "$temp_file" -d /opt
|
||||||
mv /opt/sonarqube-* /opt/sonarqube
|
mv /opt/sonarqube-* /opt/sonarqube
|
||||||
msg_ok "Installed sonarqube"
|
msg_ok "Updated SonarQube"
|
||||||
|
|
||||||
msg_info "Restoring backup"
|
msg_info "Restoring Backup"
|
||||||
cp -rp ${BACKUP_DIR}/data/ /opt/sonarqube/data/
|
cp -rp ${BACKUP_DIR}/data/ /opt/sonarqube/data/
|
||||||
cp -rp ${BACKUP_DIR}/extensions/ /opt/sonarqube/extensions/
|
cp -rp ${BACKUP_DIR}/extensions/ /opt/sonarqube/extensions/
|
||||||
cp -p ${BACKUP_DIR}/conf/sonar.properties /opt/sonarqube/conf/sonar.properties
|
cp -p ${BACKUP_DIR}/conf/sonar.properties /opt/sonarqube/conf/sonar.properties
|
||||||
rm -rf ${BACKUP_DIR}
|
rm -rf ${BACKUP_DIR}
|
||||||
chown -R sonarqube:sonarqube /opt/sonarqube
|
chown -R sonarqube:sonarqube /opt/sonarqube
|
||||||
msg_ok "Backup restored"
|
msg_ok "Restored Backup"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start sonarqube
|
systemctl start sonarqube
|
||||||
msg_ok "Service started"
|
msg_ok "Service Started"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
|
|||||||
@ -27,6 +27,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop sonarr
|
systemctl stop sonarr
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
@ -38,6 +39,7 @@ function update_script() {
|
|||||||
mv Sonarr /opt
|
mv Sonarr /opt
|
||||||
rm -rf SonarrV4.tar.gz
|
rm -rf SonarrV4.tar.gz
|
||||||
msg_ok "Updated Sonarr"
|
msg_ok "Updated Sonarr"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start sonarr
|
systemctl start sonarr
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
|
|||||||
83
ct/speedtest-tracker.sh
Normal file
83
ct/speedtest-tracker.sh
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
#!/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: AlphaLawless
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/alexjustesen/speedtest-tracker
|
||||||
|
|
||||||
|
APP="Speedtest-Tracker"
|
||||||
|
var_tags="${var_tags:-monitoring}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-2048}"
|
||||||
|
var_disk="${var_disk:-4}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -d /opt/speedtest-tracker ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "speedtest-tracker" "alexjustesen/speedtest-tracker"; then
|
||||||
|
PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="common,sqlite3,redis" setup_php
|
||||||
|
setup_composer
|
||||||
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop speedtest-tracker
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Updating Speedtest CLI"
|
||||||
|
$STD apt update
|
||||||
|
$STD apt --only-upgrade install -y speedtest
|
||||||
|
msg_ok "Updated Speedtest CLI"
|
||||||
|
|
||||||
|
msg_info "Creating Backup"
|
||||||
|
cp -r /opt/speedtest-tracker /opt/speedtest-tracker-backup
|
||||||
|
msg_ok "Backup Created"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "speedtest-tracker" "alexjustesen/speedtest-tracker" "tarball" "latest" "/opt/speedtest-tracker"
|
||||||
|
|
||||||
|
msg_info "Updating Speedtest Tracker"
|
||||||
|
cp -r /opt/speedtest-tracker-backup/.env /opt/speedtest-tracker/.env
|
||||||
|
cd /opt/speedtest-tracker
|
||||||
|
export COMPOSER_ALLOW_SUPERUSER=1
|
||||||
|
$STD composer install --optimize-autoloader --no-dev
|
||||||
|
$STD npm ci
|
||||||
|
$STD npm run build
|
||||||
|
$STD php artisan migrate --force
|
||||||
|
$STD php artisan config:clear
|
||||||
|
$STD php artisan cache:clear
|
||||||
|
$STD php artisan view:clear
|
||||||
|
chown -R www-data:www-data /opt/speedtest-tracker
|
||||||
|
chmod -R 755 /opt/speedtest-tracker/storage
|
||||||
|
chmod -R 755 /opt/speedtest-tracker/bootstrap/cache
|
||||||
|
msg_ok "Updated Speedtest Tracker"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start speedtest-tracker
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Updated successfully"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
||||||
@ -27,32 +27,29 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://github.com/Donkie/Spoolman/releases/latest | grep "title>Release" | cut -d " " -f 4)
|
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
|
||||||
|
|
||||||
|
if check_for_gh_release "spoolman" "Donkie/Spoolman"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop spoolman
|
systemctl stop spoolman
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to ${RELEASE}"
|
msg_info "Creating Backup"
|
||||||
cd /opt
|
[ -d /opt/spoolman_bak ] && rm -rf /opt/spoolman_bak
|
||||||
rm -rf spoolman_bak
|
mv /opt/spoolman /opt/spoolman_bak
|
||||||
mv spoolman spoolman_bak
|
msg_ok "Created Backup"
|
||||||
curl -fsSL "https://github.com/Donkie/Spoolman/releases/download/${RELEASE}/spoolman.zip" -o $(basename "https://github.com/Donkie/Spoolman/releases/download/${RELEASE}/spoolman.zip")
|
|
||||||
$STD unzip spoolman.zip -d spoolman
|
fetch_and_deploy_gh_release "spoolman" "Donkie/Spoolman" "prebuild" "latest" "/opt/spoolman" "spoolman.zip"
|
||||||
cd spoolman
|
|
||||||
|
msg_info "Updating Spoolman"
|
||||||
|
cd /opt/spoolman
|
||||||
$STD pip3 install -r requirements.txt
|
$STD pip3 install -r requirements.txt
|
||||||
curl -fsSL "https://raw.githubusercontent.com/Donkie/Spoolman/master/.env.example" -o ".env"
|
cp /opt/spoolman_bak/.env /opt/spoolman
|
||||||
rm -rf /opt/spoolman.zip
|
msg_ok "Updated Spoolman"
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated ${APP} to ${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start spoolman
|
systemctl start spoolman
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@ -27,9 +27,10 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
msg_info "Updating ${APP} LXC"
|
|
||||||
|
msg_info "Updating Syncthing"
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt -y upgrade
|
$STD apt upgrade -y
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@ -55,7 +55,7 @@ function update_script() {
|
|||||||
cd /opt/tandoor/vue3
|
cd /opt/tandoor/vue3
|
||||||
$STD yarn install
|
$STD yarn install
|
||||||
$STD yarn build
|
$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
|
cat <<EOF >/opt/tandoor/cookbook/version_info.py
|
||||||
TANDOOR_VERSION = "$TANDOOR_VERSION"
|
TANDOOR_VERSION = "$TANDOOR_VERSION"
|
||||||
TANDOOR_REF = "bare-metal"
|
TANDOOR_REF = "bare-metal"
|
||||||
@ -65,7 +65,7 @@ EOF
|
|||||||
$STD /opt/tandoor/.venv/bin/python manage.py migrate
|
$STD /opt/tandoor/.venv/bin/python manage.py migrate
|
||||||
$STD /opt/tandoor/.venv/bin/python manage.py collectstatic --no-input
|
$STD /opt/tandoor/.venv/bin/python manage.py collectstatic --no-input
|
||||||
rm -rf /opt/tandoor.bak
|
rm -rf /opt/tandoor.bak
|
||||||
msg_ok "Updated Trandoor"
|
msg_ok "Updated Tandoor"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start tandoor
|
systemctl start tandoor
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user