일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Python
- codingtest
- 코드품앗이
- DFS
- DART
- 코테
- 파이썬
- 알고리즘
- cos
- 동적계획법
- 안드로이드
- 개발
- Flutter
- django
- Vue
- C++
- 분할정복
- DFS와BFS
- AndroidStudio
- 코딩테스트
- 동적계획법과최단거리역추적
- android
- cos pro
- issue
- 안드로이드스튜디오
- cos pro 1급
- 백준
- BAEKJOON
- vuejs
- Algorithm
- Today
- Total
Development Artist
[웹 서비스 A-Z][Deployment] #19 Database 본문
Django를 배포하기 전, DB 설치를 먼저 해주겠습니다.
우리는 Django와 잘 어울리는 Postgresql을 사용하겠습니다.
Django 서버가 배포 될 EC2(’jmcunst-depl-django’)에서 진행하겠습니다.
아래 링크를 통해 Centos 7 환경에서 Postgresql을 설치해주도록 하겠습니다.
https://jmcunst.tistory.com/300
버전은 11로 하겠습니다.
/usr/pgsql-11/bin/postgresql-11-setup initdb
systemctl enable --now postgresql-11
systemctl status postgresql-11
이후 Django 서버와 연동하기 위해 우리는 아래의 정보를 확인 할 필요가 있습니다.
- NAME - Database Name
- USER
- PASSWORD
- HOST
- PORT
먼저 postgresql 접속을 해보겠습니다.
[root@django-server ~]# su postgres
bash-4.2$ psql
그리고 데이터베이스를 확인합니다.
# 데이터베이스 확인
postgres-# \\l
다음은 사용자를 확인하구요,
# 사용자 확인
postgres-# \\du
다음은 비밀번호를 변경해주겠습니다. 원래 psql 명령어 입력시 비밀번호를 물어봅니다. 하지만, 지금 비밀번호가 설정이 안되어 있어서 바로 접속이 가능했던 것입니다.
postgres-# alter user postgres with password [PASSWORD]
필요한 정보들을 확인했습니다.
- NAME : postgres
- USER : postgres
- PASSWORD : 1q2w3e4r
- HOST : 10.0.140.203
- PORT : 5432
다음 시간에는 Django에서 DB를 연동하고 배포를 위한 이미지를 만들어 보도록 하겠습니다.
Addtional
Postgresql 을 설치하고 접속하기 위해서 우리는 su 라는 명령어를 입력했는데요, Switch User의 약자로, 사용자 변경을 위한 명령어 입니다. 현재 우리는 root 사용자로 작업을 하고 있는데, psql 명령어를 통해 DB에 접속하기 위해서는 postgres로 변경을 해줘야 합니다.
/etc/passwd 는 시스템에 등록되어 있는 사용자들에 대한 정보가 들어있습니다. postgresql을 설치하게 되면 postgres라는 기본 사용자가 생성이 됩니다. 제일 아래 부분에 있음을 확인할 수 있습니다.
cat /etc/passwd
따라서 postgres로 변경이 가능하게 되고 DB에 접속도 할 수 있게 됩니다.
postgresql 설정 파일은 어디서 확인할 수 있을까요?
바로 ‘/var/lib/pgsql/[version]/data’ 아래에 있습니다. pg_hba.conf 와 postgresql.conf를 앞으로 자주 보시게 될텐데요, 몇가지를 살펴보도록 하겠습니다.
먼저 postgresql.conf 입니다.
[root@django-server data]# cat postgresql.conf | egrep -v '^[[:space:]]*(#.*)?$'
max_connections = 100 # (change requires restart)
shared_buffers = 128MB # min 128kB
dynamic_shared_memory_type = posix # the default is the first option
max_wal_size = 1GB
min_wal_size = 80MB
log_destination = 'stderr' # Valid values are combinations of
logging_collector = on # Enable capturing of stderr and csvlog
log_directory = 'log' # directory where log files are written,
log_filename = 'postgresql-%a.log' # log file name pattern,
log_truncate_on_rotation = on # If on, an existing log file with the
log_rotation_age = 1d # Automatic rotation of logfiles will
log_rotation_size = 0 # Automatic rotation of logfiles will
log_line_prefix = '%m [%p] ' # special values:
log_timezone = 'UTC'
datestyle = 'iso, mdy'
timezone = 'UTC'
lc_messages = 'en_US.UTF-8' # locale for system error message
lc_monetary = 'en_US.UTF-8' # locale for monetary formatting
lc_numeric = 'en_US.UTF-8' # locale for number formatting
lc_time = 'en_US.UTF-8' # locale for time formatting
default_text_search_config = 'pg_catalog.english'
다음과 같이 기본적으로 설정이 되어 있습니다.
listen_address 부분을 수정해줄 건데요, 아래의 명령을 통해 모든 host로 부터 듣도록 합니다.
sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/" /var/lib/pgsql/11/data/postgresql.conf
systemctl restart postgresql-11
다음은 pg_hba.conf 입니다.
[root@django-server data]# cat pg_hba.conf | egrep -v '^[[:space:]]*(#.*)?$'
# TYPE DATABASE USER ADDRESS METHOD
local all all peer
host all all 127.0.0.1/32 ident
host all all ::1/128 ident
local replication all peer
host replication all 127.0.0.1/32 ident
host replication all ::1/128 ident
이 파일에서는 클라이언트의 주소와 역할을 지정하고 어떤 데이터베이스에 연결을 허용할지 정합니다.
사용할 수 있는 method 옵션 입니다.
설정값 설명
trust | 무조건 연결을 허용합니다. 이 방법을 사용하면 PostgreSQL 데이터베이스 서버 에 연결할 수 있는 모든 사람이 암호나 다른 인증 없이 원하는 PostgreSQL 사용자 로 로그인할 수 있습니다. |
reject | 무조건 연결을 거부합니다. 이는 그룹에서 특정 호스트를 " 필터링 "reject 하는 데 유용합니다. 예를 들어 회선은 특정 호스트의 연결을 차단할 수 있는 반면 나중 회선은 특정 네트워크의 나머지 호스트가 연결할 수 있도록 허용합니다. |
scram-sha-256 | SCRAM-SHA-256 인증을 수행하여 사용자 암호를 확인합니다. 암호 인증 가장 안전하지만 일부 클라이언트에서 지원되지 않습니다. |
md5 | SCRAM-SHA-256 또는 MD5 인증을 수행하여 사용자 암호를 확인합니다. |
password | 인증을 위해 클라이언트가 암호화되지 않은 암호(평문)를 제공하도록 요구합니다. 암호는 네트워크를 통해 일반 텍스트로 전송되므로 신뢰할 수 없는 네트워크에서 사용하면 안 됩니다. |
gss | GSSAPI를 사용하여 사용자를 인증합니다. 이것은 TCP/IP 연결에만 사용할 수 있습니다. |
sspi | SSPI를 사용하여 사용자를 인증합니다. 이것은 Windows에서만 사용할 수 있습니다. |
ident | 클라이언트의 ident 서버에 접속하여 클라이언트의 운영 체제 사용자 이름을 얻고 요청된 데이터베이스 사용자 이름과 일치하는지 확인합니다. ID 인증은 TCP/IP 연결에서만 사용할 수 있습니다. 로컬 연결에 지정된 경우 피어 인증이 대신 사용됩니다. |
peer | 운영 체제에서 클라이언트의 운영 체제 사용자 이름을 얻고 요청된 데이터베이스 사용자 이름과 일치하는지 확인합니다. 이것은 로컬 연결에서만 사용할 수 있습니다. |
ldap | LDAP 서버를 사용하여 인증합니다. |
radius | RADIUS 서버를 사용하여 인증합니다. |
cert | SSL 클라이언트 인증서를 사용하여 인증합니다. |
pam | 운영 체제에서 제공하는 PAM(Pluggable Authentication Modules) 서비스를 사용하여 인증합니다. |
bsd | 운영 체제에서 제공하는 BSD 인증 서비스를 사용하여 인증합니다. |
따라서, 앞으로 배포하게 될 컨테이너에서 해당 DB로 접속을 해주기 위해서는 pg_hba.conf 정책을 수정해야 합니다.
일단 서버를 Docker를 이용해 컨테이너 환경으로 배포하려고 합니다. 컨테이너로 된 장고 서버가 10.0.140.203의 DB로 접근을 허용해줘야 합니다.
그렇다면 Docker 컨테이너 실행시 잡히는 네트워크 대역을 알아야 할텐데요,
docker network ls
docker network inspect bridge
위의 명령어를 통해 네트워크 서브넷을 알 수 있습니다.
위에서 보시는 바와 같이, 172.17.0.0/16인 것을 확인할 수 있습니다. 컨테이너가 올라오면 해당 네트워크 대역의 IP를 하나 잡아 생성이 되는 것입니다.
따라서 우리는 저 대역을 허용해줘야 합니다.
# /var/lib/pgsql/11/data/pg_hba.conf
host all all 172.17.0.0/16 md5
위의 라인을 하단에 넣어주고 Postgresql을 재시작 합니다.
systemctl restart postgresql-11
이렇게 되면 이후 배포 될 Django 서버에서 지금 Database를 바라볼 수 있게 됩니다.
'Project_Personal' 카테고리의 다른 글
[웹 서비스 A-Z][Deployment] #21 ALB (0) | 2023.03.30 |
---|---|
[웹 서비스 A-Z][Deployment] #20 Docker (0) | 2023.03.29 |
[웹 서비스 A-Z][Deployment] #18 Nginx (0) | 2023.03.27 |
[웹 서비스 A-Z][Deployment] #17 Vuejs (0) | 2023.03.24 |
[웹 서비스 A-Z][Deployment] #16 Github (0) | 2023.03.23 |