Deploying to your site hosted with [Hetzner](https://www.hetzner.com) is very simple with DeployHQ. Hetzner is a major European hosting provider offering Cloud VPS, dedicated servers, and web hosting across data centres in Germany, Finland, the USA, and Singapore.

Firstly, you'll need to set up your DeployHQ project, then connect to your Hetzner server.

## Setting up your project

Head to the **Projects** screen in DeployHQ, then click the **New Project** button to get started.

You'll be prompted to enter a name for your project, then select where your repository is hosted.

{screenshot: 9}

Next, click **Create project** and you'll be taken to a screen where you can log in with your repository hosting account to authorise access and then choose your repository.

* [Adding a Bitbucket repository](Article: #17)
* [Adding a Codebase repository](Article: #19)
* [Adding a GitHub repository](Article: #21)
* [Adding a GitLab repository](Article: #23)
* [Adding a repository manually](Article: #25)

## Setting up your Hetzner server

Once you've configured your repository, you'll need to connect to your Hetzner server. The setup differs slightly depending on whether you're using **Hetzner Cloud** (VPS) or a **dedicated server**.

### Finding your credentials

**Hetzner Cloud** (managed via [Cloud Console](https://console.hetzner.cloud)):

1. Log in to the Cloud Console and select your project
2. Click **Servers** in the left menu — your server's **IP address** is shown on the server card
3. The default SSH user is **`root`**
4. If you created the server with an SSH key, there is no password — you'll need to add DeployHQ's public key to `~/.ssh/authorized_keys` on the server
5. If you created the server without an SSH key, the root password was emailed to you. You can reset it under the server's **Rescue** tab

**Dedicated Servers** (managed via [Robot panel](https://robot.hetzner.com)):

1. Log in to Robot and go to **Servers**
2. Select your server to see its IP address and details
3. The initial root password was emailed after OS installation
4. SSH keys can be uploaded under **Key Management** in Robot

### Adding the server in DeployHQ

Head to **Servers & Groups** in DeployHQ, and click the **New Server** button. If you've just added your repository, you will have been taken to this page automatically.

Start by entering a name, and choosing SSH/SFTP as the protocol:

{screenshot: 557}

You'll need to add DeployHQ's SSH public key to your server. Copy the key shown on the server configuration page, then add it to your server's `~/.ssh/authorized_keys` file:

```
echo "DEPLOYHQ_PUBLIC_KEY" >> ~/.ssh/authorized_keys
```

You can also follow [Hetzner's SSH key guide](https://community.hetzner.com/tutorials/add-ssh-key-to-your-hetzner-cloud) for more detailed instructions.

{screenshot: 594}

Next, enter your server's **IP address** as the hostname, **`root`** as the username (or a deploy user if you've created one), and leave the port blank to use the default (22).

For the **deployment path**, enter the directory where your files should be uploaded. Common paths on Hetzner:

- **Nginx or Apache**: `/var/www/your-domain/` or `/var/www/html/`
- **WordPress**: `/var/www/your-domain/wp-content/themes/your-theme/`
- **Laravel/Symfony**: `/var/www/your-domain/` (with a build step for assets)

Within **Deployment options**, you can choose to automatically deploy your server and, if you're only deploying files from a certain directory in your repository, enter a **Deployment subdirectory**.

{screenshot: 423}

**Tip**: If you've enabled Hetzner's **Cloud Firewall**, you'll need to add an inbound rule allowing TCP port 22 from [DeployHQ's IP addresses](https://www.deployhq.com/support/faq/our-ip-ranges). Navigate to Cloud Console > **Firewalls** > your firewall > add an inbound rule. Also check any OS-level firewalls (`ufw`, `iptables`) on the server itself.

Click **Create Server** to finish, then you can proceed to start your first deployment.

## Run your first deployment

By default, DeployHQ will upload the whole repository to your server on the first deployment, because there is no previously deployed commit to compare to.

If your files are already on Hetzner and up to date with the latest commit, you can follow this guide to skip that first deployment:

* [Don't deploy your whole repository on the first deployment](Article: #129)

Otherwise, just follow this guide to start your first deployment, then after the first deployment, only files that have changed will be uploaded in future.

* [Running your first deployment](Article: #43)

That's it! You've now set up and run your first deployment to your Hetzner server and your future changes will be uploaded for you automatically, or at the simple click of a button.

## Further reading

DeployHQ has a number of very useful features to help with your deployments in general that you might wish to find out more about:

* Compiling assets and javascript with the [Build pipeline](Article: #301)
* Running commands on your server with [SSH commands](Article: #57)
* Stop certain files from being uploaded in deployments using [Excluded files](https://www.deployhq.com/support/excluded-files)
* Keep important files safely away from your repository using [Config files](Article: #47)
* Keep your team in the loop and run other useful tasks during a deployment with our [Integrations](Article: #327)