GitHub är verkligen jättebra för att hantera utveckling men ibland vill man inte lämna över allt till någon annan. Då är det bästa att installera GitLab som är en "klon" av GitHub på din egna Ubuntu server.
GitLab har tagit fram ett .deb packet vilket är smidigt om du vill installera GitLab. Problemet är bara att den även installerar alla beroenden, Ruby, PostreSQL, Redis, Nginx. Vilket är bra om man ska installera det på en dedikerad maskin, däremot om du ska installerade det tillsammans med Apache och vill använda mysql istället för PostreSQL så får vi ta till manuella metoder.
Rekommenderade systemkrav är minst 2 kärnor, och minst 2GB RAM för att hantera upp till 500 användare. Jag kommer att installera GitLab på en server som även hanterar andra webbsidor med Apache, eftersom att GitLab endast stödjer Nginx som webbserver så kommer vi att göra så Nginx svarar på port 8181 och Apache ligger som en proxy mellan port 80 och port 8181. Databasen ligger i mitt fall på en separat databasserver, men den kan lika gärna ligga på samma server som GitLab.
Först skapar vi en användare för GitLab
sudo adduser --disabled-login --gecos 'GitLab' git
Adding user `git' ...
Adding new group `git' (1002) ...
Adding new user `git' (1002) with group `git' ...
Creating home directory `/home/git' ...
Copying files from `/etc/skel' ...Sen installerar vi de paketet som krävs.
sudo apt-get install build-essential cmake zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl openssh-server redis-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev logrotateInstallera Git
sudo apt-get install gitoch postfix för att hantera mail
sudo apt-get install postfixNär konfigurationen kommer upp så anger du "Internet site".
Rutan efter så anger du din domän. Om du behöver installera en fullständiga mailserver för att hantera konto så kommer det förmodligen att komma en guide här för det.
Installera Ruby
Även om GitLab är ett Ruby on Rails program så saknas det tyvärr stöd för versionshanterare såsom RVM och rbenv. Dessutom krävs det minst version 2.0 av Ruby, standard i Ubuntu 14.04 är 1.9.3. Så först ta vi bort Ruby om det är installerat.
sudo apt-get remove ruby
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package 'ruby' is not installed, so not removed
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.Senaste versionen av Ruby är när det här skrivs 2.1.5 så det är den vi laddar ner och kompilerar nu.
mkdir /tmp/ruby && cd /tmp/ruby
wget http://ftp.ruby-lang.org/pub/ruby/2.1/ruby-2.1.5.tar.gz
tar xvzf ruby-2.1.5.tar.gz
cd ruby-2.1.5
./configure --disable-install-rdoc --prefix=/usr/local
make
sudo make installKontrollera så att kompileringen fungerade.
$ ruby -vNär kompileringen är klar så konfigurerar vi databasen. Jag har valt att separera databasen och lägga den på en egen server som här kommer att heta db01, vi utgår här även ifrån att vi redan har installera mysql på den servern.
Börja med att lägga till användare git och skapa databasen gitlab.
mysql -u user -p -h db01
mysql> create user 'git'@'x.x.x.x' identified by 'password';
mysql> create database git DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
mysql> grant all on git.* to 'git'@'x.x.x.x';Ersätt x.x.x.x med ip-nummret till din webbserver, alternativt ersätt det med % om du vill tillåta att man ska kunna ansluta från hela internet, det är osäkert och rekommenderas inte.
Installera GitLab
Nu är det dags att installera GitLab hemkatalogen för användaren git.
cd /home/gitLadda ner GitLabs källkod, vi laddar här ner version 7.5-stable som i skrivande stund är den senaste. Men du kan ladda ner vilken du känner för, du bör dock inte använda master på en produktionsmaskin.
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 7-5-stable gitlab
cd gitlabSkapa konfigurationsfilen.
sudo -u git -H cp config/gitlab.yml.example config/gitlab.ymlÖppna filen.
sudo joe config/gitlab.ymlI början av filen, på rad 20 närmare bestämt, har du värdet för host som vi ska ändra.
host: localhost Ändra localhost till adressen för din server, till exempel www.example.com. Sedan går vi till rad 45.
email_from: example@example.comÄndra example@example.com till den mailadress som du vill att mailen ska ha som avsändare.
Nu ändrar vi lite rättigheter för en del av filerna och ställer in lite inställningar för git.
cd /home/git/gitlab
sudo chown -R git log/
sudo chown -R git tmp/
sudo chmod -R u+rwX log/
sudo chmod -R u+rwX tmp/
sudo -u git -H mkdir /home/git/gitlab-satellites
sudo chmod u+rwx,g=rx,o-rwx /home/git/gitlab-satellites
sudo -u git -H mkdir tmp/pids/
sudo -u git -H mkdir tmp/sockets/
sudo chmod -R u+rwX tmp/pids/
sudo chmod -R u+rwX tmp/sockets/
sudo -u git -H mkdir public/uploads
sudo chmod -R u+rwX public/uploads
sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb
sudo -u git -H git config --global user.name "GitLab"
sudo -u git -H git config --global user.email "gitlab@localhost"
sudo -u git -H git config --global core.autocrlf input
sudo -u git cp config/database.yml.mysql config/database.ymlFör mig säger den att tmp/pids, tmp/sockets och public/uploads redan finns men de får ligga kvar här ifall de inte finns för dig.
Ändra inställningarna för databasen genom att öppna config/databse.yml
sudo joe config/database.ymlRad 9, 11 - 13 innehåller följande som vi ändrar efter vår databasmiljö. På rad elva får vi ta bort # framför host för att vi ska kunna ställa in vilken maskin som databasen ligger på.
database: gitlabhq_production
username: git
password: "secure password"
# host: localhostSpara och stäng sedan filen därefter ändrar vi rättigheterna på filen så att användare på servern inte kan läsa vårat lösenord.
sudo -u git -H chmod o-rwx config/database.ymlInstallera bundler, GitLab Shell mm
Nu installerar vi lite mer saker som behövs.
Observerera att det fjärde kommandot säger "without" alltså utan postgresql, skulle vi använda postgresql istället så hade kommandot sett ut så här "sudo -u git -H bundle install --deployment --without development test mysql aws". Det här var en sak som jag missade först vilket gjorde att installationen av GitLab Shell misslyckades på grund av att pg_config saknades, vilket är för postgresql.
Vi installerar även biblioteken för mysql klienten eftersom att mysql inte är installerat på den här maskinen, skulle databasen ligga på samma maskin så är det redan installerat.
sudo gem install bundler
sudo apt-get install libmysqlclient-dev
gem install mysql2 -v '0.3.16'
sudo -u git -H bundle install --deployment --without development test postgres aws
sudo -u git -H bundle exec rake gitlab:shell:install[v2.2.0] REDIS_URL=redis://localhost:6379 RAILS_ENV=productionSå konfigurerar vi GitLab shell
sudo joe /home/git/gitlab-shell/config.ymlKontrollera så att gitlab_url är samma som adressen till servern därefter sparar och stänger vi filen.
Eftersom att vi är tvungna att lägga Nginx på en annan port än standard så får vi inte glömma att ta med det i adressen här. Så om adressen till din maskin är gitlab.example.com och porten som du anvädner till Nginx är 8181 så ska rad 3 se ut enligt följande.
gitlab_url: http://gitlab.example.com:8181/Nu skapar vi tabellerna i databasen.
sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production Den kommer nu att meddela att den kommer att skapa alla tabeller och att om det finns några tabeller så kommer de att raderas. Eftersom att vi precis har skapat databasen så är den tom vilket betyder att det är bara att svara yes.
This will create the necessary database tables and seed the database.
You will lose any previous data stored in the database.
Do you want to continue (yes/no)? När scriptet är klart så kommer inloggningsuppgifterna för administratören.
Administrator account created:
login.........root
password......5iveL!feNu installerar vi init-scripten som ser till så att GitLab startar när vi startar datorn.
sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab
sudo update-rc.d gitlab defaults 21Aktivera log-rotation.
sudo cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlabKontrollera så att installationen har gått rätt till.
sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=productionResultatet bör se ut ungefär såhär.
System information
System: Ubuntu 14.04
Current User: git
Using RVM: no
Ruby Version: 2.1.5p273
Gem Version: 2.2.2
Bundler Version:1.7.9
Rake Version: 10.3.2
Sidekiq Version:2.17.0
GitLab information
Version: 7.5.3
Revision: b656b85
Directory: /home/git/gitlab
DB Adapter: mysql2
URL: http://gitlab.example.com
HTTP Clone URL: http://gitlab.example.com/some-project.git
SSH Clone URL: git@gitlab.example.com:some-project.git
Using LDAP: no
Using Omniauth: no
GitLab Shell
Version: 1.9.4
Repositories: /home/git/repositories/
Hooks: /home/git/gitlab-shell/hooks/
Git: /usr/bin/gitKompilera assets.
sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=productionKonfigurera Git inställningarna för git användaren. Se till ändra mailadress i user.email till samma som i config/gitlab.yml.
sudo -u git -H git config --global user.name "GitLab"
sudo -u git -H git config --global user.email "gitlab@example.com"
sudo -u git -H git config --global core.autocrlf inputDags att starta GitLab.
sudo service gitlab startInstallera och konfigurera Nginx till GitLab
Tyvärr stödjer inte GitLab Apache som webbserver vilket betyder att vi måste använda oss av Nginx, som är den enda webbservern som stöds. Eftersom Apache redan använder port 80 på den här maskinen så kommer vi att konfigurera Nginx till en annan port och därefter lägga till en virtuell värd i Apache som agerar forward proxy till Nginx. Det betyder att vi när vi surfar in till våran GitLab installation så är det Apache som webbläsaren kommer att begära sidan ifrån, Apache kommer sedan att hämta den begärda sidan från Nginx webbservern och därefter skicka den till webbläsaren.
Vi börjar således med att installera Nginx.
sudo apt-get install nginxKopiera exempelkonfigurationen från GitLab till Nginx, ta bort standard värden och aktivera gitlab värden.
sudo cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab
sudo rm /etc/nginx/sites-enabled/defaultDärefter konfigurerar värden för gitlab.
sudo joe /etc/nginx/sites-available/gitlabMed början på rad 37 har vi nedanstående.
listen 0.0.0.0:80 default_server;
listen [::]:80 default_server;
server_name YOUR_SERVER_FQDN;Första två raderna talar om för Nginx vilket ip-nummer och vilken port den ska lyssna på. Eftersom att port 80 är upptagen av Apache så ändrar vi det till 8181. Sista raden ändrar vi YOUR_SERVER_FQDN med adressen till våran server, gitlab.example.com.
Så här ska det alltså se ut när vi är klara.
listen 0.0.0.0:8181 default_server;
listen [::]:8181 default_server;
server_name gitlab.example.com;Spara och stäng filen när du är klar.
Därefter aktiverar vi gitlab värden och startar om Nginx för att aktivera GitLab.
cd /etc/nginx/sites-enabled
sudo ln -s ../sites-available/gitlab gitlab
sudo service nginx restartKontrollera installationen och testa i webbläsaren
Innan vi testar med webbläsaren om det fungerar så kollar vi så att installationen fungerar.
cd /home/git/gitlab
sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=productionOm alla tester är gröna eller lila så är allting ok.
Annars är det dags att felsöka. Om GitLab API access svarar med Error 404 eller (Errno::ECONNREFUSED) så ligger problemet i Nginx. Där hade jag problme i början eftersom att jag första gången glömde bort att ange rätt port i /home/git/gitlab-shell/config.yml
Dags att testa om det går att surfa in på webbsidan. Öppna webbläsaren och skriv in addressen till din server, glöm inte att ange rätt port till Nginx. I mitt exempel här ska vi ange gitlab.example.com:8181.
Om allting fungerar som det ska så kommer du att se följande bild.
Logga in med uppgifter som vi fick under installationen. Om du inte heller skrev upp de så är det:
Användar namn: root
Lösenord: 5iveL!fe
Efter inloggning kommer följande bild där vi måste byta lösenord. Ange först det nuvarande lösenordet (5iveL!fe) därefter anger du det nya som du vill använda 2 gånger. När lösenordet är bytt så blir du utloggad och du får då logga in igen med det nya lösenordet.
Konfigurerar Apache som reverse proxy för GitLab
Nu fungerar GitLab och allt är frid fröjd, eller? Nja eftersom att Nginx svarar på port 8181 så är installationen inte riktigt optimal. Visst du kanske kommer ihåg att ange porten varje gång du ska ansluta men anledningen till att man installerar GitLab är ju oftast för att man ska vara flera som arbetar med samma kod. För att slippa standard frågan att det inte fungerar för att de har glömt att ange :8181 när de försöker ansluta så konfigurerar vi Apache som en reverse proxy som då svarar på port 80 och därefter hämtar Apache sidorna från Nginx server för att slutligen skicka sidan till besökaren.
Jag utgår ifrån att Apache redan är installerad och är igång och rullar. För att aktivera reverse proxy så behöver vi installera paketet libapache2-mod-proxy-html som innehåller modulerna som behövs. Därefter aktiverar vi de moduler som behövs och startar om webbservern så vi ser att allt fungerar.
sudo apt-get install libapache2-mod-proxy-html
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod headers
sudo service apache2 restartDärefter skapar vi configurations filen för den nya "hemsidan", som vanligt använder jag joe för att redigera filer men du kan självklar använda din favorit. Ändra filnamnet till en som passar din domän.
cd /etc/apache2/sites-available/
sudo joe gitlab.example.com.confI konfigufationsfilen skapar vi först den nya virtuella värden, observera att jag hoppar över direktivet för DocumentRoot eftersom att vi inte kommer att hantera några filer på den här adressen utan alla förfrågningar skickas vidare till Nginx servern. Ändra gitlab.example.com till adressen för din server.
<VirtualHost *:80>
ProxyRequests off
ServerName gitlab.example.com
ServerAdmin webmaster@example.com
ErrorLog ${APACHE_LOG_DIR}/gitlab.example.com.error.log
CustomLog ${APACHE_LOG_DIR}/gitlab.example.com.access.log combined
ProxyPreserveHost On
ProxyPass / http://localhost:8181/
ProxyPassReverse / http://gitlab.example.com:8181/
</VirtualHost>De mesta direktiven är standard för att aktivera en ny virtuell värd, skillnaden är de sista 2 raderna och att vi saknar DocumentRoot.
| ProxyPass | Anger vilken adress på den här servern som ska hämtas från en annan server. Så om vi istället för / anger /gitlab/ så skickas bara begäran till den katagogen vidare till den adressen vi anger. Istället för http://localhost:8181/ kan vi ange i princip vilken adress som helst som den här servern kan ansluta till. Tänk dock på att om det första direktivet slutar med / så måste även det andra göra det. |
| ProxyPassReverse | Den här ändrar svars huvudet från servern så att webbläsaren ser det som att sidan kommer från gitlab.example.com istället för värdnamnet för localhost. Det ser |
Aktivera nya värden.
sudo a2ensite gitlab.example.com
sudo service apache2 restartTesta slutligen att det fungerar genom att gå in på gitlab.example.com, du ska nu se din gitlab server.
Om du använder SSL till gitlab.example.com så ska <VirtualHost gitlab.example.com:80> ändras till <VirtualHost gitlab.example.com:443>. Därefter behöver följande rader läggas till.
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/file.pemNu ska du ha din egna GitLab server installerad och klar. Bara att börja använda.