Diversity w polskim IT
Łukasz Prokulski
Łukasz ProkulskiData analyst, R developer, PMO manager, blogger @ prokulski.net

Stawiamy własny serwer

O tym, jak zbudować własny serwer do programowania w R i Pythonie.
29.11.202019 min
Stawiamy własny serwer

Budujemy własny serwer do programowania w R i Pythonie - razem z serwerem WWW (aby móc prezentować wynik swoich prac), PHP oraz bazami danych MySQL i PostgreSQL.

Opis środowiska

Niniejszy wpis prezentuje przygotowanie serwera zbudowanego na Linuxie w dystrybucji Ubuntu, z działającym na nim RStudio, dostępnym przez przeglądarkę z dowolnego miejsca z Internetem. Serwer pozwoli nam też na budowanie i publikowanie aplikacji napisanych w Shiny. Przy okazji zainstalujemy Pythona razem z Jupyter Notebook (oraz JupyterLab) do wygodnej pracy. Całości dopełni baza danych PostgreSQL. Aby móc publikować swoje dzieła w formie bloga zainstalujemy PHP oraz bazy MySQL. Być może zechcesz zainstalować WordPressa, a on tego wymaga.

Do czego taka maszyna może się przydać? Wszystko zależy od wydajności. Mały serwer może swobodnie posłużyć do nauki programowania (R, Python, PHP) i prowadzenia własnego blogaska (na przykład o programowaniu).

Duża maszyna (dużo RAMu, dużo procesorów, wszystkiego dużo) to już kwestia wyobraźni. Ja na przykład wyobrażam sobie jakiś serwis działający w PHP i udostępniający użytkownikom w czasie prawie rzeczywistym informacje zebrane przy pomocy Pythona z wielu miejsc sieci, przetworzone na przykład modelami opartymi o TensorFlow (też w Pythonie) i ubranymi w wykresy (narysowane w R + ggplot). Wyeksportowane do statycznych plików, które później są pokazywane w ramach prezentacji treści (przez tego początkowego PHPa).

Wszystko jedno jaki serwer - ważne, żeby był online przez 24h/dobę. Wówczas nie musimy zostawiać komputera włączonego na noc (albo kilka dni) żeby się coś przeliczyło. Albo jeśli zbieramy każdego dnia dane z jakiegoś serwisu (zbierałem tak dane o Veturilo, teraz zbierają się dane o wycieczkach do Grecji), albo mamy jakieś boty (na przykład mój twitterowy rstatspl).

Wszystko jednak musi mieć swój początek - najpierw zakupy.

Zakupy

Kupujemy domenę

Skorzystałem z NameSilo, bo chciałem dziwaczną domenę, a w dodatku jak najtaniej – być może tylko na potrzeby tego wpisu. Liczę się z tym, że zostanę przy niej przez kilka lat, stąd wybór po cenie odnowienia domeny. Nie interesowały mnie domeny za 0 zł. W każdym razie, domenę można kupić w dowolnym miejscu (w dowolnym sklepie z domenami rzecz jasna). Ważne jest, aby mieć dostęp do panelu konfiguracyjnego domeny, a ten w NameSilo umożliwia wiele - chociaż jest mało intuicyjny. Na razie tylko kupujemy i niczego nie robimy. Mamy, cieszymy się.

 

Kupujemy VPSa

Tutaj sprawa jest już trudniejsza. Nie będę zbytnio zanudzał: trzeba znaleźć serwer odpowiedni do swoich potrzeb, najlepiej z możliwością łatwej rozbudowy. Może być jeden procesor (core), 1 GB RAMu i 10 GB dysku. Mniej według mnie nie ma sensu – to, co instalujemy w dzisiejszym odcinku zjada jakieś 8 GB dysku, a jest to gołe środowisko pracy. Może być i takie f1.16xlarge z Amazona (64 core, 976 GB pamięci i 4x 940 dysku). Może być z Azure czy Google (takie na przykład 96 core, 624 GB pamięci, 8 GPU Tesla V100 i 3x 375 GB dysku) – bagatelka, jakieś 13.5 tys. dolarów miesięcznie w Google Cloud. Może być z OVH, wszystko jedno. Jedyne, czego trzymamy się w tym wpisie, to publiczne stałe IP, prawa roota i dostęp przez SSH.

Równie dobrze może to być goły Linux (tutaj: Ubuntu) zainstalowany na przykład na komputerze stojącym gdzieś w naszej piwnicy, albo nawet jako maszyna wirtualna na laptopie (działająca wtedy, kiedy jest włączona. Rozwiązanie do nauki w sam raz, do pracy już raczej nie bardzo).

Ja skorzystałem z webh, czytając raczej dobre opinie w sieci i widząc atrakcyjną cenę. Jeśli zdecydujesz się na tego dostawcę, skorzystaj proszę przy zakupie z podanego linku, albo kodu promocyjnego PROMO25475.

Konfigurujemy VPS-a

Wyklikujemy więc u dostawcy nasz serwer (jego parametry), płacimy i po kilku minutach maszyna powinna być gotowa. Dostawca napisze nam (w jaki sposób - to zapewne zależy już od dostawcy) jak się do maszyny dostać (jej IP i hasło do roota).

Logowanie i SSH

W pierwszej kolejności potrzebujemy klienta SSH – dla Windows jest to na przykład PuTTy. Ściągamy, instalujemy, uruchamiamy, konfigurujemy połączenie do naszego serwera. Tworzymy użytkownika o uprawnieniach roota i tworzymy użytkownika - w przykładzie będzie to lemur.

adduser lemur

 
Ubuntu zapyta nas przede wszystkim o hasło do nowego konta i kilka innych informacji.

W następnej kolejności dodajemy nowemu użytkownikowi prawa roota (a tak naprawdę pozwalamy mu korzystać z sudo, czyli uruchamiać komendy z konsoli z prawami roota):

gpasswd -a lemur sudo

 
Teraz możemy się wylogować z konta roota (i już do niego nie wracać), a następnie zalogować się na utworzone konto. To na nim w dalszym ciągu działamy.

Update serwera

Warto na początek sprawdzić czy Ubuntu jest aktualne, a jeśli trzeba – niech się zaktualizuje:

sudo apt-get update
sudo apt-get upgrade

 
W zależności od dostawcy VPSa może coś się zaktualizować, ale nie musi. W przypadku mojego dostawcy system był aktualny. Warto co jakiś (na przykład raz w miesiącu, można to wrzucić w crona) czas powtarzać powyższe komendy.

Ze względów bezpieczeństwa dobrze jest wyłączyć dostęp do serwera przez SSH dla użytkownika root. Logujemy się więc na nasz serwer (nowo utworzonym kontem) i przechodzimy do konfiguracji SSH:

sudo nano /etc/ssh/sshd_config

 
Może okazać, się że nie mamy zainstalowanego nano (to wygodny edytor tekstu, dla laików prostszy w obsłudze, niż na przykład vi) – wówczas go instalujemy:

	
sudo s apt-get install nano

 
Po ewentualnej instalacji możemy przejść do edycji. Aby zablokować dostęp dla root po SSH odnajdujemy w pliku /etc/ssh/sshd_config linię:

<p>Loading...</p>