1. Ubuntu 인스턴스에 CentOS 도커 컨테이너 설치

설치 환경

  • NHN Cloud
  • Ubuntu 20.04 LTS
  • Docker 23.0.1
  • CentOS 7.9

 

Workflow

  1. 설치하려는 패키지가 이미 설치되어 있는지 체크 후 다운로드
  2. Docker 공식 GPG 키 추가
  3. Docker 레포지토리 등록
  4. apt-get 업데이트
  5. Docker 설치
  6. 그룹에 사용자 추가
  7. CentOS 7 컨테이너 실행

 

설치 스크립트

#!/usr/bin/env bash

# curl 이미 설치되어 있는지 체크
if ! command -v curl &> /dev/null
then
    sudo apt-get update
    sudo apt-get install -y curl
fi

# apt-transport-https 이미 설치되어 있는지 체크
if ! dpkg -s apt-transport-https &> /dev/null
then
    sudo apt-get update
    sudo apt-get install -y apt-transport-https
fi

# ca-certificates 이미 설치되어 있는지 체크
if ! dpkg -s ca-certificates &> /dev/null
then
    sudo apt-get update
    sudo apt-get install -y ca-certificates
fi

# gnupg-agent 이미 설치되어 있는지 체크
if ! dpkg -s gnupg-agent &> /dev/null
then
    sudo apt-get update
    sudo apt-get install -y gnupg-agent
fi

# software-properties-common 이미 설치되어 있는지 체크
if ! dpkg -s software-properties-common &> /dev/null
then
    sudo apt-get update
    sudo apt-get install -y software-properties-common
fi

# Docker 공식 GPG key 이미 추가되어 있는지 체크
if ! curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key list | grep Docker &> /dev/null
then
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
fi

# Docker repository 등록
if ! apt-cache policy | grep https://download.docker.com/linux/ubuntu | grep stable &> /dev/null
then
  echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
fi

# 기본적인 패키지들이 최신 버전인지 확인
sudo apt-get update

# docker-ce 이미 설치되어 있는지 체크
if ! dpkg -s docker-ce &> /dev/null
then
    # Docker 설치
    sudo apt-get install -y docker-ce docker-ce-cli containerd.io
fi

# docker 그룹에 사용자 추가
sudo usermod -aG docker $USER

# Centos7 컨테이너 실행
sudo docker run --privileged -d -p 5432:5432 --name centos centos:7 /sbin/init
  • systemctl 명령을 사용하기 위해서 privileged로 컨테이너 실행
  • 컨테이너에 postgresql을 설치할 예정이어서 포트 5432로 실행

1. 상황

Ubuntu 인스턴스에 CentOS 도커 컨테이너를 띄우고, 그 안에 PostgreSQL를 설치한 상태

 

그림으로 나타내보자면 아래와 같다.

 

내가 하고 싶은 것은

우분투에서 "CentOS에 설치된 PostgreSQL"에 접속해서 데이터를 추출해 MySQL(개발 DB)로 보내는 것!

 

그냥 접속하려고 했더니 계속 connection 에러가 나서 찾아보니..

이런 경우는 PostgreSQL에서 외부 접속을 허용해주어야 하고,

그러려면 바꿔야 할 설정과 설치해야 할 패키지들이 있어서 과정을 정리해보고자 한다 :)

 

 

2. 과정

 

0. 필요 패키지 설치

# Ubuntu에
sudo apt-get install -y postgresql-client
sudo apt-get install -y postgresql-client-common

# CentOS에
yum install -y firewalld net-tools

 

 

1. PostgreSQL이 CentOS 컨테이너의 네트워크 인터페이스에서 수신 대기 중인지 확인 - CentOS 컨테이너에서 실행

netstat -nlt | grep 5432

PostgreSQL이 0.0.0.0:5432에서 수신 대기 중이면 모든 IP 주소에서 연결을 수락할 준비가 되었음을 의미한다.

127.0.0.1:5432에서 수신하는 경우 외부 연결을 허용하도록 PostgreSQL 구성 파일을 수정해야 한다.

 

 

2. CentOS 컨테이너의 방화벽에서 PostgreSQL 포트(5432) 열기 - CentOS 컨테이너에서 실행

firewall-cmd --zone=public --add-port=5432/tcp --permanent
firewall-cmd --reload

 

3. /var/lib/pgsql/{version}/data/pg_hba.conf 수정 - CentOS 컨테이너에서 실행

host    all             all             {인스턴스 퍼블릭 IP}/22     md5

 

우분투에서 CentOS에 있는 PostgreSQL로 접속하려는 것이기 때문에 우분투 IP를 허용해주어야 한다.

pg_hba.conf 가장 하단에 있는 허용 목록에 우분투 IP를 host로 추가해준다.

 

4. /var/lib/pgsql/{version}/data/postgresql.conf 수정 - CentOS 컨테이너에서 실행

#listen_addresses = 'localhost' 를 아래로 변경
listen_addresses = '*'

 

5. PostgreSQL 재시작 - CentOS 컨테이너에서 실행

sudo systemctl restart postgresql-{version}

 

6. 접속 - Ubuntu 인스턴스에서 실행

psql -h {인스턴스 퍼블릭 IP} -U postgres

접속에 성공한 것을 확인할 수 있다~!!

CentOS 7.9 환경에 PostgreSQL 8.4.0 버전을 설치하는 중 ./configure를 실행하니 다음과 같은 에러가 발생했다.

checking for gcc... no
checking for cc... no
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.

 

gcc나 cc가 없어서 나는 에러인 것 같다.

 

아래 코드를 실행해 필요한 컴파일러를 설치해준다.

sudo yum install gcc glibc glibc-common gd gd-devel

 

설치 후 다시 configure를 해보면 잘 실행된다!

 

 

참고링크

https://sojinhwan0207.tistory.com/90

PostgreSQL에 대한 과제를 진행하기 때문에 장고 프로젝트에 PostgreSQL을 연동하여 사용해고자 한다.

 

먼저, PostgreSQL을 설치하고 DB를 생성해야 한다.

 

맥(Mac)에 PostgreSQL 설치 + DBeaver 연결

PostgreSQL 설치 1. 터미널에서 brew를 이용하여 설치 brew install postgresql 2. 버전 확인 postgres -V 3. 시작 brew services start postgresql 4. 접속 psql postgres 종료 brew services stop postgresql DBeaver 연결 1. DBeaver 다운로

myminju.tistory.com

 

완료되었으면 Django에 psycopg2를 설치해준다.

pip install psycopg2

 

설치가 되었으면 settings.py의 DATABASE 항목에 연결정보를 입력한다.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'project',
        'USER': 'root',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '',
    }
}

 

그 후 터미널에서 아래와 같이 입력하고 서버 구동을 확인한다.

python manage.py makemigrations
python manage.py migrate
python manage.py runserver

 

아래와 같이 장고 프로젝트에 잘 연동되어 데이터가 출력되는 것을 확인할 수 있다!

 

 

 

Reference

https://velog.io/@chaeri93/Django-Django와-Postgresql-연동하기

PostgreSQL 설치

1. 터미널에서 brew를 이용하여 설치

brew install postgresql

 

2. 버전 확인

postgres -V

 

3. 시작

brew services start postgresql

 

4. 접속

psql postgres

 

  • 유저 확인

 

  • 종료
brew services stop postgresql

 

DBeaver 연결

1. DBeaver 다운로드

  • 공식 사이트에 접속하여 운영체제에 맞는 파일을 다운로드 한다

 

2. PostgreSQL 선택

 

3. 정보 입력 (유저 생성 후 진행해야함) 후 Test Connection 클릭

 

4. 드라이버 설치

 

5. 완료

 

 

 

 

Reference

https://shanepark.tistory.com/186

https://pbj0812.tistory.com/407

+ Recent posts