Hestia local development setup instructions

To encourage code contributions to this project it would be great if there was an easy way to get a local instance of Hestia running (I’m on macOS) for development of the UI etc.

It doesn’t even need to be/ideally wouldn’t be a “fully operational local installation” that fills my machine with packages I don’t use. Some development/fixture data is fine as long as there’s a UI that can be navigated around and updates with changes to the code.

Does Hestia have such a local development environment?

I came across the Developing/Contributing to Hestia Control Panel document, but the checklist of “Existing previous Hestia installation” confused me, and I don’t see any instructions for getting a local development instance up and running.

You can clone the github project locally or in your server and then develop then you can commit your changes back to your repository and then send your pull request.

It is always wise to ask if your pull request will be included and / or maintained by the hestiaCP team, otherwise your work will never be used.

Use a vm and install Debian or Ubuntu.

You will not be able to run Hestia on OSX due to the missing packages

1 Like

This is only partitialy right: If you fix an issue or a feature request from Issues · hestiacp/hestiacp · GitHub, it will be included to 99% (last 1% depends on code quality and design). If you develop something new and big, for example a whole interface redesign, its a good idea to step in contact with the dev team first, because we can’t merge every PR.

Thanks for the replies. What is the development workflow for you guys working on Hestia?

Sounds like some Docker-based dev environment may help people to get something up and running quickly. Or some ready-to-go VM package.

Create a GitHub account and clone the hestiaCP project.

Install hestiaCP in your server.

Make your changes in your server and test.

When you are satisfied, go back to your GitHub repo and commit your changes.

Take into account the install scripts needed and the update scripts if needed too.

Submit a pull request

Setting up hestia isnt really hard, setup a vps, run bash script, done. Providing images, doesnt matter if docker, lxc or kvm would be a little bit overkill.

1 Like

I have currently a running that I run for most of the testing and can connect over sftp to do most testing.

Also have Proxmox server that I can use with some “prebuild” LXC image that I use with out Hestia installed before for both Debian, Ubuntu but contains git and wget and some other packages

(Or just use Hetzner cloud for it)


you can install Hestia and run the tests you want to use … If needed:

Depending on the changes what I need to make there are 3 methods I use to test:

  1. Installer: create a VM build my packages from a branch I committed to a repo and run it. Worse case reset it with a snap shot
  2. Large change the might break my “test” server or Upgrade: create a VM install again main branch and update to last version by building packages as needed
  3. Small changes: Have a VM running without client data that I use to run 90% of all the test. I can edit it localy and push changes to the server over sftp or GitHub. With small changes sftp is a lot faster

Thanks again for the replies some useful information. I see this has been resolved, but I’ll just reiterate the main point I’m getting at here.

I’m aware I can install a blank Hestia from scratch on a local VM or a remote VPS.

But it would be great if a small development server (i.e. that just served /web directory) could be ran locally, with placeholder/test data already in place for working on the UI. e.g. I want to make a change in my local editor and refresh my fast local instance of the UI to immediately see the CSS changes I made.

The idea/discussion point is around lowering the barrier of entry for new users of Hestia, to be able to quickly and easily contribute to the UI development, that could do with a lot of work, as mentioned in various GitHub issues like #1906, #2798 and #2859.

The main issue that all the changes are not processed inside the php it self but run with exec and processed with bash. It would mean that we need to write Hestia twice 1 for real and one for the web panel testing.

Understood, thank you. Just wanted to air this to get more information and where people stand. This has been provided :+1:

I spent a bit of time setting up an Ubuntu VM for development on macOS using Multipass, with the repository mapped so I can still edit in my vscode outside of the VM.

If you spot any improvements to these steps please let me know! Happy to add this to docs when finalised.

  1. Clone a fork of Hestia to local machine

    git clone [email protected]:AlecRust/hestiacp.git
  2. Install Multipass

    brew install --cask multipass
  3. Create Ubuntu VM

    multipass launch --name hestiacp-dev
  4. Map repository to home directory within VM

    multipass mount $HOME/projects/hestiacp hestiacp-dev:/home/ubuntu/hestiacp
  5. Login to Ubuntu VM as root

    multipass exec hestiacp-dev -- sudo bash
  6. Navigate to Hestia /src directory

    cd hestiacp/src
  7. Compile Hestia

    ./hst_autocompile.sh --all --noinstall --keepbuild '~localsrc'
  8. Navigate to Hestia /install directory

    cd ../install
  9. Install Hestia

    bash hst-install.sh --interactive no --email [email protected] --password password123 --hostname cp.hestiacp-dev.com -f
  10. Reboot (and exit SSH session)

  11. Get IP address of instance

    multipass list
  12. Visit Hestia IP in browser with port, bypass SSL warning and login with admin/password123


  • I get lots of errors on the “Compile Hestia” step, though it does finish. Perhaps I’m missing a step though? Example of repeated error:

    make: *** [Makefile:1053: ext/gmp/gmp.lo] Error 1
    cc: fatal error: Killed signal terminated program cc1
    compilation terminated.
  • How do I recompile the CSS/JS after changing it? I see there are minified versions, but where does this compilation happen?

I use Minify - Visual Studio Marketplace + VScode for it in the near feature we should create a better system for it…

Thanks, good to know.

But even if I change the minified version, my changes don’t show though I see the change on the file system. Is there some Nginx caching or something on the control panel I need to disable?

You can enable “debug” mode in the settings then the cache will be disabled

Also you can also join Discord:

Thanks for the “debug mode” tip. That didn’t immediately resolve my “unable to see CSS change” issue from the steps above though, as it looks like the install script empties /home/ubuntu/hestiacp and installs all files to /usr/local/hestia. But if I mount my local /hestiacp/web repository directory to /usr/local/hestia/web in the VM, Hestia doesn’t load with Unable able to load required libaries error.

The repository file structure seems different from the end result install, with different files present etc. so I assume my plan of mounting a directory from my repo on macOS into the VM, isn’t going to work.

I assume you all work entirely within the VM then? Perhaps I can use the SSH extension for vscode and set up Git within the VM.

Finally, do you happen to have any ideas about the compile errors on a fresh Ubuntu 20.04 image, or is this normal?

How many memory did you assign?

You can also use --hestia instead of all then it will only build the hestia package

How many memory did you assign?

Looks like you can’t specify the memory with Multipass, but it has 1GB:

❯ multipass info hestiacp-dev
Name:           hestiacp-dev
State:          Running
Release:        Ubuntu 20.04.4 LTS
Image hash:     be3d62b234d9 (Ubuntu 20.04 LTS)
Load:           0.02 0.16 0.18
Disk usage:     3.9G out of 4.7G
Memory usage:   253.7M out of 969.8M

You can also use --hestia instead of all then it will only build the hestia package

Thanks, this is much faster with no compile errors. I thought I had tried this and it failed, guess not.

Any chance you could confirm how your Git repository is set up? Is your repository initialised within the VM that you use for development?

1GB is to low to build Hestia-php. I think you can specify the memory via command line

-m, --mem <mem>      Amount of memory to allocate. Positive integers, in
                       bytes, or with K, M, G suffix.