diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..77b3ac2 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +token.txt \ No newline at end of file diff --git a/hetzner/gitea/cloud-init.ipynb b/IasS/ex1-2/gitea/cloud-init.ipynb similarity index 100% rename from hetzner/gitea/cloud-init.ipynb rename to IasS/ex1-2/gitea/cloud-init.ipynb diff --git a/hetzner/gitea/docker-compose.yml b/IasS/ex1-2/gitea/docker-compose.yml similarity index 100% rename from hetzner/gitea/docker-compose.yml rename to IasS/ex1-2/gitea/docker-compose.yml diff --git a/IasS/ex1-2/hetzner-gitea-init.py b/IasS/ex1-2/hetzner-gitea-init.py new file mode 100644 index 0000000..3609ba2 --- /dev/null +++ b/IasS/ex1-2/hetzner-gitea-init.py @@ -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}") \ No newline at end of file diff --git a/hetzner/mysql/cloud-init.ipynb b/IasS/ex1-2/mysql/cloud-init.ipynb similarity index 69% rename from hetzner/mysql/cloud-init.ipynb rename to IasS/ex1-2/mysql/cloud-init.ipynb index 08725a2..3145218 100644 --- a/hetzner/mysql/cloud-init.ipynb +++ b/IasS/ex1-2/mysql/cloud-init.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 34, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -30,17 +30,9 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Network in use: s444498-pzc-test-vnet (10.10.10.0/24)\n" - ] - } - ], + "outputs": [], "source": [ "from hcloud.networks.domain import NetworkSubnet\n", "\n", @@ -62,17 +54,9 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating gitea server: True\n" - ] - } - ], + "outputs": [], "source": [ "from hcloud.locations.domain import Location\n", "from hcloud.images.domain import Image\n", @@ -124,18 +108,61 @@ " - cd /root/ && docker-compose up -d\n", " '''\n", "\n", - "mysql_server = client.servers.create(\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", + "for i in range(20):\n", "\n", - "mysql_server.action.wait_until_finished()\n", - "print(f\"Creating gitea server: {mysql_server.action.complete}\")" + " mysql_server = client.servers.create(\n", + " 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}\")" ] } ], diff --git a/hetzner/mysql/docker-compose.yml b/IasS/ex1-2/mysql/docker-compose.yml similarity index 100% rename from hetzner/mysql/docker-compose.yml rename to IasS/ex1-2/mysql/docker-compose.yml diff --git a/hetzner/vscode/cloud-init.ipynb b/IasS/ex4/vscode/cloud-init.ipynb similarity index 89% rename from hetzner/vscode/cloud-init.ipynb rename to IasS/ex4/vscode/cloud-init.ipynb index 1848f3b..d3da662 100644 --- a/hetzner/vscode/cloud-init.ipynb +++ b/IasS/ex4/vscode/cloud-init.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 22, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -30,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -62,14 +62,14 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Creating gitea server: True\n" + "Creating vscode server: True\n" ] } ], @@ -85,16 +85,14 @@ " - curl\n", " - gnupg-agent\n", " - software-properties-common\n", - "\n", "write_files:\n", " - content: |\n", - " curl -fsSL https://code-server.dev/install.sh > /root/install.sh\n", - " path: /root/install.sh\n", - " owner: root:root\n", - " permissions: '755'\n", - "\n", + " curl -fsSL https://code-server.dev/install.sh > /root/install.sh\n", + " path: /root/install.sh\n", + " owner: root:root\n", + " permissions: '755'\n", "runcmd:\n", - " - bash /root/install.sh\n", + " - bash install.sh\n", " - code-server --bind-addr 0.0.0.0:8080\n", " '''\n", "\n", @@ -109,7 +107,7 @@ ")\n", "\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}\")" ] } ], diff --git a/Public_cloud/loadbalancer-init.py b/Public_cloud/loadbalancer-init.py index 60620d6..613d05f 100644 --- a/Public_cloud/loadbalancer-init.py +++ b/Public_cloud/loadbalancer-init.py @@ -4,7 +4,7 @@ from hcloud.server_types.domain import ServerType from hcloud.networks.domain import NetworkSubnet from hcloud.locations.domain import Location 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 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})") -webservice_init=r''' -#cloud-config +webservice_init=r'''#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: - - git clone https://git.wmi.amu.edu.pl/s444498/cloud - - cd Public_cloud - - chmod +x webservice - - ./webservice + - 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 + - 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): webservice_server = client.servers.create( name=f"{PREFIX}-webservice-{i+1}", @@ -63,42 +87,44 @@ for i in range(NUM_OF_SERVERS): webservice_server.action.wait_until_finished() 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( - name= f"{PREFIX}-loadbalancer", - load_balancer_type=LoadBalancerType(name="lb11"), - location=Location("hel1"), - services=[ - LoadBalancerService( +loadbalancer = client.load_balancers.create( + name= f"{PREFIX}-loadbalancer", + load_balancer_type=LoadBalancerType(name="lb11"), + location=Location("hel1"), + targets=loadbalancer_targets, + public_interface=True, + services=[ + LoadBalancerService( + protocol="http", + listen_port=80, + destination_port=80, + proxyprotocol=False, + health_check=LoadBalancerHealthCheck( 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/32", - status_codes=["2??", "3??"], - tls=False - ) - ), - ) - ], - targets=loadbalancer_targets, - public_interface=True, - network=vnet - ) -except: - loadbalancer = client.load_balancers.get_by_name(f"{PREFIX}-loadbalancer") + port=80, + interval=15, + timeout=10, + retries=3, + http=LoadBalancerHealtCheckHttp( + path="/factors/32", + status_codes=["2??", "3??"], + tls=False + ) + ), + http=LoadBalancerServiceHttp( + cookie_name='HCLBSTICKY', + cookie_lifetime=300, + sticky_sessions=True, + certificates=[], + ), + ), + ], +) loadbalancer.action.wait_until_finished() print(f"Loadbalancer creating...: {loadbalancer.action.complete}") 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/") diff --git a/hetzner-gitea-init.py b/hetzner-gitea-init.py index 1da1c07..3609ba2 100644 --- a/hetzner-gitea-init.py +++ b/hetzner-gitea-init.py @@ -32,6 +32,20 @@ except: ) 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 @@ -89,7 +103,7 @@ mysql_server = client.servers.create( ) 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) @@ -131,7 +145,7 @@ write_files: - ./config:/root/gitea/config - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro - - /mnt/volume:/data + - /mnt/data_gitea:/data ports: - "3000:3000" - "222:22" @@ -146,9 +160,13 @@ runcmd: - 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 ''' @@ -161,7 +179,9 @@ gitea_server = client.servers.create( ssh_keys=[ssh_key], networks=[vnet], 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() diff --git a/hetzner/sigma/computeC b/hetzner/sigma/computeC deleted file mode 100755 index 9e27036..0000000 Binary files a/hetzner/sigma/computeC and /dev/null differ