Gitlab Docker on EC2 - Route53 Alb
온프레미스에 설치된 gitlab omnibus docker 을 AWS 로 아래와 같이 이전하려고 한다.
- 온 프레이미스 구성
┌──on premise ──┐
│ │
│ ┌──Srv ──┐ │
Developer ── https ─┼──┤ Gitlab │ │
│ └───┬────┘ │
│ │ │
│ SSL cert │
└───────────────┘
- AWS Cloud 이전 이후
┌──────────── AWS ───────────────┐
│ Route53 │
│ │ │
│ │ ┌──EC2───┐ │
Developer ── https ─┼─── ELB ────http────┤ Gitlab │ │
│ │ └────────┘ │
│ │ │
│ Certificate Manager │
└────────────────────────────────┘
gitlab omnibus docker 이기때문에 기존 저장소를 그대로 옮긴 후에 실행시키면 Gitlab docker 내부에 nginx 가 설치되어 있어서 이것때문에 https proxy 오류가 발생하였다.
Route53 내 도메인 인증서를 가지고 제어하기 때문에 docker 내부에 있는 nginx에서는 http 통신 가능하게 설정하면 된다. ELB listner 2가지 listner를 추가해야 한다. 아래와 같이 설정하지 않으면 Mix Contents error 가 발생하게 되고, docker 내부의 nginx 환경구성을 아무리 해도 제대로 작동하지 않는다.
Listner | Rules |
---|---|
HTTP:443 | Forward to gitlab-ec2 |
HTTP:80 | Redirect to https://#{host}:443/#{path}?#{query} Status code:HTTP_301 |
- 443 : Developer 는 https 로 접근하게 하고,
forword
을 내부의 EC2 80포트로 gitlab에 전달한다. - 80 : gitlab 에서 http로 오는 것을 developer에게 전달헤기 위해서는
redirect
로 https 로 설정한다.
export GITLAB_HOME=/srv/gitlab
- /srv/gitlab 하위에 config, logs, data 폴더를 만든다. (docker 외부에 볼륨을 마운트 시키키 위한 폴더)
mkdir -p /srv/gitlab/config
mkdir -p /srv/gitlab/logs
mkdir -p /srv/gitlab/data
- gitlab docker-compose 파일을 아래와 같이 구성한다.
version: "3"
services:
gitlab:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: mydomain.com
environment:
TZ: Asia/Seoul
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://mydomain.com'
gitlab_rails['time_zone'] = 'Asia/Seoul'
nginx['listen_https'] = false
nginx['listen_port'] = 80
nginx['proxy_set_headers'] = {
"X-Forwarded-Proto" => "http",
}
ports:
- '80:80'
volumes:
- '$GITLAB_HOME/config:/etc/gitlab'
- '$GITLAB_HOME/logs:/var/log/gitlab'
- '$GITLAB_HOME/data:/var/opt/gitlab'
- docker-compose 실행 후 로그를 확인해 보고 정상 작동하는지 확인해 보자
docker-compose up -d && docker-compose logs -f
plugin 추가
- google oauth 를 연동하기 위해서는 google console 에서 oauth 키를 획득 후에
GITLAB_OMNIBUS_CONFIG
부분에 아래와 같이 추가한다.
version: "3"
services:
gitlab:
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['omniauth_providers'] = [
{
'name' => 'openid_connect',
'label' => 'Google OpenID',
'args' => {
'name' => 'openid_connect',
'scope' => ['openid', 'profile', 'email'],
'response_type' => 'code',
'issuer' => 'https://accounts.google.com',
'client_auth_method' => 'query',
'discovery' => true,
'uid_field' => 'preferred_username',
'client_options' => {
'identifier' => 'xxxxxx.apps.googleusercontent.com',
'secret' => 'xxxxxx',
'redirect_uri' => 'https://mydomain.com/users/auth/openid_connect/callback',
}
}
}
]
- plantuml 를 추가하기 위해서는 아래와 같이 추가한 이후에
https://mydomain.com/admin/application_settings/general
으로 접속 후PlantUML
란에Enable PlantUML
체크 박스 VPlantUML URL
:https://mydomain.com/-/plantuml/
- 이제 README.md 파일 같은 곳에서 다이어그램을 작성하면 된다.
version: "3"
services:
gitlab:
~~~
environment:
GITLAB_OMNIBUS_CONFIG: |
nginx['custom_gitlab_server_config'] = "location /-/plantuml/ { \n proxy_cache off; \n proxy_pass http://plantuml:8080/; \n}\n"
plantuml:
image: 'plantuml/plantuml-server:tomcat'
container_name: plantuml
Read other posts