Intel NUC z Pentium J5005 jako domowy serwer do tworzenia oprogramowania z użyciem Node.JS i PHP

W ramach mojej działalności gospodarczej tworzę aplikacje przeglądarkowe korzystające z PHP jako backendu i Angular / AgularJS / KnockoutJS / JavaScript do frontendu. Aplikacje te hostowane są na Linuksie, a w domu, na komputerze do pracy, mam Windows 10. Co prawda da się postawić PHP i cały serwer na Windows, ale zawsze miałem wrażenie, że to nie jest dobry pomysł, a różnice w implementacji pewnych rozwiązań mogą mi się później odbić czkawką.

Mógłbym też przesiąść się na prywatnym komputerze na Linuksa, ale piszę też w .NET (4.x), więc Windows 10 i tak muszę mieć. Próbowałem przez jakiś czas korzystać z Ubuntu, ale wygoda użytkowania była zdecydowanie niższa niż Windows, co jest tematem na oddzielny wpis.

W związku z tym korzystałem z hostingu WPRO na LinuxPL. Zaletą takiego rozwiązania jest brak konieczności zarządzania całym serwerem, łatwe dokonywanie zmian za pomocą panelu DirectAdmin i dostęp przez SSH. Po zalogowaniu przez SSH można bez problemu uruchomić watcha w node, który dynamicznie będzie wykrywał zmiany w plikach i rekompilował hostowany kod. Git też jest, więc z command line (Putty) można zrobić push do repozytorium. Wszystko działa w miarę przyzwoicie, ale jest jeden problem. Edytowany kod musi jakoś znaleźć się na serwerze.

Jednym z rozwiązań jest lokalna kopia kodu u siebie i upload przez FTP. Nie lubię tego podejścia. Czasami zmieniam coś bezpośrednio na serwerze, czasami ktoś mi coś dorzuci do repozytorium. Trzeba panować nad stanem synchronizacji kodu. Chcę mieć jedną kopię kodu, nad którą w danej chwili pracuję. Do tego używałem Expandrive. Expandrive pozwala na zmapowanie FTP, SFTP, OneDrive, Google Drive i wielu innych jak zwykłego dysku. Używam Expandrive od lat. Kiedyś wersję 1.8, a teraz 5, bo po latach wtop (wersje 2,3,4) w końcu udało im się spowodować, że mapowanie SFTP działa wystarczająco wydajnie. Niestety 'wystarczająco wydajnie' czasami nie jest wystarczające. LinuxPL czasami ma czkawki, a czasami ja mam problemy. PHPStorm, którego używam do pisania kodu, też nie do końca radzi sobie ze zmapowanym dyskiem. PHPStorm lubi skanować wszystkie pliki, co na zdalnym filesystemie może być wolne i totalnie zablokować całe środowisko. To problematyczne, bo może oznaczać 10 minut przerwy (albo i więcej), dopóki PHPStorm nie przeskanuje sobie kodu. Jak siedzę sam, to jest to może jeszcze akceptowalne, ale czasami siedzę z klientem, gdzie zmiany robimy na bieżąco.

Zacząłem szukać innego rozwiązania. Kolejną alternatywą jest postawienie linuksowego serwera u siebie w domu. Nie chciałem stawiać nowego komputera w salonie (bo w salonie znajduje się moje biurko). Na biurku mam już dwa komputery, drukarkę, 3 monitory, głośniki, a pod biurkiem router, NAS i masę kabli. Jeżeli już coś wstawiać, to coś niewielkiego. Przez długi czas myślałem o używaniu czegoś w stylu Hades Canyon, ale cena odstrasza (3000 - 4000), a sam komputer jest chyba za mocny na moje potrzeby. Rynek małych pecetów jest oczywiście duży, ale nie mogłem, albo nie byłem wystarczająco zdeterminowany, aby znaleźć coś odpowiedniego. W końcu znalazłem. Kilka miesięcy temu na rynku pojawił się Intel NUC [BOXNUC7PJYH2]:


  • Cena rozsądna - 699 zł
  • Procesor Pentium Silver J5005 z czterema rdzeniami o takowaniu od 1.5 GHz do 2.8 GHz.
  • Zużycie energii do 20W
  • Pasywne chłodzenie
Z tego co się orientowałem, to jest jeden z pierwszych NUC w takiej cenie, z procesorami mającymi 4 rdzenie. Z obejrzanych testów wynikało, że Pentium J5005 ma wydajność podobną do kilkuletnich mobilnych procesorów i3. Oczywiście nie liczy się tylko liczba rdzeni, ale także ich prędkość / IPC, ale uznałem, że taka maszyna powinna wystarczyć jako domowy serwer Apache i MySQL. Przy zakupie oczywiście zapomniałem, że ta maszyna będzie musiała też kompilować kod, ale na szczęście później okazało się, że wydajność rdzeni nie jest taka zła, a kompilacja jest tylko odrobinę (około 30%) wolniejsza od tej na serwerach LinuxPL, co było dla mnie akceptowalne. 

Maszyna oczywiście przyszła bez dysku twardego i pamięci. Włożyłem do niej 120GB dysk SSD, który miałem pod ręką i dokupiłem 4GB pamięci. Proces montażu był bardzo prosty, więc nie warto o tym w ogóle wspominać. Po montażu urządzenie zajmuje niewiele miejsca na biurku i ładnie komponuje się wśród pozostałych urządzeń:



Obok widać drukarkę i laptop. Urządzenie w porównaniu z sąsiadami jest naprawdę niewielkie. Do nowego komputera podłączyłem monitor przez HDMI, klawiaturę i mysz bezprzewodową przez USB, i oczywiście kabel ethernet. Wszystko zadziałało bez problemu.

Jako system wybrałem Ubuntu Server 18.04 LTS. Instalacja z pendrive, praktycznie bezproblemowa. Największym problemem był wybór układu klawiatury. Mechanizm detekcji w instalatorze był do bani, "polskiego programisty" nie znalazłem, bo przecież "polski" jest zły:) Oczywiście trzeba wybrać "polski".

Potem oczywiście instalacja reszty oprogramowania. To nie jest oczywiście zakres tego posta, ale ustawienie Apache, MySQL, PHP, serwera poczty to oczywiście dużo zabawy, która dla człowieka nieobeznanego mocno z Linuksem jest wyzwaniem i czasami może powodować frustrację :) Ale człowiek uczy się przez całe życie, a dobra znajomość tego systemu jest na mojej liście, więc była okazja żeby zdobyć wiedzę. Po kilku dniach "zabawy", przerywanej prawdziwymi obowiązkami, udało się wszystko uruchomić na tyle, że mogłem połączyć się za pomocą Expandrive z moim lokalnym serwerem i pracować zdalnie, podobnie jak wcześniej pracowałem z LinuxPL.

Mogę spokojnie napisać, że wydajność takiego rozwiązania jest wyższa niż serwer hostingowego LinuxPL, leżącego gdzieś w Niemczech, szczególnie jeśli chodzi o wydajność transferu plików. PHPStorm nie dostaje czkawki, a wydajność watcha w node jest dla mnie satysfakcjonująca. Rekompilacja kodu trwa nie więcej niż kilka, kilkanaście sekund dla projektu, który ma kilkadziesiąt plików TypeScript z użyciem Webpack 3. Za około 900 zł (wrzucę w koszty, więc trochę mniej) postawiłem serwer, który będzie mi przez dłuższy czas służył do developmentu, a także do testowania nowych technologii (.NET Core, SQL Server, Python). Eksperyment można uznać za udany:)

A Wy jak pracujecie z kodem w PHP?

Komentarze

Popularne posty z tego bloga

Opinie na temat hostingu linuxpl.com

Validation using ASP.NET MVC + Kendo UI + jquery validate unobtrusive

Angular 2 and AOT (ahead of time) compilation