Jose Antonio Cely Saidiza

Antiguo y olvidado, Weblog personal

Montando Gitlab en Debian Wheezy

By Jose Antonio Cely Saidiza

El presente artículo explica paso a paso como montar un servidor de repositorios de código fuente con Git (SCV). Hace años escribí sobre los sistemas de control de versiones, aunque ese artículo hablaba sobre el difunto subversion los conceptos de versionamiento son los mismos. Vale la pena aclarar que Git es mucho más avanzado en funcionalidades respecto a Subversion, una de las principales ventajas de Git, es que este es descentralizado, es decir que cada copia o checkout de código fuente puede ser un repositorio independiente. En este caso el servidor es simplemente el oficial para un proyecto, por decirlo así.

Ahora bien, si estamos hablando de un proyecto de desarrollo en el que hay múltiples desarrolladores, ejemplo en un entorno corporativo; tenemos que poder controlar usuarios, grupos, proyectos, ramas, forks, etc. y en este caso es donde la aplicación Gitlab facilita toda esta administración con una fácil interfaz web. Además esta interfaz es muy similar a el práctico (y no tan económico) GitHub Enterprise.

Instalando el servidor

Para la instalación solo necesitamos un sistema debian Wheezy recién instalado lo más limpio posible.

Actualizamos paquetes

# apt-get update -y
# apt-get upgrade -y

Instalamos dependencias

# apt-get install -y build-essential 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 logrotate mysql-server mysql-client libmysqlclient-dev sudo python-docutils

Mysql pedirá password de administrador, poner algo seguro y no olvidarlo!

Instalamos el core git

# apt-get install -y git-core

Instalamos Ruby

Removemos viejas versiones de Ruby 1.8 en caso de tenerlo instalado

# apt-get remove ruby1.8

Bajamos Ruby y lo compilamos:

# mkdir /tmp/ruby && cd /tmp/ruby
# curl –progress ftp://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p353.tar.gz | tar xz
# cd ruby-2.0.0-p353
# ./configure –disable-install-rdoc
# make
# make install
# gem install bundler –no-ri –no-rdoc

Creamos el usuario necesario

# adduser –disabled-login –gecos ‘GitLab’ git

Instalamos GitLab shell

# cd /home/git # su git
# git clone https://gitlab.com/gitlab-org/gitlab-shell.git -b v1.9.1
# cd gitlab-shell
# cp config.yml.example config.yml

Editamos el archivo de configuración con el dominio de nuestro servidor (Ej. suservidordecodigo.com)

# vi config.yml

Después instalamos

# ./bin/install
# exit

Base de datos

Aseguaramos MySQL con el siguiente comando (responder si a todo)

# mysql_secure_installation

Luego nos logueamos como administrador de MySQL

# mysql -u root -p

Creamos el usuario para gitlab (No olvidar cambiar el password por algo más seguro)

mysql> CREATE USER ‘git’@’localhost’ IDENTIFIED BY ‘$password’;
mysql> SET storage_engine=INNODB;
mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
mysql> GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO ‘git’@’localhost’;
mysql> exit;

Comprobamos que podamos ingresar como el usuario git de mysql

# mysql -u git -p -D gitlabhq_production

Si todo es correcto obtendremos el prompot de Mysql después de ingresar el password

mysql>

Salimos

mysql> exit;

GitLab

Nos ubicamos en el directorio de gitlab

# cd /home/git

Hacemos un clone del código fuente

# su git
# git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 6-7-stable gitlab

Nos ubicamos en el directorio de git

# cd /home/git/gitlab

Copiamos el archivo de configuración de ejemplo

# cp config/gitlab.yml.example config/gitlab.yml

Editamos el dominio cambiando «localhost» por el que corresponda

# vi config/gitlab.yml

Salimos del usuario git

# exit 
# cd /home/git/gitlab

Aseguramos permisos en log/ y tmp/

# chown -R git log/
# chown -R git tmp/
# chmod -R u+rwX log/
# chmod -R u+rwX tmp/
# su git
# mkdir /home/git/gitlab-satellites
# exit
# chmod u+rwx,g+rx,o-rwx /home/git/gitlab-satellites
# cd /home/git/gitlab
# chmod -R u+rwX tmp/pids/
# chmod -R u+rwX tmp/sockets/
# chmod -R u+rwX public/uploads

Copiamos el archivo de configuración de Unicorn

# su git
# cp config/unicorn.rb.example config/unicorn.rb
# cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb
Configuramos las variables para el usuario git y editamos user.email tal cual como este en gitlab.yml
# git config –global user.name «GitLab»
# git config –global user.email «alfuncorreo@algundominio»
# git config –global core.autocrlf input

Editamos para que el email de gitlab coincida con el usuario git (## Email settings)

# vi config/gitlab.yml

Copiamos archivo de configuración de git

# cp config/database.yml.mysql config/database.yml
# chmod o-rwx config/database.yml

Editamos el archivo de configuración con las credenciales establecidas de mysql

# vi config/database.yml

Instalamos

# cd /home/git/gitlab
# bundle install –deployment –without development test postgres aws
# bundle exec rake gitlab:setup RAILS_ENV=production
# exit

Script de inicio

# cp lib/support/init.d/gitlab /etc/init.d/gitlab
# cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab

Comprobamos que funciona la aplicación

# su git
# bundle exec rake gitlab:env:info RAILS_ENV=production

Si todo está bien

# bundle exec rake assets:precompile RAILS_ENV=production
# exit

Reiniciamos gitlab

# /etc/init.d/gitlab restart

Servidor web Nginx

# apt-get install -y nginx
# cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab
# ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab

Editamos el archivo de configuración para que coincida con la configuración (server_name)

# vi /etc/nginx/sites-available/gitlab

Reiniciamos Nginx para que tome los cambios

# service nginx restart

Primer login

En un navegaor accedemos a la URL de nuestro servidor

Primer login en gitlab

El usuario y contraseña por defecto son:
root
5iveL!fe
La primera página nos envía a un formulario para actualizar el password. Obviamente se debe editar por algo seguro.
Después de esto ya podremos acceder a gitlab, crear proyectos, usuarios, etc.

Dashboard de Gitlab

———————————————–

Dudas, comentarios, sugerencias? Sigueme en twitter @josecely

Links
https://www.gitlab.com/
https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/installation.md

Leave a comment