본문 바로가기
Server

[AWS] ubuntu 서버, MySQL DB 한 번에 배포하기 3(Lightsail)

by DuncanKim 2022. 10. 6.
728x90

[AWS] ubuntu 서버, MySQL DB 한 번에 배포하기 3(Lightsail)

 

 

이것이 마지막이다...

이번 편에서 다룰 것은 DB 연결 / SSL(HTTPS 연결) 이다. 이것만 끝나면, 정말 정상적인 웹 서비스를 배포, 구동할 수 있다.

 

먼저 쉬운 HTTPS 연결부터 해보자!

 

 

1. HTTPS 연결(Let's Encrypt 설치)

 

HTTPS가 필요한 이유는 이 포스팅을 찾아들어온 사람들이라면 알 것이다. 데이터 암호화에 필요하며, 나 같은 경우에는 카카오맵 API를 가져다 쓰는 프로젝트를 했는데, HTTPS 연결이 되지 않으면 제대로 데이터를 가져다 쓸 수 없었기 때문에 꼭 필요하였다. 기타 소셜 로그인도 HTTPS 연결을 필요로 하는 것들이 많을 것이다. 그만큼 배포에 필요한 것이 HTTPS 연결이다.

 

1) 인증서 발급(Let's Encrypt)

 

인증서 발급 기관 중에는 유료로 서비스를 제공하는 경우가 많다. 이 가운데 Let's Encrypt는 무료로 인증서를 발급해준다. 발급을 받으려면 Let's Encrypt 인증서를 먼저 설치해야 한다.

 

(1) Let's Encrypt 인증서 설치

 

터미널에서 서버에 접속한 상태로 다음의 명령어를 입력한다.

sudo apt install certbot
sudo apt install python3-certbot-nginx

그리고 설치를 마무리한다.  y가 필요할 경우 y를 누르고 엔터를 해주자.

 

 

(2) 인증서 발급

 

설치가 완료된 후 아래의 명령어를 쳐주자.

sudo certbot certonly --nginx

 

다음과 같은 것을 차례로 만나볼 수 있다.

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): (본인이 사용하는 이메일)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: a

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y
No names were found in your configuration files. Please enter in your domain
name(s) (comma and/or space separated)  (Enter 'c' to cancel): (본인이 사용하는 도메인)
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for eattwogetter.shop
Using default address 80 for authentication.
Waiting for verification...

(쭉... 쭉... 쭉...)

순서대로 본인이 실제로 사용하는 이메일을 넣어주고,

a를 치고 엔터, y를 치고 엔터,

그리고 마지막에는 본인이 사용하는 도메인을 넣어주고 엔터를 누른다.

 

그러면 인증서가 생성된다.

 

 

2) 인증서 생성 위치

 

/etc/letsencrypt/live/(본인이 입력한 도메인)/fullchain.pem
/etc/letsencrypt/live/(본인이 입력한 도메인)/privkey.pem

nginx 설정에 필요한 루트이다. 잘 기억해두자.

 

 

3) Nginx 설정

 

sudo vim /etc/nginx/sites-available/(본인 프로젝트 디렉터리 이름)

 

sites-available 안에 들어있는 파일을 수정해준다.

 

server {
        listen 80;
        server_name (본인이 사용하는 도메인);
        rewrite        ^ https://$server_name$request_uri? permanent;
}

server {
        listen 443;
        server_name (본인이 사용하는 도메인);

        ssl on;
        ssl_certificate ( 1 - 2)에서 알아두었던 fullchain.pem 경로); # managed by Certbot
        ssl_certificate_key ( 1 - 2)에서 알아두었던 privkey.pem 경로); # managed by Certbot
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
        ssl_prefer_server_ciphers on;

        location / {
                proxy_pass http://localhost:8080;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
        }
}

파일 전체를 이렇게 바꿔준다.

 

 

4) Nginx 재시작

 

sudo systemctl restart nginx.service

 

 

5) 방화벽 해제

 

처음에 방화벽을 해제했던 곳이 있다. 그곳에 들어가서 방화벽을 해제해준다.

(홈 - 인스턴스 클릭 - 네트워크 탭)

애플리케이션은 HTTPS이고, 443 포트를 넣어서 규칙을 추가해준다.

 

 

자 이제 HTTPS 설정이 모두 끝났다. 마지막으로 database 설정을 해주면 끝난다.

 

 

 

2. MySQL database 설정

 

 

1) 데이터베이스 생성

 

홈 - 데이터베이스 탭으로 넘어가서 데이터베이스 생성 클릭

 

 

2) MySQL 8.0.30 클릭 후 데이터베이스 생성

 

 

건드릴 건 없다. 클릭하면 나오는 탭이다.

 

15달러로 설정해준다.

데이터베이스 이름을 설정해준다. 기본으로 해도 좋다.

하단의 데이터베이스 생성을 누른다.

 

 

3) 데이터베이스 생성 중

지나치게 오래 걸린다. 10분 정도 소요된다.

 

 

4) 생성 완료

데이터베이스를 생성하였다. 이제 서버와 연결시키면 된다.

 

 

5) 인텔리제이 properties 수정

 

application-prod.properties 파일을 만든 기억이 있을 것이다.

그 때 당시에 이런식으로 두고 넘어갔었는데, 엔드 포인트와 비밀번호를 각각의 자리에 입력해야 한다.

 

데이터베이스 홈에 들어가보면 다음과 같은 화면을 볼 수 있다.

엔드포인트를 복사하여 붙여놓고, 암호는 '표시'를 누르면 전체를 볼 수 있다. 그것을 그대로 붙여넣도록 한다.

 

 

** 데이터베이스가 만들어지지 않는다면, 초기 1번 실행때는 ddl-auto를 create로 해서 빌드 - 실행을 하고,

그 다음부터는 none으로 해서 다시 빌드 - 실행을 하면 될 것이다.

 

 

그러고 bootjar 를 실행하여 파일을 만들고, 다시 서버에 새롭게 만들어진 jar 파일을 전송하도록 한다.

 

 

6) Workbench 연동

 

만약에 초기 설정 값이 필요한 경우, workbench를 열어서 데이터베이스를 만질 수 있다.

AWS 데이터베이스 탭에서 퍼블릭 모드를 활성화 시켜줘야 한다. '네트워킹' 탭에 퍼블릭 모드 활성화를 시키는 것이 있다.

누른 후 아래와 같이 따라하면 된다.

 

워크벤치 연결 설정값을 이렇게 해주면 된다. 호스트 네임에 엔드포인트를 써주고, 유저네임에 dbmasteruser를 입력하면 된다. 포트는 3306이다.

 

 

3. 드디어 실행

 

이 터미널 화면으로 돌아가서 다음 두개의 실행문을 입력한다.

나같은 경우에는 프로젝트 디렉토리 이름이 sbb라서 친 것이고, 여러분의 프로젝트 디렉터리 명을 치고 그 곳으로 들어간 다음 실행 스크립트를 입력해주면 된다.

 

아무것도 나오지 않지만, 실행되고 있을 것이다.

 

 

 

여러분의 도메인을 치고 들어가면 다음과 같이 운영중인 서비스를 만나볼 수 있을 것이다.

 

 

 

++ 

서버 비용이 초기 무료라고 했는데 나온다.

아마 초과 사용을 해서 그런 것이라고 생각이 되는데, 정확한 이유는 모르겠다...

서버를 반납하고, 다음에는 AWS EC2를 사용하여 배포를 진행해보아야 겠다.

728x90

댓글