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:
iintră în modul de editare (insert);Escintră în modul normal, de unde poți folosi următoarele comenzi:/foocaută textulfoo.n/shift+ncaută textul din nou (înainte și înapoi);:wsalvează fișierul;:qiese 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.
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
- http://winscp.net/eng/index.php
- http://help.github.com/win-set-up-git/
- https://help.ubuntu.com/community/Git
- http://blog.hoaitq.info/2011/03/ssh-stop-working-after-ubuntu-upgraded.html
- http://en.wikibooks.org/wiki/Learning_the_vi_Editor/Vim/Modes
- https://github.com/gitlabhq/gitlabhq
- http://www.ryanwersal.com/blog/2011/10/18/installing-gitlab-on-ubuntu-server/
- http://www.iamntz.com/1542/frontend-developer/gitconfig/
- Posted in:
- Playground


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).
Cool. Tocmai ce am terminat de instalat intr-o masina virtuala. Nu am avut nici o problema, merge fara probleme.
Multumesc!
Foarte util tutorialul. Multumesc pentru informatii.