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 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
Go
Træfik - dostawca DNSTræfik to nowoczesne odwrotne proxy HTTP i load-balancer, który ułatwia wdrażanie mikrousług. Posiada on możliwość automatycznego uzyskiwania certyfikatów SSL z Let's Encrypt. 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 (ang. dns provider
) w Træfik na potrzeby weryfikacji Let's Encrypt.
Træfik wykorzystuje bibliotekę Lego, 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.
Powershell NodeJS
CLI - moduł PowershellPosiadamy 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. 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ć.
Go
Terraform - dostawcaW rozwoju środowisk chmurowych popularny jest proces Infrastructure as Code (IaC) zakładający wykorzystanie do zarządzania i opisu infrastruktury deklaratywnych procedur.
Jednym z popularniejszych narzędzi usprawniających ten proces jest Terraform 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 mogących stanowiących źródło inspiracji i podpowiedzi.
Python
OctoDNS - dostawcaOctoDNS 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 mogących stanowiących źródło inspiracji i podpowiedzi.
Python
Ansible - modułAnsible 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 mogących stanowiących źródło inspiracji i podpowiedzi.
JavaScript
Grafana - źródło danychGrafana 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 oraz posiada dokumentacje opracowania kolejnych. Niektóre są ściśle związanych z określonym dostawcą usług np. CloudFlare, Azure. Trwają prace 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 mogących stanowiących źródło inspiracji i podpowiedzi.
JavaScript
Zabbix - import metrykZabbix jest narzędziem przeznaczonym do monitorowania serwerów i aplikacji. Posiada otwarty protokół 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.
Python
Apache LibCloud - dostawcaApache LibCloud 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.
JavaScript
CLI - graficzna prezentacja metrykPosiadamy CLI, które umożliwia zarządzanie Zasobami Platformy. Posiada także możliwość uzyskania danych obrazujących parametry pracy Wirtualnych maszyn (zob. h1 vm metrics ). Forma prezentacji ich jest dość surowa, choć nawet w CLI możliwe byłoby zaprezentowanie przystępniej.
Chcielibyśmy opracowania odpowiednich zmian do CLI, które zwiększą atrakcyjność prezentacji metryk np. poprzez wykresy.
JavaScript
GraphQL - bramka oparta o REST API PlatformyDostrzegamy potencjał 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.
Bash
Acme.sh - provider DNSAcme.sh 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.
JavaScript C++ C# Python
Zarządzanie użytkownikami Wirtualnych maszynChcielibyś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, które to realizują. Posiadamy doświadczenie w opracowaniu usług umożliwiających bezpieczną komunikacje Platformy 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 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