작업 흐름: A서버에서 필요한 설치 파일(tar RPM 및 PostgreSQL 패키지)을 다운로드 함
폐쇄망에 있는 B서버로 전송(scp 등 활용)하여 설치를 진행합니다.
Step 1. 완벽한 집 지어주기 (계정 및 환경 준비)
DB를 구동할 전용 계정인 postgres 유저를 꼼꼼하게 생성하는 것이 첫걸음입니다.
rpm을 설치하게 되면 user / group은 자동으로 생성되지만
바이너리 설치는 user까지 생성해 줘야합니다.
단순히 이름만 만드는 것이 아니라,
작업에 필요한 집(홈 디렉터리)과 도구(쉘),
그리고 권한까지 완벽하게 세팅합니다.
# 1. 홈 디렉터리와 bash 쉘을 포함하여 유저 생성
sudo useradd -m -s /bin/bash postgres
# 2. 비밀번호 설정
sudo passwd postgres
# 3. 설치 과정에서 필요한 관리자 권한(sudo) 부여를 위해 wheel 그룹 추가
sudo usermod -aG wheel postgres
🚨 [루디쿡의 실전 팁] tar 명령어가 없다면?! PG 17 binary는 어디서 다운로드?? 폐쇄망의 최소 설치(Minimal) OS 환경에서는 압축을 풀 tar 명령어조차 없는 비상 상황이 발생합니다! 당황하지 말고 외부(인터넷 가능 서버)에서 tar RPM 패키지를 받아온 뒤, 아래 명령어로 전송해 줍니다.
아래 명령어는 A 서버 (인터넷이 되는 서버에서 실행하세요!! )
#A서버에서 tar 패키지 다운로드 (저장위치 : /tmp)
sudo dnf download --resolve tar --destdir=/tmp
#B서버로 tar를 전송 (저장위치 : /tmp)
sudo scp /tmp/tar-*.rpm root@172.19.240.10:/tmp/
#percona pg 17 다운로드 (저장위치 /tmp)
wget -P /tmp https://downloads.percona.com/downloads/postgresql-distribution-17/17.9/binary/tarball/percona-postgresql-17.9-ssl3-linux-x86_64.tar.gz
#percona pg 17 전송 (저장위치 : /tmp)
scp /tmp/percona-postgresql-*.gz root@172.19.240.10:/tmp/
#A서버에서 tar 패키지 다운로드 (저장위치 : /tmp)
#B서버로 tar를 전송 (저장위치 : /tmp)
#percona pg 17 다운로드 (저장위치 /tmp)
#percona pg 17 전송 (저장위치 : /tmp)
# B서버저장위치 전송 확인
Step 2. 바이너리 배포 및 환경 변수 설정
준비된 postgres 계정으로 접속하여, 우리가 원하는 경로에 다운로드한 Percona 패키지의 압축을 풀어줍니다.
# pg가 설치될 디렉토리 생성 (권한은 최소한을 유지하며 설치함)
mkdir -p /opt/myCompany/postgres
chwon -R postgres:postgres /opt/myCompany/postgres
#(이렇게하여 /opt/myCompany까지는 root의 권한이며 postgres디렉토리만 postgres의 권한을 가져감)
# postgres 유저로 전환
su - postgres
# 지정된 설치 경로로 이동 후 압축 해제 (--strip-components=1 로 껍데기 폴더 날리기)
cd /opt/myCompany/postgres
sudo chown postgres:postgres /tmp/percona-postgresql-17.9*.gz
tar xfz /tmp/percona-postgresql-17.9-ssl3-linux-x86_64.tar.gz --strip-components=1
압축을 풀었다고 끝이 아닙니다!
리눅스 시스템이 새로 깐
DB 엔진과 라이브러리를 인식할 수 있도록
환경 변수 파일(env.sh)을 만들어 줍니다.
# vi /opt/myCompany/postgres/env.sh 파일 생성 후 아래 내용 입력
export PGHOME=/opt/myCompany/postgres/percona-postgresql17
export PGDATA=$PGHOME/data
export PGLOG=$PGHOME/logs
export PATH=$PGHOME/bin:$PATH
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
작성 후 적용하기: source /opt/myCompany/postgres/env.sh
#환경 변수 로드 (1회성)
source /opt/myCompany/postgres/env.sh
#환경 변수 저장 (OS가 부팅되고 postgres 사용자 백그라운드 프로세스를 시작할 때 bash_profile의 source 이하 음절을 시작함)
echo "source /opt/myCompany/postgres/env.sh" >> /home/postgres/.bash_profile
#디렉토리 생성
mkdir -p $PGDATA $PGLOG
Step 3. 데이터베이스 초기화 (initdb) 및 기동
엔진 준비가 끝났으니, 이제 데이터가 담길 진짜 그릇(Cluster)을 만들어 줄 차례입니다.
# 데이터베이스 초기화 (UTF-8 인코딩 및 정렬 규칙 C 설정)
initdb -D $PGDATA --encoding=UTF8 --locale=C
# 백그라운드로 PostgreSQL 서버 기동!
pg_ctl -D $PGDATA -l $PGLOG/postgresql.log start
#PostgresSQL 실행 확인!
pg_ctl -D $PGDATA status
#psql 접속하기
psql