GitLab CE를 CentOS 7에 설치하고 Apache를 사용하여 relative URL로 작동

GitLab CE를 CentOS 7에 설치하고 Apache를 사용하여 relative URL로 작동

2022-10-05 last update

5 minutes reading GitLab centos7 아파치
이번에는 GitLab을 사용한 시스템을 구축하기 위한 테스트로서 테스트 서버에 GitLab CE를 설치하고 서브디렉토리에서 운용하는 방법을 기록하고 싶습니다.

아마도 구현 방법이 몇 가지 있고 작업에 번거로운 곳이 있기 때문에, 내가 한 일을 정리하고 싶습니다.

전제



CentOS 7에서 현재 Apache 2.4.6을 사용하여 실행중인 웹 서버 (hoge.com)에 gitlab-ce 11.11.3을 설치합니다.
현재 hoge.com에는 콘텐츠가 다수 있어 DNS에서의 CNAME 등록을 자신의 손으로는 할 수 없으므로 서브디렉토리(/gitlab)로 부를 수 있도록 하고 싶습니다. 즉,
http://www.hoge.com/gitlab

에서 GitLab에 날 수 있도록 하고 싶습니다 (이번은 HTTPS가 아닌 HTTP로 하기로 하겠습니다).
GitLab에서는 기본적으로 nginx를 사용하지만 이번에는 nginx를 Off로 설정하여 Apache에서 실행되도록합니다.

GitLab CE 본체 설치



여기를 참조하여 Community Edition을 설치합니다.
( 공식 installation guide 와 같이 하면 잘못해서 Enterprise Edition을 설치해 버렸습니다.
또, SSH, firewall, postfix의 설정은 이미 실시하고 있었기 때문에 할애합니다.
# curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
# EXTERNAL_URL="http://www.hoge.com/gitlab" yum install -y gitlab-ce 

relative URL에서 사용할 준비



GitLab의 구성 옵션 Docs
참고. (이것은 옵션인 것 같습니다만) 다음을 실행합니다.
# gitlab-ctl stop unicorn
# gitlab-ctl stop sidekiq

또한 External URL은 설치 시 지정했으므로 URL 설정 자체는 OK입니다.

GitLab config 파일 편집



원래 이 서버에는 git이 들어 있고 User 이름이 간섭해 버렸기 때문에 username을 바꿉니다.
그리고 여기에서 nginx를 disable하고 Apache에서 작동하기위한 설정도 함께 씁니다.

/etc/gitlab/gitlab.rb
user['username'] = "gitlab"
user['group'] = "git"

gitlab_workhorse['enable'] = true
gitlab_workhorse['listen_network'] = "tcp"
gitlab_workhorse['listen_umask'] = 000
gitlab_workhorse['listen_addr'] = "127.0.0.1:8181"
gitlab_workhorse['auth_backend'] = "http://localhost:8080"
nginx['enable'] = false

편집이 끝나면 GitLab을 재구성하고 다시 시작합니다.
# gitlab-ctl reconfigure
# gitlab-ctl restart

Apache 설정



GitLab의 Repository에서 Apache 2.4에서 HTTP를 운영하기위한 conf 파일 가 떨어지고 있기 때문에 이것을 이용합니다.
또한 relative URL 용으로 조금 다시 작성합니다.

/etc/httpd/conf.d/gitlab.conf
<VirtualHost *:80>
  ServerName www.hoge.com
  ServerSignature Off

  ProxyPreserveHost On

  AllowEncodedSlashes NoDecode

  <Location /gitlab>
    Require all granted

    ProxyPassReverse http://127.0.0.1:8181
    ProxyPassReverse http://www.hoge.com/gitlab

  RewriteEngine on

  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f [OR]
  RewriteCond %{REQUEST_URI} ^/uploads/.*
  RewriteRule .* http://127.0.0.1:8181%{REQUEST_URI} [P,QSA,NE]

    </Location>
  DocumentRoot /opt/gitlab/embedded/service/gitlab-rails/public

  ErrorDocument 404 /404.html
  ErrorDocument 422 /422.html
  ErrorDocument 500 /500.html
  ErrorDocument 502 /502.html
  ErrorDocument 503 /503.html

  LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common_forwarded

  ErrorLog /var/log/httpd/error.log
  CustomLog /var/log/httpd/forwarded.log common_forwarded
  CustomLog /var/log/httpd/access.log combined env=!dontlog

</VirtualHost>

쓰기가 끝나면 Apache를 다시 시작합니다.
# systemctl restart httpd.service

이제 www.hoge.com/gitlab에 액세스하면 무사히 GitLab을 볼 수 있습니다.