Mac APM 설치 참고 - https://story-moon.tistory.com/37?category=1014706
WinScp 를 설치 → EC2 인스턴스 IPv4 주소와 연결하기 (주소를 Host Name으로 하여 로그인한다.)
Putty.exe 실행
만약 putty.exe 실행파일을 찾지 못할 경우, 환경설정에서 경로를 바꿔줘야 한다.
→ 참고 : https://velog.io/@banjjoknim/WinSCP와-PuTTY를-이용해서-AWS-EC2-인스턴스Ubuntu-AMI에-접속하기
터미널에 접속한 후, 웹 서버 (Nginx) 설치
$ sudo apt update
$ sudo apt install nginx
인스턴스 보안그룹 > 인바운드 규칙 편집 > 규칙 추가
HTTP 프로토콜에 대하여 모든 IPv4 또는 내 IP로 새로운 규칙을 추가하여 저장한다.
인스턴스의 퍼블릭 IPv4 주소로 접속하면 다음과 같은 페이지가 뜬다!
mySQL 설치
$ sudo apt install mysql-server
$ sudo mysql_secure_installation
$sudo mysql
/ sudo mysql -u root -p 도 가능
mysql_secure_installation
→ 이후 나오는 설정⚠️ 패스워드 설정에서의 실패 반복
[ 문제 원인 ]
... Failed! Error: SET PASSWORD has no significance for user 'root'@'localhost' as the authentication method used doesn't store authentication data in the MySQL server. Please consider using ALTER USER instead if you want to change authentication parameters.
[ 해결 방안 ]
접속을 종료한 후, sudo mysql
로 mysql에 접속하여 root 비밀번호를 직접 설정해준다.
이때 비밀번호 정책에 맞게 설정해줘야 하는데, 대소문자, 숫자, 특수문자를 혼합하여 8자 이상으로 구성해야 한다.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '새로운비밀번호';
*비밀번호 수준 (0=LOW, 1=MEDIUM, 2=STRONG)
- LOW : 8자 이상
- MEDIUM : 숫자, 대소문자 섞은 글자, 특수문자 섞어 8자 이상
- STRONG : 숫자, 대소문자, 특수문자, 사전에 없는 단어
→ `Query OK` 가 나오면 성공!
[ 참고 자료 ]
Mysql root 비밀번호 setup error(mysql secure installation)
> SELECT user,authentication_string,plugin,host FROM mysql.user;
> **SET GLOBAL validate_password.policy=LOW;**
> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY **'password'**;
> FLUSH PRIVILEGES;
PHP 설치
index.php 파일 생성
$ sudo apt install php-fpm php-mysql
$ cd /var/www/html/
$ sudo vi index.php -> 제대로 설치된 경우 해당 경로로 들어가 파일을 생성할 수 있음!
파일 내용은 아래와 같이 작성하여 생성한다.
<?php
phpinfo();
?>
⇒ PHP-fpm(PHP FaseCGI Process Manager) : 보통의 CGI보다 빠른 버전으로, 외부 PHP 프로그램에 클라이언트의 요청을 전달해준다.
Nginx 웹 서버가 PHP 프로그램을 사용하는 서비스에 요청을 전달하려면 Nginx와 PHP-fpm간 연동이 필요하다.
b. 연동하기
$ sudo vi /etc/nginx/sites-available/default
위 파일로 들어가 location ~.php${} 부분의 주석처리를 없애준다.
$ sudo service nginx restart
*관리자 권한에 의한 접근 방지가 뜰 경우 리눅스 명령어 앞에 sudo
를 적어 root 관리자 권한으로 실행함을 알린다.
⚠️ 트러블 슈팅
*502 Bad Gateway 원인 : 서로 다른 프로토콜을 연결해주는 장치(게이트웨이)가 잘못된 프로토콜을 연결하거나, 어느 한쪽의 프로토콜에 문제가 있어 통신이 제대로 되지 않을 때 출력되는 에러코드
→ 주로 서버 과부하나 사용자 브라우저에 이상이 있는 경우, 잘못된 네트워크 연결이 된 경우에 발생함
[ 해결 방안 ]
하지만 위의 문제 모두 아니고 .. php-fpm의 버전 설정 문제였다. /etc/nginx/sites-available/default
파일을 새로 작성할 때 php-fpm의 버전을 적어주는 줄에서 설치된 버전으로 맞춰줘야 하는데, 자신의 서버에 설치된 php 버전은 php -v
명령어로 확인할 수 있다.
[ 참고 자료 ]
c. '퍼블릭 IPv4 주소'/index.php
경로 로 들어가서 페이지가 뜨면 성공 !
MySQL 외부 접속
mysql 실행하기 및 사용자 생성
$ sudo mysql -u root -p
mysql> use mysql;
mysql> show databases;
mysql> show tables;
mysql> select user,host from user; // mysql database의 사용자 목록 출력
mysql> create user '사용자이름'@'%' identified by '설정할 비밀번호';
*사용자 생성 시 접근 허용 범위 지정
자신의 사용자 이름을 아래서 확인한다.
+------------------+-----------+
| user | host |
+------------------+-----------+
| debian-sys-maint | localhost |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
| jjuni | % |
+------------------+-----------+
외부접속 test할 데이터베이스를 생성한다.
mysql> create database jminieDB
mysql> grant all privileges on jjuniDB.* to 'jjuni'@'%';
// 지정한 사용자에게 권한을 준다.
mysql> flush privileges;
mysql> show grants for 'jminie'@'%'; // 사용자의 권한 확인하기
+----------------------------------------------------+
| Grants for jjuni@% |
+----------------------------------------------------+
| GRANT USAGE ON *.* TO `jjuni`@`%` |
| **GRANT ALL PRIVILEGES ON `jjuniDB`.* TO `jjuni`@`%`** |
+----------------------------------------------------+
접속 허용 포트 설정
$ cd /etc/mysql/mysql.conf.d
$ sudo vim mysqld.cnf
MySQL 설정 파일로 들어가 외부 접속을 허용하기 위해 bind-address 부분을 0.0.0.0
으로 바꿔준다.
AWS EC2 인스턴스의 인바운드 규칙에도 3306 포트 범위의 0.0.0.0/0으로 새로운 규칙을 추가해준다.
포트포워딩 후, mySQL을 다시 시작해준다.
$ sudo service mysql restart
MySQL Workbench에서 외부 접속하기
username에 생성한 사용자 이름을 넣고, host에는 인스턴스 IPv4 개방주소를 넣어준다.
Test Connection 시 접속에 성공하고 아래와 같이 생성했던 데이터베이스를 확인할 수 있다.
phpMyAdmin 설치
MySQL을 웹 상에서 관리할 목적으로 PHP로 작성한 오픈 소스 도구
→ 데이터베이스, 테이블, 필드, 열의 작성/수정/삭제, SQL 상태 실행, 사용자 및 사용 권한 관리 등의 다양한 작업 수행 가능하며, PHP로 작성되어 있어 코어파일들을 적절히 튜닝하여 사용할 수 있다.
⚠️ 트러블 슈팅 양식
[ 문제 원인 ]
http://localhost/phpmyadmin 으로 접속 시, 아래와 같은 오류가 뜬다.
웹 페이지가 해당 디렉토리까지 가는 것이 막혀있어 발생하는 문제이다.
[ 해결 방안 ]
IIS 관리자에서 디렉토리 검색
을 사용 안 함 > 사용으로 바꿔준다.
사실 문제는 nginx 로 진행하고 있고 인스턴스에 연결해주는 과정이었기 때문에 localhost/phpmyadmin 이 아닌 인스턴스IPv4주소/phpmyadmin 으로 들어가는 것이 맞았다..
[ 참고 자료 ]
윈도우7 IIS 3장 - IIS 오류(HTTP 오류 403.14 - Forbidden)
Ubuntu 18.04 : phpMyAdmin with Nginx 설치 방법, 예제, 명령어
mysql로 생성한 사용자명과 비밀번호로 로그인하여 위 화면과 같이 접속되면 성공!
도메인 연결하기
무료 도메인 발급 → freenom 사이트 이용
해당 사이트에서 모두 Not available로만 뜨므로, 구매하고자 하는 도메인까지 같이 붙인 형태로 검색해야 한다.
Service > [My Domain] 으로 가서 인스턴스 IP 주소를 Forwarding 해준다.
발급한 도메인으로 접속 시 IP 주소로 바로 연결되는 것을 확인할 수 있다!
HTTPS 연결하기 → Let’s Encrypt 이용
certbot 설치
*Let's Encrypt - 무료 인증서 발급****
Let’s Encrypt 는 사용자에게 무료로 SSL/TLS 인증서를 발급해주는 비영리기관으로, 한 번 발급 받으면 90일간 사용가능하고 만료 30일 전에 이를 갱신할 수 있다.
인증서 발급은 Let’s Encrypt 인증서를 자동으로 발급/갱신해주는 certbot 또는 certbot-auto를 이용하면 된다.
*패키지로 설치 시 → certbot / 바이너리를 직접 받는 경우 → certbot-auto-letencrpyt
ubuntu$ sudo apt-get update
ubuntu$ sudo apt-get install software-properties-common
ubuntu$ sudo add-apt-repository universe
ubuntu$ sudo add-apt-repository ppa:certbot/certbot
ubuntu$ sudo apt-get update
ubuntu$ sudo apt-get install certbot // certbot 설치
ubuntu$ sudo apt-get install python-certbot-nginx // certbot nginx plugin 설치
인증서 발급
$sudo apt install -y certbot python3-certbot-nginx
[ 참고 자료 ] Unable to locate package python-certbot-apache on Ubuntu 14.04 AWSSSL 인증서 가져오기
$ sudo certbot --nginx -d example.com -d www.example.com
⚠️ 트러블 슈팅
[ 문제 원인 ]
[ 해결 방안 ]
$sudo apt install -y certbot python3-certbot-nginx
[ 참고 자료 ]
Unable to locate package python-certbot-apache on Ubuntu 14.04 AWS