mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 02:12:49 +00:00 
			
		
		
		
	Compare commits
	
		
			112 Commits
		
	
	
		
			2025-01-11
			...
			2025-01-16
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					779721cea5 | ||
| 
						 | 
					22b7155203 | ||
| 
						 | 
					1bb911e531 | ||
| 
						 | 
					023c3fc52d | ||
| 
						 | 
					258b1bd9fd | ||
| 
						 | 
					6d4eb9c3ee | ||
| 
						 | 
					15faa76b69 | ||
| 
						 | 
					393f6d74c9 | ||
| 
						 | 
					f51762420a | ||
| 
						 | 
					f8c10ca80b | ||
| 
						 | 
					3fca76dbbc | ||
| 
						 | 
					b57689ec50 | ||
| 
						 | 
					1f8f593116 | ||
| 
						 | 
					330315c615 | ||
| 
						 | 
					504d47d246 | ||
| 
						 | 
					ab206530e0 | ||
| 
						 | 
					f5b78d5dcc | ||
| 
						 | 
					3f9863ebf9 | ||
| 
						 | 
					786e8963b9 | ||
| 
						 | 
					6cc4244f70 | ||
| 
						 | 
					f5a260a399 | ||
| 
						 | 
					f1f8f78420 | ||
| 
						 | 
					6c42b5c21a | ||
| 
						 | 
					24d24421d1 | ||
| 
						 | 
					9e4c627323 | ||
| 
						 | 
					2551bf6f9f | ||
| 
						 | 
					8533380813 | ||
| 
						 | 
					f65abd9ac8 | ||
| 
						 | 
					85387563f0 | ||
| 
						 | 
					5977f8f936 | ||
| 
						 | 
					a15a59e615 | ||
| 
						 | 
					14dfaa9bde | ||
| 
						 | 
					75778976d0 | ||
| 
						 | 
					c45085a51d | ||
| 
						 | 
					959a7b4b14 | ||
| 
						 | 
					5da06e75e7 | ||
| 
						 | 
					2aed45fa61 | ||
| 
						 | 
					7614034784 | ||
| 
						 | 
					0f06725fdc | ||
| 
						 | 
					5c16955a8e | ||
| 
						 | 
					2c8aab24d0 | ||
| 
						 | 
					9cc07cc6e1 | ||
| 
						 | 
					047667c428 | ||
| 
						 | 
					147ba0e78d | ||
| 
						 | 
					d3b0becfe6 | ||
| 
						 | 
					d20d0428dc | ||
| 
						 | 
					0368ce36d1 | ||
| 
						 | 
					757b5bd267 | ||
| 
						 | 
					4d0632fea0 | ||
| 
						 | 
					69288b197f | ||
| 
						 | 
					12a61a1d71 | ||
| 
						 | 
					d186557488 | ||
| 
						 | 
					db6390f791 | ||
| 
						 | 
					41c4b11575 | ||
| 
						 | 
					bf89a037bd | ||
| 
						 | 
					e503ce3806 | ||
| 
						 | 
					c934085b16 | ||
| 
						 | 
					c57f0be737 | ||
| 
						 | 
					e6530e14dd | ||
| 
						 | 
					9174536e95 | ||
| 
						 | 
					aa3a3997f0 | ||
| 
						 | 
					37da2e5e1c | ||
| 
						 | 
					18538897ba | ||
| 
						 | 
					dbfb72807a | ||
| 
						 | 
					e756c49e50 | ||
| 
						 | 
					4ae131e102 | ||
| 
						 | 
					f498f349f3 | ||
| 
						 | 
					8e525611bd | ||
| 
						 | 
					910f3bb6f4 | ||
| 
						 | 
					c8319f044c | ||
| 
						 | 
					ac61a925cc | ||
| 
						 | 
					4ce474382a | ||
| 
						 | 
					424dc26720 | ||
| 
						 | 
					b9829165cf | ||
| 
						 | 
					3b1c43381e | ||
| 
						 | 
					cb496d74f4 | ||
| 
						 | 
					33cd0cb2f1 | ||
| 
						 | 
					325084f8ca | ||
| 
						 | 
					349cfb28b5 | ||
| 
						 | 
					2fff2079ef | ||
| 
						 | 
					13a6e31a99 | ||
| 
						 | 
					481138bff5 | ||
| 
						 | 
					c032db98a3 | ||
| 
						 | 
					434c938cde | ||
| 
						 | 
					647fb1cb5e | ||
| 
						 | 
					45916edef5 | ||
| 
						 | 
					78ed820bb0 | ||
| 
						 | 
					7ab5485fc3 | ||
| 
						 | 
					910e767bb4 | ||
| 
						 | 
					8c54d25bf5 | ||
| 
						 | 
					3c2db95345 | ||
| 
						 | 
					692f3caab6 | ||
| 
						 | 
					3830527ef2 | ||
| 
						 | 
					ed1a618f6d | ||
| 
						 | 
					76fa4c68d1 | ||
| 
						 | 
					53b96a98c0 | ||
| 
						 | 
					0f1eea7f09 | ||
| 
						 | 
					4c13164ad3 | ||
| 
						 | 
					97ca738332 | ||
| 
						 | 
					86706e6233 | ||
| 
						 | 
					13671c613b | ||
| 
						 | 
					364109877f | ||
| 
						 | 
					64297e7191 | ||
| 
						 | 
					e60dc6784d | ||
| 
						 | 
					2f620240a8 | ||
| 
						 | 
					07c9dc4d0a | ||
| 
						 | 
					8caf5e59b3 | ||
| 
						 | 
					f8ab39e4d6 | ||
| 
						 | 
					e47d7c4452 | ||
| 
						 | 
					ac64a9de31 | ||
| 
						 | 
					737625024e | ||
| 
						 | 
					6958021528 | 
							
								
								
									
										4
									
								
								.github/autolabeler-config.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/autolabeler-config.json
									
									
									
									
										vendored
									
									
								
							@@ -50,7 +50,7 @@
 | 
			
		||||
  "maintenance": [
 | 
			
		||||
    {
 | 
			
		||||
      "fileStatus": null,
 | 
			
		||||
      "includeGlobs": ["*.md", ".github/**"],
 | 
			
		||||
      "includeGlobs": ["*.md", ".github/**", "misc/*.func", "ct/create_lxc.sh"],
 | 
			
		||||
      "excludeGlobs": []
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
@@ -61,4 +61,4 @@
 | 
			
		||||
      "excludeGlobs": []
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,66 +0,0 @@
 | 
			
		||||
name: Auto Update .app-headers and Create PR
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - main
 | 
			
		||||
    paths:
 | 
			
		||||
      - 'ct/**.sh'
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  update-app-headers:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      # Step 1: Checkout the repository
 | 
			
		||||
      - name: Checkout repository
 | 
			
		||||
        uses: actions/checkout@v2
 | 
			
		||||
 | 
			
		||||
      # Step 2: Set up Git user for committing changes
 | 
			
		||||
      - name: Set up Git
 | 
			
		||||
        run: |
 | 
			
		||||
          git config --global user.name "GitHub Actions"
 | 
			
		||||
          git config --global user.email "actions@github.com"
 | 
			
		||||
 | 
			
		||||
      # Step 3: Ensure .app-headers file exists
 | 
			
		||||
      - name: Ensure .app-headers file exists
 | 
			
		||||
        run: |
 | 
			
		||||
          if [ ! -f ct/.app-headers ]; then
 | 
			
		||||
            echo "Creating .app-headers file."
 | 
			
		||||
            touch ct/.app-headers
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
      # Step 4: Process the ct/*.sh files and update .app-headers
 | 
			
		||||
      - name: Update .app-headers with figlet output
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "Updating .app-headers with figlet output."
 | 
			
		||||
          for script in ct/*.sh; do
 | 
			
		||||
            if grep -q 'APP=' "$script"; then
 | 
			
		||||
              APP_NAME=$(grep -oP 'APP=\K\w+' "$script")
 | 
			
		||||
              echo "Processing $script for APP: \"$APP_NAME\""
 | 
			
		||||
              figlet "$APP_NAME" >> ct/.app-headers
 | 
			
		||||
            fi
 | 
			
		||||
          done
 | 
			
		||||
 | 
			
		||||
      # Step 5: Check out and merge main into the update-app-headers branch without committing
 | 
			
		||||
      - name: Merge main into update-app-headers
 | 
			
		||||
        run: |
 | 
			
		||||
          git fetch origin
 | 
			
		||||
          git checkout update-app-headers
 | 
			
		||||
          git merge origin/main --no-ff --no-commit -m "Merge main into update-app-headers"
 | 
			
		||||
          echo "Merge complete. Please review and commit the changes manually."
 | 
			
		||||
 | 
			
		||||
      # Step 6: Check if a PR exists and create one if it doesn't
 | 
			
		||||
      - name: Create Pull Request if not exists
 | 
			
		||||
        run: |
 | 
			
		||||
          PR_EXISTS=$(gh pr list --head "update-app-headers" --json number --jq '.[].number')
 | 
			
		||||
 | 
			
		||||
          if [ -z "$PR_EXISTS" ]; then
 | 
			
		||||
            echo "Creating a new PR."
 | 
			
		||||
            PR_URL=$(gh pr create --title "[core]: update .app-headers to latest version" \
 | 
			
		||||
                                   --body "This PR automatically updates the .app-headers file." \
 | 
			
		||||
                                   --head update-app-headers \
 | 
			
		||||
                                   --base main)
 | 
			
		||||
            echo "PR created: $PR_URL"
 | 
			
		||||
          else
 | 
			
		||||
            echo "PR already exists."
 | 
			
		||||
          fi
 | 
			
		||||
@@ -1,34 +0,0 @@
 | 
			
		||||
name: Update .app-headers with figlet output
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  workflow_run:
 | 
			
		||||
    workflows: ["Merge main into update-app-headers"]
 | 
			
		||||
    types:
 | 
			
		||||
      - completed
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  update-app-headers:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout repository
 | 
			
		||||
        uses: actions/checkout@v2
 | 
			
		||||
 | 
			
		||||
      - name: Ensure .app-headers file exists silently
 | 
			
		||||
        run: |
 | 
			
		||||
          if [ ! -f ct/.app-headers ]; then
 | 
			
		||||
            touch ct/.app-headers
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
      - name: Update .app-headers with figlet output silently
 | 
			
		||||
        run: |
 | 
			
		||||
          for script in ct/*.sh; do
 | 
			
		||||
            if grep -q 'APP=' "$script"; then
 | 
			
		||||
              APP_NAME=$(grep -oP 'APP=\K\w+' "$script")
 | 
			
		||||
              if [ ! -z "$APP_NAME" ]; then
 | 
			
		||||
                echo "Adding $APP_NAME to .app-headers"
 | 
			
		||||
                figlet "$APP_NAME" >> ct/.app-headers 2>/dev/null || echo "figlet failed for $APP_NAME"
 | 
			
		||||
              fi
 | 
			
		||||
            fi
 | 
			
		||||
          done
 | 
			
		||||
        env:
 | 
			
		||||
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
							
								
								
									
										82
									
								
								.github/workflows/auto-update-app-headers.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								.github/workflows/auto-update-app-headers.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,82 @@
 | 
			
		||||
name: Auto Update .app-headers
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - main
 | 
			
		||||
    paths:
 | 
			
		||||
      - 'ct/**.sh'
 | 
			
		||||
  workflow_dispatch:  # Ermöglicht das manuelle Ausführen der Action
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  update-app-headers:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    permissions:
 | 
			
		||||
      contents: write
 | 
			
		||||
      pull-requests: write
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      # Step 1: Checkout repository
 | 
			
		||||
      - name: Checkout repository
 | 
			
		||||
        uses: actions/checkout@v2
 | 
			
		||||
 | 
			
		||||
      # Step 2: Set up Git user for committing changes
 | 
			
		||||
      - name: Set up Git
 | 
			
		||||
        run: |
 | 
			
		||||
          git config --global user.name "GitHub Actions"
 | 
			
		||||
          git config --global user.email "actions@github.com"
 | 
			
		||||
 | 
			
		||||
      # Step 3: Install figlet
 | 
			
		||||
      - name: Install figlet
 | 
			
		||||
        run: sudo apt-get install -y figlet
 | 
			
		||||
 | 
			
		||||
      # Step 4: Run the generate-app-headers.sh script to update .app-headers
 | 
			
		||||
      - name: Run generate-app-headers.sh to update .app-headers
 | 
			
		||||
        run: |
 | 
			
		||||
          chmod +x .github/workflows/scripts/generate-app-headers.sh
 | 
			
		||||
          .github/workflows/scripts/generate-app-headers.sh
 | 
			
		||||
        env:
 | 
			
		||||
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
 | 
			
		||||
      # Step 5: Check if there are any changes
 | 
			
		||||
      - name: Check if there are any changes
 | 
			
		||||
        id: verify-diff
 | 
			
		||||
        run: |
 | 
			
		||||
          git diff --quiet . || echo "changed=true" >> $GITHUB_OUTPUT
 | 
			
		||||
 | 
			
		||||
      # Step 6: Commit changes (if any) and create a PR
 | 
			
		||||
      - name: Commit and create PR if changes exist
 | 
			
		||||
        if: steps.verify-diff.outputs.changed == 'true'
 | 
			
		||||
        run: |
 | 
			
		||||
          git config --global user.name "github-actions[bot]"
 | 
			
		||||
          git config --global user.email "github-actions[bot]@users.noreply.github.com"
 | 
			
		||||
          git add ./misc/.app-headers
 | 
			
		||||
          git commit -m "Update .app-headers file"
 | 
			
		||||
          # Create a temporary branch for the PR
 | 
			
		||||
          git checkout -b pr-update-app-headers
 | 
			
		||||
          git push origin pr-update-app-headers --force
 | 
			
		||||
          
 | 
			
		||||
          # Create PR against main
 | 
			
		||||
          gh pr create --title "[core] update .app-headers file" \
 | 
			
		||||
                       --body "This PR is auto-generated by a Github Action to update the .app-headers file." \
 | 
			
		||||
                       --head pr-update-app-headers \
 | 
			
		||||
                       --base main \
 | 
			
		||||
                       --label "automated pr"
 | 
			
		||||
        env:
 | 
			
		||||
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
 | 
			
		||||
      - name: Re-approve pull request after update
 | 
			
		||||
        if: steps.verify-diff.outputs.changed == 'true'
 | 
			
		||||
        env:
 | 
			
		||||
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
        run: |
 | 
			
		||||
          PR_NUMBER=$(gh pr list --head "pr-update-app-headers" --json number --jq '.[].number')
 | 
			
		||||
          # Check if the PR was created by the bot (skip review if so)
 | 
			
		||||
          PR_AUTHOR=$(gh pr view "$PR_NUMBER" --json author --jq '.author.login')
 | 
			
		||||
          if [ "$PR_AUTHOR" != "github-actions[bot]" ]; then
 | 
			
		||||
            gh pr review "$PR_NUMBER" --approve
 | 
			
		||||
          else
 | 
			
		||||
            echo "PR was created by the bot, skipping review."
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										60
									
								
								.github/workflows/backup/check_and_update_json_date.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								.github/workflows/backup/check_and_update_json_date.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
			
		||||
name: Update date_created in JSON files
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  # Dieser Trigger wird für das Öffnen von PRs sowie für das Aktualisieren von offenen PRs verwendet
 | 
			
		||||
  pull_request:
 | 
			
		||||
    types: [opened, synchronize]
 | 
			
		||||
  schedule:
 | 
			
		||||
    # Dieser Trigger wird 4x am Tag ausgelöst, um sicherzustellen, dass das Datum aktualisiert wird
 | 
			
		||||
    - cron: "0 0,6,12,18 * * *"  # Führt alle 6 Stunden aus
 | 
			
		||||
  workflow_dispatch: # Manuelle Ausführung des Workflows möglich
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  update-date:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout repository
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
 | 
			
		||||
      - name: Install yq
 | 
			
		||||
        run: |
 | 
			
		||||
          sudo apt-get update
 | 
			
		||||
          sudo apt-get install -y yq
 | 
			
		||||
 | 
			
		||||
      - name: Set the current date
 | 
			
		||||
        id: set_date
 | 
			
		||||
        run: echo "TODAY=$(date -u +%Y-%m-%d)" >> $GITHUB_ENV
 | 
			
		||||
 | 
			
		||||
      - name: Check for changes in PR
 | 
			
		||||
        run: |
 | 
			
		||||
          # Hole den PR-Branch
 | 
			
		||||
          PR_BRANCH="refs/pull/${{ github.event.pull_request.number }}/merge"
 | 
			
		||||
          git fetch origin $PR_BRANCH
 | 
			
		||||
 | 
			
		||||
          # Liste alle JSON-Dateien im PR auf, die geändert wurden
 | 
			
		||||
          CHANGED_JSON_FILES=$(git diff --name-only origin/main...$PR_BRANCH | grep '.json')
 | 
			
		||||
 | 
			
		||||
          if [ -z "$CHANGED_JSON_FILES" ]; then
 | 
			
		||||
            echo "No JSON files changed in this PR."
 | 
			
		||||
            exit 0
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
          # Gehe alle geänderten JSON-Dateien durch und aktualisiere das Datum
 | 
			
		||||
          for file in $CHANGED_JSON_FILES; do
 | 
			
		||||
            echo "Updating date_created in $file"
 | 
			
		||||
            # Setze das aktuelle Datum
 | 
			
		||||
            yq eval ".date_created = \"${{ env.TODAY }}\"" -i "$file"
 | 
			
		||||
            git add "$file"
 | 
			
		||||
          done
 | 
			
		||||
 | 
			
		||||
      - name: Commit and push changes
 | 
			
		||||
        run: |
 | 
			
		||||
          # Prüfe, ob es Änderungen gibt und committe sie
 | 
			
		||||
          git config user.name "json-updater-bot"
 | 
			
		||||
          git config user.email "github-actions[bot]@users.noreply.github.com"
 | 
			
		||||
 | 
			
		||||
          git commit -m "Update date_created to ${{ env.TODAY }}" || echo "No changes to commit"
 | 
			
		||||
 | 
			
		||||
          # Push zurück in den PR-Branch
 | 
			
		||||
          git push origin $PR_BRANCH
 | 
			
		||||
							
								
								
									
										60
									
								
								.github/workflows/backup/shellcheck.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								.github/workflows/backup/shellcheck.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
			
		||||
name: Shellcheck
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - main
 | 
			
		||||
  pull_request:
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
  schedule:
 | 
			
		||||
    - cron: "5 1 * * *"
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  shellcheck:
 | 
			
		||||
    name: Shellcheck
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
    - uses: actions/checkout@v4
 | 
			
		||||
 | 
			
		||||
    - name: Get changed files
 | 
			
		||||
      id: changed-files
 | 
			
		||||
      uses: tj-actions/changed-files@v45
 | 
			
		||||
      with:
 | 
			
		||||
        files: |
 | 
			
		||||
          **.sh
 | 
			
		||||
 | 
			
		||||
    - name: Download ShellCheck
 | 
			
		||||
      shell: bash
 | 
			
		||||
      env:
 | 
			
		||||
        INPUT_VERSION: "v0.10.0"
 | 
			
		||||
      run: |
 | 
			
		||||
        set -euo pipefail
 | 
			
		||||
        if [[ "${{ runner.os }}" == "macOS" ]]; then
 | 
			
		||||
          osvariant="darwin"
 | 
			
		||||
        else
 | 
			
		||||
          osvariant="linux"
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        baseurl="https://github.com/koalaman/shellcheck/releases/download"
 | 
			
		||||
        curl -Lso "${{ github.workspace }}/sc.tar.xz" \
 | 
			
		||||
          "${baseurl}/${INPUT_VERSION}/shellcheck-${INPUT_VERSION}.${osvariant}.x86_64.tar.xz"
 | 
			
		||||
 | 
			
		||||
        tar -xf "${{ github.workspace }}/sc.tar.xz" -C "${{ github.workspace }}"
 | 
			
		||||
        mv "${{ github.workspace }}/shellcheck-${INPUT_VERSION}/shellcheck" \
 | 
			
		||||
          "${{ github.workspace }}/shellcheck"
 | 
			
		||||
 | 
			
		||||
    - name: Verify ShellCheck binary
 | 
			
		||||
      run: |
 | 
			
		||||
        ls -l "${{ github.workspace }}/shellcheck"
 | 
			
		||||
 | 
			
		||||
    - name: Display ShellCheck version
 | 
			
		||||
      run: |
 | 
			
		||||
        "${{ github.workspace }}/shellcheck" --version
 | 
			
		||||
 | 
			
		||||
    - name: Run ShellCheck
 | 
			
		||||
      if: steps.changed-files.outputs.any_changed == 'true'
 | 
			
		||||
      env:
 | 
			
		||||
        ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
 | 
			
		||||
      run: |
 | 
			
		||||
        echo "${ALL_CHANGED_FILES}" | xargs "${{ github.workspace }}/shellcheck"
 | 
			
		||||
							
								
								
									
										45
									
								
								.github/workflows/check_and_update_json_date.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										45
									
								
								.github/workflows/check_and_update_json_date.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,45 +0,0 @@
 | 
			
		||||
name: Check and Update JSON Date
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  pull_request:
 | 
			
		||||
    types: [synchronize, opened, reopened, edited]
 | 
			
		||||
    paths:
 | 
			
		||||
    - "json/*.json"
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  update-date:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout code
 | 
			
		||||
        uses: actions/checkout@v3
 | 
			
		||||
 | 
			
		||||
      - name: Set up Python
 | 
			
		||||
        uses: actions/setup-python@v4
 | 
			
		||||
        with:
 | 
			
		||||
          python-version: 3.12
 | 
			
		||||
 | 
			
		||||
      - name: Install dependencies
 | 
			
		||||
        run: pip install jq
 | 
			
		||||
 | 
			
		||||
      - name: Find and Update JSON files in /json folder
 | 
			
		||||
        run: |
 | 
			
		||||
          TODAY=$(date +%Y-%m-%d)
 | 
			
		||||
          for file in $(git diff --diff-filter=A --name-only HEAD | grep '^json/.*\.json$'); do
 | 
			
		||||
            if jq -e '.date_created' $file > /dev/null 2>&1; then
 | 
			
		||||
              echo "Updating date_created in $file"
 | 
			
		||||
              jq --arg date "$TODAY" '.date_created = $date' $file > temp.json && mv temp.json $file
 | 
			
		||||
              git add $file
 | 
			
		||||
            fi
 | 
			
		||||
          done
 | 
			
		||||
 | 
			
		||||
      - name: Commit changes
 | 
			
		||||
        run: |
 | 
			
		||||
          git config user.name "GitHub Action"
 | 
			
		||||
          git config user.email "action@github.com"
 | 
			
		||||
          git commit -m "Update date_created in new JSON files" || echo "No changes to commit"
 | 
			
		||||
 | 
			
		||||
      - name: Push changes
 | 
			
		||||
        uses: ad-m/github-push-action@v0.6.0
 | 
			
		||||
        with:
 | 
			
		||||
          github_token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
							
								
								
									
										29
									
								
								.github/workflows/merge-main.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										29
									
								
								.github/workflows/merge-main.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,29 +0,0 @@
 | 
			
		||||
name: Merge main into update-app-headers
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - main
 | 
			
		||||
    paths:
 | 
			
		||||
      - 'ct/**.sh'
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  merge-main:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout repository
 | 
			
		||||
        uses: actions/checkout@v2
 | 
			
		||||
 | 
			
		||||
      - name: Set up Git
 | 
			
		||||
        run: |
 | 
			
		||||
          git config --global user.name "GitHub Actions"
 | 
			
		||||
          git config --global user.email "actions@github.com"
 | 
			
		||||
 | 
			
		||||
      - name: Merge main into update-app-headers silently
 | 
			
		||||
        run: |
 | 
			
		||||
          git fetch origin
 | 
			
		||||
          git checkout update-app-headers
 | 
			
		||||
          git merge origin/main --allow-unrelated-histories --no-commit -m "Merge main into update-app-headers"
 | 
			
		||||
          git push origin update-app-headers > /dev/null 2>&1 || true
 | 
			
		||||
        env:
 | 
			
		||||
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
							
								
								
									
										23
									
								
								.github/workflows/scripts/update_json_date.sh
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								.github/workflows/scripts/update_json_date.sh
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Verzeichnis, das die JSON-Dateien enthält
 | 
			
		||||
json_dir="./json/*.json"
 | 
			
		||||
 | 
			
		||||
current_date=$(date +"%Y-%m-%d")
 | 
			
		||||
 | 
			
		||||
for json_file in $json_dir; do
 | 
			
		||||
  if [[ -f "$json_file" ]]; then
 | 
			
		||||
    current_json_date=$(jq -r '.date_created' "$json_file")
 | 
			
		||||
 | 
			
		||||
    if [[ "$current_json_date" != "$current_date" ]]; then
 | 
			
		||||
      echo "Updating $json_file with date $current_date"
 | 
			
		||||
      jq --arg date "$current_date" '.date_created = $date' "$json_file" > temp.json && mv temp.json "$json_file"
 | 
			
		||||
      
 | 
			
		||||
      git add "$json_file"
 | 
			
		||||
      git commit -m "Update date_created to $current_date in $json_file"
 | 
			
		||||
    else
 | 
			
		||||
      echo "Date in $json_file is already up to date."
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
done
 | 
			
		||||
git push origin HEAD
 | 
			
		||||
							
								
								
									
										32
									
								
								.github/workflows/shellcheck.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										32
									
								
								.github/workflows/shellcheck.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,32 +0,0 @@
 | 
			
		||||
name: Shellcheck
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - main
 | 
			
		||||
  pull_request:
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
  schedule:
 | 
			
		||||
    - cron: "5 1 * * *"
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  shellcheck:
 | 
			
		||||
    name: Shellcheck
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
    - uses: actions/checkout@v4
 | 
			
		||||
 | 
			
		||||
    - name: Get changed files
 | 
			
		||||
      id: changes
 | 
			
		||||
      run: |
 | 
			
		||||
        if ${{ github.event_name == 'pull_request' }}; then
 | 
			
		||||
          echo "files=$(git diff --name-only -r HEAD^1 HEAD | xargs)" >> $GITHUB_OUTPUT
 | 
			
		||||
        else
 | 
			
		||||
          echo "files=$(git diff --name-only ${{ github.event.before }} ${{ github.event.after }} | xargs)" >> $GITHUB_OUTPUT
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
    - name: Run ShellCheck
 | 
			
		||||
      if: steps.changes.outputs.files != ''
 | 
			
		||||
      run: |
 | 
			
		||||
        echo "${{ steps.changes.outputs.files }}" | xargs shellcheck
 | 
			
		||||
							
								
								
									
										48
									
								
								.github/workflows/update_json_date.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								.github/workflows/update_json_date.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
name: Update JSON Date
 | 
			
		||||
on:
 | 
			
		||||
  pull_request:
 | 
			
		||||
    types: [opened, synchronize, reopened]
 | 
			
		||||
        
 | 
			
		||||
jobs:
 | 
			
		||||
  list-files:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
    - name: Checkout PR Branch
 | 
			
		||||
      uses: actions/checkout@v4
 | 
			
		||||
      with:
 | 
			
		||||
        ref: ${{ github.event.pull_request.head.ref }}
 | 
			
		||||
 | 
			
		||||
    - name: Fetch PR changes
 | 
			
		||||
      run: |
 | 
			
		||||
          git remote add fork https://github.com/${{ github.event.pull_request.head.repo.full_name }}.git
 | 
			
		||||
          git fetch fork ${{ github.event.pull_request.head.ref }}:pullreq
 | 
			
		||||
          git checkout pullreq
 | 
			
		||||
 | 
			
		||||
    - name: Update JSON
 | 
			
		||||
      id: changed-files
 | 
			
		||||
      run: |
 | 
			
		||||
          FILES=$(gh api repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/files --jq '.[].filename' | tr '\n' ' ')
 | 
			
		||||
          echo "changed_files=${FILES}"
 | 
			
		||||
          for FILE in $FILES; do
 | 
			
		||||
            if [[ "$FILE" =~ /(.*)\.json ]]; then
 | 
			
		||||
              NAME="${BASH_REMATCH[1]}"
 | 
			
		||||
            else
 | 
			
		||||
              echo "no new JSON in ${FILES}"
 | 
			
		||||
              continue
 | 
			
		||||
            fi
 | 
			
		||||
          
 | 
			
		||||
            JSON_FILE="json/${NAME}.json"
 | 
			
		||||
            if [[ -f "$JSON_FILE" ]]; then
 | 
			
		||||
              echo "Updating date_created in $JSON_FILE"
 | 
			
		||||
              jq --arg date "$(date +%Y-%m-%d)" '.date_created = $date' "$JSON_FILE" > tmp.json && mv tmp.json "$JSON_FILE"
 | 
			
		||||
            else
 | 
			
		||||
              echo "JSON file $FILES not found"
 | 
			
		||||
            fi
 | 
			
		||||
          done
 | 
			
		||||
             
 | 
			
		||||
          git config --global user.name "github-actions[bot]"
 | 
			
		||||
          git config --global user.email "github-actions[bot]@users.noreply.github.com"
 | 
			
		||||
          git diff --exit-code || git commit -am "Updating Dates in affected JSON files."
 | 
			
		||||
          git push 
 | 
			
		||||
      env:
 | 
			
		||||
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
							
								
								
									
										87
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										87
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -16,6 +16,93 @@ All LXC instances created using this repository come pre-installed with Midnight
 | 
			
		||||
> [!IMPORTANT]
 | 
			
		||||
Do not break established syntax in this file, as it is automatically updated by a Github Workflow
 | 
			
		||||
 | 
			
		||||
## 2025-01-16
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### 💥 Breaking Changes
 | 
			
		||||
 | 
			
		||||
- Update jellyseerr-install.sh to use Node 22 as required by latest Jellyseerr version [@pedrovieira](https://github.com/pedrovieira) ([#1535](https://github.com/community-scripts/ProxmoxVE/pull/1535))
 | 
			
		||||
 | 
			
		||||
### ✨ New Scripts
 | 
			
		||||
 | 
			
		||||
- New script: Dotnet ASP.NET Web Server [@kris701](https://github.com/kris701) ([#1501](https://github.com/community-scripts/ProxmoxVE/pull/1501))
 | 
			
		||||
- New script: phpIPAM [@bvdberg01](https://github.com/bvdberg01) ([#1503](https://github.com/community-scripts/ProxmoxVE/pull/1503))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
- Add Mobile check for empty icon-url on website [@MickLesk](https://github.com/MickLesk) ([#1532](https://github.com/community-scripts/ProxmoxVE/pull/1532))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
- [Workflow]Update autolabeler-config.json [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1525](https://github.com/community-scripts/ProxmoxVE/pull/1525))
 | 
			
		||||
- [core]Update update_json_date.yml [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1526](https://github.com/community-scripts/ProxmoxVE/pull/1526))
 | 
			
		||||
- [core] Recreate Update JSON Workflow [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1523](https://github.com/community-scripts/ProxmoxVE/pull/1523))
 | 
			
		||||
 | 
			
		||||
## 2025-01-15
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Fix: Add FFMPEG for OpenWebUI [@MickLesk](https://github.com/MickLesk) ([#1497](https://github.com/community-scripts/ProxmoxVE/pull/1497))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
- [core] build.func&install.func: Fix ssh keynot added error [@dsiebel](https://github.com/dsiebel) ([#1502](https://github.com/community-scripts/ProxmoxVE/pull/1502))
 | 
			
		||||
 | 
			
		||||
## 2025-01-14
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### 💥 Breaking Changes
 | 
			
		||||
 | 
			
		||||
- Update tianji-install.sh: Add OPENAI_API_KEY to .env [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1480](https://github.com/community-scripts/ProxmoxVE/pull/1480))
 | 
			
		||||
 | 
			
		||||
### ✨ New Scripts
 | 
			
		||||
 | 
			
		||||
- New Script: Wordpress [@MickLesk](https://github.com/MickLesk) ([#1485](https://github.com/community-scripts/ProxmoxVE/pull/1485))
 | 
			
		||||
- New Script: Opengist [@jd-apprentice](https://github.com/jd-apprentice) ([#1429](https://github.com/community-scripts/ProxmoxVE/pull/1429))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Update lazylibrarian-install.sh: Add pypdf libary [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1467](https://github.com/community-scripts/ProxmoxVE/pull/1467))
 | 
			
		||||
- Update opengist-install.sh: Add git as dependencie [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1471](https://github.com/community-scripts/ProxmoxVE/pull/1471))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
- [website] Update footer text [@rajatdiptabiswas](https://github.com/rajatdiptabiswas) ([#1466](https://github.com/community-scripts/ProxmoxVE/pull/1466))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
- Hotfix build.func: Error when tags are empty [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1492](https://github.com/community-scripts/ProxmoxVE/pull/1492))
 | 
			
		||||
- [core] Update build.func: Fix bug with advanced tags [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1473](https://github.com/community-scripts/ProxmoxVE/pull/1473))
 | 
			
		||||
 | 
			
		||||
## 2025-01-13
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### 💥 Breaking Changes
 | 
			
		||||
 | 
			
		||||
- Update Hoarder: Improvement .env location (see PR comment for little migration) [@MahrWe](https://github.com/MahrWe) ([#1325](https://github.com/community-scripts/ProxmoxVE/pull/1325))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Fix: tandoor.sh: Call version.py to write current version [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1454](https://github.com/community-scripts/ProxmoxVE/pull/1454))
 | 
			
		||||
- Fix inexistent folder on actualbudget update script [@dosten](https://github.com/dosten) ([#1444](https://github.com/community-scripts/ProxmoxVE/pull/1444))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
- Update kavita.json: Add info on how to enable folder adding. [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1447](https://github.com/community-scripts/ProxmoxVE/pull/1447))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
- GitHub Actions: Fix Shellsheck workflow to only run on changes `*.sh` files [@andygrunwald](https://github.com/andygrunwald) ([#1423](https://github.com/community-scripts/ProxmoxVE/pull/1423))
 | 
			
		||||
 | 
			
		||||
### ❔ Unlabelled
 | 
			
		||||
 | 
			
		||||
- feat: allow adding SSH authorized key for root (advanced settings) by @dsiebel [@MickLesk](https://github.com/MickLesk) ([#1456](https://github.com/community-scripts/ProxmoxVE/pull/1456))
 | 
			
		||||
 | 
			
		||||
## 2025-01-11
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 
 | 
			
		||||
@@ -45,6 +45,7 @@ function update_script() {
 | 
			
		||||
    cd "${TEMPD}"
 | 
			
		||||
    wget -q https://codeload.github.com/actualbudget/actual-server/legacy.tar.gz/refs/tags/${RELEASE} -O - | tar -xz
 | 
			
		||||
    mv /opt/actualbudget /opt/actualbudget_bak
 | 
			
		||||
    mkdir -p /opt/actualbudget/
 | 
			
		||||
    mv actualbudget-actual-server-*/* /opt/actualbudget/
 | 
			
		||||
    mv /opt/actualbudget_bak/.env /opt/actualbudget
 | 
			
		||||
    mv /opt/actualbudget_bak/server-files /opt/actualbudget/server-files
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										49
									
								
								ct/dotnetaspwebapi.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								ct/dotnetaspwebapi.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
#!/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: Kristian Skov
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-9.0&tabs=linux-ubuntu
 | 
			
		||||
 | 
			
		||||
# App Default Values
 | 
			
		||||
APP="Dotnet ASP Web API"
 | 
			
		||||
var_tags="web"
 | 
			
		||||
var_cpu="1"
 | 
			
		||||
var_ram="1024"
 | 
			
		||||
var_disk="8"
 | 
			
		||||
var_os="ubuntu"
 | 
			
		||||
var_version="24.04"
 | 
			
		||||
var_unprivileged="0"
 | 
			
		||||
 | 
			
		||||
# App Output & Base Settings
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
base_settings
 | 
			
		||||
 | 
			
		||||
# Core
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /var/www ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Updating ${APP} LXC"
 | 
			
		||||
    apt-get update &>/dev/null
 | 
			
		||||
    apt-get -y upgrade &>/dev/null
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
    exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following IP:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}${IP}:80${CL}"
 | 
			
		||||
@@ -40,7 +40,10 @@ function update_script() {
 | 
			
		||||
    msg_ok "Stopped Services"
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    cd /opt
 | 
			
		||||
    mv /opt/hoarder/.env /opt/.env
 | 
			
		||||
    if [[ -f /opt/hoarder/.env ]] && [[ ! -f /etc/hoarder/hoarder.env ]]; then
 | 
			
		||||
      mkdir -p /etc/hoarder
 | 
			
		||||
      mv /opt/hoarder/.env /etc/hoarder/hoarder.env
 | 
			
		||||
    fi
 | 
			
		||||
    rm -rf /opt/hoarder
 | 
			
		||||
    wget -q "https://github.com/hoarder-app/hoarder/archive/refs/tags/v${RELEASE}.zip"
 | 
			
		||||
    unzip -q v${RELEASE}.zip
 | 
			
		||||
@@ -54,8 +57,7 @@ function update_script() {
 | 
			
		||||
    export DATA_DIR=/opt/hoarder_data
 | 
			
		||||
    cd /opt/hoarder/packages/db
 | 
			
		||||
    pnpm migrate &>/dev/null
 | 
			
		||||
    mv /opt/.env /opt/hoarder/.env
 | 
			
		||||
    sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /opt/hoarder/.env
 | 
			
		||||
    sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /etc/hoarder/hoarder.env
 | 
			
		||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Services"
 | 
			
		||||
@@ -79,4 +81,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}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										71
									
								
								ct/opengist.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								ct/opengist.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: Jonathan (jd-apprentice)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://opengist.io/
 | 
			
		||||
 | 
			
		||||
# App Default Values
 | 
			
		||||
APP="Opengist"
 | 
			
		||||
var_tags="development"
 | 
			
		||||
var_cpu="1"
 | 
			
		||||
var_ram="1024"
 | 
			
		||||
var_disk="8"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
var_unprivileged="1"
 | 
			
		||||
 | 
			
		||||
# App Output & Base Settings
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
base_settings
 | 
			
		||||
 | 
			
		||||
# Core
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/opengist ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Stopping Service"
 | 
			
		||||
  systemctl stop opengist.service
 | 
			
		||||
  msg_ok "Stopped Service"
 | 
			
		||||
  apt-get update &>/dev/null
 | 
			
		||||
  apt-get upgrade &>/dev/null
 | 
			
		||||
  RELEASE=$(curl -s https://api.github.com/repos/thomiceli/opengist/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    cd /opt
 | 
			
		||||
    wget -qO "https://github.com/thomiceli/opengist/releases/download/v${RELEASE}/opengist${RELEASE}-linux-amd64.tar.gz"
 | 
			
		||||
    rm -rf /opt/opengist
 | 
			
		||||
    tar -xzf opengist${RELEASE}-linux-amd64.tar.gz
 | 
			
		||||
    chmod +x /opt/opengist/opengist
 | 
			
		||||
    echo "${RELEASE}" >"/opt/${APP}_version.txt"
 | 
			
		||||
    rm -rf /opt/opengist${RELEASE}-linux-amd64.tar.gz
 | 
			
		||||
    apt-get -y autoremove &>/dev/null
 | 
			
		||||
    apt-get -y autoclean &>/dev/null
 | 
			
		||||
    msg_ok "Updated ${APP} LXC"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start opengist.service
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
    
 | 
			
		||||
  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}:6157${CL}"
 | 
			
		||||
							
								
								
									
										72
									
								
								ct/phpipam.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								ct/phpipam.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,72 @@
 | 
			
		||||
#!/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: bvdberg01
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://phpipam.net/
 | 
			
		||||
 | 
			
		||||
# App Default Values
 | 
			
		||||
APP="phpIPAM"
 | 
			
		||||
var_tags="network"
 | 
			
		||||
var_cpu="1"
 | 
			
		||||
var_ram="512"
 | 
			
		||||
var_disk="4"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
var_unprivileged="1"
 | 
			
		||||
 | 
			
		||||
# App Output & Base Settings
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
base_settings
 | 
			
		||||
 | 
			
		||||
# Core
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/phpipam ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -s https://api.github.com/repos/phpipam/phpipam/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 Service"
 | 
			
		||||
    systemctl stop apache2
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    cd /opt
 | 
			
		||||
    mv /opt/phpipam/ /opt/phpipam-backup
 | 
			
		||||
    wget -q "https://github.com/phpipam/phpipam/releases/download/v${RELEASE}/phpipam-v${RELEASE}.zip"
 | 
			
		||||
    unzip -q "phpipam-v${RELEASE}.zip"
 | 
			
		||||
    cp /opt/phpipam-backup/config.php /opt/phpipam
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start apache2
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -r "/opt/phpipam-v${RELEASE}.zip"
 | 
			
		||||
    rm -r /opt/phpipam-backup
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  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}${CL}"
 | 
			
		||||
@@ -45,6 +45,8 @@ function update_script() {
 | 
			
		||||
    cd /opt/tandoor/vue
 | 
			
		||||
    yarn install >/dev/null 2>&1
 | 
			
		||||
    yarn build >/dev/null 2>&1
 | 
			
		||||
    cd /opt/tandoor
 | 
			
		||||
    python3 version.py &>/dev/null
 | 
			
		||||
    systemctl restart gunicorn_tandoor
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
  fi
 | 
			
		||||
@@ -58,4 +60,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}:8002${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8002${CL}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										45
									
								
								ct/wordpress.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								ct/wordpress.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 communtiy-scripts ORG
 | 
			
		||||
# Author: MickLesk (Canbiz)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://wordpress.org/
 | 
			
		||||
 | 
			
		||||
## App Default Values
 | 
			
		||||
APP="Wordpress"
 | 
			
		||||
var_tags="blog;cms"
 | 
			
		||||
var_disk="5"
 | 
			
		||||
var_cpu="2"
 | 
			
		||||
var_ram="2048"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
 | 
			
		||||
# App Output & Base Settings
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
base_settings
 | 
			
		||||
 | 
			
		||||
# Core 
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /var/www/html/wordpress ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_error "Wordpress should be updated via the user 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}/${CL}"
 | 
			
		||||
@@ -6,7 +6,7 @@ export default function Footer() {
 | 
			
		||||
    <div className="supports-backdrop-blur:bg-background/90 mt-auto flex border-t border-border bg-background/40 py-6 backdrop-blur-lg">
 | 
			
		||||
      <div className="flex w-full justify-between">
 | 
			
		||||
        <div className="mx-6 w-full max-w-7xl text-sm text-muted-foreground">
 | 
			
		||||
          Website build by the community. The source code is avaliable on{" "}
 | 
			
		||||
          Website built by the community. The source code is avaliable on{" "}
 | 
			
		||||
          <Link
 | 
			
		||||
            href={`https://github.com/community-scripts/${basePath}`}
 | 
			
		||||
            target="_blank"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,12 @@
 | 
			
		||||
import { OperatingSystem } from "@/lib/types";
 | 
			
		||||
import { MessagesSquare, Scroll } from "lucide-react";
 | 
			
		||||
import { FaDiscord, FaGithub } from "react-icons/fa";
 | 
			
		||||
import React from "react";
 | 
			
		||||
 | 
			
		||||
export const basePath = process.env.BASE_PATH;
 | 
			
		||||
 | 
			
		||||
const isMobile = typeof window !== "undefined" && window.innerWidth < 640;
 | 
			
		||||
 | 
			
		||||
export const navbarLinks = [
 | 
			
		||||
  {
 | 
			
		||||
    href: `https://github.com/community-scripts/${basePath}`,
 | 
			
		||||
@@ -23,13 +26,15 @@ export const navbarLinks = [
 | 
			
		||||
    icon: <Scroll className="h-4 w-4" />,
 | 
			
		||||
    text: "Change Log",
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    href: `https://github.com/community-scripts/${basePath}/discussions`,
 | 
			
		||||
    event: "Discussions",
 | 
			
		||||
    icon: <MessagesSquare className="h-4 w-4 hidden sm:block" />,
 | 
			
		||||
    text: "Discussions",
 | 
			
		||||
  },
 | 
			
		||||
];
 | 
			
		||||
  !isMobile
 | 
			
		||||
    ? {
 | 
			
		||||
        href: `https://github.com/community-scripts/${basePath}/discussions`,
 | 
			
		||||
        event: "Discussions",
 | 
			
		||||
        icon: <MessagesSquare className="h-4 w-4" />,
 | 
			
		||||
        text: "Discussions",
 | 
			
		||||
      }
 | 
			
		||||
    : null,
 | 
			
		||||
].filter(Boolean) as { href: string; event: string; icon: React.ReactNode; text: string }[];
 | 
			
		||||
 | 
			
		||||
export const mostPopularScripts = [
 | 
			
		||||
  "Proxmox VE Post Install",
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@
 | 
			
		||||
    "moduleResolution": "bundler",
 | 
			
		||||
    "resolveJsonModule": true,
 | 
			
		||||
    "isolatedModules": true,
 | 
			
		||||
    "jsx": "preserve",
 | 
			
		||||
    "jsx": "react-jsx",
 | 
			
		||||
    "incremental": true,
 | 
			
		||||
    "plugins": [
 | 
			
		||||
      {
 | 
			
		||||
@@ -27,7 +27,7 @@
 | 
			
		||||
    "**/*.ts",
 | 
			
		||||
    "**/*.tsx",
 | 
			
		||||
    ".next/types/**/*.ts",
 | 
			
		||||
    "next.config.mjs",
 | 
			
		||||
    "next.config.mjs"
 | 
			
		||||
  ],
 | 
			
		||||
  "exclude": ["node_modules"]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										110
									
								
								install/dotnetaspwebapi-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								install/dotnetaspwebapi-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,110 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Kristian Skov
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
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 update
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  ssh \
 | 
			
		||||
  software-properties-common
 | 
			
		||||
$STD add-apt-repository -y ppa:dotnet/backports
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  dotnet-sdk-9.0 \
 | 
			
		||||
  vsftpd \
 | 
			
		||||
  nginx
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Configure Application"
 | 
			
		||||
var_project_name="default"
 | 
			
		||||
read -r -p "Type the assembly name of the project: " var_project_name
 | 
			
		||||
echo "Target assembly: '${var_project_name}'"
 | 
			
		||||
msg_ok "Application Configured"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up FTP Server"
 | 
			
		||||
useradd ftpuser
 | 
			
		||||
FTP_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
 | 
			
		||||
usermod --password $(echo ${FTP_PASS} | openssl passwd -1 -stdin) ftpuser
 | 
			
		||||
mkdir -p /var/www/html
 | 
			
		||||
usermod -d /var/www/html ftp
 | 
			
		||||
usermod -d /var/www/html ftpuser 
 | 
			
		||||
chown ftpuser /var/www/html
 | 
			
		||||
 | 
			
		||||
sed -i "s|#write_enable=YES|write_enable=YES|g" /etc/vsftpd.conf
 | 
			
		||||
sed -i "s|#chroot_local_user=YES|chroot_local_user=NO|g" /etc/vsftpd.conf
 | 
			
		||||
 | 
			
		||||
systemctl restart -q vsftpd.service
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
    echo "FTP-Credentials"
 | 
			
		||||
    echo "Username: ftpuser"
 | 
			
		||||
    echo "Password: $FTP_PASS"
 | 
			
		||||
} >> ~/ftp.creds
 | 
			
		||||
 | 
			
		||||
msg_ok "FTP server setup completed"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Nginx Server"
 | 
			
		||||
rm -f /var/www/html/index.nginx-debian.html
 | 
			
		||||
 | 
			
		||||
sed "s/\$var_project_name/$var_project_name/g" >myfile <<'EOF' >/etc/nginx/sites-available/default
 | 
			
		||||
map $http_connection $connection_upgrade {
 | 
			
		||||
  "~*Upgrade" $http_connection;
 | 
			
		||||
  default keep-alive;
 | 
			
		||||
}
 | 
			
		||||
server {
 | 
			
		||||
  listen        80;
 | 
			
		||||
  server_name   $var_project_name.com *.$var_project_name.com;
 | 
			
		||||
  location / {
 | 
			
		||||
      proxy_pass         http://127.0.0.1:5000/;
 | 
			
		||||
      proxy_http_version 1.1;
 | 
			
		||||
      proxy_set_header   Upgrade $http_upgrade;
 | 
			
		||||
      proxy_set_header   Connection $connection_upgrade;
 | 
			
		||||
      proxy_set_header   Host $host;
 | 
			
		||||
      proxy_cache_bypass $http_upgrade;
 | 
			
		||||
      proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
 | 
			
		||||
      proxy_set_header   X-Forwarded-Proto $scheme;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
systemctl reload nginx
 | 
			
		||||
msg_ok "Nginx Server Created"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/kestrel-aspnetapi.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=.NET Web API App running on Linux
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
WorkingDirectory=/var/www/html
 | 
			
		||||
ExecStart=/usr/bin/dotnet /var/www/html/$var_project_name.dll
 | 
			
		||||
Restart=always
 | 
			
		||||
# Restart service after 10 seconds if the dotnet service crashes:
 | 
			
		||||
RestartSec=10
 | 
			
		||||
KillSignal=SIGINT
 | 
			
		||||
SyslogIdentifier=dotnet-${var_project_name}
 | 
			
		||||
User=root
 | 
			
		||||
Environment=ASPNETCORE_ENVIRONMENT=Production
 | 
			
		||||
Environment=DOTNET_NOLOGO=true
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now kestrel-aspnetapi.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"
 | 
			
		||||
@@ -78,7 +78,8 @@ $STD pnpm install --frozen-lockfile
 | 
			
		||||
 | 
			
		||||
export DATA_DIR=/opt/hoarder_data
 | 
			
		||||
HOARDER_SECRET=$(openssl rand -base64 36 | cut -c1-24)
 | 
			
		||||
cat <<EOF >/opt/hoarder/.env
 | 
			
		||||
mkdir -p /etc/hoarder
 | 
			
		||||
cat <<EOF >/etc/hoarder/hoarder.env
 | 
			
		||||
SERVER_VERSION=$RELEASE
 | 
			
		||||
NEXTAUTH_SECRET="$HOARDER_SECRET"
 | 
			
		||||
NEXTAUTH_URL="http://localhost:3000"
 | 
			
		||||
@@ -129,7 +130,7 @@ After=network.target hoarder-workers.service
 | 
			
		||||
[Service]
 | 
			
		||||
ExecStart=pnpm start
 | 
			
		||||
WorkingDirectory=/opt/hoarder/apps/web
 | 
			
		||||
EnvironmentFile=/opt/hoarder/.env
 | 
			
		||||
EnvironmentFile=/etc/hoarder/hoarder.env
 | 
			
		||||
Restart=always
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
@@ -159,7 +160,7 @@ After=network.target hoarder-browser.service meilisearch.service
 | 
			
		||||
[Service]
 | 
			
		||||
ExecStart=pnpm start:prod
 | 
			
		||||
WorkingDirectory=/opt/hoarder/apps/workers
 | 
			
		||||
EnvironmentFile=/opt/hoarder/.env
 | 
			
		||||
EnvironmentFile=/etc/hoarder/hoarder.env
 | 
			
		||||
Restart=always
 | 
			
		||||
TimeoutStopSec=5
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@ 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
 | 
			
		||||
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 "Set up Node.js Repository"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Node.js"
 | 
			
		||||
 
 | 
			
		||||
@@ -33,6 +33,7 @@ $STD apt-get install -y \
 | 
			
		||||
$STD pip install jaraco.stream
 | 
			
		||||
$STD pip install python-Levenshtein
 | 
			
		||||
$STD pip install soupsieve
 | 
			
		||||
$STD pip install pypdf
 | 
			
		||||
msg_ok "Installed Python3 Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing LazyLibrarian"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										61
									
								
								install/opengist-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								install/opengist-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,61 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Jonathan (jd-apprentice)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
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 \
 | 
			
		||||
    mc \
 | 
			
		||||
    curl \
 | 
			
		||||
    sudo \
 | 
			
		||||
    git
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Install Opengist"
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/thomiceli/opengist/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
wget -q "https://github.com/thomiceli/opengist/releases/download/v${RELEASE}/opengist${RELEASE}-linux-amd64.tar.gz"
 | 
			
		||||
$STD tar -xzf opengist${RELEASE}-linux-amd64.tar.gz
 | 
			
		||||
mv opengist /opt/opengist
 | 
			
		||||
chmod +x /opt/opengist/opengist
 | 
			
		||||
mkdir -p /opt/opengist-data
 | 
			
		||||
msg_ok "Installed Opengist"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
 | 
			
		||||
sed -i 's|opengist-home:.*|opengist-home: /opt/opengist-data|' /opt/opengist/config.yml
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/systemd/system/opengist.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Opengist server to manage your Gists
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
WorkingDirectory=/opt/opengist
 | 
			
		||||
ExecStart=/opt/opengist/opengist --config /opt/opengist/config.yml
 | 
			
		||||
Restart=always
 | 
			
		||||
User=root
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now opengist.service
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf /opengist${RELEASE}-linux-amd64.tar.gz
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -15,11 +15,13 @@ 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 gpg
 | 
			
		||||
$STD apt-get install -y git
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  curl \
 | 
			
		||||
  sudo \
 | 
			
		||||
  mc \
 | 
			
		||||
  gpg \
 | 
			
		||||
  git \
 | 
			
		||||
  ffmpeg
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Python3 Dependencies"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										86
									
								
								install/phpipam-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								install/phpipam-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,86 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: bvdberg01
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
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 \
 | 
			
		||||
  mariadb-server \
 | 
			
		||||
  apache2 \
 | 
			
		||||
  libapache2-mod-php \
 | 
			
		||||
  php8.2 php8.2-{fpm,curl,cli,mysql,gd,intl,imap,apcu,pspell,tidy,xmlrpc,mbstring,gmp,xml,ldap,common,snmp} \
 | 
			
		||||
  php-pear
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up MariaDB"
 | 
			
		||||
DB_NAME=phpipam
 | 
			
		||||
DB_USER=phpipam
 | 
			
		||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
 | 
			
		||||
$STD mysql -u root -e "CREATE DATABASE $DB_NAME;"
 | 
			
		||||
$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED WITH mysql_native_password AS PASSWORD('$DB_PASS');"
 | 
			
		||||
$STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
 | 
			
		||||
{
 | 
			
		||||
    echo "phpIPAM-Credentials"
 | 
			
		||||
    echo "phpIPAM Database User: $DB_USER"
 | 
			
		||||
    echo "phpIPAM Database Password: $DB_PASS"
 | 
			
		||||
    echo "phpIPAM Database Name: $DB_NAME"
 | 
			
		||||
} >> ~/phpipam.creds
 | 
			
		||||
msg_ok "Set up MariaDB"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing phpIPAM"
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/phpipam/phpipam/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
cd /opt
 | 
			
		||||
wget -q "https://github.com/phpipam/phpipam/releases/download/v${RELEASE}/phpipam-v${RELEASE}.zip"
 | 
			
		||||
unzip -q "phpipam-v${RELEASE}.zip"
 | 
			
		||||
mysql -u root "${DB_NAME}" < /opt/phpipam/db/SCHEMA.sql
 | 
			
		||||
cp /opt/phpipam/config.dist.php /opt/phpipam/config.php
 | 
			
		||||
sed -i -e "s/\(\$disable_installer = \).*/\1true;/" \
 | 
			
		||||
       -e "s/\(\$db\['user'\] = \).*/\1'$DB_USER';/" \
 | 
			
		||||
       -e "s/\(\$db\['pass'\] = \).*/\1'$DB_PASS';/" \
 | 
			
		||||
       -e "s/\(\$db\['name'\] = \).*/\1'$DB_NAME';/" \
 | 
			
		||||
       /opt/phpipam/config.php
 | 
			
		||||
sed -i '/max_execution_time/s/= .*/= 600/' /etc/php/8.2/apache2/php.ini
 | 
			
		||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
			
		||||
msg_ok "Installed phpIPAM"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/apache2/sites-available/phpipam.conf
 | 
			
		||||
<VirtualHost *:80>
 | 
			
		||||
    ServerName phpipam
 | 
			
		||||
    DocumentRoot /opt/phpipam
 | 
			
		||||
    <Directory /opt/phpipam>
 | 
			
		||||
        Options FollowSymLinks
 | 
			
		||||
        AllowOverride All
 | 
			
		||||
        Require all granted
 | 
			
		||||
    </Directory>
 | 
			
		||||
 | 
			
		||||
    ErrorLog /var/log/apache2/phpipam_error.log
 | 
			
		||||
    CustomLog /var/log/apache2/phpipam_access.log combined
 | 
			
		||||
</VirtualHost>
 | 
			
		||||
EOF
 | 
			
		||||
$STD a2ensite phpipam
 | 
			
		||||
$STD a2enmod rewrite
 | 
			
		||||
$STD a2dissite 000-default.conf
 | 
			
		||||
$STD systemctl reload apache2
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf "/opt/phpipam-v${RELEASE}.zip"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -74,6 +74,7 @@ $STD pnpm build:server
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
cat <<EOF >/opt/tianji/src/server/.env
 | 
			
		||||
DATABASE_URL="postgresql://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME?schema=public"
 | 
			
		||||
OPENAI_API_KEY=""
 | 
			
		||||
JWT_SECRET="$TIANJI_SECRET"
 | 
			
		||||
EOF
 | 
			
		||||
cd /opt/tianji/src/server
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										85
									
								
								install/wordpress-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								install/wordpress-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,85 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 communtiy-scripts ORG
 | 
			
		||||
# Author: MickLesk (Canbiz)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://wordpress.org/
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies (Patience)"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  curl \
 | 
			
		||||
  unzip \
 | 
			
		||||
  sudo \
 | 
			
		||||
  mc \
 | 
			
		||||
  apache2 \
 | 
			
		||||
  php8.2-{bcmath,common,cli,curl,fpm,gd,snmp,imap,mbstring,mysql,xml,zip} \
 | 
			
		||||
  libapache2-mod-php \
 | 
			
		||||
  mariadb-server 
 | 
			
		||||
 msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Database"
 | 
			
		||||
DB_NAME=wordpress_db
 | 
			
		||||
DB_USER=wordpress
 | 
			
		||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
 | 
			
		||||
$STD mysql -u root -e "CREATE DATABASE $DB_NAME;"
 | 
			
		||||
$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
 | 
			
		||||
$STD mysql -u root -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
 | 
			
		||||
{
 | 
			
		||||
    echo "WordPress Credentials"
 | 
			
		||||
    echo "Database User: $DB_USER"
 | 
			
		||||
    echo "Database Password: $DB_PASS"
 | 
			
		||||
    echo "Database Name: $DB_NAME"
 | 
			
		||||
} >> ~/wordpress.creds
 | 
			
		||||
msg_ok "Set up Database"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Wordpress (Patience)"
 | 
			
		||||
cd /var/www/html
 | 
			
		||||
wget -q https://wordpress.org/latest.zip
 | 
			
		||||
unzip -q latest.zip
 | 
			
		||||
chown -R www-data:www-data wordpress/
 | 
			
		||||
cd /var/www/html/wordpress
 | 
			
		||||
find . -type d -exec chmod 755 {} \;
 | 
			
		||||
find . -type f -exec chmod 644 {} \;
 | 
			
		||||
mv wp-config-sample.php wp-config.php
 | 
			
		||||
sed -i -e "s|^define( 'DB_NAME', '.*' );|define( 'DB_NAME', '$DB_NAME' );|" \
 | 
			
		||||
       -e "s|^define( 'DB_USER', '.*' );|define( 'DB_USER', '$DB_USER' );|" \
 | 
			
		||||
       -e "s|^define( 'DB_PASSWORD', '.*' );|define( 'DB_PASSWORD', '$DB_PASS' );|" \
 | 
			
		||||
       /var/www/html/wordpress/wp-config.php
 | 
			
		||||
msg_ok "Installed Wordpress"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup Services"
 | 
			
		||||
cat <<EOF > /etc/apache2/sites-available/wordpress.conf
 | 
			
		||||
<VirtualHost *:80>
 | 
			
		||||
    ServerName yourdomain.com
 | 
			
		||||
    DocumentRoot /var/www/html/wordpress
 | 
			
		||||
 | 
			
		||||
    <Directory /var/www/html/wordpress>
 | 
			
		||||
        AllowOverride All
 | 
			
		||||
    </Directory>
 | 
			
		||||
 | 
			
		||||
    ErrorLog \${APACHE_LOG_DIR}/error.log
 | 
			
		||||
    CustomLog \${APACHE_LOG_DIR}/access.log combined
 | 
			
		||||
 | 
			
		||||
</VirtualHost>
 | 
			
		||||
EOF
 | 
			
		||||
$STD a2ensite wordpress.conf
 | 
			
		||||
$STD a2dissite 000-default.conf
 | 
			
		||||
systemctl reload apache2
 | 
			
		||||
msg_ok "Created Services"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf /var/www/html/latest.zip
 | 
			
		||||
$STD apt-get autoremove
 | 
			
		||||
$STD apt-get autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
							
								
								
									
										39
									
								
								json/dotnetaspwebapi.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								json/dotnetaspwebapi.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
{
 | 
			
		||||
   "name":"Dotnet ASP Web API",
 | 
			
		||||
   "slug":"dotnetaspwebapi",
 | 
			
		||||
   "categories":[
 | 
			
		||||
      0
 | 
			
		||||
   ],
 | 
			
		||||
   "date_created":"2025-01-15",
 | 
			
		||||
   "type":"ct",
 | 
			
		||||
   "updateable":true,
 | 
			
		||||
   "privileged":true,
 | 
			
		||||
   "interface_port":80,
 | 
			
		||||
   "documentation":"https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-9.0&tabs=linux-ubuntu",
 | 
			
		||||
   "website":"https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-9.0&tabs=linux-ubuntu",
 | 
			
		||||
   "logo":"https://upload.wikimedia.org/wikipedia/commons/thumb/7/7d/Microsoft_.NET_logo.svg/456px-Microsoft_.NET_logo.svg.png",
 | 
			
		||||
   "description":"Automatically setup a ASP.NET server up, as well as a FTP server so you can publish to this container from Visual Studio.",
 | 
			
		||||
   "install_methods":[
 | 
			
		||||
      {
 | 
			
		||||
         "type":"default",
 | 
			
		||||
         "script":"ct/dotnetaspwebapi.sh",
 | 
			
		||||
         "resources":{
 | 
			
		||||
            "cpu":1,
 | 
			
		||||
            "ram":1024,
 | 
			
		||||
            "hdd":8,
 | 
			
		||||
            "os":"Ubuntu",
 | 
			
		||||
            "version":"24.04"
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
   ],
 | 
			
		||||
   "default_credentials":{
 | 
			
		||||
      "username":null,
 | 
			
		||||
      "password":null
 | 
			
		||||
   },
 | 
			
		||||
   "notes":[
 | 
			
		||||
      {
 | 
			
		||||
         "text":"FTP server credentials: `cat ~/ftp.creds`",
 | 
			
		||||
         "type":"info"
 | 
			
		||||
      }
 | 
			
		||||
   ]
 | 
			
		||||
}
 | 
			
		||||
@@ -30,5 +30,9 @@
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": []
 | 
			
		||||
}
 | 
			
		||||
    "notes": [{
 | 
			
		||||
        "text": "To enable folder adding append your lxc.conf on your host with 'lxc.environment: DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1'",
 | 
			
		||||
        "type": "info"
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										34
									
								
								json/opengist.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								json/opengist.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Opengist",
 | 
			
		||||
    "slug": "opengist",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        3
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2025-01-14",
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 6157,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://opengist.io/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/thomiceli/opengist/master/public/opengist.svg",
 | 
			
		||||
    "description": "Self-hosted pastebin powered by Git, open-source alternative to Github Gist.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/opengist.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": 1,
 | 
			
		||||
                "ram": 1024,
 | 
			
		||||
                "hdd": 8,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": []
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										34
									
								
								json/phpipam.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								json/phpipam.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "phpIPAM",
 | 
			
		||||
    "slug": "phpipam",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        11
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2025-01-15",
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 80,
 | 
			
		||||
    "documentation": "https://phpipam.net/documents/all-documents/",
 | 
			
		||||
    "website": "https://phpipam.net/",
 | 
			
		||||
    "logo": "https://phpipam.net/css/images/phpipam_logo_small@2x.png",
 | 
			
		||||
    "description": "phpipam is an open-source web IP address management application (IPAM). Its goal is to provide light, modern and useful IP address management.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/phpipam.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": 1,
 | 
			
		||||
                "ram": 1024,
 | 
			
		||||
                "hdd": 4,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": "Admin",
 | 
			
		||||
        "password":  "ipamadmin"
 | 
			
		||||
    },
 | 
			
		||||
    "notes": []
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										34
									
								
								json/wordpress.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								json/wordpress.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Wordpress",
 | 
			
		||||
  "slug": "wordpress",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    14
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-01-14",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 80,
 | 
			
		||||
  "documentation": "https://wordpress.org/documentation/",
 | 
			
		||||
  "website": "https://wordpress.org/",
 | 
			
		||||
  "logo": "https://s.w.org/style/images/about/WordPress-logotype-simplified.png",
 | 
			
		||||
  "description": "WordPress is the simplest, most popular way to create your own website or blog. In fact, WordPress powers over 43.6% of all the websites on the Internet. Yes – more than one in four websites that you visit are likely powered by WordPress.\n\nOn a slightly more technical level, WordPress is an open-source content management system licensed under GPLv2, which means that anyone can use or modify the WordPress software for free.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/wordpress.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 5,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
### Generated on 01-10-2025
 | 
			
		||||
### Generated on 01-16-2025
 | 
			
		||||
##################################################
 | 
			
		||||
 | 
			
		||||
### 2fauth.sh
 | 
			
		||||
@@ -421,6 +421,21 @@ APP=Dockge
 | 
			
		||||
/_____/\____/\___/_/|_|\__, /\___/ 
 | 
			
		||||
                      /____/       
 | 
			
		||||
 | 
			
		||||
### dotnetaspwebapi.sh
 | 
			
		||||
APP=Dotnet ASP Web API
 | 
			
		||||
    ____        __             __     ___   _____ ____     _       __     __  
 | 
			
		||||
   / __ \____  / /_____  ___  / /_   /   | / ___// __ \   | |     / /__  / /_ 
 | 
			
		||||
  / / / / __ \/ __/ __ \/ _ \/ __/  / /| | \__ \/ /_/ /   | | /| / / _ \/ __ \
 | 
			
		||||
 / /_/ / /_/ / /_/ / / /  __/ /_   / ___ |___/ / ____/    | |/ |/ /  __/ /_/ /
 | 
			
		||||
/_____/\____/\__/_/ /_/\___/\__/  /_/  |_/____/_/         |__/|__/\___/_.___/ 
 | 
			
		||||
                                                                              
 | 
			
		||||
    ___    ____  ____
 | 
			
		||||
   /   |  / __ \/  _/
 | 
			
		||||
  / /| | / /_/ // /  
 | 
			
		||||
 / ___ |/ ____// /   
 | 
			
		||||
/_/  |_/_/   /___/   
 | 
			
		||||
                     
 | 
			
		||||
 | 
			
		||||
### emby.sh
 | 
			
		||||
APP=Emby
 | 
			
		||||
    ______          __         
 | 
			
		||||
@@ -529,6 +544,15 @@ APP=Frigate
 | 
			
		||||
/_/   /_/  /_/\__, /\__,_/\__/\___/ 
 | 
			
		||||
             /____/                 
 | 
			
		||||
 | 
			
		||||
### ghost.sh
 | 
			
		||||
APP=Ghost
 | 
			
		||||
   ________               __ 
 | 
			
		||||
  / ____/ /_  ____  _____/ /_
 | 
			
		||||
 / / __/ __ \/ __ \/ ___/ __/
 | 
			
		||||
/ /_/ / / / / /_/ (__  ) /_  
 | 
			
		||||
\____/_/ /_/\____/____/\__/  
 | 
			
		||||
                             
 | 
			
		||||
 | 
			
		||||
### gitea.sh
 | 
			
		||||
APP=Gitea
 | 
			
		||||
   _______ __            
 | 
			
		||||
@@ -1222,6 +1246,15 @@ APP=OneDev
 | 
			
		||||
\____/_/ /_/\___/_____/\___/|___/  
 | 
			
		||||
                                   
 | 
			
		||||
 | 
			
		||||
### opengist.sh
 | 
			
		||||
APP=Opengist
 | 
			
		||||
   ____                         _      __ 
 | 
			
		||||
  / __ \____  ___  ____  ____ _(_)____/ /_
 | 
			
		||||
 / / / / __ \/ _ \/ __ \/ __ `/ / ___/ __/
 | 
			
		||||
/ /_/ / /_/ /  __/ / / / /_/ / (__  ) /_  
 | 
			
		||||
\____/ .___/\___/_/ /_/\__, /_/____/\__/  
 | 
			
		||||
    /_/               /____/              
 | 
			
		||||
 | 
			
		||||
### openhab.sh
 | 
			
		||||
APP=openHAB
 | 
			
		||||
                          __  _____    ____ 
 | 
			
		||||
@@ -1339,6 +1372,15 @@ APP=PhotoPrism
 | 
			
		||||
/_/   /_/ /_/\____/\__/\____/_/   /_/  /_/____/_/ /_/ /_/ 
 | 
			
		||||
                                                          
 | 
			
		||||
 | 
			
		||||
### phpipam.sh
 | 
			
		||||
APP=phpIPAM
 | 
			
		||||
           __          ________  ___    __  ___
 | 
			
		||||
    ____  / /_  ____  /  _/ __ \/   |  /  |/  /
 | 
			
		||||
   / __ \/ __ \/ __ \ / // /_/ / /| | / /|_/ / 
 | 
			
		||||
  / /_/ / / / / /_/ // // ____/ ___ |/ /  / /  
 | 
			
		||||
 / .___/_/ /_/ .___/___/_/   /_/  |_/_/  /_/   
 | 
			
		||||
/_/         /_/                                
 | 
			
		||||
 | 
			
		||||
### pialert.sh
 | 
			
		||||
APP=PiAlert
 | 
			
		||||
    ____  _ ___    __          __ 
 | 
			
		||||
@@ -1948,6 +1990,15 @@ APP=Wireguard
 | 
			
		||||
|__/|__/_/_/   \___/\__, /\__,_/\__,_/_/   \__,_/   
 | 
			
		||||
                   /____/                           
 | 
			
		||||
 | 
			
		||||
### wordpress.sh
 | 
			
		||||
APP=Wordpress
 | 
			
		||||
 _       __               __                         
 | 
			
		||||
| |     / /___  _________/ /___  ________  __________
 | 
			
		||||
| | /| / / __ \/ ___/ __  / __ \/ ___/ _ \/ ___/ ___/
 | 
			
		||||
| |/ |/ / /_/ / /  / /_/ / /_/ / /  /  __(__  |__  ) 
 | 
			
		||||
|__/|__/\____/_/   \__,_/ .___/_/   \___/____/____/  
 | 
			
		||||
                       /_/                           
 | 
			
		||||
 | 
			
		||||
### yunohost.sh
 | 
			
		||||
APP=YunoHost
 | 
			
		||||
__  __                  __  __           __ 
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ color() {
 | 
			
		||||
  INFO="${TAB}💡${TAB}${CL}"
 | 
			
		||||
  OS="${TAB}🖥️${TAB}${CL}"
 | 
			
		||||
  OSVERSION="${TAB}🌟${TAB}${CL}"
 | 
			
		||||
  CONTAINERTYPE="${TAB}📦${TAB}${CL}" 
 | 
			
		||||
  CONTAINERTYPE="${TAB}📦${TAB}${CL}"
 | 
			
		||||
  DISKSIZE="${TAB}💾${TAB}${CL}"
 | 
			
		||||
  CPUCORE="${TAB}🧠${TAB}${CL}"
 | 
			
		||||
  RAMSIZE="${TAB}🛠️${TAB}${CL}"
 | 
			
		||||
@@ -283,8 +283,9 @@ base_settings() {
 | 
			
		||||
  MAC=""
 | 
			
		||||
  VLAN=""
 | 
			
		||||
  SSH="no"
 | 
			
		||||
  SSH_AUTHORIZED_KEY=""
 | 
			
		||||
  TAGS="community-script;"
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  # Override default settings with variables from ct script
 | 
			
		||||
  CT_TYPE=${var_unprivileged:-$CT_TYPE}
 | 
			
		||||
  DISK_SIZE=${var_disk:-$DISK_SIZE}
 | 
			
		||||
@@ -292,7 +293,7 @@ base_settings() {
 | 
			
		||||
  RAM_SIZE=${var_ram:-$RAM_SIZE}
 | 
			
		||||
  VERB=${var_verbose:-$VERBOSE}
 | 
			
		||||
  TAGS="${TAGS}${var_tags:-}"
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  # Since these 2 are only defined outside of default_settings function, we add a temporary fallback. TODO: To align everything, we should add these as constant variables (e.g. OSTYPE and OSVERSION), but that would currently require updating the default_settings function for all existing scripts
 | 
			
		||||
  if [ -z "$var_os" ]; then
 | 
			
		||||
    var_os="debian"
 | 
			
		||||
@@ -314,9 +315,9 @@ echo_default() {
 | 
			
		||||
  echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}$var_os${CL}"
 | 
			
		||||
  echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
 | 
			
		||||
  echo -e "${CONTAINERTYPE}${BOLD}${DGN}Container Type: ${BGN}$CT_TYPE_DESC${CL}"
 | 
			
		||||
  echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}GB${CL}"
 | 
			
		||||
  echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE} GB${CL}"
 | 
			
		||||
  echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}${CORE_COUNT}${CL}"
 | 
			
		||||
  echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}${RAM_SIZE}MiB${CL}"
 | 
			
		||||
  echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}${RAM_SIZE} MiB${CL}"
 | 
			
		||||
  echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}${CT_ID}${CL}"
 | 
			
		||||
  if [ "$VERB" == "yes" ]; then
 | 
			
		||||
    echo -e "${SEARCH}${BOLD}${DGN}Verbose Mode: ${BGN}Enabled${CL}"
 | 
			
		||||
@@ -463,13 +464,13 @@ advanced_settings() {
 | 
			
		||||
  if DISK_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3); then
 | 
			
		||||
    if [ -z "$DISK_SIZE" ]; then
 | 
			
		||||
      DISK_SIZE="$var_disk"
 | 
			
		||||
      echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}GB${CL}"
 | 
			
		||||
      echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE} GB${CL}"
 | 
			
		||||
    else
 | 
			
		||||
      if ! [[ $DISK_SIZE =~ $INTEGER ]]; then
 | 
			
		||||
        echo -e "{INFO}${HOLD}${RD} DISK SIZE MUST BE AN INTEGER NUMBER!${CL}"
 | 
			
		||||
        advanced_settings
 | 
			
		||||
      fi
 | 
			
		||||
      echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}GB${CL}"
 | 
			
		||||
      echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE} GB${CL}"
 | 
			
		||||
    fi
 | 
			
		||||
  else
 | 
			
		||||
    exit_script
 | 
			
		||||
@@ -489,9 +490,9 @@ advanced_settings() {
 | 
			
		||||
  if RAM_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3); then
 | 
			
		||||
    if [ -z "$RAM_SIZE" ]; then
 | 
			
		||||
      RAM_SIZE="$var_ram"
 | 
			
		||||
      echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}${RAM_SIZE}MiB${CL}"
 | 
			
		||||
      echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}${RAM_SIZE} MiB${CL}"
 | 
			
		||||
    else
 | 
			
		||||
      echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}${RAM_SIZE}MiB${CL}"
 | 
			
		||||
      echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}${RAM_SIZE} MiB${CL}"
 | 
			
		||||
    fi
 | 
			
		||||
  else
 | 
			
		||||
    exit_script
 | 
			
		||||
@@ -628,9 +629,14 @@ advanced_settings() {
 | 
			
		||||
 | 
			
		||||
  if ADV_TAGS=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Custom Tags?[If you remove all, there will be no tags!]" 8 58 ${TAGS} --title "Advanced Tags" 3>&1 1>&2 2>&3); then
 | 
			
		||||
    if [ -n "${ADV_TAGS}" ]; then
 | 
			
		||||
        ADV_TAGS=${ADV_TAGS:-""} 
 | 
			
		||||
        ADV_TAGS=$(echo "$ADV_TAGS" | tr -d '[:space:]')
 | 
			
		||||
      ADV_TAGS=$(echo "$ADV_TAGS" | tr -d '[:space:]') # Remove whitespace from ADV_TAGS
 | 
			
		||||
      if [[ "$ADV_TAGS" != *"community-script"* ]]; then
 | 
			
		||||
        TAGS="community-script;${ADV_TAGS}"
 | 
			
		||||
      else
 | 
			
		||||
        TAGS="${ADV_TAGS}" # ADV_TAGS already contains "community-script"
 | 
			
		||||
      fi
 | 
			
		||||
    else
 | 
			
		||||
      TAGS="community-script;"
 | 
			
		||||
    fi
 | 
			
		||||
      echo -e "${NETWORK}${BOLD}${DGN}Tags: ${BGN}$TAGS${CL}"
 | 
			
		||||
    else
 | 
			
		||||
@@ -649,6 +655,15 @@ advanced_settings() {
 | 
			
		||||
    echo -e "${ROOTSSH}${BOLD}${DGN}Root SSH Access: ${BGN}$SSH${CL}"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [[ "${SSH}" == "yes" ]]; then
 | 
			
		||||
    SSH_AUTHORIZED_KEY="$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "SSH Authorized key for root (leave empty for none)" 8 58 --title "SSH Key" 3>&1 1>&2 2>&3)"
 | 
			
		||||
 | 
			
		||||
    if [[ -z "${SSH_AUTHORIZED_KEY}" ]]; then
 | 
			
		||||
      echo "Warning: No SSH key provided."
 | 
			
		||||
    fi
 | 
			
		||||
  else
 | 
			
		||||
    SSH_AUTHORIZED_KEY=""
 | 
			
		||||
  fi	  
 | 
			
		||||
  if (whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "VERBOSE MODE" --yesno "Enable Verbose Mode?" 10 58); then
 | 
			
		||||
    VERB="yes"
 | 
			
		||||
  else
 | 
			
		||||
@@ -697,15 +712,15 @@ install_script() {
 | 
			
		||||
        header_info
 | 
			
		||||
        echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings on node $PVEHOST_NAME${CL}"
 | 
			
		||||
        VERB="no"
 | 
			
		||||
        base_settings "$VERB"  
 | 
			
		||||
        base_settings "$VERB"
 | 
			
		||||
        echo_default
 | 
			
		||||
        break
 | 
			
		||||
        ;;
 | 
			
		||||
      2)
 | 
			
		||||
        header_info
 | 
			
		||||
        echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings on node $PVEHOST_NAME (${SEARCH}${BL}Verbose)${CL}"
 | 
			
		||||
        echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings on node $PVEHOST_NAME (${SEARCH}Verbose)${CL}"
 | 
			
		||||
        VERB="yes"
 | 
			
		||||
        base_settings "$VERB"  
 | 
			
		||||
        base_settings "$VERB"
 | 
			
		||||
        echo_default
 | 
			
		||||
        break
 | 
			
		||||
        ;;
 | 
			
		||||
@@ -729,13 +744,13 @@ install_script() {
 | 
			
		||||
check_container_resources() {
 | 
			
		||||
  # Check actual RAM & Cores
 | 
			
		||||
  current_ram=$(free -m | awk 'NR==2{print $2}')
 | 
			
		||||
  current_cpu=$(nproc) 
 | 
			
		||||
  current_cpu=$(nproc)
 | 
			
		||||
 | 
			
		||||
  # Check whether the current RAM is less than the required RAM or the CPU cores are less than required
 | 
			
		||||
  if [[ "$current_ram" -lt "$var_ram" ]] || [[ "$current_cpu" -lt "$var_cpu" ]]; then
 | 
			
		||||
    echo -e "\n${INFO}${HOLD} ${GN}Required: ${var_cpu} CPU, ${var_ram}MB RAM ${CL}| ${RD}Current: ${current_cpu} CPU, ${current_ram}MB RAM${CL}"
 | 
			
		||||
    echo -e "${YWB}Please ensure that the ${APP} LXC is configured with at least ${var_cpu} vCPU and ${var_ram} MB RAM for the build process.${CL}\n"
 | 
			
		||||
    read -r -p "${INFO}${HOLD} May cause data loss! ${INFO} Continue update with under-provisioned LXC? <yes/No>  " prompt  
 | 
			
		||||
    read -r -p "${INFO}${HOLD} May cause data loss! ${INFO} Continue update with under-provisioned LXC? <yes/No>  " prompt
 | 
			
		||||
    # Check if the input is 'yes', otherwise exit with status 1
 | 
			
		||||
    if [[ ! ${prompt,,} =~ ^(yes)$ ]]; then
 | 
			
		||||
      echo -e "${CROSS}${HOLD} ${YWB}Exiting based on user input.${CL}"
 | 
			
		||||
@@ -754,7 +769,7 @@ check_container_storage() {
 | 
			
		||||
  if (( usage > 80 )); then
 | 
			
		||||
    # Prompt the user for confirmation to continue
 | 
			
		||||
    echo -e "${INFO}${HOLD} ${YWB}Warning: Storage is dangerously low (${usage}%).${CL}"
 | 
			
		||||
    read -r -p "Continue anyway? <y/N>  " prompt  
 | 
			
		||||
    read -r -p "Continue anyway? <y/N>  " prompt
 | 
			
		||||
    # Check if the input is 'y' or 'yes', otherwise exit with status 1
 | 
			
		||||
    if [[ ! ${prompt,,} =~ ^(y|yes)$ ]]; then
 | 
			
		||||
      echo -e "${CROSS}${HOLD}${YWB}Exiting based on user input.${CL}"
 | 
			
		||||
@@ -812,6 +827,7 @@ build_container() {
 | 
			
		||||
  export PASSWORD="$PW"
 | 
			
		||||
  export VERBOSE="$VERB"
 | 
			
		||||
  export SSH_ROOT="${SSH}"
 | 
			
		||||
  export SSH_AUTHORIZED_KEY
 | 
			
		||||
  export CTID="$CT_ID"
 | 
			
		||||
  export CTTYPE="$CT_TYPE"
 | 
			
		||||
  export PCT_OSTYPE="$var_os"
 | 
			
		||||
 
 | 
			
		||||
@@ -255,4 +255,11 @@ EOF
 | 
			
		||||
  fi
 | 
			
		||||
  echo "bash -c \"\$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/${app}.sh)\"" >/usr/bin/update
 | 
			
		||||
  chmod +x /usr/bin/update
 | 
			
		||||
 | 
			
		||||
  if [[ -n "${SSH_AUTHORIZED_KEY}" ]]; then
 | 
			
		||||
    mkdir -p /root/.ssh
 | 
			
		||||
    echo "${SSH_AUTHORIZED_KEY}" > /root/.ssh/authorized_keys
 | 
			
		||||
    chmod 700 /root/.ssh
 | 
			
		||||
    chmod 600 /root/.ssh/authorized_keys
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user