Cum sa manageriezi un site prin CVS

Eu folosesc CVS-ul pentru managerierea codului proiectelor web. Experienţa a arătat că CVS e cea mai bună alternativă.

Crearea proiectului CVS.

Noi avem mapa /var/www/newproject care conţine proiectul pe care vrem să-l manageriem prin CVS.

Repozitoriul va fi salvat în /home/cvs/newproject.

Dacă avem sursele unui site, şi vrem să le punem pe CVS, ne mutăm în mapa în care el se află.

Schimbăm userul in cvs:

$ su cvs

După care creăm un director în mapa /home/cvs :

$ mkdir /home/cvs/newproject

Adăugăm valoare pentru variabila CVSROOT:

$ CVSROOT=/home/cvs/newproject; export CVSROOT

Iniţiem un nou proiect:

$ cvs init

Ca user root intrăm în /home/cvs/newproject/CVSROOT şi edităm fişierul cvswrappers, adăugând următoarele rânduri:

*.gif -k 'b'
*.png -k 'b'
*.jpg -k 'b'
*.zip -k 'b'
*.mp3 -k 'b'
*.swf -k 'b'

Asta pentru ca aceste tipuri de fişiere să fie tratate ca binare şi nu ca text. Dacă mai folosiţi şi alt tip de binare, cum ar fi flv, sau doc, adăugaţi în listă.

Acum mergem în directorul cu sursele noului proiect, şi îl importăm (iarăşi ca user cvs, şi nu uităm să indicăm variabila CVSROOT, pe care, dacă vrem, putem să o adăugăm deodată în ~/.bashrc):

$ cd /var/www/newproject
$ cvs import -m "Un mesaj oarecare" newproject numelecompaniei start

Acum putem vedea în mapa /home/cvs/newproject faptul că s-a creat un proiect newproject, cu conţinutul saitului.

Checkout în /var/www

Chiar dacă proiectul a fost importat, nu s-au creat mape CVS în mapa cu proiectul. Recomand să facem direct checkout.

$ cd /var/www                                     # mergem  in mapa /var/www, unde presupun ca sta
                                                  # proiectul (in mapa newproject).
$ mv newproject newproject-back                   # mutam mapa newproject, facem loc pentru checkout.
$ su www-data                                     # trecem sub userul www-data
$ CVSROOT=/home/cvs/newproject; export CVSROOT    # definim variabila CVSROOT
$ cvs checkout -d newproject newproject           # facem checkout la modulul newproject in mapa newproject.

Checkout pe maşinile programatorilor

Dacă folosim Eclipse, creăm un proiect nou:

File > Import > Project from CVS.

Hostul va fi ip-ul computerului, iar CVSROOT va fi mapa /home/cvs/newproject. Alegem modulul newproject, next next şi gata!

aproape gata

A rămas acum încă un lucru de făcut. Programiştii vor avea o versiune funcţională a saitului la ei în computer, dar cum de organizat ca schimbările să fie adăugate şi pe server?

Putem folosi două metode – una automată şi alta manuală. Pentru automatizare, putem adăuga o linie în crontab:

*/5 * * * *    www-data     cd /var/www/newproject && cvs update -d -P > /dev/null 2>&1

Asta va face odată la cinci minute update la mapa /var/www/newproject.

Eu recomand totuşi metoda manuală. Creăm un CGI script cu următorul conţinut:

#!/bin/bash
FOLDER=`echo "$QUERY_STRING" | grep -oE "(^|[?&])folder=[^&]+" | sed "s/%20/ /g" | cut -f 2 -d "="`
SITE=`echo "$QUERY_STRING" | grep -oE "(^|[?&])site=[^&]+" | sed "s/%20/ /g" | cut -f 2 -d "="`

echo "Content-type: text/html"
echo ""
echo "Updated Everything"
echo ""

echo "
<h1>UPDATED $FOLDER </h1>
"
echo ""
echo "<pre>"

set $(date)
CVSROOT="/home/cvs/$SITE"; export CVSROOT
CVS_RSH=ssh; export CVS_RSH
cd "/var/www/$SITE/$FOLDER"
cvs update -d -P | sort -r

echo "</pre>"
echo "Update was performed on $(date)"
echo ""

Îl creăm în /usr/lib/cgi-bin/cvs.cgi (sau în mapa unde stau fişierele cgi la Apache2).

Dăm permisiuni:

$ chown www-data:www-data /usr/lib/cgi-bin/cvs.cgi
$ chmod +x /usr/lib/cgi-bin/cvs.cgi

Ca să faceţi update la site, intraţi pe următorul url:

http://host/cgi-bin/cvs.cgi?site=newproject

Asta va face update la toată mapa newproject, din /var/www .

Puteţi face update la o mapă din proiect (să zicem, mapa myfolder), dacă scrieţi următoare adresă:

http://host/cgi-bin/cvs.cgi?site=newproject&folder=myfolder

Şi încă o chestie

Ca să nu vă deranjeze nimeni intrând în mapa CVS pe site-ul dumneavoastră, de exemplu:

http://host/CVS sau http://host/myfolder/CVS

puteţi să adăugaţi clauze în configuraţia la virtualhost.

Vedeţi aici cum: https://badan.wordpress.com/2009/01/29/cum-sa-l-faci-pe-apache-sa-ignore-o-mapa/ .

3 Comments

  1. eugen
    Posted 16 decembrie, 2010 at 2:42 pm | Permalink | Răspunde

    Daca folosesti cgi scriptul pentru update si cvs-ul e pe alt server trebuie sa adaugi cheia publica de la primil server in authorized_keys la serverul cu cvs??

    • Badan Sergiu
      Posted 16 decembrie, 2010 at 4:02 pm | Permalink | Răspunde

      Da, adaugi cheia publica in authorized_keys pentru utilizatorul sub care sta site-ul.
      Cum merge la terasoft?

  2. eugen
    Posted 16 decembrie, 2010 at 4:13 pm | Permalink | Răspunde

    am sa-ti scriu 🙂 dar nu in comentarii 🙂

Lasă un răspuns

Completează mai jos detaliile tale sau dă clic pe un icon pentru a te autentifica:

Logo WordPress.com

Comentezi folosind contul tău WordPress.com. Dezautentificare /  Schimbă )

Fotografie Google

Comentezi folosind contul tău Google. Dezautentificare /  Schimbă )

Poză Twitter

Comentezi folosind contul tău Twitter. Dezautentificare /  Schimbă )

Fotografie Facebook

Comentezi folosind contul tău Facebook. Dezautentificare /  Schimbă )

Conectare la %s

%d blogeri au apreciat asta: