주식 뉴스 분석 프로젝트 <서버 구축><4>
프로젝트 개요 및 각 글들의 링크: https://namth.tistory.com/18
이번 글에서는 데이터베이스 설치에 대해서 쓰려고 한다.
설치할 데이터 베이스는 Mysql, MongoDB 두 개를 설치하려고 한다.
DB 버전
- mysql: 8.0.30
- mongo: 5.0.9
MySql
MySql 설치
패키지 매니저(apt)를 사용할 것이므로, 매니저를 업데이트해준다.
# 패키지 매니저 업데이트
sudo apt update
mysql 서버를 설치를 할 예정이므로, 'mysql-server'을 설치해준다.
특정 버전의 mysql 서버를 설치 시 아래의 명령어로 치면 된다.
# mysql-server 설치
sudo apt install mysql-server
# 특정 버전 mysql-server 설치
sudo apt install mysql-server=8.0.x
# 내가 서버에 설치한 mysql-server
sudo apt install mysql-server=8.0.30-0ubuntu0.20.04.2
MySql 인증정보 세팅
설치가 완료되었다면 이제 보안 세팅을 해야 한다.
아래의 명령어를 입력한다.
# 보안 세팅
sudo mysql_secure_installation
명령어를 입력하면 여러 가지 질문들이 나온다.
입력이 필요한 내용
- 암호 검증 컴포넌트를 추가할 것인가?
보안상 좋아 보이므로(y) - 암호 강도는 얼마나 강하게 할 것인가?
보안상 강한 게 좋으므로(strong, 2) - 새로운 root 계정 암호를 입력
진행 중 세 번째 입력에서 오류가 발생했다.
찾아보니 권한이 꼬여서 생긴 문제로 검색해보면 많은 답변들이 있다.
secure_installation에서 나가는 방법은 'y/n' 입력을 물어보는 단계에서 'ctrl^c'을 눌러주면 된다.
해결책은 mysql에 들어가 직접 root 계정의 암호를 변경하는 것이다.
root 권한으로 mysql 서버에 접속 후 ALTER 명령어로 root 계정의 비밀번호를 변경한다.
# mysql 서버 접속
sudo mysql
# root 계정 암호 변경
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '암호';
비밀번호가 변경되었다면(Query Ok) 이제 다시 secure_installation을 실행해 남은 보안설정을 진행한다.
입력이 필요한 내용
- 방금 설정한 root 계정의 암호를 입력한다.
- root 계정의 암호를 변경하겠는가?
방금 설정하였으므로(y) - 익명 유저를 제거하겠는가?
보안에 좋을 것이 없어 보여(y) - root 계정으로 외부 접속이 불가능하게 할 것인가?
보안상의 이유로 root 권한은 외부 접속이 안되도록 함(y) - test 데이터베이스를 삭제하겠는가?
필요 없어 보이므로 삭제(y) - 권한 테이블을 reload 하겠는가?
최신 상태로 업데이트하는 것이므로 (y)
MySql 테스트
설정이 완료되었으므로 이제 잘 동작하는지 테스트해봐야 한다.
설정한 root 계정으로 로그인을 할 것인데, 전과는 달리 root 권한으로 실행하지 않으므로, 유저와 암호를 추가했다.
# mysql 접속, root 계정
mysql -u root -p
아래 사진처럼 추가로 암호를 입력하면 접속이 되는 것을 확인할 수 있다.
MySql 유저 추가
보안설정(secure_installation)에서 root 계정으로는 외부 접근이 되지 않도록 설정했다.
외부에서 DB에 접근하여서 데이터를 쓰기 위해서는 새로운 계정이 필요하므로 계정을 생성했다.
외부에서 접근하는 계정의 권한은 특정 테이블을 읽고 쓰는 권한만 줄 것이다.
우선 유저를 생성한다.
유저는 외부에서 접근이 가능하게 설정한다.
# create user
create user '유저'@'%' IDENTIFIED BY '암호';
그 후 특정 테이블에서만 읽고, 쓰기가 가능하게 권한을 부여한다.
# 권한 부여, grant
GRANT SELECT, INSERT ON 테이블 TO '유저'@'%';
MongoDB
MongoDB 설치
설치는 공식 문서를 참고했다.
패키지 매니저에 mongodb 퍼블릭 키를 추가한다.
'OK'가 나왔다면 제대로 추가가 된 것이고, 아니라면 공식 문서를 참고하면 된다.
# 버전 5.0.9를 사용중이므로 5.0.asc를 사용
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
mongodb 버전 리스트 파일을 생성한다.
# 5.0.9 버전을 사용중이므로 6.0을 5.0으로 변경했다.
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
패키지 매니저를 업데이트한다.
# update
sudo apt-get update
패키지 매니저를 이용해 mongodb를 설치한다.
# 버전 지정없이
sudo apt-get install -y mongodb-org
# 버전 지정
sudo apt-get install -y mongodb-org=5.0.9 mongodb-org-database=5.0.9 mongodb-org-server=5.0.9 mongodb-mongosh=1.5.0 mongodb-org-mongos=5.0.9 mongodb-org-tools=5.0.9
MongoDB 설치확인
설치된 mongodb를 실행한다.
# mongodb 실행
sudo systemctl start mongod
# mongodb 상태확인
systemctl status mongod
접속 툴로 mongodb에 접속해본다.
# 인증 없이
mongosh
# 유저로 접속
mongosh -u 유저이름 -p 암호
MongoDB 유저 생성
Mysql과 마찬가지로 유저를 생성한다.
서버 내부에서 사용할 admin 유저와, 외부에서 접속하는 유저를 생성한다.
passwordPrompt의 경우 입력 문구가 나오며 직접 입력하면 된다.
# 일반 유저 생성
db.createUser(
{
user: "blogUser",
pwd: passwordPrompt(),
roles: [ { role: "readWrite", db: "blogdb" }]
}
)
# admin유저 생성
db.createUser(
{
user: "blogAdmin",
pwd: passwordPrompt(),
roles: [ { role: 'root', db: 'admin' } ]
}
)
EC2 인바운드 규칙 수정
mysql과 mongodb가 외부에서도 접근이 가능하도록 ec2 인스턴스의 인바운드 규칙을 수정해야 한다.
mysql의 기본 포트와 mongodb의 기본 포트를 인바운드 규칙에 추가하면 된다.
- mysql: 3306
- mongodb: 27017
aws console -> ec2 서비스 -> 수정할 인스턴스(인스턴스 ID) -> 보안 -> 보안 그룹 -> 인바운드 규칙 편집
1. 수정할 인스턴스(인스턴스 ID)
2. 보안
3. 보안 그룹 선택
4. 인바운드 규칙 편집 선택
5. 지정된 포트로 인바운드 규칙 편집
다음 글
그래프 출력용 웹서버 작성에 대한 글을 쓰려고 한다.
# 2022.09.30 수정
'프로젝트 > 주식뉴스분석' 카테고리의 다른 글
[ubuntu]Flask 서버 service 등록 (0) | 2022.10.07 |
---|---|
주식 뉴스 프로젝트 Flask 서버 (0) | 2022.10.02 |
AWS EC2 nginx + letsencrypt (0) | 2022.09.29 |
AWS EC2 IP고정(탄력적IP) 및 도메인 등록 및 연결 (2) | 2022.09.28 |
AWS EC2 인스턴스 생성 및 접속하기 (2) | 2022.09.26 |