{"id":51918425,"url":"https://github.com/oneclickvirt/virtualizor-docker","last_synced_at":"2026-07-27T14:30:36.358Z","repository":{"id":368861125,"uuid":"965143628","full_name":"oneclickvirt/virtualizor-docker","owner":"oneclickvirt","description":"Run Virtualizor VPS Control Panel in a Docker container. Includes easy setup script, Docker Compose support, and pre-built images. Simplify deployment and management of your Virtualizor master server.","archived":false,"fork":false,"pushed_at":"2026-07-02T13:25:14.000Z","size":76,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-07-02T15:18:50.905Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/ivstiv/virtualizor-docker","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oneclickvirt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-04-12T14:06:26.000Z","updated_at":"2026-07-02T13:26:18.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/oneclickvirt/virtualizor-docker","commit_stats":null,"previous_names":["oneclickvirt/virtualizor-docker"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/oneclickvirt/virtualizor-docker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oneclickvirt%2Fvirtualizor-docker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oneclickvirt%2Fvirtualizor-docker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oneclickvirt%2Fvirtualizor-docker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oneclickvirt%2Fvirtualizor-docker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oneclickvirt","download_url":"https://codeload.github.com/oneclickvirt/virtualizor-docker/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oneclickvirt%2Fvirtualizor-docker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35955550,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-27T02:00:06.776Z","response_time":101,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-27T14:30:35.462Z","updated_at":"2026-07-27T14:30:36.305Z","avatar_url":"https://github.com/oneclickvirt.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Virtualizor inside Docker\n\nThis repository builds a Docker image for a Virtualizor master-only panel. It uses Ubuntu 24.04 LTS, s6-overlay v3, persistent host volumes, and examples for both local builds and prebuilt images.\n\n本仓库用于构建 Virtualizor 主控面板容器镜像。当前默认使用 Ubuntu 24.04 LTS、s6-overlay v3、主机持久化目录，并提供本地构建和预构建镜像两种 compose 示例。\n\n## Images\n\n| Maintainer | Repository |\n| :--------: | ---------- |\n| ivstiv | [![Docker Pulls](https://img.shields.io/docker/pulls/ivstiv/virtualizor-docker?logo=docker\u0026logoColor=white\u0026style=for-the-badge)](https://hub.docker.com/r/ivstiv/virtualizor-docker \"open on dockerhub\") |\n| Sonoran Software | [![Docker Pulls](https://img.shields.io/docker/pulls/sonoransoftware/virtualizor-docker?logo=docker\u0026logoColor=white\u0026style=for-the-badge)](https://hub.docker.com/r/sonoransoftware/virtualizor-docker \"open on dockerhub\") |\n\nThe GitHub Actions workflow builds `linux/amd64` and `linux/arm64` images and can push to GHCR plus Docker Hub when Docker Hub secrets are configured.\n\n## Configuration\n\nCopy the example config before using `virtualizor.sh`:\n\n```sh\ncp example-config.sh config.sh\n```\n\n| Variable | Default/example | Description |\n| --- | --- | --- |\n| `USER_HTTP_PORT` | `4082` | Host port for the user HTTP panel |\n| `USER_HTTPS_PORT` | `4083` | Host port for the user HTTPS panel |\n| `ADMIN_HTTP_PORT` | `4084` | Host port for the admin HTTP panel |\n| `ADMIN_HTTPS_PORT` | `4085` | Host port for the admin HTTPS panel |\n| `PUID` | `1000` | Runtime user id for EMPS files |\n| `PGID` | `1000` | Runtime group id for EMPS files |\n| `EMAIL` | `your@email.here` | Virtualizor admin email |\n| `PANEL_DIR` | `/opt/virtualizor` | Host data directory used by `virtualizor.sh` |\n| `PASSWORD` | unset for script, `changeme` in compose examples | Root password passed to the container |\n| `VIRTUALIZOR_MEM_LIMIT` | `4g` | Container memory limit |\n| `VIRTUALIZOR_CPUS` | `2` | Container CPU limit |\n| `AUTO_RESTART_ON_UNHEALTHY` | `true` | Healthcheck restarts Virtualizor services once before reporting unhealthy |\n\n`PUID`, `PGID`, ports, `EMAIL`, and `PASSWORD` are validated at startup. Empty passwords are rejected; the example `changeme` value prints a warning.\n\n## Deploy With Docker Compose\n\nLocal build:\n\n```sh\ndocker compose up -d --build\n```\n\nPrebuilt image:\n\n```sh\ndocker compose -f dockerhub_docker-compose.yml up -d\n```\n\nBoth compose files expose the same container ports:\n\n```text\n4082 -\u003e user HTTP\n4083 -\u003e user HTTPS\n4084 -\u003e admin HTTP\n4085 -\u003e admin HTTPS\n```\n\nThe panel should be available at:\n\n```text\nhttp://SERVER_IP:4084/\nhttps://SERVER_IP:4085/\n```\n\nVirtualizor packages its own EMPS stack, including MySQL and web services, inside the persisted directories. There are no separate MySQL or Redis containers to declare with `depends_on`.\n\n## Deploy With virtualizor.sh\n\nBuild the local image:\n\n```sh\nsh virtualizor.sh build\n```\n\nInstall and run the panel:\n\n```sh\nsh virtualizor.sh install\n```\n\nIf `PASSWORD` is not exported, the script prompts for it. When `/dev/tty` or `stty` is unavailable, it falls back to a visible stdin prompt instead of failing with an unclear TTY error.\n\nUseful commands:\n\n```sh\nsh virtualizor.sh start\nsh virtualizor.sh stop\nsh virtualizor.sh shell\nsh virtualizor.sh reinstall\nsh virtualizor.sh uninstall\n```\n\n`reinstall` and `uninstall` are destructive and ask for confirmation. For non-interactive automation, set `VIRTUALIZOR_ASSUME_YES=1` or pass `--yes`.\n\n## Logs And Health\n\nInstaller and runtime messages are written in English and Chinese where this image controls the output. The installer tees output to both Docker logs and `/root/virtualizor.log`.\n\n```sh\ndocker logs virtualizor\ndocker compose logs -f virtualizor\n```\n\nThe image includes a Docker `HEALTHCHECK`. It probes Virtualizor HTTP/HTTPS ports and, when `AUTO_RESTART_ON_UNHEALTHY=true`, tries `/etc/init.d/virtualizor restart` once before reporting the container unhealthy.\n\n```sh\ndocker inspect --format '{{json .State.Health}}' virtualizor\n```\n\n## Persistent Data\n\nDo not remove these host directories unless you want a fresh install:\n\n| Host path in compose | Container path | Purpose |\n| --- | --- | --- |\n| `./data/emps` | `/usr/local/emps` | EMPS runtime, PHP, MySQL, web services |\n| `./data/virtualizor` | `/usr/local/virtualizor` | Virtualizor panel files, config, internal data |\n| `./data/init` | `/etc/init.d` | Virtualizor init scripts installed by the panel |\n| `./data/cron` | `/etc/cron.d` | Virtualizor cron entries |\n\nBackup example:\n\n```sh\ndocker compose stop virtualizor\ntar -czf virtualizor-data-$(date +%F).tgz data\ndocker compose start virtualizor\n```\n\nRestore example:\n\n```sh\ndocker compose down\nrm -rf data\ntar -xzf virtualizor-data-YYYY-MM-DD.tgz\ndocker compose up -d\n```\n\nThe container treats empty `/usr/local/emps` or `/usr/local/virtualizor` as a fresh or incomplete install and re-runs the installer. If you intentionally want a clean database and panel state, stop the container and delete the `data` directory first.\n\n## Build And Publish\n\nLocal multi-arch build:\n\n```sh\ndocker buildx build \\\n  --platform linux/amd64,linux/arm64 \\\n  -t virtualizor-docker:local \\\n  .\n```\n\nThe workflow in `.github/workflows/DockerHub.yml` publishes:\n\n- `latest` on the default branch\n- the Git tag when building from a tag\n- a manual `workflow_dispatch` tag when provided\n- `sha-\u003cshortsha\u003e` for every run\n\nTo push Docker Hub images, configure `DOCKER_HUB_USERNAME` and `DOCKER_HUB_ACCESS_TOKEN` repository secrets. GHCR publishing uses the built-in `GITHUB_TOKEN`.\n\n## Notes\n\n- The Dockerfile downloads the s6-overlay tarball matching the target architecture and verifies upstream SHA256 files.\n- The Virtualizor installer downloads EMPS over HTTPS and selects the ionCube loader that matches the EMPS PHP runtime instead of hardcoding PHP 5.3.\n- If EMPS ever ships an end-of-life PHP lower than `MIN_EMPS_PHP_VERSION` (`7.4` by default), installation stops unless `ALLOW_EOL_EMPS_PHP=true` is explicitly set.\n\n## Credits And Links\n\n- This was initially developed as a standalone installation image by [Nottt](https://github.com/Nottt?tab=repositories). Ivstiv preserved the original license.\n- [s6-overlay project](https://github.com/just-containers/s6-overlay)\n- [Virtualizor home page](https://www.virtualizor.com)\n- [Sonoran Software Systems LLC](https://sonoran.software) uses Virtualizor day to day for their [VPS server hosting](https://sonoranservers.com/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foneclickvirt%2Fvirtualizor-docker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foneclickvirt%2Fvirtualizor-docker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foneclickvirt%2Fvirtualizor-docker/lists"}