자바 & 스프링부트 서버 개발

AWS EC2 서버 구축 - 1

개발학생 2022. 8. 16. 20:45
반응형

*22년도 4월에 Ubuntu 18.04 버전으로 구축했던 서버

 

1. 외부에서 접속하기: phpinfo() 창 띄우기

1) AWS Management Console 접속

- 반드시 디폴트 지역 서울로 설정
- 전체서비스->컴퓨팅->EC2 클릭. '인스턴스'를 누르고, 빠른 시작 진행

 

AMI: 우분투 18.04 서버

인스턴스 유형: '프리 티어 사용 가능' 중 하나 선택
스토리지 추가: 스토리지만 30GB로 입력/나머지는 기본으로
보안 그룹 구성: 기본으로 설정
키 페어: 생성하고 키 파일 다운받아야 함 (까먹거나 하면 안 됨)

 

설정을 마치고 다시 인스턴스 창으로 돌아오면, 대기 중인 인스턴스가 생성되어있다. (우분투 운영체제의 컴퓨터를 빌렸다고 생각하면 된다)
위의 종료된 인스턴스는 잘못 만들어서 종료(삭제)한 것이다. 반나절 뒤에 완전히 목록에서 사라진다고 한다.

 

2) WinSCP 접속

이제 WinSCP를 다운받은 후 인스턴스 창에서 '퍼블릭 IPv4 주소' 를 복사하고, 호스트 이름 부분에 방금 복사한 주소를 붙여넣기한다.

파일 프로토콜은 SFTP로 한다. 사용자 이름은 ubuntu로 작성하고, 비밀번호는 적지 않고 그 아래의 '고급' 버튼을 누른다.

 

비밀번호 칸 밑의 '고급'을 선택하면, 고급 사이트 설정창이 나오는데 여기서 SSH->인증 부분에 개인 키 파일을 올려야 함.

키 파일은 '[서버이름]'.pem으로 저장되어 있음. 키 파일 선택한 뒤 PuTTY 형식으로 변환하고 확인->저장 버튼 누르기.

 

만든 서버를 실행해서, ‘Putty에서 열기’를 눌러서 Putty SSH 터미널 열기
-['C:\Program Files (X86)\PuTTY\putty.exe'를 찾을 수 없습니다.] 라고 오류남.. Putty를 설치해서 해결됨

- Ngnix 설치 필요: Putty SSH 터미널에 sudo apt update, sudo apt install nginx 입력
   → 코드가 정상적으로 실행되었다면, '퍼블릭 IPv4 주소'를 주소창에 입력했을 때 '사이트에 연결할 수 없음'이 뜸
        TCP 프로토콜의 포트 범위를 22로 설정했기에 WinSCP로만 접근 가능한 것

- 인스턴스->보안 부분에서 '보안 그룹' 링크를 클릭하고, 인바운드 규칙 추가함. (유형)HTTP/(소스)위치 무관으로 설정.
  그 후 '퍼블릭 IPv4 주소'를 입력했던 창을 새로고침하면, 정상적으로 nginx 홈페이지가 뜬다.

 

- WinSCP로 돌아가서 터미널에서 mysql, PHP 설치(sudo apt install mysql-server sudo apt install php-fpm php-mysql)

 

***fpm 따로 찾아보기: 프로세스의 생성과 삭제를 통해 발생하는 부하를 줄이기 위한 FastCGI를 활용하기 위해 사용되어지는 것 php가 FastCGI 모드에서 동작하여 처리될 수 있도록 해준다.

 

터미널에서 cd /var/www/html/을 입력한 다음 ls를 입력하면 index.nginx-debian.html 파일이 뜸. 이 파일이 nginx 띄워주는 파일.

해당 디렉토리에서 sudo vi index.php로 파일을 만들고, 이전에 했던 것처럼 <?php phpinfo(); ?>을 입력하고 저장
-> php와 nginx연동 필요: 터미널에서 sudo vi /etc/nginx/sites-available/default로 파일을 열어서,
    php 모듈에 해당하는 부분 주석 해제하고 php버전 숫자 7.2로 수정
    (sudo vi /etc/ngnix/sites-available/default: 파일 수정이 안 된다는 오류로 빈 파일이 나옴. nginx인데 스펠링 틀려서 오류난 것..)

 

마지막으로 터미널에 sudo service nginx restart를 입력한 후 '퍼블릭 IPv4 주소’를 넣은 웹사이트 뒤에 /index.php를 입력하고 새로고침하면, 정상적으로 PHP 홈페이지가 뜬다.

-> 영상처럼 숫자 수정했는데 sudo service nginx restart에서 오류가 났다..
    그래서 sudo apt update 부분부터 다시해봤는데, 어떤 블로그 글로도 아예 3.35.22.14 사이트가 안 뜨는 오류를 해결할 수 없었다..
    인스턴스 만드는것부터 다시 진행..

 

우분투 18.04 버전으로 인스턴스 만드는 것부터 다시 진행해서(위 절차 그대로 진행), phpinfo() 페이지 띄우기 성공! (IP 변경: 54.180.87.76)

 

2. MySQL 외부에서 접속하기 (DataGrip or Workbench)

1) WinScp Putty 터미널에서 진행

//1. root 계정으로 MySQL 접속 및 사용자 생성(이름 'mysql'/비밀번호 'mysql'), 및 권한 부여
//(사용자 접근 허용범위 설정-'username'@'%': 해당 사용자가 외부에서 접근 가능)
$ sudo mysql -u root -p
mysql> create user 'mysql'@'%' identified by 'mysql';

//2. 생성 확인
mysql> show databases;
mysql> use mysql;
mysql> select user, host from user;

//3. database 생성(db 이름은 test로 설정)
mysql> show databases;
mysql> create database test;

//4. database 권한 부여
mysql> grant all privileges on test.* to 'mysql'@'%';
mysql> flush privileges;
mysql> show grants for 'mysql'@'%';

//5. mysql 끝내기
mysql> exit;

//6. MySQL 외부 접속 허용-mysqld.cnf 파일에서 bind-address를 0.0.0.0으로 설정
$ cd /etc/mysql/mysql.conf.d
$ sudo vi mysqld.cnf

//7. MySQL을 재시작하여 변경사항을 저장 및 적용
$ sudo service mysql restart

 

-MySQL 사용자 생성 완료

-위 코드블럭의 '6. database 권한 부여' 부분에서 발생한 오류.
 ERROR 1044 (42000): Access denied for user 'mysql'@'%' to database 'test'

 root 유저로 DB를 만들어놓고, mysql 유저로 접속해서 mysql 유저를 접근허용하려고 해서 그런 거였다...

 

- root 계정으로 다시 권한 부여 코드 세 줄을 순서대로 실행해보니 성공!

 

- mysqld.cnf 파일에서 bind-address를 0.0.0.0으로 설정

 

2) AWS EC2 인스턴스에 인바운드 규칙 추가

-다음과 같은 인바운드 규칙을 추가한다.

 

3) DataGrip에서 연결 여부 확인

- 정상적으로 잘 연결되었음

 

3. phpMyAdmin 설치

-phpMyAdmin: MySQL, MariaDB를 웹브라우저에서 관리할 수 있게 해주는 소프트웨어

-사용하는 웹서버는 apache2로 선택. dbconfig-common? 질문에는 No 선택.

 

1) 오류났던 phpmyadmin 설치 코드

$ sudo apt update 
$ sudo apt install phpmyadmin을 진행한 뒤 아래 코드를 작성했을 때

http://54.180.87.76/, http://54.180.87.76/index.php는 정상적으로 나왔는데,
http://54.180.87.76/phpmyadmin은 어떤 방법을 써도 '403 Forbidden' 오류만 나왔다.....
AWS와 연결하는 부분부터 다시 진행했다

//phpmyadmin 설치가 완료되면 관리 MySQL 사용자에 사용 권한 부여
$ sudo mysql
mysql> GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'%' WITH GRANT OPTION;

//Nginx 및 phpMyAdmin을 구성
$ sudo vi /etc/nginx/snippets/phpmyadmin.conf

// /etc/nginx/snippets/phpmyadmin.conf에 작성할 내용
location /phpmyadmin {
    root /usr/share/;
    index index.php index.html index.htm;
    location ~ ^/phpmyadmin/(.+\.php)$ {
        try_files $uri =404;
        root /usr/share/;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }

    location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
        root /usr/share/;
    }
}

 

2) AWS 서버 구축부터 다시 진행하고 아래의 코드 입력(성공) - IP: 13.209.73.105로 변경

//패키지 업데이트, phpMyAdmin 설치
$ sudo apt update 
$ sudo apt install phpmyadmin

//심볼릭 링크 걸기
sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin

//default 파일에서 '#Add index.php~'부분의 맨 끝에 index.php 추가
sudo vi /etc/nginx/sites-available/default

//nginx 재시작하여 변경사항을 저장 및 적용
$ sudo service nginx restart

id/pw에 각각 mysql을 입력하고 로그인 성공!

 

 

 

다음 글에서 계속...

반응형