dpzc-4/02_PaaS/02_zadania.ipynb
nlitkowski e248075771 a
2022-01-05 01:08:54 +01:00

7.4 KiB
Raw Permalink Blame History

Zadania domowe

W ramach tego modułu do zdobycia są 4 punkty. Wszystkie zadania bazują na platformie Heroku. W przypadku rozwiązania (poprawnego) zadania 1.2 nie ma potrzeby wykonywania zadania 1.1.

Zadanie 1.1 (2 punkty)

Uruchom dowolną aplikacje na swoim koncie Heroku. Nazwa aplikacji musi być ustawiona na uam-wmi-pzc-<INDEX>-z-1-1. Strona musi być renderowana w całości po stronie serwera i zawierać w tagu body tylko bieżący czas UTC w formacie ISO 8601 (YYYY-MM-DDThh:mm:ss+00:00) jak w poniższym przykładzie:

<html>
<head>
    <title>Rozwiązanie zadania PZC 1.1</title>
</head>
<body>
2021-07-29T11:15:02+00:00
</body>

Sposób sprawdzania zadania

Poprawność wykonania zadania można sprawdzić korzystając ze skryptu. Konieczne jest podstawienie poprawego numeru indeksu w pierwszej lini skryptu.

from __future__ import print_function

!pip3 install bs4 --user

INDEX="329575"

from bs4 import BeautifulSoup
import urllib.request
from datetime import datetime
from datetime import timezone
import sys

def eprint(*args, **kwargs):
    print(*args, file=sys.stderr, **kwargs)

def test_solution(index):
    valid = False
    try:
        with urllib.request.urlopen('https://uam-wmi-pzc-'+index+'-z-1-1.herokuapp.com/') as response:
            html = response.read()
            soup = BeautifulSoup(html, 'html.parser')
            try:
                dateText = soup.body.get_text().strip()
                try:
                    now = datetime.now(tz=timezone.utc)
                    date = datetime.fromisoformat(dateText)

                    eprint("Data na stronie %s"%date)
                    if abs(date - now).seconds < 1:
                        valid = True

                except:
                    eprint("Błędny format daty:")
                    eprint(dateText)
            except:
                eprint("Nie udało się pobrać treści tagu <body>")

    except urllib.error.URLError as e:
        eprint(e.status)
        
    return valid

print("\n========================================\n")
if test_solution(INDEX):
    print("Zadanie 1.1 zaliczone")
else:
    print("Zadanie 1.1 nie zaliczone")
print("\n========================================")
Requirement already satisfied: bs4 in /home/faculty/bikol/.local/lib/python3.7/site-packages (0.0.1)
Requirement already satisfied: beautifulsoup4 in /home/faculty/bikol/.local/lib/python3.7/site-packages (from bs4) (4.10.0)
Requirement already satisfied: soupsieve>1.2 in /home/faculty/bikol/.local/lib/python3.7/site-packages (from beautifulsoup4->bs4) (2.2.1)
WARNING: You are using pip version 21.2.3; however, version 21.3 is available.
You should consider upgrading via the '/usr/bin/python3 -m pip install --upgrade pip' command.

========================================

Zadanie 1.1 nie zaliczone

========================================
Błędny format daty:
test
2021-10-27T10:27:33+00:00

Zadanie 1.2 (4 punkty)

Celem tego zadania jest poznanie bardziej zaawansowanych możliwości wdrażania aplikacji na platformę Heroku.

Zadanie polega na uruchomieniu na platformie Heroku systemu Gitea. W tym celu konieczne jest przygotowanie odpowiedniego pliku YAML, który umożliwi utworzenie odpowiednich zasobów w ramach platformy Heroku oraz dokona ich konfiguracji.

Jako punkt odniesienia proszę korzystać z oficjalnej instrukcji instalacji Gitea z wykorzystaniem Dockera w trybie rootless. W szczególności następujący plik docker-compose.yml zawiera wszystkie niezbędne informacje do wykonania zadania (należy go przetłumaczyć na plik heroku.yml):

version: "2"

services:
  server:
    image: gitea/gitea:1.14.5-rootless
    environment:
      - GITEA__database__DB_TYPE=postgres
      - GITEA__database__HOST=db:5432
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=gitea
      - GITEA__database__PASSWD=gitea
    restart: always
    volumes:
      - ./data:/var/lib/gitea
      - ./config:/etc/gitea  
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "2222:2222"
    depends_on:
      - db

  db:
    image: postgres:13
    restart: always
    environment:
      - POSTGRES_USER=gitea
      - POSTGRES_PASSWORD=gitea
      - POSTGRES_DB=gitea
    volumes:
      - ./postgres:/var/lib/postgresql/data

Wskazówka:: Skorzystaj z usługi Managed PostgreSQL from Heroku oraz sekcji setup pliku heroku.yml.

Sposób sprawdzania zadania

Zadanie to sprawdzane będzie ręcznie, jesteś zobowiązany udostępnić:

  1. repozytorium Git zawierające całe rozwiązanie zadania

    Kod na repozytorium musi być kompletny, oraz umożliwiać automatyczne wdrożenie na platformę Heroku poprzez:

    heroku git:remote
    git push heroku master
    

    Zakładamy przy tym, że odpowiednia aplikacja Heroku została już utwożona i skonfigurowana pod odpowiedni _stack.

  2. link do wdrożonej aplikacji

    Wdrożona Gitea powinna hostować przynajmniej jedno repozytorium git.