Deploy webservice
This commit is contained in:
commit
fd38d807e7
106
deploy.py
Normal file
106
deploy.py
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
from hcloud import Client
|
||||||
|
from hcloud.images.domain import Image
|
||||||
|
from hcloud.networks.domain import NetworkSubnet
|
||||||
|
from hcloud.server_types.domain import ServerType
|
||||||
|
from hcloud.locations.domain import Location
|
||||||
|
from hcloud.load_balancers.domain import (
|
||||||
|
LoadBalancerHealthCheck,
|
||||||
|
LoadBalancerService,
|
||||||
|
LoadBalancerHealtCheckHttp,
|
||||||
|
LoadBalancerTarget,
|
||||||
|
)
|
||||||
|
from hcloud.load_balancer_types.domain import LoadBalancerType
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
prefix = "444380"
|
||||||
|
ssh_key_name = prefix+"-webservice-ssh-key"
|
||||||
|
subnet_name = prefix+"-webservice-subnet"
|
||||||
|
server_name = prefix+"-webservice-server"
|
||||||
|
load_balancer_name = prefix+"webservice-loadbalancer"
|
||||||
|
|
||||||
|
public_key = sys.argv[2]
|
||||||
|
token = sys.argv[1]
|
||||||
|
|
||||||
|
server_count = 2
|
||||||
|
|
||||||
|
CLOUD_INIT = """#cloud-config
|
||||||
|
runcmd:
|
||||||
|
- git clone https://git.wmi.amu.edu.pl/s444380/hetzner-webservice
|
||||||
|
- cd hetzner-webservice
|
||||||
|
- chmod +x webservice
|
||||||
|
- ./webservice
|
||||||
|
"""
|
||||||
|
|
||||||
|
client = Client(
|
||||||
|
token=token
|
||||||
|
)
|
||||||
|
|
||||||
|
print("Adding ssh-key...")
|
||||||
|
try:
|
||||||
|
ssh_key = client.ssh_keys.create(name=ssh_key_name, public_key=public_key)
|
||||||
|
except:
|
||||||
|
ssh_key = client.ssh_keys.get_by_name(name=ssh_key_name)
|
||||||
|
print(f"Added ssh-key {ssh_key.data_model.name} ||| {ssh_key.data_model.public_key} ")
|
||||||
|
|
||||||
|
print("Creating subnet...")
|
||||||
|
subnet = client.networks.create(
|
||||||
|
name=subnet_name,
|
||||||
|
ip_range="10.10.10.0/24",
|
||||||
|
subnets=[
|
||||||
|
NetworkSubnet(ip_range="10.10.10.0/24", network_zone="eu-central", type="cloud")
|
||||||
|
]
|
||||||
|
)
|
||||||
|
print(f"Created network: {subnet.data_model.name} ({subnet.data_model.ip_range})")
|
||||||
|
|
||||||
|
targets = []
|
||||||
|
|
||||||
|
print("Creating servers...")
|
||||||
|
for i in range(server_count):
|
||||||
|
server = client.servers.create(
|
||||||
|
name=f"{server_name}-{i+1}",
|
||||||
|
server_type=ServerType("cx11"),
|
||||||
|
image=Image(name="ubuntu-20.04"),
|
||||||
|
ssh_keys=[ssh_key],
|
||||||
|
networks=[subnet],
|
||||||
|
location=Location("hel1"),
|
||||||
|
user_data=CLOUD_INIT
|
||||||
|
)
|
||||||
|
server.action.wait_until_finished()
|
||||||
|
if server.action.complete:
|
||||||
|
print(f"Created server: {server.server.name}")
|
||||||
|
targets.append(LoadBalancerTarget(type="server", server=server.server, use_private_ip=True))
|
||||||
|
|
||||||
|
load_balancer = client.load_balancers.create(
|
||||||
|
name=load_balancer_name,
|
||||||
|
load_balancer_type=LoadBalancerType(name="lb11"),
|
||||||
|
location=Location("hel1"),
|
||||||
|
services=[
|
||||||
|
LoadBalancerService(
|
||||||
|
protocol="http",
|
||||||
|
listen_port=8080,
|
||||||
|
destination_port=8080,
|
||||||
|
proxyprotocol=False,
|
||||||
|
health_check=LoadBalancerHealthCheck(
|
||||||
|
protocol="http",
|
||||||
|
port="8080",
|
||||||
|
interval=15,
|
||||||
|
timeout=10,
|
||||||
|
retries=3,
|
||||||
|
http=LoadBalancerHealtCheckHttp(
|
||||||
|
path="/factors/10",
|
||||||
|
status_codes=["2??", "3??"],
|
||||||
|
tls=False
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
],
|
||||||
|
targets=targets,
|
||||||
|
public_interface=True,
|
||||||
|
network=subnet
|
||||||
|
)
|
||||||
|
|
||||||
|
load_balancer.action.wait_until_finished()
|
||||||
|
if load_balancer.action.complete:
|
||||||
|
load_balancer = client.load_balancers.get_by_name(load_balancer_name)
|
||||||
|
print(f"Load balancer is up. http://{load_balancer.data_model.public_net.ipv4.ip}:8080")
|
5
deploy.sh
Normal file
5
deploy.sh
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
python3 -m venv venv
|
||||||
|
source venv/bin/activate
|
||||||
|
pip install hcloud
|
||||||
|
python3 deploy.py <HETZNER_TOKEN> <SSH_PUBLIC_KEY>
|
BIN
webservice
Normal file
BIN
webservice
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user