Konfiguracja prostego środowiska deweloperskiego – tutorial dla naszego wakacyjnego teamu develoerskiego

Rozpoczęliśmy współpracę ze Szkołą Główną Gospodarstwa Wiejskiego z Wydziałem Zastosowań Informatyki i Matematyki.

Za nami już warsztaty rekrutacyjne z dziesięcioma studentami (w tym trzema uroczymi studentkami). Spośród nich wybraliśmy piątkę fantastycznych adeptów programowania (w tym jedną osobę płci przepięknej!!!!).

Razem stworzymy team, który zacznie, w ramach swoich praktyk wakacyjnych, produkcję narzędzia wspomagającego pracę dziekanatu.

Więcej o tym będziemy pisać na naszym fanpejdżu: https://www.facebook.com/pages/pracowici-programiscipl/374000416050262?fref=ts

Z myślą o wspólnej pracy nad projektem przygotowaliśmy krótki tutorial dla naszego team-u, który z racji braku lepszego miejsca opublikujemy na blogu. Z pewnością się przyda jeszcze nie raz.

Tutorial dotyczy konfiguracji własnego lokalnego środowiska deweloperskiego opartego na systemie Debian 7 (linux).

Sposobów konfiguracji środowisk developerskich jest co najmniej tyle ilu jest developerów. Nasz nie jest najprostszy – ale:

  • daje spore możliwości
  • jest zbliżony do konfiguracji rzeczywistych środowisk produkcyjnych (w przeciwieństwie do WAMP-ów i innych rozwiązań bazujących na systemach Windows)
  • można w łatwy sposób go przenosić lub współdzielić
  • z kodem pracujemy tam gdzie chcemy – czyli np. w systemie Windows w edytorze NetBeans – ale samą aplikację uruchamiamy na środowisku developerskim dokładnie takim w jakim będzie uruchamiana kiedyś na tzw. produkcji

Założenia

  • Będziemy pracować niezależnie od systemu operacyjnego jaki mamy zainstalowany na komputerze. Jeśli masz Windows-a to dobrze, jeśli masz iOS-a to też dobrze. W naszym osobistym systemie operacyjnym, bez integracji w jego instalację, postawimy działającą równolegle z systemem „wirtualną maszynę” a na niej uruchomimy Debiana. To będzie nasz serwera na którym rozwijać będziemy aplikację.
  • „Wirtualna maszyna” to po prostu zwykły program działający w lokalnym systemie operacyjnym emulujący pracę komputera. To tak jak by dodatkowy komputer w komputerze :) – nam będzie służył jako serwer.

Krok po kroku

Pobieramy Oracle VirtualBox i instalujemy go w systemie operacyjnym. To będzie nasz emulator komputera na którym zainstalujemy system Debian. https://www.virtualbox.org/

Pobieramy jedną, pierwszą instalacyjną płytę (obraz płyty) z systemem operacyjnym Debian 7 w architekturze amd64 np. z naszego rodzimego serwera lustrzanego icm-u: http://ftp.icm.edu.pl/pub/Linux/debian-cd/7.1.0/amd64/iso-cd/debian-7.1.0-amd64-CD-1.iso.

Odpalamy VirtualBox-a, klikamy ikoną „New” (dodanie nowej instancji „komputera”), w kreatorze:

  • z opcji wybieramy Typ: Linux, Wersja: Debian (64bit)
  • przydzielamy pamięć, np. na poziomie 1024 MB (far enough jak na nasze potrzeby)
  • krok 3, 4, 5 i 6 dotyczący opcji wirtualnego dysku pozostawiamy bez zmian

virtualBoxNewOpcje

Mamy już gotową instancję „komputera”. Gołą bez żadnego zainstalowanego na nim systemu operacyjnego. Teraz trzeba do jego „czytnika CD” „włożyć” naszą ściągniętą płytę z Debianem i uruchomić instalację systemu operacyjnego na naszym wirtualnym komputerze. W tym celu:

  • Zaznaczamy myszą instancję na liście (prawdopodobnie jest już zaznaczona od razu) i klikamy ikonę „settings”
  • Przechodzimy do działu „storage” klikamy na ikonie płyty CD (będzie się nazywała „Controller IDE Empty”) i po prawej stronie okna klikamy ikonę wyboru obrazu CD (iso), który ma być wsunięty do wirtualnego CD-ROM-u (patrz grafika poniżej)
  • Wskazujemy obraz Debiana pobrany ówcześnie z dysku.
  • Klikamy „OK” w oknie settings a następnie odpalamy nasz komputer ikoną „Start”

virtualBoxMountIso

Zaczynamy instalację systemu operacyjnego Debian 7 w wirtualnym środowisku.

Z „Boot menu” systemu wybieramy opcję „Install”.
Następnie ustawiamy język polski, kraj, terytorium i klawiaturę też polskie.
System zaczyna się instalować.
Poprosi nas o podanie:

  • Nazwy hosta – skonfigurujcie dowolnie (można zostawić domyślną)
  • Nazwę domeny – również dowolnie (proponuję: wd.local)
  • Hasło administratora (hasło użytkownika „root”)
  • Nazwę nowego użytkownika (pełną nazwę i login) oraz dalej jego hasło (dowolnie) [to nowy użytkownik poza już istniejącym użytkownikiem "root"]
  • Partycjonowanie zostawiamy „domyślnie” wszystkie opcje i nic nie zmieniamy na końcu zgadzamy się na zapisanie wskazanych opcji na dysku wybierając „TAK” (partycjonowany będzie dysk wirtualny trzymany w pamięci VirtualBox-a, więc bez obaw o wasz lokalny dysk twardy).
  • Trwa instalacja. Może wyskoczyć pytanie o skanowanie innych płyt CD, ale tym się nie przejmujemy klikając opcję „NIE” ponieważ (zakładając, że jesteśmy połączeni z internetem) instalator będzie pobierał najnowsze potrzebne mu pakiety prosto z tzw. serwerów lustrzanych. Jeśli o to spyta – wyraźmy na to zgodę „TAK”, wskażmy wybrany serwer (domyślne propozycje lokalizacji serwerów lustrzanych są dobrze dobrane, więc klikamy dalej, domyślny serwer ICM-u nie wymaga autoryzacji więc ewentualne pytanie o autoryzację ignorujemy pozostawiając puste).
  • Kolejnym oknem będzie okno wyboru dodatkowych składników do instalacji w serwerze. Poza domyślnie zaznaczonymi nas interesować będą: Serwer WWW, Baza danych SQL, Serwer poczty elektronicznej, Serwer SSH
  • Znów trwa instalacja…
  • Na pytanie dotyczące instalacji programu rozruchowego GRUB odpowiadam „TAK”
  • Teraz jeszcze trochę instalacji i system uruchomi się na nowo z interfejsem użytkownika pozwalającym się doń zalogować.
  • Wyłączamy nasz serwer na moment (zanim go uruchomimy ponownie musimy jeszcze pomajstrować w ustawieniach sieciowych VirtualBox-a)

Mamy zainstalowany podstawowy system operacyjny (nasz serwer).

Wejdźmy teraz do okna VirtualBox-a, zaznaczmy naszą wirtualną maszynę na liście i kliknijmy ikonę „Settings” a następnie przejdźmy na zakładkę „Network”.
Domyślnie VirtualBox tak skonfigurował połączenie z siecią naszej wirtualnej maszynie, że używa ona sieci naszego komputera lokalnego w postaci współdzielenia połączenia sieciowego (NAT). To ok, bo dzięki temu ma dostęp do internetu. Nie widać jej jednak z poziomu naszego komputera. Zakładki „Adapter 1″ i „Adapter 2″ konfigurujemy tak jak na screenach poniżej (MAC Address może się różnić).

virtualBoxNetworkAdapter1

virtualBoxNetworkAdapter2

Zamykamy okno konfiguracji. W programie VirtualBox wchodzimy w menu File -> Preferences (Ctrl+G) – zakładka „Network” dwa razy klikamy na „VirtualBox Host-Only Network” i upewniamy się że konfiguracja jest podobna do poniższej (adres ip może się różnić nieco).

HostOnlyConf1

HostOnlyConf2

Teraz odpalamy nasz serwer i logujemy się do niego. Następnie uruchamiamy konsolę (deweloperzy i administratorzy używają zazwyczaj konsoli wydając polecenia niż okienek). Konsolę odpalamy z menu u góry „Programy” -> „Akcesoria” -> „Terminal”

W konsoli jesteśmy na poziomie użytkownika, z którego zalogowaliśmy się do systemu. Żeby zacząć coś konfigurować powinniśmy przełączyć się na poziom użytkownika „root”. Wpisujemy polecenie „su root” (su od Switch User z parametrem w postaci nazwy użytkownika). Spyta nas o hasło użytkownika root a następnie po poprawnym podaniu wiersz zachęty zmieni swoją nazwę na „root@nazwa-serwera”. Sprawdzamy naszą konfigurację sieciową poleceniem „ifconfig”. Jeśli wszystko poszło dobrze na interfejsie (możecie sobie to wyobrażać jako gniazdko sieciowe w komputerze) eth0 powinna być skonfigurowana sieć NAT (ta z której czerpiemy internet – pamiętacie w VB zakładkę „Adapter 1″) a na eth1 powinna być konfiguracja, która pozwala się łączyć do naszego serwera z zewnątrz (czyli de facto z naszego systemu Windows). Sprawdzamy jaki adres IP nam przyznano – w moim przypadku (patrz screen) jest to adres 192.168.56.101.

consola-ifconfig

Fajnie – teraz wracamy na moment do systemu Windows, odpalamy przeglądarkę i wklepujemy w nią http://192.168.56.101 – powinna zgłosić się nam startowa strona serwera apache „It Works”.

it-works

Nie chcemy jednak odwoływać się do naszego serwera w postaci adresu ip tylko w postaci jakiegoś fajnego adresu url. Odpalamy w trybie „administratora” (pod prawym przyciskiem myszy) notatnik (polecam notepad++ http://notepad-plus-plus.org/) i otwieramy w nim plik ze ścieżki C:\Windows\System32\Drivers\etc\hosts (ostatnia nazwa to plik a nie katalog tylko nie ma rozszerzenia). Dodajemy w nim wpis:

192.168.56.101 wd.local cms.wd.local phpmyadmin.wd.local

Teraz po wejściu na te adresy (z poprzedzającym http://) np: http://wd.local/ zgłasza się znów nasz serwer ze stroną „It Works”. To jest plik lokalnych wpisów DNS dla systemu Windows. W ten sposób dowolny adres URL możemy przekierować na dowolny serwer.

Teraz, żeby nie przełączać się wciąż miedzy systemem Windows a Debian (a jest to nieco niewygodne) uruchomimy sobie program „putty” czyli konsole ssh do połączeń z serwerami: http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe

Odpalamy putty, wpisujemy jako Host Name nasz adres IP jako „Saved Session” dowolną nazwę (może być ponownie adres IP) zapisujemy przyciskiem „Save” a potem otwieramy połączenie dwukrotnie klikając na nowo dodanym połączeniu. Na pytanie o akceptację certyfikatów odpowiadamy twierdząco. Zgłasza się okno logowania do ssh. Jako login podajemy „root” a następnie wpisujemy hasło. Jesteśmy zalogowani do powłoki naszego serwera z poziomu Windows-a. Tym sposobem będziemy zarządzać i konfigurować nasz serwer. To jest de facto ta sama konsola, którą odpalaliśmy wewnątrz systemu Debian (ta biała).

Sporo już za nami. Teraz przed nami konfiguracja serwera Apache (www), php i bazy danych a na końcu jeszcze środowiska pracy NetBeans już na naszym lokalnym komputerze :)

Najpierw zainstalujemy bazę danych mysql managerem pakietów APT. Kilka słów o apt znajdziecie tu: http://wiki.debian.org/Apt#What_is_Apt.3F

Zanim jednak to zrobimy otwieramy do edycji plik wskazujący na źródła pakietów w systemie. Znajduje się on w: /etc/apt/sources.list i komentujemy pierwszą niezakomentowaną linijkę, która wskazuje na płyty CD jako źródło pakietów (bez sensu było by wtykać kolejne płyty CD do wirtualnego napędu jeśli świeże pakiety możemy pociągnąć prosto z sieci).

Z poziomu okna ssh wydajemy komendę:

apt-get install mysql-server mysql-client

Na pytanie o użycie dysku odpowiadamy twierdząco. Definiujemy w procesie instalacji hasło dla użytkownika „root” bazy mysql. Już z poziomu konsoli możemy zalogować się do powłoki bazy danych (tak dla testu):

mysql -u root -p

Z powłoki mysql wychodzimy komendą „exit”

Przydał by się teraz znany i popularny program webowy do obsługi bazy (choć najwygodniej obsługuje się ją z poziomy powłoki):

apt-get install phpmyadmin

Po drodze – jeśli zostaniemy zapytani – wybieramy „apache” jako nasz serwer www z resztą pytań i konfiguracji powinniście już sobie poradzić sami.

Od tej chwili pod adresem http://wd.local/phpmyadmin/ będzie zgłaszał się PhpMyAdmin (można sobie adresacje przekonfigurować, ta jest domyślna).

Teraz będziemy potrzebować nowego vhost-a (Virtual Host) w naszym serwerze apache.
W tym celu tworzymy nowy katalog w /var/www/wd.local/public/ tu będzie wskazywała nasza domena wd.local i tu będziemy pracować nad naszym projektem:


cd /var/www
mkdir wd.local
cd wd.local
mkdir public
cd public

Teraz vhost
Przechodzimy do /etc/apache2/sites-available/ i tworzymy tam plik wd.local.conf z zawartością jak poniżej:

<VirtualHost *:80>
ServerAdmin webmaster@wd.local
ServerName wd.local
DocumentRoot /var/www/wd.local/public/

<Directory /var/www/wd.local/public/>
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
SetEnv APPLICATION_ENV 'testing'
DirectoryIndex index.php
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error-wd.local.log
LogLevel debug
CustomLog ${APACHE_LOG_DIR}/access-wd.local.log combined
</VirtualHost>

Edytujemy /etc/hosts (ten plik w systemie Debian pełni tą samą rolę jaką w Windows pełni plik C:\Windows\System32\Drivers\etc\hosts). Dodajemy w nim wpis:


127.0.0.1 wd.local cms.wd.local

Dodajemy vhosta do apache i restartujemy serwer:

a2ensite wd.local.conf
/etc/init.d/apache2 restart

Serwer w D7 można restartować też za pomocą: „service apache2 restart”

Jeśli teraz wrzucicie jakiś plik php lub projekt do /var/www/wd.local/public/ będzie widoczny w domenie http://wd.local/ (sprawdźcie sami).

Co nam się jeszcze przyda?

Zainstalujcie w Windows program WinSCP i połączcie się nim z serwerem. Za jego pomocą będziecie mogli przesyłać sobie pliki na serwer.

Zainstalujcie też NetBeans-a w wersji dla PHP:
https://netbeans.org/downloads/
https://netbeans.org/downloads/start.html?platform=windows&lang=en&option=php

Zadanie, z którym na pewno sobie poradzicie już sami: Dodajcie nowy testowy projekt w NetBeans-ie a następnie skonfigurujcie to środowisku dla tego projektu tak aby za każdym razem jak zostanie w nim zapisany plik (np. Ctrl+s) przesyłał się na nas serwer do naszego katalogu :)

To pozwoli Wam pracować lokalnie (w Windows) na projekcie PHP w NetBeans-ie i automatycznie wyświetlać wyniki swojej pracy na serwerze Debian na adresie http://wd.local/

Środowisko skonfigurowane. Jeszcze nie raz będziemy instalować do php różne pakiety na nim (apt-get install) ale z tym sobie poradzimy w trakcie projektu.