We typicaly do this through Hetzner, but EC2 or Compute Instances on GCP would also be ok. However, Hetzner is preferred unless you have a strong preference against it.
The preferred region is US-West.
For operating system, pick Ubuntu.
The smallest size in terms of vCPU and RAM is ideal.
Set enough subdomains such that each service which will be hosted can have it's own domain.
Typically pick the name of the service you are hosting as the subdomain.
Make sure to change TTL to 3600.
Creating a tmux session is fairly important such that your session is persistent if someone else takes over after you sign off or otherwise needs to provide help.
Sometimes you will need to install the github CLI for private repos. It's a more convenient way to deal with GH auth securely for private repos.
Make a folder called git_projects for the repo you are clonining. This is convenient hygeine if you go to clone more repos on the same box later or want to share files from the the HOME directory with less risk.
For Node, nvm is the recommended choice.
For python, attempt to use a venv and requirements.txt file when possible for max multi-tenancy of multiple demos.
sudo apt install caddysudo vim /etc/caddy/Caddyfile
Within the Caddyfile, set up the domains from step 2 to reverse proxy properly to the server.
Roughly, it should be a repeat of the following for each domain and local service you are trying to proxy:
docs.trieve.ai {
reverse_proxy localhost:3000
}
Save the caddy file!
Finally, start the caddy reverse proxy service:
system ctl start caddy
The ufw allow ssh is especially important, because if that is forgotten, you will not be able to get into the server ever again and need to do a full factory reset.
ufw allow ssh
ufw allow http
ufw allow https
ufw enable
If you choose Hetzner make sure you get your free $20 Hetzner Coupon