이노베이션 아카데미_42Seoul/오십보백보

오십보백보 ft_server 시작하기

한땀코딩 2020. 4. 1. 13:31

들어가기에 앞서

저는 웹 서버나 도커에 대한 지식이 0인 상태로 시작했습니다. 과제를 시작하기 전에는 '도커'와 '웹 서버'라는 단어만 들어봤고 이에 대한 개념은 지금도 명확하진 않습니다. 그런 이유로 구체적인 내용이나 근본적인 부분은 크게 설명해 드리지 못하는 점 이해 부탁 드립니다!

제가 작업한 환경은 macOS Catalina 버전 10.15.3 입니다. 우분투나 윈도우에선 다른 부분이 많을 수 있으니 염두에 두고 봐주시면 감사하겠습니다.

미션

ft_server를 매우 광범위하게 정의한다면, 도커 기술을 활용하여 웹 서버를 만드는 것입니다. 그리고 이 웹 서버는 다음과 같은 조건을 충족하면 됩니다.

  • 웹 서버는 Nginx를 이용해서 설치하며, 하나의 도커 컨테이너만 설치합니다. 이 컨테이너의 OS는 데비안 버스터입니다.
  • 여러분의 웹 서버는 여러 서비스가 연동되어야 합니다. 여기서 말하는 서비스는 다음을 의미합니다 - Wordpress 웹사이트, phpMyAdmin, MySQL. SQL 데이터베이스는 phpMyAdmin과 워드프레스에서 연동하여 사용이 가능하여야 합니다.
  • 여러분의 서버는 SSL 프로토콜을 사용할 수 있어야 합니다.
  • url에 따라서 정확한 웹사이트로 연결될 수 있도록 처리해야 합니다.
  • 언제든 해제할 수 있는 autoindex가 적용되어야 합니다.

????? 암호인가????

위에서 설명하고 있는 기술에 대해 기본 지식이 전혀 없는 상태에서는 어떤 것을 하라는 것인지 이해하기가 굉장히 난해했던 기억이 납니다. 개인적으로 자료를 찾아가며 과제가 요구하는 대로 설치를 해보면 다음과 같은 형태가 된다고 보면 편할 것 같습니다.

쉽게 생각하자면, 내 컴퓨터를 작동시키는 OS가 있을 것인데, 그곳에 우선 도커라는 프로그램을 설치하고, 도커를 이용해 가상의 환경(소위 컨테이너라고 불립니다)에 '데비안'이라는 OS를 설치하고 그 OS가 설치된 환경에 웹 서버를 구축하는 것입니다. 그리고 이 웹 서버는 Nginx(아파치를 아신다면 그것의 대체재 정도로 이해하셔도 좋을 것 같습니다) 를 통해 구축될 것입니다. 그리고 위의 미션에서도 보았듯이 이 웹 서버는 MySQL을 이용해 제작한 데이터베이스에 접근할 수 있는 워드프레스 웹사이트와 phpMyAdmin을 구동할 수 있어야 합니다.

그러면 대체 어디부터 개념을 공부하고 설치를 시작하면 좋을까가 제 고민이었습니다. 처음에는 등장하는 모든 기술과 프로그램을 심도 있게 이해하고 설치를 진행하려 했으나, 눈으로 동작하는 것을 보지 않은 채로 개념만 이해하는 것이 더 소모적이라고 느껴서 ft_server 관련 깃허브 레포와 여러 튜토리얼 영상, 자료 등을 참고하며 그때그때 필요한 개념을 익히는 방향으로 진행했습니다.

 

그렇다면 다짜고짜 설치부터 해보는 것은 좋은데, 저 많은 것 중에 무엇이 가장 먼저 설치되어야 하는가! 도커의 개념을 모르는 채로 저는 제 Host OS (그러니까 제가 작업을 하는 macOS)에 바로 nginx등을 설치하다가 피를 보았고... 경건한 마음으로 다시 시작하기 위해 도움을 요청했습니다. 여러 정보를 기반으로 제가 선택한 진행 순서는 아래와 같습니다.

  1. 도커 개념 공부 (가상 머신과 어떻게 차별화되는가 위주로).
  2. 도커 설치
  3. 데비안 버스터를 기반으로 하는 도커 컨테이너 생성
  4. 도커파일 사용법 공부 및 작성 시작
  5. nginx 설치
  6. php 설치
  7. mySQL(mariaDB) 설치
  8. phpmyadmin 다운로드 및 설치
  9. 워드프레스 다운로드
  10. SSL, autoindex 설정

참고로 도커파일의 경우, 모든 과정을 다 하고 작성을 시작하자니 너무 반복적인 작업이 많아서, 하나라도 성공하면 그 코드를 도커파일에 계속 추가하여 거기서부터 다시 빌드하여 작업하는 방식으로 진행했습니다. 즉, 개인적으로는 도커파일의 용도와 문법을 먼저 파악하고 작성해나가면서 하나하나 설치하는 것이 좋다고 생각합니다.

 

하지만 저는 도커파일이 뭐지...? 단계부터 시작했기 때문에 이걸 깨닫는 데도 시간이 걸렸습니다. 그래서 지금부터는 도커부터 워드프레스까지 제가 이해한 정도의 간단한 개념 소개와 함께 설치 접근 방법을 간략하게 적어보려고 합니다.

도커

위키피디아에서 찾아온 도커 페이지의 설명 첫줄입니다.

Docker is a set of platform as a service (PaaS) products that uses OS-level virtualization to deliver software in packages called containers.

못 알아먹겠다

그래서 도커란 대체 뭘까요.... 구글 검색창에 '도커란'만 계속 검색하다 결국 저는 공식 웹사이트에 찾아가보기로 했습니다 (순서가 잘못 된 걸 이 때 알았습니다. 공식 documentation을 보는 걸 생활화 합시다)

 

What is a Container? | Docker

A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another. Learn more.

www.docker.com

위의 링크는 도커 공식 웹사이트에서 직접 설명하고 있는 '컨테이너'의 개념입니다. 도커 자체가 어떤 기능의 이름이라기보다, 도커는 플랫폼의 이름이고 그 안에 나오는 image 와 container의 개념을 이해할 필요가 있습니다.

해당 링크에 들어가보면 이렇게 virtual machine과 container가 차이, 그래서 왜 도커가 훨씬 가볍고 빠르다고 할 수 있는지에 대해 개괄적으로 서술하고 있습니다.

 

VIRTUAL MACHINES

 윈도우 환경에 리눅스를 사용하기 위해 가상 환경을 설치해본 경험이 있는 분들은 많으실 것 같습니다. 보통 리눅스를 윈도우 환경에 설치할 때, 가상환경을 만들 수 있는 프로그램을 받아와서 내 컴퓨터의 용량 공간과 기타 하드웨어 성능을 소위 부분적으로 떼어서 개별적인 환경을 구축할 수 있게 공간을 할당해줍니다. VMware가 예시가 될 수 있겠네요.

가상 머신 (virtual machine)은 하드웨어를 추상화하여 하나의 서버를 여러 서버로 만들어줍니다. 각각의 가상 머신은 os의 완전 복제라고 볼 수 있는데, 이 때문에 용량을 굉장히 많이 차지하게 되고 부팅이 느릴 수 있습니다.

 

CONTAINERS

 그렇다면 가상머신과 비교하여 컨테이너는 어떤 느낌일까요. 가상 머신과 다르게, 컨테이너는 하드웨어를 분리하지 않고 하나의 머신 위에서 동작하며 OS 커널도 공유한다고 합니다. 그러나 각각의 컨테이너는 서로 독립적으로 작동할 수 있습니다.

지금도 이렇게 요약된 걸 읽어도 구체적인 부분이 어떻게 다른지는 알 수는 없지만, 기존에 사용하던 가상 머신의 개념에서 조금 더 효율적인 방법을 고민하다 나오게 된 기술이라고만 이해하고 넘어가도 좋을 것 같습니다.

 

IMAGE & CONTAINER

 도커에는 image와 container라는 개념이 등장합니다. 컨테이너는 말 그대로 무언가를 담을 수 있는 것인데, 위의 설명을 통해 대충 유추해보면 하나의 os를 기반으로 작동하는 환경을 담고 있을 것 같습니다. 그 환경 위에 우리는 원하는 프로그램이나 어플리케이션을 제작하여 배포할 수도 있을 테고, 그중 저희는 웹 서버를 만들어내는 것이 목표입니다.

그렇다면 이미지는 무엇일까요? 이미지는 단순하게 생각하면 컨테이너를 만들어내기 위한 틀 같은 것으로 생각하면 됩니다. 하나의 이미지로 여러 컨테이너를 생성할 수 있습니다. 적절한 비유일지는 모르겠지만, 객체지향에서 class와 instance의 개념을 붕어빵 틀과 붕어빵으로 누군가 제게 설명해주신 적이 있는데 이미지와 컨테이너도 비슷한 관계성이라고 느껴집니다. 그 붕어빵이 각기 다른 팥 양과 반죽으로 생성될 수는 있겠지만 틀은 바뀌지 않는 느낌?

저는 도커 전문가가 아니기 때문에 구체적인 내용을 소개하기엔 부족함이 있어서 간략하게 제가 참고한 학습 자료를 공유해보려고 합니다.

 

https://www.youtube.com/watch?v=JSLpG_spOBM

오디오 & 영상 자료가 좋으시다면 이 영상을 간단한 소개라고 생각하고 보셔도 좋을 것 같습니다.

 

 

#LearnDocker

Play with Docker Play with Docker is an interactive playground that allows you to run Docker commands on a linux terminal, no downloads required. Log into https://labs.play-with-docker.com/ to access your PWD terminal Type the following command in your PWD

www.docker.com

도커의 공식 튜토리얼 자료입니다. 이미지를 통해 컨테이너를 만드는 법, 포트를 활용해 웹 서버를 생성하는 것이 어떤 것인지를 체험해볼 수 있습니다. 저는 도움이 많이 되었는데, 나중에 발목을 잡은 부분은 제 로컬호스트 포트 80번에 계속 tutorial 페이지가 뜬 채로 사라지지 않았다는 점입니다. 강제로 포트에 연동된 서버? 프로그램? 을 닫는 방식으로 해결은 했으나, 이게 적절한 대처였는지는 아직도 잘 모르겠습니다.

Dockerfile

도커를 대략적으로 이해했다면 그 다음은 도커파일을 이해할 필요가 있습니다. ft_server의 subject introduction에는 다음과 같은 내용이 있습니다.

This topic is intended to introduce you to system administration. It will make you aware of the importance of using scripts to automate your tasks. For that, you will discover the "docker" technology and use it to install a complete web server.
해석: ft_server는 시스템 관리 개념을 소개하기 위한 과제입니다. 스크립트를 이용해 업무를 자동화하는 것의 중요성을 깨닫게 될 것입니다. 이를 위해 '도커' 기술을 학습하고 완전한 웹 서버를 설치해 봅시다.

스크립트를 통한 업무의 자동화가 도커파일과 연관된 부분이라 생각하면 됩니다. 도커파일은 Docker build 명령어와 함께 쓰이는 파일로 도커 이미지를 명령어 하나로 자동으로 생성할 수 있게 해주는 파일입니다. 마치 Makefile 과 make 명령어의 관계처럼 말이죠!

도커파일은 Makefile처럼 나름대로의 문법과 규칙이 있습니다. 주로 사용하시게 될 도커파일의 명령어에는 RUN, COPY, FROM, CMD 등이 있는데, 이 외에는 몇 가지가 더 있으니 도커 공식 도큐멘테이션이나 도커 강의를 참고하시면 됩니다.

도커파일이 있는 디렉토리에서 아래처럼 명령어를 입력하면 도커파일에서 적어놓은 대로 이미지를 build하고 컨테이너를 생성해 실행하게 됩니다.

docker build -t ft_server . docker run -it --rm -p 80:80 -p 443:443 ft_server

각각의 옵션과 명령어가 어떤 의미인지는 도커파일을 직접 작성하면서 익혀보시면 좋을 것 같습니다. 80이나 443은 포트 번호와 관계가 있는 부분이고, 윗줄의 .은 shell에서 현재 디렉토리를 의미하는 온점이니 헷갈리지 마세요! run 명령어의 옵션은 여러가지가 있는데, 그 중 제가 적용한 것은 커맨드 라인 입력을 위한 부분과, 컨테이너가 종료되면 해당 컨테이너를 바로 삭제하는 것과 관련되어 있습니다.

 

어디서 시작할까요?

위의 개념적인 부분을 각설하고 말씀을 드리자면 이렇게 요약 됩니다.

도커 설치 → 데비안 버스터 이미지 빌드 → 이미지를 활용하여 컨테이너 생성 → 해당 컨테이너의 터미널 창에서 명령어 입력이 가능한지 확인.

이것을 완료했다면 기본적인 도커의 세팅은 성공이라고 보시면 됩니다. 이제 이 위에 필요한 각종 소프트웨어를 설치해야합니다. 이야 신난다

Nginx

어떻게 읽는 거지

 

Welcome to NGINX Wiki! | NGINX

Welcome to NGINX Wiki! NGINX is a free, open-source, high-performance HTTP server and reverse proxy, as well as an IMAP/POP3 proxy server. NGINX is known for its high performance, stability, rich feature set, simple configuration, and low resource consumpt

www.nginx.com

엔진엑스는 공식 웹 사이트에서 아래와 같이 설명하고 있습니다.

NGINX is a free, open-source, high-performance HTTP server and reverse proxy, as well as an IMAP/POP3 proxy server. NGINX is known for its high performance, stability, rich feature set, simple configuration, and low resource consumption.

엔진엑스는 무료로 제공되는 오픈소스 웹 서버 프로그램입니다. 웹 서버에 대한 지식이 없는 입장에선 프록시 같은 생소한 개념도 등장하지만, 단순하게 생각하면 우리가 만드는 (ft_server의 경우 워드프레스를 이용해 만든 웹페이지 정도로 이해하면 될 거 같습니다) 웹 페이지에 서버 기능을 붙여 다른 컴퓨터에서도 인터넷을 통해 접속할 수 있게 해주는 거라고 보면 됩니다.

 

엔진엑스의 설치는 간단합니다. 터미널에 apt install nginx 정도만으로도 바로 설치가 됩니다. 설치를 마치고 나면 service nginx start 명령어를 통해서 엔진엑스를 실행할 수 있습니다.

 

도커 컨테이너를 실행할(run) 때 포트 연결을 잘 해주셨다면 아마 본인의 원래 os에서 웹브라우저를 열어 http://127.0.0.1:80 url로 접속하면 nginx 의 웰컴 페이지를 보실 수 있을 겁니다. 그렇다면 nginx 설치까지는 성공이라고 보시면 됩니다!

 

지금부터는 nginx의 conf 파일과의 전쟁이 됩니다. 이 conf 파일은 기본적인 설치를 진행했다면 /etc/nginx/sites-available/ 디렉토리에 default란 이름으로 존재할 겁니다. 이 파일은 다른 위치로 symbolic link(일종의 바로가기, 복제품) 가 걸려있어서 파일명을 바꾸면 작동하지 않는 문제가 생기니 주의하시길 바랍니다. 이제 서비스를 추가할 때마다 해당 파일의 내용을 조금씩 수정해 나간다고 이해하시면 좋을 거 같습니다.

php 설치

 

Ubuntu 18.04 / Nginx, PHP, MariaDB 설치하고 설정하기

Ubuntu 18.04에 Nginx와 PHP를 설치하고 설정하는 방법입니다. Nginx 설치 Nginx를 설치합니다. apt install nginx 만약 방화벽을 사용하고 있다면 포트를 열어줍니다. ufw allow 'Nginx Full' 서버 주소로 접속했을 때 다음과 같이 [...]

www.manualfactory.net

(nginx, php, mysql 까지 설치하는 코드가 적혀있는 링크. 저는 이 페이지를 참고하여 mysql까지 설치했습니다.)

php의 설치 또한 커맨드라인에 명령어를 입력하는 것으로 진행이 가능합니다. 설치 및 default파일 수정 방법은 위에 첨부한 링크에서 상세하게 설명하고 있으니 참고 하시면 좋을 것 같습니다.

 

php는 동적 페이지를 위해 필요한 기술입니다. 워드프레스 웹사이트 또한 php 기반이어서 php가 설치되어 있어야 정상적으로 작동이 가능합니다. 위의 링크를 참고하면서 제가 한 가지 궁금했던 것은 php-fpm 이라는 것인데, 이에 대해서는 아래 링크에서 설명해주고 있습니다. php를 설치할 때 몇가지 방법이 있는 것으로 보이는데, php-fpm도 그 중 하나로 추측됩니다.

 

what is php-fpm

php-fpm 이란 ?보통 nginx + php-fpm 이런 조합을 많이 볼 수 있습니다. nginx는 apache 처럼 웹 서버 중 하나입니다. 그렇다면 php-fpm은 무엇일까요? nginx 웹서버(정적인 html 웹문서 파일을 웹브라우저에 전송해주는 역할)만으로는 동적인 페이지 구현이 어렵다 -> 동적인 페이지 구현이 필요 -> 웹서버 이외

seunguklee.github.io

MySQL 설치

어떻게 읽는 거지2

마이 시퀄, 마이 에스큐엘 등등... 이 프로그램은 다양하게 읽히는 거 같으니 취향대로 읽어주시면 됩니다.

언제나처럼 새로운 개념이 등장하면 공식 웹사이트나 위키피디아를 검색해 봅시다. 위키피디아는 MySQL을 다음과 같이 정의하고 있습니다.

MySQL is an open-source relational database management system (RDBMS).
해석: MySQL은 오픈소스 관계형 데이터베이스 관리 시스템입니다.

정의를 찾아보면 계속 새로운 개념이 등장하기 때문에 그렇게 찾아보는 나름의 재미도 있습니다만, 과제를 해결하기 위한 짧은(엉성한) 요약을 해보자면 이렇습니다.

 

웹사이트, 특히 동적 웹사이트(간단하게 말해 로그인, 게시물 작성 등 사이트를 사용하는 사람들이 여러 활동을 할 수 있는 사이트라고 생각해봅시다) 만들게 되면 수많은 데이터를 어딘가 저장해둘 필요가 생깁니다. 단순히 생각해서 로그인 기능을 활성화하려면 웹사이트가 참고할 유저 id, 비밀번호가 담긴 데이터를 관리하는 것이 필요하겠죠? 이런 여러 종류의 데이터가 들어 있는 것을 데이터베이스라고 생각해봅시다. 그럼 이런 데이터베이스를 조작하고 조회하는 행위가 가능해야만 웹 서버 측에서 로그인을 시켜줄 수 있을 겁니다. 이걸 가능하게 하는 프로그래밍 언어가 SQL입니다.

 

그럼 관계형 데이터베이스는 또 무엇인가! 이 또한 쉽게 생각하면 테이블 형태로 관리되는 데이터의 집합이라고 보시면 됩니다. 유저의 id와 연관된 데이터에는 비밀번호도 있겠지만, 그 id가 작성한 게시물, id의 프로필 사진 등등 여러 가지가 있습니다. 이를 하나의 테이블에 우겨놓고 관리하기는 비효율적이니, 여러 테이블로 나눠두고 이후에 서로 id라는 하나의 관계성으로 연결해두고 쉽게 접근할 수 있게 하는 느낌이라고만 이해해도 지금 단계에서는 충분하다고 봅니다.

 

그러니 결론적으로 MySQL은 우리가 관계형 데이터베이스를 생성하고 관리할 수 있도록 도와주는 프로그램인 셈입니다.

이렇게 생각하면 nginx를 통해 외부로 공개하는 웹사이트도 어떠한 데이터베이스가 있으면 좋을 거 같네요! 그걸 위해 MySQL을 설치해서 데이터베이스를 생성하고 그렇게 생성된 데이터베이스를 저희가 만들 워드프레스 웹사이트에 사용하라고 연결해주면 됩니다. 이 연결은 후에 워드프레스를 다운받아 압축을 풀 때 진행하시면 됩니다.

 

주의 사항

service php7.3-fpm start
// 이건 설치한 php 버전에 따라 달라질 수 있습니다.
service nginx start
service mysql start

위에서 설치한 세 가지 프로그램은 모두 커맨드 라인에서 start를 해주지 않으면 실행되지 않습니다. 실행되지 않으면 404 not found가 뜨거나 502 gateway오류 페이지가 뜨게 됩니다. 이 start 코드들은 한번 실행했다고 끝이 아니고 새로운 걸 설치하거나 설정 파일을 변경할 때마다 다시 reload를 해주어야 합니다.

 

참고로 Dockerfile에서 RUN 명령어로 start를 적어두는 것은 작동하지 않습니다. 컨테이너가 실행된 후, 해당 코드들이 커맨드 라인에 입력되어야 하기 때문에 CMD 명령어가 어떤 기능을 하는지 알아보시고 적용해보시는 걸 추천드립니다!

phpMyAdmin

이름 때문에 처음에는 php와 관련된 것이라고 생각했었는데, phpMyAdmin은 mySQL의 사용과 관련이 있습니다. phpMyAdmin을 요약하자면, php를 기반으로 생성된 mySQL의 GUI (Graphic User Interface) 로 웹에서 실행할 수 있는 프로그램입니다.

 

phpMyAdmin

Your download should start soon, if not please click here. Please verify the downloaded file Please take additional steps to verify that the file you have downloaded is not corrupted, you can verify it using the following methods: phpMyAdmin needs your con

www.phpmyadmin.net

phpMyAdmin은 쉽게 생각하여 데이터베이스를 gui로 편하게 관리할 수 있도록 도와주는 서비스라고 보시면 됩니다. 개념보다도 주목해야 하는 점은 데비안 버스터에서 phpMyAdmin이 커맨드 라인 install로는 설치가 되지 않는다는 점입니다. 워드프레스와 phpMyAdmin 모두 압축파일을 받아와서 압축을 푸는 방식으로밖에 데비안 버스터에는 설치할 수 없습니다.

 

직접 설치가 아니다 보니, 검색해보면 데비안 버스터 phpMyAdmin 설치 방법은 굉장히 다양한 것이 소개되고 있는데 우선은 제가 선택한 방법만 간략하게 소개를 드리겠습니다. 이 방법이 완전히 옳은 것인지는 모르겠으나, 우선 웹 브라우저를 통해

http://127.0.0.1/phpmyadmin url에서 phpmyadmin을 접근할 수 있게는 성공했으니 참고하시면 좋을 것 같습니다.

wget https://files.phpmyadmin.net/phpMyAdmin/4.8.2/phpMyAdmin-4.8.2-all-languages.zip

우선은 웹사이트에서 직접 압축파일을 받아옵니다. 저장 위치는 커맨드라인 인스톨을 진행했을 때 설치되는 디렉토리인 /usr/share/에 받아서 압축을 해제했습니다.

 

 

How To Install phpMyAdmin with Nginx on Debian 10

phpMyAdmin is a free and open-source, web-based tool for managing the MySQL and MariaDB servers. It is widely used to manage

www.itzgeek.com

압축을 해제하고 나면 설정 파일을 조금 고쳐줘야 합니다. 압축을 풀어 나온 디렉토리를 살펴보면 config.inc.php 같은 이름의 파일이 있을 텐데, $cfg['blowfish_secret'] 라고 적힌 부분이 있습니다. 여기에 코드를 생성하여 입력해줘야 하는데 이 부분은 위의 링크를 참고하여 진행해보시면 좋을 거 같습니다.

 

이렇게 설정 파일도 변경이 완료됐다면 이제 웹 서버 측에서 접근할 수 있는 위치에 phpmyadmin 소스 파일을 옮겨주게 됩니다. 위에서 상세하게 설명하지는 않았지만, 이 단계까지 왔다면 아마 엔진엑스와 연동할 웹페이지를 생성하고 저장하는 디렉토리가 어디인지 확인이 되실 텐데, 그곳에 phpmyadmin 폴더의 소프트 링크를 생성해주시면 됩니다.

Wordpress

워드프레스는 .org 와 .com 두 가지로 나뉘는데 저희가 사용하는 것은 wordpress.org에서 제공하는 설치형 블로그의 소스 파일입니다. 다운로드에 가서 압축 파일을 받아 압축을 해제해보면 웹사이트를 구성하는 데 필요한 소스가 들어있습니다. 여기에 플러그인이나 테마 등을 자유롭게 적용할 수 있는 것으로 이해하고 있습니다만, 저도 워드프레스로 백지부터 사이트를 제작해본 경험은 없기 때문에 이 정도로만 이해하고 진행했습니다.

 

Download

Download WordPress today, and get started on creating your website with one of the most powerful, popular, and customizable platforms in the world.

wordpress.org

phpMyAdmin을 설치할 때처럼, 워드프레스도 install 커맨드 라인으로는 설치가 안 되니, 직접 압축파일을 다운받는 방식으로 진행하게 됩니다. 이 압축 파일의 내용을 풀어야 하는 곳은 phpmyadmin을 소프트링크 걸었던 곳과 마찬가지겠죠? 압축을 풀면, 해당 폴더 안에 wp-config 이름의 파일이 있을 겁니다. 여기서! 데이터베이스와 워드프레스를 연동하는 걸 진행하게 됩니다.

위에서 mySQL 을 설치하는 이유를 말씀 드렸는데 이제 이 단계에서 체감을 하실 수 있을 것 같습니다.

연동을 어떻게 하면 되는가? 아래 링크를 참조 드립니다만, 참고하시기 전에 조금 더 풀어서 설명을 드리자면 해야하는 일은 다음과 같습니다.

  1. MySQL을 사용하여 워드프레스가 사용할 데이터베이스 생성 (과제를 제출하는 정도에서는 구체적인 데이터가 채워져있어도 되고 아니어도 무방한 것으로 보입니다. 하지만 실제 웹사이트를 구축하려면 빈 데이터베이스는 의미가 없겠죠!)
  2. wp-config 파일에 어떤 데이터베이스를 사용하는지, 유저명, 등등을 입력해주어 연동하기
 

CentOS7 에 Nginx + PHP 7 + Mysql + Wordpress 설치

버전 정보 nginx : 1.10.2 php : 7.1.9 mysql : 5.7.19 NGINX 버전 : 1.10.2 1. EPEL 저장소 추가 # yum -y install epel-release 2. Nginx 설치 # yum --enablerepo=epel -y install nginx 3. Nginx 시작 # syste..

noonestaysthesame.tistory.com

모든 것이 잘 적용됐다면 [<http://127.0.0.1/wordpress>](<http://127.0.0.1/wordpress로>) 로 들어가면 워드프레스 언어 선택 창 같은 것이 뜰 겁니다. 데이터베이스 연동을 해주지 않아도 해당 페이지는 잘 뜨는 것으로 알고 있습니다만, mySQL의 설치 목적은 당연히 우리의 웹 서버에서 사용할 데이터베이스 생성을 위함이니 연동하는 작업도 꼭 진행하시고 넘어가시는 걸 추천 드립니다. :)

SSL 과 autoindex

개인적으로... SSL과 autoindex 부분은 서칭을 해봐도 제 기반지식이 너무 부족한 탓인지 설명을 드릴 만큼의 이해를 하지 못한 상황입니다 (...) 그래도 참고해서 진행한 자료들이 있고, 그다지 복잡하지는 않으니 제가 한 부분 정도만 간략하게 공유 드리겠습니다.

 

우선 SSL의 경우는, http 대신 https 를 사용하게 하여 사이트의 보안을 강화하는 작업 정도로 이해했습니다. 사이트의 보안 인증서를 발급받아 등록하는 작업이 필요하다고 합니다. 과제를 진행하면서 알게 된 점 중에서는, SSL 프로토콜을 사용하는 사이트는 보안도 보안이지만, 구글 등에서 검색 시 조금 더 상단에 노출되도록 해준다고 합니다. 이 보안 인증서가 없으면 안전하지 않은 사이트라고 경고 페이지가 뜨고, 고급 옵션을 누르면 위험을 감수하고 웹사이트로 진입하기 버튼이 나옵니다. 아마 인터넷을 해보신 분이라면 한번쯤은 보셨을 거 같네요! 저희의 웹사이트도 SSL 인증서 등록이 완료되면 이런 경고창이 뜰 겁니다.

https://www.youtube.com/watch?v=X3Pr5VATOyA

 

 

Nginx autoindex: Enable directory listing on Nginx Web Server

Do you need to list your files using Nginx? Check out how to enable directory listing on Nginx using the autoindex directive.

nixcp.com

SSL과 autoindex는 위의 두 가지 링크 공유 드리겠습니다. 유튜브 영상의 경우, 그대로만 따라하시면 아마 self signed certificate이 발급되어 성공적으로 경고창을 띄우실 수 있을 겁니다. autoindex의 경우, nginx 설정 파일에 추가해줘야 하는 내용이 있으니 링크 보시고 진행 방법 참고 부탁 드리겠습니다.

 

이 두 가지 개념은 너무나도 이해하고 싶은데 혹시 초보가 이해하기 좋은 자료가 있다면 공유 부탁 드리겠습니다! (_ _)

회고 RETROSPECT

개인적으로 너무 힘든 여정이었습니다. 저처럼 아무 기반 지식 없이 시작하셔서 여기까지 오신 모든 분께 박수박수!!

 

제가 누군가에게 지식을 전파할 만큼 아는 것은 아니지만, 제가 ft_server를 처음 받고 너무 막막했던 기억이 나서 꼭 기록을 남겨서 다른 분들은 시작점을 편하게 잡으셨으면 좋겠다는 마음에 오십보백보 가이드를 작성해보았습니다. 각각의 기술에 대한 구체적인 개념에 대한 설명을 기대하고 들어오셨다면 실망도 있으실 것 같습니다. 그래도 부족한 점이 보이면 댓글이나 슬랙을 통해서 말씀 주시면 조금씩 조금씩 수정해 나갈 예정입니다!

 

그래도 저 위의 기술 중 그 어느 것도 다뤄본 적이 없는 제로 베이스에서 뭐라도 완성을 시켜보니 조급하게 생각할 필요가 없다는 생각이 듭니다. 처음 하는 입장에선 먼 길을 돌아갈 수밖에 없는 게 당연하지 않을까요. 엉뚱한 걸 찾아보다 보면 또 새로운 걸 알게 되는 것 같습니다. 어떤 걸 익히는 데 있어서 100% 정확한 자료는 없는 거 같아요. 그래도 다행인 점은, 42 과제의 경우 참고할 수 있는 깃헙 레포가 많다는 점이 아닐까요. 개인적으로도 기술에 대한 여러 자료보다도 깃헙 레포를 거의 하나하나 뜯어보면서 시행착오를 많이 겪은 것이 도움이 많이 되었습니다. 그리고 도커의 경우, 처음에 괜히 공식 자료를 피해서 다른 걸 찾아봤었는데 이게 큰 실수였습니다. 생각보다 공식 자료가 굉장히 친절하고, 튜토리얼도 제공하기 때문에 개괄적인 걸 훑어보시고 나면 꼭 공식 자료를 읽어보시길 추천합니다.

 

Thanks to

슬랙에서 많은 분들이 스레드로 도움을 주셨는데, 이 글을 작성하는 데 있어 특히 제가 도움을 많이 받았던 분들만 가볍게 언급하려고 합니다. 슬랙에서 과제를 풀 때 어떤 순서로 진행하면 좋을지 알려주신 seolim님, 너무 감사드려요! 진짜 큰 도움이 됐습니다. 오프라인에서 만나서 저에게 수많은 링크로 큰 도움을 주셨던 jkang, jhur님도 감사 드립니다!!

그리고 이 글을 읽고 조금이라도 참고를 하고 계신 분들께도 감사의 말씀 전합니다!

그 외 이것저것

제 글은 그저 단순한 시작점을 잡기 위한 가이드이기에, 생략된 부분이 굉장히 많습니다. 특히 이 글에선 구체적으로 도커파일을 어떻게 작성해라 하는 얘기가 없습니다. 이 부분은 직접 고민하시면서 과제를 진행하는 게 훨씬 도움이 될 거 같아 생략했습니다만, 그래도 제가 삽질했던 부분과 간략한 팁만 살짝 공유하고 마치겠습니다.

  • php, nginx, mysql 꼭꼭 컨테이너가 생성된 후 start 해주시고, reload 잊지 맙시다.
  • 코드가 여러 줄이라면 sh 파일로 만들어서 실행시킬 수도 있습니다.
  • 설정 파일을 계속 수정해나가야 하는데 이걸 도커파일에 한 줄 한 줄 수정하세요, 라고 작성하기는 어렵습니다. 단계별로 진행하다 수정 완료한 설정 파일들은 로컬 컴퓨터에 복사본을 잘 간직하시고 이걸 도커파일에서 이미지 생성 시 복사해서 넣어두는 방식으로 진행하실 수도 있습니다.
  • nginx conf 파일이 이상이 없는 확인하려면 커맨드라인에 nginx -t
  • sql 코드를 여러 줄 입력해야 하는 순간들이 있는데, sql 파일을 만들어서 활용하는 방법도 있습니다.
  • 데비안 버스터 최초 설치 시 update 및 필요한 명령어 설치가 필요할 수 있습니다.

written by sohpark@student.42seoul.kr