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ę:
Kliknąłem, patrzę:
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ś:
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:
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…
Przecież ten adres jest POPRAWNY!!!!
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:
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:
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!
“mojego narzędzia do monitorowania czasu” – co to za narzędzie? :)
Screen wskazuje na Toggl :)
Tak jest :)
Toggl jest zajebistym narzędziem. multi platform ;)
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 :)?
Tomasz,
Poszło info innym kanałem z linkiem do ściągnięcia sobie wdrożonej wersji.
A za linka dzięki, nie widziałem tego. Kurde koleś za bardzo wsiąknął w te wasze identity i security i w ogóle o SEO nie poczytał :).
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… Read more »
Karste,
Zmiana nazwy to pomysł “ludu” :). Dobry zresztą. Ale to ciekawe, czyli aplikacja nie wywaliła się tego konkretnego dnia tylko wcześniej.
Nie wiem skąd mi się Heroku ubzdurało w takim razie. Hmmm…. I nadal nie wiem.
A Let’s Encrypt sobie darujmy, jak działa to nie tykać. Poza tym największy ruch już za nami. Ale dzięki :).
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ć ;)
Niby działa ale nie działa :p Strona mieli mieli i nic.
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… Read more »
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.
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ę ;-)