svn + WebSVN

Wstęp

Każdy etap prowadzenia projektu wiąże się nierozerwalnie z posiadaniem kodu oraz dokumentacji do projektu. Każdy programista wie jak ważny jest czas poświęcony na tworzenie algorytmów i ich implementacja. Jeśli jesteś osobą, która nie doświadczyła jeszcze utraty kodu poprzez błąd systemu lub dysku, spokojnie możesz zignorować poniższy tutorial, w innym przypadku zapraszam do zapoznania się z instrukcją jak postawić własny serwer kontroli wersji za złotówkę miesięcznie.

Oczywiście zapytasz czy słyszałem o dobrodziejstwie takim jak GitHub czy inny serwer. Tak, coś mi się obiło przypadkiem o uszy… Problem jest taki że darmowe konta są publiczne a prywatne kosztuje dziś 7 dolarów amerykańskich. Za tę kwotę można spokojnie wykupić sobie  serwer prywatny (trochę więcej niż wersję podstawową) i samodzielnie postawić odpowiednie narzędzia. Nie będę opisywał jak korzystać z Subversion, jest tego pełno w internecie…

W tym artykule poruszę konfigurację Subversion, opowiem o tym jak zainstalować go na serwerze z systemem Ubuntu, skonfigurować odpowiednie pliki oraz ścieżki. W dalszej części pokażę jak zainstalować klienta webowego WebSVN do przyjemnego podglądania zmian w repozytorium. Jeśli jesteś fanem gita, zachęcam do zobaczenia artykułu o instalacji gita wraz z klientem webowym GitList tutaj.

 

L.P. Czego potrzebujemy
1 VPS
2 System Operacyjny ja wybrałem Ubuntu 16.04
3 Dostęp po SSH z prawami root
4 http://websvn.tigris.org/files/documents/1380/49057/websvn-2.3.3.zip
5 Skonfigurowana domena na serwer VPS

Instalujemy PHP

Serwer który ja wybrałem oferuje instancję Ubuntu 16.04, która posiada w sobie zainstalowaną wersję PHP 7.0, jest ona wystarczalna dla naszych potrzeb. Jeśli zdecydujesz się na instalację wyższej wersji lub niższej, też jest ok. Wykorzystywane narzędzia wymagają PHP 5, zatem bez wahania decyduj.

apt-get install php7.0 php7.0-fpm -y

Instalujemy Apache

Kolejny krok to instalcja serwera apache, może również wykorzystać nginx. Ja korzystam z Apache chyba przez zasiedzenie. Jest on dość prymitywny ale działa i jest łatwy do konfigurowania. Apache spokojnie może obsługiwać do 250 użytkowników jednocześnie więc dla niewielkich stron można śmiało przy nim zostać, jeśli przewidujemy ruch do 1000 użytkowników jednocześnie zainteresujmy się serwerem nginx lub stworzeniem farmy serwerów.

Wykonajmy polecenie:

apt-get install subversion apache2 libapache2-svn libapache2-mod-php php-xml-parser

Ok, teraz mamy zainstalowany serwer i czas na konfigurację. Przejdźmy do katalogu dostępnych stron w serwerze i stwórzy nasz plik konfiguracyjny:

cd /etc/apache2/sites-available/
vim svn.e-strix.com.conf

Ja używam Vim’a do edycji, ale użyj dowolnie. Początki z edytorami textowymi są trudne ale warte nauki.

Plik wypełnij zawartością wg nw. listingu:

<VirtualHost *:80> 
ServerAdmin kontakt@e-strix.pl 
ServerName svn.e-strix.com 

DocumentRoot /var/www/svn.e-strix.com/public_html/ 

<Directory "/var/www/svn.e-strix.com/public_html/"> 
DirectoryIndex index.php index.html 
Options FollowSymLinks 
AllowOverride All 
</Directory> 

<Location /repo> 
DAV svn 
SVNParentPath /home/svnuser/repo 
SVNListParentPath On 
</Location> 

ErrorLog /var/www/svn.e-strix.com/error.log 
CustomLog /var/www/svn.e-strix.com/access.log combined 
</VirtualHost>

Stwórz katalog w którym będą nasze aplikacje:

mkdir -p /var/www/svn.e-strix.com/

ustaw stronę jako aktywną i przeładuj ustawienia Apache:

a2ensite svn.e-strix.com
service apache2 reload

Tworzymy repozytorium

Repozytorium subversion podobnie jak git’a może być gdziekolwiek na dysku. Dla zachowania przejrzystości, utworzymy konto użytkownika svn a w nim katalog z naszymi projektami.

Zatem dodajemy użytkownika i uzupełniamy dane o które poprosi system:

adduser svnuser
usermod -a -G svnuser www-data

Dalej tworzy nasz katalog repozytorium:

mkdir -p /home/svnuser/repo/

Gdy poprawnie zainstalujemy pakiet subversion, dostępne będzie dla nas narzędzie svnadmin do zarządzania projektami. Korzystamy z niego dodając nowe repozytorium:

svnadmin create /home/svnuser/repo/project1

Przejdźmy teraz do innego katalogu, ja wybrałem katalog /tmp i pobierzmy kopię repozytorium. W tym przypadku posłużę się kopiowaniem z pliku, komenda co jest skrótem od checkout. A zatem:

cd /tmp/
svn co file:///home/svnuser/repo/project1

Subversion pobrał na projekt, wejdźmy do środka i stwórzmy dowolny plik. Ja wybrałem .svnignore, może być dowolny:

cd project1/
touch .svnignore

Teraz dodajmy go używając komendy add oraz wypchnijmy zmiany do naszego repozytorium ci -m „comment”, bardzo ważne jest używanie przełącznika -m:

svn add .svnignore
svn ci -m "init commit"

Dodajemy klienta webowego

Jest wiele dostępnych na rynku klientów webowych, każdy z nich działa. Nie będę się rozdrabniał na to, który jest mikrosekundę szybszy czy ma lepiej napisany kod. To jest dla nas nie istotne bo i tak w większości będziemy pracować na lokalnych maszynach w wybranym IDE lub konsoli. WebSVN u mnie wygrał ze względu na intuicyjność i funkcjonalność. Ma też przyjemny interfejs, który mnie nie denerwuje więc dobrze mi się z nim pracuje.

W pierwszej kolejności musimy nadać prawa do katalogu repozytorium dla użytkownika www-data, który jest wykorzystywany przez serwer www.

Notatka: Nie jest to część poświęcona idealnemu skonfigurowaniu katalogów. Jeśli masz życzenie tworzyć hierarchię grup i użytkowników to śmiało.

Zatem zmieniamy właściciela katalogu:

cd /home/svnuser
chown -R svnuser:www-data repo/

Przejdźmy teraz do naszego katalogu aplikacji i pobierzmy klienta:

Notatka: wymagany jest program wget.

cd /var/www/svn.e-strix.com/
wget http://websvn.tigris.org/files/documents/1380/49057/websvn-2.3.3.zip

Teraz rozpakujmy pobrane archiwum, zmieńmy nazwę wypakowanego katalogu websvn-2.3.3 na public_html, zgodny z plikiem konfiguracyjnym serwera:

Notatka: Wymagany jest program unzip. Może nie być zainstalowany domyślnie.

unzip websvn-2.3.3.zip
mv websvn-2.3.3/ public_html/

Wyczyścimy śmieci i nadamy właściciela plików:

rm websvn-2.3.3.zip

chown -R www-data:www-data public_html/

Konfiguracja klienta

Teraz już z górki. Do pełnego sukcesu potrzebujemy jeszcze skonfigurować naszego klienta z utworzonym repozytorium.

Przechodzimy do katalogu public_html/include i w nim musimy utowrzyć plik konfiguracyjny. Całe szczęście że dostawca załączył przykładowy plik distconfig.php, który możemy wykorzystać… Utworzymy plik w tej lokalizacji o nazwie config.php.

cd public_html/include
vim config.php

Jego zawartość znajduje się na nw. listingu. Więc przekopiuj i zapisz plik:

<?php
$config->parentPath('/home/svnuser/repo');
$config->addTemplatePath($locwebsvnreal.'/templates/calm/','group');
?>

Teraz spokojnie możemy wpisać adres w przeglądarce i naszym oczom pojawi się zawartość naszego jednego repozytorium. Ale co w przypadku gdy bym miał ich więcej? Spokojnie… w przypadku gdy jest tylko jedno repo aplikacja od razu przekierowuje na jej zawartość, jeśli będzie więcej projektów, pierw ukaże się nam ich lista.

Dodajmy na serwerze kolejny projekt:

svnadmin create /home/svnuser/repo/project2
chown -R svnuser:www-data /home/svnuser/repo/project2/
chmod -R 774 /home/svnuser/repo/project2/

I teraz spróbujemy skorzystać z innego komputera, w taki sposób aby ruch odbył się przez sieć. Ja użyłem swojego laptopa.

Przechodzimy na dowolny katalog z prawami zapisu.

Teraz pobieramy nasze repozytorium:

svn co http://svn.e-strix.com/repo/project2/

Dodamy jakiś plik do projektu i wypchniemy zmiany na serwer:

cd project2/
vim index.html
svn add index.html
svn ci -m "init commit"

Zmiany możemy obserwować już na serwerze.

Podsumowanie

Systemy kontroli wersji są podstawą przy pracy programisty czy DevOps’a, szukanie błędów w kodzie czy winnych jest dużo łatwiejsze gdy można śledzić każdą zmianę. Powstaje także odpowiedzialność osoby za swoje „dzieło”. Kolejnym plusem okazuje się możliwość zdalnego budowania poprzez odpowiednie narzędzia CI takie jak Hudsom, Jenkins, Travis czy TeamCity, które można ustawić w taki sposób aby czasowo budowały aplikację czy dla każdego komitu. Tak rozproszony system bardzo przyspiesza pracę nad projektem i pozwala deweloperowi skupić się nad konkretnym zadaniem.

Co wybrać? Czy Subversion czy Git? Ja używam obu w pracy, dla nowych projektów zainteresowałbym się gitem ale i svn też jest bardzo popularny. Pamiętajcie że duże instytucje nie lubią zmian…

3 myśli do „svn + WebSVN”

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *