PostgreSQL 설치하기
FreeBSD Wiki를 참고했습니다.
2024년 01월 14일 기준 FreeBSD용 PostgreSQL은 16버전입니다.
#으로 표시된 것은 루트(root) 권한입니다. $으로 표시된 것은 일반 사용자 권한입니다. 필요하다면 sudo 명령을 이용하세요.
설치과정
일단 프로그램을 패키지 매니저로 설치합니다.
$ pkg install postgresql16-server postgresql16-client
필요하다면 위 명령을 실행하기 전에 어떤 패키지가 있는지 먼저 확인해 보는 것이 좋습니다.
$ pkg search postgresql
설치한 후에는 sysrc 명령으로 부팅시 서비스가 시작되도록 설정합니다.
$ sysrc postgresql_enable="YES"
그리고 나서 서비스를 시작합니다.
$ /usr/local/etc/rc.d/postgresql initdb
$ service postgresql start
서비스가 시작되면 5432 포트에서 서비스가 리스닝을 하고 있는지 확인합니다.
$ sockstat -46 | grep 5432
<아래는 그냥 설명입니다>
$ sockstat -4 | grep 5432 -> IPv4만 확인합니다.
$ sockstat -6 | grep 5432 -> IPv6만 확인합니다.
서버와 함께 등록된 posgres 계정의 암호를 설정합니다.
$ sudo passwd postgres
이제 루트 권한으로 데이터베이스 서버에 들어가 테스트 데이터베이스를 만들어 봅니다. 여기서 foo_db는 테스트 데이터베이스의 이름이고 admin은 테스트 데이터베이스를 위해 만든 계정입니다.
# su - postgres (또는 sudo su - postgres라고 쳐서 들어갈 수도 있습니다)
$ createuser admin
$ createdb foo_db -O admin
재미있는 것은 이 $ 상태(psql 화면입니다)에서 한 단계 더 안으로 들어가서 작업을 할 수 있다는 것입니다. 위의 명령을 사용한 후에 exit 명령을 하지 않고 그 상태에서 다시 psql foo_db를 치는 것입니다.
$ psql foo_db
foo_db=# alter role admin with encrypted password 'yourpassword';
foo_db=# grant all privileges on database foo_db to admin;
foo_db=# exit
$ exit
이렇게 하면 foo_db에 대해 admin이라는 계정의 비밀번호를 설정하고, 모든 권한을 부여할 수 있습니다. 이걸 다르게 사용하면 다음 명령으로 데이터베이스를 날릴수도 있다는 것입니다.
$ dropdb foo_db
날렸다 만들었다 몇 차례 해봅니다. 네? 익숙해지면 좋으니까요.
설정과정
Bind 주소 변경
모든 데이터베이스 서버들은 그냥 두면 (설정을 바꾸지 않으면) 언제나 자기 자신만 보고 있습니다. 외부에서 데이터 접속을 허용하려면 bind address를 변경해야 합니다. 다음 명령으로 설정에 접근합니다. 여기서 data16 디렉터리명은 자신의 버전에 맞게 바꾸시면 됩니다.
sudo nano /var/db/postgres/data16/postgresql.conf
들어가 보면 listen_addresses라는 항목이 있는데 여기에 '127.0.0.1/24' 이런 식으로 적혀있을 것입니다. 이걸 다음과 같이 바꾸거나 데이터베이스가 있는 서버의 IP 주소를 넣어줍니다. 물론 앞의 주석(#)도 제거해줍니다.
listen_addresses = '*'
접속위치에 대한 설정 변경
이제 서버가 어느 위치에서 들어오는 접속에 대해 어떻게 대응할지에 대한 설정을 변경해줘야 합니다. 아래 명령으로 구성파일을 수정합니다.
sudo nano /var/db/postgres/data16/pg_hba.conf
파일 내용의 끝 즈음으로 가보면 아래와 같은 부분이 있습니다.
이 부분의 내용을 4번행으로 설명드리면, "local에서 들어오는 모든 사용자(두번째 all)에 대해서 모든 데이터베이스(첫번째 all)의 접속을 믿습니다(trust)!"입니다. 그런데 우리는 믿지 못하겠으니까, trust를 md5 (비밀번호)로 싹 다 바꿔줍니다.
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
다 고치고 나서, 우리가 만든 사용자 admin의 데이터베이스, foo_db에 대한 접속규칙도 추가해 줍니다.
만약 보다 명시적이고 제한된 접속을 허용하고 싶다면 주소 부분의 0.0.0.0/0 (아무데서 접근하든 다 오케이)를 접근할 서버의 IP 주소로 한정하시면 됩니다.
# Allow remote connections to foo_db as admin
host foo_db admin 0.0.0.0/0 md5 -> IPv4 방식입니다
host foo_db admin ::/0 md5 -> IPv6 방식입니다
이제 서버를 재시작합니다.
sudo serivce postgresql restart
작업이 다 끝나셨으면 반드시 접속을 하게 되는 클라이언트 서버에서 PostgreSQL 클라이언트 소프트웨어를 설치하신 후 접속 테스트를 해보시는 것이 좋습니다.
여기서 추가로 말씀드리면, 데이터베이스 서버가 설치되어 있는 컴퓨터에서 잠시 잠시 접속하며 무언가 하고 싶으실때는 md5를 깔끔하게 trust로 변경해서 작업하신 후 원래대로 돌리시면 됩니다. 네 첫줄(4번행)만 고쳐주면 됩니다. 저는 처음 서버 구성할때 종종 하는 방법입니다.
No Comments