update fix

This commit is contained in:
Mateusz 2023-01-22 18:59:39 +01:00
parent 40c55034ea
commit d39ee251a5
10 changed files with 346 additions and 86 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
token.txt

View File

@ -0,0 +1,188 @@
from hcloud import Client
from hcloud.networks.domain import NetworkSubnet
from hcloud.locations.domain import Location
from hcloud.images.domain import Image
from hcloud.server_types.domain import ServerType
import time
client = Client(
token="KccUEiddxtzGoLWSNC3V8tylq7MYHCjdnShtgasQ8jSbHqCjGoaa6Rq7yoz4uS23"
)
PREFIX = "s444498"
YOUR_LOCAL_SSH_PUBKEY = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAj15oTbXA0KGBw5V/76KXDgJZpLNrxUO/rTA0u0eRl1 wirus@wirusowylapek"
try:
ssh_key = client.ssh_keys.create(name=f"{PREFIX}-pzc-ssh-key-2", public_key=YOUR_LOCAL_SSH_PUBKEY)
print(f"Key {ssh_key.data_model.name} created: {ssh_key.data_model.public_key}")
except:
ssh_key = client.ssh_keys.get_by_name(f"{PREFIX}-pzc-ssh-key-2")
print(f"Key {ssh_key.data_model.name} already in use: {ssh_key.data_model.public_key}")
try:
vnet = client.networks.create(
name=f"{PREFIX}-pzc-test-vnet",
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: {vnet.data_model.name} ({vnet.data_model.ip_range})")
except:
vnet = client.networks.get_by_name(
f"{PREFIX}-pzc-test-vnet",
)
print(f"Network in use: {vnet.data_model.name} ({vnet.data_model.ip_range})")
try:
shared_volume = client.volumes.create(
size=15,
name="gitea-volume-s444498",
location=Location("hel1"))
shared_volume.action.wait_until_finished()
print(f"Created volume: {shared_volume.volume}")
except:
shared_volume = client.volumes.get_by_name("gitea-volume-s444498")
shared_volume.action.wait_until_finished()
print(f"Volume in use: {shared_volume.volume}")
volume_device = shared_volume.volume.linux_device
cloud_init_mysql=r'''#cloud-config
packages:
- apt-transport-https
- ca-certificates
- curl
- gnupg-agent
- software-properties-common
write_files:
- path: /root/docker-compose.yml
content: |
version: '3.9'
services:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: gitea
MYSQL_USER: gitea
MYSQL_PASSWORD: gitea
MYSQL_ROOT_PASSWORD: gitea
ports:
- "10.10.10.2:3306:3306"
volumes:
- my-db:/var/lib/mysql
phpmyadmin:
image: phpmyadmin
restart: always
ports:
- "8080:80"
volumes:
my-db: {}
runcmd:
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
- add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- apt-get update -y
- apt-get install -y docker-ce docker-ce-cli containerd.io
- curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- chmod +x /usr/local/bin/docker-compose
- systemctl start docker
- systemctl enable docker
- cd /root/ && docker-compose up -d
'''
mysql_server = client.servers.create(
name=f"{PREFIX}-mysql1",
server_type=ServerType("cx11"),
image=Image(name="ubuntu-20.04"),
ssh_keys=[ssh_key],
networks=[vnet],
location=Location("hel1"),
user_data=cloud_init_mysql
)
mysql_server.action.wait_until_finished()
print(f"Creating mysql server: {mysql_server.action.complete}")
time.sleep(20)
cloud_init_gitea=r'''#cloud-config
packages:
- apt-transport-https
- ca-certificates
- curl
- gnupg-agent
- software-properties-common
write_files:
- path: /root/docker-compose.yml
content: |
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:1.17.4
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__server__DOMAIN=${DOMAIN}
- GITEA__database__DB_TYPE=mysql
- GITEA__database__HOST=10.10.10.2:3306
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=gitea
restart: always
networks:
- gitea
volumes:
- ./data:/root/gitea
- ./config:/root/gitea/config
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /mnt/data_gitea:/data
ports:
- "3000:3000"
- "222:22"
'''
runcmd = f'''
runcmd:
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
- add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- apt-get update -y
- apt-get install -y docker-ce docker-ce-cli containerd.io
- curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- chmod +x /usr/local/bin/docker-compose
- systemctl start docker
- systemctl enable docker
- cd /mnt/
- mkdir data_gitea
- cd /root/
- IP=$(hostname -I | cut -d ' ' -f 1)
- echo "DOMAIN=$IP" >> .env
- sudo mkfs.xfs -f {volume_device}
- mount -o discard,defaults {volume_device} /mnt/data_gitea
- docker-compose up -d
'''
cloud_init_gitea += runcmd
gitea_server = client.servers.create(
name=f"{PREFIX}-gitea1",
server_type=ServerType("cx11"),
image=Image(name="ubuntu-20.04"),
ssh_keys=[ssh_key],
networks=[vnet],
location=Location("hel1"),
user_data=cloud_init_gitea,
volumes=[shared_volume.volume],
automount=True
)
gitea_server.action.wait_until_finished()
print(f"Creating gitea server: {gitea_server.action.complete}")

View File

@ -2,7 +2,7 @@
"cells": [ "cells": [
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 34, "execution_count": 2,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@ -30,17 +30,9 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 35, "execution_count": null,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [],
{
"name": "stdout",
"output_type": "stream",
"text": [
"Network in use: s444498-pzc-test-vnet (10.10.10.0/24)\n"
]
}
],
"source": [ "source": [
"from hcloud.networks.domain import NetworkSubnet\n", "from hcloud.networks.domain import NetworkSubnet\n",
"\n", "\n",
@ -62,17 +54,9 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 36, "execution_count": null,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [],
{
"name": "stdout",
"output_type": "stream",
"text": [
"Creating gitea server: True\n"
]
}
],
"source": [ "source": [
"from hcloud.locations.domain import Location\n", "from hcloud.locations.domain import Location\n",
"from hcloud.images.domain import Image\n", "from hcloud.images.domain import Image\n",
@ -124,18 +108,61 @@
" - cd /root/ && docker-compose up -d\n", " - cd /root/ && docker-compose up -d\n",
" '''\n", " '''\n",
"\n", "\n",
"mysql_server = client.servers.create(\n", "for i in range(20):\n",
" name=f\"{PREFIX}-mysql\", \n",
" server_type=ServerType(\"cx11\"), \n",
" image=Image(name=\"ubuntu-20.04\"), \n",
" ssh_keys=[ssh_key], \n",
" networks=[vnet], \n",
" location=Location(\"hel1\"), \n",
" user_data=cloud_init_mysql\n",
")\n",
"\n", "\n",
"mysql_server.action.wait_until_finished()\n", " mysql_server = client.servers.create(\n",
"print(f\"Creating gitea server: {mysql_server.action.complete}\")" " name=f\"{PREFIX}-mysql-{i}\", \n",
" server_type=ServerType(\"cx11\"), \n",
" image=Image(name=\"ubuntu-20.04\"), \n",
" ssh_keys=[ssh_key], \n",
" networks=[vnet], \n",
" location=Location(\"hel1\"), \n",
" user_data=cloud_init_mysql\n",
" )\n",
"\n",
" mysql_server.action.wait_until_finished()\n",
" print(f\"Creating gitea server: {mysql_server.action.complete}\")"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'client' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn [1], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m shared_volume \u001b[39m=\u001b[39m client\u001b[39m.\u001b[39mvolumes\u001b[39m.\u001b[39mcreate(\n\u001b[1;32m 2\u001b[0m size\u001b[39m=\u001b[39m\u001b[39m15\u001b[39m,\n\u001b[1;32m 3\u001b[0m name\u001b[39m=\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mgitea-volume\u001b[39m\u001b[39m\"\u001b[39m)\n",
"\u001b[0;31mNameError\u001b[0m: name 'client' is not defined"
]
}
],
"source": []
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Usuwanie 9 serwerów\n"
]
}
],
"source": [
"servers = client.servers.get_all()\n",
"print(f\"Usuwanie {len(servers)} serwerów\")\n",
"for s in servers:\n",
" if s.data_model.name.startswith(PREFIX):\n",
" action = client.servers.delete(s)\n",
" print(f\"\\tUsuwanie serwera {s.data_model.name} ({s.data_model.public_net.ipv4.ip}): {action.data_model.status}\")"
] ]
} }
], ],

View File

@ -2,7 +2,7 @@
"cells": [ "cells": [
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 22, "execution_count": 7,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@ -30,7 +30,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 23, "execution_count": 8,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@ -62,14 +62,14 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 24, "execution_count": 9,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Creating gitea server: True\n" "Creating vscode server: True\n"
] ]
} }
], ],
@ -85,16 +85,14 @@
" - curl\n", " - curl\n",
" - gnupg-agent\n", " - gnupg-agent\n",
" - software-properties-common\n", " - software-properties-common\n",
"\n",
"write_files:\n", "write_files:\n",
" - content: |\n", " - content: |\n",
" curl -fsSL https://code-server.dev/install.sh > /root/install.sh\n", " curl -fsSL https://code-server.dev/install.sh > /root/install.sh\n",
" path: /root/install.sh\n", " path: /root/install.sh\n",
" owner: root:root\n", " owner: root:root\n",
" permissions: '755'\n", " permissions: '755'\n",
"\n",
"runcmd:\n", "runcmd:\n",
" - bash /root/install.sh\n", " - bash install.sh\n",
" - code-server --bind-addr 0.0.0.0:8080\n", " - code-server --bind-addr 0.0.0.0:8080\n",
" '''\n", " '''\n",
"\n", "\n",
@ -109,7 +107,7 @@
")\n", ")\n",
"\n", "\n",
"vscode_server.action.wait_until_finished()\n", "vscode_server.action.wait_until_finished()\n",
"print(f\"Creating gitea server: {vscode_server.action.complete}\")" "print(f\"Creating vscode server: {vscode_server.action.complete}\")"
] ]
} }
], ],

View File

@ -4,7 +4,7 @@ from hcloud.server_types.domain import ServerType
from hcloud.networks.domain import NetworkSubnet from hcloud.networks.domain import NetworkSubnet
from hcloud.locations.domain import Location from hcloud.locations.domain import Location
from hcloud.load_balancer_types.domain import LoadBalancerType from hcloud.load_balancer_types.domain import LoadBalancerType
from hcloud.load_balancers.domain import LoadBalancerTarget, LoadBalancerService, LoadBalancerHealthCheck, LoadBalancerHealtCheckHttp from hcloud.load_balancers.domain import LoadBalancerTarget, LoadBalancerService, LoadBalancerServiceHttp, LoadBalancerHealthCheck, LoadBalancerHealtCheckHttp
from pathlib import Path from pathlib import Path
with open("../token.txt", "r") as file: with open("../token.txt", "r") as file:
@ -42,14 +42,38 @@ except:
) )
print(f"Network in use: {vnet.data_model.name} ({vnet.data_model.ip_range})") print(f"Network in use: {vnet.data_model.name} ({vnet.data_model.ip_range})")
webservice_init=r''' webservice_init=r'''#cloud-config
#cloud-config packages:
- apt-transport-https
- ca-certificates
- curl
- gnupg-agent
- software-properties-common
write_files:
- path: /root/Dockerfile
content: |
FROM ubuntu
COPY ./webservice /
RUN chmod +x ./webservice
EXPOSE 80:8080/tcp
CMD ./webservice
runcmd: runcmd:
- git clone https://git.wmi.amu.edu.pl/s444498/cloud - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
- cd Public_cloud - add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- chmod +x webservice - apt-get update -y
- ./webservice - apt-get install -y docker-ce docker-ce-cli containerd.io
- curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- chmod +x /usr/local/bin/docker-compose
- curl -fsSL https://git.wmi.amu.edu.pl/s444498/cloud/raw/branch/master/Public_cloud/webservice > /root/webservice
- systemctl start docker
- systemctl enable docker
- cd /root/
- docker build -t webservice .
- docker run -d -p 80:8080 -t webservice
''' '''
for i in range(NUM_OF_SERVERS): for i in range(NUM_OF_SERVERS):
webservice_server = client.servers.create( webservice_server = client.servers.create(
name=f"{PREFIX}-webservice-{i+1}", name=f"{PREFIX}-webservice-{i+1}",
@ -63,42 +87,44 @@ for i in range(NUM_OF_SERVERS):
webservice_server.action.wait_until_finished() webservice_server.action.wait_until_finished()
print(f"Creating webservice {i+1}: {webservice_server.action.complete}") print(f"Creating webservice {i+1}: {webservice_server.action.complete}")
loadbalancer_targets.append(LoadBalancerTarget(type="server", server=webservice_server.server, use_private_ip=True)) loadbalancer_targets.append(LoadBalancerTarget(type="server", server=webservice_server.server, use_private_ip=False))
try: loadbalancer = client.load_balancers.create(
loadbalancer = client.load_balancers.create( name= f"{PREFIX}-loadbalancer",
name= f"{PREFIX}-loadbalancer", load_balancer_type=LoadBalancerType(name="lb11"),
load_balancer_type=LoadBalancerType(name="lb11"), location=Location("hel1"),
location=Location("hel1"), targets=loadbalancer_targets,
services=[ public_interface=True,
LoadBalancerService( services=[
LoadBalancerService(
protocol="http",
listen_port=80,
destination_port=80,
proxyprotocol=False,
health_check=LoadBalancerHealthCheck(
protocol="http", protocol="http",
listen_port=8080, port=80,
destination_port=8080, interval=15,
proxyprotocol=False, timeout=10,
health_check=LoadBalancerHealthCheck( retries=3,
protocol="http", http=LoadBalancerHealtCheckHttp(
port="8080", path="/factors/32",
interval=15, status_codes=["2??", "3??"],
timeout=10, tls=False
retries=3, )
http=LoadBalancerHealtCheckHttp( ),
path="/factors/32", http=LoadBalancerServiceHttp(
status_codes=["2??", "3??"], cookie_name='HCLBSTICKY',
tls=False cookie_lifetime=300,
) sticky_sessions=True,
), certificates=[],
) ),
], ),
targets=loadbalancer_targets, ],
public_interface=True, )
network=vnet
)
except:
loadbalancer = client.load_balancers.get_by_name(f"{PREFIX}-loadbalancer")
loadbalancer.action.wait_until_finished() loadbalancer.action.wait_until_finished()
print(f"Loadbalancer creating...: {loadbalancer.action.complete}") print(f"Loadbalancer creating...: {loadbalancer.action.complete}")
load_balancer = client.load_balancers.get_by_name(f"{PREFIX}-loadbalancer") load_balancer = client.load_balancers.get_by_name(f"{PREFIX}-loadbalancer")
print(f"Webserwis: http://{load_balancer.data_model.public_net.ipv4.ip}:8080/factors/") print(f"Webserwis: http://{load_balancer.data_model.public_net.ipv4.ip}:80/factors/")

View File

@ -32,6 +32,20 @@ except:
) )
print(f"Network in use: {vnet.data_model.name} ({vnet.data_model.ip_range})") print(f"Network in use: {vnet.data_model.name} ({vnet.data_model.ip_range})")
try:
shared_volume = client.volumes.create(
size=15,
name="gitea-volume-s444498",
location=Location("hel1"))
shared_volume.action.wait_until_finished()
print(f"Created volume: {shared_volume.volume}")
except:
shared_volume = client.volumes.get_by_name("gitea-volume-s444498")
shared_volume.action.wait_until_finished()
print(f"Volume in use: {shared_volume.volume}")
volume_device = shared_volume.volume.linux_device
cloud_init_mysql=r'''#cloud-config cloud_init_mysql=r'''#cloud-config
packages: packages:
- apt-transport-https - apt-transport-https
@ -89,7 +103,7 @@ mysql_server = client.servers.create(
) )
mysql_server.action.wait_until_finished() mysql_server.action.wait_until_finished()
print(f"Creating gitea server: {mysql_server.action.complete}") print(f"Creating mysql server: {mysql_server.action.complete}")
time.sleep(20) time.sleep(20)
@ -131,7 +145,7 @@ write_files:
- ./config:/root/gitea/config - ./config:/root/gitea/config
- /etc/timezone:/etc/timezone:ro - /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
- /mnt/volume:/data - /mnt/data_gitea:/data
ports: ports:
- "3000:3000" - "3000:3000"
- "222:22" - "222:22"
@ -146,9 +160,13 @@ runcmd:
- chmod +x /usr/local/bin/docker-compose - chmod +x /usr/local/bin/docker-compose
- systemctl start docker - systemctl start docker
- systemctl enable docker - systemctl enable docker
- cd /mnt/
- mkdir data_gitea
- cd /root/ - cd /root/
- IP=$(hostname -I | cut -d ' ' -f 1) - IP=$(hostname -I | cut -d ' ' -f 1)
- echo "DOMAIN=$IP" >> .env - echo "DOMAIN=$IP" >> .env
- sudo mkfs.xfs -f {volume_device}
- mount -o discard,defaults {volume_device} /mnt/data_gitea
- docker-compose up -d - docker-compose up -d
''' '''
@ -161,7 +179,9 @@ gitea_server = client.servers.create(
ssh_keys=[ssh_key], ssh_keys=[ssh_key],
networks=[vnet], networks=[vnet],
location=Location("hel1"), location=Location("hel1"),
user_data=cloud_init_gitea user_data=cloud_init_gitea,
volumes=[shared_volume.volume],
automount=True
) )
gitea_server.action.wait_until_finished() gitea_server.action.wait_until_finished()

Binary file not shown.