Montando Gitlab en Debian Wheezy
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
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.
———————————————–
Dudas, comentarios, sugerencias? Sigueme en twitter @josecely
Links
https://www.gitlab.com/
https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/installation.md