# Praktyki

Korzyści:

  • zdobędziesz cenne doświadczenie zawodowe
  • rozwiniesz ścieżkę swojej kariery jako programista
  • opublikujesz dostępny kod jako część większego projektu - chcemy, aby był on dostępny na GitHubie (opens new window) dla każdego
  • brak umowy poufności względem opracowanego kodu
  • praktyczne zastosowanie narzędzi Git - najpopularniejszego i podstawowego narzędzia pracy grupowej z kodem źródłowym
  • podzielimy się doświadczeniem i poradzimy, gdy utkniesz w martwym punkcie lub nie będziesz wiedzieć od czego zacząć

# Zadania

# Træfik - dostawca DNS Go

Træfik (opens new window) to nowoczesne odwrotne proxy HTTP (opens new window) i load-balancer, który ułatwia wdrażanie mikrousług. Posiada on możliwość automatycznego uzyskiwania certyfikatów SSL z Let's Encrypt (opens new window). Uzyskiwanie certyfikatu SSL wymaga uwierzytelnienie (wykazania prawa do) domeny, co może odbyć się m. in. poprzez odpowiedni wpis DNS. HyperOne udostępnia usługę DNS.

Celem jest opracowanie integracji, abyśmy byli dostawcą usług DNS (opens new window) (ang. dns provider) w Træfik na potrzeby weryfikacji Let's Encrypt.

Træfik wykorzystuje (opens new window) bibliotekę Lego (opens new window), co powiększa potencjał kodu, gdyż może być wykorzystane także w innych aplikacjach. Zapewnia to także znaczną ilość integracji mogących stanowiących źródło inspiracji i podpowiedzi.

# CLI - moduł Powershell Powershell NodeJS

Posiadamy CLI, które umożliwia zarządzanie Zasobami Platformy. Chcemy zwiększyć komfort jego wykorzystania na platformie Windows poprzez modułu PowerShell, będący obwolutą (ang. wrapper) na istniejące CLI.

Został opracowany wstępny zarys (opens new window). Konieczne jest jego rozwinięcie i przełożenie na kod. Możliwe, że część kodu będzie wymagać wygenerowania do czego powinna wystarczyć elementarna wiedza o NodeJS, którą możemy przekazać.

# Terraform - dostawca Go

W rozwoju środowisk chmurowych popularny jest proces Infrastructure as Code (opens new window) (IaC) zakładający wykorzystanie do zarządzania i opisu infrastruktury deklaratywnych procedur.

Jednym z popularniejszych narzędzi usprawniających ten proces jest Terraform (opens new window) napisany w Go.

Chcielibyśmy powstania dostawcy (ang. provider), który umożliwi wykorzystanie tego narzędzia względem naszej Platformy. Wystawiamy do tego odpowiednie API. Konieczne jest napisanie odpowiedniego modułu, a w miarę rozwoju Platformy jego rozwijanie. Istnieje wiele modułów (opens new window) mogących stanowiących źródło inspiracji i podpowiedzi.

# OctoDNS - dostawca Python

OctoDNS (opens new window) jest narzędziem umożliwiającym deklaratywne opisanie strefy DNS, a w przypadku zmian opracowania planu doprowadzenia do pożądanego stanu i zrealizowania go. Umożliwia to efektywne zarządzanie rekordami DNS w sposób identyczny dla kodu źródłowego, a dzięki narzędziom ciągłej integracji wdrażanie tych zmian. OctoDNS został napisany w języku Python.

Chcielibyśmy powstania dostawcy (ang. provider), który umożliwi wykorzystanie tego narzędzia względem naszej Platformy. Udostępniamy do tego odpowiednie API. Konieczne jest napisanie odpowiedniego modułu, a w miarę rozwoju Platformy jego rozwijanie. Istnieje wiele modułów (opens new window) mogących stanowiących źródło inspiracji i podpowiedzi.

# Ansible - moduł Python

Ansible (opens new window) jest narzędziem przeznaczonym do automatyzacji zarządzania konfiguracją oprogramowania. Umożliwia ono także zarządzanie infrastrukturą np. utworzonymi wirtualnymi serwerami.

Chcielibyśmy powstania modułu, który umożliwi wykorzystanie tego narzędzia względem naszej Platformy. Udostępniamy do tego odpowiednie API. Konieczne jest napisanie odpowiedniego modułu, a w miarę rozwoju Platformy jego rozwijanie. Istnieje wiele modułów (przykład dla GCE (opens new window) mogących stanowiących źródło inspiracji i podpowiedzi.

# Grafana - źródło danych JavaScript

Grafana (opens new window) jest narzędziem przeznaczonym do monitorowania i analizy historycznych danych, przede wszystkim tych które ulegają okresowej zmianie w czasie (ang. time-series).

Grafana wspiera wiele źródeł danych (opens new window) oraz posiada dokumentacje opracowania kolejnych (opens new window). Niektóre są ściśle związanych z określonym dostawcą usług np. CloudFlare (opens new window), Azure (opens new window). Trwają prace (opens new window) nad wprowadzeniem do Grafany mechanizmów prezentacji danych czasu rzeczywistego. W platformie udostępniamy w czasie rzeczywistym, a także gromadzimy historyczne dane obrazujące parametry pracy Wirtualnych maszyn. Usprawni to monitorowanie parametrów ich pracy bez konieczności instalowania przez użytkownika jakiegokolwiek agenta.

Chcielibyśmy powstania modułu dostarczającego źródło danych, który umożliwi wykorzystanie tego narzędzia względem naszej Platformy. Gromadzimy dane historyczne i udostępniamy do tego odpowiednie API. Konieczne jest napisanie odpowiedniego modułu, a w miarę rozwoju Platformy jego rozwijanie. Istnieje wiele otwartoźródłowych modułów (opens new window) mogących stanowiących źródło inspiracji i podpowiedzi.

# Zabbix - import metryk JavaScript

Zabbix (opens new window) jest narzędziem przeznaczonym do monitorowania serwerów i aplikacji. Posiada otwarty protokół (opens new window) umożliwiający import metry z dowolnych źródeł.

W platformie udostępniamy w czasie rzeczywistym, a także gromadzimy historyczne dane obrazujące parametry pracy Wirtualnych maszyn. Takie dane możemy także zacząć udostępniać dla innych zasobów.

Wydaje się możliwe utworzenie agenta, który w czasie rzeczywistym zaimportuje dane o maszynach wirtualnych z Platformy do serwera Zabbix. Serwer Zabbix wykorzysta wówczas te informacje np. do powiadomieniu o utrudnieniach w pracy aplikacji użytkownika. W niektórych przypadkach może to pozwolić na zrezygnowanie z instalacji i konfiguracji jakiegokolwiek oprogramowania na monitorowanej wirtualnej, a każda utworzona na platformie Wirtualna maszyna mogłaby ulegać automatycznej rejestracji i zostać objęta monitoringiem.

Chcielibyśmy powstania usługi do wykorzystania przez użytkowników Platformy, które powyższe zapewnią. Ze względu na utrzymanie oprogramowania w czasie i nasze doświadczenia preferujemy napisanie tego w NodeJS, ale w przypadku wystąpienia istotnych powodów jesteśmy otwarci na inne technologie.

# Apache LibCloud - dostawca Python

Apache LibCloud (opens new window) jest biblioteka Pythona do interakcji z popularnymi dostawcami usług w chmurze za pomocą zunifikowanego API.

Chcielibyśmy powstania odpowiedniego modułu, który umożliwi wykorzystanie naszej Platformy jako dostawcy zasobów w tej bibliotece.

# CLI - graficzna prezentacja metryk JavaScript

Posiadamy CLI, które umożliwia zarządzanie Zasobami Platformy. Posiada także możliwość uzyskania danych obrazujących parametry pracy Wirtualnych maszyn (zob. [CLI="vm metrics"] ). Forma prezentacji ich jest dość surowa, choć nawet w CLI możliwe byłoby zaprezentowanie przystępniej (opens new window).

Chcielibyśmy opracowania odpowiednich zmian do CLI, które zwiększą atrakcyjność prezentacji metryk np. poprzez wykresy.

# GraphQL - bramka oparta o REST API Platformy JavaScript

Dostrzegamy potencjał (opens new window) technologi GraphQL. Posiadamy jednak istniejące stabilne rozwiązania, które wymagają utrzymania oparte o REST API Platformy.

Chcielibyśmy zbudowania bramki GraphQL opartej na bieżącym interfejsie API REST, co pozwoliłoby w pełni ocenić potencjał migracji do GraphQL.

# Acme.sh - provider DNS Bash

Acme.sh (opens new window) jest klientem protokołu ACME wykorzystywanym przez Let's Encrypt podczas wydawania bezpłatnych certyfikatów SSL. Takie certyfikaty mogą być wykorzystywane do świadczenia bezpłatnych usług na naszej infrastrukturze. Uzyskiwanie certyfikatu SSL wymaga uwierzytelnienie (wykazania prawa do) domeny, co może odbyć się m. in. poprzez odpowiedni wpis DNS. HyperOne udostępnia usługę DNS.

Celem jest opracowanie integracji, abyśmy byli dostawcą usług DNS w Acme.sh na potrzebyKon weryfikacji Let's Encrypt. Narzędzie posiada znaczną ilość integracji, których analiza pozwoli z pewnością pogłębić wiedzę o języku skryptowym bash.

# Zarządzanie użytkownikami Wirtualnych maszyn JavaScript C++ C# Python

Chcielibyśmy umożliwić zarządzanie kontami użytkowników usług działających na Wirtualnych maszynach z poziomu interfejsu Platformy. Dostrzegamy istniejące otwarte rozwiązania (opens new window), które to realizują. Posiadamy doświadczenie w opracowaniu usług umożliwiających bezpieczną komunikacje Platformy (opens new window) z systemem pracującym w Wirtualnej maszynie.

Zadanie to będzie z pewnością wymagało istotnych zmian po stronie naszej Platformy. Nie będzie ono trywialne w realizacji. Jesteśmy jednak otwarci, aby je wspólnie z Tobą zaplanować, zaprojektować i zrealizować.

# FreeBSD

FreeBSD jest system operacyjnym z rodziny Linux o ugruntowanej pozycji i stałym gronie użytkowników. Możliwe jest jego uruchomienie na naszej Platformie, co wymaga jednak ręcznych operacji użytkownika i odbiega od standardów dostarczania systemów operacyjnych. Standardem jest dostarczenie systemu w postaci Rekomendowanego Obrazu, który zapewnia wstępną konfiguracje np. w zakresie konfiguracji sieci i dostępu.

Dotychczasowe Rekomendowane Obrazy są budowane z wykorzystaniem oprogramowania Packer, a kody źródłowe rozwiązania (opens new window) są ogólnodostępne. Informacje niezbędne do konfiguracji sieci i dostępu są dostarczane przez metadane. Wykorzystywany jest cloud-init w celu wstępnej konfiguracji.

Konieczne jest opisanie skutecznie instalacji FreeBSD z wykorzystaniem oprogramowania Packer, które obecnie jest zintegrowane z naszą Platformą. Następnie opracowanie mechanizmu do odczytu metadanych w celu automatycznej konfiguracji systemu (kluczy SSH, sieci itp.). Potencjalnie możliwym do wykorzystania jest także cloud-init, gdyż został napisany w Python i posiada pewne elementy zapewnienia zgodności z FreeBSD.

# One-Click Apps

Dla początkujących Użytkowników instalacja nawet podstawowego oprogramowania tj. Wordpress, Drupal w sposób bezpieczny, efektywny może nastręczać trudności. Dostrzegamy, że inni dostawcy dostarczają w tym celu rekomendowane obrazy wirtualnych maszyn, których użycie jest uproszczone i nie wymaga głębokiej znajomości systemów Linux.

Konieczne jest:

  • identyfikacja odpowiednich aplikacji,
  • rozważenie i ewentualne zaprojektowanie uproszczonego instalatora oprogramowania np. podczas pierwszej instalacji lub przez metadane użytkownika,
  • opracowanie Obrazów z odpowiednim oprogramowaniem na bazie istniejących Rekomendowanych Obrazów z wykorzystaniem oprogramowania Packer.
  • opracowanie mechanizmu testów instalacji oprogramowania i jego poprawnego funkcjonowania w nowszych wersjach
Czy uważasz ten artykuł za przydatny? Tak Nie