Dzisiaj każdy może stworzyć swojego blog, pisać artykuły i wyrażać w ten sposób swoje zdanie w internecie. Jedyne czego potrzebuje taka osoba to kawałek kodu, który wyświetli treść użytkownikowi i hosting. W tym odcinku postaram się zaproponować bardzo łatwe jak i tanie rozwiązanie (do pewnego stopnia nawet darmowe). Artykuł jest podzielony na 3 sekcje: wymagnia, hosting, kod. Oczywiście cały niezbędny kod będzie dostępny dla was z poziomu githuba. Linki w sekcji wymagnania.
Wymagania
Do uruchomienia swojego blogu potrzebne będzie tylko kilka rzeczy:
- Konto AWS
- Zaintalowany i skonfigurowany (klient CLI dla AWS)[https://aws.amazon.com/cli/]
- Zainstalowany terraform
- Zainstalowany Docker
- Jakies 20 minut
Proces instalacji będzie opisany dla Ubuntu, ponieważ aktualnie takiego systemu używam.
Zakładanie konta AWS
Nie chce tutaj opisywać całego procesu zakładania konta w chmurze AWS. Jest to bardzo szybki proces, bez żadnych niespodzianek. Jedynie trzeba podpiąć kartę płatnicza do swojego konta co może być dla niektórych problematyczne. Polecam użycie karty prepaid np: Revolute . AWS daje każdemu użytkownikowi pakiet Free Tier. Niektóre usługi są w pewnym stopniu za darmo przez pierwszy rok, a niektóre są w ograniczonym stopniu za darmo. W następnych artykułach opisze stawianie takiej samej usługi u innego dostawcy chmury, żebyś miał porównanie jak to wygląda u innych.
Teraz musisz wygenerować Access i Secret key dla twojego konta. Do tego celu najlepiej stworzyć nowe użytkownika IAM i dopiero jemu dać odpowiednie dostępy. Poniżej zamieszczam instruckje jak to zrobić z powiomu konsoli AWS:
- Zaloguj się do konsoli pod adresem https://console.aws.amazon.com/.
- W serwisach wybierz IAM
- Przejdz do użytowników i nacisnij przycisk “Add user”.
- Wybierasz dowolną nazwę dla użytkownika. Wymagane jest zaznaczenie “Programmatic access”. Ta opcja wygeneruje dla użytkownika Access i Secret key. Klikasz “Next”
- Wybierasz Attach existing policies directly i wyszukujesz polise dministratorAccess.
- Na następnej stronie dodaj tagi o ile takie potrzebujesz.
- Na kolejnej stronie zobaczysz podsumowanie tegp co zostanie stworzone.
- Ostatnia strona zawiera niezbędne dla Ciebie informacje, Access i Secret key.
Jesteś gotowy żeby skonfigurować AWS CLI.
Instalacja i konfiguracja AWS CLI
AWS CLI jest dostarczana jako moduł pyhton. Instalacja jest bardzo prosta, wystarczy w konsoli uruchomić komendę kilka komend która zainstaluje pip3 oraz sam moduł AWS CLI:
Po zakończonym procesie installacji powinieneś skonfigurować CLI pod swoje konto AWS:
Teraz możesz sprawdzić czy poprawnie skonfigurowałeś CLI poleceniem.
Wynik tego polecenia powinien być taki jak powyżej. Zawiera dane na temat twojego użytkownika takie jak, UserId, numer konta AWS oraz ARN obiektu użytkownika.
Instalacja Terraforma
Instalacja teraforma jest manulna. Nie ma paczki systemowej, ani innego ładnego rozwiązania. Trzeba wejść na strone i pobrać najnowszą albo konkretną wersje. Jednak społeczność rozwiązała ten problem pisząc prosty skrypt, który robi dokładnie to co chcemy. Zamieszczam jego kod oraz odnośnik do źródła:
Umieść zawartość w pliku terraform-install.sh. Gdy już masz plik na swoim komputerze wystarczy dodać uprawnienia do uruchomienia, i odpalić go:
Jak skrypt zakończy prace możemy sprawdzić czy terraform został poprawnie zainstalowany sprawdzając czy się uruchomi.
Instalacja Dockera
Procesu instalacji Dockera nie będę opisywał. Wszystkie informacje na ten temat można znaleść w moim poprzednim artykule na temat Kubernetesa na VPS albo w oficjalnej instrukcji.
Hosting
Żeby ktoś zobaczył twoją stronę, to musimy wystawić ją na jakimś serwerze, który jest podpięty do sieci. Jest jeszcze jedna możliwość, ale tyczy się ona tylko stron opartych na plikach statycznych jak blog, który właśnie czytasz. Rozwiązaniem jest object storage. W przypadku AWS jest to S3. Usługa ta daje możliwośc wystawienie całego bucketu za webserverem
Usługi które wykorzystamy:
- S3
- CloudFront
- Certificate Manager
- Route 53
Kod źródłowy dla infrastruktury
Infrastruktura jest stworzona za pomocą terraforma. Moduł jest dostępny na GitHub. Jest to moduł, który tworzy wszystkie niezbędne obiekty w chmurze AWS. Do poprawnego działania modułu trzeba go dodać do swojego projektu terraform z odpowiednimi zmiennymi. Przykład działającego rozwiązania znajduje się w katalogu example. Poniżej zamieszczam fragment, który właśnie znajduje się w tym katalogu.
W pliku znajduje się definicja prowaidera dla AWS oraz inicjalizacja modułu z tego repozytorium. Musis zmienić 2 zmienne bucket_name i domain_name na odpowiednie dla twojego projektu. Pamiętaj że nazwa bucketu s3 musi być unikalna. Nikt inny nie może mieć już bucketa z taką nazwą.
Zanim uruchomisz terraforma jeszcze musisz ustalić jedną rzecz. Czy posiadasz domenę, której będziesz używał. Jeśli nie to musisz kupić ją u jakiegoś dostawcy. możesz to też zrobić bezpośrednio w AWS. Polecam kupić jak najtaniej, zwróć uwagę na koszt przedłużenia. Często domena jest za symboliczną złotówkę ale potem utrzymanie domeny przez następny rok kosztuje ponad 100zł albo jeszczce więcej.
Uruchomienie Terraforma
Dobrze jesteś gotowy na uruchomienie swojej infrastruktury. Nie uruchamiaj bezposrednio terraforma, w taki sposób żeby stworzył infrastrukture przy użyciu apply. Na początku stworz plan dla terraforma poleceniem terrfarom plan.
Terraform powinien wyświetlić Ci wszystkie zmiany jakie zostaną wykonane w AWS. Najprawdopodobniej będzie to tylko tworzenie obiektów. Na koniec zostanie wyświetlone polecenie, którym wcześniej wygenerowany plan możemy wdrożyć w życie. Moim przypadku polecenie wyglądało następująco:
Gdy zmianny zgadzają się z oczekiwanymi, wpisujesz “yes” akceptując zmiany i czekasz aż wykona się. Może to chwilę potrwać z powodu podpisywania certyfikatu. W trakcie wykonywania gdy obiekt route 53 będzie stworzony powinieneś u swojego dostawcy domeny stworzyć odpowiednie wpisy na temat serweró nazw. To na jekie serwery powinna kierować nasza domena wpisami typu NS można znaleść w konfiguracji strefy w Route 53.
Ważne: Zastanawiasz się czemu rpoprosiłem żebyś to zrobił w ten sposób. W ten sposób możesz odłożyć samo wdrożenie na później i będziesz miał pewność że to co się wykona na infrastruktórze będzie tym co wcześniej widziałeś.
Gdy terraform skończy swoją prace, nasza infrastruktura jest gotowa do użytku. Możemy się zająć zawartością strony, którą umieścimy.
Twoja strona
Została nam ostatnia rzecz do zrobienia. Wygenerowanie strony. W artykule przedstawie Ci prosty sposów na stworznie strony statycznej za pomocą frameworku Jekyll. Do tego celu przygotowałem repozytorium, które ułatwi nam tworzenie strony i potem dalsze jej utrzymywanie.
Sklonuj repozytorium używając polecenia:
W repozytorium znajduje się Dockerfile oraz wszystkie niezbędne pliki do zbudowania obrazu. Dodatkowo stworzyłem Makefile, który automatyzuje procesy. Będzie to twoje główne narzędzie. Zaimplementowany w nim jest target help, który służy do wyświetlania pomocy. Znajdują się w niej opisy wszystkich targetów w raz z listą parametrów.
Zacznijmy tworzyć stronę. Na początku musimy zbudować obraz dokerowy, w którym będziemy uruchamiać i budować naszą stronę.
Dobrze masz gotowy obraz. Następny krok to już wygenerowanie strony. Jeśli to będzie twoja pierwsza strona powinieneś zacząć od wygenerowania jej za pomocą targetu new.
Jak widzisz został wygenerowany nowy katalog demo_blog (takiej nazwy strony użyłem). Zawiera on wszystkie pliki których potrzebuje Jekyll do działania.
To jest już w stu procentach działająca strona, którą da się uruchomić. Możemy to zrobić za pomocą polecenia:
W tym momencie twoja strona jest dostępna na twojej lokalnej maszynie pod adressem http://localhost:400 i wygląda podobnie do tej poniżej.
Jeśli chcesz zacząć swoją strone od gotowego projektu wystarczy go umieścić jako katalog w taki sam sposób jak demo_blog.
Wysyłamy stronę w świat
Przyszedł czas na najlepszą część. Wysłanie naszej nowej storny w świat. Jest to wyjątkowo proste. Twoja strona jest będzie umieszczona na s3 do czego możemy użyć aws cli. W Makefile znajduje się target, który dokładnie to robi.
Twoja strona zostanie synchronizowana do podanego bucketu. Teraz wystarczy werjść pod domenę, którą podałeś przy tworzeniu infrastuktury.
Podsumowanie
Dziki kilku krótkim krokom zainsniałeś w internecie :). Zaprezentowane rozwiązanie możemy używać na początku życia strony jak i gdy dziennie ma setki albo tysiące użytkowników dziennie. S3 nie ma limitów na ilość requestów na sekunde, dodatkowo strona jest cachowana po stronie CloudFront co zapewnia znaczne oszczędności przy dużym ruchu na stronie. Jak dzięki temu artykułowi zachęciłem Cię do postawienia własnej strony, podziel się tym w komentarzach. Bardzo chętnie zobacze wasze projekty.
Zachęcam do zapisania się w newsleterze. Mam pewien pomysł na projekt, którym chętnie wykorzystam Newsleter jako źródło danych. Oczywiście tylko dla chętnych :).