feat: added hetzner cloud terraform configuration
This commit is contained in:
parent
a2dc5db298
commit
d99e77ac8d
4 changed files with 109 additions and 0 deletions
31
infra/hetzner/README.md
Normal file
31
infra/hetzner/README.md
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
# Hetzner Cloud Terraform Setup
|
||||
|
||||
This directory manages Hetzner Cloud resources using Terraform.
|
||||
|
||||
## Prerequisites
|
||||
- Create a Hetzner Cloud API token: https://console.hetzner.cloud/projects
|
||||
- (Optional) Register your SSH key in Hetzner Cloud for secure access.
|
||||
|
||||
## Usage
|
||||
1. Set your API token as an environment variable:
|
||||
```bash
|
||||
export TF_VAR_hcloud_token="<your-token>"
|
||||
```
|
||||
2. (Optional) Set SSH key names, image, and location:
|
||||
```bash
|
||||
export TF_VAR_hcloud_ssh_keys='["your-key-name"]'
|
||||
```
|
||||
3. Run Terraform:
|
||||
```bash
|
||||
terraform init
|
||||
terraform plan
|
||||
terraform apply
|
||||
```
|
||||
|
||||
## Outputs
|
||||
- The server's public IPv4 address and ID will be shown after apply.
|
||||
|
||||
## Destroying the Server
|
||||
```bash
|
||||
terraform destroy
|
||||
```
|
||||
58
infra/hetzner/main.tf
Normal file
58
infra/hetzner/main.tf
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
terraform {
|
||||
backend "pg" {
|
||||
schema_name = "yumeami_hetzner"
|
||||
conn_str = "postgres://shiori:5600/terraform?sslmode=disable"
|
||||
}
|
||||
|
||||
required_providers {
|
||||
hcloud = {
|
||||
source = "hetznercloud/hcloud"
|
||||
version = "~> 1.42.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
provider "hcloud" {
|
||||
token = var.hcloud_token
|
||||
}
|
||||
|
||||
resource "hcloud_server" "tobira" {
|
||||
name = "tobira"
|
||||
|
||||
server_type = "cx22"
|
||||
image = "ubuntu-24.04"
|
||||
location = "ash"
|
||||
public_net {
|
||||
ipv4_enabled = true
|
||||
ipv6_enabled = true
|
||||
}
|
||||
|
||||
firewall_ids = [hcloud_firewall.primary.id]
|
||||
ssh_keys = var.hcloud_ssh_keys
|
||||
}
|
||||
|
||||
resource "hcloud_firewall" "primary" {
|
||||
name = "primary"
|
||||
|
||||
rule {
|
||||
destination_ips = [
|
||||
"0.0.0.0/0",
|
||||
"::/0",
|
||||
]
|
||||
direction = "out"
|
||||
port = "any"
|
||||
protocol = "tcp"
|
||||
source_ips = []
|
||||
}
|
||||
rule {
|
||||
destination_ips = []
|
||||
direction = "in"
|
||||
port = "any"
|
||||
protocol = "tcp"
|
||||
source_ips = [
|
||||
"0.0.0.0/0",
|
||||
"::/0",
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
9
infra/hetzner/outputs.tf
Normal file
9
infra/hetzner/outputs.tf
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
output "server_id" {
|
||||
description = "ID of the Hetzner server."
|
||||
value = hcloud_server.tobira.id
|
||||
}
|
||||
|
||||
output "server_ipv4" {
|
||||
description = "Public IPv4 address of the server."
|
||||
value = hcloud_server.tobira.ipv4_address
|
||||
}
|
||||
11
infra/hetzner/variables.tf
Normal file
11
infra/hetzner/variables.tf
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
variable "hcloud_token" {
|
||||
description = "Hetzner Cloud API token."
|
||||
type = string
|
||||
sensitive = true
|
||||
}
|
||||
|
||||
variable "hcloud_ssh_keys" {
|
||||
description = "List of SSH key names registered in Hetzner Cloud."
|
||||
type = list(string)
|
||||
default = []
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue