Skip to content

The Heartade Space

첫 번째 포스트 (사실 두 번째)

September 02, 2019

세상에 블로그 호스팅 업체가 얼마나 많은데, 왜 블로그를 직접 호스팅하겠다는 생각을 했을까요? 사실 그냥 별 건 없고, 한 달에 8달러씩 내며 쓰는 VPS 공간이 아까워서 그랬습니다. 원래는 마인크래프트 서버를 돌리고 있었는데, 현생이 바빠서 마인크래프트를 할 시간이 없더라고요!

하지만 그 때는 몰랐습니다. 한 달에 8달러짜리 VPS가 아까워서 시작한 블로그가 수십 시간을 잡아먹게 될 줄은요. 최저시급으로 따져도 이 블로그를 몇 년은 굴려야 제 노동력만큼의 가치를 뽑아낼 수 있게 된 셈이니, 꾸준히 굴려야겠습니다.

어디서부터 잘못되었나

일단 가장 큰 문제는 제가 서버를 건드려 본 적이 없을 뿐더러 이 서버의 세팅을 전혀 이해하지 못한 상태였다는 것입니다. 이 서버는 예로부터 고등학교 친구인 오브가 관리하고 있었는데, 이때까지 마인크래프트 서버와 제 개인 사이트 등을 호스팅하느라 서버 설정을 꾸준히 건드린 끝에 사실 설정한 사람도 뭐가 어떻게 설정되어 있는지 모르는 상태가 된 거죠.

SSH에 오랜만에 접속하자마자 “server.covalent.ga”는 알 수 없는 호스트네임이라는 에러가 떴는데, 그런 DNS 세팅을 한 적도 없으니 당연한 거였습니다. 왠지 DNS 세팅은 한 적이 없는데 SSH 호스트네임은 그런 설정이 되어 있더라고요. 일단 /etc/hosts 파일에 들어가서 server.covalent.ga 로 가는 트래픽을 전부 127.0.1.1로 돌려 버려서 대강 해결은 했는데 (이러지 마세요), 이는 이 뒤로 엄청나게 벌어질 문제들의 전조에 불과했습니다.

그래도 무식이 용감이라고, 저는 서버를 세팅해 보기로 했습니다. 지금은 구글 찾아보면서 적당히 시작해 보면 언젠가는 백엔드 엔지니어가 될 수도 있겠다는 마음가짐으로 카페에서 노트북을 펼쳤습니다.

일단 원래 있던 사이트를 옮기고…

원래 http://covalent.gahttp://hearta.de 는 React로 만들었는데, Webpack Dev Server로 그대로 굴러가고 있었습니다 (이러지 마세요 2). 블로그를 만들기로 한 김에 이 해묵은 문제도 뜯어고치려고 Nginx로 대대적인 이전을 하기로 했죠!

Nginx로 이전 자체는 잘 된 것 같았습니다. 사이트에 접속이 안 된다는 것만 빼면요. 로컬에서는 아무런 불만이 없는데, 이상하게도 제 컴퓨터에서 접속하려고 하면 502 게이트웨이 에러를 내는 것이었습니다. 생각해 보니, Webpack Dev Server의 포트 기본값은 3000번 포트로 설정되어 있다는 점이 기억났습니다. 혹시나 하는 마음으로 Nginx 설정에서 listen 포트를 3000으로 바꿔 보았는데, 역시 트래픽이 3000번 포트로 포워딩되고 있었습니다.

문제는 제가 포트 포워딩을 설정하는 법을 모른다는 거였죠. 그 설정은 예전에 오브가 해 놓았는데, 본인도 기억이 안 난다고 하여 수 시간을 이 문제와 씨름하고 있었습니다. 나중에야 iptables에서 쉽게 바꿀 수 있다는 걸 알게 되어 간단하게 문제가 해결되었는데, 저는 포트 설정은 당연히 공유기에서 하는 줄 알았으니 VPS 호스팅 사이트에서 세팅해야 하는 줄 알았거든요.

아무튼 기존 사이트들이 제대로 돌아가기 시작했으니, 이제 블로그를 꾸릴 차례였습니다!

GhostCMS 도전기

워드프레스는 너무 무거워 보였기 때문에, 아무 CMS를 하나 골라 보기로 했습니다. 일단 자연스럽게 구글에 “best open source cms” 같은 쿼리로 검색을 해 보고… 아무 링크를 들어가 봤는데 (약간 네이버에서 “강남 맛집” 이라고 검색하는 느낌이죠) GhostCMS라는 걸 추천하길래 사용해 보기로 했습니다.

근데 작동이 안 되더라고요. 굉장히 다양한 오류를 만난 뒤에 결국 포기했는데, 그 목록은 다음과 같습니다.

  • Cannot connect to MySQL Database 오류. Ghost 설정에서 MySQL 호스트네임을 localhost로 설정했는데, 실제 MySQL 호스트네임은 server.covalent.ga 로 되어 있었기 때문에 발생한 오류인 모양이었습니다. 결국 /etc/hosts 에서 때워 놓았던 설정을 갈아엎고 서버 호스트네임을 갈아엎었습니다.
  • Failed to communicate with Ghost 오류. 로그를 보면 Ghost가 MySQL을 비밀번호 없이 root 계정으로 불러오려고 시도하다가 거절당하고 뻗는데, Ghost 설정 파일에는 분명히 따로 MySQL 계정을 설정해 뒀기 때문에 도무지 왜인지 알 수가 없었습니다. 결국 여기서 포기하고 다른 대안을 찾기로 했습니다.

PicoCMS 설정하기

결국 그냥 가볍고 쉬운 시스템을 찾다 보니 PicoCMS가 눈에 들어왔습니다. 완전한 관리 기능을 제공하는 CMS는 아니지만, 어쨌든 제가 원하는 기능은 다 있었거든요. 설치가 쉬운 점이 특히 마음에 들었고, 재빨리 설치를 했는데… 문제가 안 생길 리 없었습니다. 웹사이트 주소로 들어가면 사이트가 표시되는 게 아니라 index.php 파일을 다운로드해 버리는 것이었습니다.

찾아 보니, Nginx는 기본적으로는 PHP를 제공하지 않는다는 것 같더라고요. 그래서 적당히 인터넷에 있는 설정을 쓰려고 했는데, 리눅스도 PHP도 처음인 저에게는 당황스러움의 연속이었습니다.

  • 대부분 튜토리얼에는 php 5.0을 쓰라고 적혀 있는데, 제 서버에 깔린 버전은 7.0이었습니다.
  • php fpm 설정이 어디에 있는지 다들 하는 이야기가 달랐습니다. /etc/php5/fpm에 있다는 튜토리얼이 대부분이었는데, 제 서버에서는 /etc/php/7.0/fpm에 있더라고요.
  • 당연히 sock 파일이 어디 있는지도 사람마다 달랐습니다. 저는 소켓이 뭔지도 잘 모르겠는데, 일단 시키는 대로 했더니 안 되더라고요!
  • www.conf 파일에서 유저 이름을 입력하는 란이 있길래 당연히 제 유저 이름인 줄 알고 입력했는데, 알고 보니 Nginx는 nginx 명령어를 실행한 유저 계정에서 실행되는 게 아니었습니다.

이런 수많은 문제를 해결한 다음에야 - 하나에 몇 시간씩은 걸렸습니다 - 그리고 PicoCMS를 설정하면서 한 번 완전히 갈아엎은 다음에야 (그래서 이 포스트는 “사실 두 번째 포스트” 입니다) 드디어 이 블로그가 돌아가기 시작했습니다. (박수!)

##마치며 대충 블로그 세팅하기 힘들었다! 라는 넋두리입니다. 근데 PHP 세팅만 잘 되니까 PicoCMS가 좋긴 하네요. 여러분도 블로그 PicoCMS로 굴리세요. 아니다, 그냥 미디움 계정이나 만드는 게 좋겠습니다. 서버비 아깝다고 벌린 일 치고는 너무 힘들었거든요. 그래도 이렇게 맨땅에 헤딩이라도 계속 하다 보면 언젠가는 저도 환상의 존재라는 풀스택 엔지니어가 될 수 있지 않을까요?

##덧붙임 (9-3-2019 17:14) 서버를 고치는 동안 새벽에 갑자기 불려나와 설정을 만져 준 오브와 그걸 구경하다가 기숙사 통금을 놓쳐 새벽에 눈물의 국밥을 먹은 별 후배님께 특별히 감사의 말씀을 드립니다.


Daniel S. Park
Front-End / Interactive Media Developer