AWS를 활용한 Web/FTP
Server 제작
AWS를 활용해 웹서버와 FTP서버를
동시에 구축해 웹 개발 환경을 구현해본다.
AWS Instance Launching & Setting
AWS는 Amazon Web
Services의 약자로 아마존닷컴에서 제공하는 원격 컴퓨팅 서비스이다.
https://aws.amazon.com/에 접속해 회원가입 후, 제품 – EC2로 들어간다.
Launch Instance 버튼을 클릭한다.
다양한 OS를 선택할 수 있게 되어 있다. 필자는 Ubuntu로 서버를 구축해보겠다.
‘Free tier eligible’이라고 표시된 항목에 체크하고 Review and Launch 버튼을 클릭한다. Free tier는 AWS 가입일로부터 12개월간 사용 범위 내에서 무료이다. 관련된 내용은 AWS의 Free
tier 안내 항목을 참조하기 바란다.
Launch 버튼을 클릭한다.
새로 계정을 만든 경우 Key Pair가 없을 것이므로 Create a new key pair 항목을 선택해 원하는 이름을 입력해주고
Download Key Pair를 클릭해 Key Pair를 다운로드 받는다. 여기서 주의할 점은 Key Pair 파일의 이름을 바꾸면 사용할
수 없으며, 재발급이 되지 않으니 잃어버리지 않도록 한다. 다운로드
받은 Key Pair를 선택해 Launch Instances 버튼을
클릭한다.
아래쪽에 생성한 Instance가 정상적으로 동작하고 있는 것을 확인
할 수 있다. 스크롤을 오른쪽으로 밀어보면 IP 주소 및 Public DNS 주소 등을 확인할 수 있다. 이제 SSH를 통해서 접근해 Instance를 조작할 것이다. 그런데, 우리의 목표는 웹서버 및
FTP 서버까지 모두 구현하는 것이기 때문에, 이를 위해서 해야 하는 일이 있다. 보안 정책을 설정하는 것이다. 좌측에 Network & Security - Security Groups로 들어간다.
필자는 이미 Security Group를 여러 번 설정해 사용해 본
적이 있어 여러 개의 Security Group이 있지만, 처음
사용한다면 launch-wizard-1과 default 항목만
있을 것이다. 이중에 launch-wizard-1을 선택해 Inbound 탭을 클릭한다.
처음에는 SSH를 위한 22번
포트만 열려있을 것이다. FTP에 사용되는 포트는 20~21번, HTTP에 사용되는 포트는 80번이기 때문에 이 포트들을 열어줘야
한다. Edit 버튼을 클릭한다.
Add Rule 버튼을 클릭해 위와 같이 구성하고 Save를 누르면 추가되는 것을 확인할 수 있다. 참고로, 자기 자신만 사용하거나 특정 IP에서의 요청만 받고 싶다면 Source 항목에 원하는 IP 주소를 넣어주면 된다.
이제 Security Group 설정이 끝났으니, SSH로 접속한다. PuTTY에서 접속하기 위해서 아까 다운로드
받았던 Key Pair를 인증서로 사용해야 한다. PuTTYGen을
실행시켜 .pem(Key Pair)를 PuTTY에서 사용할
수 있는 방식으로 바꿔준다.
Save Private Key 버튼을 클릭하고 반드시 원래 파일과
같은 이름으로 저장한다. 그러면 .ppk 파일이 생성될 것이다. 이 Key Pair로 PuTTY를
통해 Instance에 SSH 접속을 진행한다.
다른 OS를 선택했다면 그 OS의
기본 사용자명을 ubuntu 대신 써주고, @ 뒤에 Instance의 Public DNS를 적어준다.
그리고 Connection – SSH – Auth 탭에 들어가서 아까 PuTTYGen으로 만들었던 .ppk 파일을 Browse해준다. 그리고 Open을
클릭하면 쉘이 정상적으로 출력되는 것을 확인할 수 있다.
APM Setup
Raspberry Pi에서 APM을
설치할 때와 크게 다르지 않다. 먼저 항상 그랬듯 apt-get을
업데이트 해준다.
sudo apt-get update
가장 먼저 apache를 설치해준다.
sudo apt-get install apache2
설치한 다음 Instance의 IP주소를
브라우저의 주소창에 쳐서 접속해본다. 다음과 같이 뜨면 정상적으로 설치된 것이다.
그리고 PHP를 설치한다.
php와 apache를
연동하기 위한 libapache-mod-php, MySQL과 연동하기 위한 php-mysql 패키지를 설치한다.
sudo apt-get install libapache2-mod-php
sudo apt-get install php-mysql
apache 서비스에 php를
연동시킨 작업을 적용하기 위해 서비스를 다시 시작해준다.
sudo service apache2 restart
apache의 기본 참조 경로인 /var/www/html로
이동해서 test.php를 만들고 다음과 같이 작성한다. 그리고
[Instance의 주소/test.php]를 브라우저에서
로드했을 때 다음과 같이 출력되면 정상적으로 php가 동작하고 있는 것이다.
마지막으로 MySQL을 설치한다.
sudo apt-get install mysql-server
root 계정의 비밀번호를 설정하라고 나오는데, 원하는 비밀번호로 설정하면 된다.
MySQL의 기본 Character-set을
변경한다. 변경해놓지 않으면 기본값으로 latin1 charset을
사용하기 때문에 추후 DB 작업을 할 시 문제가 생길 수 있다.
mysqld.cnf를 수정해주기 위해서 디렉터리를 /etc/mysql/mysql.conf.d로 이동한다.
cd /etc/mysql/mysql.conf.d
sudo nano mysqld.cnf
mysqld 맨 아랫줄에 아래 항목을 추가한다.
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
변경 사항을 적용하기 위해 mysql을 재시작한다.
sudo service mysql restart
FTP Setting
FTP 모듈을 설치한다.
sudo apt-get install vsftpd
FTP 설정을 변경하기 위해서 /etc로
이동해 conf 파일을 수정한다.
cd /etc
sudo nano vsftpd.conf
아래에 해당하는 옵션을 찾아서 아래와 같이 바꿔준다. 주석처리 되어
있으면 주석을 풀어준다.
listen = YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
변경한 옵션을 적용하기 위해서 vsftpd를 재시작한다.
sudo service vsftpd restart
FTP 클라이언트로 접속할 때 /home/[계정명] 폴더로 이동하게 될텐데, 디렉터리에 접근할 수 있는 권한을 주지
못하면 FTP 클라이언트에서 FTP 서버의 파일들을 정상적으로
로드할 수 없기 때문에 권한을 변경해준다.
그리고 apache의 기본 참조 경로를 /home/ubuntu/www로 했을 때, www에는 작성 권한도
있어야 하기 때문에 www 폴더에 대해 권한 설정도 따로 해준다.
(apache의 기본 참조 경로 설정은 Raspberry Pi 항목을 참조하자.)
sudo chmod 777 /home/ubuntu/www
이제 FTP 클라이언트로 접속해볼 차례이다. Raspberry Pi 서버에 FTP 클라이언트로 접속할 때는 그냥
호스트 주소와 사용자명, 비밀번호만 적고 연결하면 되었지만, Key
Pair를 사용해 인증하고 접속하기 때문에 추가적인 설정이 필요하다.
FileZilla에서 편집-설정으로
들어간다.
연결-SFTP 탭으로 들어가서
Add Key File 버튼을 클릭해 아까 PuTTY에서 접속할 때 사용했던 .ppk파일을 선택해 등록해준다.
확인을 누르고 사이트 관리자로 들어간다. 사이트 관리자는 다음 그림에서
빨간 네모이다.
아래 사진과 같이 설정하고 확인, 연결한다.
아래와 같이 디렉터리와 파일들이 보이면 성공이다.