LINUX

Cómo instalar GitLab con Nginx (SSL) en Ubuntu 16.04

GitLab es un administrador de repositorios de Git basado en la web similar a Github. Es una herramienta de gestión de repositorios git de código abierto impulsada por Ruby y Rails. Proporciona un paquete .deb que contiene GitLab Community Edition y todas sus dependencias, incluidas Ruby, PostgreSQL, Redis, Nginx, Unicorn y otras gemas ya compiladas.

Ofrece tres versiones diferentes. Una es una versión alojada de GitLab, donde puede registrarse de forma gratuita y puede crear tantos repositorios públicos y privados como desee. es una gran ventaja. El segundo es la ‘GitLab Community Edition’. Puede operar la edición comunitaria en sus propios servidores y no le costará dinero. Brinda la posibilidad de probar e implementar automáticamente su código. Por último, pero no menos importante, está la ‘GitLab Enterprise Edition’. Se basa en la parte superior de la edición comunitaria y agrega algunas características adicionales, está principalmente dirigido a organizaciones con más de 100 usuarios.

En este artículo, explicaré cómo configurar GitLab con Nginx en el servidor Ubuntu. En primer lugar, debe asegurarse de que su servidor cumpla con los requisitos básicos del sistema.

Prerrequisitos

Es compatible con casi todos los sistemas operativos Unix. Consulte los requisitos mínimos del sistema para esta instalación a continuación:

  • Requiere Ruby (MRI) 2.1 como mínimo.
  • Capacidades mínimas de hardware con CPU de 2 núcleos y memoria de 2 GB
  • Tres trabajadores unicornio (1+ Número de núcleos de CPU)

Repasemos los pasos de instalación uno por uno.

1. Actualización de los paquetes del repositorio de APT

En primer lugar, debemos asegurarnos de que su servidor esté ejecutando los últimos paquetes de software y estén actualizados.

root@linoxide:~# apt-get update

Get:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [94.5 kB]
Hit:2 http://nyc2.mirrors.digitalocean.com/ubuntu xenial InRelease
Get:3 http://nyc2.mirrors.digitalocean.com/ubuntu xenial-updates InRelease [95.7 kB]
Get:4 http://nyc2.mirrors.digitalocean.com/ubuntu xenial-backports InRelease [92.2 kB]
Get:5 http://nyc2.mirrors.digitalocean.com/ubuntu xenial-updates/universe amd64 Packages [357 kB]
Get:6 http://nyc2.mirrors.digitalocean.com/ubuntu xenial-updates/universe i386 Packages [354 kB]
Fetched 993 kB in 1s (748 kB/s)
Reading package lists... Done

root@linoxide:~# apt-get upgrade

2. Cree un usuario de Git

El siguiente paso es crear un usuario de git para administrar los repositorios de git en GitLab.

root@linoxide:~# adduser --disabled-login --gecos 'GitLab' git
Adding user `git' ...
Adding new group `git' (1000) ...
Adding new user `git' (1000) with group `git' ...
Creating home directory `/home/git' ...
Copying files from `/etc/skel' ...
root@linoxide-gitlab:~#

3. Instalación de paquetes de dependencia de GitLab

Como se mencionó anteriormente, GitLab requiere un mínimo de Ruby 2, versión x o superior. Necesitamos instalar varios paquetes de dependencia y herramientas de desarrollo para instalar ese software requerido para GitLab.

root@linoxide-gitlab:~#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 logrotate

4. Instalación de Git

Podemos instalar paquetes de Git desde sus repositorios simplemente ejecutando este comando.

root@linoxide:~# apt-get install git

5. Configurar un servidor de correo

Para recibir las notificaciones por correo electrónico sobre nuestros proyectos Git, necesitamos configurar un servidor de correo electrónico. Actualmente estoy usando PostFix para configurar mi servidor de correo. Puede instalar Postfix utilizando este único comando.

root@linoxide~# apt-get install postfix

Durante las etapas de instalación, puede seleccionar «Sitio de Internet» e ingresar el nombre de host de su servidor FQDN para completar la instalación.

6. Cómo instalar / configurar Ruby

GitLab es una aplicación basada puramente en Ruby on Rails. Tiene un administrador de versiones que puede evitar presionar y detener SSH. Recomienda una versión de Ruby superior a 2.x.

root@linoxide:~# mkdir /tmp/ruby && cd /tmp/ruby
root@linoxide:/tmp/ruby# wget http://ftp.ruby-lang.org/pub/ruby/2.1/ruby-2.1.2.tar.gz
root@linoxide-:/tmp/ruby# tar xvzf ruby-2.1.2.tar.gz
root@linoxide:/tmp/ruby# cd ruby-2.1.2
root@linoxide-:/tmp/ruby/ruby-2.1.2# ./configure --disable-install-rdoc --prefix=/usr/local
root@linoxide:/tmp/ruby/ruby-2.1.2# make
root@linoxide:/tmp/ruby/ruby-2.1.2# make install

Puede descargar la versión de Ruby compatible y compilarla como se indica arriba. Puede confirmar la versión de Ruby una vez instalada.

root@linoxide:/tmp/ruby/ruby-2.1.2# ruby -v
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]

7. Administrar el servidor de la base de datos para GitLab

Nuestro siguiente paso es crear una base de datos para el laboratorio de Git. Estoy usando una base de datos PostgreSQL para administrar mis paquetes Git. Es compatible con MySQL y PostgreSQL, pero se recomienda PostgreSQL sobre MySQL. Puede instalarlo con todos los módulos necesarios como se muestra a continuación:

root@linoxide:~# apt-get install postgresql postgresql-client libpq-dev

Necesitamos crear una base de datos para Gitlab. He creado una nueva base de datos llamada «gitlabhq_production» con un usuario «git» para administrarla.

root@linoxide:~# su - postgres
postgres@linoxide:~$ postgres createuser --createdb git
postgres@linoxide:~$ createdb --owner=git gitlabhq_production

Finalmente, puede confirmar la conectividad de la base de datos con el nuevo usuario y el nombre de la base de datos para verificar la versión de PostgreSQL usando los siguientes comandos:

root@linoxide:~# sudo -u git -H psql -d gitlabhq_production -c "SELECT VERSION()"
version
-----------------------------------------------------------------------------------------------------------------
PostgreSQL 9.5.5 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 5.4.0-6ubuntu1~16.04.2) 5.4.0 20160609, 64-bit
(1 row)

Si el comando da como resultado la versión de PostgreSQL, entonces está listo para comenzar.

8) Instalación de GitLab

Ahora estamos listos para comenzar con la instalación. Puede descargar el repositorio estable de GitLab desde su sitio oficial. repositorio sitio. Lo descargué e instalé en mi directorio de inicio de git.

root@linoxide:~# cd /home/git
root@linoxide-gitlab:/home/git# sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 6-9-stable gitlab
Cloning into 'gitlab'...
remote: Counting objects: 392871, done.
remote: Compressing objects: 100% (101153/101153), done.
remote: Total 392871 (delta 309481), reused 367895 (delta 286998)
Receiving objects: 100% (392871/392871), 184.55 MiB | 38.25 MiB/s, done.
Resolving deltas: 100% (309481/309481), done.
Checking connectivity... done.

Puede seleccionar cualquier rama de repositorio estable desde allí. Aquí, descargué la rama 6-9 estable del repositorio de GitLab. Lo importante a tener en cuenta es que nunca debemos instalar la rama Master en un servidor de producción.

9) Configurar GitLab

Vaya a su directorio de inicio de git y copie el archivo de configuración de muestra de GitLab para usarlo como el archivo de configuración principal «gitlab.yml».

root@linoxide:/home/git/gitlab# sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml

Necesita modificar el host a un dominio completamente calificado de su servidor. Además, establezca email_from y support_email en las direcciones de correo electrónico preferidas para GitLab en el archivo de configuración.

root@linoxide-gitlab:/home/git/gitlab#cat /home/git/gitlab/config/gitlab.yml
production: &base
gitlab:
host: nodenixbox.com 
port: 80
https: false
email_from: gitlab@nodenixbox.com
support_email: support@nodenixbox.com

A continuación, debemos corregir las propiedades y los permisos de las carpetas para que funcionen según sea necesario. Ciertos archivos / carpetas necesitan permisos de escritura para que GitLab pueda escribir en ellos cuando sea necesario.

root@linoxide:/home/git/gitlab# chown -R git {log,tmp}
root@linoxide:/home/git/gitlab# chmod -R u+rwX {log,tmp,tmp/pids,tmp/sockets,public/uploads}

Cree las carpetas Satellite y copie los ejemplos de las configuraciones de ataque de unicornio y Rack:

root@linoxide:/home/git/gitlab# sudo -u git -H mkdir /home/git/gitlab-satellites
root@linoxide:/home/git/gitlab# sudo chmod u+rwx,g+rx,o-rwx /home/git/gitlab-satellites

root@linoxide:/home/git/gitlab# sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb
root@linoxide:/home/git/gitlab# sudo -u git -H cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb

10) Configuración de la base de datos

El siguiente paso es configurar la base de datos, tenemos que usar PostgreSQL para nuestra base de datos. Necesitamos copiar el archivo de configuración y cambiar los permisos para que sea legible en git:

root@linoxide:/home/git/gitlab# sudo -u git cp config/database.yml.postgresql config/database.yml
root@linoxide:/home/git/gitlab# sudo -u git -H chmod o-rwx config/database.yml

11) Instalación de gemas

root@linoxide:/home/git/gitlab# sudo gem install bundler
Fetching: bundler-1.13.6.gem (100%)
Successfully installed bundler-1.13.6
Parsing documentation for bundler-1.13.6
Installing ri documentation for bundler-1.13.6
Done installing documentation for bundler after 7 seconds
1 gem installed
root@linoxide-gitlab:/home/git/gitlab# sudo -u git -H bundle install --deployment --without development test mysql aws

12) Instalar el shell de GitLab

Puede instalar el shell de GitLab, que es un software de administración de repositorios y acceso SSH para GitLab.

root@linoxide:/home/git/gitlab# sudo -u git -H bundle exec rake gitlab:shell:install[v1.9.4] REDIS_URL=redis://localhost:6379 RAILS_ENV=production

git clone 'https://gitlab.com/gitlab-org/gitlab-shell.git' '/home/git/gitlab-shell/'
Cloning into '/home/git/gitlab-shell'...
remote: Counting objects: 3207, done.
remote: Compressing objects: 100% (1203/1203), done.
remote: Total 3207 (delta 2043), reused 3013 (delta 1885)
Receiving objects: 100% (3207/3207), 481.86 KiB | 0 bytes/s, done.
Resolving deltas: 100% (2043/2043), done.
Checking connectivity... done.

Ahora necesitamos editar el archivo de configuración de shell de gitlab con la URL exacta de gitlab.

root@linoxide:/home/git/gitlab# cat /home/git/gitlab-shell/config.yml
---
user: git
gitlab_url: http://nodenixbox.com/
http_settings:
self_signed_cert: false
repos_path: "/home/git/repositories/"
auth_file: "/home/git/.ssh/authorized_keys"
redis:
bin: "/usr/bin/redis-cli"
host: localhost
port: 6379
namespace: resque:gitlab
log_level: INFO
audit_usernames: false

13) Inicializar la base de datos y activar GitLab

Ahora, regrese a su directorio de inicio de GitLab y ejecute este comando.

root@linoxide-:/home/git/gitlab# sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production

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)? Do you want to continue (yes/no)? yes

Adding limits to schema.rb for mysql

== Seed from /home/git/gitlab/db/fixtures/production/001_admin.rb
2016-11-09T06:04:38Z 17990 TID-gtc2554j8 INFO: Sidekiq client with redis options {:url=>"redis://localhost:6379", :namespace=>"resque:gitlab"}

Administrator account created:

login.........admin@local.host
password......******

Puede utilizar estas credenciales de inicio de sesión de administrador para acceder a su interfaz de GitLab.

14) Configurar el script de inicio

Podemos copiar GitLab init desde el directorio de instalación de GitLab y agregar GitLab para que se inicie en el momento del arranque con el comando update-rc.d:

root@linoxide-:/home/git/gitlab# cp lib/support/init.d/gitlab /etc/init.d/gitlab
root@linoxide-:/home/git/gitlab# update-rc.d gitlab defaults 21

En segundo lugar, copie la configuración de logrotate de GitLab para la gestión de registros.

root@linoxide-gitlab:/home/git/gitlab# cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab

Y finalmente, verifique el estado de la aplicación y compile los activos, configure los ajustes globales de Git para el usuario de git e inicie el servicio GitLab si todo parece estar bien.

root@linoxide-:/home/git/gitlab# sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production

System information
System: Ubuntu 16.04
Current User: git
Using RVM: no
Ruby Version: 2.1.2p95
Gem Version: 2.2.2
Bundler Version:1.13.6
Rake Version: 10.3.1
Sidekiq Version:2.17.0

GitLab information
Version: 6.9.2
Revision: e46b644
Directory: /home/git/gitlab
DB Adapter: postgresql
URL: http://nodenixbox.com
HTTP Clone URL: http://nodenixbox.com/some-project.git
SSH Clone URL: git@nodenixbox.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/git

Compile status :
root@linoxide-gitlab:/home/git/gitlab# sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production

Configure Git global settings:
root@linoxide-gitlab:/home/git/gitlab# sudo -u git -H git config --global user.name "GitLab"
root@linoxide-gitlab:/home/git/gitlab# sudo -u git -H git config --global user.email "gitlab@nodenixbox.com"
root@linoxide-gitlab:/home/git/gitlab# sudo -u git -H git config --global core.autocrlf input

Service start:

root@linoxide-gitlab:/home/git/gitlab# service gitlab start
root@linoxide-gitlab:/home/git/gitlab#
root@linoxide-gitlab:/home/git/gitlab# service gitlab status
● gitlab.service - LSB: GitLab git repository management
Loaded: loaded (/etc/init.d/gitlab; bad; vendor preset: enabled)
and running.
Nov 09 06:13:23 linoxide-gitlab systemd[1]: Started LSB: GitLab git repository management.

15) Instalar y configurar Nginx

Nginx es el único servidor web compatible con GitLab. Aquí estamos usando Nginx para manejar las solicitudes del navegador. Podemos instalar Nginx con el siguiente comando:

root@linoxide-:/home/git/gitlab# apt-get install nginx -y

Ahora podemos copiar la configuración del host virtual Nginx del directorio de GitLab y eliminar el host virtual predeterminado de Nginx y reiniciar el servicio Nginx.

root@linoxide-:/home/git/gitlab# cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab
root@linoxide:/home/git/gitlab# rm -f /etc/nginx/sites-enabled/default

Asegúrese de editar el nombre del servidor con el dominio de GitLab. Cree un enlace simbólico para activar el host virtual de GitLab y reinicie el servicio Nginx.

root@linoxide:/home/git/gitlab# ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab
root@linoxide:/home/git/gitlab# service nginx restart

16) Asegurar GitLab

Para proteger GitLab, podemos instalar SSL para el dominio GitLab y habilitar SSL para el host virtual Nginx. Instalé SSL para mi dominio de GitLab nodenixbox.com usando letsencrypt y lo agregué al host virtual.

root@linoxide:~/letsencrypt# ./letsencrypt-auto certonly --standalone --email <your email> --agree-tos -d nodenixbox.com

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/nodenixbox.com/fullchain.pem. Your cert will
expire on 2017-02-07. To obtain a new or tweaked version of this
certificate in the future, simply run letsencrypt-auto again. To
non-interactively renew *all* of your certificates, run
"letsencrypt-auto renew"
- If you lose your account credentials, you can recover through
e-mails sent to youremail@gmail.com.
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

Agregué este SSL generado a mi host virtual de GitLab. Asi es como luce ahora.

root@linoxide:~# cat /etc/nginx/sites-enabled/gitlab
# GITLAB
# Maintainer: @randx

# CHUNKED TRANSFER
# It is a known issue that Git-over-HTTP requires chunked transfer encoding [0] which is not
# supported by Nginx < 1.3.9 [1]. As a result, pushing a large object with Git (i.e. a single large file)
# can lead to a 411 error. In theory you can get around this by tweaking this configuration file and either
# - installing an old version of Nginx with the chunkin module [2] compiled in, or
# - using a newer version of Nginx.
#
# At the time of writing we do not know if either of these theoretical solutions works. As a workaround
# users can use Git over SSH to push large files.
#
# [0] https://git.kernel.org/cgit/git/git.git/tree/Documentation/technical/http-protocol.txt#n99
# [1] https://github.com/agentzh/chunkin-nginx-module#status
# [2] https://github.com/agentzh/chunkin-nginx-module

upstream gitlab {
server unix:/home/git/gitlab/tmp/sockets/gitlab.socket;
}

server {
listen *:80 default_server; # e.g., listen 192.168.1.1:80; In most cases *:80 is a good idea
server_name nodenixbox.com; # e.g., server_name source.example.com;
}
server {
listen 443 ssl;
server_name nodenixbox.com;

ssl_certificate /etc/letsencrypt/live/nodenixbox.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/nodenixbox.com/privkey.pem;
server_tokens off; # don't show the version number, a security best practice
root /home/git/gitlab/public;

# Increase this if you want to upload large attachments
# Or if you want to accept large git objects over http
client_max_body_size 20m;

# individual nginx logs for this gitlab vhost
access_log /var/log/nginx/gitlab_access.log;
error_log /var/log/nginx/gitlab_error.log;

location / {
# serve static files from defined root folder;.
# @gitlab is a named location for the upstream fallback, see below
try_files $uri $uri/index.html $uri.html @gitlab;
}

# if a file, which is not found in the root folder is requested,
# then the proxy pass the request to the upsteam (gitlab unicorn)
location @gitlab {
# If you use https make sure you disable gzip compression
# to be safe against BREACH attack
# gzip off;

proxy_read_timeout 300; # Some requests take more than 30 seconds.
proxy_connect_timeout 300; # Some requests take more than 30 seconds.
proxy_redirect off;

proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_pass http://gitlab;
}

# Enable gzip compression as per rails guide: http://guides.rubyonrails.org/asset_pipeline.html#gzip-compression
# WARNING: If you are using relative urls do remove the block below
# See config/application.rb under "Relative url support" for the list of
# other files that need to be changed for relative url support
location ~ ^/(assets)/ {
root /home/git/gitlab/public;
gzip_static on; # to serve pre-gzipped version
expires max;
add_header Cache-Control public;
}

error_page 502 /502.html;

Después de realizar estos cambios, reinicie los servicios de GitLab y Nginx.

17) Acceder a GitLab a través del navegador

Finalmente, estamos listos para acceder a nuestra interfaz de GitLab a través de un navegador. Antes de iniciarlo, verifique dos veces el estado de la aplicación GitLab para confirmar que todo va bien.

root@linoxide:/home/git# cd gitlab
oot@linoxide:/home/git/gitlab#sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production

Si todo está bien, puede acceder a su aplicación GitLab llamando a la URL >> https: // GitLAB-domain-name. En mi caso, lo he instalado en https://nodenixbox.com. Puede acceder a él utilizando las credenciales de administrador creadas durante la instalación, usuario:

iniciar sesión ……… admin@local.host o root
contraseña……******

Página de inicio de sesión de Gitlab

Puede restablecer su contraseña a la deseada al iniciar sesión. Comencemos a construir nuestros proyectos git 🙂

Panel de GitLab

Conclusión

GitLab es una de las mejores soluciones para comenzar a construir su propio servidor de repositorio Git. Es muy fácil de instalar y configurar y podemos administrarlo de manera eficiente utilizando su excelente interfaz. Esto es utilizado por más de 100.000 empresas de tecnología. Además, es un software poderoso que ayuda a los desarrolladores a crear aplicaciones junto con otros desarrolladores. Espero que hayas disfrutado leyendo este artículo. Publique sus valiosos comentarios y sugerencias al respecto.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar