RaspberryPi를 이용한 Web/FTP 서버 구축
RaspberryPi를 이용해 Web/FTP 서버를 구축하여 웹 개발 환경을 구축해본다.
RaspberryPi에 Raspbian 설치하기
https://www.raspberrypi.org/downloads/raspbian/에 들어가서 Raspbian을 다운로드 받는다. Raspbian은 라즈베리파이용으로 개발된 데비안 계열 OS로, GUI 및 raspbian에서 제공하는 다른 선택 요소들이 필요하면 with desktop 버전을, 필수적인 요소만 필요한 경우에는 lite 버전을 설치하면 된다.
Raspberry Pi의 저장장치는 유일하게 Micro SD카드로 한정되어 있다. 즉, SD카드에 Raspbian을 Flashing 하고 Raspberry Pi에 SD카드를 삽입해 부팅해야 한다. Micro SD카드에 Flashing 하기 위한 툴로 ‘Etcher’를 사용하겠다.
https://etcher.io/
다운로드 받은 Raspbian 이미지를 선택하고 설치할 Storage를 선택하고 Flash를 누르면 위와 같이 SD카드에 Flashing 되는 것을 볼 수 있다.
LITE 버전은 GUI를 제공하지 않아 Terminal에서 조작해야 하므로, SSH로 raspberry pi를 조작하도록 하겠다.
여기서 주의할 점이 있다. Raspbian을 Flashing하고 바로 Raspberry Pi에 삽입해 SSH 툴로 접근하려고 하면 연결이 거부된다. 구 버전에서는 SSH 연결 허용 여부의 기본값이 허용이었던 것에 반해, 최신 버전은 SSH 연결 허용 여부가 보안상 문제로 허용하지 않는 것으로 바뀌었다. 이를 해결하기 위해서는 Flashing 작업이 끝난 다음에 해당 Storage에 들어가서 SSH라는 이름의 확장자 없는 파일을 생성해줘야 한다.
SSH로 접속하기 위해서 Raspberry Pi의 Local Address를 알아야 한다. 라즈베리파이로 부팅해 ifconfig를 실행해 확인하는 방법도 있고, 공유기 설정에서 연결된 장치를 확인해 주소를 알아낼 수도 있다. 이 과정은 간단하므로 사진을 생략한다.
Update 및 FTP 설정
먼저 apt-get을 업데이트 해준다.
sudo apt-get update
Raspbian 구 버전은 일정 용량이 넘어서는 storage 같은 경우 storage의 용량 전체 중 일부만 인식해 따로 확장하는 과정이 필요했지만, 최신 버전은 storage의 원 용량 그대로 사용할 수 있다.
이제 ftp 모듈을 설치한다.
sudo apt-get install vsftpd
설치 후 vsftpd의 설정을 수정한다.
sudo vi /etc/vsftpd.conf
listen = YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
해당하는 것을 찾아서 위와 같은 옵션으로 바꾸어주고 저장한다. 바꾼 옵션을 적용하기 위해서 vsftpd를 재시작한다.
sudo service vsftpd restart
이제 정상적으로 작동하는지 ftp 클라이언트를 이용해 로그인해본다. 널리 쓰이는 ftp 클라이언트로는 filezilla가 있다.
호스트에 Raspberry Pi의 Local Address를, 사용자명에 pi, 비밀번호에 pi의 비밀번호를 입력하고 빠른 연결을 클릭하면 정상적으로 연결되는 것을 확인할 수 있다.
APM 설정
APM은 Apache + PHP + MySQL을 뜻한다. APM을 사용하는 웹서버를 구성해보겠다.
sudo apt-get install apache2
sudo service apache2 start
설치 후, apache가 잘 실행되고 있는지 확인해본다.
ps –ef|grep apache
잘 실행되고 있는 것을 볼 수 있다. Raspberry Pi의 Local Address를 브라우저의 URL 입력란에 입력해서 접속해보면 다음과 같은 페이지를 볼 수 있다.
Apache가 설치되었을 때 웹 페이지 구성 파일의 기본 참조 경로는 /var/www/html이다. 필자는 이것을 ftp 서버와 연동해서 사용하고 싶기 때문에 /home/pi/kiwi/www로 경로를 변경하고 싶다.
기본 참조 경로를 변경하기 위해서는 /etc/apache2/apache2.conf 파일과 /etc/apache2/sites-available/000-default.conf 파일을 수정해야 한다.
apache2.conf 파일에서 세번째 <Directory [dir]>에서 dir 부분을 원하는 경로로 수정한다. 앞서 말했듯, 기본값은 /var/www이다.
000-default.conf에서는 빨간 네모친 부분만 위와 같이 수정해주면 된다. 당연히 서버 이름과 allias, admin은 마음대로 작성해도 되고, DocumentRoot 항목만 원하는 경로로 수정하면 된다.
정상적으로 참조 경로가 바뀌었는지 확인하기 위해, 해당 경로로 이동해 index.html을 대충 작성한다.
이제 PHP를 설치한다.
sudo apt-get install php
sudo apt-get install libapache2-mod-php
설치 후 test.php를 다음과 같이 작성하고 [Raspberry Pi의 Local Address]/test.php를 입력해 정상적으로 출력되는지 확인한다. 당연히 test.php는 apache2의 참조 경로에 위치하고 있어야 한다.
<?php
phpinfo();
?>
결과는 다음과 같다.
마지막으로 mysql을 설치한다.
sudo apt-get install mysql
php와 연동하기 위해서 php-mysql 패키지를 설치한다.
sudo apt-get install php-mysql
실제로 사용할 생각은 없지만 php와 연동해 DB를 관리할 수 있게 도와주는 phpmyadmin도 설치해본다.
sudo apt-get install phpmyadmin
설치 후 URL에 경로를 입력하는 것 만으로 사용하고 싶다면 phpmyadmin 폴더를 변경한 참조 경로로 옮겨줘야 한다.
외부에서의 접근 허용
지금까지 설정한 것이 공유기가 아닌 직접 WAN에 연결했다면 Raspberry Pi가 단순히 위에서 했던 작업들만 거치면 아이피를 입력했을 때 외부에서 이미 접근이 허용되었을 것이다. 하지만 대부분의 경우 WAN을 공유기에 연결하고 공유기에 데스크톱, Raspberry Pi 등을 연결해 사용하기 때문에, 공유기에서 포트포워딩 설정을 해주는 과정을 거쳐야한다.
먼저 Raspberry Pi가 공유기에 접속할 때 마다 다른 Local Address를 가지게 되면 굉장히 귀찮아지기 때문에 주소를 고정시켜준다. (공유기는 DHCP 방식으로 Local IP를 접속한 순서대로 할당해주기 때문에 주소가 바뀔 수 있다.)
그 후 포트포워딩 설정에 들어가서 Raspberry Pi의 80번 포트로 포워딩 시켜준다.
위와 같이 80번 포트 뿐 아니라 22번 포트도 포워딩 시켜주게 되면 Local Network가 아니더라도 언제든지 putty를 이용해 Raspberry Pi에 SSH 접속을 할 수 있다.
또한 FTP 서버는 20~21번 포트를 사용하기 때문에 외부에 열린 포트를 20~21번 포트에 포워딩 시키면 외부 네트워크에서 FTP 서버를 사용할 수 있다.
'Network' 카테고리의 다른 글
EC2 Connection Error on PuTTY - No supported authentication methods available (0) | 2022.10.25 |
---|---|
AWS를 활용한 Web/FTP Server 제작 (0) | 2017.08.05 |