In this guide, I will show how to deploy a Node.js project on Hetzner with TurboCloud—a deployment toolkit that helps deploy web projects
from local folders and Git repositories with one command. TurboCloud is free to use with any non-commercial projects without limits; however, to deploy commercial projects, you should purchase a lifetime license ($90, one-time payment).
For this guide, you need just two things:
Start a new server on Hetzner with a public IPv4 address, Ubuntu 22.04, and SSH access from your
local machine. Then, in the root folder of your project on your local machine, run the following command
(replace server_public_ip
with the IP of your server):
cd folder_with_project
curl https://turbocloud.dev/deploy | bash -s -- -i server_public_ip
For example, if your server’s IP address is 121.41.56.20
, the command will look like this:
curl https://turbocloud.dev/deploy | bash -s -- -i 121.41.56.20
If everything goes well, your Node.js project will be deployed to Hetzner, and you’ll see an automatically generated URL in the console that you can use to access your project.
If you want to use a custom domain, add the -d
parameter (omit https://
,
http://
, ws://
, or wss://
). Ensure the domain's A record is
correctly pointed to your server's IP address. For example:
curl https://turbocloud.dev/deploy | bash -s -- -i server_public_ip -d your_domain.com
TurboCloud is a deployment toolkit that automates the deployment of Node.js projects to Hetzner servers. It eliminates the need to create additional accounts and simplifies cloud provisioning by following best practices. These include protecting public projects with HTTPS, setting up VPNs for inter-server communication, establishing CI/CD pipelines, and much more.
Set Up a Hetzner Cloud Server:
You can deploy multiple projects on a single server using TurboCloud, as long as sufficient resources are available.
Prepare Your Node.js Project:
Dockerfile
in your project’s root directory with the following content (change FROM node:22-alpine
if you need another Node.js version, and change CMD ["node", "index.js"]
if your Node.js app should start with another JavaScript file—for example, CMD ["node", "app.js"]
):
# Replace the line below if you need another Node.js version FROM node:22-alpine # Set the working directory WORKDIR /usr/src/app # Copy package.json and package-lock.json to the container COPY package*.json ./ # Install dependencies RUN npm install # Copy the rest of the application source code to the container COPY . . # Expose port 3000 EXPOSE 3000 # Define environment variable ENV NODE_ENV=production # Command to run the application CMD ["node", "index.js"]
Deploy Your Project from the Local Folder:
server_public_ip
with the IP of your server):
cd folder_with_project
curl https://turbocloud.dev/deploy | bash -s -- -i server_public_ip
For example, if your server’s IP address is 121.41.56.20
, the command will look like this:
curl https://turbocloud.dev/deploy | bash -s -- -i 121.41.56.20
-d
parameter (omit
https://
, http://
, ws://
, or wss://
). Ensure the domain's A record is correctly pointed to your server's IP address. For example:
curl https://turbocloud.dev/deploy | bash -s -- -i server_public_ip -d your_domain.com
https://turbocloud.dev/deploy
. You can
manually download, inspect, and execute it with the necessary parameters.-i
, which specifies the IP address of the Hetzner server (of course,
you can use other cloud providers too).scp
utility.Dockerfile
.At this stage, your Node.js project should be online and accessible at the URL displayed in the console. Feel free to reach out to us if you have questions or encounter issues at hey@turbocloud.dev.