|
|
# Contributing to Hestia’s development
|
|
|
|
|
|
Hestia is an open-source project, and we welcome contributions from the community. Please read the [contributing guidelines](https://github.com/hestiacp/hestiacp/blob/main/CONTRIBUTING.md) for additional information.
|
|
|
|
|
|
Hestia is designed to be installed on a web server. To develop Hestia on your local machine, a virtual machine is recommend.
|
|
|
|
|
|
::: warning
|
|
|
Development builds are unstable. If you encounter a bug please [report it via GitHub](https://github.com/hestiacp/hestiacp/issues/new/choose) or [submit a Pull Request](https://github.com/hestiacp/hestiacp/pulls).
|
|
|
:::
|
|
|
|
|
|
## Creating a virtual machine for development
|
|
|
|
|
|
These are example instructions for creating a virtual machine running Hestia for development.
|
|
|
|
|
|
These instructions use [Multipass](https://multipass.run/) to create the VM. Feel free to adapt the commands for any virtualization software you prefer.
|
|
|
|
|
|
::: warning
|
|
|
Sometimes the mapping between the source code directory on your local machine to the directory in the VM can be lost with a "failed to obtain exit status for remote process" error. If this happens simply unmount and remount e.g.
|
|
|
|
|
|
```bash
|
|
|
multipass unmount hestia-dev
|
|
|
multipass mount $HOME/projects/hestiacp hestia-dev:/home/ubuntu/hestiacp
|
|
|
```
|
|
|
|
|
|
:::
|
|
|
|
|
|
1. [Install Multipass](https://multipass.run/install) for your OS.
|
|
|
|
|
|
1. [Fork Hestia](https://github.com/hestiacp/hestiacp/fork) and clone the repository to your local machine
|
|
|
|
|
|
```bash
|
|
|
git clone https://github.com/YourUsername/hestiacp.git $HOME/projects
|
|
|
```
|
|
|
|
|
|
1. Create an Ubuntu VM with at least 2G of memory and 15G of disk space
|
|
|
|
|
|
```bash
|
|
|
multipass launch --name hestia-dev --memory 2G --disk 15G
|
|
|
```
|
|
|
|
|
|
1. Map your cloned repository to the VM's home directory
|
|
|
|
|
|
```bash
|
|
|
multipass mount $HOME/projects/hestiacp hestia-dev:/home/ubuntu/hestiacp
|
|
|
```
|
|
|
|
|
|
1. SSH into the VM as root and install some required packages
|
|
|
|
|
|
```bash
|
|
|
multipass exec hestia-dev -- sudo bash
|
|
|
sudo apt update && sudo apt install -y jq libjq1
|
|
|
```
|
|
|
|
|
|
1. Outside of the VM (in a new terminal) ensure [Node.js](https://nodejs.org/)
|
|
|
16 or later is installed
|
|
|
|
|
|
```bash
|
|
|
node --version
|
|
|
```
|
|
|
|
|
|
1. Install dependencies and build the theme files:
|
|
|
|
|
|
```bash
|
|
|
npm install
|
|
|
npm run build
|
|
|
```
|
|
|
|
|
|
1. Back in the VM terminal, navigate to `/src` and build Hestia packages
|
|
|
|
|
|
```bash
|
|
|
cd src
|
|
|
./hst_autocompile.sh --hestia --noinstall --keepbuild '~localsrc'
|
|
|
```
|
|
|
|
|
|
1. Navigate to `/install` and install Hestia
|
|
|
|
|
|
_(update the [installation flags](../introduction/getting-started#list-of-installation-options) to your liking, note that login credentials are set here)_
|
|
|
|
|
|
```bash
|
|
|
cd ../install
|
|
|
bash hst-install-ubuntu.sh -D /tmp/hestiacp-src/deb/ --interactive no --email admin@example.com --password Password123 --hostname demo.hestiacp.com -f
|
|
|
```
|
|
|
|
|
|
1. Reboot the VM (and exit SSH session)
|
|
|
|
|
|
```bash
|
|
|
reboot
|
|
|
```
|
|
|
|
|
|
1. Find the IP address of the VM
|
|
|
|
|
|
```bash
|
|
|
multipass list
|
|
|
```
|
|
|
|
|
|
1. Visit the VM's IP address in your browser using the default Hestia port and login with `admin`/`Password123`
|
|
|
|
|
|
_(proceed past any SSL errors you see when loading the page)_
|
|
|
|
|
|
```bash
|
|
|
e.g. https://192.168.64.15:8083
|
|
|
```
|
|
|
|
|
|
Hestia is now running in a virtual machine. If you'd like to make changes to the source code and test them in your browser, please continue to the next section.
|
|
|
|
|
|
## Making changes to Hestia
|
|
|
|
|
|
After setting up Hestia in a VM you can now make changes to the source code at `$HOME/projects/hestiacp` on your local machine (outside of the VM) using your editor of choice.
|
|
|
|
|
|
The following are example instructions for making a change to Hestia's UI and testing it locally.
|
|
|
|
|
|
1. At the root of the project on your local machine, ensure the latest packages are installed
|
|
|
|
|
|
```bash
|
|
|
npm install
|
|
|
```
|
|
|
|
|
|
1. Make a change to a file that we can later test, then build the UI assets
|
|
|
|
|
|
_e.g. change the body background color to red in `web/css/src/base.css` then run:_
|
|
|
|
|
|
```bash
|
|
|
npm run build
|
|
|
```
|
|
|
|
|
|
1. SSH into the VM as root and navigate to `/src`
|
|
|
|
|
|
```bash
|
|
|
multipass exec hestia-dev -- sudo bash
|
|
|
cd src
|
|
|
```
|
|
|
|
|
|
1. Run the Hestia build script
|
|
|
|
|
|
```bash
|
|
|
./hst_autocompile.sh --hestia --install '~localsrc'
|
|
|
```
|
|
|
|
|
|
1. Reload the page in your browser to see your changes
|
|
|
|
|
|
::: info
|
|
|
A backup is created each time the Hestia build script is run. If you run this a lot it can fill up your VM's disk space.
|
|
|
You can delete the backups by running `rm -rf /root/hst_backups` as root user on the VM.
|
|
|
:::
|
|
|
|
|
|
Please refer to the [contributing guidelines](https://github.com/hestiacp/hestiacp/blob/main/CONTRIBUTING.md) for more details on submitting code changes for review.
|
|
|
|
|
|
## Running automated tests
|
|
|
|
|
|
We currently use [Bats](https://github.com/bats-core/bats-core) to run our automated tests.
|
|
|
|
|
|
### Install
|
|
|
|
|
|
```bash
|
|
|
# Clone Hestia repo with testing submodules
|
|
|
git clone --recurse-submodules https://github.com/hestiacp/hestiacp
|
|
|
# Or, using an existing local repo with an up-to-date main branch
|
|
|
git submodule update --init --recursive
|
|
|
|
|
|
# Install Bats
|
|
|
test/test_helper/bats-core/install.sh /usr/local
|
|
|
```
|
|
|
|
|
|
### Run
|
|
|
|
|
|
::: danger
|
|
|
Do not run any testing script on a live server. It might cause issues or downtime!
|
|
|
:::
|
|
|
|
|
|
```bash
|
|
|
# Run Hestia tests
|
|
|
test/test.bats
|
|
|
```
|