{"id":30146510,"url":"https://github.com/apioo/fusio-plant","last_synced_at":"2026-03-17T08:33:19.055Z","repository":{"id":292723595,"uuid":"965588242","full_name":"apioo/fusio-plant","owner":"apioo","description":"A server management tool to easily self-host apps on your server.","archived":false,"fork":false,"pushed_at":"2026-01-16T22:24:52.000Z","size":329,"stargazers_count":7,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-17T11:18:01.435Z","etag":null,"topics":["api","devops","docker","docker-compose","self-hosted","server-management","server-manager","server-panel"],"latest_commit_sha":null,"homepage":"https://www.fusio-project.org/","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/apioo.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":"chriskapp","patreon":"fusio","custom":"https://www.paypal.me/fusioapi"}},"created_at":"2025-04-13T13:50:47.000Z","updated_at":"2026-01-16T22:14:10.000Z","dependencies_parsed_at":"2025-07-05T14:30:28.538Z","dependency_job_id":"211fb6a6-12a4-4b22-aa1f-bc4f6af5493e","html_url":"https://github.com/apioo/fusio-plant","commit_stats":null,"previous_names":["apioo/fusio-plant"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/apioo/fusio-plant","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apioo%2Ffusio-plant","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apioo%2Ffusio-plant/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apioo%2Ffusio-plant/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apioo%2Ffusio-plant/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/apioo","download_url":"https://codeload.github.com/apioo/fusio-plant/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apioo%2Ffusio-plant/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30619153,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-17T08:10:05.930Z","status":"ssl_error","status_checked_at":"2026-03-17T08:10:04.972Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["api","devops","docker","docker-compose","self-hosted","server-management","server-manager","server-panel"],"created_at":"2025-08-11T09:38:58.247Z","updated_at":"2026-03-17T08:33:19.032Z","avatar_url":"https://github.com/apioo.png","language":"PHP","funding_links":["https://github.com/sponsors/chriskapp","https://patreon.com/fusio","https://www.paypal.me/fusioapi"],"categories":[],"sub_categories":[],"readme":"\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://www.fusio-project.org/\" target=\"_blank\"\u003e\u003cimg src=\"https://www.fusio-project.org/img/fusio_64px.png\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n# Fusio Plant\n\nFusio Plant is an open-source server panel to easily self-host apps on your server.\nIt can be seen as a modern lightweight alternative to cPanel or Plesk with a simple,\nperformant and clean tech-stack.\n\n## Goals\n\n* Run multiple apps cost efficiently on your server\n* Provide a web-based admin panel to manage and monitor all apps\n* Exposes a REST API to control your server\n* Automatically obtain SSL certificates with certbot\n* Keep your server clean and lightweight, we basically only install Nginx and Docker\n\n## Non-Goals\n\n* Run apps across multiple hosts, for this you should take a look at [Kubernetes](https://kubernetes.io/)\n\n## Installation\n\nTo install Fusio Plant on your server you only need to execute the `install.sh` script as root.\nNote currently only Ubuntu as OS is supported, we recommend running this script on a fresh Ubuntu\ninstallation. Download and run the `install.sh` script with the following command:\n\n```bash\ncurl -s https://raw.githubusercontent.com/apioo/fusio-plant/refs/heads/main/install.sh -o ./install.sh \u0026\u0026 chmod +x ./install.sh \u0026\u0026 ./install.sh\n```\n\nThe script installs on your server only Nginx, Docker and the Fusio Plant executor, all other\napps and also Plant itself will run as docker container.\n\nNote: On installation the \"install\" script asks for a domain of your server. Please make sure\nthat the DNS A/AAAA record of your domain already points to your server. The domain is only needed\nto access the Plant App and API, for the actual apps which you host with Plant you can select\ndifferent domain names. It is recommended to use a domain which is not easy to guess\nlike `server-1ec0bf62.mycontrol.com`, in this case you could access the backend with:\n\n* API: `server-1ec0bf62.mycontrol.com`\n* App: `server-1ec0bf62.mycontrol.com/apps/plant`\n\nChoosing such a domain name is just an additional security layer so that it is more challenging to\naccess the backend app and API to control your server. If you access the app, you still need to\nauthenticate with the username and password which was generated by the installation script.\n\n## Folder\n\nThe following list covers all important folders of your Plant server.\n\n### /docker\n\nContains all projects and each project contains a `docker-compose.yml` file.\n\n### /opt/plant\n\nContains the plant executor which receives commands through the `/opt/plant/input` pipe and\nwrites responses back to the `/opt/plant/output` folder. Since the plant app also runs in a\ncontainer those paths are mounted into the plant app to execute commands on the\nhost. The [executor](./bash/executor.sh) is a simple bash script that receives and executes commands.\n\n### /cache\n\nThe cache folder which is used in case [Nginx content caching](https://docs.nginx.com/nginx/admin-guide/content-cache/content-caching/)\nis activated. \n\n### /backup\n\nPlant automatically generates daily backups for every used mysql image. Those backups are\nplaced in this folder for each project.\n\n## Preset\n\nIf you create a new project at Plant you can select a preset. A preset is basically a predefined\nconfiguration to run a specific app, in this example wordpress s.\n![preset](./resources/static/project_new.png)\n\nIf you select a preset all configured apps are loaded. To contribute a preset you only need to add\na new class to the [preset folder](https://github.com/apioo/fusio-plant/tree/main/src/Preset).\n\n## Deployment\n\nOne important concept of Plant is that your server only runs existing docker images, it does not\ncontain any tools to build such an image. In case you want to run your custom app you need a docker\nimage of this app, for this you could use i.e. the GitHub docker registry, but there are also many\nother alternative ways to build a docker image for your app. This has the great advantage that we\ndon't need to install any build tools on the host and keep our server clean from the build process.\n\n### GitHub\n\nOn GitHub you can use the following GitHub action to build and push a docker image\nto the GitHub registry. Then you can use the image `ghcr.io/[user]/[repository]:main` in your project.\nFor this you only need to add an action `.github/workflows/docker.yml` with the following config:\n\n```yaml\nname: Docker\non:\n  push:\n    branches:\n      - 'main'\n    tags:\n      - 'v*'\nenv:\n  REGISTRY: ghcr.io\n  IMAGE_NAME: ${{ github.repository }}\njobs:\n  push_to_registry:\n    name: Push Docker image to Docker Hub\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      packages: write\n    steps:\n      - name: Check out the repo\n        uses: actions/checkout@v4\n      - name: Log in to the Container registry\n        uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9\n        with:\n          registry: ${{ env.REGISTRY }}\n          username: ${{ github.actor }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n      - name: Extract metadata (tags, labels) for Docker\n        id: meta\n        uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38\n        with:\n          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}\n      - name: Build and push Docker image\n        uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc\n        with:\n          context: .\n          push: true\n          tags: ${{ steps.meta.outputs.tags }}\n          labels: ${{ steps.meta.outputs.labels }}\n```\n\nNote: In case your repository is private you need to login to access the docker registry.\nIt is recommended to use an access token which has only the rights to pull images from\nthe registry.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapioo%2Ffusio-plant","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fapioo%2Ffusio-plant","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapioo%2Ffusio-plant/lists"}