* Let docker-install.sh take its three answers up front
The script asked three questions with no way to answer them in advance,
so a Docker container could not be deployed unattended: Portainer, the
Portainer Agent, and whether to expose the TCP socket.
Each now reads a variable and prompts only when it is unset, the same
shape install/forgejo-runner-install.sh already uses:
var_portainer yes | no
var_portainer_agent yes | no
var_docker_socket n | l (127.0.0.1) | a (0.0.0.0)
Interactive behaviour is unchanged — with nothing set, all three still
ask exactly as before.
The matching declaration for the script's PocketBase record, which the
website generator reads to offer these as form fields:
"app_vars": [
{"name":"var_portainer","label":"Install Portainer","type":"boolean","default":"no"},
{"name":"var_portainer_agent","label":"Install Portainer Agent","type":"boolean","default":"no",
"help":"Only used when Portainer itself is not installed"},
{"name":"var_docker_socket","label":"Expose Docker TCP socket","type":"select",
"options":["n","l","a"],"default":"n",
"help":"l = 127.0.0.1 only, a = all interfaces (insecure)"}
]
CONTRIBUTING.md documents the convention so the next script follows it.
* Let docker-install.sh take its three answers up front
The script asked three questions with no way to answer them in advance,
so a Docker container could not be deployed unattended: Portainer, the
Portainer Agent, and whether to expose the TCP socket.
Each now reads a variable and prompts only when it is unset, the same
shape install/forgejo-runner-install.sh already uses:
var_portainer yes | no
var_portainer_agent yes | no
var_docker_socket n | l (127.0.0.1) | a (0.0.0.0)
Interactive behaviour is unchanged — with nothing set, all three still
ask exactly as before.
The matching declaration for the script's PocketBase record, which the
website generator reads to offer these as form fields:
"app_vars": [
{"name":"var_portainer","label":"Install Portainer","type":"boolean","default":"no"},
{"name":"var_portainer_agent","label":"Install Portainer Agent","type":"boolean","default":"no",
"help":"Only used when Portainer itself is not installed"},
{"name":"var_docker_socket","label":"Expose Docker TCP socket","type":"select",
"options":["n","l","a"],"default":"n",
"help":"l = 127.0.0.1 only, a = all interfaces (insecure)"}
]
CONTRIBUTING.md documents the convention so the next script follows it.
* Let forgejo-runner and pangolin take their answers up front
forgejo-runner already exported two of the three values its install
script requires, but not var_forgejo_runner_uuid — so an unattended
install passed the ct-level guard and then stopped at a prompt inside
the container, which is the one place nobody can answer it. The guard
missed it for the same reason.
pangolin asked for its URL and email with no way to supply them. Both
sides are needed: the read in install/ now only fires when the variable
is unset, and ct/ exports it, because lxc-attach carries the caller's
environment but only what was exported.
Reverts the docker change from the previous commit; it is superseded by
work on another branch.
* Teach the PocketBase workflows the capability fields
All three wrote fields the site no longer reads. The slash bot and the
AI bot accepted has_arm=true and github=owner/repo; push-json mapped
has_arm into the payload. After the schema change those writes would
have gone to columns that are not there.
architectures and platforms are multi-selects over a closed set, so
both bots reject an unknown value instead of storing it — the same
guarantee the field type gives in the admin UI.
push-json still reads has_arm when architectures is absent, because
ProxmoxVED's json files carry the old key until they are converted.
* Drop the docker change again
It came back through the merge in 35735dae: the branch was pushed
before the revert, so merging the remote copy restored it. Removing it
forward rather than rewriting history that is already published.
Proxmox VE Helper-Scripts
One-command installations for services, containers, and VMs on Proxmox VE
A community project — built on the foundation of @tteck's original work
What is this?
Simplify your Proxmox VE setup with community-driven automation scripts.
Install and configure popular self-hosted services with a single command — no manual package hunting, no config file archaeology. Paste a command into your Proxmox shell, answer a few prompts, and your container or VM is up and running.
The collection covers hundreds of services across categories like home automation, media servers, networking tools, databases, monitoring stacks, and more.
Requirements
| Component | Details |
|---|---|
| Proxmox VE | Version 8.4, 9.0, 9.1, or 9.2 |
| Host OS | Proxmox VE (Debian-based) |
| Access | Root shell access on the Proxmox host |
| Network | Internet connection required during installation |
Getting Started
The fastest way to find and run scripts:
- Go to community-scripts.org
- Search for the service you want (e.g. "Home Assistant", "Nginx Proxy Manager", "Jellyfin")
- Copy the one-line install command from the script page
- Open your Proxmox Shell and paste it
- Choose between Default or Advanced setup and follow the prompts
Each script page documents what the container includes, default resource allocation, and post-install notes.
How Scripts Work
Every script follows the same pattern:
Default mode — Picks sensible resource defaults (CPU, RAM, storage) and asks only the minimum required questions. Most installs finish in under five minutes.
Advanced mode — Gives you full control over container settings, networking, storage backends, and application-level configuration before anything is installed.
After installation, each container ships with a post-install helper accessible from the Proxmox shell. It handles common tasks like:
- Applying updates to the installed service
- Changing application settings without manually editing config files
- Basic troubleshooting and log access
What's Included
The repository covers a wide range of categories. A few examples:
| Category | Examples |
|---|---|
| Home Automation | Home Assistant, Zigbee2MQTT, ESPHome, Node-RED |
| Media | Jellyfin, Plex, Radarr, Sonarr, Immich |
| Networking | AdGuard Home, Nginx Proxy Manager, Pi-hole, Traefik |
| Monitoring | Grafana, Prometheus, Uptime Kuma, Netdata |
| Databases | PostgreSQL, MariaDB, Redis, InfluxDB |
| Security | Vaultwarden, CrowdSec, Authentik |
| Dev & Tools | Gitea, Portainer, VS Code Server, n8n |
Browse the full list at community-scripts.org/categories — new scripts are added regularly.
Contributing
This project runs on community contributions. Whether you want to write new scripts, improve existing ones, or just report a bug — every bit helps.
Where to start
| I want to… | Go here |
|---|---|
| Add a new script | ProxmoxVED — new scripts are tested here first |
| Fix or improve an existing script | Contributing Guidelines — open a PR in this repo |
| Report a bug or broken script | Issues |
| Request a new script or feature | Discussions |
| Report a security vulnerability | Security Policy |
| Get help or chat with other users | Discord |
Before you open a PR
- New scripts go to ProxmoxVED, not here. PRs with new scripts opened directly against this repo will be closed.
- Bug fixes and improvements to existing scripts belong in this repo — read the Contributing Guidelines first.
- Keep PRs focused. One fix or feature per PR.
- Document what your script installs and any non-obvious decisions in the corresponding JSON metadata file.
Core Team
![]() MickLesk |
![]() michelroegl-brunner |
![]() BramSuurdje |
![]() CrazyWolf13 |
![]() tremor021 |
![]() vhsdream |
![]() asylumexp |
Project Activity
Support the Project
This project is maintained by volunteers. All infrastructure costs come out of pocket, and the work is done in people's spare time.
30% of all donations are forwarded directly to cancer research and hospice care — a cause that was important to tteck.
License
This project is licensed under the MIT License — free to use, modify, and redistribute for personal and commercial purposes.
See the full license text in LICENSE.
Maintained and expanded by the community · In memory of tteck
Proxmox® is a registered trademark of Proxmox Server Solutions GmbH






