Install Gitlab with Nginx(not bundle) on Ubuntu 18.04

의존 패키지 설치

sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates tzdata perl

gitlab-ee package repository 추가

gitlab의 최신 버전을 설치하기 위해 repository를 추가합니다.

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash

Gitlab Enterprise Edition 설치

Gitlab Enterprise 버전을 설치합니다. Community 버전은 gitlab-ce입니다.

sudo apt-get update
sudo EXTERNAL_URL="https://gitlab.example.com" apt-get install gitlab-ee

gitlab.rb 설정

설치가 정상적으로 완료되면 gitlab.rb 설정을합니다. bundle nginx가 아닌 로컬에서 사용중인 nginx를 사용하기 위한 설정이 포함되어 있습니다. 몇몇 설정은 필요 없을 수도 있는데 저는 이 상태로 사용중입니다.

external_url 'https://gitlab.example.com'
gitlab_rails['internal_api_url'] = 'https://gitlab.example.com'
gitlab_rails['trusted_proxies'] = [ '127.0.0.1', '192.168.1.0/24', '192.168.2.1', '2001:0db8::/32' ]
puma['enable'] = true
web_server['external_users'] = ['www-data']
nginx['enable'] = false
letsencrypt['enable'] = false

nginx configuration without SSL

nginx config 설정입니다. SSL을 사용하지 않는 경우 아래와 같이 설정합니다. 저는 메인 도메인은 wordpress로 사용중이기 때문에 서브 도메인을 연결했습니다. gitlab.example.com 부분을 본인 환경에 맞게 설정하면 됩니다.

upstream gitlab-workhorse {
  server unix://var/opt/gitlab/gitlab-workhorse/sockets/socket fail_timeout=0;
}

## Normal HTTP host
server {
  server_name gitlab.example.com; ## Replace this with something like gitlab.example.com
  server_tokens off; ## Don't show the nginx version number, a security best practice
  root /opt/gitlab/embedded/service/gitlab-rails/public;

  ## See app/controllers/application_controller.rb for headers set

  ## Individual nginx logs for this GitLab vhost
  access_log  /var/log/nginx/gitlab_access.log;
  error_log   /var/log/nginx/gitlab_error.log;

  location / {
    client_max_body_size 0;
    gzip off;

    ## https://github.com/gitlabhq/gitlabhq/issues/694
    ## Some requests take more than 30 seconds.
    proxy_read_timeout      300;
    proxy_connect_timeout   300;
    proxy_redirect          off;

    proxy_http_version 1.1;

    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_set_header    X-Forwarded-Proto   $scheme;

    proxy_pass http://gitlab-workhorse;
  }

 }

Nginx Configuration with SSL

https를 사용하기 위한 SSL 설정입니다. 저는 certbot으로 인증 처리를 했기 때문에 자동으로 인증키 설정이 됐습니다. 아래 내용은 참고만 하시면 될 것 같습니다.

upstream gitlab-workhorse {
  server unix://var/opt/gitlab/gitlab-workhorse/sockets/socket fail_timeout=0;
}

## Normal HTTP host
server {
  server_name gitlab.example.com; ## Replace this with something like gitlab.example.com
  server_tokens off; ## Don't show the nginx version number, a security best practice
  root /opt/gitlab/embedded/service/gitlab-rails/public;

  ## See app/controllers/application_controller.rb for headers set

  ## Individual nginx logs for this GitLab vhost
  access_log  /var/log/nginx/gitlab_access.log;
  error_log   /var/log/nginx/gitlab_error.log;

  location / {
    client_max_body_size 0;
    gzip off;

    ## https://github.com/gitlabhq/gitlabhq/issues/694
    ## Some requests take more than 30 seconds.
    proxy_read_timeout      300;
    proxy_connect_timeout   300;
    proxy_redirect          off;

    proxy_http_version 1.1;

    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_set_header    X-Forwarded-Proto   $scheme;

    proxy_pass http://gitlab-workhorse;
  }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/gitlab.example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/gitlab.example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

server {
    if ($host = gitlab.example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

  listen *:80;
  server_name gitlab.example.com;
    return 404; # managed by Certbot


}

gitlab reconfigure

설정 변경 후 아래와 같이 reconfigure 명령으로 설정을 적용합니다.

sudo gitlab-ctl reconfigure

root 계정 비밀번호

설치 후 초기 root 계정의 password는 아래 위치에 있습니다. 해당 파일을 보면 password를 알 수 있으니 이 패스워드를 이용해서 root 계정에 로그인 후 password를 변경하면 됩니다.

/etc/gitlab/initial_root_password

정리

Gitlab은 개인 용도로만 사용하다보니 자주 안 쓰게 되는데 어쩌다 한 번 사용하려고 할 때마다 설정에 애를 먹게 되네요. 요즘엔 Docker를 사용하면 금방 설정이 되는데 운영하고 있는 서버에 로컬로 설치하려다 보니 항상 nginx 설정에서 문제가 발생했습니다.

이번에도 여지없이 nginx 설정에서 문제가 발생해서 snippets나, Web IDE에서 소스코드가 안 보이는 증상들이 나타났었네요. 다행히 configuration 설정 수정으로 문제를 해결했습니다.

Gitlab은 잘 접속 되는데 RAW 소스 코드 보기나 Web IDE에서 소스가 안 보이는 증상이 있으면 nginx 설정을 정확히 하셔야 합니다.

참고

  • https://about.gitlab.com/install/#ubuntu
  • https://rottk.tistory.com/entry/DevTool-Gitlab-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%84%A4%EC%A0%95-Ubuntu-2004

Leave a Reply