# Install FeatherQuilld

> Install FeatherQuilld on a Debian or Ubuntu web node from the APT repository, connect it to FeatherPanel with join data or OAuth, and start the service.

Source: https://featherpanel.com/docs/quilld/installation/

FeatherQuilld ships only as an APT package, so the node must run Debian or Ubuntu. Install Docker Engine (`docker-ce`) from
Docker's repository first. See the [requirements](https://featherpanel.com/docs/getting-started/requirements).

## 1. Create the web node in the panel

In the admin area, open the web nodes section and create a node. After saving, the panel opens the FeatherQuilld tab with
the install command, the generated configuration and the daemon credentials.

## 2. Install the package

The panel's first command runs the installer without its configure step:

```bash
curl -sSL https://get.featherpanel.com/installer.sh | env FP_COMPONENT=featherquilld FP_ACTION=install FP_QUILLD_SKIP_CONFIGURE=true bash
```

It adds the MythicalSystems APT repository (the same one Wings uses) and installs `featherquilld`, or `featherquilld-dev`
for per-commit builds when you pick the nightly channel (`FP_QUILLD_CHANNEL=nightly`). The two packages conflict; apt
replaces one with the other.

By hand, after adding the repository as in [Install FeatherWings](https://featherpanel.com/docs/wings/installation):

```bash
sudo apt-get update && sudo apt-get install -y featherquilld
```

## 3. Connect it to the panel

The panel's second command applies the join data, a small base64 YAML with the panel URL, the credentials, any custom
headers and the API port:

```bash
sudo featherquilld configure --join-data '<value>' --override && sudo systemctl enable --now featherquilld
```

The daemon then fetches its full runtime configuration from the panel. You can also run `sudo featherquilld configure`
with no arguments for an interactive wizard that supports OAuth sign-in or pasting join data. Useful flags include
`--panel-url`, `--node-name`, `--node-fqdn`, `--location-id`, `--daemon-listen`, `--sftp-port`, `--behind-proxy`,
`--install-service` and `--no-service`.

## 4. Check the service

```bash
systemctl status featherquilld
journalctl -u featherquilld -n 100 --no-pager
```

The unit only starts when `/etc/featherquilld/config.yml` exists and requires `docker.service`.

## Firewall

| Port | Purpose |
|------|---------|
| `8989/tcp` | Quilld API, reached by the panel and browsers |
| `80/tcp`, `443/tcp` | The reverse proxy serving the WebSpaces |
| `2222/tcp` | SFTP |
| `21/tcp`, `50000-50100/tcp` | FTP and its passive range |

## Updating

```bash
sudo apt-get update && sudo apt-get install --only-upgrade featherquilld
```

The package keeps your configuration on upgrade.
