Ubuntu 18.04 LTS 에서 웹서버(Apache + PHP + MySQL) 구성하기

HYEONG HWAN, MUN/ 9월 10, 2018/ 미분류/ 18 comments

이 글에서는 Ubuntu 18.04 LTS 운영체제에 Apache + PHP + MySQL 소프트웨어를 설치하고 구성하는 방법에 대해 설명합니다.

Ubuntu 9.04 버전부터 10년째 설치 방법 글을 작성/유지보수 하고 있는데, 그동안 별 문제가 없었고 설치 성공 후기 글이 많으니 올바르게 설명하고 있는 것 같습니다. 혹시라도, 구축 중 문의사항이 생기면 댓글이나 Contact 로 알려주세요.

일반 사업체 및 실무 서비스에서 사용할 수 있는 안정적인 구축 방법을 설명 하겠습니다.


이 글에서는 Ubuntu 18.04 LTS 운영체제를 사용합니다.

* LTS 버전이란? Long Term Support 의 약자입니다. 개발사에서 10년간의 유지보수, 업데이트를 제공합니다.
현재 무료 리눅스 배포판 중에서 10년 업데이트를 지원하는 운영체제는 Ubuntu 뿐입니다.

* 왜 10년 업데이트? Kiosk나 기타 Embeded 기기에서 제품설계 및 구축 운용까지 몇년(1~4년)이 걸립니다. 제품 출시 후 얼마지나지 않아 운영체제의 업데이트가 중단된다면 문제가 생기겠죠.
요즘에는 응용소프트웨어 분야에서도 이와 같이 LTS 라는 용어를 사용하는 추세입니다.  큰 변화 없이(코어의 major 버전번호 변함없음) 업데이트 유지보수를 장기간 제공합니다. 이 경우, 소프트웨어를 도입하려는 고객이 늘어나고, 3rd pary software 가 늘어나는 장점이 있습니다.

< 그림 : Ubuntu 18.04 LTS 버전은 2028년 4월까지 업데이트를 제공함 >


* 리눅스 명령어 환경으로 접속하는 방법을 모른다면 이 글로 이동하세요.
리눅스 명령어 환경으로 원격 접속하는 방법 : https://blog.lael.be/post/7574

* Ubuntu 운영체제가 설치되어 있지 않다면 이 글로 이동해서 설치하세요.
Ubuntu 18.04 LTS 운영체제 설치하는 방법  : https://blog.lael.be/post/7541

* 리눅스 설치 후 기초 원격접속 설정을 하려면 이 글로 이동하세요.
리눅스 서버 ssh 원격접속 설정하기 : https://blog.lael.be/post/7678

* VI 에디터(리눅스 편집기) 사용하는 방법https://blog.lael.be/post/7321

* Ubuntu 클라우드 서버호스팅을 찾는 중이라면 https://blog.lael.be/post/44 글로 이동하세요.

 

* 무료 도메인은 발급 받으려면 https://blog.lael.be/post/6070 글로 이동하세요.
* 유료 도메인을 구매 하려면 https://blog.lael.be/post/6357 글로 이동하세요.

 

이 글의 모든 단계는 root 권한으로 진행합니다.


1) 쉘 기본 언어값 변경

서버 운영중에 문제가 발생했을 때 구글 검색을 할 수 있게 하는 기초 작업입니다.
쉘의 기본 언어값영어로 변경합니다.
시스템이 달라지는 것은 없고 오직 쉘 메세지영어로 바뀝니다.

qwerty 라고 입력해봅시다. 반드시 qwerty 라고 입력하세요.

# qwerty

이미 영어메시지가 출력된다면 다음 단계로 넘어가도록 하자.

< 그림 : 동일한 서버. 메세지 언어설정만 다름 >

영어가 아닐 경우 다음 명령어를 사용하여 변경.

# vi /etc/default/locale
LANG="en_US.UTF-8"

k3

 

다시 로그인 해 보면 값이 적용된 것을 알 수 있다.

 

2) 서버 저장소를 카카오미러로 설정 (set APT mirror)

APT 패키지 설치 프로그램이  파일을 해외의 느린 서버에서 다운 받는 경우가 있습니다. 패키지 다운받을 서버를 카카오미러로 설정하여 패키지 다운로드 속도를 높여보도록 하겠습니다.

당신이 클라우드 서버를 사용 중이라면 이 단계를 건너 뛰세요. (이미 클라우드 사업자들이 적절히 처리해 두었을 것입니다.)

당신이 Ubuntu 운영체제를 직접 설치하였을 경우, 이 단계를 따라하세요.

 

APT 서버 변경하는 방법

# vi /etc/apt/sources.list

내용을 다 지우고 다음의 3줄을 입력한다. (복사하거나, 보고 타이핑 하거나)

deb http://mirror.kakao.com/ubuntu bionic main restricted universe multiverse
deb http://mirror.kakao.com/ubuntu bionic-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu bionic-security main restricted universe multiverse

 

참고 : Ubuntu mirror 저장소 목록 https://launchpad.net/ubuntu/+archivemirrors
참고 : Ubuntu 패키지 분류 방법 https://en.wikipedia.org/wiki/Ubuntu

3) 현재 운영체제에 설치되어 있는 프로그램 최신버전 패치

기억하세요! 어떠한 운영체제를 설치하든 (윈도우 포함) 가장먼저 해야 할 일업데이트 입니다.

APT 목록 갱신
APT란 Advanced Packaging Tool 을 뜻합니다.
우리는 apt 라는 우분투에 내장된 프로그램을 이용해서 프로그램을 쉽게 설치/제거 할 수 있습니다.

** SSD 서버가 아니라 HDD 서버를 사용할 경우 이 단계 진행에 시간이 매우 오래 걸린다. 서버는 SSD 서버를 쓰도록 하자.

패키지 목록 갱신.

#apt update

현재 운영체제에 설치되어있는 프로그램 최신버전 패치

#apt upgrade

설치 중 일부 프로그램 설정파일을 초기화 할것인지 물어볼 수도 있는데 기본값Keep Local Version 을 선택한다. (미리 선택되어 있으므로 Enter 만 누르면 된다.)

설치, 제거, 업데이트 과정중에 생긴 찌꺼기 파일이 있으면 제거.

#apt autoremove

아주 가끔씩 찌꺼기 파일이 생긴다. 지우지 않아도 문제는 없다.

 

4) 시스템 정보 확인

이제 하드웨어 및 운영 관련 정보를 살펴보도록 하자.
나중에 서버 장애가 생겼을 때 이러한 명령어를 사용해 문제의 원인을 파악할 수 있어야 한다.

운영체제 정보 확인

# lsb_release -a

시스템 메모리 정보 확인

# free -m

디스크 파티션 확인

# lsblk

디스크 여유 공간 확인

# df -h

부팅 시간 확인

# who -b

서버 부하량, 부팅 시간, 서버 접속자 확인

# w

CPU 모델 확인

# cat /proc/cpuinfo | grep CPU | head -1

CPU 코어수 확인

# cat /proc/cpuinfo | grep CPU | wc -l

 

5) 시스템 시간 설정

이것을 하지 않으면 클라우드 서버 사업자가 미리 지정해 둔 지역의 시간을 불러올 것이다. (한국은 Seoul, 일본은 Tokyo, 그외에는 GMT.)

물론 초기 설치할 때 Asia/Seoul 을 설정했다면 이 작업을 할 필요는 없다. 하지만 또 설정 하더라도 문제가 생기지는 않는다.

- 데비안 패키지 재설정 TimeZone Data 를 실행한다.

#dpkg-reconfigure tzdata

GUI 환경이 나올 텐데, 순서대로 Asia - Seoul 을 선택하면 된다.  a 와 s 키를 누르면 관련 위치로 이동한다.

 

 

현재 시간 확인

# date

 

6) 일반적으로 사용되는 프로그램 설치

GIT 설치

# apt install git

Unzip 설치

# apt install unzip

Sendmail 설치

# apt install sendmail

 

# vi /etc/mail/local-host-names

qv3

localhost 를 제외하고 나머지 항목은 지운다. 이곳에 쓰여진 도메인은 sendmail 발송시 목적 메일서버조회(mx record query)를 하지않고 로컬로 보낸다.


이제 웹서버를 세팅해 보도록 하자.

Apache + PHP 설치, MySQL 설치로 나뉘어 있으며 각각 독립적으로 설치 할 수도 있다.

 

7-1) Apache2 설치

# apt install apache2

 

- 설치된 아파치 버전 확인

# apache2 -v

 

- 웹브라우저에 서버의 아이피를 입력해 접속해보자.

< 이렇게 보이면 Apache2 웹서버가 정상적으로 설치되었으며, 실행 중이다 >

 

https 인증서 관련 프로그램 설치

# apt install ssl-cert

 

무료 인증서 발급 프로그램 설치

# apt install certbot

 

- 널리 사용되는 Apache2 Module 활성화
이걸 하지 않으면 워드프레스를 포함한 많은 프로그램이 구동되지 않거나 사용 제약이 걸리게 된다.

# a2enmod rewrite
# a2enmod headers
# a2enmod ssl
# a2dismod -f autoindex

 

- 변경사항 적용

# service apache2 restart

 

- 기본 언어셋 변경

# vi /etc/apache2/conf-available/charset.conf

기본 언어값 UTF-8 에 대해서 주석처리되어 있을 텐데 주석(#)을 제거해 준다.

 

iu4

- 추가 보안 설정

# vi /etc/apache2/conf-available/security.conf

매우 권장하는 보안 설정이므로 Ubuntu Apache 패키지 제작자가 미리 써두었다.
이미 다 쓰여 있으니까 아래의 그림을 참고하여 주석(#)을 제거하자.

q1

iu2

iu3

 


#추가 보안패치. (.git, .svn, .env 등 dot로 시작하는 파일 및 폴더 보호, Web Access가 되어서는 안될 파일들의 접근 제어)

서비스 운영중 의도치않게 발생할 수 있는 보안 문제를 막는 코드이다.

# vi /etc/apache2/apache2.conf

파일 중간(약 199번째 줄)의 <FilesMatch “^\.ht”> 구문 다음에 추가한다.
TIP : vi 에디터 열자마자 199G (대문자) 입력하면 바로 이동합니다.

# deny file, folder start with dot
&lt;DirectoryMatch "^\.|\/\."&gt;
Require all denied
&lt;/DirectoryMatch&gt;

# deny (log file, binary, certificate, shell script, sql dump file) access.
&lt;FilesMatch "\.(?i:log|binary|pem|enc|crt|conf|cnf|sql|sh|key|yml|lock|gitignore)$"&gt;
Require all denied
&lt;/FilesMatch&gt;

# deny access.
&lt;FilesMatch "(?i:composer\.json|contributing\.md|license\.txt|readme\.rst|readme\.md|readme\.txt|copyright|artisan|gulpfile\.js|package\.json|phpunit\.xml|access_log|error_log|gruntfile\.js|bower\.json|changelog\.md|console|legalnotice|license|security\.md|privacy\.md)$"&gt;
Require all denied
&lt;/FilesMatch&gt;

# Allow Lets Encrypt Domain Validation Program
&lt;DirectoryMatch "\.well-known/acme-challenge/"&gt;
Require all granted
&lt;/DirectoryMatch&gt;

apache2-conf-161022-2



 

- 변경사항 적용

# service apache2 restart

 

Apache 개별 권한 설정

웹 서비스 구동시 발생할 수 있는 Permission(권한) 문제를 해결하기 위한 프로그램을 설치한다.
아래와 같이 설정하면 shell의 권한과 sftp의 권한과 web의 권한이 동일하게 취급되며 보안도 좋게된다.
순서대로 입력하면 된다.

# apt-cache search mpm-itk

libapache2-mpm-itk - multiuser module for Apache

mpm_1604

 

#apt install libapache2-mpm-itk
#chmod 711 /home
#chmod -R 700 /home/*

(/home/* 안에 아무파일도 없을 경우 마지막 구문은 에러가 날 수 있다. 에러가 나면 무시하도록 하자.)

- 변경사항 적용

# service apache2 restart

 

7-2) PHP 7.2 설치

php 설치. Ubuntu 18.04 LTS 에서는 PHP 7.2 버전이 설치된다.

# apt install php

시스템에 Apache2 가 설치되어 있기 때문에 Apache2 PHP module (libapache2-mod-php7.2) 도 같이 설치되고 적용된다.

- 설치된 PHP 버전 확인

# php -v

글을 작성하는 현재 설치된 버전은 PHP 7.2.10 이며, 여러분의 버전은 이것보다 높을 것이다. (물론 주기적으로 업데이트 명령어인 apt update 및 apt upgrade 를 해주면 최신의 상태를 유지할 수 있다.)

 

기타 널리 사용되는 PHP모듈을 설치한다.

- 다국어 처리모듈

#apt install php-mbstring

- 이미지 처리모듈

#apt install php-gd

- 원격지 정보 불러는 모듈 (워드프레스 등에서 쓰임)

#apt install php-curl php-xml

- 수학 연산 확장 모듈

#apt install php-bcmath

- OAuth 인증 모듈 (클라우드 API 등 연동서비스에서 쓰임)

#apt install php-oauth

- MySQL 연동 모듈 (mysqli, pdo-mysql 관련 함수를 사용할 수 있게됨)

#apt install php-mysql

- Composer 설치 (PHP 패키지 의존성 관리 프로그램)

#apt install composer

 

더 설치하고 싶은 PHP 모듈이 있다면 아래 명령어 입력 후 선택하여 설치하면 된다.

#apt-cache search php- | grep ^php- | grep module

 

PHP 보안 설정

ubuntu php 패키지에서 php 를 해석하는 확장자가 너무 많이 설정되어 있다.

#vi /etc/apache2/mods-available/php7.2.conf

.php .phar .phtml  확장자 파일이 기본적으로 php를 해석할 수 있게 되어있다.
과거 16.04 패키지 보다 많이 개선되었지만 여전히 잠재적 문제를 포함하고 있다.

웹페이지에서 파일업로드 구현시 이 확장자 파일을 제대로 막아주지 못하면 사이트가 위험하게 된다.

 

.php 를 제외한 나머지의 접근을 차단하자.
아래 그림의 위치에 추가한다.


&lt;FilesMatch ".+\.ph(p3|p4|p5|p7|ar|t|tml)$"&gt;
Require all denied
&lt;/FilesMatch&gt;

 

적용을 위해서 아파치 재시작
PHP 가 Apache 의 모듈로 동작하는 방식이므로 PHP 의 변경사항이 생기면 Apache 를 재시작 해 주어야 한다.

#service apache2 restart

 

PHP Default timezone 설정하기

PHP 의 Date 관련 함수에서 사용할 기준 시간을 지정하는 작업입니다.
이 값을 설정하지 않으면 시스템 timezone 을 사용합니다.
PHP Default timezone 을 설정하는 것은 필수는 아니지만 매우 권장하는 작업입니다. 설정해주세요.

동일한 작업2개의 파일에 적용해 주어야 합니다.

- 이것은 Apache2 + PHP 일때 참조하는 파일입니다.

#vi /etc/php/7.2/apache2/php.ini

* 편집 가이드

vi 에디터 진입 후 ->     /timezone 엔터 i -> 편집 -> 적절한 위치에 Asia/Seoul 입력 -> 저장

 

- 이것은 cron이나 console에서 PHP를 실행할때 참조하는 파일입니다. 동일하게 timezone 을 설정해 주세요.

#vi /etc/php/7.2/cli/php.ini

 

date.timezone 값을 찾아서 주석을 제거하고 시간을 설정해주세요.

q17

이 값을 찾아서

 

q18

이렇게 변경.

 

변경사항 적용하기

#service apache2 restart

 

phpinfo 파일 생성

php 환경설정 정보를 볼 수 있는 파일이다. 이 정보가 노출되더라도 보안에 위협이 되지는 않는다. (그런데 굳이 알려줄 필요도 없으므로 외부에 노출하지 않는 것을 권장)

# echo "<?php phpinfo(); ?>" > /var/www/html/myphpinfo.php

웹 브라우저에서 http://서버의아이피/myphpinfo.php 로 접속해 보자.

 

위와 같이 설정되어 있으면 정상이다.

 

8) MySQL 설치

당신이 만약 DB클라우드 서비스(예를들어 RDS)를 사용할 예정이면, 이 단계를 건너 뛰어도 됩니다. (바로 아래 클라이언트 프로그램은 설치하세요)
반대로, DB 전용 서버를 구축하려면 위의 7번을 건너뛰고 이 단계만 진행하면 됩니다.

MySQL 명령어 클라이언트 프로그램 설치 - 외부 DB를 사용하든 안하든 설치하는 것이 좋습니다.

#apt install mysql-client

위의 패키지를 설치하면 console 환경에서 mysql 명령어를 사용할 수 있게 된다.

 

MySQL 서버 설치

#apt install mysql-server

설치된 버전 확인

#mysqladmin version

MySQL 5.7.24 버전이 설치되었다. (여러분의 버전은 이것보다 높을 것입니다.)

MySQL에 플러그인이라는 개념이 생겼다. 그 중 하나가 서버사이드(auth_socket) 인증이다.

기본 설정으로 MySQL 의 root 사용자는 auth_socket 인증을 사용하도록 설정되어 있으며, 따라서 리눅스 root 사용자는 비밀번호 입력없이 MySQL root 사용자로 로그인 할 수 있다.

 

굳이 기본 설정을 건드리지는 않겠다. 리눅스 root 사용자mysql, mysqladmin 이라는 명령어를 통해 DBMS(DB 관리 프로그램;MySQL)을 제어할 수 있다.

 

데이터베이스 초기화 작업 실행

다음의 명령어 실행하자. 잘못 입력 했을 경우 한번 더 실행하면 된다.

/usr/bin/mysql_secure_installation

기본값이 NO 이기 때문에 귀찮더라도 y 를 입력하자.

모두 y 이고, password strength 는 0 으로 설정하고, 비밀번호는 설정하자.

 

잘못한 것 같으면 위 명령어를 다시 실행하면 된다.

 

기본 언어셋 설정(중요)

이 단계를 건너뛰면 DB가 latin1 으로 생성되며 추후 DB작업에 문제가 생길 수 있다.

utf8mb4 속성은 utf8확장이다. 기존의 모든 utf8과 상위 호환된다. (utf8 에서 utf8mb4 로의 변환은 손실이 일어나지 않습니다.)
요즘 스마트폰에서 사용되는 이모티콘 문자(emoji)를 저장할 수 있다.

자세한 설명은 이곳에(https://blog.lael.be/post/917) 있습니다.

/etc/mysql/mysql.conf.d/override.cnf 파일을 생성하고 아래의 내용을 저장한다.

#vi /etc/mysql/mysql.conf.d/override.cnf
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

query_cache_type = ON
query_cache_limit = 1M
query_cache_size = 16M

sql_mode = NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

 


그누보드5 사용하실 분만 하는 추가작업

< 그누보드5 사용하실 분만 하는 추가작업 >

[TIP] 그누보드5는 현재 MySQL 5.7 버전과 호환성 문제가 있습니다. 다음의 작업으로 해결할 수 있습니다.

mysql start, mysql restart, 서버의 재부팅 등을 할 때마다 다음작업을 해야 합니다.
phpmyadmin 관리자 계정으로 접속한 후에 [환경설정]에서 아래 화면과 같이, 4 와 LOW 로 변경해줍니다.

변경을 하지 않으면, 그누보드5의 회원 로그인, 비밀번호 찾기의 기능이 동작하지 않습니다.

< 그누보드5 사용하실 분만 하는 추가작업 >


 

mysql 환경설정 문법 테스트 (mysql config file configtest)

반드시 아래의 명령어로 입력할 것.

# mysqld --verbose --help | grep configtest

오류메세지가 출력되지 않는다면 정상이다.
설정파일 오류가 없다면 mysql 을 재시작하여 적용하도록 하자.

 

변경사항 적용

# service mysql restart

 

변경사항 적용 확인

# mysqladmin variables | grep character

 

9) APM(Apache + PHP + MySQL) 정상 설치 확인

위의 APM 을 모두 사용하는 프로그램을 설치해보자.

널리사용되는 데이터베이스 웹 관리프로그램인 phpmyadmin 을 설치해보자.

# cd /var/www/html/
# wget https://files.phpmyadmin.net/phpMyAdmin/4.8.3/phpMyAdmin-4.8.3-all-languages.zip
# unzip phpMyAdmin-4.8.3-all-languages.zip
# mv phpMyAdmin-4.8.3-all-languages mydbadmin
# rm phpMyAdmin-4.8.3-all-languages.zip

브라우저를 열고
http://서버의아이피/mydbadmin 접속

 

Ubuntu 의 MySQL 관리 계정 확인

# ll /etc/mysql/debian.cnf
# cat /etc/mysql/debian.cnf

debian-sys-maint 사용자는 MySQL 시스템 서비스에서 MySQL 을 제어할 때 사용하는 계정입니다.
최고 관리 권한을 가지고 있습니다.

예를 들어서 #service mysql stop  명령을 내릴 경우, mysql 프로세스를 강제종료(kill)하는 것이 아니라, 이 관리 계정으로 로그인해서 shutdown 명령을 실행하는 것입니다.

비슷하게 #service mysql reload  같은 동작도 외부에서 MySQL 프로세스를 reload 하는 방법이 없으므로, 이 관리 계정으로 로그인해서 reload 명령을 실행하는 것입니다.

< 그림 : debian.cnf 에 표시된 비밀번호가 올바르지 않아서 reload 명령을 실행하지 못한 경우 >

 

debian-sys-maint 계정으로 로그인 해보자.

 

나만의 최고 관리자 계정 생성

먼저 비밀번호 복잡도 규칙을 수정한다.

비밀번호 규칙 설명

* LOW : 8글자 이상
* MEDIUM : 8글자 이상 + (1대문자, 1소문자, 1숫자, 1특수문자 포함)
* STRONG : MEDIUM 조건 + 비밀번호의 부분이 사전 단어가 아니어야함.

“관리자” 계정을 생성한다.
“관리자” 계정이다. 이 계정은 절대로 웹 프로그램(게시판이나 블로그 프로그램)에서 사용하면 안된다.

“사용자 추가” 클릭

 

사용자명 : dbadmin   (또는 원하는 관리자 아이디) (사이트 이름이나 메일 아이디는 쓰지 마세요)
호스트명 : 로컬 (localhost)
전체적 권한 : 모두 체크

 

phpmyadmin 로그아웃 후 새로 생성한 관리자 아이디로 로그인 하세요.


* dbadmin : 내가 생성한 이 DB 서버의 최고 관리자 계정
* root : 리눅스 root 사용자용 계정
* debian-sys-maint : 시스템에서 끄기, 새로고침, 업그레이드 등 작업시에 사용하는 계정

root 계정은 auth_socket 인증이라서 비밀번호 설정이 안됩니다. (비밀번호 로그인 자체가 안됨)


debian-sys-maint 계정 비밀번호를 바꾸시려면 phpmyadmin  에서 -> 권한 수정 -> 암호변경 메뉴를 이용하세요.
비밀번호는 되도록 자동생성 비밀번호로 사용하세요. 비밀번호 최대길이 제한은 없으므로 불안하다면 정말 긴 문자를 입력해도 됩니다. (모든 문자 입력 가능하지만 스페이스(공백)# 문자는 사용할 수 없습니다.)
변경한 비밀번호는 /etc/mysql/debian.cnf 에 적어두세요.


앞으로 데이터베이스 사용자 추가, 관리는 dbadmin 계정으로 로그인하여 처리하세요.

 

10) 방화벽 설정 및 ipv6 끄기

아직 ipv6를 사용하는것은 권장하지 않습니다. ipv6기능을 끄면 문제가 생기지는 않지만, ipv6기능을 켜면 문제가 생길 수도 있습니다.

#vi /etc/sysctl.conf

맨 밑에


net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

추가.

 

설정파일 적용

#sysctl -p

 

검사

#cat /proc/sys/net/ipv6/conf/all/disable_ipv6

1 이면 disable 된 상태이다.

q30

 


 

- iptables 를 사용해서 리눅스 방화벽 설정하기 (접근 제어) : https://blog.lael.be/post/7982

당신이 클라우드 호스팅을 이용중이고, 호스팅에서 클라우드 방화벽을 지원한다면 이 작업을 건너뛰고 클라우드 방화벽을 사용하길 권장합니다.

TCP 80, TCP 443, TCP 22 번 포트를 Allow 하면 됩니다.
IP 제한을 걸 수 있다면 TCP 22번을 자신의 아이피(MY IP)만 허용하도록 설정하세요.

 

 

11) 실제 사용 테스트 (실사용 예제)

1] 도메인 준비하기

* 무료 도메인은 발급 받으려면 https://blog.lael.be/post/6070 글로 이동하세요.
* 유료 도메인을 구매 하려면 https://blog.lael.be/post/6357 글로 이동하세요.

유료, 무료 모두 사이트가입 -> 도메인발급 까지 5분이면 됩니다. 도메인을 반드시 준비해주세요.

자신의 PC 에 설치한 가상머신이나 회사 내부 사설망의 서버에도 도메인 연결이 가능합니다. 무엇을 하든 반드시 도메인을 준비해주세요.

다음의 예제들은 도메인이 있다고 가정하고 진행합니다.

도메인을 발급 받은 후(또는 도메인 구매 후), 네임서버 설정에서 IP 주소(A 레코드)를 설정하세요.

 


본문의 예제에서는 방금 발급받은 myuser1.ga 라는 도메인을 사용해서 진행하겠습니다.

도메인 연결 확인
서버 컴퓨터에서 다음을 입력합니다.

# ping myuser1.ga

ping 의 결과에 본인이 설정한 IP 가 표시되면 도메인의 IP 주소 설정이 제대로 된 것입니다.
만약 IP 주소가 올바르지 않게 표시된다면 도메인-IP 연결설정을 다시 확인해보고, 잠시(5분 ~ 2시간) 후 다시 확인 해보세요.


2] 일반 사용자 계정 생성

일반 사용자 추가 - 보통 도메인의 앞단어를 사용합니다.

#adduser myuser1

(참고로 위의 추가와 반대동작을 하는 계정삭제 명령어는 - 계정을 삭제하고 홈디렉토리도 삭제함 -

#userdel -r myuser1

입니다.)

보통 웹루트는 홈디렉토리에 하지 않습니다.
(일반적으로 www, htdocs, public_html 라는 이름을 웹루트로 사용합니다.)
저는 주로 www 이름을 사용합니다. 사용자변경 후 www 디렉토리를 생성하고 빠져나오기

#su -l myuser1
#mkdir www
#exit

 

3] 웹사이트 Apache 환경설정파일 작성

사이트 생성 파일 작성할 때, 실수가 생기는 경우가 많아서, 환경설정 생성기를 만들었습니다.
자신의 환경에 맞추어 입력하시면 됩니다. 브라우저 즐겨찾기에 등록 후 필요할 때 마다 쓰시면 됩니다.

아래링크를 클릭해서 환경설정 파일을 생성하세요.

Apache2 환경설정 생성기
https://webmaster.cafe/tools/apache-conf-generator/

 

위에서 생성한 설정 구문을 아래의 위치에 넣어주세요.

/etc/apache2/sites-available/[[사이트주소]].conf

 

사이트 켜기

오타를 방지하기 위해서 a2ensite 앞몇단어 + 탭  을 입력해주세요.

# a2ensite myuser1.ga.conf

 

참고 : 사이트 끄는 명령어

# a2dissite myuser1.ga.conf

 

변경사항 적용

# service apache2 reload

 

무료 인증서를 발급 받으시려면

임시 SSL인증서를 사용해서 사이트 구동 -> letsencrypt 인증서 발급 -> 발급받은 인증서를 사용해서 사이트 구동을 진행하세요.

설정이 어렵진 않지만 몇번 반복해야하는 단계가 있습니다.

< 오류 없이 사이트가 접속되면 성공 >

 

4] 데이터베이스 생성

DB 라고 부르겠습니다.

DB 생성 + 생성한 DB 를 사용할 계정 생성 + 권한 부여

위에서 생성한 phpmyadmin 웹페이지로 이동한 후에, 자신이 생성한 관리자계정(dbadmin) 으로 로그인 한 후에 사용할 계정을 생성합니다.

* 당신이 만약 외부 DB 서버에 연결해야 한다면

/var/www/html/mydbadmin/config.sample.inc.php 파일이름을
/var/www/html/mydbadmin/config.inc.php 로 변경하고 값을 입력해줍니다.

< 예시 >

아래 그림과 같이 새로운 DB 사용자를 생성해 주세요.

 

5] 원하는 웹 소프트웨어 설치

이 예제에서는 전세계 CMS 의 60% 를 차지하는 워드프레스(WordPress)를 설치해보겠습니다.

일반적으로 많이 사용하는 소프트웨어가 안전하고, 디자인 파일이 많고, 문제가 생겼을 때 참고할 자료가 많습니다.

점유율 참조 : https://w3techs.com/technologies/history_overview/content_management

워드프레스 공식사이트 : https://wordpress.org/download/

 

생성한 일반 사용자 계정으로 로그인 (이 글 예시의 경우 myuser1 으로 로그인)

웹루트로 이동

# cd www

wordpress 다운로드

# wget https://wordpress.org/latest.zip

위의 명령어는 항상 wordpress 최신버전을 다운받습니다.

 

압축해제

# unzip latest.zip

 

다운받은 설치파일 삭제

# rm latest.zip

 

워드프레스 구성파일을 wordpress 폴더에서 꺼내기

# mv wordpress/* .

 

사용하지 않는 wordpress 폴더 삭제

# rmdir wordpress

 

웹사이트 접속 후 설치 진행!

웹브라우저에서 내 도메인 주소로 접속해보자.

필요한 정보는 이미 알고 있으므로, 편하게 설치를 진행해보세요.

 

6] 완성

완성! 적당히 테마 선택하시고 꾸미시면 됩니다.

워드프레스의 세계로!

https://myuser1.ga/ (예제 사이트 미리보기 종료)

 

이제 여러분이 원하는 웹 소프트웨어를 다운 받아서 설치/ 구동해보세요!

 

 

 

# 1차 글 완성 : 2018년 11월 16일
# 2차 수정 : 2018년 11월 18일
# 3차 검수완료 : 2018년 11월 21일
# 4차 수정완료 : 2018년 11월 29일
# 5차 수정완료 : 2018년 12월 13일

 

* 성공적으로 세팅되셨으면 SNS에 이 글을 알려주시거나, 댓글로 알려주세요. 후기나 시행착오 파악에 도움이 됩니다.

 

18 Comments

  1. 구독해서 언제나 잘 보고있습니다.
    발빠르고 좋은정보 감사드립니다.

    1. 보통 길다란 글 하나 작성하는데 한달정도 걸려요.
      서둘러 완성하겠습니다!

  2. 추가적으로 뭐때문일까 생각하다가 혹시 php가 여러개 설치되어있나 싶어서
    cd /etc/php로 이동후에 dir을 해보니
    5.6 7.0 7.1 7.2 7.3 이렇게 나오네요;;
    이러면 ..선택을 할수가 있는건가요?;;
    질문이 많아 죄송합니다.

    1. 번거로운 설정을 하면, php 여러 버전이 설치 가능합니다. 이 글에서는 /etc/php/7.2/ 부분만 사용합니다.
      이 글은 현재 작성중이며 수정이 자주 일어납니다. 문제가 발생하더라도 지원해드릴수 없습니다.
      16.04 선택하시고 기존 글을 참조해주세요.
      감사합니다.

  3. 오늘도 감사하게 보고 갑니다.
    늘 감사드립니다!!

    1. 감사합니다! 요즘 개발자 사이트 하나 만들어볼까 구상해보고 있어요.

  4. 이전(?) 글 우분투 16.04 + nginx + mariadb 로 서버세팅을해서 그동안 그리고 지금까지 잘 쓰고 있습니다.
    기존에는 아파치와 mysql만 썻엇고요

    오랜만(?)에 또 웹서버 세팅글이 올라와 반가웠는데 다시 아파치와 mysql이네요.

    nginx와 mariadb가 아닌 이유가 있을까요?

    요즘 웹서버 업그레이드를 고려하고 잇는데 궁금해서 여쭙니다

    1. 안녕하세요.
      세팅하시는 분들의 취향차이가 있어서, 글을 두가지 버전으로 작성하고 있습니다.
      이 글에서는 Apache로 구성하는 방법을 설명합니다. 이 글 작성이 끝나고 곧 Nginx로 구성하는 방법을 새로 작성할 예정입니다.
      감사합니다!

  5. 안녕하세요^^ 항상 좋은글 잘보면서 조금씩 지식을 늘려가고있습니다.ㅎ
    오늘은 드디어 이 포스팅을 보고 18.04버전에 웹서버세팅을 따라해봤습니다.
    아직 미완성포스팅이지만 현재까지 완성된 글만 보고 따라해도
    당장 웹서버운영에 문제가 없을것같다는 제 어리석은(?)판단으로 쫓아가봤습니다.
    잘따라오다가 문제가 발생된지점은
    Mysql설치후에 ” root 의 인증 플러그인 정보 초기화하기 ” 를 따라하고
    데이터베이스 초기화를 위해서 /usr/bin/mysql_secure_installation 이 부분을 따라해보니
    패스워드입력후 에러메시지가 나오고 mysql로 진입도 안되더라고요.
    root 던 생성한 사용자계정이던 모두다 mysql로 진입이 안되서
    제가 잘못된 부분이 있는지 다시 확인하면서 패키지를 두어번 삭제 재설치를 반복했는데
    안되더라고요. 에러메세지를 카피해놓는다는게 날려버려서 보일수는 없지만.ㅠㅠ
    ” root 의 인증 플러그인 정보 초기화하기 “도 예시와 같이 제대로 잘 따라왔는데
    왜 안되는걸까요?;;
    긴 시간 정성으로 작성하시는 포스팅을 따라하지못하니 죄송하네요.

    1. 이번 설정 글에서는 “root 의 인증 플러그인 정보 초기화하기” 부분을 건너뛰려고 생각하고 있습니다.
      글은 내일 오후중으로 완성할 예정입니다.
      20시간만 더 기다려주세요!

  6. 종종 들러서 항상 잘 보고 있습니다. 감사합니다.
    워드프레스 디렉토리의 소유자/퍼미션 관련이 여전히 혼란스러워 질문 드려요.

    환경은 ssh를 통한 ftp를 사용중, Nginx, php7.2, mariadb입니다.
    고민하다 현재는 775, 664로 설정하고 chown myuser1:www-data 로 설정하고, www-data 그룹에 myuser1을 추가시켜 쓰고 있습니다. 그런데 플러그인 추가, 업데이트등을 하면 해당 디렉토리와 파일의 소유권이 www-data:www-data로 되더라고요.
    보안적인 측면이나 여러가지면에서 조언 부탁드려요~
    감사합니다.

    1. 제 가이드는 퍼미션과 소유권 무관하게 안전하게 동작하도록 설명하고 있습니다.
      nginx 는 https://blog.lael.be/post/2600 를 참조해서 구성해보세요.
      업데이트나 업로드 된 파일은 당연히 myuser1:myuser1 권한이어야 합니다.

  7. 안녕하세요. 정말 깔끔하게 잘 정리해 놓으셔서 큰 도움 받았습니다.
    진심으로 감사합니다. ^^

    잘은 모르겠지만요. 중하단 부분에
    위에서 생성한 phpmyadmin 웹페이지로 이동한 후에, 자신이 생성한 관리자계정(dbmyadmin) 으로 로그인 한 후에 사용할 계정을 생성합니다.

    관리자계정(dbmyadmin) -> 관리자계정(dbadmin)
    …으로 바꿔야하지 않나 싶습니다.

    1. 아, 그렇네요. 여러번 살펴봤는데, 자연스럽게 넘어가버렸네요.
      알려주셔서 감사합니다!

  8. nginx글 기다립니다.

    집 서버가 망가져서

    18.04로 다시 시도 하려고요 ㅠ

    (그누보드의 선구자입니다.
    기존 닉은 SDK였고요)

    1. 서버가 망가졌다니 안타깝군요. 저도 직접 돌리고 있는데 백업을 더 철저히 해야겠습니다.
      18.04 nginx 는 작성에 시간이 조금 걸릴것 같습니다.
      감사합니다.

      1. 백업은 이 블로그에 있는 drop로
        하루에 한번 백업을 하고 있습니다.

        하드웨어가 망가진것 같아요
        이번에 AWS로 갈까 고민중입니다.

        집서버는 백업으로 쓰고요

        1. dropbox보다 더 저렴한 저장공간을 찾지는 못했습니다.
          lightsail 은 써볼만 합니다. 저렴하니까 사용해보세요.

Leave a Comment

작성하신 댓글은 관리자의 수동 승인 후 게시됩니다.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*