fbpx
devstyle.pl - Blog dla każdego programisty
devstyle.pl - Blog dla każdego programisty
10 minut

Co się stało, że się… zepsuło? Czyli ja, Azure i NodeJS


25.08.2016

Kilka tygodni temu otworzyliśmy na świat Slacka, założonego pierwotnie na potrzeby konkursu Daj Się Poznać. Potem Michał Franc napisał o tym na fejsie i trochę osób dołączyło. A we środę 27 lipca dodatkowo opublikowałem o tym posta, zapraszając wszystkich Czytelników. I rozpętało się piekło.

PROD NIE DZIAŁA!!!

Nie mam teraz codziennej pracy, więc zapomniałem już jak to jest gdy coś “nie działa na produkcji”. Niepowtarzalne uczucie, prawda? Gdy “wszystko się wali”. Gdy z głośników i megafonów słychać tylko złowrogi głos “uprasza się wszystkich o zaprzestanie wykonywania wszelkich czynności i zapierdalanie na stanowiska!“.

To działa jak 5-litrowy baniak RedBulla wypity przez słomkę w ciągu 3 minut. Stawia na nogi, wzmaga czujność. Zalewa nasz organizm adrenaliną. I noradrenaliną. Wkrótce potem do gry wkracza kortyzol. FIGHT! Tak, w takie rzeczy teraz wnikam.

Raz na jakiś czas taki sprawdzian jest nawet pożądany. U mnie w tym konkretnym przypadku była to weryfikacja: zardzewiałem już, rozleniwiłem się kompletnie, czy nie? Okazało się na szczęście, że nie. Ale co się nadenerwowałem to moje. Piękne snapy tego dnia powychodziły, żywiołowy raport prosto z pola walki. Chociaż z racji tego, że było przed 22:00, to powinny same gwiazdki lecieć z głośników.

The Downward Spiral

W lutym napisałem tekst “Programistyczny Trąd“. O tym, co w mnie w naszym zawodzie wkurza. O walce z maszynami. O słabych narzędziach, wrednych komputerach i binarnym pechu. W reklamach mówią o PH5ipół, u nas jest PH01. A częściej nawet 00.

Każda taka przygoda przypomina mi doskonale dlaczego chciałem odpocząć od klepania kodu. I jak bardzo dobrze jest mi od kilku miesięcy, gdy nie muszę na co dzień zmagać się z takim gównem. 5 godzin poszło w kibieni, ale… działa.

Na szczęście na ten dzień nie miałem zaplanowanego niczego poza pisaniem prozy, jeżdżeniem na motocyklu po okolicznych wioskach i szarpaniem hantli w garażu. Wszystkie te czynności musiały ustąpić.

Ale o-co-cho?

Slack-srak

Urzeknie Cię moja historia.

Wejście na Slacka wymaga zaproszenia od admina. A nie będziemy przecież ręcznie zapraszać każdego chętnego do dołączenia – to powinna być samoobsługa! Na szczęście jakiś cwany ziomek skrobnął aplikacyjkę w nołdzie-dżej-es, umożliwiającą wysłanie sobie samemu przez www maila zapraszającego. Ta właśnie aplikacja stoi na slackin.devstyle.pl. Jej źródła dostępne są tutaj: https://github.com/rauchg/slackin.

Pod starym – konkursowym – adresem działała sobie taka instancja i miała się dobrze. Wdrożona była na Heroku, jeden z Uczestników DSP, Karol, o nią dbał. Nie było właściwie za bardzo o co dbać: postawił i działała. Do czasu.

Do czasu, gdy napisałem posta zapraszającego wszystkich do naszego grona. AKURAT WTEDY się wywaliła. Czaisz? Działa miesiącami, a tego jednego dnia przestaje. Czy ktoś jeszcze wątpi, że czasy Skynetu są coraz bliżej?

One-click-deployment-srojment

Alarmowo pingnąłem Karola, ale on bytuje w innej rzeczywistości czasowej i gdy u nas było rano – i aplikacja nie działała – to u niego była jeszcze noc – i aplikacja pewnie działała :). Trzeba było coś zrobić samemu.

Wiem, że jemu wdrożenie tej pierwotnej instancji zajęło jakieś grosze, kilka minut. Postanowiłem więc zrobić to samo na Azure. A co tam, kilka minut wolnego mam, a z konta Azure aż mi się waluta wylewa – tyle mam tam darmowych minut, że nie jestem w stanie wykorzystać. No to jedziemy.

Wchodzę na GitHuba i widzę:

clip_image001

Kliknąłem, patrzę:

clip_image002

I nie wierzę. Ale zajebiście! Nawet dane się same uzupełniły. Średnio się orientuję zarówno w Node JS jak i w Azure, więc bardzo się ucieszyłem. Jeden guzik! Single-baton-deplojment! Marzenie! Kliknę i będę miał wolne.

Klikam, czekam, wdraża się. W końcu komunikat: sukces! Wchodzę na URL i… no, do sukcesu to jeszcze daleko. Nic. Pusta strona startowa Azure. Zagłębiam się w logi wdrożenia: błąd. Coś się posypało, a komunikatu nawet do końca nie rozumiem. Coś o circular dependencies w pakietach NPM. Kaka.

Trudno, zakasam rękawy i zrobię sam. W końcu robiłem takie rzeczy od ponad dekady, więc raz-dwa i pozamiatane.

Azure-srażur

Idę na portal Azure. Loguję się. Czekam chwilę, aż mnie Microsoftowe uwierzytelnianie poodbija od połowy internetu, generując z milion redirectów. W końcu: jest. Nowiutki, świeży portal, którym tak się wszyscy podniecają. Ale akurat wtedy im na kablach huby wyrosły, czy coś:

clip_image003

NIC nie da się zrobić. Tylko zamknąć komunikat o błędzie i odświeżyć stronę. A po odświeżeniu to samo, we wszystkich przeglądarkach.

Na tym etapie powoli zaczyna się we mnie gotować. Miało być 5 minut, a mija pierwsze pół godziny. Procent upada po raz pierwszy.

Na szczęście jestem świadom istnienia DWÓCH WERSJI portalu Azure. Jedna to ta nowa – co nie działa. A druga to jakaś stara. Na nią się zalogowałem i zadziałało. Stworzyłem aplikację, nadałem URL i mam: puste miejsce w chmurze, czekające na to, co w nie wrzucę. Musiałem to zrobić od razu, bo potrzebowałem adresu IP:

clip_image004

Hosting-srosting

Adres IP jest konieczny, aby odpowiednio skonfigurować domenę. Postanowione zostało, że slack ten będzie dostępny w mojej subdomenie, *.devstyle.pl. W “dniu fakapu” miałem już odpowiednio ustawione slack.devstyle.pl, jednak adres ten kierował do niedziałającej aplikacji.

Trzeba więc było zrobić dwie rzeczy: stworzyć nową poddomenę (stanęło na slackIN.devstyle.pl) i zmienić konfigurację starej tak, aby wskazywała na nową aplikację. Formalność. Wpadam na Webio, gdzie od lat kupuję domeny i hostuję prawie wszystko, lubię i szanuję i polecam i w ogóle.

Wchodzę w edycję DNS dla starego adresu – slack.devstyle.pl – wprowadzam nowy adres IP, klikam “Zapisz” i…

clip_image005

Przecież ten adres jest POPRAWNY!!!!

clip_image006

No naprawdę, bogu-swarogu, ty mnie chyba nienawidzisz! Zawyłbym “DLACZEGO JA???” gdyby Kurt Vonnegut nie uświadomił mi lata temu, że to najgłupsze pytanie jakie może zadać istota ludzka. Więc ograniczyłem się do rzucania mięsem.

Póki co: godzina minęła, nic nie działa, a wszystko co mogło zawieść: zawiodło.

Potem tknęła mnie programistyczna intuicja. Skasowałem rekord i dodałem go od nowa. Poszło. Więc tylko ekran edycji miał jakieś wąty. Życie.

Node-srołd. JS.

Z pustą aplikacją i skonfigurowanymi domenami przyszedł czas na to, co się wywalało na samym początku: uruchomienie aplikacji NodeJS na Azure.

Szczerze przyznam: kolejne dwie godziny są dla mnie tajemnicą. Czas przestał istnieć, byłem tylko ja, Azure, Node, projekty na GitHubie i jeden artykuł: “Get started with Node.js web apps in Azure App Service“. Zapis tego czasu w historii Gita wygląda tak:

clip_image007

A jak już przy Gicie jesteśmy: zaimponowała mi świetna integracja Azure’a z Gitem.

Finalnie musiałem trochę zmodyfikować kod tej wdrażanej aplikacji (ale ze mnie level PRO!). Pokombinować, pohackować, pomodlić się chwilę do samego siebie… i zadziałało.

Stan na 3 godziny od momentu rozpoczęcia procedury ratunkowej: działa po HTTP. A raczej BY działało, gdyby Azure nie przekierowywał od razu na HTTPS.

No to siup, jeszcze tylko certyfikacik sobie gdzieś wygenerować, zainstalować go na ażuże i z fajrant.

SSL-sresresel

Kolejne dwie godziny później, zostawiając klawiaturę w dość posiniaczonym stanie, postanowiłem: pierdolę to, proszę państwa, serdecznie. Wyłączyłem redirect do HTTPS w konfiguracji aplikacji (ostatni commit na powyższym obrazku), ogłosiłem zwycięstwo i poszedłem na fajkę.

Wiem, że jest Let’s Encrypt, ale ni chu-chu nie wyszło mi jego użycie. I powiem Wam: gdzieś w okolicach dwunastnicy miałem to, “dlaczego”.

The great finale

Oto zrzut z mojego narzędzia do monitorowania czasu tego dnia:

clip_image008

Pięć godzin, ośmnaście minut i dwadzieścia cztyry sekundy. Dzień miałem zmarnowany do samego końca.

Ale warto było.

Inicjatywa bardzo dobrze się przyjęła. Nie umarła. Zapisało się już ~1200 programistów!

Codziennie toczą się dziesiątki dyskusji, o każdej porze dnia i nocy można tam znaleźć kogoś do poprzytulania :). Nie ma Cię tam jeszcze? To wpadaj!

0 0 votes
Article Rating
13 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Łukasz
7 years ago

“mojego narzędzia do monitorowania czasu” – co to za narzędzie? :)

dami95
7 years ago
Reply to  Łukasz

Screen wskazuje na Toggl :)

bobiko
7 years ago

Toggl jest zajebistym narzędziem. multi platform ;)

Tomasz Onyszko
7 years ago

Co do Let’s encrypt to pewnie już na to trafiłeś ale … – https://www.troyhunt.com/everything-you-need-to-know-about-loading-a-free-lets-encrypt-certificate-into-an-azure-website/ – jak co to najlepiej wygenerować request do Azure o taki ficzer i niech 1200 devs z slacka to poprze :) .

A masz gdzieś te wszystkie zmiany i modyfikacje udokumentowane :)?

Karste
Karste
7 years ago

Cool story bro :)

Mała poprawka, nie stało w heroku, tylko w e24cloud, na polskim serwerze, żeby wam wszystkim szybko hulało ;). Zerknąłem potem co tam się popsuło, wywaliło się, bo sobie Jaśnie Pan nazwę zażyczył zmienić :). Przy zmianie nazwy slackin ma(miał) jakieś wąty i prosi, żeby go odpalić jeszcze raz.

A, no i jak zwykle świetnie się czytało!

“Alarmowo pingnąłem Karola, ale on bytuje w innej rzeczywistości czasowej i gdy u nas było rano – i aplikacja nie działała – to u niego była jeszcze noc – i aplikacja pewnie działała :). Trzeba było coś zrobić samemu.”

To mnie rozwaliło kompletnie, leżę i kwiczę :D Bo Ty jesteś ranny ptaszek, jakbyś wieczorami robił jak przystało na porządnego programistę, to ja miałbym już dzień i nie byłoby problemu! :)

P.S. Jak chcesz, to Ci zrobię tego let’s encrypta ;) (moja instancja miała!)

Karste
Karste
7 years ago

No dobry dobry, nowa nazwa dużo lepiej oddaje sens. No i wywaliła się wcześniej, ale Ci co mieli się zarejestrować to się zarejestrowali i nikt nie zgłaszał.
A ja dzisiaj po raz wtóry przerobiłem wątek “produkcja się wywaliła” i stwierdzam, że ja akurat takie akcje lubię, jest adrenalina, chce się debugować ;)

blaze
7 years ago

Niby działa ale nie działa :p Strona mieli mieli i nic.

pawelek
7 years ago

Wydaje mi się, że to co opisujesz jest najfajniejsze w tej robocie (może dlatego teraz jestem devops). A ponieważ gdyby trzeba to było robić codziennie, to zapewne bym się postarał i to zautomatyzował. I to porządnie. Nawet raz na jakiś czas… No dobra lubię to i czasem automatyzuję czynności, które wykonuję tylko raz, ale wiele się przy tym uczę i zazwyczaj, i tak warto :)
To czego nie lubię w tej robocie to wejście do projektu, który jest źle ogarnięty, ale zmieniać go nie wolno. W sensie, jest źle, ale działa to nie ruszać! A ja tam bym poprawił i przy następnym fuckupie, wolałbym wiedzieć co się dzieje. Constant deployment, or boost to automatic :)

ohdev
7 years ago

Wow, czyli to nie jest tak, że czasami mi idzie jak po grudzie nawet przy – podobno – najprostszych rzeczach. Innym też się to zdarza. Dzięki %. Zrobiłeś mi dzień. Idę pozbierać gruszki.

Piotr Rabiniak
7 years ago
Reply to  ohdev

Nie bój żaby OHDEV. Każdy tak czasem ma. Swego czasu bardzo dobrego blogposta na ten temat napisał sam Scot Hanselman, więc uszy do góry i patataj przez prerię ;-)

Kurs Gita

Zaawansowany frontend

Szkolenie z Testów

Szkolenie z baz danych

Książka

Zobacz również