Arhivele categoriei: Programare si Tehnologie

Instalare VPS Centos cu LAMP, Git și gitolite

De curând a trebuit să instalez de mai multe ori niște mașini cu Centos 6 și am repetat pentru fiecare aceiași pași de instalare.

M-am gândit să scriu acest articol care să conțină o listă cu acei pași în special pentru a fi distribuit și altor colegi care aveau nevoie să instaleze mașini de test.

Scenariul pe care a trebuit să-l respect prevedea instalarea unei mașini cu Centos 6.5 minimal cu LAMP (php 5.5 cel puțin) și git cu gitolite pentru administrarea repositoriilor și a userilor care aveau acces la ele.

Primul pas a fost instalarea Centos 6,5 minimal pe mașinile fizice, iar restul de muncă a fost îndeplinit prin Putty și folosind yum.

Pentru a evita conflictele care ar fi apărut din cauza repozitoriilor folosite, un coleg mi-a recomandat să folosesc pluginul yum-plugin-priorities. (mulțam, Madalin ;) )

Deși pluginul acesta este puțin cam controversat, în timpul exploatării noastre am descoperit că și-a făcut datoria bine și ne-a ferit de conflicte și alte probleme cu yum și repozitoriile, așa că am să-l recomand și eu mai departe. Trebuie însă să mergi și tu și să citești documentația acestuia pentru a decide pentru tine daca este ceea ce ai nevoie și pentru a învăța cum să-l configurezi corect.

În fine, iată și lista. Nu conține ceva nou și nu reprezintă neapărat ceva original, este mai mult o compilație a unor instrucțiuni în așa fel încât toate să fie într-un singur loc. Am inclus linkuri spre site-urile de unde am folosit informațiile, atât în corpul listei cât și la final.

  1. Se instalează yum-plugin-priorities (dacă apare o întrebare despre utlizarea unei chei se spune yes, e din cauza că sunt folosite repo-urile pentru prima oară)
    yum install yum-plugin-priorities
    
  1. Se instalează wget:
    yum install wget
    
  2. cd to user’s home:
    cd ~
    
  3. Se instalează remi repo:
    wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpmwget
    
    http://rpms.famillecollet.com/enterprise/remi-release-6.rpmsudo
    
    rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm
    

    Se pot citi mai multe despre remi repo aici.

  4. Se instalează webtatic repo:
    rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm
    

    Se pot citi mai multe despre webtatic repo aici.

  5. Important! Trebuie editate fișierele de configurare ale repozitoriilor, fișiere aflate în folderul /etc/yum.repos.d/  și trebuie activate cele dorite pentru a fi folosite și adăugată proprietatea priority=N, conform setărilor necesare ale yum-plugin-priorities.
    (http://wiki.centos.org/PackageManagement/Yum/Priorities)
    .
  6. Se face un update la sistem
    yum update
    
  7. Se instalează oarecum a LAMP, respectiv doar Apache si MySQL. PHP nu instalăm acum întrucât vom instala php 5.5 din repo webtatic în pasul următor.
    Se instalează Apache și se pornește:

    yum install httpd
    service httpd start
    

    Se instaleaza MySQL și se pornește:

    yum install mysql, mysql-server
    service mysql start
    

    Se fac setările de securitate pentru instalarea MySQL rulând următorul script:

    /usr/bin/mysql_secure_installation
    

    Mai multe informații despre setările implicte pentru securizarea instalării MySQL pot fi citite în acest tutorial de la digitalocean.com

  8. Se instalează PHP 5.5 și modulele dorite (noi le-am instalat pe toate, erau mașini de test)
    yum install php55w  php55w-bcmath  php55w-cli  php55w-common  php55w-dba  php55w-devel  php55w-embedded  php55w-enchant  php55w-fpm  php55w-gd  php55w-imap  php55w-interbase  php55w-intl  php55w-ldap  php55w-mbstring  php55w-mcrypt  php55w-mssql  php55w-mysqlnd  php55w-odbc  php55w-opcache  php55w-pdo  php55w-pear.noarch  php55w-pecl-apcu  php55w-pecl-apcu-devel  php55w-pecl-memcache  php55w-pecl-xdebug  php55w-pgsql  php55w-process  php55w-pspell  php55w-recode  php55w-snmp  php55w-soap  php55w-tidy  php55w-xml  php55w-xmlrpc
    
  9. A nu se uita configurările necesare pentru ca serviciile Apache și MySQL să pornească automat:
    chkconfig --levels 235 httpd on
    chkconfig --levels 235 mysqld on
    
  10. Opțional se instalează nodejs, dacă aveți nevoie (noi am avut)
    yum install nodejs
    
  11. Se instalează instrumentele de development:
    yum groupinstall "Development tools"
    
  12. Se instalează Git și se creează user-ul și grupul git
    yum install git
    useradd git
    usermod -u 600 git
    groupmod -g 600 git
    passwd git
    
  13. Se instalează gitolite pe server prin logarea pe server cu userul git creat anterior și clonarea repozitoriului gitolite
    git clone https://github.com/sitaramc/gitolite
    
  14. Administrarea prin gitolite a userilor care au acces la repozitoriile git este făcută pe bază de chei. Fiindcă noi foloseam mașini cu windows pentru a lucra și conecta la serverul de git, am folosit putty pentru a genera perechile de chei .pub/.ppk.
    Se copiază textul din puttygen și se salvează ca USERNAME.pub iar cheia privată se salvează ca USERNAME.ppk

    Fișierul .pub va trebui să fie dat administratorului de gitolite care îl va încărca pe server și îl va activa pentru repozitoriile la care respectivul user va avea acces. Noi am folosit acest tutorial la prima instalare pe care am efectuat-o.

    Ceea ce este foarte important de reținut este că tot procesul se referă la existența a două mașini: serverul de git pe care este instalat și gitolite și clientul (care poate avea ca sistem de operare fie linux, windows, etc). În tutorialul din link, ambele mașini folosesc Linux ca sistem de operare, dar logica rămâne aceeași și dacă pe client se folosește Windows.

    Este important ca pentru prima utilizare a gitolite să fie deja creată o pereche de chei .pub/.ppk pentru utilizatorul client care va deveni admin-ul gitolite. Deci cheile vor fi create pe mașina client, iar cheia publică va fi copiată pe server în folder-ul user-ului git și se vor seta permisiunile necesare. Să presupunem că cele două chei vor fi git-admin.pub și git-admin.ppk, la fel ca în tutorialul din link.

    Apoi, dupa ce s-a instalat gitolite (prin logarea cu userul git pe masina server și cd în folderul userului git) se va folosi cheia git-admin.pub copiată anterior în folder:

    gitolite/install -ln
    gitolite setup -pk Git-Admin.pub
    
  15. Întrucât am folosit mașini cu windows pentru a lucra și pentru a ne conecta la serverul de test și de git, am instalat clienul windows de git și programul gitextensions pentru o integrare facilă cu windows explorer.

    Pentru instalarea git  am folosit următoarele setări:
    - advanced context menu, associate .git
    - use git bash only
    - use plink
    - checkout windows style, commit linux style

    Iar pentru instalarea gitextensions  am folosit următoarele setări:
    - install kdiff only
    - use putty
    - (observație prostească: uneori fereastra programului de instalare a kdiff apare sub fereastra principala de instalare a gitextensios, iar la prima vedere arată ca și cum instalarea principală s-a blocat; nu e blocată ci așteatpă interactiune cu userul în fereastra din spate.)

  16. Am avut deasemenea o setare interesantă întrucât foloseam git ca să publicăm automat modificările și pe serverul Apache de test instalat pe aceeași mașină server. Am folosit un script plasat în folderul hooks/post-receive cu următorul conținut:
    #!/bin/sh
    GIT_WORK_TREE=/home/path/to/your/www
    export GIT_WORK_TREE
    umask 002
    git checkout -f
    

    Scriptului trebuie să i se atribuie permisiuni de rulare.
    Deasemenea, folderul www trebuie să fie deținut de userul apache și să aibă grupul apache, iar user-ul git trebuie să fie adăugat în grupul apache.

    chmod +x hooks/post-receive
    chown apache:apache /home/path/to/your/www
    usermod --groups apache git
    

    Mai trebuie deasemenea inițializat un repozitoriu gol în folder-ul www.

    cd /home/path/to/your/www
    mkdir newfolder
    cd newfolder
    git init
    
  17. După toți acești pași, se pot creea și administra repozitorii git direct de pe mașina client unde este logat admin-ul, prin gitolite.

    Admin-ul trebuie mai întâi de toate să cloneze pe mașina sa repozitoriul gitolite-admin (git clone gitolite-admin.git) iar de aici încolo toate modificările vor fi făcute prin acest repo.

    În repozitoriul de administrare clonat pe client există un fișier gitolite.conf prin care se pot crea repozitorii git noi și atribui useri pe baza cheilor .pub.

    Un tutorial bun despre instalarea gitolite este aici.

 


 

Link-uri externe de referință, utilizate în acest articol

remi repo: http://www.rackspace.com/knowledge_center/article/installing-rhel-epel-repo-on-centos-5x-or-6x
webtatic repo: http://webtatic.com/projects/yum-repository/
yum-priorities: http://wiki.centos.org/PackageManagement/Yum/Priorities
tutorial simplu despre instalare lamp: https://www.digitalocean.com/community/articles/how-to-install-linux-apache-mysql-php-lamp-stack-on-centos-6
despre gitolite: http://gitolite.com/gitolite/index.html 
tutorial amplu despre git și gitolite: http://sachinsharm.wordpress.com/2013/10/04/installsetup-and-configure-git-server-with-gitolite-and-gitweb-on-centosrhel-6-4/
clienti de git: http://git-scm.com/downloads
gitextensions pentru windows: https://code.google.com/p/gitextensions/
informații utile despre cum se poate face deploy automat din git: http://stackoverflow.com/questions/9132144/how-can-i-automatically-deploy-my-app-after-a-git-push-github-and-node-js
dacă se dorește instalarea phpmyadmin prin yum: http://tecadmin.net/how-to-install-phpmyadmin-on-centos-using-yum/
în cazul în care apare eroarea: httpd dead but subsys locked: http://sandzoctanium.com/upgrade-from-php-5-3-to-php-5-5-and-get-error-httpd-dead-but-subsys-locked/

 

9 comenzi elementare pentru Git

Iată o listă cu cele mai folosite 9 comenzi elementare pentru Git:

1. git init
- creează un repo local nou

2. git clone
- clonează un repository remote în copie locală
exemplu.:

git clone username@host:/path/to/repo

3. git add
- adaugă un fișier în indexul repositoriului
exemplu.:

git add <filename.ext>

4. git commit
- salvează schimbările în head
exemplu.:

git commit -m "descriptive message"

5. git push
- timite fișierele schimbate în ramura master din repositoriul remote
exemplu.:

git push origin master

6. git status
- afișează lista cu fișiere modificate și cu cele care necesită o acțiune de commit sau push

7. git remote add origin <server>
- dacă nu s-a conectat copia locală la un server atunci se adaugă un server pentru a se putea face push spre acesta

8. git pull
- descarcă și unește modificările din repositoriul remote cu cele din copia de lucru locală

9. git diff
- afișează posibilile conflicte și diferențe

10 comenzi elementare pentru SVN

1. svn checkout
- descarcă sursele din repositoriul remote în cel local
exemplu.:

svn checkout URL PATH

2. svn commit

- salveaza schimbările din copia de lucru în repository
exemplu.:

svn commit -m "descriptive message"

3. svn list

- arată (listează) intrările din directoare din repository
exemplu.:

svn list --verbose

4. svn add
- adaugă un fișier nou în repository
exemplu.:

svn add <filename.ext>
svn commit -m "added new file"

5. svn delete
- sterge un fișier din repository

svn delete <filename.ext>
svn commit -m "removed a file"

6. svn diff

- arată diferențele dintre copia de lucru și repository
exemple.:

svn diff <filename.ext>

alt exemplu în care se compară fișier@R1 cu fișier@R2

svn -r R1:R2 diff <filename.ext>

7. svn status

- arată statusul (situația) unui fișier din copia de lucru
exemplu.:

svn status path/to/file

8. svn log
- arată modificările efectuate asupra repositoriului
exemplu.:

svn log path

9. svn move

- mută sau redenumește un fișier
exemplu.:

svn move src dest

10. svn update
- descarcă schimbările din reporitoriul remote în copia de lucru locală
exemplu.:

svn update path