1. Požadavky
2. Odkazy
3. Instalace GitLab v8.x
Na internetu můžete najít nespočet variací, jak nainstalovat GitLab na FreeBSD server. Tento návod vychází z postupů ve výše uvedených odkazech a jak poznamenal Charles Newey na svém blogu, nejprve si vždy přečtěte oficiální instalační příručku uvedenou na serveru GitLab.
Následující postup byl vyzkoušen na FreeBSD server s použitím jail. PostgreSQL server byl nainstalován na jiném počítači.
Připojte se pomocí SSH k FreeBSD serveru, připojte se k vytvořenému jail, kde bude GitLab instalován (jexec gitlab tcsh) a nainstalujte základní balíčky pro instalaci GitLab.
pkg update && pkg upgrade
# Install system packages
pkg install sudo bash icu cmake gmake libxslt libxml2 libgit2 pkgconf git rubygem-bundler rubygem-rake node012 logrotate redis krb5 python2
# Install go compiler for gitlab-git-http-server compilation
pkg install go
# For PostgreSQL server on the different machine install only PostgreSQL client package
pkg install postgresql94-client
# When you install PostgreSQL server on the same machine you have to install these packages
# pkg install postgresql94-server postgresql94-contrib
Aktualizujte rubygems a nainstalujte bundler.
gem install bundler --no-ri --no-rdoc
Přidejte/upravte následující řádky do souboru '/etc/rc.conf' pro automatické spouštění požadovaných serverů při startu jail.
sshd_enable="YES"
# execute in the shell
echo '# GitLab services' >> /etc/rc.conf
echo 'redis_enable="YES"' >> /etc/rc.conf
echo 'gitlab_enable="YES"' >> /etc/rc.conf
4. Vytvoření git uživatele
Vytvoření GitLab uživatele 'git' provedeme pomocí následujích přikazů. Zárověň přidáme tohoto uživatele i do skupiny 'redis' (bude to užitečné později).
pw user mod git -G redis
5. Nastavení PostgreSQL databáze
Vytvoříme databázového uživatele 'git' a a vytvoříme databázi pro GitLab. Následující přikazy spusťte na počítači, kde je nainstalován PostgreSQL. Nejprve se připojíme k výchozí databázi.
psql -d template1
Po připojení k databázi vytvoříme GitLab uživatele, potom vytvoříme produkční databázi a následně nastavíme příslušná oprávnění k databází.
ALTER USER git WITH PASSWORD '<your_password>';
CREATE DATABASE gitlabhq_production OWNER git;
\connect gitlabhq_production
CREATE EXTENSION pg_trgm;
\q
- Poznámka: Pokud nechcete databázi zabezpečovat, příkaz 'ALTER ...' nepoužijte.
Nakonec použijte příkaz 'exit' pro ukončení SQL shell a vyzkoušejte připojení k nově vytvořené databázi jako uživatel git.
su - git
psql -d gitlabhq_production
\q
# exit git user shell
exit
6. Instalace a nastavení Redis
Proveďte zálohu originálního konfiguračního souboru Redis a upravte konfigurační soubor pomocí následujícíh příkazů.
# Disable Redis listening on TCP by setting 'port' to 0
sed 's/^port .*/port 0/' /usr/local/etc/redis.conf.orig | tee /usr/local/etc/redis.conf
# Enable Redis socket
echo 'unixsocket /usr/local/var/run/redis/redis.sock' | tee -a /usr/local/etc/redis.conf
# Grant permission to the socket to all members of the redis group
echo 'unixsocketperm 770' | tee -a /usr/local/etc/redis.conf
# Create the directory which contains the socket
mkdir -p /usr/local/var/run/redis
chown redis:redis /usr/local/var/run/redis
chmod 755 /usr/local/var/run/redis
# Restart redis
service redis restart
7. Instalace a nastavení GitLab
Přesuňte se do adresáře uživatele git a stáhněte zdrojové soubory GitLab (zkontrolujte poslední verzi na webu Gitlab).
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 8-7-stable gitlab
cd /home/git/gitlab
sudo -u git -H git fetch --all
sudo -u git -H git checkout -- Gemfile.lock db/schema.rb
sudo -u git -H git checkout LATEST_TAG -b LATEST_TAG
- Poznámka:
- Přepište LATEST_TAG na verzi GitLab, kterou chcete použít, např. v8.7.2. Příkaz `git tag -l 'v*.[0-9]' --sort='v:refname'` vypíše seznam všech verzí.
- Změňte '8-7-stable' na poslední verzi GitLab
- Můžete změnit '8-7-stable' na 'master' pokud chcete používat vývojovou verzi. Verze 'master' není určena k použití na produkčním serveru!
Přesuňte se do adresáře GitLab a proveďte konfiguraci GitLab.
sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml
GitLab nemá rád symbolické odkazy a ve FreeBSD adresář '/home/' je odkazem na adresář '/usr/home'. V konfiguraci Gitlab provedeme změny na dvou místech.
sed -i '.bak' 's/home\/git/usr\/home\/git/g' config/gitlab.yml
V konfiguračním souboru GitLab změňte položku 'host', která bý měla obsahovat název vaší domény nebo vaši IP adresu, např. "gitlab.mysite.com". V položce 'bin_path' musí být nastavena správná cesta ke spustitelnému souboru git, např. '/usr/local/bin/git'.
Zkopírujte soubor secrets.yml.
sudo -u git -H chmod 0600 config/secrets.yml
- Poznámka: Bezpečně uložte soubor secrets.yml. Soubor obsahuje šifrovací klíče pro jednotlivé relace pro zabezpečení proměnných. Zálohujte soubor secrets.yml na jiném místě, než kde je uložena záloha databáze.
Nastavení odpovídajích oprávnění pro dočasné adresáře a soubory.
cd /home/git/gitlab
chown -R git log/
chown -R git tmp/
chmod -R u+rwX,go-w log/
chmod -R u+rwX tmp/
# Make sure GitLab can write to the tmp/pids/ and tmp/sockets/ directories
chmod -R u+rwX tmp/pids/
chmod -R u+rwX tmp/sockets/
# Make sure GitLab can write to the public/uploads/ directory
mkdir -p -m 700 public/uploads
mkdir -p -m 755 public/uploads/tmp
chown -R git public/uploads/
Zkopírujte ukázkový konfigurační soubor pro Unicorn a proveďte konfiguraci Unicorn serveru. Pokud očekáváte vysokou zátěž jednotlivých instancí, povolte 'cluster mode' a změňte počet procesů, např. pro 2GB RAM server je odpovídající počet procesů 3. Počet procesů by měl minimálně odpovídat počtu procesorových jader. Nezapoměňte nastavit IP adresu, na které bude Unicorn server odpovídat na požadavky.
# set listen IP and port of GitLab (choose different port as Redmine)
# listen 127.0.0.1:8080
vi config/unicorn.rb
Zkopírujte ukázkový konfigurační soubor pro Rack a případně si jej upravte podle svých potřeb.
Nastavte globální parametry pro Git. Je to užitečné zejména pro práci přes WWW rozhraní. Nastavte proměnnou 'user.email' stejně, jako je nastavena v konfiguračním souboru 'gitlab.yml'.
#sudo -u git -H git config --global user.email "example@example.com"
sudo -u git -H git config --global core.autocrlf input
Zkopírujte konfigurační soubor pro Redis a změňte nastavení tak, aby Redis používal unix socket.
# Change 'production' line to 'unix:/usr/local/var/run/redis/redis.sock'
sed -i '.bak' "s/production:.*$/production: unix:\/usr\/local\/var\/run\/redis\/redis.sock/g" config/resque.yml
- Důležitá poznámka:
- Ujistěte se, že oba konfigurační soubory 'gitlab.yml' a 'unicorn.rb' obsahují stejné hodnoty pro odpovídající parametry.
- Pokud nastavíte git repositář mimo jail, nastavte cestu k repozitáři v položce 'repos_path' v souboru 'config/gitlab.yml'. Adresář vytvoříte a nastavíte mu potřebná oprávnění pomocí příkazů:
mkdir -p /mnt/git/repositories/
chown -R git:git /mnt/git/repositories
8. Konfigurace GitLab databáze
Zkopírujte a nastavte konfigurační soubor GitLab pro postgreSQL databázi. Nastavte stejné heslo a název databáze, které jste použili při vytváření databázového uživatele 'git' v bodu 5).
# Make config/database.yml readable to git only
sudo -u git -H chmod o-rwx config/database.yml
# Update database connection. Use section 'production' for changes
#sed -i '.bak' "s/password/\$<your_password>/g" config/database.yml
9. Nastavte GitLab shell
GitLab Shell je software vyvinutý speciálně pro GitLab pro zabezpečený SSH přístup a správu repositářů. Nejprve musíme nainstalovat Ruby Gems.
sudo -u git -H bundle install --deployment --without development test mysql aws
- Poznámka:
- Pokud se při instalaci timfel-krb5-auth-0.8.3 objeví chyba, vložte řádek uvedený níže do souboru '.bundle/config'
BUNDLE_BUILD__TIMFEL-KRB5-AUTH: --with-ldflags=-L. -Wl,-O1 -Wl,--as-needed -fstack-protector -rdynamic -Wl,-export-dynamic -Wl,--no-undefined -lcom_err
- V případě SSL chyby upravte protokol http na https v souboru 'Gemfile'.
sed -i '' "s/https/http/g" Gemfile
- Pokud se při instalaci timfel-krb5-auth-0.8.3 objeví chyba, vložte řádek uvedený níže do souboru '.bundle/config'
Pro instalaci gitlab-shell použijeme rake.
sudo -u git -H sed -i '.bak' 's/: \/home\/git/: \/usr\/home\/git/g' /home/git/gitlab-shell/config.yml
cd /home/git/gitlab-shell
sudo -u git -H git fetch
sudo -u git -H git checkout v`cat /home/git/gitlab/GITLAB_SHELL_VERSION` -b v`cat /home/git/gitlab/GITLAB_SHELL_VERSION`
cd /home/git/gitlab
- Poznámka: version shellu [2.6.5] by měla odpovídat verzi uvedené v souboru '/home/git/gitlab/GITLAB_SHELL_VERSION'
Upravte konfigurační soubor pro gitlab-shell. Změňte parametr 'socket' na '/usr/local/var/run/redis/redis.sock' (viz. konfigurace Redis). Změňte parameter 'gitlab_url' na 'http://127.0.0.1:8080/' (IP adresa a port musí být stejné, jako jsou uvedeny v konfiguračním souboru 'config/unicorn.rb'). Netrapte se nastavováním SSL, protože spojení je používáno pouze interně.
#gitlab_url: http://127.0.0.1:8080/
#socket: "/usr/local/var/run/redis/redis.sock"
# exit git user shell
exit
10. Instalace gitlab-git-http-server - OBSOLETE
Nahrazen Gitlab-Workhorse.sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-git-http-server.git
cd gitlab-git-http-server
sudo -u git -H make
10. Instalace gitlab-workhorse
Gitlab-workhorse je deamon obsluhující Git HTTP datový přenos y unicorn, napsaný v Go. Gitlab-workhorse byl navržen tak, aby ulevil GitHHTP datovým přenosům z GitLab Rails app (Unicorn) jako vlastní daemon. Obsluhuje také stahování 'git archivů' v rámci GitLab. Veškerá autentizační a autorizační logika je stále zaležitostí GitLab Rails app.sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-workhorse.git
cd gitlab-workhorse
sudo -u git -H git fetch
sudo -u git -H git checkout v`cat /home/git/gitlab/GITLAB_WORKHORSE_VERSION` -b v`cat /home/git/gitlab/GITLAB_WORKHORSE_VERSION`
sudo -u git -H make
11. Inicializace a aktivace databáze
Spusťte následující příkazy pro inicializaci a aktivaci databáze pro GitLab. Odpovězte 'yes' na otázku na vytvoření databáze. Po uspěšné inicializaci se objeví hlášení 'Administrator account created:'.
sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production GITLAB_ROOT_PASSWORD="your_password"
- Poznámka: Administrátorské heslo můžete nastavit pomocí proměnné GITLAB_ROOT_PASSWORD. Pokud heslo nenastavíte, bude použito výchozí adminstrátorské heslo a v tomto případě nepoužívejte GitLab veřejně, dokud toto výchozí heslo nezměníte.
12. Příprava spouštěcího skriptu GitLab
Zkopírujte a případně upravte ukázkový startovací skript GitLab.
Při použití ve FreeBSD jsem měl problém s automatickým startem GitLab po restartu počítače. Připojená aktualizace spouštěcího souboru tento problém řeší.
+++ gitlab 2015-12-09 11:00:56.000000000 +0100
@@ -4,17 +4,11 @@
# Maintainer: @randx
# Authors: rovanion.luckey@gmail.com, @randx
-### BEGIN INIT INFO
-# Provides: gitlab
-# Required-Start: $local_fs $remote_fs $network $syslog redis-server
-# Required-Stop: $local_fs $remote_fs $network $syslog
-# Default-Start: 2 3 4 5
-# Default-Stop: 0 1 6
-# Short-Description: GitLab git repository management
-# Description: GitLab git repository management
-# chkconfig: - 85 14
-### END INIT INFO
-
+### FreeBSD INIT INFO
+# PROVIDE: gitlab
+# REQUIRE: LOGIN redis
+# KEYWORD: shutdown
+### END FreeBSD INIT INFO
###
# DO NOT EDIT THIS FILE!
@@ -23,9 +17,15 @@
# An example defaults file can be found in lib/support/init.d/gitlab.default.example
###
+. /etc/rc.subr
-### Environment variables
-RAILS_ENV="production"
+name="gitlab"
+rcvar=gitlab_enable
+extra_commands="reload status"
+
+load_rc_config $name
+
+: ${gitlab_enable:=NO}
# Script variable names should be lower-case not to conflict with
# internal /bin/sh variables such as PATH, EDITOR or SHELL.
@@ -40,14 +40,20 @@
gitlab_workhorse_pid_path="$pid_path/gitlab-workhorse.pid"
gitlab_workhorse_options="-listenUmask 0 -listenNetwork unix -listenAddr $socket_path/gitlab-workhorse.socket -authBackend http://127.0.0.1:8080"
gitlab_workhorse_log="$app_root/log/gitlab-workhorse.log"
-shell_path="/bin/bash"
+shell_path="/usr/local/bin/bash"
+
+### Environment variables
+RAILS_ENV="production"
+export PATH=$PATH:/usr/local/bin:/usr/local/sbin
# Read configuration variable file if it is present
test -f /etc/default/gitlab && . /etc/default/gitlab
# Switch to the app_user if it is not he/she who is running the script.
if [ `whoami` != "$app_user" ]; then
- eval su - "$app_user" -s $shell_path -c $(echo \")$0 "$@"$(echo \"); exit;
+ eval su - "$app_user" -c $(echo \")service $name "$@"$(echo \"); exit;
+# eval su - "$app_user" -c $(echo \")$0 "$@"$(echo \"); exit;
+# eval su - "$app_user" -s $shell_path -c $(echo \")$0 "$@"$(echo \"); exit;
fi
# Switch to the gitlab path, exit on failure.
@@ -364,30 +370,10 @@
start_gitlab
}
+start_cmd="start_gitlab"
+stop_cmd="stop_gitlab"
+restart_cmd="restart_gitlab"
+reload_cmd="reload_gitlab"
+status_cmd="print_status"
-### Finally the input handling.
-
-case "$1" in
- start)
- start_gitlab
- ;;
- stop)
- stop_gitlab
- ;;
- restart)
- restart_gitlab
- ;;
- reload|force-reload)
- reload_gitlab
- ;;
- status)
- print_status
- exit $gitlab_status
- ;;
- *)
- echo "Usage: service gitlab {start|stop|restart|reload|status}"
- exit 1
- ;;
-esac
-
-exit
+run_rc_command "$1"
13. Kontrola konfigurace a nastavení rake assets
Kontrolu správnosti nastavení GitLab provedeme následujícími příkazy.
cd /home/git/gitlab
bundle exec rake gitlab:env:info RAILS_ENV=production
# exit git user shell
exit
Pokud kontrola nezobrazí chyby, můžemě přistoupit ke kompilaci rake assets pro GitLab. Tato operace může na pomalejších počítačích trvat zhruba 10-15 minut!
Pokud opět vše proběhlo správně, můžeme spustit GitLab službu.
A následujícím příkazem otestovat běžící instanci GitLab.
14. Konfigurace Nginx
Nginx je oficiálně podporovaným WWW server pro GitLab a konfigurační soubor pro tento server je uložen jako soubor '/home/git/gitlab/lib/support/nginx/gitlab'. Tento soubor tak můžete použít a upravit následujícím způsobem.
# Tell nginx where to find the gitlab server.
sed -i ".bak" "s/proxy_pass http:\/\/gitlab;/proxy_pass http:\/\/127.0.0.1:8080;/g" /usr/local/etc/nginx/gitlab.conf
# Disable gzip static. If you compile nginx from ports you can enable gzip. pkg comes with it disabled by default.
sed -i ".bak" "s/gzip_static on;/#gzip_static on;/g" /usr/local/etc/nginx/gitlab.conf
# Edit /usr/local/etc/nginx/nginx.conf and add the following line before the last }
include /usr/local/etc/nginx/gitlab.conf;
# SSL seetup
# see file install_gitlab-ssl.txt
# Check nginx setup
nginx -t
# Restart nginx, and you should be up and running.
service nginx restart
Komentáře