Generated with Goldstack
A starter template to define a Hetzner VPS from code using Terraform. Also supports scripts for easy deployment to the server.
This project has been automatically generated using the template:
Feel free to fork this repository and modify it for your needs, or use the Goldstack project builder to generate a boilerplate specifically generated for your project.
Thank you for using this boilerplate. For any questions or feedback, please be welcome to raise an issue on GitHub 🤗 .
Fork this repository and then clone the fork into your local machine.
For more information, see GitHub documentation - Fork a repo
A few dependencies need to be available in your development system. Please verify they are present or install them.
- Node v20+
- Yarn v1.22.5+
- Docker v20+
- Terraform CLI
- AWS CLI v2
Open a terminal and run the following commands:
node -v
yarn -v
docker --versionThis should produce the following output:
If you need to install or update any of the dependencies, please see the following guides:
- Downloading and installing Node.js and npm
- Yarn Installation
- Install Docker for Windows / Install Docker for Mac
- Install Terraform
- Install AWS CLI
Run yarn in your project directory to install and download all dependencies.
The installation process should take around 3-10 minutes depending on the dependencies that need to be downloaded.
You can confirm everything was installed correctly by running yarn -v. This should show a yarn version of 3.0.0+.
Make sure that the project compiles correctly by running yarn build your project directory:
Note that this command also ensures that all TypeScript project references are configured correctly.
In order to setup VSCode, open the project in VSCode.
VSCode may prompt you to ask if you trust the authors of the workspace. Respond with Yes.
You may also be asked if you want to install recommended extensions for this workspace. We recommend to do so since the template will be optimised to work with the suggested extensions.
If you want to install the necessary extensions manually, here are links to the extensions required:
Locate a .ts or .tsx file in the workspace and open it. When asked whether to use the workspace TypeScript version, click Allow.
In the status bar on the bottom right-hand corner of the VSCode editor you should now see TypeScript.
In order to use this template for your own project, there are a few things to update.
First, you need to create a file config/infra/hetzner/config.json to define your Hetzner token:
{
"users": [
{
"name": "[your user name]",
"config": {
"token": "[your token]"
}
}
]
}Find more information on this in Hetzner Credentials.
Then you need to update the file packages/hetzner-vps-1/goldstack.json:
{
"$schema": "./schemas/package.schema.json",
"name": "hetzner-vps-1",
"template": "hetzner-vps",
"templateVersion": "0.1.0",
"configuration": {},
"deployments": [
{
"name": "prod",
"awsUser": "goldstack-dev",
"awsRegion": "us-west-2",
"hetznerUser": "local",
"configuration": {
"location": "hil",
"serverType": "cpx11",
"sshUserFingerprint": "49:35:14:98:08:d4:71:a6:04:c2:f6:73:f0:68:2d:5c",
"serverName": "goldstack-ci-test",
"environmentVariables": [
{
"name": "DUMMY_ENV",
"value": "I rock"
},
{
"name": "HTTP_PORT",
"value": "80"
},
{
"name": "HTTPS_PORT",
"value": "443"
}
]
},
"tfStateKey": "hetzner-vps-1-prod-2d8c49d9d87e7c956e8e.tfstate"
}
]
}Here change the following:
- Delete the property
tfStateKey - Update the
hetznerUserto the username you defined inconfig.jsonabove - Update the
sshUserFingerprintto the fingerprint of an SSH user you have created through Hetzner console - Update the
serverNameto a name of your choosing - Update the
locationto what you require - Update the
serverTypeto what you require
Find more information about the required values in Hetzner VPS / Configure.
To further define what you want to deploy to your server, start with the files in packages/hetzner-vps-1/server.
For instance, you can modify the docker-compose.yml file with what you require:
version: '3.8'
services:
caddy:
image: caddy
container_name: caddy
ports:
- '${HTTP_PORT}:80'
- '${HTTPS_PORT}:443'
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./site:/usr/share/caddy/site
- caddy_data:/data
- caddy_config:/config
volumes:
caddy_data:
caddy_config:Note you can define the variables you require in goldstack.json. If you want to supply secrets, create a file credentials.json as described here.
Have questions or ideas or want to contribute to the project? Please head over to github.com/goldstack/goldstack.







