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……******
Puede restablecer su contraseña a la deseada al iniciar sesión. Comencemos a construir nuestros proyectos git 🙂
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.