mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 02:12:49 +00:00 
			
		
		
		
	Compare commits
	
		
			111 Commits
		
	
	
		
			2025-02-13
			...
			2025-02-23
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					6daeb7e288 | ||
| 
						 | 
					81b367df07 | ||
| 
						 | 
					0f410e11eb | ||
| 
						 | 
					0a9dffb7a1 | ||
| 
						 | 
					67b90f5582 | ||
| 
						 | 
					eaceba3ed3 | ||
| 
						 | 
					d7dceede4b | ||
| 
						 | 
					9c867b467a | ||
| 
						 | 
					d35a01f5c4 | ||
| 
						 | 
					1e2f953a8f | ||
| 
						 | 
					2937516869 | ||
| 
						 | 
					92d2065f1d | ||
| 
						 | 
					13c2f50f19 | ||
| 
						 | 
					dccc45d492 | ||
| 
						 | 
					a9362e0b4a | ||
| 
						 | 
					10c46723fe | ||
| 
						 | 
					666e170f7d | ||
| 
						 | 
					109c48694e | ||
| 
						 | 
					d0cd58e923 | ||
| 
						 | 
					16b8bbfca6 | ||
| 
						 | 
					209aa220b0 | ||
| 
						 | 
					dd8db43dea | ||
| 
						 | 
					7d40e148e9 | ||
| 
						 | 
					ef6eeea608 | ||
| 
						 | 
					0c13b71466 | ||
| 
						 | 
					e1c25a3c8e | ||
| 
						 | 
					e5bfb8f8a3 | ||
| 
						 | 
					4dfcd32d92 | ||
| 
						 | 
					167deb5d7f | ||
| 
						 | 
					8cb3007d66 | ||
| 
						 | 
					49bcd30e77 | ||
| 
						 | 
					1e2954a993 | ||
| 
						 | 
					fe5711d9c4 | ||
| 
						 | 
					33f812179f | ||
| 
						 | 
					d7a2614819 | ||
| 
						 | 
					dc259847af | ||
| 
						 | 
					9bcd1cd237 | ||
| 
						 | 
					3a1ae8f7c0 | ||
| 
						 | 
					9cbe196913 | ||
| 
						 | 
					d0c8b1c15b | ||
| 
						 | 
					2efdea9a29 | ||
| 
						 | 
					978dc549f4 | ||
| 
						 | 
					d4d8943c9f | ||
| 
						 | 
					12a1f46703 | ||
| 
						 | 
					15d20a54b3 | ||
| 
						 | 
					bedfbd232d | ||
| 
						 | 
					3c289e7235 | ||
| 
						 | 
					450d2410d9 | ||
| 
						 | 
					e1ecc8d6cf | ||
| 
						 | 
					e9d9da3355 | ||
| 
						 | 
					6d3c442464 | ||
| 
						 | 
					1a8f5a4007 | ||
| 
						 | 
					20414d9659 | ||
| 
						 | 
					1fe8bc05b3 | ||
| 
						 | 
					049afa994b | ||
| 
						 | 
					ba41bcd561 | ||
| 
						 | 
					4aa84c265d | ||
| 
						 | 
					436945b711 | ||
| 
						 | 
					b749119a1c | ||
| 
						 | 
					87c61de11e | ||
| 
						 | 
					b293638c40 | ||
| 
						 | 
					d1e0c2d164 | ||
| 
						 | 
					7e6a7468df | ||
| 
						 | 
					1ffe6b1c3c | ||
| 
						 | 
					a76733df60 | ||
| 
						 | 
					70f5280fcc | ||
| 
						 | 
					4cbe90597e | ||
| 
						 | 
					0afe60e11a | ||
| 
						 | 
					6982d02489 | ||
| 
						 | 
					031aefe05a | ||
| 
						 | 
					fa01cfd840 | ||
| 
						 | 
					331bc0f5a6 | ||
| 
						 | 
					7e9eb2f98a | ||
| 
						 | 
					5a72b1e523 | ||
| 
						 | 
					2693fabac2 | ||
| 
						 | 
					ce16be6393 | ||
| 
						 | 
					b694c339cb | ||
| 
						 | 
					3957b46d98 | ||
| 
						 | 
					54929e4b0d | ||
| 
						 | 
					ca20d52ac1 | ||
| 
						 | 
					e22a6dad6f | ||
| 
						 | 
					ee84468498 | ||
| 
						 | 
					746f19b0b8 | ||
| 
						 | 
					a646a035d8 | ||
| 
						 | 
					505cb23467 | ||
| 
						 | 
					345e109d9f | ||
| 
						 | 
					bca944034a | ||
| 
						 | 
					be27905776 | ||
| 
						 | 
					53196c7603 | ||
| 
						 | 
					0777ddfbfc | ||
| 
						 | 
					18bd71da89 | ||
| 
						 | 
					ecd13dd5a4 | ||
| 
						 | 
					3ef1ac434a | ||
| 
						 | 
					60e32a05cd | ||
| 
						 | 
					b7df0ee936 | ||
| 
						 | 
					4cf24c54d7 | ||
| 
						 | 
					c4ed0738cf | ||
| 
						 | 
					88b20e5545 | ||
| 
						 | 
					7c5b072303 | ||
| 
						 | 
					347a23ad60 | ||
| 
						 | 
					29806c4525 | ||
| 
						 | 
					a045dc8012 | ||
| 
						 | 
					80e7e2f5b6 | ||
| 
						 | 
					1789d181aa | ||
| 
						 | 
					f0ca0c3379 | ||
| 
						 | 
					1711e44a4d | ||
| 
						 | 
					afe4af2ff6 | ||
| 
						 | 
					ec8c564e25 | ||
| 
						 | 
					fd9d64b342 | ||
| 
						 | 
					1d928f7ea8 | ||
| 
						 | 
					f3c9e8f013 | 
@@ -40,27 +40,27 @@ Before contributing, please ensure that you have the following setup:
 | 
			
		||||
   - [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_GUIDE/ct/AppName.sh) and [AppName-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_GUIDE/install/AppName-install.sh) as templates when creating new scripts.
 | 
			
		||||
- 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.
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
# 🚀 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_GUIDE/ct/AppName.md).
 | 
			
		||||
- 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_GUIDE/install/AppName-install.md).
 | 
			
		||||
- 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_GUIDE/install/AppName-install.sh)
 | 
			
		||||
Start with the [template script](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.sh)
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
@@ -99,8 +99,8 @@ Open a Pull Request from your feature branch to the main repository branch. You
 | 
			
		||||
 | 
			
		||||
## 📚 Pages
 | 
			
		||||
 | 
			
		||||
- [CT Template: AppName.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_GUIDE/ct/AppName.sh)
 | 
			
		||||
- [Install Template: AppName-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_GUIDE/install/AppName-install.sh)
 | 
			
		||||
- [JSON Template: AppName.json](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_GUIDE/json/AppName.json)
 | 
			
		||||
- [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)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,6 +1,6 @@
 | 
			
		||||
name: "🐞 Script Issue Report"
 | 
			
		||||
description: Report a specific issue with a script. For other inquiries, please use the Discussions section.
 | 
			
		||||
 | 
			
		||||
labels: ["bug"]
 | 
			
		||||
body:
 | 
			
		||||
  - type: markdown
 | 
			
		||||
    attributes:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
								
							@@ -3,7 +3,7 @@ contact_links:
 | 
			
		||||
    - name: 🤔 Questions and Help
 | 
			
		||||
      url: https://github.com/community-scripts/ProxmoxVE/discussions
 | 
			
		||||
      about: For suggestions or questions, please use the Discussions section.
 | 
			
		||||
    - name: 🌟 Feature request
 | 
			
		||||
    - name: 🌟 new Script request
 | 
			
		||||
      url: https://github.com/community-scripts/ProxmoxVE/discussions/new?category=request-script
 | 
			
		||||
      about: For feature/script requests, please use the Discussions section.
 | 
			
		||||
    - name: 💻 Discord
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										33
									
								
								.github/ISSUE_TEMPLATE/feature_request.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								.github/ISSUE_TEMPLATE/feature_request.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
			
		||||
name: "✨ Feature Request"
 | 
			
		||||
description: "Suggest a new feature or enhancement."
 | 
			
		||||
labels: ["enhancement"]
 | 
			
		||||
body:
 | 
			
		||||
  - type: markdown
 | 
			
		||||
    attributes:
 | 
			
		||||
      value: |
 | 
			
		||||
        # ✨ **Feature Request**
 | 
			
		||||
        Have an idea for a new feature? Share your thoughts below!
 | 
			
		||||
 | 
			
		||||
  - type: input
 | 
			
		||||
    id: feature_summary
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: "🌟 Briefly describe the feature"
 | 
			
		||||
      placeholder: "e.g., Add support for XYZ"
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    id: feature_description
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: "📝 Detailed description"
 | 
			
		||||
      placeholder: "Explain the feature in detail"
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    id: use_case
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: "💡 Why is this useful?"
 | 
			
		||||
      placeholder: "Describe the benefit of this feature"
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
							
								
								
									
										25
									
								
								.github/ISSUE_TEMPLATE/task.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								.github/ISSUE_TEMPLATE/task.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
name: "🛠️ Task / General Request"
 | 
			
		||||
description: "Request a general task, improvement, or refactor."
 | 
			
		||||
labels: ["task"]
 | 
			
		||||
body:
 | 
			
		||||
  - type: markdown
 | 
			
		||||
    attributes:
 | 
			
		||||
      value: |
 | 
			
		||||
        # 🛠️ **Task / General Request**
 | 
			
		||||
        Request a task that isn't a bug or feature request.
 | 
			
		||||
 | 
			
		||||
  - type: input
 | 
			
		||||
    id: task_summary
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: "📌 Task summary"
 | 
			
		||||
      placeholder: "e.g., Refactor XYZ"
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    id: task_details
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: "📋 Task details"
 | 
			
		||||
      placeholder: "Explain what needs to be done"
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
							
								
								
									
										40
									
								
								.github/changelog-pr-config.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										40
									
								
								.github/changelog-pr-config.json
									
									
									
									
										vendored
									
									
								
							@@ -1,34 +1,42 @@
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
      "title": "💥 Breaking Changes",
 | 
			
		||||
      "labels": ["breaking change"]
 | 
			
		||||
    "title": "💥 Breaking Changes",
 | 
			
		||||
    "labels": ["breaking change"]
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
      "title": "✨ New Scripts",
 | 
			
		||||
      "labels": ["new script"]
 | 
			
		||||
    "title": "🆕 New Scripts",
 | 
			
		||||
    "labels": ["new script"]
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
      "title": "🚀 Updated Scripts",
 | 
			
		||||
      "labels": ["update script"]
 | 
			
		||||
    "title": "🚀 Updated Scripts",
 | 
			
		||||
    "labels": ["update script"]
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
      "title": "🌐 Website",
 | 
			
		||||
      "labels": ["website"]
 | 
			
		||||
    "title": "🐞 Bug Fixes (Updated Scripts)",
 | 
			
		||||
    "labels": ["update script", "bugfix"]
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
      "title": "🐞 Bug Fixes",
 | 
			
		||||
      "labels": ["bug fix"]
 | 
			
		||||
    "title": "✨ Feature Updates (Updated Scripts)",
 | 
			
		||||
    "labels": ["update script", "feature"]
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
      "title": "🧰 Maintenance",
 | 
			
		||||
      "labels": ["maintenance"]
 | 
			
		||||
    "title": "✨ New Features",
 | 
			
		||||
    "labels": ["feature"]
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
      "title": "📡 API",
 | 
			
		||||
      "labels": ["api"]
 | 
			
		||||
    "title": "🌐 Website",
 | 
			
		||||
    "labels": ["website"]
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
      "title": "❔ Unlabelled",
 | 
			
		||||
      "labels": []
 | 
			
		||||
    "title": "📡 API",
 | 
			
		||||
    "labels": ["api"]
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "title": "🧰 Maintenance",
 | 
			
		||||
    "labels": ["maintenance"]
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "title": "❔ Unlabelled",
 | 
			
		||||
    "labels": []
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										48
									
								
								.github/workflows/autolabeler.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										48
									
								
								.github/workflows/autolabeler.yml
									
									
									
									
										vendored
									
									
								
							@@ -19,7 +19,7 @@ jobs:
 | 
			
		||||
      - name: Install minimatch
 | 
			
		||||
        run: npm install minimatch
 | 
			
		||||
 | 
			
		||||
      - name: Label PR based on config rules
 | 
			
		||||
      - name: Label PR based on file changes and PR template
 | 
			
		||||
        uses: actions/github-script@v7
 | 
			
		||||
        with:
 | 
			
		||||
          script: |
 | 
			
		||||
@@ -30,8 +30,14 @@ jobs:
 | 
			
		||||
            const configPath = path.resolve(process.env.CONFIG_PATH);
 | 
			
		||||
            const fileContent = await fs.readFile(configPath, 'utf-8');
 | 
			
		||||
            const autolabelerConfig = JSON.parse(fileContent);
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
            const prNumber = context.payload.pull_request.number;
 | 
			
		||||
            const prBody = context.payload.pull_request.body.toLowerCase();
 | 
			
		||||
            
 | 
			
		||||
            // Label-Sammlung (um doppelte API-Calls zu vermeiden)
 | 
			
		||||
            let labelsToAdd = new Set();
 | 
			
		||||
 | 
			
		||||
            // Prüfe Datei-Änderungen
 | 
			
		||||
            const prListFilesResponse = await github.rest.pulls.listFiles({
 | 
			
		||||
              owner: context.repo.owner,
 | 
			
		||||
              repo: context.repo.repo,
 | 
			
		||||
@@ -51,12 +57,36 @@ jobs:
 | 
			
		||||
              });
 | 
			
		||||
 | 
			
		||||
              if (shouldAddLabel) {
 | 
			
		||||
                console.log(`Adding label ${label} to PR ${prNumber}`);
 | 
			
		||||
                await github.rest.issues.addLabels({
 | 
			
		||||
                  owner: context.repo.owner,
 | 
			
		||||
                  repo: context.repo.repo,
 | 
			
		||||
                  issue_number: prNumber,
 | 
			
		||||
                  labels: [label],
 | 
			
		||||
                });
 | 
			
		||||
                labelsToAdd.add(label);
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Prüfe PR-Template Checkboxen mit den korrekten Labels
 | 
			
		||||
            const templateLabelMappings = {
 | 
			
		||||
              "🐞 bug fix": "bugfix",
 | 
			
		||||
              "✨ new feature": "feature",
 | 
			
		||||
              "💥 breaking change": "breaking change",
 | 
			
		||||
              "🆕 new script": "new script"
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            for (const [checkbox, label] of Object.entries(templateLabelMappings)) {
 | 
			
		||||
              const regex = new RegExp(`- \\[(.*?)\\] ${checkbox}`, "i");
 | 
			
		||||
              const match = prBody.match(regex);
 | 
			
		||||
              if (match && match[1].trim() !== "") { // Checkbox ist gesetzt
 | 
			
		||||
                labelsToAdd.add(label);
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Debugging: Anzeigen, welche Labels tatsächlich erkannt wurden
 | 
			
		||||
            console.log(`Labels to add: ${Array.from(labelsToAdd).join(", ")}`);
 | 
			
		||||
 | 
			
		||||
            // Labels setzen, falls neue erkannt wurden
 | 
			
		||||
            if (labelsToAdd.size > 0) {
 | 
			
		||||
              console.log(`Adding labels ${Array.from(labelsToAdd).join(", ")} to PR ${prNumber}`);
 | 
			
		||||
              await github.rest.issues.addLabels({
 | 
			
		||||
                owner: context.repo.owner,
 | 
			
		||||
                repo: context.repo.repo,
 | 
			
		||||
                issue_number: prNumber,
 | 
			
		||||
                labels: Array.from(labelsToAdd),
 | 
			
		||||
              });
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								.github/workflows/script-test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								.github/workflows/script-test.yml
									
									
									
									
										vendored
									
									
								
							@@ -89,10 +89,16 @@ jobs:
 | 
			
		||||
                chmod +x "$INSTALL_SCRIPT"
 | 
			
		||||
                RUNNING_FILE=$FILE
 | 
			
		||||
            fi
 | 
			
		||||
            git checkout origin/main .github/workflows/scripts/app-test/pr-build.func
 | 
			
		||||
            git checkout origin/main .github/workflows/scripts/app-test/pr-install.func
 | 
			
		||||
            git checkout origin/main .github/workflows/scripts/app-test/pr-alpine-install.func
 | 
			
		||||
            git checkout origin/main .github/workflows/scripts/app-test/pr-create-lxc.sh
 | 
			
		||||
            git remote add community-scripts https://github.com/community-scripts/ProxmoxVE.git
 | 
			
		||||
            git fetch community-scripts
 | 
			
		||||
            rm -f .github/workflows/scripts/app-test/pr-build.func || true
 | 
			
		||||
            rm -f .github/workflows/scripts/app-test/pr-install.func || true
 | 
			
		||||
            rm -f .github/workflows/scripts/app-test/pr-alpine-install.func || true
 | 
			
		||||
            rm -f .github/workflows/scripts/app-test/pr-create-lxc.sh || true
 | 
			
		||||
            git checkout community-scripts/main -- .github/workflows/scripts/app-test/pr-build.func
 | 
			
		||||
            git checkout community-scripts/main -- .github/workflows/scripts/app-test/pr-install.func
 | 
			
		||||
            git checkout community-scripts/main -- .github/workflows/scripts/app-test/pr-alpine-install.func
 | 
			
		||||
            git checkout community-scripts/main -- .github/workflows/scripts/app-test/pr-create-lxc.sh
 | 
			
		||||
            chmod +x $RUNNING_FILE         
 | 
			
		||||
            chmod +x .github/workflows/scripts/app-test/pr-create-lxc.sh
 | 
			
		||||
            chmod +x .github/workflows/scripts/app-test/pr-install.func
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										0
									
								
								.editorconfig → .vscode/.editorconfig
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										0
									
								
								.editorconfig → .vscode/.editorconfig
									
									
									
									
										vendored
									
									
								
							
							
								
								
									
										155
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										155
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -17,6 +17,161 @@ All LXC instances created using this repository come pre-installed with Midnight
 | 
			
		||||
Do not break established syntax in this file, as it is automatically updated by a Github Workflow
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## 2025-02-23
 | 
			
		||||
 | 
			
		||||
### Changes
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
- New Script: Hev socks5 server [@miviro](https://github.com/miviro) ([#2454](https://github.com/community-scripts/ProxmoxVE/pull/2454))
 | 
			
		||||
- New Script: bolt.diy [@tremor021](https://github.com/tremor021) ([#2528](https://github.com/community-scripts/ProxmoxVE/pull/2528))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Fix: Wireguard - Remove setting NAT as its already in PostUp/Down [@tremor021](https://github.com/tremor021) ([#2510](https://github.com/community-scripts/ProxmoxVE/pull/2510))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
- Fix: Home Assistant Core - fixed wrong text in application description on website [@TMigue](https://github.com/TMigue) ([#2576](https://github.com/community-scripts/ProxmoxVE/pull/2576))
 | 
			
		||||
 | 
			
		||||
## 2025-02-22
 | 
			
		||||
 | 
			
		||||
### Changes
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
- Fix a few broken icon links [@Snarkenfaugister](https://github.com/Snarkenfaugister) ([#2548](https://github.com/community-scripts/ProxmoxVE/pull/2548))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
- Fix: URL's in CONTRIBUTING.md [@bvdberg01](https://github.com/bvdberg01) ([#2552](https://github.com/community-scripts/ProxmoxVE/pull/2552))
 | 
			
		||||
 | 
			
		||||
## 2025-02-21
 | 
			
		||||
 | 
			
		||||
### Changes
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Add ZFS to Podman. Now it works on ZFS! [@jaminmc](https://github.com/jaminmc) ([#2526](https://github.com/community-scripts/ProxmoxVE/pull/2526))
 | 
			
		||||
- Fix: Tianji - Downgrade Node [@MickLesk](https://github.com/MickLesk) ([#2530](https://github.com/community-scripts/ProxmoxVE/pull/2530))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
- [gh] General Cleanup & Moving Files / Folders [@MickLesk](https://github.com/MickLesk) ([#2532](https://github.com/community-scripts/ProxmoxVE/pull/2532))
 | 
			
		||||
 | 
			
		||||
## 2025-02-20
 | 
			
		||||
 | 
			
		||||
### Changes
 | 
			
		||||
 | 
			
		||||
### 💥 Breaking Changes
 | 
			
		||||
 | 
			
		||||
- Breaking: Actual Budget Script (HTTPS / DB Migration / New Structure) - Read Description [@MickLesk](https://github.com/MickLesk) ([#2496](https://github.com/community-scripts/ProxmoxVE/pull/2496))
 | 
			
		||||
- Pihole & Unbound: Installation for Pihole V6 (read description) [@MickLesk](https://github.com/MickLesk) ([#2505](https://github.com/community-scripts/ProxmoxVE/pull/2505))
 | 
			
		||||
 | 
			
		||||
### ✨ New Scripts
 | 
			
		||||
 | 
			
		||||
- New Script: Dolibarr [@tremor021](https://github.com/tremor021) ([#2502](https://github.com/community-scripts/ProxmoxVE/pull/2502))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Fix: Pingvin Share - Update not copying to correct directory [@tremor021](https://github.com/tremor021) ([#2521](https://github.com/community-scripts/ProxmoxVE/pull/2521))
 | 
			
		||||
- WikiJS: Prepare for Using PostgreSQL [@MickLesk](https://github.com/MickLesk) ([#2516](https://github.com/community-scripts/ProxmoxVE/pull/2516))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
- [gh] better handling of labels [@MickLesk](https://github.com/MickLesk) ([#2517](https://github.com/community-scripts/ProxmoxVE/pull/2517))
 | 
			
		||||
 | 
			
		||||
## 2025-02-19
 | 
			
		||||
 | 
			
		||||
### Changes
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Fix: file replacement in Watcharr Update Script [@Clusters](https://github.com/Clusters) ([#2498](https://github.com/community-scripts/ProxmoxVE/pull/2498))
 | 
			
		||||
- Fix: Kometa - fixed successful setup message and added info to json [@tremor021](https://github.com/tremor021) ([#2495](https://github.com/community-scripts/ProxmoxVE/pull/2495))
 | 
			
		||||
- Fix: Actual Budget, add missing .env when updating [@MickLesk](https://github.com/MickLesk) ([#2494](https://github.com/community-scripts/ProxmoxVE/pull/2494))
 | 
			
		||||
 | 
			
		||||
## 2025-02-18
 | 
			
		||||
 | 
			
		||||
### Changes
 | 
			
		||||
 | 
			
		||||
### ✨ New Scripts
 | 
			
		||||
 | 
			
		||||
- New Script: Docmost [@MickLesk](https://github.com/MickLesk) ([#2472](https://github.com/community-scripts/ProxmoxVE/pull/2472))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Fix: SQL Server 2022 | GPG & Install [@MickLesk](https://github.com/MickLesk) ([#2476](https://github.com/community-scripts/ProxmoxVE/pull/2476))
 | 
			
		||||
- Feature: PBS Bare Metal Installation - Allow Microcode [@MickLesk](https://github.com/MickLesk) ([#2477](https://github.com/community-scripts/ProxmoxVE/pull/2477))
 | 
			
		||||
- Fix: MagicMirror force Node version and fix backups [@tremor021](https://github.com/tremor021) ([#2468](https://github.com/community-scripts/ProxmoxVE/pull/2468))
 | 
			
		||||
- Update BunkerWeb scripts to latest NGINX and specs [@TheophileDiot](https://github.com/TheophileDiot) ([#2466](https://github.com/community-scripts/ProxmoxVE/pull/2466))
 | 
			
		||||
 | 
			
		||||
## 2025-02-17
 | 
			
		||||
 | 
			
		||||
### Changes
 | 
			
		||||
 | 
			
		||||
### 💥 Breaking Changes
 | 
			
		||||
 | 
			
		||||
- Zipline: Prepare for Version 4.0.0 [@MickLesk](https://github.com/MickLesk) ([#2455](https://github.com/community-scripts/ProxmoxVE/pull/2455))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Fix: Zipline increase SECRET to 42 chars [@V1d1o7](https://github.com/V1d1o7) ([#2444](https://github.com/community-scripts/ProxmoxVE/pull/2444))
 | 
			
		||||
 | 
			
		||||
## 2025-02-16
 | 
			
		||||
 | 
			
		||||
### Changes
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Fix: Typo in Ubuntu 24.10 VM Script [@PhoenixEmik](https://github.com/PhoenixEmik) ([#2430](https://github.com/community-scripts/ProxmoxVE/pull/2430))
 | 
			
		||||
- Fix: Grist update no longer removes previous user data [@cfurrow](https://github.com/cfurrow) ([#2428](https://github.com/community-scripts/ProxmoxVE/pull/2428))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
- Debian icon update [@bannert1337](https://github.com/bannert1337) ([#2433](https://github.com/community-scripts/ProxmoxVE/pull/2433))
 | 
			
		||||
- Update Graylog icon [@bannert1337](https://github.com/bannert1337) ([#2434](https://github.com/community-scripts/ProxmoxVE/pull/2434))
 | 
			
		||||
 | 
			
		||||
## 2025-02-15
 | 
			
		||||
 | 
			
		||||
### Changes
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Setup cron in install/freshrss-install.sh [@zimmra](https://github.com/zimmra) ([#2412](https://github.com/community-scripts/ProxmoxVE/pull/2412))
 | 
			
		||||
- Fix: Homarr update service files [@CrazyWolf13](https://github.com/CrazyWolf13) ([#2416](https://github.com/community-scripts/ProxmoxVE/pull/2416))
 | 
			
		||||
- Update MagicMirror install and update scripts [@tremor021](https://github.com/tremor021) ([#2409](https://github.com/community-scripts/ProxmoxVE/pull/2409))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
- Fix RustDesk slug in json [@tremor021](https://github.com/tremor021) ([#2411](https://github.com/community-scripts/ProxmoxVE/pull/2411))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
- [GH] Update script-test Workflow [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2415](https://github.com/community-scripts/ProxmoxVE/pull/2415))
 | 
			
		||||
 | 
			
		||||
## 2025-02-14
 | 
			
		||||
 | 
			
		||||
### Changes
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Fix homarr [@CrazyWolf13](https://github.com/CrazyWolf13) ([#2369](https://github.com/community-scripts/ProxmoxVE/pull/2369))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
- RustDesk Server - Added configuration guide to json [@tremor021](https://github.com/tremor021) ([#2389](https://github.com/community-scripts/ProxmoxVE/pull/2389))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
- [gh] Update script-test.yml [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2399](https://github.com/community-scripts/ProxmoxVE/pull/2399))
 | 
			
		||||
- [gh] Introducing new Issue Github Template Feature (Bug, Feature, Task) [@MickLesk](https://github.com/MickLesk) ([#2394](https://github.com/community-scripts/ProxmoxVE/pull/2394))
 | 
			
		||||
 | 
			
		||||
### 📡 API
 | 
			
		||||
 | 
			
		||||
- [API]Add more enpoints to API [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2390](https://github.com/community-scripts/ProxmoxVE/pull/2390))
 | 
			
		||||
- [API] Update api.func: Remove unwanted file creation [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2378](https://github.com/community-scripts/ProxmoxVE/pull/2378))
 | 
			
		||||
 | 
			
		||||
## 2025-02-13
 | 
			
		||||
 | 
			
		||||
### Changes
 | 
			
		||||
 
 | 
			
		||||
@@ -19,10 +19,10 @@
 | 
			
		||||
    <a href="https://ko-fi.com/community_scripts">
 | 
			
		||||
      <img src="https://img.shields.io/badge/Support-FF5F5F?style=for-the-badge&logo=ko-fi&logoColor=white" alt="Donate" />
 | 
			
		||||
    </a>
 | 
			
		||||
    <a href="https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTING.md">
 | 
			
		||||
    <a href="https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/CONTRIBUTING.md">
 | 
			
		||||
      <img src="https://img.shields.io/badge/Contribute-ff4785?style=for-the-badge&logo=git&logoColor=white" alt="Contribute" />
 | 
			
		||||
    </a> 
 | 
			
		||||
    <a href="https://github.com/community-scripts/ProxmoxVE/blob/main/USER_SUBMITTED_GUIDES.md">
 | 
			
		||||
    <a href="https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/USER_SUBMITTED_GUIDES.md">
 | 
			
		||||
      <img src="https://img.shields.io/badge/Guides-0077b5?style=for-the-badge&logo=read-the-docs&logoColor=white" alt="Guides" />
 | 
			
		||||
    </a> 
 | 
			
		||||
    <a href="https://github.com/community-scripts/ProxmoxVE/blob/main/CHANGELOG.md">
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										283
									
								
								api/main.go
									
									
									
									
									
								
							
							
						
						
									
										283
									
								
								api/main.go
									
									
									
									
									
								
							@@ -11,6 +11,7 @@ import (
 | 
			
		||||
	"log"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"os"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/gorilla/mux"
 | 
			
		||||
@@ -31,6 +32,7 @@ func loadEnv() {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DataModel represents a single document in MongoDB
 | 
			
		||||
type DataModel struct {
 | 
			
		||||
	ID         primitive.ObjectID `json:"id" bson:"_id,omitempty"`
 | 
			
		||||
	CT_TYPE    uint               `json:"ct_type" bson:"ct_type"`
 | 
			
		||||
@@ -56,6 +58,13 @@ type StatusModel struct {
 | 
			
		||||
	STATUS    string `json:"status" bson:"status"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CountResponse struct {
 | 
			
		||||
	TotalEntries int64            `json:"total_entries"`
 | 
			
		||||
	StatusCount  map[string]int64 `json:"status_count"`
 | 
			
		||||
	NSAPPCount   map[string]int64 `json:"nsapp_count"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ConnectDatabase initializes the MongoDB connection
 | 
			
		||||
func ConnectDatabase() {
 | 
			
		||||
	loadEnv()
 | 
			
		||||
 | 
			
		||||
@@ -78,6 +87,7 @@ func ConnectDatabase() {
 | 
			
		||||
	fmt.Println("Connected to MongoDB on 10.10.10.18")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UploadJSON handles API requests and stores data as a document in MongoDB
 | 
			
		||||
func UploadJSON(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
	var input DataModel
 | 
			
		||||
 | 
			
		||||
@@ -98,6 +108,7 @@ func UploadJSON(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
	json.NewEncoder(w).Encode(map[string]string{"message": "Data saved successfully"})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UpdateStatus updates the status of a record based on RANDOM_ID
 | 
			
		||||
func UpdateStatus(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
	var input StatusModel
 | 
			
		||||
 | 
			
		||||
@@ -120,6 +131,7 @@ func UpdateStatus(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
	json.NewEncoder(w).Encode(map[string]string{"message": "Record updated successfully"})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetDataJSON fetches all data from MongoDB
 | 
			
		||||
func GetDataJSON(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
	var records []DataModel
 | 
			
		||||
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
 | 
			
		||||
@@ -144,6 +156,270 @@ func GetDataJSON(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
	w.Header().Set("Content-Type", "application/json")
 | 
			
		||||
	json.NewEncoder(w).Encode(records)
 | 
			
		||||
}
 | 
			
		||||
func GetPaginatedData(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
	page, _ := strconv.Atoi(r.URL.Query().Get("page"))
 | 
			
		||||
	limit, _ := strconv.Atoi(r.URL.Query().Get("limit"))
 | 
			
		||||
	if page < 1 {
 | 
			
		||||
		page = 1
 | 
			
		||||
	}
 | 
			
		||||
	if limit < 1 {
 | 
			
		||||
		limit = 10
 | 
			
		||||
	}
 | 
			
		||||
	skip := (page - 1) * limit
 | 
			
		||||
	var records []DataModel
 | 
			
		||||
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
 | 
			
		||||
	defer cancel()
 | 
			
		||||
 | 
			
		||||
	options := options.Find().SetSkip(int64(skip)).SetLimit(int64(limit))
 | 
			
		||||
	cursor, err := collection.Find(ctx, bson.M{}, options)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	defer cursor.Close(ctx)
 | 
			
		||||
 | 
			
		||||
	for cursor.Next(ctx) {
 | 
			
		||||
		var record DataModel
 | 
			
		||||
		if err := cursor.Decode(&record); err != nil {
 | 
			
		||||
			http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		records = append(records, record)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	w.Header().Set("Content-Type", "application/json")
 | 
			
		||||
	json.NewEncoder(w).Encode(records)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GetSummary(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
 | 
			
		||||
	defer cancel()
 | 
			
		||||
 | 
			
		||||
	totalCount, err := collection.CountDocuments(ctx, bson.M{})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	statusCount := make(map[string]int64)
 | 
			
		||||
	nsappCount := make(map[string]int64)
 | 
			
		||||
 | 
			
		||||
	pipeline := []bson.M{
 | 
			
		||||
		{"$group": bson.M{"_id": "$status", "count": bson.M{"$sum": 1}}},
 | 
			
		||||
	}
 | 
			
		||||
	cursor, err := collection.Aggregate(ctx, pipeline)
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		for cursor.Next(ctx) {
 | 
			
		||||
			var result struct {
 | 
			
		||||
				ID    string `bson:"_id"`
 | 
			
		||||
				Count int64  `bson:"count"`
 | 
			
		||||
			}
 | 
			
		||||
			if err := cursor.Decode(&result); err == nil {
 | 
			
		||||
				statusCount[result.ID] = result.Count
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	pipeline = []bson.M{
 | 
			
		||||
		{"$group": bson.M{"_id": "$nsapp", "count": bson.M{"$sum": 1}}},
 | 
			
		||||
	}
 | 
			
		||||
	cursor, err = collection.Aggregate(ctx, pipeline)
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		for cursor.Next(ctx) {
 | 
			
		||||
			var result struct {
 | 
			
		||||
				ID    string `bson:"_id"`
 | 
			
		||||
				Count int64  `bson:"count"`
 | 
			
		||||
			}
 | 
			
		||||
			if err := cursor.Decode(&result); err == nil {
 | 
			
		||||
				nsappCount[result.ID] = result.Count
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	response := CountResponse{
 | 
			
		||||
		TotalEntries: totalCount,
 | 
			
		||||
		StatusCount:  statusCount,
 | 
			
		||||
		NSAPPCount:   nsappCount,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	w.Header().Set("Content-Type", "application/json")
 | 
			
		||||
	json.NewEncoder(w).Encode(response)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GetByNsapp(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
	nsapp := r.URL.Query().Get("nsapp")
 | 
			
		||||
	var records []DataModel
 | 
			
		||||
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
 | 
			
		||||
	defer cancel()
 | 
			
		||||
 | 
			
		||||
	cursor, err := collection.Find(ctx, bson.M{"nsapp": nsapp})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	defer cursor.Close(ctx)
 | 
			
		||||
 | 
			
		||||
	for cursor.Next(ctx) {
 | 
			
		||||
		var record DataModel
 | 
			
		||||
		if err := cursor.Decode(&record); err != nil {
 | 
			
		||||
			http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		records = append(records, record)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	w.Header().Set("Content-Type", "application/json")
 | 
			
		||||
	json.NewEncoder(w).Encode(records)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GetByDateRange(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
 | 
			
		||||
	startDate := r.URL.Query().Get("start_date")
 | 
			
		||||
	endDate := r.URL.Query().Get("end_date")
 | 
			
		||||
 | 
			
		||||
	if startDate == "" || endDate == "" {
 | 
			
		||||
		http.Error(w, "Both start_date and end_date are required", http.StatusBadRequest)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	start, err := time.Parse("2006-01-02T15:04:05.999999+00:00", startDate+"T00:00:00+00:00")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		http.Error(w, "Invalid start_date format", http.StatusBadRequest)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	end, err := time.Parse("2006-01-02T15:04:05.999999+00:00", endDate+"T23:59:59+00:00")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		http.Error(w, "Invalid end_date format", http.StatusBadRequest)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var records []DataModel
 | 
			
		||||
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
 | 
			
		||||
	defer cancel()
 | 
			
		||||
 | 
			
		||||
	cursor, err := collection.Find(ctx, bson.M{
 | 
			
		||||
		"created_at": bson.M{
 | 
			
		||||
			"$gte": start,
 | 
			
		||||
			"$lte": end,
 | 
			
		||||
		},
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	defer cursor.Close(ctx)
 | 
			
		||||
 | 
			
		||||
	for cursor.Next(ctx) {
 | 
			
		||||
		var record DataModel
 | 
			
		||||
		if err := cursor.Decode(&record); err != nil {
 | 
			
		||||
			http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		records = append(records, record)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	w.Header().Set("Content-Type", "application/json")
 | 
			
		||||
	json.NewEncoder(w).Encode(records)
 | 
			
		||||
}
 | 
			
		||||
func GetByStatus(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
	status := r.URL.Query().Get("status")
 | 
			
		||||
	var records []DataModel
 | 
			
		||||
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
 | 
			
		||||
	defer cancel()
 | 
			
		||||
 | 
			
		||||
	cursor, err := collection.Find(ctx, bson.M{"status": status})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	defer cursor.Close(ctx)
 | 
			
		||||
 | 
			
		||||
	for cursor.Next(ctx) {
 | 
			
		||||
		var record DataModel
 | 
			
		||||
		if err := cursor.Decode(&record); err != nil {
 | 
			
		||||
			http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		records = append(records, record)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	w.Header().Set("Content-Type", "application/json")
 | 
			
		||||
	json.NewEncoder(w).Encode(records)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GetByOS(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
	osType := r.URL.Query().Get("os_type")
 | 
			
		||||
	osVersion := r.URL.Query().Get("os_version")
 | 
			
		||||
	var records []DataModel
 | 
			
		||||
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
 | 
			
		||||
	defer cancel()
 | 
			
		||||
 | 
			
		||||
	cursor, err := collection.Find(ctx, bson.M{"os_type": osType, "os_version": osVersion})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	defer cursor.Close(ctx)
 | 
			
		||||
 | 
			
		||||
	for cursor.Next(ctx) {
 | 
			
		||||
		var record DataModel
 | 
			
		||||
		if err := cursor.Decode(&record); err != nil {
 | 
			
		||||
			http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		records = append(records, record)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	w.Header().Set("Content-Type", "application/json")
 | 
			
		||||
	json.NewEncoder(w).Encode(records)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GetErrors(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
	errorCount := make(map[string]int)
 | 
			
		||||
 | 
			
		||||
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
 | 
			
		||||
	defer cancel()
 | 
			
		||||
 | 
			
		||||
	cursor, err := collection.Find(ctx, bson.M{"error": bson.M{"$ne": ""}})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	defer cursor.Close(ctx)
 | 
			
		||||
 | 
			
		||||
	for cursor.Next(ctx) {
 | 
			
		||||
		var record DataModel
 | 
			
		||||
		if err := cursor.Decode(&record); err != nil {
 | 
			
		||||
			http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if record.ERROR != "" {
 | 
			
		||||
			errorCount[record.ERROR]++
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	type ErrorCountResponse struct {
 | 
			
		||||
		Error string `json:"error"`
 | 
			
		||||
		Count int    `json:"count"`
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var errorCounts []ErrorCountResponse
 | 
			
		||||
	for err, count := range errorCount {
 | 
			
		||||
		errorCounts = append(errorCounts, ErrorCountResponse{
 | 
			
		||||
			Error: err,
 | 
			
		||||
			Count: count,
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	w.Header().Set("Content-Type", "application/json")
 | 
			
		||||
	json.NewEncoder(w).Encode(struct {
 | 
			
		||||
		ErrorCounts []ErrorCountResponse `json:"error_counts"`
 | 
			
		||||
	}{
 | 
			
		||||
		ErrorCounts: errorCounts,
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	ConnectDatabase()
 | 
			
		||||
@@ -152,6 +428,13 @@ func main() {
 | 
			
		||||
	router.HandleFunc("/upload", UploadJSON).Methods("POST")
 | 
			
		||||
	router.HandleFunc("/upload/updatestatus", UpdateStatus).Methods("POST")
 | 
			
		||||
	router.HandleFunc("/data/json", GetDataJSON).Methods("GET")
 | 
			
		||||
	router.HandleFunc("/data/paginated", GetPaginatedData).Methods("GET")
 | 
			
		||||
	router.HandleFunc("/data/summary", GetSummary).Methods("GET")
 | 
			
		||||
	router.HandleFunc("/data/nsapp", GetByNsapp).Methods("GET")
 | 
			
		||||
	router.HandleFunc("/data/date", GetByDateRange).Methods("GET")
 | 
			
		||||
	router.HandleFunc("/data/status", GetByStatus).Methods("GET")
 | 
			
		||||
	router.HandleFunc("/data/os", GetByOS).Methods("GET")
 | 
			
		||||
	router.HandleFunc("/data/errors", GetErrors).Methods("GET")
 | 
			
		||||
 | 
			
		||||
	c := cors.New(cors.Options{
 | 
			
		||||
		AllowedOrigins:   []string{"*"},
 | 
			
		||||
 
 | 
			
		||||
@@ -26,43 +26,91 @@ function update_script() {
 | 
			
		||||
 | 
			
		||||
    if [[ ! -d /opt/actualbudget ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
        exit 1
 | 
			
		||||
    fi
 | 
			
		||||
    
 | 
			
		||||
    RELEASE=$(curl -s https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
 | 
			
		||||
    RELEASE=$(curl -s https://api.github.com/repos/actualbudget/actual/releases/latest | \
 | 
			
		||||
              grep "tag_name" | awk -F '"' '{print substr($4, 2)}')
 | 
			
		||||
 | 
			
		||||
    if [[ ! -f /opt/actualbudget_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/actualbudget_version.txt)" ]]; then
 | 
			
		||||
        msg_info "Stopping ${APP}"
 | 
			
		||||
        systemctl stop actualbudget
 | 
			
		||||
        msg_ok "${APP} Stopped"
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
        cd /tmp
 | 
			
		||||
        wget -q https://github.com/actualbudget/actual-server/archive/refs/tags/v${RELEASE}.tar.gz
 | 
			
		||||
        wget -q "https://github.com/actualbudget/actual-server/archive/refs/tags/v${RELEASE}.tar.gz"
 | 
			
		||||
 | 
			
		||||
        mv /opt/actualbudget /opt/actualbudget_bak
 | 
			
		||||
        tar -xzf v${RELEASE}.tar.gz >/dev/null 2>&1
 | 
			
		||||
        tar -xzf "v${RELEASE}.tar.gz" &>/dev/null
 | 
			
		||||
        mv *ctual-server-* /opt/actualbudget
 | 
			
		||||
        rm -rf /opt/actualbudget/.env
 | 
			
		||||
        mv /opt/actualbudget_bak/.env /opt/actualbudget
 | 
			
		||||
        mv /opt/actualbudget_bak/.migrate /opt/actualbudget
 | 
			
		||||
        mv /opt/actualbudget_bak/server-files /opt/actualbudget/server-files
 | 
			
		||||
 | 
			
		||||
        mkdir -p /opt/actualbudget-data/{server-files,upload,migrate,user-files,migrations,config}
 | 
			
		||||
        for dir in server-files .migrate user-files migrations; do
 | 
			
		||||
            if [[ -d /opt/actualbudget_bak/$dir ]]; then
 | 
			
		||||
                mv /opt/actualbudget_bak/$dir/* /opt/actualbudget-data/$dir/ 2>/dev/null || true
 | 
			
		||||
            fi
 | 
			
		||||
        done
 | 
			
		||||
        if [[ -f /opt/actualbudget-data/migrate/.migrations ]]; then
 | 
			
		||||
            sed -i 's/null/1732656575219/g' /opt/actualbudget-data/migrate/.migrations
 | 
			
		||||
            sed -i 's/null/1732656575220/g' /opt/actualbudget-data/migrate/.migrations
 | 
			
		||||
        fi
 | 
			
		||||
        if [[ -f /opt/actualbudget/server-files/account.sqlite ]] && [[ ! -f /opt/actualbudget-data/server-files/account.sqlite ]]; then
 | 
			
		||||
            mv /opt/actualbudget/server-files/account.sqlite /opt/actualbudget-data/server-files/account.sqlite
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        if [[ -f /opt/actualbudget_bak/.env ]]; then
 | 
			
		||||
            mv /opt/actualbudget_bak/.env /opt/actualbudget-data/.env
 | 
			
		||||
        else
 | 
			
		||||
            cat <<EOF > /opt/actualbudget-data/.env
 | 
			
		||||
ACTUAL_UPLOAD_DIR=/opt/actualbudget-data/upload
 | 
			
		||||
ACTUAL_DATA_DIR=/opt/actualbudget-data
 | 
			
		||||
ACTUAL_SERVER_FILES_DIR=/opt/actualbudget-data/server-files
 | 
			
		||||
ACTUAL_USER_FILES=/opt/actualbudget-data/user-files
 | 
			
		||||
PORT=5006
 | 
			
		||||
ACTUAL_TRUSTED_PROXIES="10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,127.0.0.1/32,::1/128,fc00::/7"
 | 
			
		||||
ACTUAL_HTTPS_KEY=/opt/actualbudget/selfhost.key
 | 
			
		||||
ACTUAL_HTTPS_CERT=/opt/actualbudget/selfhost.crt
 | 
			
		||||
EOF
 | 
			
		||||
        fi
 | 
			
		||||
        cd /opt/actualbudget
 | 
			
		||||
        yarn install &>/dev/null
 | 
			
		||||
        echo "${RELEASE}" >/opt/actualbudget_version.txt
 | 
			
		||||
        echo "${RELEASE}" > /opt/actualbudget_version.txt
 | 
			
		||||
        msg_ok "Updated ${APP}"
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        msg_info "Starting ${APP}"
 | 
			
		||||
        cat <<EOF > /etc/systemd/system/actualbudget.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Actual Budget Service
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
User=root
 | 
			
		||||
Group=root
 | 
			
		||||
WorkingDirectory=/opt/actualbudget
 | 
			
		||||
EnvironmentFile=/opt/actualbudget-data/.env
 | 
			
		||||
ExecStart=/usr/bin/yarn start
 | 
			
		||||
Restart=always
 | 
			
		||||
RestartSec=10
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
        systemctl daemon-reload
 | 
			
		||||
        systemctl start actualbudget
 | 
			
		||||
        msg_ok "Started ${APP}"
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        msg_info "Cleaning Up"
 | 
			
		||||
        rm -rf /opt/actualbudget_bak
 | 
			
		||||
        rm -rf /tmp/v${RELEASE}.tar.gz
 | 
			
		||||
        rm -rf "/tmp/v${RELEASE}.tar.gz"
 | 
			
		||||
        msg_ok "Cleaned"
 | 
			
		||||
        msg_ok "Updated Successfully"
 | 
			
		||||
    else
 | 
			
		||||
        msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
    fi
 | 
			
		||||
    exit
 | 
			
		||||
    exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
@@ -72,4 +120,4 @@ 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}:5006${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:5006${CL}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										71
									
								
								ct/boltdiy.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								ct/boltdiy.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Slaviša Arežina (tremor021)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/stackblitz-labs/bolt.diy/
 | 
			
		||||
 | 
			
		||||
APP="boltdiy"
 | 
			
		||||
TAGS="code;ai"
 | 
			
		||||
var_cpu="2"
 | 
			
		||||
var_ram="3072"
 | 
			
		||||
var_disk="6"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
var_unprivileged="1"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /opt/bolt.diy ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    RELEASE=$(curl -s https://api.github.com/repos/stackblitz-labs/bolt.diy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
    if [[ "${RELEASE}" != "$(cat /opt/boltdiy_version.txt)" ]] || [[ ! -f /opt/boltdiy_version.txt ]]; then
 | 
			
		||||
        msg_info "Stopping $APP"
 | 
			
		||||
        systemctl stop boltdiy
 | 
			
		||||
        msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
        msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
        temp_dir=$(mktemp -d)
 | 
			
		||||
        temp_file=$(mktemp)
 | 
			
		||||
        cd $temp_dir
 | 
			
		||||
        wget -q "https://github.com/stackblitz-labs/bolt.diy/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file
 | 
			
		||||
        tar xzf $temp_file
 | 
			
		||||
        cp -rf bolt.diy-${RELEASE}/* /opt/bolt.diy
 | 
			
		||||
        cd /opt/bolt.diy
 | 
			
		||||
        $STD pnpm install
 | 
			
		||||
        msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
        msg_info "Starting $APP"
 | 
			
		||||
        systemctl start boltdiy
 | 
			
		||||
        msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
        msg_info "Cleaning Up"
 | 
			
		||||
        rm -rf $temp_file
 | 
			
		||||
        rm -rf $temp_dir
 | 
			
		||||
        msg_ok "Cleanup Completed"
 | 
			
		||||
 | 
			
		||||
        echo "${RELEASE}" >/opt/boltdiy_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}:5173${CL}"
 | 
			
		||||
@@ -8,7 +8,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
 | 
			
		||||
APP="BunkerWeb"
 | 
			
		||||
var_tags="webserver"
 | 
			
		||||
var_cpu="2"
 | 
			
		||||
var_ram="1024"
 | 
			
		||||
var_ram="4096"
 | 
			
		||||
var_disk="4"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
@@ -34,7 +34,7 @@ Pin: version ${RELEASE}
 | 
			
		||||
Pin-Priority: 1001
 | 
			
		||||
EOF
 | 
			
		||||
  apt-get update
 | 
			
		||||
  apt-get install -y nginx=1.26.2*
 | 
			
		||||
  apt-get install -y nginx=1.26.3*
 | 
			
		||||
  apt-get install -y bunkerweb=${RELEASE}
 | 
			
		||||
  echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
  msg_ok "Updated ${APP} to ${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										70
									
								
								ct/docmost.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								ct/docmost.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,70 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -s 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://docmost.com/
 | 
			
		||||
 | 
			
		||||
APP="Docmost"
 | 
			
		||||
var_tags="documents"
 | 
			
		||||
var_cpu="3"
 | 
			
		||||
var_ram="3072"
 | 
			
		||||
var_disk="7"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/docmost ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -s https://api.github.com/repos/docmost/docmost/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 "Stopping ${APP}"
 | 
			
		||||
    systemctl stop docmost
 | 
			
		||||
    msg_ok "${APP} Stopped"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    cp /opt/docmost/.env /opt/
 | 
			
		||||
    rm -rf /opt/docmost
 | 
			
		||||
    temp_file=$(mktemp)
 | 
			
		||||
    wget -q "https://github.com/docmost/docmost/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file"
 | 
			
		||||
    tar -xzf "$temp_file"
 | 
			
		||||
    mv docmost-${RELEASE} /opt/docmost
 | 
			
		||||
    cd /opt/docmost
 | 
			
		||||
    mv /opt/.env /opt/docmost/.env
 | 
			
		||||
    pnpm install --force &>/dev/null
 | 
			
		||||
    pnpm build &>/dev/null
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
    systemctl start docmost
 | 
			
		||||
    msg_ok "Started ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -f ${temp_file}
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${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}:3000${CL}"
 | 
			
		||||
							
								
								
									
										41
									
								
								ct/dolibarr.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								ct/dolibarr.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Slaviša Arežina (tremor021)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/Dolibarr/dolibarr/
 | 
			
		||||
 | 
			
		||||
APP="Dolibarr"
 | 
			
		||||
var_tags="erp;accounting"
 | 
			
		||||
var_cpu="1"
 | 
			
		||||
var_ram="2048"
 | 
			
		||||
var_disk="6"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
var_unprivileged="1"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /usr/share/dolibarr ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_error "To update ${APP}, use the applications web interface."
 | 
			
		||||
    exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}/dolibarr/install${CL}"
 | 
			
		||||
							
								
								
									
										20
									
								
								ct/grist.sh
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								ct/grist.sh
									
									
									
									
									
								
							@@ -34,18 +34,36 @@ function update_script() {
 | 
			
		||||
    msg_ok "Stopped ${APP} Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    cd /opt
 | 
			
		||||
    rm -rf grist_bak
 | 
			
		||||
    mv grist grist_bak
 | 
			
		||||
    wget -q https://github.com/gristlabs/grist-core/archive/refs/tags/v${RELEASE}.zip
 | 
			
		||||
    unzip -q v$RELEASE.zip
 | 
			
		||||
    mv grist-core-${RELEASE} grist
 | 
			
		||||
    cp -n /opt/grist_bak/.env /opt/grist/.env
 | 
			
		||||
 | 
			
		||||
    mkdir -p grist/docs
 | 
			
		||||
 | 
			
		||||
    cp -n grist_bak/.env grist/.env || true
 | 
			
		||||
    cp -r grist_bak/docs/* grist/docs/ || true
 | 
			
		||||
    cp grist_bak/grist-sessions.db grist/grist-sessions.db || true
 | 
			
		||||
    cp grist_bak/landing.db grist/landing.db || true
 | 
			
		||||
 | 
			
		||||
    cd grist
 | 
			
		||||
    msg_info "Installing Dependencies"
 | 
			
		||||
    yarn install >/dev/null 2>&1
 | 
			
		||||
    msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
    msg_info "Building"
 | 
			
		||||
    yarn run build:prod >/dev/null 2>&1
 | 
			
		||||
    msg_ok "Done building"
 | 
			
		||||
 | 
			
		||||
    msg_info "Installing Python"
 | 
			
		||||
    yarn run install:python >/dev/null 2>&1
 | 
			
		||||
    msg_ok "Installed Python"
 | 
			
		||||
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP} Service"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/boltdiy
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/boltdiy
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    __          ____      ___      
 | 
			
		||||
   / /_  ____  / / /_____/ (_)_  __
 | 
			
		||||
  / __ \/ __ \/ / __/ __  / / / / /
 | 
			
		||||
 / /_/ / /_/ / / /_/ /_/ / / /_/ / 
 | 
			
		||||
/_.___/\____/_/\__/\__,_/_/\__, /  
 | 
			
		||||
                          /____/   
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/docmost
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/docmost
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    ____                                  __ 
 | 
			
		||||
   / __ \____  _________ ___  ____  _____/ /_
 | 
			
		||||
  / / / / __ \/ ___/ __ `__ \/ __ \/ ___/ __/
 | 
			
		||||
 / /_/ / /_/ / /__/ / / / / / /_/ (__  ) /_  
 | 
			
		||||
/_____/\____/\___/_/ /_/ /_/\____/____/\__/  
 | 
			
		||||
                                             
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/dolibarr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/dolibarr
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    ____        ___ __                   
 | 
			
		||||
   / __ \____  / (_) /_  ____ ___________
 | 
			
		||||
  / / / / __ \/ / / __ \/ __ `/ ___/ ___/
 | 
			
		||||
 / /_/ / /_/ / / / /_/ / /_/ / /  / /    
 | 
			
		||||
/_____/\____/_/_/_.___/\__,_/_/  /_/     
 | 
			
		||||
                                         
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/hev-socks5-server
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/hev-socks5-server
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    __                                    __        ______                                    
 | 
			
		||||
   / /_  ___ _   __      _________  _____/ /_______/ ____/     ________  ______   _____  _____
 | 
			
		||||
  / __ \/ _ \ | / /_____/ ___/ __ \/ ___/ //_/ ___/___ \______/ ___/ _ \/ ___/ | / / _ \/ ___/
 | 
			
		||||
 / / / /  __/ |/ /_____(__  ) /_/ / /__/ ,< (__  )___/ /_____(__  )  __/ /   | |/ /  __/ /    
 | 
			
		||||
/_/ /_/\___/|___/     /____/\____/\___/_/|_/____/_____/     /____/\___/_/    |___/\___/_/     
 | 
			
		||||
                                                                                              
 | 
			
		||||
							
								
								
									
										64
									
								
								ct/hev-socks5-server.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								ct/hev-socks5-server.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: miviro
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/heiher/hev-socks5-server
 | 
			
		||||
 | 
			
		||||
APP="hev-socks5-server"
 | 
			
		||||
TAGS="proxy,socks5"
 | 
			
		||||
var_cpu="1"
 | 
			
		||||
var_ram="512"
 | 
			
		||||
var_disk="2"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
var_unprivileged="1"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
 | 
			
		||||
    if [[ ! -f /opt/${APP} ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    RELEASE=$(curl -s https://api.github.com/repos/heiher/${APP}/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
    if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
			
		||||
        msg_info "Stopping $APP"
 | 
			
		||||
        systemctl stop $APP
 | 
			
		||||
        msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
        msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
        curl -L -o "${APP}" "https://github.com/heiher/${APP}/releases/download/${RELEASE}/hev-socks5-server-linux-x86_64"
 | 
			
		||||
        mv ${APP} /opt/${APP}
 | 
			
		||||
        chmod +x /opt/${APP}
 | 
			
		||||
        msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
        msg_info "Starting $APP"
 | 
			
		||||
        systemctl start $APP
 | 
			
		||||
        msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
        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 with a SOCKS5 client using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}${IP}:1080${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} and the credentials stored at /root/hev.creds${CL}"
 | 
			
		||||
							
								
								
									
										64
									
								
								ct/homarr.sh
									
									
									
									
									
								
							
							
						
						
									
										64
									
								
								ct/homarr.sh
									
									
									
									
									
								
							@@ -1,7 +1,7 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 tteck
 | 
			
		||||
# Author: tteck (tteckster) | Co-Author: MickLesk (Canbiz)
 | 
			
		||||
# Author: tteck (tteckster) | Co-Author: MickLesk (Canbiz) | Co-Author: CrazyWolf13
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://homarr.dev/
 | 
			
		||||
 | 
			
		||||
@@ -15,6 +15,7 @@ var_version="12"
 | 
			
		||||
var_unprivileged="1"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
@@ -33,11 +34,48 @@ if [[ -f /opt/homarr/database/db.sqlite ]]; then
 | 
			
		||||
    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 1
 | 
			
		||||
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"
 | 
			
		||||
        apt-get install -y nginx gettext openssl gpg &>/dev/null
 | 
			
		||||
        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
 | 
			
		||||
export DB_DIALECT='sqlite'
 | 
			
		||||
export AUTH_SECRET=$(openssl rand -base64 32)
 | 
			
		||||
node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT
 | 
			
		||||
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
 | 
			
		||||
  RELEASE=$(curl -s https://api.github.com/repos/homarr-labs/homarr/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 "Stopping Services"
 | 
			
		||||
    msg_info "Stopping Services (Patience)"
 | 
			
		||||
    systemctl stop homarr
 | 
			
		||||
    msg_ok "Services Stopped"
 | 
			
		||||
 | 
			
		||||
@@ -46,7 +84,7 @@ fi
 | 
			
		||||
    cp /opt/homarr/.env /opt/homarr-data-backup/.env
 | 
			
		||||
    msg_ok "Backup Data"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    msg_info "Updating and rebuilding ${APP} to v${RELEASE} (Patience)"
 | 
			
		||||
    wget -q "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip"
 | 
			
		||||
    unzip -q v${RELEASE}.zip
 | 
			
		||||
    rm -rf v${RELEASE}.zip
 | 
			
		||||
@@ -55,9 +93,23 @@ fi
 | 
			
		||||
    mv /opt/homarr-data-backup/.env /opt/homarr/.env
 | 
			
		||||
    cd /opt/homarr
 | 
			
		||||
    pnpm install &>/dev/null
 | 
			
		||||
    pnpm run db:migration:sqlite:run &>/dev/null
 | 
			
		||||
    pnpm build &>/dev/null
 | 
			
		||||
    mkdir 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
 | 
			
		||||
    mkdir -p /etc/nginx/templates
 | 
			
		||||
    cp /opt/homarr/nginx.conf /etc/nginx/templates/nginx.conf
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
@@ -79,4 +131,4 @@ 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}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7575${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -73,5 +73,5 @@ 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}"
 | 
			
		||||
echo -e "${INFO}${YW} Access the LXC at following IP address:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}${IP}${CL}"
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 tteck
 | 
			
		||||
# Author: tteck (tteckster)
 | 
			
		||||
# Author: tteck (tteckster) | Co-Author Slaviša Arežina (tremor021)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://magicmirror.builders/
 | 
			
		||||
 | 
			
		||||
@@ -27,18 +27,48 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
 | 
			
		||||
    if ! command -v npm >/dev/null 2>&1; then
 | 
			
		||||
      echo "Installing NPM..."
 | 
			
		||||
      apt-get install -y npm >/dev/null 2>&1
 | 
			
		||||
      echo "Installed NPM..."
 | 
			
		||||
  RELEASE=$(curl -s https://api.github.com/repos/MagicMirrorOrg/MagicMirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]]; then touch /opt/${APP}_version.txt; fi
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop magicmirror
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get upgrade -y
 | 
			
		||||
    rm -rf /opt/magicmirror-backup
 | 
			
		||||
    mkdir /opt/magicmirror-backup
 | 
			
		||||
    cp /opt/magicmirror/config/config.js /opt/magicmirror-backup
 | 
			
		||||
    if [[ -f /opt/magicmirror/css/custom.css ]]; then
 | 
			
		||||
      cp /opt/magicmirror/css/custom.css /opt/magicmirror-backup
 | 
			
		||||
    fi
 | 
			
		||||
    cp -r /opt/magicmirror/modules /opt/magicmirror-backup
 | 
			
		||||
    temp_file=$(mktemp)
 | 
			
		||||
    wget -q "https://github.com/MagicMirrorOrg/MagicMirror/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file"
 | 
			
		||||
    tar -xzf "$temp_file"
 | 
			
		||||
    rm -rf /opt/magicmirror
 | 
			
		||||
    mv MagicMirror-${RELEASE} /opt/magicmirror
 | 
			
		||||
    cd /opt/magicmirror
 | 
			
		||||
    npm run install-mm &> /dev/null
 | 
			
		||||
    cp /opt/magicmirror-backup/config.js /opt/magicmirror/config/
 | 
			
		||||
    if [[ -f /opt/magicmirror-backup/custom.css ]]; then
 | 
			
		||||
      cp /opt/magicmirror-backup/custom.css /opt/magicmirror/css/
 | 
			
		||||
    fi
 | 
			
		||||
    echo "${RELEASE}" >"/opt/${APP}_version.txt"
 | 
			
		||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start magicmirror
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -f $temp_file
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}."
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Updating ${APP} LXC"
 | 
			
		||||
  cd /opt/magicmirror
 | 
			
		||||
  git pull &>/dev/null
 | 
			
		||||
  npm install --only=prod --omit=dev &>/dev/null
 | 
			
		||||
  msg_ok "Updated Successfully"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -49,4 +79,4 @@ 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}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ function update_script() {
 | 
			
		||||
      cd /opt
 | 
			
		||||
      wget -q "https://github.com/stonith404/pingvin-share/archive/refs/tags/v${RELEASE}.zip"
 | 
			
		||||
      unzip -q v${RELEASE}.zip
 | 
			
		||||
      mv pingvin-share-${RELEASE} /opt/pingvin-share  
 | 
			
		||||
      cp -rf pingvin-share-${RELEASE}/* /opt/pingvin-share
 | 
			
		||||
      cd /opt/pingvin-share
 | 
			
		||||
      cd backend
 | 
			
		||||
      npm install &>/dev/null
 | 
			
		||||
@@ -49,6 +49,7 @@ function update_script() {
 | 
			
		||||
      npm run build &>/dev/null
 | 
			
		||||
      echo "${RELEASE}" >"/opt/pingvin_version.txt"
 | 
			
		||||
      rm -rf /opt/v${RELEASE}.zip
 | 
			
		||||
      rm -rf /opt/pingvin-share-${RELEASE}
 | 
			
		||||
      msg_ok "Updated Pingvin Share to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
      msg_info "Starting Pingvin Share"
 | 
			
		||||
 
 | 
			
		||||
@@ -37,11 +37,12 @@ function update_script() {
 | 
			
		||||
 | 
			
		||||
        msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
        temp_file=$(mktemp)
 | 
			
		||||
        temp_folder=$(mktemp -d)
 | 
			
		||||
        wget -q "https://github.com/sbondCo/Watcharr/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file"
 | 
			
		||||
        tar -xzf "$temp_file"
 | 
			
		||||
        tar -xzf "$temp_file" -C "$temp_folder"
 | 
			
		||||
        rm -f /opt/watcharr/server/watcharr
 | 
			
		||||
        rm -rf /opt/watcharr/server/ui
 | 
			
		||||
        mv Watcharr-${RELEASE}/ /opt/watcharr
 | 
			
		||||
        cp -rf ${temp_folder}/Watcharr-${RELEASE}/* /opt/watcharr
 | 
			
		||||
        cd /opt/watcharr
 | 
			
		||||
        export GOOS=linux
 | 
			
		||||
        npm i &> /dev/null
 | 
			
		||||
@@ -58,6 +59,7 @@ function update_script() {
 | 
			
		||||
 | 
			
		||||
        msg_info "Cleaning Up"
 | 
			
		||||
        rm -f ${temp_file}
 | 
			
		||||
        rm -rf ${temp_folder}
 | 
			
		||||
        msg_ok "Cleanup Completed"
 | 
			
		||||
 | 
			
		||||
        echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
 
 | 
			
		||||
@@ -7,9 +7,9 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
 | 
			
		||||
 | 
			
		||||
APP="Wikijs"
 | 
			
		||||
var_tags="wiki"
 | 
			
		||||
var_cpu="1"
 | 
			
		||||
var_ram="512"
 | 
			
		||||
var_disk="3"
 | 
			
		||||
var_cpu="2"
 | 
			
		||||
var_ram="2048"
 | 
			
		||||
var_disk="10"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
var_unprivileged="1"
 | 
			
		||||
@@ -63,4 +63,4 @@ 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}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -26,6 +26,12 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if ! command -v pnpm &>/dev/null; then  
 | 
			
		||||
    msg_info "Installing pnpm"
 | 
			
		||||
    #export NODE_OPTIONS=--openssl-legacy-provider
 | 
			
		||||
    npm install -g pnpm@latest &>/dev/null
 | 
			
		||||
    msg_ok "Installed pnpm"
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -s https://api.github.com/repos/diced/zipline/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 "Stopping ${APP}"
 | 
			
		||||
@@ -40,8 +46,8 @@ function update_script() {
 | 
			
		||||
    mv zipline-${RELEASE} /opt/zipline
 | 
			
		||||
    cd /opt/zipline
 | 
			
		||||
    mv /opt/.env /opt/zipline/.env
 | 
			
		||||
    yarn install &>/dev/null
 | 
			
		||||
    yarn build &>/dev/null
 | 
			
		||||
    pnpm install &>/dev/null
 | 
			
		||||
    pnpm build &>/dev/null
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
@@ -66,4 +72,4 @@ 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}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 tteck
 | 
			
		||||
# Author: tteck (tteckster)
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://actualbudget.org/
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
@@ -41,18 +41,32 @@ RELEASE=$(curl -s https://api.github.com/repos/actualbudget/actual/releases/late
 | 
			
		||||
wget -q https://github.com/actualbudget/actual-server/archive/refs/tags/v${RELEASE}.tar.gz
 | 
			
		||||
tar -xzf v${RELEASE}.tar.gz
 | 
			
		||||
mv *ctual-server-* /opt/actualbudget
 | 
			
		||||
mkdir -p /opt/actualbudget/server-files
 | 
			
		||||
mkdir -p /opt/actualbudget-data
 | 
			
		||||
chown -R root:root /opt/actualbudget/server-files
 | 
			
		||||
chmod 755 /opt/actualbudget/server-files
 | 
			
		||||
cat <<EOF > /opt/actualbudget/.env
 | 
			
		||||
ACTUAL_UPLOAD_DIR=/opt/actualbudget/server-files
 | 
			
		||||
 | 
			
		||||
mkdir -p /opt/actualbudget-data/{server-files,upload,migrate,user-files,migrations,config}
 | 
			
		||||
chown -R root:root /opt/actualbudget-data
 | 
			
		||||
chmod -R 755 /opt/actualbudget-data
 | 
			
		||||
 | 
			
		||||
cat <<EOF > /opt/actualbudget-data/.env
 | 
			
		||||
ACTUAL_UPLOAD_DIR=/opt/actualbudget-data/upload
 | 
			
		||||
ACTUAL_DATA_DIR=/opt/actualbudget-data
 | 
			
		||||
ACTUAL_SERVER_FILES_DIR=/opt/actualbudget/server-files
 | 
			
		||||
ACTUAL_SERVER_FILES_DIR=/opt/actualbudget-data/server-files
 | 
			
		||||
ACTUAL_USER_FILES=/opt/actualbudget-data/user-files
 | 
			
		||||
PORT=5006
 | 
			
		||||
ACTUAL_TRUSTED_PROXIES="10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,127.0.0.1/32,::1/128,fc00::/7"
 | 
			
		||||
ACTUAL_HTTPS_KEY=/opt/actualbudget/selfhost.key
 | 
			
		||||
ACTUAL_HTTPS_CERT=/opt/actualbudget/selfhost.crt
 | 
			
		||||
EOF
 | 
			
		||||
cd /opt/actualbudget
 | 
			
		||||
$STD yarn install
 | 
			
		||||
$STD openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout selfhost.key -out selfhost.crt <<EOF
 | 
			
		||||
US
 | 
			
		||||
California
 | 
			
		||||
San Francisco
 | 
			
		||||
My Organization
 | 
			
		||||
My Unit
 | 
			
		||||
localhost
 | 
			
		||||
myemail@example.com
 | 
			
		||||
EOF
 | 
			
		||||
echo "${RELEASE}" >"/opt/actualbudget_version.txt"
 | 
			
		||||
msg_ok "Installed Actual Budget"
 | 
			
		||||
 | 
			
		||||
@@ -67,7 +81,7 @@ Type=simple
 | 
			
		||||
User=root
 | 
			
		||||
Group=root
 | 
			
		||||
WorkingDirectory=/opt/actualbudget
 | 
			
		||||
EnvironmentFile=/opt/actualbudget/.env
 | 
			
		||||
EnvironmentFile=/opt/actualbudget-data/.env
 | 
			
		||||
ExecStart=/usr/bin/yarn start
 | 
			
		||||
Restart=always
 | 
			
		||||
RestartSec=10
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										74
									
								
								install/boltdiy-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								install/boltdiy-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,74 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Slaviša Arežina (tremor021)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/stackblitz-labs/bolt.diy/
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  curl \
 | 
			
		||||
  sudo \
 | 
			
		||||
  mc \
 | 
			
		||||
  gnupg \
 | 
			
		||||
  git
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
msg_ok "Setup Node.js Repository"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup Node.js"
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y nodejs
 | 
			
		||||
$STD npm install -g pnpm
 | 
			
		||||
msg_ok "Setup Node.js"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup bolt.diy"
 | 
			
		||||
temp_file=$(mktemp)
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/stackblitz-labs/bolt.diy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
wget -q "https://github.com/stackblitz-labs/bolt.diy/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file
 | 
			
		||||
tar xzf $temp_file
 | 
			
		||||
mv bolt.diy-${RELEASE} /opt/bolt.diy
 | 
			
		||||
cd /opt/bolt.diy
 | 
			
		||||
$STD pnpm install
 | 
			
		||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
			
		||||
msg_ok "Setup bolt.diy"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/boltdiy.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=bolt.diy Service 
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
User=root
 | 
			
		||||
WorkingDirectory=/opt/bolt.diy
 | 
			
		||||
ExecStart=/usr/bin/pnpm run dev --host
 | 
			
		||||
Restart=always
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now boltdiy
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -f $temp_file
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -26,7 +26,7 @@ msg_info "Installing Nginx"
 | 
			
		||||
wget -qO- https://nginx.org/keys/nginx_signing.key | gpg --dearmor >/usr/share/keyrings/nginx-archive-keyring.gpg
 | 
			
		||||
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/debian $(lsb_release -cs) nginx" >/etc/apt/sources.list.d/nginx.list
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y nginx=1.26.2*
 | 
			
		||||
$STD apt-get install -y nginx=1.26.3*
 | 
			
		||||
msg_ok "Installed Nginx"
 | 
			
		||||
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/bunkerity/bunkerweb/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
@@ -34,7 +34,6 @@ msg_info "Installing BunkerWeb v${RELEASE} (Patience)"
 | 
			
		||||
curl -fsSL "https://repo.bunkerweb.io/bunkerity/bunkerweb/gpgkey" | gpg --dearmor >/etc/apt/keyrings/bunkerity_bunkerweb-archive-keyring.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/bunkerity_bunkerweb-archive-keyring.gpg] https://repo.bunkerweb.io/bunkerity/bunkerweb/debian/ bookworm main" >/etc/apt/sources.list.d/bunkerity_bunkerweb.list
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
export UI_WIZARD=1
 | 
			
		||||
$STD apt-get install -y bunkerweb=${RELEASE}
 | 
			
		||||
cat <<EOF >/etc/apt/preferences.d/bunkerweb
 | 
			
		||||
Package: bunkerweb
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										97
									
								
								install/docmost-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								install/docmost-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,97 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (Canbiz)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/documenso/documenso
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  gpg \
 | 
			
		||||
  curl \
 | 
			
		||||
  sudo \
 | 
			
		||||
  redis \
 | 
			
		||||
  make \
 | 
			
		||||
  mc \
 | 
			
		||||
  postgresql
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
msg_ok "Set up Node.js Repository"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Node.js"
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y nodejs
 | 
			
		||||
$STD npm install -g pnpm
 | 
			
		||||
msg_ok "Installed Node.js"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up PostgreSQL"
 | 
			
		||||
DB_NAME="docmost_db"
 | 
			
		||||
DB_USER="docmost_user"
 | 
			
		||||
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
 | 
			
		||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
 | 
			
		||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
 | 
			
		||||
{
 | 
			
		||||
    echo "Docmost-Credentials"
 | 
			
		||||
    echo "Database Name: $DB_NAME"
 | 
			
		||||
    echo "Database User: $DB_USER"
 | 
			
		||||
    echo "Database Password: $DB_PASS"
 | 
			
		||||
} >> ~/docmost.creds
 | 
			
		||||
msg_ok "Set up PostgreSQL"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Docmost (Patience)"
 | 
			
		||||
temp_file=$(mktemp)
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/docmost/docmost/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
wget -q "https://github.com/docmost/docmost/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file"
 | 
			
		||||
tar -xzf "$temp_file"
 | 
			
		||||
mv docmost-${RELEASE} /opt/docmost
 | 
			
		||||
cd /opt/docmost
 | 
			
		||||
mv .env.example .env
 | 
			
		||||
sed -i "s|APP_SECRET=.*|APP_SECRET=$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)|" /opt/docmost/.env
 | 
			
		||||
sed -i "s|DATABASE_URL=.*|DATABASE_URL=postgres://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME|" /opt/docmost/.env
 | 
			
		||||
export NODE_OPTIONS="--max-old-space-size=2048"
 | 
			
		||||
$STD pnpm install
 | 
			
		||||
$STD pnpm build
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
msg_ok "Installed Docmost"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/docmost.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Docmost Service
 | 
			
		||||
After=network.target postgresql.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
WorkingDirectory=/opt/docmost
 | 
			
		||||
ExecStart=/usr/bin/pnpm start
 | 
			
		||||
Restart=always
 | 
			
		||||
EnvironmentFile=/opt/docmost/.env
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now docmost
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -f "$temp_file"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
							
								
								
									
										53
									
								
								install/dolibarr-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								install/dolibarr-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Slaviša Arežina (tremor021)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/Dolibarr/dolibarr/
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  curl \
 | 
			
		||||
  sudo \
 | 
			
		||||
  mc \
 | 
			
		||||
  php-imap \
 | 
			
		||||
  debconf-utils \
 | 
			
		||||
  mariadb-server
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Database"
 | 
			
		||||
ROOT_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
 | 
			
		||||
$STD sudo mysql -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password AS PASSWORD('$ROOT_PASS'); flush privileges;"
 | 
			
		||||
{
 | 
			
		||||
    echo "Dolibarr DB Credentials"
 | 
			
		||||
    echo "MariaDB Root Password: $ROOT_PASS"
 | 
			
		||||
} >> ~/dolibarr.creds
 | 
			
		||||
msg_ok "Set up database"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup Dolibarr"
 | 
			
		||||
BASE="https://sourceforge.net/projects/dolibarr/files/Dolibarr%20installer%20for%20Debian-Ubuntu%20(DoliDeb)/"
 | 
			
		||||
RELEASE=$(curl -s "$BASE" | grep -oP '(?<=/Dolibarr%20installer%20for%20Debian-Ubuntu%20%28DoliDeb%29/)[^/"]+' | head -n1)
 | 
			
		||||
FILE=$(curl -s "${BASE}${RELEASE}/" | grep -oP 'dolibarr_[^"]+_all.deb' | head -n1)
 | 
			
		||||
wget -q "https://netcologne.dl.sourceforge.net/project/dolibarr/Dolibarr%20installer%20for%20Debian-Ubuntu%20(DoliDeb)/${RELEASE}/${FILE}?viasf=1" -O "$FILE"
 | 
			
		||||
echo "dolibarr dolibarr/reconfigure-webserver multiselect apache2" | debconf-set-selections
 | 
			
		||||
$STD apt-get install ./$FILE -y
 | 
			
		||||
$STD apt install -f
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
msg_ok "Setup Dolibarr"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf ~/$FILE
 | 
			
		||||
$STD apt-get autoremove
 | 
			
		||||
$STD apt-get autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -50,6 +50,13 @@ chmod -R g+rX /opt/freshrss
 | 
			
		||||
chmod -R g+w /opt/freshrss/data/
 | 
			
		||||
msg_ok "Installed FreshRSS"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up cron job for feed refresh"
 | 
			
		||||
cat <<EOF >/etc/cron.d/freshrss-actualize
 | 
			
		||||
*/15 * * * * www-data /bin/php -f /opt/freshrss/app/actualize_script.php > /tmp/FreshRSS.log 2>&1
 | 
			
		||||
EOF
 | 
			
		||||
chmod 644 /etc/cron.d/freshrss-actualize
 | 
			
		||||
msg_ok "Set up Cron - if you need to modify the timing edit file /etc/cron.d/freshrss-actualize"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/apache2/sites-available/freshrss.conf
 | 
			
		||||
<VirtualHost *:80>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										61
									
								
								install/hev-socks5-server-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								install/hev-socks5-server-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,61 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: miviro
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/heiher/hev-socks5-server
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
    curl \
 | 
			
		||||
    sudo \
 | 
			
		||||
    mc 
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup ${APPLICATION}"
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/heiher/${APPLICATION}/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
curl -L -o "${APPLICATION}" "https://github.com/heiher/${APPLICATION}/releases/download/${RELEASE}/hev-socks5-server-linux-x86_64"
 | 
			
		||||
mv ${APPLICATION} /opt/${APPLICATION}
 | 
			
		||||
chmod +x /opt/${APPLICATION}
 | 
			
		||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
			
		||||
curl -L -o "main.yml" "https://raw.githubusercontent.com/heiher/${APPLICATION}/refs/heads/master/conf/main.yml"
 | 
			
		||||
sed -i 's/^#auth:/auth:/; s/^#  file: conf\/auth.txt/  file: \/root\/hev.creds/' main.yml
 | 
			
		||||
mkdir -p /etc/${APPLICATION}
 | 
			
		||||
USERNAME="admin"
 | 
			
		||||
PASSWORD=$(openssl rand -base64 16)
 | 
			
		||||
MARK="0"
 | 
			
		||||
echo "$USERNAME $PASSWORD $MARK" > /root/hev.creds
 | 
			
		||||
mv main.yml /etc/${APPLICATION}/main.yml
 | 
			
		||||
msg_ok "Setup ${APPLICATION}"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/${APPLICATION}.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=${APPLICATION} Service
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
ExecStart=/opt/${APPLICATION} /etc/${APPLICATION}/main.yml
 | 
			
		||||
Restart=always
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now ${APPLICATION}.service
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
# 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/ajnart/homarr
 | 
			
		||||
# Source: https://github.com/homarr-labs/homarr
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
@@ -20,10 +20,13 @@ $STD apt-get install -y \
 | 
			
		||||
  curl \
 | 
			
		||||
  redis-server \
 | 
			
		||||
  ca-certificates \
 | 
			
		||||
  gnupg \
 | 
			
		||||
  gpg \
 | 
			
		||||
  make \
 | 
			
		||||
  g++ \
 | 
			
		||||
  build-essential
 | 
			
		||||
  build-essential \
 | 
			
		||||
  nginx \
 | 
			
		||||
  gettext \
 | 
			
		||||
  openssl
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
@@ -46,27 +49,56 @@ unzip -q v${RELEASE}.zip
 | 
			
		||||
mv homarr-${RELEASE} /opt/homarr
 | 
			
		||||
mkdir -p /opt/homarr_db
 | 
			
		||||
touch /opt/homarr_db/db.sqlite
 | 
			
		||||
AUTH_SECRET="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
 | 
			
		||||
SECRET_ENCRYPTION_KEY="$(openssl rand -hex 32)"
 | 
			
		||||
 | 
			
		||||
cd /opt/homarr
 | 
			
		||||
cat <<EOF >/opt/homarr/.env
 | 
			
		||||
AUTH_SECRET='${AUTH_SECRET}'
 | 
			
		||||
DB_DRIVER='better-sqlite3'
 | 
			
		||||
DB_DIALECT='sqlite'
 | 
			
		||||
SECRET_ENCRYPTION_KEY='${SECRET_ENCRYPTION_KEY}'
 | 
			
		||||
DB_URL='/opt/homarr_db/db.sqlite'
 | 
			
		||||
TURBO_TELEMETRY_DISABLED=1
 | 
			
		||||
AUTH_PROVIDERS='credentials'
 | 
			
		||||
NODE_ENV='production'
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cd /opt/homarr
 | 
			
		||||
$STD pnpm install
 | 
			
		||||
$STD pnpm run db:migration:sqlite:run
 | 
			
		||||
$STD pnpm build
 | 
			
		||||
mkdir build
 | 
			
		||||
cp ./node_modules/better-sqlite3/build/Release/better_sqlite3.node ./build/better_sqlite3.node
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
msg_ok "Installed Homarr"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
msg_info "Copying build and config files"
 | 
			
		||||
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
 | 
			
		||||
mkdir -p /etc/nginx/templates
 | 
			
		||||
rm /etc/nginx/nginx.conf
 | 
			
		||||
cp /opt/homarr/nginx.conf /etc/nginx/templates/nginx.conf
 | 
			
		||||
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
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
msg_ok "Finished copying"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Services"
 | 
			
		||||
cat <<'EOF' >/opt/run_homarr.sh
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
export DB_DIALECT='sqlite'
 | 
			
		||||
export AUTH_SECRET=$(openssl rand -base64 32)
 | 
			
		||||
node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT
 | 
			
		||||
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
 | 
			
		||||
cat <<EOF >/etc/systemd/system/homarr.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Homarr Service
 | 
			
		||||
@@ -76,7 +108,7 @@ After=network.target
 | 
			
		||||
Type=exec
 | 
			
		||||
WorkingDirectory=/opt/homarr
 | 
			
		||||
EnvironmentFile=-/opt/homarr/.env
 | 
			
		||||
ExecStart=/usr/bin/pnpm start
 | 
			
		||||
ExecStart=/opt/run_homarr.sh
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,10 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 tteck
 | 
			
		||||
# Author: tteck (tteckster)
 | 
			
		||||
# Author: tteck (tteckster) | Co-Author Slaviša Arežina (tremor021)
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://magicmirror.builders/
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
@@ -14,12 +15,11 @@ network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y curl
 | 
			
		||||
$STD apt-get install -y sudo
 | 
			
		||||
$STD apt-get install -y mc
 | 
			
		||||
$STD apt-get install -y git
 | 
			
		||||
$STD apt-get install -y ca-certificates
 | 
			
		||||
$STD apt-get install -y gnupg
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  curl \
 | 
			
		||||
  sudo \
 | 
			
		||||
  mc \
 | 
			
		||||
  gnupg
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
@@ -33,14 +33,14 @@ $STD apt-get update
 | 
			
		||||
$STD apt-get install -y nodejs
 | 
			
		||||
msg_ok "Installed Node.js"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up MagicMirror Repository"
 | 
			
		||||
$STD git clone https://github.com/MichMich/MagicMirror /opt/magicmirror
 | 
			
		||||
msg_ok "Set up MagicMirror Repository"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing MagicMirror"
 | 
			
		||||
msg_info "Setup MagicMirror"
 | 
			
		||||
temp_file=$(mktemp)
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/MagicMirrorOrg/MagicMirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
wget -q "https://github.com/MagicMirrorOrg/MagicMirror/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file"
 | 
			
		||||
tar -xzf "$temp_file"
 | 
			
		||||
mv MagicMirror-${RELEASE} /opt/magicmirror
 | 
			
		||||
cd /opt/magicmirror
 | 
			
		||||
$STD npm install --only=prod --omit=dev
 | 
			
		||||
 | 
			
		||||
$STD npm run install-mm
 | 
			
		||||
cat <<EOF >/opt/magicmirror/config/config.js
 | 
			
		||||
let config = {
 | 
			
		||||
        address: "0.0.0.0",     
 | 
			
		||||
@@ -130,11 +130,12 @@ let config = {
 | 
			
		||||
/*************** DO NOT EDIT THE LINE BELOW ***************/
 | 
			
		||||
if (typeof module !== "undefined") {module.exports = config;}
 | 
			
		||||
EOF
 | 
			
		||||
msg_ok "Installed MagicMirror"
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
msg_ok "Setup MagicMirror"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
service_path="/etc/systemd/system/magicmirror.service"
 | 
			
		||||
echo "[Unit]
 | 
			
		||||
cat <<EOF >/etc/systemd/system/magicmirror.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Magic Mirror
 | 
			
		||||
After=network.target
 | 
			
		||||
StartLimitIntervalSec=0
 | 
			
		||||
@@ -145,17 +146,19 @@ Restart=always
 | 
			
		||||
RestartSec=1
 | 
			
		||||
User=root
 | 
			
		||||
WorkingDirectory=/opt/magicmirror/
 | 
			
		||||
ExecStart=/usr/bin/node serveronly
 | 
			
		||||
ExecStart=/usr/bin/npm run server
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target" >$service_path
 | 
			
		||||
$STD systemctl enable --now magicmirror
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable --now magicmirror
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf $temp_file
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -14,32 +14,48 @@ network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y curl
 | 
			
		||||
$STD apt-get install -y sudo
 | 
			
		||||
$STD apt-get install -y mc
 | 
			
		||||
$STD apt-get install -y ufw
 | 
			
		||||
$STD apt-get install -y ntp
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  curl \
 | 
			
		||||
  sudo \
 | 
			
		||||
  mc \
 | 
			
		||||
  ufw
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Pi-hole"
 | 
			
		||||
mkdir -p /etc/pihole/
 | 
			
		||||
cat <<EOF >/etc/pihole/setupVars.conf
 | 
			
		||||
PIHOLE_INTERFACE=eth0
 | 
			
		||||
PIHOLE_DNS_1=8.8.8.8
 | 
			
		||||
PIHOLE_DNS_2=8.8.4.4
 | 
			
		||||
QUERY_LOGGING=true
 | 
			
		||||
INSTALL_WEB_SERVER=true
 | 
			
		||||
INSTALL_WEB_INTERFACE=true
 | 
			
		||||
LIGHTTPD_ENABLED=true
 | 
			
		||||
CACHE_SIZE=10000
 | 
			
		||||
DNS_FQDN_REQUIRED=true
 | 
			
		||||
DNS_BOGUS_PRIV=true
 | 
			
		||||
DNSMASQ_LISTENING=local
 | 
			
		||||
WEBPASSWORD=$(openssl rand -base64 48)
 | 
			
		||||
BLOCKING_ENABLED=true
 | 
			
		||||
EOF
 | 
			
		||||
# View script https://install.pi-hole.net
 | 
			
		||||
mkdir -p /etc/pihole
 | 
			
		||||
touch /etc/pihole/pihole.toml
 | 
			
		||||
$STD bash <(curl -fsSL https://install.pi-hole.net) --unattended
 | 
			
		||||
sed -i -E '
 | 
			
		||||
/^\s*upstreams =/ s|=.*|= ["8.8.8.8", "8.8.4.4"]|
 | 
			
		||||
/^\s*interface =/ s|=.*|= "eth0"|
 | 
			
		||||
/^\s*queryLogging =/ s|=.*|= true|
 | 
			
		||||
/^\s*size =/ s|=.*|= 10000|
 | 
			
		||||
/^\s*active =/ s|=.*|= true|
 | 
			
		||||
/^\s*listeningMode =/ s|=.*|= "LOCAL"|
 | 
			
		||||
/^\s*port =/ s|=.*|= "80o,443os,[::]:80o,[::]:443os"|
 | 
			
		||||
/^\s*pwhash =/ s|=.*|= ""|
 | 
			
		||||
 | 
			
		||||
# DHCP Disable
 | 
			
		||||
/^\s*\[dhcp\]/,/^\s*\[/{s/^\s*active = true/  active = false/}
 | 
			
		||||
 | 
			
		||||
# NTP Disable
 | 
			
		||||
/^\s*\[ntp.ipv4\]/,/^\s*\[/{s/^\s*active = true/  active = false/}
 | 
			
		||||
/^\s*\[ntp.ipv6\]/,/^\s*\[/{s/^\s*active = true/  active = false/}
 | 
			
		||||
/^\s*\[ntp.sync\]/,/^\s*\[/{s/^\s*active = true/  active = false/}
 | 
			
		||||
/^\s*\[ntp.sync\]/,/^\s*\[/{s/^\s*interval = [0-9]+/  interval = 0/}
 | 
			
		||||
/^\s*\[ntp.sync.rtc\]/,/^\s*\[/{s/^\s*set = true/  set = false/}
 | 
			
		||||
 | 
			
		||||
# set domainNeeded und expandHosts
 | 
			
		||||
/^\s*domainNeeded =/ s|=.*|= true|
 | 
			
		||||
/^\s*expandHosts =/ s|=.*|= true|
 | 
			
		||||
' /etc/pihole/pihole.toml
 | 
			
		||||
 | 
			
		||||
cat <<EOF > /etc/dnsmasq.d/01-pihole.conf
 | 
			
		||||
server=8.8.8.8
 | 
			
		||||
server=8.8.4.4
 | 
			
		||||
EOF
 | 
			
		||||
$STD pihole-FTL --config ntp.sync.interval 0
 | 
			
		||||
systemctl restart pihole-FTL.service
 | 
			
		||||
msg_ok "Installed Pi-hole"
 | 
			
		||||
 | 
			
		||||
read -r -p "Would you like to add Unbound? <y/N> " prompt
 | 
			
		||||
@@ -119,9 +135,13 @@ forward-zone:
 | 
			
		||||
  #forward-addr: 2620:fe::9@853#dns.quad9.net
 | 
			
		||||
EOF
 | 
			
		||||
  fi
 | 
			
		||||
cat <<EOF > /etc/dnsmasq.d/01-pihole.conf
 | 
			
		||||
server=127.0.0.1#5335
 | 
			
		||||
server=8.8.8.8
 | 
			
		||||
server=8.8.4.4
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
  sed -i -e 's/PIHOLE_DNS_1=8.8.8.8/PIHOLE_DNS_1=127.0.0.1#5335/' -e '/PIHOLE_DNS_2=8.8.4.4/d' /etc/pihole/setupVars.conf
 | 
			
		||||
  sed -i -e 's/server=8.8.8.8/server=127.0.0.1#5335/' -e '/server=8.8.4.4/d' /etc/dnsmasq.d/01-pihole.conf
 | 
			
		||||
  sed -i -E "s|^(upstreams =).*|\1 [\"127.0.0.1#5335\", \"8.8.4.4\"]|" /etc/pihole/pihole.toml
 | 
			
		||||
  systemctl enable -q --now unbound
 | 
			
		||||
  systemctl restart pihole-FTL.service
 | 
			
		||||
  msg_ok "Installed Unbound"
 | 
			
		||||
 
 | 
			
		||||
@@ -19,11 +19,72 @@ $STD apt-get install -y sudo
 | 
			
		||||
$STD apt-get install -y mc
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
get_latest_release() {
 | 
			
		||||
  curl -sL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PORTAINER_LATEST_VERSION=$(get_latest_release "portainer/portainer")
 | 
			
		||||
PORTAINER_AGENT_LATEST_VERSION=$(get_latest_release "portainer/agent")
 | 
			
		||||
 | 
			
		||||
if $STD mount | grep 'on / type zfs' > null && echo "ZFS"; then
 | 
			
		||||
    msg_info "Enabling ZFS support."
 | 
			
		||||
    mkdir -p /etc/containers
 | 
			
		||||
    cat <<'EOF' >/usr/local/bin/overlayzfsmount
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
exec /bin/mount -t overlay overlay "$@"
 | 
			
		||||
EOF
 | 
			
		||||
    chmod +x /usr/local/bin/overlayzfsmount
 | 
			
		||||
    cat <<'EOF' >/etc/containers/storage.conf
 | 
			
		||||
[storage]
 | 
			
		||||
driver = "overlay"
 | 
			
		||||
runroot = "/run/containers/storage"
 | 
			
		||||
graphroot = "/var/lib/containers/storage"
 | 
			
		||||
 | 
			
		||||
[storage.options]
 | 
			
		||||
pull_options = {enable_partial_images = "false", use_hard_links = "false", ostree_repos=""}
 | 
			
		||||
mount_program = "/usr/local/bin/overlayzfsmount"
 | 
			
		||||
 | 
			
		||||
[storage.options.overlay]
 | 
			
		||||
mountopt = "nodev"
 | 
			
		||||
EOF
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Podman"
 | 
			
		||||
$STD apt-get -y install podman
 | 
			
		||||
$STD systemctl enable --now podman.socket
 | 
			
		||||
echo -e 'unqualified-search-registries=["docker.io"]' >> /etc/containers/registries.conf
 | 
			
		||||
msg_ok "Installed Podman"
 | 
			
		||||
 | 
			
		||||
read -r -p "Would you like to add Portainer? <y/N> " prompt
 | 
			
		||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
 | 
			
		||||
  msg_info "Installing Portainer $PORTAINER_LATEST_VERSION"
 | 
			
		||||
  podman volume create portainer_data >/dev/null
 | 
			
		||||
  $STD podman run -d \
 | 
			
		||||
    -p 8000:8000 \
 | 
			
		||||
    -p 9443:9443 \
 | 
			
		||||
    --name=portainer \
 | 
			
		||||
    --restart=always \
 | 
			
		||||
    -v /run/podman/podman.sock:/var/run/docker.sock \
 | 
			
		||||
    -v portainer_data:/data \
 | 
			
		||||
    portainer/portainer-ce:latest
 | 
			
		||||
  msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION"
 | 
			
		||||
else
 | 
			
		||||
  read -r -p "Would you like to add the Portainer Agent? <y/N> " prompt
 | 
			
		||||
  if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
 | 
			
		||||
    msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION"
 | 
			
		||||
    podman volume create temp >/dev/null
 | 
			
		||||
    podman volume remove temp >/dev/null
 | 
			
		||||
    $STD podman run -d \
 | 
			
		||||
      -p 9001:9001 \
 | 
			
		||||
      --name portainer_agent \
 | 
			
		||||
      --restart=always \
 | 
			
		||||
      -v /run/podman/podman.sock:/var/run/docker.sock \
 | 
			
		||||
      -v /var/lib/containers/storage/volumes:/var/lib/docker/volumes \
 | 
			
		||||
      portainer/agent
 | 
			
		||||
    msg_ok "Installed Portainer Agent $PORTAINER_AGENT_LATEST_VERSION"
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
msg_info "Pulling Home Assistant Image"
 | 
			
		||||
$STD podman pull docker.io/homeassistant/home-assistant:stable
 | 
			
		||||
msg_ok "Pulled Home Assistant Image"
 | 
			
		||||
 
 | 
			
		||||
@@ -19,12 +19,73 @@ $STD apt-get install -y sudo
 | 
			
		||||
$STD apt-get install -y mc
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
get_latest_release() {
 | 
			
		||||
  curl -sL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PORTAINER_LATEST_VERSION=$(get_latest_release "portainer/portainer")
 | 
			
		||||
PORTAINER_AGENT_LATEST_VERSION=$(get_latest_release "portainer/agent")
 | 
			
		||||
 | 
			
		||||
if $STD mount | grep 'on / type zfs' > null && echo "ZFS"; then
 | 
			
		||||
    msg_info "Enabling ZFS support."
 | 
			
		||||
    mkdir -p /etc/containers
 | 
			
		||||
    cat <<'EOF' >/usr/local/bin/overlayzfsmount
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
exec /bin/mount -t overlay overlay "$@"
 | 
			
		||||
EOF
 | 
			
		||||
    chmod +x /usr/local/bin/overlayzfsmount
 | 
			
		||||
    cat <<'EOF' >/etc/containers/storage.conf
 | 
			
		||||
[storage]
 | 
			
		||||
driver = "overlay"
 | 
			
		||||
runroot = "/run/containers/storage"
 | 
			
		||||
graphroot = "/var/lib/containers/storage"
 | 
			
		||||
 | 
			
		||||
[storage.options]
 | 
			
		||||
pull_options = {enable_partial_images = "false", use_hard_links = "false", ostree_repos=""}
 | 
			
		||||
mount_program = "/usr/local/bin/overlayzfsmount"
 | 
			
		||||
 | 
			
		||||
[storage.options.overlay]
 | 
			
		||||
mountopt = "nodev"
 | 
			
		||||
EOF
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Podman"
 | 
			
		||||
$STD apt-get -y install podman
 | 
			
		||||
$STD systemctl enable --now podman.socket
 | 
			
		||||
echo -e 'unqualified-search-registries=["docker.io"]' >> /etc/containers/registries.conf
 | 
			
		||||
msg_ok "Installed Podman"
 | 
			
		||||
 | 
			
		||||
read -r -p "Would you like to add Portainer? <y/N> " prompt
 | 
			
		||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
 | 
			
		||||
  msg_info "Installing Portainer $PORTAINER_LATEST_VERSION"
 | 
			
		||||
  podman volume create portainer_data >/dev/null
 | 
			
		||||
  $STD podman run -d \
 | 
			
		||||
    -p 8000:8000 \
 | 
			
		||||
    -p 9443:9443 \
 | 
			
		||||
    --name=portainer \
 | 
			
		||||
    --restart=always \
 | 
			
		||||
    -v /run/podman/podman.sock:/var/run/docker.sock \
 | 
			
		||||
    -v portainer_data:/data \
 | 
			
		||||
    portainer/portainer-ce:latest
 | 
			
		||||
  msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION"
 | 
			
		||||
else
 | 
			
		||||
  read -r -p "Would you like to add the Portainer Agent? <y/N> " prompt
 | 
			
		||||
  if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
 | 
			
		||||
    msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION"
 | 
			
		||||
    podman volume create temp >/dev/null
 | 
			
		||||
    podman volume remove temp >/dev/null
 | 
			
		||||
    $STD podman run -d \
 | 
			
		||||
      -p 9001:9001 \
 | 
			
		||||
      --name portainer_agent \
 | 
			
		||||
      --restart=always \
 | 
			
		||||
      -v /run/podman/podman.sock:/var/run/docker.sock \
 | 
			
		||||
      -v /var/lib/containers/storage/volumes:/var/lib/docker/volumes \
 | 
			
		||||
      portainer/agent
 | 
			
		||||
    msg_ok "Installed Portainer Agent $PORTAINER_AGENT_LATEST_VERSION"
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2,10 +2,9 @@
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Kristian Skov
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
@@ -15,33 +14,30 @@ update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt install -y \
 | 
			
		||||
	curl \
 | 
			
		||||
  curl \
 | 
			
		||||
  mc \
 | 
			
		||||
  sudo \
 | 
			
		||||
	gpg \
 | 
			
		||||
	coreutils
 | 
			
		||||
  gpg \
 | 
			
		||||
  coreutils
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup SQL Server 2022"
 | 
			
		||||
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg
 | 
			
		||||
curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list | sudo tee /etc/apt/sources.list.d/mssql-server-2022.list
 | 
			
		||||
#$STD curl https://packages.microsoft.com/keys/microsoft.asc | tee /etc/apt/trusted.gpg.d/microsoft.asc
 | 
			
		||||
#$STD curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list | tee /etc/apt/sources.list.d/mssql-server-2022.list
 | 
			
		||||
$STD apt-get clean *
 | 
			
		||||
curl -s https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc > /dev/null
 | 
			
		||||
curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list | tee /etc/apt/sources.list.d/mssql-server-2022.list > /dev/null
 | 
			
		||||
$STD apt-get update -y
 | 
			
		||||
apt-get install -y mssql-server
 | 
			
		||||
$STD apt-get install -y mssql-server
 | 
			
		||||
msg_ok "Setup Server 2022"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing SQL Server Tools"
 | 
			
		||||
export DEBIAN_FRONTEND=noninteractive
 | 
			
		||||
export ACCEPT_EULA=Y
 | 
			
		||||
curl https://packages.microsoft.com/keys/microsoft.asc | tee /etc/apt/trusted.gpg.d/microsoft.asc
 | 
			
		||||
curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | tee /etc/apt/sources.list.d/mssql-release.list
 | 
			
		||||
curl -s https://packages.microsoft.com/keys/microsoft.asc | tee /etc/apt/trusted.gpg.d/microsoft.asc > /dev/null
 | 
			
		||||
curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/prod.list | tee /etc/apt/sources.list.d/mssql-release.list > /dev/null
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y -qq \
 | 
			
		||||
  mssql-tools18 \
 | 
			
		||||
  unixodbc-dev
 | 
			
		||||
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bash_profile
 | 
			
		||||
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >>~/.bash_profile
 | 
			
		||||
source ~/.bash_profile
 | 
			
		||||
msg_ok "Installed SQL Server Tools"
 | 
			
		||||
 | 
			
		||||
@@ -53,7 +49,7 @@ else
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
msg_info "Start Service"
 | 
			
		||||
systemctl enable -q --now mssql-server 
 | 
			
		||||
systemctl enable -q --now mssql-server
 | 
			
		||||
msg_ok "Service started"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
msg_info "Installing Node.js"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y nodejs
 | 
			
		||||
$STD npm install -g pnpm@9.7.1
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
@@ -14,70 +14,97 @@ network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y curl
 | 
			
		||||
$STD apt-get install -y sudo
 | 
			
		||||
$STD apt-get install -y mc
 | 
			
		||||
$STD apt-get install -y git
 | 
			
		||||
$STD apt-get install -y ca-certificates
 | 
			
		||||
$STD apt-get install -y gnupg
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  curl \
 | 
			
		||||
  sudo \
 | 
			
		||||
  mc \
 | 
			
		||||
  git \
 | 
			
		||||
  ca-certificates \
 | 
			
		||||
  gnupg \
 | 
			
		||||
  build-essential \
 | 
			
		||||
  python3 \
 | 
			
		||||
  g++ \
 | 
			
		||||
  make
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
msg_ok "Set up Node.js Repository"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up PostgreSQL Repository"
 | 
			
		||||
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg
 | 
			
		||||
echo "deb https://apt.postgresql.org/pub/repos/apt bookworm-pgdg main" >/etc/apt/sources.list.d/pgdg.list
 | 
			
		||||
msg_ok "Set up PostgreSQL Repository"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Node.js"
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y nodejs
 | 
			
		||||
$STD npm install --global yarn
 | 
			
		||||
$STD npm install -g node-gyp
 | 
			
		||||
msg_ok "Installed Node.js"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Wiki.js"
 | 
			
		||||
mkdir -p /opt/wikijs
 | 
			
		||||
cd /opt/wikijs
 | 
			
		||||
$STD wget https://github.com/Requarks/wiki/releases/latest/download/wiki-js.tar.gz
 | 
			
		||||
tar xzf wiki-js.tar.gz
 | 
			
		||||
rm wiki-js.tar.gz
 | 
			
		||||
msg_info "Set up PostgreSQL"
 | 
			
		||||
$STD apt-get install -y postgresql-17
 | 
			
		||||
DB_NAME="wiki"
 | 
			
		||||
DB_USER="wikijs_user"
 | 
			
		||||
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
 | 
			
		||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
 | 
			
		||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
 | 
			
		||||
$STD sudo -u postgres psql -c "CREATE EXTENSION IF NOT EXISTS pg_trgm;" $DB_NAME
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
 | 
			
		||||
{
 | 
			
		||||
    echo "WikiJS-Credentials"
 | 
			
		||||
    echo "WikiJS Database User: $DB_USER"
 | 
			
		||||
    echo "WikiJS Database Password: $DB_PASS"
 | 
			
		||||
    echo "WikiJS Database Name: $DB_NAME"
 | 
			
		||||
} >> ~/wikijs.creds
 | 
			
		||||
msg_ok "Set up PostgreSQL"
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/opt/wikijs/config.yml
 | 
			
		||||
bindIP: 0.0.0.0
 | 
			
		||||
port: 3000
 | 
			
		||||
db:
 | 
			
		||||
  type: sqlite
 | 
			
		||||
  storage: /opt/wikijs/db.sqlite
 | 
			
		||||
logLevel: info
 | 
			
		||||
logFormat: default
 | 
			
		||||
dataPath: /opt/wikijs/data
 | 
			
		||||
bodyParserLimit: 5mb
 | 
			
		||||
EOF
 | 
			
		||||
$STD npm rebuild sqlite3
 | 
			
		||||
msg_info "Setup Wiki.js"
 | 
			
		||||
temp_file=$(mktemp)
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/Requarks/wiki/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
wget -q "https://github.com/Requarks/wiki/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file"
 | 
			
		||||
tar -xzf "$temp_file"
 | 
			
		||||
mv wiki-${RELEASE} /opt/wikijs
 | 
			
		||||
mv /opt/wikijs/config.sample.yml /opt/wikijs/config.yml
 | 
			
		||||
sed -i -E 's|^( *user: ).*|\1'"$DB_USER"'|' /opt/wikijs/config.yml
 | 
			
		||||
sed -i -E 's|^( *pass: ).*|\1'"$DB_PASS"'|' /opt/wikijs/config.yml
 | 
			
		||||
cd /opt/wikijs
 | 
			
		||||
export NODE_OPTIONS="--max-old-space-size=2048"
 | 
			
		||||
$STD yarn install --ignore-engines
 | 
			
		||||
$STD yarn build
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
msg_ok "Installed Wiki.js"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
service_path="/etc/systemd/system/wikijs.service"
 | 
			
		||||
 | 
			
		||||
echo "[Unit]
 | 
			
		||||
cat <<EOF >/etc/systemd/system/wikijs.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Wiki.js
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
ExecStart=/usr/bin/node server
 | 
			
		||||
ExecStart=/usr/bin/yarn start
 | 
			
		||||
Restart=always
 | 
			
		||||
User=root
 | 
			
		||||
Environment=NODE_ENV=production
 | 
			
		||||
WorkingDirectory=/opt/wikijs
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target" >$service_path
 | 
			
		||||
$STD systemctl enable --now wikijs
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now wikijs
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -f "$temp_file"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,6 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing WireGuard"
 | 
			
		||||
$STD apt-get install -y wireguard wireguard-tools net-tools iptables
 | 
			
		||||
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
 | 
			
		||||
DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confnew" install -y iptables-persistent &>/dev/null
 | 
			
		||||
$STD netfilter-persistent reload
 | 
			
		||||
msg_ok "Installed WireGuard"
 | 
			
		||||
 
 | 
			
		||||
@@ -33,14 +33,14 @@ msg_ok "Set up Node.js Repository"
 | 
			
		||||
msg_info "Installing Node.js"
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y nodejs
 | 
			
		||||
$STD npm install -g yarn
 | 
			
		||||
$STD npm install -g pnpm
 | 
			
		||||
msg_ok "Installed Node.js"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up PostgreSQL"
 | 
			
		||||
DB_NAME=ziplinedb
 | 
			
		||||
DB_USER=zipline
 | 
			
		||||
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
 | 
			
		||||
SECRET_KEY="$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
 | 
			
		||||
SECRET_KEY="$(openssl rand -base64 42 | tr -dc 'a-zA-Z0-9')"
 | 
			
		||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
 | 
			
		||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
 | 
			
		||||
@@ -60,13 +60,15 @@ wget -q "https://github.com/diced/zipline/archive/refs/tags/v${RELEASE}.zip"
 | 
			
		||||
unzip -q v${RELEASE}.zip
 | 
			
		||||
mv zipline-${RELEASE} /opt/zipline
 | 
			
		||||
cd /opt/zipline
 | 
			
		||||
mv .env.local.example .env
 | 
			
		||||
sudo sed -i "s|CORE_SECRET=.*|CORE_SECRET=\"$SECRET_KEY\"|" /opt/zipline/.env
 | 
			
		||||
sudo sed -i "s|CORE_RETURN_HTTPS=.*|CORE_RETURN_HTTPS=false|" /opt/zipline/.env
 | 
			
		||||
sudo sed -i "s|CORE_DATABASE_URL=.*|CORE_DATABASE_URL=\"postgres://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME\"|" /opt/zipline/.env
 | 
			
		||||
cat <<EOF >/opt/zipline/.env
 | 
			
		||||
DATABASE_URL=postgres://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME
 | 
			
		||||
CORE_SECRET=$SECRET_KEY
 | 
			
		||||
CORE_HOSTNAME=0.0.0.0
 | 
			
		||||
CORE_PORT=3000
 | 
			
		||||
CORE_RETURN_HTTPS=false
 | 
			
		||||
$STD yarn install
 | 
			
		||||
$STD yarn build
 | 
			
		||||
EOF
 | 
			
		||||
$STD pnpm install
 | 
			
		||||
$STD pnpm build
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
msg_ok "Installed Zipline"
 | 
			
		||||
 | 
			
		||||
@@ -78,19 +80,18 @@ After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
WorkingDirectory=/opt/zipline
 | 
			
		||||
ExecStart=/usr/bin/yarn start
 | 
			
		||||
ExecStart=/usr/bin/pnpm start
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now zipline.service
 | 
			
		||||
systemctl enable -q --now zipline
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										34
									
								
								json/boltdiy.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								json/boltdiy.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "bolt.diy",
 | 
			
		||||
  "slug": "boltdiy",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    20
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-02-23",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 5173,
 | 
			
		||||
  "documentation": "https://stackblitz-labs.github.io/bolt.diy/",
 | 
			
		||||
  "website": "https://github.com/stackblitz-labs/bolt.diy",
 | 
			
		||||
  "logo": "https://github.com/stackblitz-labs/bolt.diy/raw/refs/heads/main/icons/logo-text.svg",
 | 
			
		||||
  "description": "The official open source version of Bolt.new (previously known as oTToDev and bolt.new ANY LLM), which allows you to choose the LLM that you use for each prompt! Currently, you can use OpenAI, Anthropic, Ollama, OpenRouter, Gemini, LMStudio, Mistral, xAI, HuggingFace, DeepSeek, or Groq models - and it is easily extended to use any other model supported by the Vercel AI SDK!",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/boltdiy.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 3072,
 | 
			
		||||
        "hdd": 6,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://www.bunkerweb.io/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/bunkerity/bunkerweb/v1.5.7/misc/logo.png",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/bunkerity/bunkerweb/master/misc/logo.png",
 | 
			
		||||
    "description": "BunkerWeb is a security-focused web server that enhances web application protection. It guards against common web vulnerabilities like SQL injection, XSS, and CSRF. It features simple setup and configuration using a YAML file, customizable security rules, and provides detailed logs for traffic monitoring and threat detection.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
            "script": "ct/bunkerweb.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 1024,
 | 
			
		||||
                "ram": 4096,
 | 
			
		||||
                "hdd": 4,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://www.debian.org/",
 | 
			
		||||
    "logo": "https://seeklogo.com/images/D/debian-logo-C136FDAF9E-seeklogo.com.png",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/debian.svg",
 | 
			
		||||
    "description": "Debian Linux is a distribution that emphasizes free software. It supports many hardware platforms",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://www.debian.org/",
 | 
			
		||||
    "logo": "https://seeklogo.com/images/D/debian-logo-C136FDAF9E-seeklogo.com.png",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/debian.svg",
 | 
			
		||||
    "description": "Debian Linux is a distribution that emphasizes free software. It supports many hardware platforms.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
@@ -31,4 +31,4 @@
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": []
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										34
									
								
								json/docmost.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								json/docmost.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Docmost",
 | 
			
		||||
    "slug": "docmost",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        12
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2025-02-18",
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 3000,
 | 
			
		||||
    "documentation": "https://docmost.com/docs/installation",
 | 
			
		||||
    "website": "https://docmost.com/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/docmost/docmost/refs/heads/main/apps/client/public/favicon-32x32.png",
 | 
			
		||||
    "description": "Open-source collaborative wiki and documentation software Create, collaborate, and share knowledge seamlessly with Docmost. Ideal for managing your wiki, knowledge-base, documentation and a lot more.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/docmost.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": 3,
 | 
			
		||||
                "ram": 3072,
 | 
			
		||||
                "hdd": 7,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": []
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								json/dolibarr.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								json/dolibarr.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Dolibarr",
 | 
			
		||||
    "slug": "dolibarr",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        25
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2025-02-20",
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 80,
 | 
			
		||||
    "documentation": "https://wiki.dolibarr.org/index.php?title=Home",
 | 
			
		||||
    "website": "https://www.dolibarr.org/",
 | 
			
		||||
    "logo": "https://wiki.dolibarr.org/images/5/51/Dolibarr_124x124_white.svg",
 | 
			
		||||
    "description": "Dolibarr ERP CRM is a modern software package to manage your company or foundation's activity (contacts, suppliers, invoices, orders, stocks, agenda, accounting, ...). it's an open source Web application (written in PHP) designed for businesses of any sizes, foundations and freelancers.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
      {
 | 
			
		||||
        "type": "default",
 | 
			
		||||
        "script": "ct/dolibarr.sh",
 | 
			
		||||
        "resources": {
 | 
			
		||||
          "cpu": 1,
 | 
			
		||||
          "ram": 2048,
 | 
			
		||||
          "hdd": 6,
 | 
			
		||||
          "os": "debian",
 | 
			
		||||
          "version": "12"
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
      "username": null,
 | 
			
		||||
      "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
      {
 | 
			
		||||
        "text": "Database credentials: `cat ~/dolibarr.creds`",
 | 
			
		||||
        "type": "info"
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
@@ -34,6 +34,10 @@
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Database credentials: `cat ~/freshrss.creds`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Per FreshRSS documentation, a cron job to actualize FreshRSS will be setup at `/etc/cron.d/freshrss-actualize`. This can be adjusted as needed",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
    "interface_port": 8080,
 | 
			
		||||
    "documentation": "https://github.com/glanceapp/glance/blob/main/docs/configuration.md",
 | 
			
		||||
    "website": "https://github.com/glanceapp/glance",
 | 
			
		||||
    "logo": "https://github.com/glanceapp/glance/blob/main/internal/assets/static/app-icon.png?raw=true",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/glanceapp/glance/refs/heads/main/internal/glance/static/app-icon.png",
 | 
			
		||||
    "description": "A self-hosted dashboard that puts all your feeds in one place",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
      {
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
    "interface_port": 9000,
 | 
			
		||||
    "documentation": "https://go2docs.graylog.org/current/home.htm",
 | 
			
		||||
    "website": "https://graylog.org/",
 | 
			
		||||
    "logo": "https://graylog.org/wp-content/uploads/2023/11/gl-logo-horiz-all-white-1200w-300x96.png.webp",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/graylog.svg",
 | 
			
		||||
    "description": "Graylog is a free and open log management platform.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
@@ -40,4 +40,4 @@
 | 
			
		||||
        "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										43
									
								
								json/hev-socks5-server.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								json/hev-socks5-server.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "hev-socks5-server",
 | 
			
		||||
  "slug": "hev-socks5-server",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    4
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-02-23",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 1080,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": "https://github.com/heiher/hev-socks5-server",
 | 
			
		||||
  "logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/3/35/Tux.svg/405px-Tux.svg.png",
 | 
			
		||||
  "description": "HevSocks5Server is a simple, lightweight socks5 server.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/hev-socks5-server.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 512,
 | 
			
		||||
        "hdd": 2,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Default credentials: `cat /root/hev.creds`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Config stored at `/etc/hev-socks5-server/main.yml`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 3000,
 | 
			
		||||
    "interface_port": 7575,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://homarr.dev/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/homarr.svg",
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
    "documentation": "https://www.home-assistant.io/docs/",
 | 
			
		||||
    "website": "https://www.home-assistant.io/",
 | 
			
		||||
    "logo": "https://avatars.githubusercontent.com/u/13844975?s=200&v=4",
 | 
			
		||||
    "description": "A standalone installation of Home Assistant Core refers to a setup where the Home Assistant Core software is installed directly on a device or operating system, without the use of Docker containers. This provides a simpler, but less flexible and scalable solution, as the software is tightly coupled with the underlying system.\r\n\r\n\ud83d\udec8 If the LXC is created Privileged, the script will automatically set up USB passthrough.",
 | 
			
		||||
    "description": "A standalone installation of Home Assistant Core refers to a setup where the Home Assistant Core software is installed directly on a device or operating system, without the use of Docker containers. This provides a simpler, but less flexible and scalable solution, as the software is tightly coupled with the underlying system.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
 
 | 
			
		||||
@@ -34,6 +34,10 @@
 | 
			
		||||
      {
 | 
			
		||||
        "text": "During installation you will be prompted to input your TMDb key, Plex URL and Plex token. Make sure you have them ready.",
 | 
			
		||||
        "type": "info"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "text": "Configuration file is at `/opt/kometa/config/config.yml`",
 | 
			
		||||
        "type": "info"
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
  "interface_port": 80,
 | 
			
		||||
  "documentation": "https://stonith404.github.io/pocket-id/introduction",
 | 
			
		||||
  "website": "https://github.com/stonith404/pocket-id",
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/stonith404/pocket-id/refs/heads/main/docs/static/img/pocket-id.png",
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/pocket-id/pocket-id/refs/heads/main/backend/resources/images/logoDark.svg",
 | 
			
		||||
  "description": "Pocket ID is a simple OIDC provider that allows users to authenticate with their passkeys to your services.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -31,10 +31,6 @@
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Doesn't work with ZFS",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "If the LXC is created Privileged, the script will automatically set up USB passthrough.",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
@@ -42,6 +38,10 @@
 | 
			
		||||
        {
 | 
			
		||||
            "text": "config path: `/var/lib/containers/storage/volumes/hass_config/_data`",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Options to Install Portainer or Portainer Agent",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
@@ -32,7 +32,7 @@
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Doesn't work with ZFS",
 | 
			
		||||
            "text": "Options to Install Portainer or Portainer Agent",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "RustDesk Server",
 | 
			
		||||
    "slug": "rustdesk-server",
 | 
			
		||||
    "slug": "rustdeskserver",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        21
 | 
			
		||||
    ],
 | 
			
		||||
@@ -32,8 +32,8 @@
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Check documentation on how to configure RustDesk Server. `https://rustdesk.com/docs/en/`",
 | 
			
		||||
            "text": "Check our configuration guide for help: `https://github.com/community-scripts/ProxmoxVE/discussions/2388`",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
    "interface_port": 8080,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://github.com/Stirling-Tools/Stirling-PDF",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/Stirling-Tools/Stirling-PDF/main/docs/stirling-pdf.png",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/Stirling-Tools/Stirling-PDF/refs/heads/main/docs/stirling.svg",
 | 
			
		||||
    "description": "Stirling-PDF is a powerful locally hosted web based PDF manipulation tool that allows you to perform various operations on PDF files, such as splitting merging, converting, reorganizing, adding images, rotating, compressing, and more.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
 
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/wikijs.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": 1,
 | 
			
		||||
                "ram": 512,
 | 
			
		||||
                "hdd": 3,
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 2048,
 | 
			
		||||
                "hdd": 7,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
@@ -31,4 +31,4 @@
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": []
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ post_to_api() {
 | 
			
		||||
EOF
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
  RESPONSE=$(curl -s -o response.txt -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \
 | 
			
		||||
  RESPONSE=$(curl -s -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \
 | 
			
		||||
    -H "Content-Type: application/json" \
 | 
			
		||||
    -d "$JSON_PAYLOAD") || true
 | 
			
		||||
}
 | 
			
		||||
@@ -87,7 +87,7 @@ post_to_api_vm() {
 | 
			
		||||
EOF
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
  RESPONSE=$(curl -s -o response.txt -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \
 | 
			
		||||
  RESPONSE=$(curl -s -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \
 | 
			
		||||
    -H "Content-Type: application/json" \
 | 
			
		||||
    -d "$JSON_PAYLOAD") || true
 | 
			
		||||
}
 | 
			
		||||
@@ -115,7 +115,7 @@ post_update_to_api() {
 | 
			
		||||
EOF
 | 
			
		||||
)
 | 
			
		||||
   
 | 
			
		||||
  RESPONSE=$(curl -s -o response.txt -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \
 | 
			
		||||
  RESPONSE=$(curl -s -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \
 | 
			
		||||
    -H "Content-Type: application/json" \
 | 
			
		||||
    -d "$JSON_PAYLOAD") || true
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -150,7 +150,7 @@ amd() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Check if this is a Proxmox Backup Server by verifying the presence of the datastore config.
 | 
			
		||||
if [ ! -f /etc/proxmox-backup/datastore.cfg ]; then
 | 
			
		||||
if [ ! -f /etc/proxmox-backup/user.cfg ]; then
 | 
			
		||||
  header_info
 | 
			
		||||
  msg_error "Proxmox Backup Server not detected!"
 | 
			
		||||
  exit
 | 
			
		||||
 
 | 
			
		||||
@@ -419,7 +419,7 @@ else
 | 
			
		||||
fi
 | 
			
		||||
msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location."
 | 
			
		||||
msg_ok "Virtual Machine ID is ${CL}${BL}$VMID${CL}."
 | 
			
		||||
msg_info "Retrieving the URL for the Ubuntu 24.0 Disk Image"
 | 
			
		||||
msg_info "Retrieving the URL for the Ubuntu 24.10 Disk Image"
 | 
			
		||||
URL=https://cloud-images.ubuntu.com/oracular/current/oracular-server-cloudimg-amd64.img
 | 
			
		||||
sleep 2
 | 
			
		||||
msg_ok "${CL}${BL}${URL}${CL}"
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user