Repositorio git privado: GitLab

Git y github son dos herramientas magníficas que permiten la gestión y administración de una gran cantidad de repositorios. Todo esto está bien siempre y cuando estes desarrollando un software de código abierto, o pages por los repositorios privados en Github, pero puede que no te interese ninguna de estas dos opciones. En este caso ¿cómo se puede obtener el control, flexibilidad y facilidad de uso parecido a lo que nos ofrece Github sin la necesidad de que sus repositorios git estén en servidores fuera de su control? Para lograr esto, podemos hacer uso de GitLab, que proporciona una simple pero potente interfaz web de forma similar a como funciona GitHub, con la diferencia que podemos alojarlo en nuestro propio servidor, controlar el acceso como queramos y donde el tamaño estaría limitado al espacio de almacenamiento que tenga nuestro servidor. Para ver cómo conseguir esto que hemos hablado, supondremos que contamos con un servidor que corre bajo Ubuntu donde instalaremos todo el software necesario para conseguir nuestro objetivo. El primer paso es instalar algunos paquetes que utilizaremos.

sudo apt-get update
sudo apt-get install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl git-core openssh-server redis-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev

Asegúrate que no tienes instalada la versión 1.8 de Ruby, ya que puede dar problemas. Si se tuviera habría que desistalarlo e instalar la versión 2.0. Se instala de esta forma:

mkdir /tmp/ruby && cd /tmp/ruby
curl --progress ftp://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p247.tar.gz | tar xz
cd ruby-2.0.0-p247
./configure
make
sudo make install

Cuando haya finalizado el proceso, revisamos la versión de Ruby.>/p>

ruby --version

La salida debe ser algo parecida a esto:

ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]

Ahora instalamos el Bundler gem.

sudo gem install bundler –no-ri –no-doc

Y creamos un usuario git para utilizarlo con GitLab.

sudo adduser –disabled-login –gecos 'GitLab' git

Instalando el Shell de GitLab Descargamos el shell GitLab con las siguientes instrucciones.

cd /home/git
sudo -u git -H git clone https://github.com/gitlabhq/gitlab-shell.git
cd gitlab-shell
sudo -u git -H git checkout v1.7.0
sudo -u git -H cp config.yml.example config.yml

Mediante las instrucciones anteriores tenemos una copia de GitLab 1.7.0, y el ejemplo config.yml está listo. Si tienes un nombre de dominio apuntado al servidor, hay que editar el archivo config.yml para usar el dominio.

nano config.yml

En el archivo, encontraremos una línea similar a la siguiente:

gitlab_url: "http://localhost/"

Cambiamos el “localhost” por el nombre del dominio que apunta al servidor.

gitlab_url: "http://www.dominio.com/"

Una vez hemos terminado los pasos anteriores podemos iniciar el Shell que hemos instalado. Configuración de la base de datos GitLab puede funcionar bajo un sistema de bases de datos MySQL o PostgresSQL, en el caso de este tutorial lo realizaremos bajo MySQL. Asi que el primer paso será instalar MySQL con la instrucción esta a continuación. Durante el proceso de instalación se le pedirá que indique una contraseña para el usuario “root”. Podemos poner la que queramos pero teniéndola presente ya que será necesaria en los siguientes pasos.

sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev

Ya tenemos instalado MySQL y asignada la contraseña “root”. Lo siguiente que debemos hacer es crear un usuario MySQL para utilizar con GitLab. Para hacer esto, primero guardamos las consultas SQL en un fichero temporal.

nano tempfile

Las consultas que se tienen que realizar en SQL esta en el siguiente código teniendo en cuenta que hay que cambiar el valor “$password” por la contraseña que se ha asignado anteriormente en el paso de instalació. Es necesario tener en cuenta esta clave ya que será la contraseña de la base de datos de GitLab.

CREATE USER 'gitlab'@'localhost' IDENTIFIED BY '$password';
CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'gitlab'@'localhost';

Una vez terminado el archivo lo guardamos y ejecutamos la siguiente instrucción para ejecutar las consultas MySQL. Lo primero que solicitará será la contraseña de nuestro usuario root.

cat tempfile | mysql -u root -p

Lo siguiente que vamos hacer, es asegurarnos de que nuestro usuario MySQL fue creado satisfactoriamente. Logueandonos en la base de datos MySQL utilizando el usuario “gitlab”.

mysql -u gitlab -p

Si entra correctamente a la base de datos es que el usuario ha sido creado satisfactotiamente . Salimod y borramos el archivo temporal. Una vez llegados a este punto, ya tenemos todo configurado para intalar GitLab correctamente. Procedamos con la instalación.

cd /home/git
sudo -u git -H git clone https://github.com/gitlabhq/gitlabhq.git gitlab
cd /home/git/gitlab
sudo -u git -H git checkout 6-0-stable
sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml

De la misma forma que se hizo al configurar el Shell de GitLab, si se tiene un dominio apuntando a un servidor necesitaremos editar el config.yml para utilizar ese dominio.

sudo -u git -H nano config/gitlab.yml

En el archivo, deberíamos encontrarnos con un bloque de texto parecido al siguiente:

gitlab:
  ## Web server settings
  host: localhost
  port: 80
  https: false

Al igual que en los pasos anteriores cambiamos localhost por el nombre del dominio que apunta al servidor.

gitlab:
  ## Web server settings
  host: www.dominio.com
  port: 80
  https: false

Ahora daremos permisos a algunos archivos Linux.

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 -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.yml

Ahora tenemos que indicarle a GitLab que debe utilizar el usuario “gitlab” que hemos creado anteriormente. Para esto, editamos el archivo “config/database.yml”.

sudo -u git -H nano config/database.yml

Debemos buscar un bloque llamado “production” que contendrá las variables para indicar el nombre del usuario y de la contraseña. Es en esos campos donde tendremos que poner los datos de nuestro usuario.

production:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: gitlabhq_production
  pool: 10
  username: gitlab
  password: "$password"

Guardamos los cambios y cambiamos los permisos del archivo para asegurarnos que ningún otro usuario del servidor puede ver estos datos.

sudo -u git -H chmod o-rwx config/database.yml

Ahora instalaremos unos pocos elementos más que necesitaremos para que funcione de forma correcta nuestro GitLab privado. Este proceso puede tardar varios minutos.

cd /home/git/gitlab
sudo gem install charlock_holmes --version '0.6.9.4'
sudo -u git -H bundle install --deployment --without development test postgres aws

En este punto es posible que no de problemas en la siquiente instrucción:

sudo -u git -H bundle install --deployment --without development test postgres aws

El error más común es:

Could not find modernizr-2.6.2 in any of the sources

Para solucionarlo lo podemos hacer de la siguiente manera: Primero editamos el archivo Gemfile

cd /home/git/gitlab
nano Gemfile

En este archivo debemos buscar la siguiente linea

"modernizr", "2.6.2"

y cambiarla por:

"modernizr-rails", "2.7.1"

Luego editamos el archivo Gemfile.lock y en este caso debemos editar dos lineas

cd /home/git/gitlab
nano Gemfile.lock

La primera linea que tenemos que cambiar en este archivo es:

modernizr (2.6.2)

por:

modernizr-rails (2.7.1)

La segunda linea es:

modernizr (= 2.6.2)

y cambiarla por:

modernizr-rails (= 2.7.1)

Cuando el sistema pregunte que si queremos continuar le diremos que si.

sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production

Después de todo este proceso, se mostrará por pantalla un montón de información y al final se mostrará el mensaje “Administrator account created”, dándonos las credenciales como administrador. Debería aparecer algo similar a lo siguiente.

Administrator account created:
login.........admin@local.host
password......5iveL!fe

El siguiente paso será configurar GitLab para ponerlo en marcha siempre que se arranque el servidor.

sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab
sudo chmod +x /etc/init.d/gitlab
sudo update-rc.d gitlab defaults 21

Ejecutamos la siguiente instrucción para asegurarnos de que está trabajando.

sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production

Si no da mensajes de error y los datos mostrados por ese comando parecen correctos, damos por finalizada la instalación y configuración. Ahora arrancamos GitLab mediante el siguiente comando.

sudo service gitlab start

Configurando Nginx GitLab funciona con el servidor web Nginx por defecto. Si tenemos nuestro propio servidor web configurado como puede ser Apache, entonces estos pasos no deberías de aplicarlos. De lo contrario, siga estas instrucciones para instalar y configurar Nginx para trabajar con GitLab.

sudo apt-get -y install nginx
cd /home/git/gitlab
sudo cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab
sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab

Editar “/etc/nginx/sites-available/gitlab” para utilizar nuestro nombre de dominio.

sudo nano /etc/nginx/sites-available/gitlab

Ahí debemos buscar el bloque “server” y cambiaremos la cadena “YOUR_SERVER-FQDN” con el nombre de nuestro dominio.

server {
  listen *:80 default_server; # e.g., listen 192.168.1.1:80; In most cases *:80 is a good idea
  server_name www.nuestro_dominio.com; #

Por último reiniciamos Nginx.

sudo service nginx restart

y ya tenemos nuestro GitLab funcionando

gitlab

Para empezar a utilizar nuestro GitLab, debemos utilizar nuestro navegador y loguearnos con las claves que hemos indicado en un paso anterior (usuario: admin@local.hots; pass: 5iveL!fe)

Deja un comentario.

Tu dirección de correo no será publicada.


*


*