인프라 설계 및 구축 2. 서비스 환경 구축
인프라 두 번째 시간으로 오라클 클라우드에서 제공하는 무료 VM 인스턴스 2대로
실제 서비스 환경을 구축하겠습니다.
VM 인스턴스 하나는 Web Server (Nginx) - Web Application Server (Node.js) 로 활용하고
다른 VM 인스턴스는 DB 서버 (MySQL)로 구축하겠습니다.
우선 오라클 클라우드를 선택하게 된 이유는 상시 무료입니다.
가상 머신 2대를 주고 사용 시간 제한이 없으며 공인 IP도 무료입니다.
제가 전에 인프라를 두 번 정도 구축해본 경험이 있는 네이버 클라우드는 1년 무료이지만 3개월이 지나면
매월 4,032원 공인 IP 가격이 청구됩니다. 오라클 클라우드가 여러모로 장점이 많으니 다들 한 번씩
사용해보시면 좋을 것 같습니다.
2021년 12월에 CenOS 8 기술 지원이 종료되어 실 서비스에서는 2024년까지 지원되는 CentOS 7을 사용했습니다.
오라클 클라우드 기본적인 서비스 구축 절차는 다음과 같습니다.
- 구획 생성
- 저는 VM 인스턴스 2대를 이용하므로 구획과 VCN, 공용 IP 등 모두 다 2개씩 나눠서 구축했습니다.
- 네트워크 설정 (네트워크 포트 설정, ACG)
- http, https, mysql, mysqlx 포트 설정해서 네트워크 방화벽을 열어 놓습니다.
- VM Instance 생성
- 서버에 필요한 패키지 설치 (Nginx, MySQL,...)
- 도메인 세팅 + 고정 IP 설정
- HTTPS 설정
- 방화벽 설정 (서버 방화벽 열기)
도메인은 제가 전에 호스팅 KR에서 사놓은 것을 활용하겠습니다. (도메인)
소셜 북마크와 상관없는 네이밍이지만 개인 토이 프로젝트이므로 우선 진행을 하고,
나중에 기회가 생긴다면 그때 교체하겠습니다.
[Web Server - Web Application Server (VM 인스턴스)]
제 컴퓨터 OS가 윈도우라서 Putty를 사용하여 SSH private key를 이용해 실 서비스 서버에 접속해서
다음과 같이 필요한 패키지들을 설치 및 설정을 하였습니다.
(나중에 Putty 없이 도커 컨테이너로 띄워놓고 실 서비스 서버, 개발용 서버 양쪽 연동하면서 작업할 예정입니다.)
- Epel-release (Extra Packages for Enterprise Linux) ✔
- Nginx ✔
- vi 에디터를 활용하여 yum 외부 저장소 (repository) 등록하고 Nginx 설치
- YUM: RedHat 계열 리눅스 배포판에서 사용하는 패키지 설치 및 관리 도구
RPM (Redhat Package Manager) Package Dependency 개선, Yellowdog Updater Modified - 최근에는 DNF (Dandified dnf)를 많이 사용합니다.
- CentOS 7에서 dnf 사용해본 결과, dnf는 CentOS 8부터 잘 적용되는 것 같습니다.
- 저는 Nginx를 실 서비스 서버에서는 systemctl 명령어를 이용하여 데몬(daemon)으로 띄웠습니다.
- Volta ✔
- PM2 by Volta ✔
- Node (@, LTS), NPM by Volta ✔
- rsync, rcp setting ✔
- FTP처럼 파일 전송용입니다.
- 이후 개발 환경을 도커로 구축하고 연동해서 개발 환경 - 실 서버 간의 배포(업로드) 및 내려받기가 가능합니다.
- Let's Encrypt SSL (HTTPS certbot) Agent ✔
- 무료 HTTPS 인증서
- certbot, python3-certbot-nginx
- 90일 주기 만료이므로 crontab을 이용하여 자동 갱신 쉘 스크립트 작성
- 매 2달 1일 새벽 5시마다 자동 갱신 세팅 완료 (분 시 일 월 주, &1 - 표준 출력)
0 5 1 */2 * /usr/bin/certbot renew >> /etc/nginx/cert.log 2>&1
[DB 서버 (VM 인스턴스)]
- MySQL 8 ✔
// mysql 자동으로 설정된 root password 확인
grep 'temporary password' /var/log/mysqld.log
// 이후 mysql 보안 강화 위한 설정
mysql_secure_installation
// MySQL Workbench 8.0으로 외부에서 접속하기 위해 DB 서버 포트 개방
sudo iptables -I INPUT 1 -p tcp --dport 3306 -j ACCEPT
// vi /etc/my.cnf 에 추가
// MySQL 인코딩 및 collation 설정
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqldump]
default-character-set = utf8mb4
[mysqld]
skip-character-set-client-handshake
init_connect="SET collation_connection = utf8mb4_unicode_ci"
init_connect="SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci"
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
// DB 서버 사양이 낮아서 한번에 접속할 수 있는 수를 100으로 설정해서 줄이기 (mysql 데몬)
show variables like '%max_connection%';
set global max_connections=100;
MySQL 설치 후 mysql_secure_installation을 진행하여 보안을 강화합니다.
mysql -u root -p로 들어가서 소셜 북마크 서비스에 사용할 데이터베이스를 생성하고 user도 따로 만들어서
권한을 할당했습니다. 이후 MySQL Workbench 8.0 에도 연동을 다 마쳤습니다.
(참고로 Node에 대한 포트는 별도로 개방하지 않고, Nginx에서 Node로 포트포워딩을 해서 이용합니다.)
다음 시간에는 실 서비스 환경과 비슷하게 개발 환경을 구성하기 위해 docker를 이용하겠습니다.
docker로 개발 환경 구축을 완료하면 이미지를 떠서 dockerhub으로 이미지 배포를 하고
이후 API 서버 연동 및 구축하면서 시간이 된다면 YAML 파일을 이용해서
docker-compose (여러 컨테이너 한 번에 띄우고 죽이는 도커 에코시스템 통합 기능) 관련 부분까지도 다뤄보겠습니다.
(이미지 배포 시에는 당연히 보안적인 부분 잘 체크해서 세팅하고 올려놓을 예정입니다.)
[Reference]
'Personal Projects > 소셜 북마크 서비스 🙂' 카테고리의 다른 글
[개인] 소셜 북마크 - 인프라 설계 및 구축 3. 개발 환경 구축 (0) | 2022.01.16 |
---|---|
[개인] 소셜 북마크 - 인프라 설계 및 구축 1. 시스템 아키텍쳐 (0) | 2022.01.08 |
[개인] 소셜 북마크 - DB 설계 2. EERD 설계 (0) | 2022.01.07 |
[개인] 소셜 북마크 - DB 설계 1. 클래스 다이어그램 (0) | 2022.01.04 |
[개인] 소셜 북마크 - 기획 및 화면 설계 5. 프로토타입 (2) | 2021.12.28 |
댓글