Ubuntu 12.04에서 LEMP(Linux, nginx, MySQL, PHP) 설정 무난하게 갖추기

| 2014. 7. 17. 19:39

0. 우분투 12.04

썰타임 서버가 종종 힘들어하는 사태가 발생해 단독 서버 호스팅을 마련, 썰타임이 돌아가고 있는 서버를 옮기기로 결정했다. 이미 올해 초에 서버를 한 번 옮겨본 경험이 있기 때문에 크게 부담감을 느끼진 않았지만, 지난 번에 확실히 알았던 것은 OS부터 잘 선택을 해야 서버 세팅의 수고로움을 굉장히 덜 수 있다는 것. 평소 믿고 따르는 개발자 친구에게 그냥 허접이 관리하기 좋은 리눅스를 추천해달라고 했고, 그는 조금도 망설이지 않고 우분투 12.04를 추천했다. 14.04 버전은 어떨지 묻는 내게 "나는 우분투 최신 버전 같은 건 믿지 않아"라고 다른 선택지를 일축했다.

난 전설 같은 거 믿지 않아. http://funz.tistory.com/74

1. Apt-Get 업데이트

우선 디지털오션 ㅡ 참고로 디지털오션의 수많은 리눅스 세팅 가이드는 정말 보고 중의 보고다 ㅡ 의 《How To Install Linux, nginx, MySQL, PHP (LEMP) stack on Ubuntu 12.04》 가이드를 골자로 삼고 진행했다. 가이드의 첫 시작은 Apt-Get의 업데이트다. 그런데 시작부터 문제가 발생했다. 서버에 연결할 수 없다며 자꾸 에러 메시지를 출력한다. 해당 문제의 원인은 DNS와의 연결이 원활하지 않는 것에 있었다. 《apt-get update 에러》 포스트를 참고해서 새 DNS를 설정해서 Apt-Get 업데이트를 무사히 마칠 수 있었다.

2. MySQL 설치

그 다음은 MySQL을 설치였다. 디지털오션의 가이드대로 진행을 하니 아무런 문제 없이 설치가 완료되었다.

3. nginx 설치

데이터베이스를 설정한 뒤엔 nginx를 설치했다. 역시 인스톨에서 실행까지 아무 문제가 없었다. 내 미래가 밝아보였다.

4. PHP 설치

디지털오션은 다음 순서로 PHP를 설치하라고 했다. 그리고 PHP와 nginx의 설정을 대충 시키는 대로 바꾸고 phpinfo()를 뽑는 페이지까지 만들었다. 새로 할당 받은 서버 아이피 주소를 브라우저 주소창에 치니 phpinfo()가 정상적으로 출력이 됐다. CentOS의 서버 세팅과는 달리 모든 것이 너무나 순조로웠다. 행복했다. 눈물이 날 것 같았다. 앞으로 펼쳐져 있는 또 다른 시련들에 대해선 알지 못한 채 말이다.

5. PHP-fpm 설정 변경

그리고 적당한 위치에 썰타임 소스 파일을 Git 클론을 통해 가져왔다. nginx 설정을 썰타임에 맞추고 nginx를 재시작했다. 그런데 문제가 발생한다. 500 에러가 자꾸 뜬다. 무엇이 문제일까 로그를 열어보니 "permission denied"가 문제였다. 모든 코더들의 신인 구글에 물어보니 그의 아들인 스택오버플로우의 링크를 제공하더라. 《nginx error connect to php5-fpm.sock failed (13: Permission denied)》라는 글에서 문제의 해결책을 찾을 수 있었다. PHP 소켓과 관련되어 따로 설정을 해줘야 하는 부분이 있는 모양이다. 문제를 해결하고 나니 접속이 정상화되었다. 물론 .htaccess나 코드이그나이터 자체의 config 등 자잘한 것은 따로 손을 봐야 했다.

사실 굉장히 간단하게 썼지만 나름 한두 시간 정도는 머리를 싸맸던 것 같다. 원래 초보들의 문제는 단순히 모른다는 것에 있지 않다. 초보들의 진짜 문제는 무엇이 문제인지조차 모르다는 것이다. A라는 문제점이 발생했을 때 곧바로 a라는 진짜 원인으로 찾아가는 경우는 드물다. b, c, d 와 같이 문제와는 전혀 상관이 없는 부분에서 헤매는 것이 대부분이다. 그러다가 나중에라도 a의 문제를 고친다면 다행이겠으나 b, c, d와 싸우는 도중에 또 다른 문제를 일으키는 경우 또한 꽤나 자주 있는 일이다. 그래도 예상보다는 빠르게 서버 세팅을 마쳤다.

6. GD 라이브러리 설치

하지만 단순히 "보는" 것에 대한 설정이 끝났을 뿐이다. 예상하지 못한 오작동을 방지하려면 라이브러리부터 버전 확인까지 할 일이 역시 있었다. 우선은 GD 라이브러리부터 설치해보기로 했다. GD 라이브러리 설치는 간단했다. 《How to Install Ubuntu PHP GD》에 따르면 커맨드 한 줄이면 된다. 그리고 phpinfo()를 확인하니 설치가 정상적으로 끝났다.

순서와 상관이 있는지는 모르겠으나 나는 우선 nginx부터 업데이트하기로 했다. 제발, 적당히 안정적인 버전으로 업데이트되길 바라면서.

7. nginx 업데이트

위 단계를 따라왔다면 nginx의 버전은 아마 1.1.19일 것이다. 아무래도 너무 버전이 낮은 것 같아 찝찝했다. 《Upgrading Nginx on Ubuntu 12.04》 포스트를 참고했다. 무리없이 진행됐다.

8. PHP 업데이트

PHP도 버전이 5.2.x였나 그랬을 거다. 역시 찝찝했다. 특히나 PHP 버전에 따른 함수 의존도에 대해 지식이 전무했기 때문에 최소한도 현재 서버의 PHP 버전보다는 높아야 했다. 《Upgrade from PHP 5.3 to PHP 5.5 on Ubuntu 12.04 LTS》 포스트를 참고했다. 전체적인 흐름은 nginx 업데이트와 비슷했다. 역시 문제가 없이 잘 마무리되었다.

1년 정도 웹 개발을 하면서 느낀 것은, 단 한 번만 할 작업이라는 게 존재할 가능성이 거의 0에 가깝다는 것이다. 이번 한 번만 하고 말 거라 생각하고 일을 하면 머지 않아 같은 일을 하면서 그 당시에 왜 간단한 기록이라도 남겨놓지 않았는지에 대해 아쉬움을 가지는 경우가 많았다. 그래서 날림으로나마 우분투 12.04 서버 세팅법을 적었다. 분명히 이렇게 진행했고 최소한 썰타임 서비스를 돌리는 것까진 문제가 없었다. 썰타임의 개발자로서 계속 일을 하는 한, 우분투 14.04가 안정화되지 않는 가정 하에, 언젠가는 또 써먹을 것 같다. 그런 느낌이 강하게 든다.

그리고 그랬으면 좋겠다.