AMI로 생성한 GitLab 내부 PostgreSQL에 연결하기

AMI로 생성한 GitLab 내부 PostgreSQL에 연결하기

Photo by Nam Anh on Unsplash

들어가기

이 글은 AWS, GitLab, PostgreSQL에 대한 기초 지식이 있는 개발자를 대상으로 하고 있습니다.

GitLab CE를 기본 탑제한 AWS AMI를 사용할 경우가 있습니다. 이미 설치된 GitLab이 사용하는 내부 PostgreSQL이 있는데 이를 외부에서 접속해서 사용하는 방법을 알려드리려 합니다.

이 방법은 데이터 안정성과 보안성 측면에서 권장할만한 방법은 아닙니다. 안전한 데이터 저장을 하려면 Amazon RDS 같은 서비스를 이용하는 것을 추천합니다.

사전 준비 사항

AWS 계정에 이미 GitLab Server CE Community Edition on Ubuntu Server 20.04-XXX AMI로 EC2 인스턴스를 기동한 상태라고 가정하겠습니다.

또한, 해당 EC2 인스턴스에 Session Manager나 SSH Client로 연결할 수 있는 준비가 되어 있어야 합니다.

이후 진행되는 모든 명령어는 수퍼유저 권한 sudo su - 으로 진행하세요.

PostgreSQL 접속에 필요한 Ubuntu 패키지 설치하기

PostgreSQL 서버에 접속하려면 몇 가지 패키지를 설치해야 합니다.

# apt install postgresql-client-common
# apt install postgresql-client

GitLab 설정 변경하기

GitLab Server CE Community Edition on Ubuntu Server 20.04 로 EC2 인스턴스를 기동하면 PostgreSQL이 서비스 형태로 기동되어 있지 않습니다. 네트워크 접속을 통해 PostgreSQL에 접속하기 위해 서비스로 기동되도록 gitlab.rb 파일을 수정해야 합니다.

# vi /etc/gitlab/gitlab.rb

아래 부분을 찾아서 주석을 해제한 뒤 속성을 변경하세요.

1348  postgresql['enable'] = true
1349  postgresql['listen_address'] = '0.0.0.0'
1350  postgresql['port'] = 5432
...
1371  postgresql['username'] = "gitlab-psql"
1372  postgresql['group'] = "gitlab-psql"
...
1374  postgresql['sql_user_password'] = 'gitlab-psql'
...
1382  postgresql['md5_auth_cidr_addresses'] = %w()
1383  postgresql['trust_auth_cidr_addresses'] = %w(0.0.0.0/0)

PostgreSQL 부분에도 네트워크를 통해 접속할 수 있도록 설정을 변경합니다.

# vi /var/opt/gitlab/postgresql/data/postgresql.conf

postgresql.conf 파일의 63번째 줄에 있는 속성을 아래와 같이 수정합니다.

...
63  listen_address = '*'
...

아래 명령어를 이용해 변경한 정보를 반영합니다.

# gitlab-ctl restart postgresql
# gitlab-ctl reconfigure

PostgreSQL에 역할자 추가하기

PostgreSQL에 네트워크로 접속할 수 있는 역할자(role)를 추가합니다. 이 문서에서는 이미 존재하는 postgres 데이터베이스를 사용하려 postgres 역할자를 추가할 예정입니다.

특이하게 GitLab과 함께 설치된 PostgreSQL 같은 경우 postgres 데이터베이스는 있지만 postgres 역할자가 없네요.

# psql -h 127.0.0.1 -p 5432 -d gitlabhq_production -U gitlab-psql
  gitlabhq_production=> SELECT version();
  ...
  PostgreSQL 14.10 on x86_64...
  gitlabhq_production=> \list
  ...
  gitlabhq_production ...
  postgres
  ...
  gitlabhq_proudction=> CREATE ROLE postgres WITH PASSWORD 'postgres';
  gitlabhq_production=> ALTER ROLE postgres WITH SUPERUSER;
  gitlabhq_production=> ALTER ROLE postgres LOGIN;
  gitlabhq_production=> CREATE DATABASE postgres; -- 이미 있으니 생략하세요
  gitlabhq_production=> \q

저는 생성한 postgres 역할자에 수퍼유저 권한을 줬는데 추천하지 않습니다. 여러분은 용도에 맞는 권한만 주도록 설정하세요.

GitLab 설정 반영하기

아래 명령어를 이용해 변경한 정보를 반영합니다.

# gitlab-ctl restart postgresql
# gitlab-ctl reconfigure

PostgreSQL이 5432 포트가 열린 상태로 서비스로 기동되어 있는지 확인합니다.

# ss -tuln
Netid    State    ...     Local Address:Port     Peer Address:port
tcp      LISTEN                 0.0.0.0:5432          0.0.0.0:*

외부에서 연결 확인하기

이후부터 DBeaverBeekeeper Studio 같은 데이터베이스 클라이언트를 이용해 해당 PostgreSQL에 접속되는지 확인해보세요.

이때 클라우드의 네트워크 설정(예를 들어 로드 밸런서나 보안 그룹)이 연결 가능하도록 설정되어 있는지 반드시 확인하세요.

마무리

이 구성 그대로 운영으로 사용하는 것은 절대 추천하지 않습니다. 하지만 GitLab을 사용할 때 잠시 PostgreSQL이 필요할 때 이 방법을 사용하면 빠르게 개발 환경을 구성할 수 있으니 이용해보세요.