개요
Ubuntu 20.04에 Application Dashboard인 Heimdall을 docker를 사용하지 않고 직접 설치하는 과정을 기술한다. Heimdall은 브라우저들의 즐겨찾기 북마크 초기 화면과 같이 자주 사용하는 서비스의 상태 확인과 연결을 쉽게할 수 있도록 도와준다. nginx 설정을 수정하여 원격의 https 포트를 접속시 localhost의 8000포트로 서비스되는 heimdall에 리다이렉트 시킨다. docker 설치 방법은 많지만 직접 설치와 proxy 설정과 관련하여 간단하게 정리 글을 남긴다.
환경 구축
환경 구축은 참고를 위하여 남긴다. 이미 환경이 설정 되었거나 해당 내용이 필요하지 않는 경우 이 항목을 건너띄어도 무방하다. 간단하게 설치 명령만을 남겨두었기 때문에 상세한 내용은 관련 항목을 검색하여 참고하도록 한다.
패키지 업데이트
ubuntu의 패키지를 최신으로 업데이트하고 설치한다.
$ sudo apt-get update
$ sudo apt-get upgrade
nginx 설치
$ sudo apt install nginx
PHP 설치
아래의 명령을 수행하여 PHP 7.4 버전을 설치하였다. PHP 모듈은 환경에 맞게 필요한 것을 설치한다.
$ sudo apt-get install php-fpm
$ sudo apt-get install php-curl php-gd php-mysql php-mbstring php-xml php-zip php-imagick php-bcmath php-sqlite3
SSL 적용
SSL 적용을 위한 패키지를 설치한다.
$ sudo apt-get install certbot python3-certbot-nginx
방화벽 설정
구동 환경에 맞게 방화벽을 설정한다.
$ sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
$ sudo iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT
$ sudo netfilter-persistent save
Heimdall 설치
heimdall 설치는 How to Install Heimdall Dashboard on Ubuntu 20.04 문서를 참고하였다.
아래 명령으로 heimdall 패키지를 다운로드한다.
$ RELEASE=$(curl -sX GET "https://api.github.com/repos/linuxserver/Heimdall/releases/latest" | awk '/tag_name/{print $4;exit}' FS='[""]'); echo $RELEASE &&\
curl --silent -o ${RELEASE}.tar.gz -L "https://github.com/linuxserver/Heimdall/archive/${RELEASE}.tar.gz"
적당한 위치에 압축을 해제 한다.
$ tar xvzf 2.2.2.tar.gz
Heimdall Dashboard 실행
압축 해제된 위치에서 아래 명령으로 Heimdall Dashboard를 실행한다.
Heimdall-2.2.2$ php artisan serve
PHP 7.4 버전에서는 아래와 같은 오류가 발생된다.
In ArrayInput.php line 135:
Trying to access array offset on value of type int
공개된 Heimdall 패키지가 해당 문제점을 수정하지 않았기 때문에 해당 부분에서 에러가 발생되지 않도록 ./vendor/symfony/console/Input/ArrayInput.php 파일을 아래와 같이 직접 수정한다.
//} elseif ('-' === $key[0]) { } elseif(!is_int($key) && !is_float($key) && $key[0] === '-') { $this->addShortOption(substr($key, 1), $value);
오류를 수정하고 다시 php artisan serve 명령을 실행하고 몇 분 기다리면 서버가 정상적으로 구동된다. 최초 구동시에만 시간이 조금 더 걸린다.
Proxy 설정
기본으로 설치된 Heimdall Dashboard는 로컬 호스트인 127.0.0.1에 8000 포트로 서비스가 구동된다. 외부에서 HTTPS 포트를 통해 접속할 수 있도록 Proxy를 설정한다. Proxy 설정에 앞서 Heimdall의 .env 파일에 APP_URL 항목을 원격에서 접속이 수행될 주소로 설정한다.
해당 설정을 굳이 넣은 이유는 외부에서 접속할때는 메인 페이지가 아닌 서브 디렉토리를 거치게 하기 위함이었다. 해당 디렉토리는 nginx에서 필요에 의한 별도의 설정을 넣을수도 있다. 상황이 된다면 버추얼 호스트로 구동하는게 더 깔끔해 보이지만 개인 선호 때문에 서브 디렉토리로 사용하였다.
APP_URL=https://host.net/heimdall
/etc/nginx/sites-available/default 파일에 아래의 내용을 추가한다.
location /heimdall { proxy_set_header X-Forwarded-Proto https; rewrite ^/heimdall(/.*)$ $1 break; proxy_pass http://localhost:8000; }
nginx 설정 파일 수정 후 설정에 문제가 없는 경우 nginx를 재실행 한다.
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ sudo service nginx restart
Heimdall을 재실행 한 후 원격에서 https://host.net/heimdall/ 에 접속하면 proxy가 적용되어 페이지가 정상적으로 표시되는 것을 확인할 수 있다.
Docker를 이용하면 쉽게 설치할 수도 있지만 내가 옛날 사람이라 그런가 직접 설치가 가능한 경우 굳이 docker를 이용하지 않을려고 한다. 그런데 하고나니 docker로 쉽게 할 수 있는 것을 굳이…라는 생각이 들어서 앞으로는 쉽고 편하게 살아야겠다는 생각이 든다. 개인적으로는 최근 몇(~십)년 동안은 서버 설정을 직접 건드릴 일이 없다보니 낯선 것들이 많지만 막히는 부분이 있더라도 검색에 다 나오니 크게 어렵지 않게 설정이 가능하다.