오드로이드 XU4 를 개인 클라우드 서버로 - 7. h5ai
h5ai 는 modern HTTP web server index 입니다. 그렇게 써있는데, 감이 안 오시는 분들은 간단하게 파일을 웹에서 내컴퓨터에서 보듯 볼 수 있다고 생각하시면 됩니다. 사실 서버 차원에서 기본적인 웹 디렉토리 리스팅 서비스가 지원되지만, 보기도 나쁘고 보안도 취약해 웹 디렉토리 리스팅을 위해선 h5ai 를 사용하는 것이 더 좋다고 봅니다. h5ai의 보안이 뛰어난 것은 아니지만요.. :)
또한 h5ai는 간단한 문서, pdf, 이미지, 동영상, 소스 코드 뷰어를 지원합니다. 아주 괜찮은 친구에요.
데모 사이트: https://larsjung.de/h5ai/demo/
h5ai 를 위해선 Nginx, Apache 등 웹 서버와 PHP가 설치되어 있어야 합니다. Apache 권장이지만, 전 Nginx를 사용하겠습니다.
1. h5ai 설치
1.1 h5ai 다운로드 및 압축 해제
h5ai 는 업데이트를 위한 저장소가 제공되지 않습니다. 사이트에서 받아 설치해야 합니다.
wget https://release.larsjung.de/h5ai/h5ai-0.29.0.zip
그리고 전 압축을 편의상 /var/www/html/nas 에 풀겠습니다.
sudo mkdir /var/www/html/nas
sudo unzip -d /var/www/html/nas h5ai-0.29.0.zip
압축을 풀었으니 지우겠습니다.
rm h5ai-0.29.0.zip
1.2 Nginx 설정
Nginx에서 h5ai를 제대로 작동시키기 위한 작업이 필요합니다. _h5ai/public/index.php 를 index 페이지로 사용하게끔 설정해야 해요. 여기선 새로운 포트를 둬 해당 NAS 페이지로 접근하게끔 하겠습니다.
먼저 기존 sites-available 설정 파일을 복사합니다. nas란 이름으로 복사하겠습니다
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/nas
그리고 복사한 파일의 내용에서 listen과 root 부분을 바꿔줍시다. 전 h5ai 페이지에 접속하기 위해 3000번 포트를 사용하며 default_server 키워드를 지우겠습니다. default_server 키워드는 포트 하나만 갖고 있어야 합니다. root와 index 파일의 경로까지 수정해줍니다.
다음과 같이 하겠습니다.
server {
listen 3000;
server_name localhost;
root /var/www/html/nas;
location / {
index index.html /_h5ai/public/index.php;
}
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
해당 파일에 대한 소프트 링크 파일을 /etc/nginx/sites-enabled/nas 파일로 만들어줍시다.
sudo ln -s /etc/nginx/sties-available/nas /etc/nginx/sites-enabled/nas
마지막으로 Nginx를 reload 해줍시다.
sudo service nginx reload
접속해봅시다.
http://{오드로이드IP}:3000/
외부에서도 접속하려면 방화벽 및 공유기의 포트 포워딩 설정을 꼭 확인해주세요. 1편부터 따라오신 분들이라면 방화벽이 설치되어 있지 않으니 공유기의 포트 포워딩 설정만 알아보시면 됩니다.
1.3 설치 확인
잘 뜨지만, 여러 기능이 잘 작동하는가 상태를 확인하려면 _h5ai/public/index.php 에 직접 접근해보면 됩니다.
http://{오드로이드IP}:3000/_h5ai/public/index.php
로그인하라는데, 간단히 엔터치면 됩니다. 비밀번호 및 기능 설정은 조금 이따 하겠습니다.
빨갛게 no 라고 뜨는 게 별로 맘에 들지 않네요. PHP arch 는 파일 크기 측정, PHP를 이용한 압축 및 다운로드 시 지원하는 단일 파일 크기에 영향을 끼칩니다. 오드로이드 XU4의 AP가 32bit라 어쩔 수 없이 2기가 미만의 파일만 파일 크기가 표시되고, 총 용량이 2기가 미만이어야 압축되어 다운로드 할 수 있습니다. 나머지 캐시 및 썸네일 관련해선 하나씩 잡아가겠습니다. 사용하기에 꼭 필요한 작업은 아닙니다.
2. no 잡기
2.1 Public Cache dirextory, Private Cache directory
간단합니다. 캐싱을 위한 디렉토리에 대한 권한이 없다는 뜻입니다. sudo 로 압축을 풀었으니 소유권이 root 겠죠. Nginx의 소유권과 같은 www-data로 바꿔줍시다.
sudo chown -R www-data:nogroup /var/www/html/nas/_h5ai
2.2 Image thumbs
여러 그래픽을 다루는 GD 라이브러리를 PHP와 연동시키기 위한 PHP-GD 라이브러리가 없어서 그렇습니다. apt-get 으로 설치해줍니다.
sudo apt-get install php-gd
2.3 Movie thumbs
ffmpeg 등 오디오/비디오 코덱 라이브러리가 없어서 그렇습니다. apt-get 으로 설치해줍니다.
sudo apt-get install ffmpeg
2.4 PDF thumbs
여러 형식의 이미지 파일을 다루거나 변환하기 위한 ImageMagick 프로그램/라이브러리가 없어서 그렇습니다. PHP와 연동하기 위해 PHP-imagick과 함께 apt-get 으로 설치해줍니다.
sudo apt-get install imagemagick php-imagick
2.5 상태 확인
3. 소프트 링크를 이용한 파일 보이기
직접 h5ai 경로(/var/www/html/nas)에 파일을 넣지 않고도 소프트 링크를 활용해 파일을 보이게 할 수 있습니다.
전 외장하드의 파일들을 전부 보이게 하겠습니다.
제 외장하드 마운트 지점은 /media/externalHdd/ext1, ../ext2 입니다. 제 경우는 다음과 같습니다.
sudo ln -s /media/externalHdd/ext1/ /var/www/html/nas/3.0TB
sudo ln -s /media/externalHdd/ext2/ /var/www/html/nas/1.5TB
그러면 아래 화면과 같이 뜰 것입니다.
4. 마무리 설정
4.1 옵션 변경
_h5ai/private/conf/options.json 을 통해 여러 h5ai의 옵션을 변경할 수 있습니다.
sudo vi /var/www/html/nas/_h5ai/private/conf/options.json
상태 페이지 접근 패스워드, 다운로드 기능 활성화, 미리보기 할 확장자 등 여러 가지 옵션이 제공되니 사용하시면서 입맛대로 바꾸세요
4.2 PHP-JSON 설치
4번째에.. 우분투 서버에선 PHP JSON 지원을 위해 추가 패키지를 설치해야 할 것이라 합니다. 당장 눈에 띄게 안 되는 기능은 없지만, 제작자가 설치하라 하니까 설치합시다.
sudo apt-get install php-json
(옵션) 접속 시 로그인 설정하기
주소만 안다고 아무나 접근해서 파일을 가져가면 안 되겠죠? .htpasswd를 이용해 접근 제어를 해봅시다.
먼저 암호화된 패스워드를 얻기 위해 apache2-utils 를 설치하겠습니다.
sudo apt-get install apache2-utils
그리고 아래 명령어를 통해 /etc/nginx/.htpasswd 파일을 생성합니다.
sudo htpasswd -c /etc/nginx/.htpasswd {사용자이름}
잘 생성됐나 확인합니다.
cat /etc/nginx/.htpasswd
됐을 겁니다. 그리고 이제 해당 파일을 적용시킬 페이지 설정 파일을 수정해야 합니다. NAS 접근 페이지니, nginx/sites-available/nas 를 수정합니다.
sudo vi /etc/nginx/sites-available/nas
root 밑에 블록 안에 아래 두 문장을 추가합니다.
auth_basic "{로그인 프롬프트에 나올 말}";
auth_basic_user_file /etc/nginx/.htpasswd;
마지막으로 Nginx를 다시 로드해줍니다.
sudo service nginx reload
확인해봅니다. 접속 시 아래 프롬프트와 유사하게 나오면 정상입니다.
로그인 해 접속해봅니다.
안전하지 않은 연결을 통해 전송된다고 하는데, 이 부분에 관해선 추후 도메인 + SSL 적용으로 해결하겠습니다. 다른 일들에 치여 서버 구축의 진도가 느리네요..
h5ai 설치를 마쳤습니다. 다 좋지만, txt 등 문서 프리뷰에선 한글이 항상 깨져 나오네요. 코드를 분석해 고쳐보려 했지만 코드에선 UTF-8만 사용하니 깨질 이유가 없는데.. CSS의 설정이나 뭐 다른 문제가 있는 것 같습니다. 해결법을 아시는 분이나 짐작이 가는 게 있으시다면 댓글로 알려주세요 :)
참고 사이트:
a. 본문 내 링크
b. https://www.digitalocean.com/community/tutorials/how-to-set-up-basic-http-authentication-with-nginx-on-ubuntu-14-04
출처 : http://awesometic.tistory.com/19?category=964086