Cum faci un server Git pe un VPS la MXHost?

Toată povestea se întâmplă pe un VPS unmanaged hostat la MXHost cu Ubuntu 10.04 pe el. Presupun că știi să instalezi sistemul de operare.

0. Un fel de introducere

Nu sunt expert Linux, iar tot ce va fi scris în acest articol reprezintă suma a mai multor tutoriale strânse (și urmate) de-a lungul timpului.

În acest tutorial voi folosi ca editor principal Vim (este editorul implicit pe sistemele Linux). Un crash course ar consta din:

  • i intră în modul de editare (insert);
  • Esc intră în modul normal, de unde poți folosi următoarele comenzi:
  • /foo caută textul foo. n / shift+n caută textul din nou (înainte și înapoi);
  • :w salvează fișierul;
  • :q iese din editor;

Dacă vrei să aprofundezi, ești invitatul meu. Sunt zeci de cărți și tutoriale ce abordează acest editor.

1. Actualizarea sistemului

sudo apt-get update
sudo apt-get upgrade -y

Toată povestea asta va dura vreo 10-15 minute iar câteva pachete au nevoie de confirmare (la care eu am răspuns cu No, după ce am avut probleme de genul: nu mai pornea serverul deloc, nu mai pornea SSH etc).

Foarte important!

Spre sfârșitul actualizărilor vei fi informat că sunt vreo 5-6 pachete care au fișiere de configurare diferite. Pentru că Linux este un sistem foarte user friendly, aparent nu se descurcă să facă un merge corect al setărilor. Prin urmare, dacă răspunzi altfel decât N ai șanse mari ca VPS-ul să nu mai pornească.

2. Instalarea propriu-zisă

2.1 Pe server:

Fiecare linie este însoțită de apăsarea delicată a tastei Enter (sau Return):

sudo apt-get -y install git-core gitosis
sudo vim /etc/ssh/sshd_config 

La sfârșitul documentului adaugi:

 AllowUsers root gitosis 

Salvezi și ieși din editor.

2.2 Pe PC-ul local (într-un bash):

În functie de modul în care ai instalat Git, folderul .ssh poate fi ori în C:\Users\numele_tău\ ori în C:\Cygwin\home\numele_tău\ ori în alte locuri ascunse (doar în locurile astea două am găsit folderul cu pricina). Dacă nu îl găsești înseamă că nu ai generat cheile ssh. Pentru a face acest lucru deschizi o consolă bash/cygwin și scrii următoarea comandă:

ssh-keygen -t rsa -C "emailul@tau"

În cazul în care nu specifici un E-mail, va fi folosită o combinație de genul nume_user@numePC

2.3 Pe Server:

După ce ai generat cheile, trebuie să copiezi id_rsa.pub pe server. Poți folosi WinSCP, FTP sau orice altă metodă ți se pare mai ușoară.

Presupunând că ai copiat id_rsa.pub în folderul /root va trebui să scrii următoarea comandă:

cd ~/
sudo -H -u gitosis gitosis-init < id_rsa.pub

Vei primi următorul mesaj:

Initialized empty Git repository in /srv/gitosis/repositories/gitosis-admin.git/

Ceea ce înseamnă că totul e ok.

2.4 Pe PC-ul local (tot în bash)
git clone gitosis@vps.mxhost:gitosis-admin.git

Iar rezultatul va arăta cam așa:

Cloning into gitosis-admin...
The authenticity of host 'vps.mxhost (123.123.123.123)' can't be established.
RSA key fingerprint is 31:36:6e:2f:7d:28:60:eb:e2:ba:70:84:7e:ed:4a:1f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'vps.mxhost,123.123.123.123' (RSA) to the list of known hosts.

3. Administrarea repositories și a utilizatorilor

(îmi cer scuze, chiar nu pot spune magazie la repository!)

În momentul în care ai clonat repo-ul, ai cam terminat cu consola serverului. Pentru a adăuga un nou repo sau un nou utilizator va trebui să lucrezi strict pe clona de pe PC-ul local.

3.1 Administrarea utilizatorilor

Fiecare utilizator trebuie să genereze și să trimită id_rsa.pub. Este important ca acest fișier să fie copiat în folderul keydir și redenumit în user@email.

După ce a fost copiată cheia publică, în fișierul gitosis.conf se adaugă utilizatorii (separați prin spațiu) în dreptul fiecărui proiect în parte.

3.2 Administrarea proiectelor
[group blogs]
  writable = iamntz_com blog_iamntz_com desspina_com
  members = ionut@iamntz eugen@iamntz

[group other_blog]
  writable = boio_ro
  members = ionut@iamntz boio@iamntz

În principiu, poți împărți utilizatori pe grupuri și pe proiecte, separându-i printr-un banal spațiu.

După ce ai terminat de adăugat utilizatori/repo-uri și chei îi dai commit și push. Asta e chestia care m-a derutat maxim când am început să mă joc cu Git selfhosted. Nimeni nu zicea nicăieri cum se adaugă utilizatori & co. Bine, dacă stau să mă gândesc, acum pare logic, dar când nu știi…

Fiecare utilizator are cheia lui publică în directorul keydir cu numele email@user.pub!

Dacă vrei, te poți opri aici. Ai un server de Git funcțional, relativ ușor de administrat care este utilizabil, mai ales dacă lucrezi singur la puține proiecte. Dacă ai puțin spirit de aventură și vei continua, vei avea un fel de clonă de Github pe propriul server. Ceea ce e destul de cool, dacă stau să mă gândesc. :P

4. Instalarea GitlabHQ (un fel de clonă de github)

Înainte de toate, este necesar să repeții pașii de generare a cheilor ssh, de această dată pe server:

ssh-keygen -t rsa -C "vps@mxhost"

Și să adaugi emailul folosit pe VPS în gitosis în grupul gitosis-admin. Evident, adaugi și cheia generată (nu uita să o redenumești!) după care commit & push.

Ce urmează acum este un fel de monkey typing. Comenzile sunt luate de pe două site-uri (vezi la sfârșitul articolului). Prin urmare… Copy & Paste!

#ubuntu 10.04:
sudo apt-get install curl gcc checkinstall libxml2-dev libxslt-dev sqlite3 libsqlite3-dev libcurl4-openssl-dev libreadline5-dev libc6-dev libssl-dev libmysql++-dev make build-essential zlib1g-dev

#ubuntu 11.10:
sudo apt-get install curl gcc checkinstall libxml2-dev libxslt-dev sqlite3 libsqlite3-dev libcurl4-openssl-dev libreadline-gplv2-dev libc6-dev libssl-dev libmysql++-dev make build-essential zlib1g-dev

cd ~/

wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p290.tar.gz
tar xfvz ruby-1.9.2-p290.tar.gz
cd ruby-1.9.2-p290

./configure
make
sudo checkinstall -D

sudo gem update --system
echo "gem: --no-rdoc --no-ri" > ~/.gemrc

sudo gem install rails

cd ~/
git clone git://github.com/gitlabhq/gitlabhq.git
cd gitlabhq
sudo easy_install pygments
sudo gem install bundler
bundle

vim Rakefile

La începutul fișierului Rakefile adaugi (imediat după #!/usr/bin/env rake):

require 'rake/dsl_definition'
require 'rake'
:wq

vi config/gitosis.yml

Ajustezi setările:

admin_uri: gitosis@vps.mxhost:gitosis-admin.git
base_path: /srv/gitosis/repositories/
host: vps.mxhost
git_user: gitosis

Salvezi și pornești serverul:

RAILS_ENV=production rake db:setup
RAILS_ENV=production rake db:seed_fu

rails s -e production

În acest moment poți vizita adresa VPS-ului, pe portul 3000. (să zicem http://vps.mxhost:3000).
Pentru a te loga folosești datele implicite (pe care poți – și chiar e recomandat – să le schimbi):

Email: admin@local.host
Password: 5iveL!fe

În momentul în care adaugi primul repo, aruncă un ochi în consolă. Va trebui să adaugi amprenta RSA (scrie yes):

The authenticity of host 'vps.mxhost (123.123.123.123)' can't be established.
RSA key fingerprint is 31:36:6e:2f:7d:28:60:eb:e2:ba:70:84:7e:ed:4a:1f.
Are you sure you want to continue connecting (yes/no)? yes
4.1 Alte chei!

Nu am de gând să îți explic cum se folosește Git sau Gitlab, dar e o chestiuță în jurul căreia m-am învârtit vreo 20 minute aseară (probabil era și oboseala de vină).

După ce termini de adăugat utilizatori și proiecte va trebui să adaugi… cheile. Logic, nu? Doar că nu scrie nicăieri iar conținutul gitosis.conf este oarecum ignorat. Prin urmare, faci click pe avatarul din dreapta sus => Your profile => Keys => Add new.

4.2 Pornirea serverului Rails ca daemon

Pentru că nu vrei să stai tot timpul cu putty deschis, va trebui să pornim serverul rails ca daemon:

rails s -e production -d
4.2.1 Oprirea daemon-ului
lsof -i :3000  # găsim pid-ul procesului ce rulează pe portul 3000
kill -9 pid # killărim procesul cu pid-ul de mai sus

GATA!

5. Chestii utile

5.1 Cum faci update la Gitlab?

Proiectul pare a fi destul de activ din punct de vedere al dezvoltării. Prin urmare, am rămas plăcut impresionat să văd că în decursul a două-trei zile s-au schimbat câteva chestii după ce am făcut update.

Pentru a face update, cu serverul rails oprit rulezi (în directorul gitlab/):

git fetch origin
bundle install
bundle exec rake db:migrate RAILS_ENV=production

Repornești serverul și ar trebui să meargă :)

5.2 Backup

Pentru a face backup la server, intri cu ssh și copiezi următoarea poveste:

sudo tar cvpzf /backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys /

Treaba asta îți va face o arhivă. Pe care o poți copia în /var/www pentru a putea să o descarci accesând pur și simplu domeniul/ip-ul vps-ului : http://vps.mxhost/backup.tgz

Pentru a face restore la acest backup poți folosi comanda:

tar xvzf backup.tgz
5.3 Un fel de bibliografie

4 Comentarii to “Cum faci un server Git pe un VPS la MXHost?”

  1. Mersi de tutorial!

    O singura chestie m-ar mai interesa: ai facut vreodata un “hook” dupa ce se face push pe server? Asta ar fi util cand ai de facut restart la server pt Rails sau Node sau cand ai de instalat pachete (de ex).

  2. Cool. Tocmai ce am terminat de instalat intr-o masina virtuala. Nu am avut nici o problema, merge fara probleme.

    Multumesc!

  3. Foarte util tutorialul. Multumesc pentru informatii.

Show trackbacks
  1. […] ce pune la dispoziție un API care permite… well, închiderea bug-urilor. Eu folosesc – așa cum am zis și aici – gitlab. Între timp, aplicația a evoluat foarte mult, transformându-se încet, încet […]

Ți-a plăcut articolul? Lasă un comentariu!

You can insert code snippets using BBcode:
[js].[/js] [html].[/html] [php].[/php] [css].[/css]
You can also use some HTML tags:
<blockquote>.</blockquote> <code>.</code> <a href="">.</a> <strong>.</strong> <em>.</em>