Database/PostgreSQL

RockyLinux에서 PostgreSQL 서버 외부 접속 허용하기

MORAN9 2024. 4. 15. 18:05
반응형

[ 작업 환경 ]

- Docker Container

- Rockylinux:9.2

- PostgreSQL 15 Server

+ 같은 계열인 CentOS의 경우도 비슷할 듯 합니다.

 


 

postgresql.conf 파일 수정

# 루트(/) 경로에서 이름(-name)이 postgresql.conf인 파일을 찾아보는 명령어
[root@0c6f22bdea32 etc]$ find / -name postgresql.conf
/var/lib/pgsql/15/data/postgresql.conf

우선 find 명령어로 postgresql.conf 파일이 어디있는지 찾아봅시다.

 

postgres=# show data_directory;
     data_directory     
------------------------
 /var/lib/pgsql/15/data
(1 row)

PostgreSQL에서 찾아보고 싶으시다면 위 명령어를 통해 해당 파일이 위치한 폴더를 찾으실 수 있습니다.

 

vi /var/lib/pgsql/15/data/postgresql.conf

아무튼 수정하러 들어갑니다. 저는 vi로 열기는 했지만, 꼭 터미널 창에서 vi나 nano로 작성하실 필요는 없고, 입문자 분들은 뭐라도 열기만하셔서 저장만 잘하시면 됩니다. GUI 리눅스의 경우, 탐색기에서 경로 따라가셔서 메모장과 비슷한 프로그램으로라도 잘 저장하시면 될 것 같습니다.

 

postgresql.conf 파일 내부에 listen_addresses = '*'; 를 추가한 내용

# 서버가 보유한 IP 중 아무거나 하나를 host로 입력할 시 접속 허용.
listen_addresses = '*';

# 보유한 IP가 여러개일 경우 그 중 특정 IP로만 접속이 가능하게 함.
# 수동으로 IP 여럿 할당하신 분들께는 도움이 되실 듯 합니다.
listen_addresses = '172.18.0.3'

# Docker Container: 굳이 이렇게 할 이유는 없는데, 이게 되네요..
# PostgreSQL 컨테이너명이 psqlContainer인 경우.
listen_addresses = 'psqlContainer';

위와 같이 listen_addresses = "*" 부분을 새로 작성해넣습니다. 어디에 있어도 인식이 되겠지만, 가급적 주석처리된 listen_addresses 앞이나 뒤에 입력하시는게, 정리의 차원에서 좋습니다.

 


 

 

pg_hba.conf 파일 수정

# 루트(/) 경로에서 이름(-name)이 pg_hba.conf인 파일을 찾아보는 명령어
[root@0c6f22bdea32 etc]$ find / -name pg_hba.conf
/var/lib/pgsql/15/data/pg_hba.conf

이번엔 pg_hba.conf를 찾아봅시다.

 

postgres=# show data_directory;
     data_directory     
------------------------
 /var/lib/pgsql/15/data
(1 row)

마찬가지로 PostgreSQL에서 찾아보고 싶으시다면 위 명령어를 통해 해당 파일이 위치한 폴더를 찾으실 수 있습니다.

 

vi /var/lib/pgsql/15/data/pg_hba.conf

수정해봅시다. 굳이 vi를 쓰실 필요는 없습니다. 수정만 가능하시다면 nano, 메모장 등 뭐든 괜찮습니다.

 

pg_hba.conf 파일 내부에 host all all 172.18.0.0/16 md5를 추가한 내용

아래 두 줄 중 하나면 OK

# 특정한 대역대에서 접속을 허용.
host    all             all             172.18.0.0/16           md5

# 모든 IP에서 해당 데이터베이스에 접속 허용
# 보안상 추천하지는 않으나, 연습용으로는 아래 한 줄도 괜찮습니다.
host    all             all             0.0.0.0/0           	md5

 

해당 파일 하단에 접속을 허용할 host와 IP 대역대 등의 정보 한 줄을 위와 같이 추가합니다.

 


 

뭔 소린지 다 모르겠다

진짜 난 다 모르겠고, vi도 nano도 못쓰는데 메모장도 없고 도무지 못하겠다. 연습이나 하고 싶은데, 가는 길이 험난하다.

# 커맨드라인에 한 줄 씩 따로 넣기
echo "listen_addresses = '*';" >> /var/lib/pgsql/15/data/postgresql.conf
echo "host all all 0.0.0.0/0 md5" >> /var/lib/pgsql/15/data/pg_hba.conf

대충 삽시다.. 위 두 줄 중 /var/lib..로 시작하는 경로들만 find로 찾아서 알맞은 경로로 바꿔줍시다. 연습하고 뵙시다..

 


 

PostgreSQL 서비스 재시작

설정 파일을 수정했으니, PostgreSQL 서비스를 재시작합니다.

systemctl stop postgresql-15

# 여기서 에러나면 위 두 파일 수정 내용에서 오타 or IP/대역대가 맞는지 찾아보시기 바랍니다.
systemctl start postgresql-15

 


접속 테스트

PostgreSQL client가 설치되어있는 다른 컴퓨터에서 접속해봅시다.

# psql -h <IP 혹은 도커 컨테이너명> --username=유저명 데이터베이스명
[root@dcb431c0ea25 ~]$ psql -h psqlContainer --username=user my_database
psql (13.14, server 15.6)
WARNING: psql major version 13, server major version 15.
         Some psql features might not work.
Type "help" for help.

my_database=> quit                 # 잘 되네요.

 

반응형