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