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

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

https://blog.lael.be/post/7264

Ubuntu 18.04 LTS 에서 웹서버(NGINX + PHP + MySQL) 구성하는 방법을 알아보려면 https://blog.lael.be/post/8319 로 이동.

새로 구축할 예정이라면, 이 글 대신 Ubuntu 20.04 LTS 로 구축하는것을 권장합니다~

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


이 글은 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 party software 가 늘어나는 장점이 있습니다.

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

참고 : Ubuntu Support - https://en.wikipedia.org/wiki/Ubuntu#Releases


* 리눅스 명령어 환경으로 접속하는 방법을 모른다면 이 글로 이동하세요.
리눅스 명령어 환경으로 원격 접속하는 방법 : 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 글로 이동하세요.

* 서버에 파일을 업로드하고 싶다면 filezilla 를 사용해보세요. https://filezilla-project.org/

 

* 무료 도메인은 발급 받으려면 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를 쓰도록 합시다.
* 요즘 SSD 기대수명이, 하루 100GB 쓰기작업할 경우 200년 정도 됩니다. 제조사 보증이 10년정도 합니다.
* SSD가 고장나기 전에 컴퓨터(서버)가 먼저 노후됩니다. 가끔씩 백업을 잘 하세요.

 

18.04 LTS 세팅 가이드 글부터는 apt-get 이나 apt-cache 명령어 대신 apt 를 사용하여 설명합니다.
apt는 apt-get 일부와 apt-cache 일부를 통합하여 만든 명령어 프로그램입니다. (apt-get, apt-cache가 제거된다는 공지는 없습니다.)
사용자가 조금 더 편하고, 헷갈리지 않기 위해 만든 명령어 프로그램이라고 하네요.

APT 에 대한 자세한 설명 : http://manpages.ubuntu.com/manpages/trusty/man8/apt.8.html

 

패키지 목록 갱신.

#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-1) 시스템 시간 설정

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

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

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

#dpkg-reconfigure tzdata

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

 

dpkg-reconfigure 를 사용할 수 없는 환경이라면 아래의 명령을 실행하세요. (동작은 완전히 동일함)

# ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

 

현재 시간 확인

# date

 

- 참고 : 가상서버(클라우드서버)는 실제 물리서버의 시간으로 자동으로 동기화됩니다.
즉 가상서버(클라우드서버)를 사용하는 경우 시간교정을 설정할 필요가 없습니다.
(시간교정 프로그램은 보통 ntpdate 를 사용한다. 만약 설정하고 싶다면 구글에 ubuntu ntpdate 라고 검색하여라. 물리서버가 아니라면 작업하지 않는것을 권장함.)

 

5-2) 시스템 이름(hostname) 설정

이 단계는 필수 단계가 아닙니다.서버 자체에서 메일발송을 할 예정이 없다면 5-2 번 설정은 건너뛰어도 됩니다.

이 단계를 설정하면, 메일발송(sendmail) 성공 확률이 증가하고, 여러 서버 작업시 실수할 확률을 줄여줍니다.

이 서버에 이름을 정하는 작업이다.
원래 모든 통신기기(컴퓨터, 노트북, 스마트폰, 프린터등등)는 기기이름을 정할 수 있다.
이 서버의 이름을 정하도록 하자.

위의 뜻은 “ip-172-26-10-184 서버에 root 사용자” 라는 뜻이다.

서버 이름은 FQDN(Fully Qualified Domain Name)을 쓰는 것이 좋다.

참고로 라엘이의 이 블로그 서버의 hostname은 blog.lael.be 이다.

 

#vi /etc/hostname

빈 파일 또는 localhost 또는 초기 설치시 설정한 이름이 쓰여있을건데 원하는 이름으로 바꾸어보자.

권장하는 단어는 이 서버에 연결될 대표 도메인이다. 예를 들어 blog.lael.be 같은 것.

 

적용한다.

#hostname -F /etc/hostname

 

서버에 재 접속하면 적용된 것을 확인 할 수 있을 것이다.

g7

hostname 값은 서버작업자에게 서버이름을 알려주는 역할을 하며, 아무 의미없는 글자를 적어도 된다.

일부 sendmail 같은 프로그램에서 다른 서버와 통신시 사용하기도 한다.

 

- hostname 을 FQDN 으로 설정하는 것을 권장하지만, 외부와 연결이 없는 서버이거나 자신이 쓰고 싶은 이름이 있다면 (팀명이나, 회사명, 서비스명 등) 그것으로 해도 된다.
예를 들어 myserver1, new1111 같이 자신이 하고 싶은대로 정했다고 한다면, 서버의 /etc/hosts 에 해당 이름을 등록해두도록 하자.

127.0.0.1    myserver1

g8

 

hostname 고정시키기

재부팅하면 /var/lib/cloud/instances/[인스턴스 코드]/user-data.txt 파일에 쓰여진 hostname 값으로 되돌아간다.
변경사항을 유지하기 위해 preserve_hostname 을 설정한다.

#vi /etc/cloud/cloud.cfg

preserve_hostname 값을 true 로 설정.

 

재부팅 후 서버이름(hostname)이 유지되는지 확인

# reboot

 

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

VI 에디터 설치

# apt install vim

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

 


다음 단계부터 파일 생성, 파일 수정등의 작업을 할 것입니다.

오타 입력을 방지하고 빠른 오류 발견을 위해 Apache2 환경설정 문법검사 명령어를 실행해 봅시다.

 

- Apache2 환경설정 문법검사

# apache2ctl -S

환경설정 문법검사에 통과하면, 문법 분석결과가 표시됩니다.

 

만약, 환경설정 문법에 오류가 있다면 해당 오류 내용과, 오류가 발생한 Line을 표시해줍니다.

자주 이 명령어를 실행해서 Apache2  환경설정 문법오류가 있는지 확인해 보도록 합시다.

 


* vi 에디터 사용법 : https://blog.lael.be/post/7321

 

- 기본 언어셋 변경

# 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
<DirectoryMatch "^\.|\/\.">
    Require all denied
</DirectoryMatch>

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

# deny access.
<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)$">
    Require all denied
</FilesMatch>

# Allow Lets Encrypt Domain Validation Program
<DirectoryMatch "\.well-known/acme-challenge/">
    Require all granted
</DirectoryMatch>

# Block .php file inside upload folder. uploads(wp), files(drupal), data(gnuboard).
<DirectoryMatch "/(uploads|default/files|data|wp-content/themes)/">
    <FilesMatch ".+\.php$">
        Require all denied
    </FilesMatch>
</DirectoryMatch>

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

 

- 기본사이트 추가 설정

# vi /etc/apache2/sites-available/000-default.conf

ServerName localhost 한 줄 추가해주세요.

ServerName localhost

 

- HTTPS 기본사이트 켜기

# mv /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/000-default-ssl.conf

 

# 20.07.31 추가

mv 명령어를 사용하는 이유에 대해 질문을 받아서 작성합니다. 물론 이 내용을 이해하지 못하여도 사용에 지장이 없습니다.

Apache 는 가장 처음으로 로딩하는 파일을 기본 사이트로 취급합니다. 기본 사이트는 지정한 ServerName 에 모두 해당하지 않을 경우, 연결되는 사이트입니다.
Apache 의 conf 로딩 순서는, 알파벳 순서에 따릅니다. 그리고 숫자를 더 우선시 합니다.
따라서 위의 mv 명령어를 사용하지 않고, 당신의 도메인이 d 보다 앞단계 일 경우 (예를 들어 apple.com) 이 도메인 conf가 먼저 불러와지게 되고 기본 사이트가 됩니다.

우리는 위의 default-ssl 을 기본 사이트로써 동작하기를 원하기 때문에, 로딩 우선순위를 높이기 위해서, 이름을 000-default-ssl.conf 로 변경하는 것입니다.

 

이 파일에도 ServerName localhost 를 추가해주세요.

# vi /etc/apache2/sites-available/000-default-ssl.conf

 

# a2ensite 000-default-ssl.conf

 

- 설정 확인

# apache2ctl -S

 

- 설정 적용

# service apache2 reload

 

7-2) PHP 7.2 설치

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


# 20.08.15 부연 설명 추가.

이 글에서는 PPA나 개별저장소, 소스설치가 아니라, Ubuntu 공식 저장소에서 지원하는 패키지로만 설치합니다.
Ubuntu 18.04 LTS 는 장기적으로 사용할 수 있게 출시된 버전이며, 2028년 4월까지 업데이트가 제공됩니다.

Ubuntu SecurityTeam 은 공식 지원하는 모든 패키지에 대해서 Auditing, Tracking, Reporting, Fixing, Testing 을 수행합니다.
https://wiki.ubuntu.com/SecurityTeam

All binary packages in main and restricted are supported by the Ubuntu Security team for the life of an Ubuntu release.  (https://wiki.ubuntu.com/SecurityTeam/FAQ)

기본 저장소에서 제공하는 php7.2 는 Main 패키지이며, security 채널로써 빠르고 우선적으로 관리됩니다. https://packages.ubuntu.com/bionic/php/

https://packages.ubuntu.com/bionic/all/php7.2/download

 

* 라엘이의 결론 : 미래에는 PHP 7.2 보다 높은 버전의 PHP 가 개발될 것입니다.
하지만 공식저장소에서 제공하는 php7.2 를 사용한다면 약 10년안정적(Stable)이고 안전한(Secured) 환경을 사용할 수 있을 것입니다.
이것은 Ubuntu의 핵심 개발팀인 SecurityTeam이 보증합니다.


 

# 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 를 제외한 나머지의 접근을 차단하자.
아래 그림의 위치에 추가한다.


<FilesMatch ".+\.ph(p3|p4|p5|p7|ar|t|tml)$">
    Require all denied
</FilesMatch>

 

적용을 위해서 아파치 재시작
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 사용자로 로그인 할 수 있다.
추가적으로, auth_socket 이 설정된 사용자비밀번호 설정이 되지 않는다. (정확히 말하자면 비밀번호 설정은 되는데 그 값을 저장하지 않는다. 즉, 절대로 비밀번호 로그인 불가능)
다시 말해서, 기본적으로 root 사용자로 비밀번호 로그인을 할 수 없다는 것이다. (auth_socket 인증을 사용하도록 설정되어 있으므로)

 

굳이 기본 설정을 건드리지는 않겠다. 리눅스 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 파일을 생성하고 아래의 내용을 저장한다. (MYSQL 8.0 보다 낮을경우)

#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 = 4M
query_cache_size = 64M

max_allowed_packet = 64M

slow_query_log         = 1
slow_query_log_file    = /var/log/mysql/mysql-slow.log
long_query_time = 5

sql_mode = NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

 

/etc/mysql/mysql.conf.d/override.cnf 파일을 생성하고 아래의 내용을 저장한다. (MYSQL 8.0 보다 같거나 높을경우)

그리고 PHP 7.4 이상을 사용하세요. (MYSQL 8.0 보다 같거나 높을경우)


[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

max_allowed_packet = 64M

slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 5

 


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

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

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

그누보드 소스에서 다음의 함수를 수정.

lib/common.lib.php 1557째줄 근처의 sql_password 함수를 아래와 같이 변경합니다.

function sql_password($value)
{
    // mysql 4.0x 이하 버전에서는 password() 함수의 결과가 16bytes
    // mysql 4.1x 이상 버전에서는 password() 함수의 결과가 41bytes
    // $row = sql_fetch(" select password('$value') as pass ");

    // return $row['pass'];
    return '*' . strtoupper(sha1(sha1($value, true), false));
}

 

< 그누보드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 을 설치해보자.

이 웹소프트웨어의 공식사이트는 https://www.phpmyadmin.net/ 이다.

# 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 접속

phpmyadmin 로그인 화면이 뜰 것이다.

 

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) 기본사이트 관련 파일 정리

폴더 이동

# cd /var/www/html

목록 보기

# ls -l

 

index.html, mydbadmin, myphpinfo.php 3개의 파일이 있을건데, 이름을 바꾸거나, 이동하거나, 삭제하는 것을 추천합니다.
지금 작업하지 말고, 이 블로그 글을 모두 읽고난 후에 작업하세요. 이 파일을 그대로 놓아두어도 큰 문제가 발생하지는 않습니다.

 

12) 실제 사용 테스트 (실제로 사용해 보는 예제)

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

 

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

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

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

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

참고 : 사이트 주소와 연결되는 환경설정 파일을 보는 명령어

# apache2ctl -S

 

 

4] 데이터베이스 생성

* phpmyadmin 환경설정

phpmyadmin 웹소프트웨어의 환경설정을 진행합니다. 설정하면 프로그램 화면이 조금 더 깔끔해집니다.
phpmyadmin 이 설치된 폴더로 이동한 후에 config.sample.inc.php 파일 이름을 config.inc.php 로 바꿉니다.

 

config.inc.php 파일을 열어서 아래의 내용으로 변경해줍니다.


<?php
/**
* All directives are explained in documentation
* at <https://docs.phpmyadmin.net/en/latest/config.html>.
*/

$i = 0;
$cfg = array();

$cfg['blowfish_secret'] = 'RkyE=T6t6KjX65KPC7/XNQ\Bk9EhBXar'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
$cfg['NavigationTreeEnableGrouping'] = false;
$cfg['MaxNavigationItems'] = '200';
$cfg['FirstLevelNavigationItems'] = '200';
$cfg['ShowDatabasesNavigationAsTree'] = false;
$cfg['NumRecentTables'] = 0;

// add new
$i++;
$cfg['Servers'][$i]['host'] = 'localhost';

// add new
/*
$i++;
$cfg['Servers'][$i]['host'] = '123.250.250.250';
// $cfg['Servers'][$i]['port'] = '3306';
*/

// add new
/*
$i++;
$cfg['Servers'][$i]['host'] = 'mydb.cluster-cf1onrqhtz3u.ap-northeast-2.rds.amazonaws.com';
// $cfg['Servers'][$i]['port'] = '3306';
*/

 

위에서 생성한 phpmyadmin 웹페이지로 이동한 후에, 자신이 생성한 관리자계정(dbadmin) 으로 로그인하세요.

 

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

동명의 데이터베이스를 생성하고 모든 권한을 부여“에 체크하면,
사용자 아이디를 만들때, 같은 이름으로 데이터베이스를 만들고 접근권한 설정도 해줍니다. (거의 항상 체크하는 옵션임)

만약 데이터베이스 사용자가 올바르게 추가(생성)되었는지 테스트하고 싶다면 phpmyadmin 로그아웃 후 생성한 아이디(위의 그림에서는 myuser1)로 로그인 해보세요.

 

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] 완성

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

워드프레스의 세계로!

 

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

 


선택 작업

동시 접속자 수 설정하기

- Ubuntu Apache 에서 프로세스가 동시 처리가능한 갯수는 150개 입니다. 1000개의 처리 요청이 있다면 150개는 프로세서가 즉시 처리하고, 나머지 850개는 대기열에서 대기하다가 순서대로 처리됩니다.
CPU 나 Memory 사용량이 높지 않은데, 사이트가 5초 대기한 후에 접속된다면 이 부분을 설정해야 합니다.

이 프로세스 제한을 늘려서 더 많은 사용자가 빠르게 이용할 수 있도록 해봅시다.

조언

  • 서버 세팅 초기에 설정하지 마세요. 동시 접속이 늘어나서 사이트 접속이 느려졌다고 느낄 때 하세요. 반드시 설정해야되는 작업은 아닙니다.
  • 일반적으로 동시 접속(최근 3분간 활성사용자) 450명(설정값의 3배)이 넘지 않으면 이 작업을 할 필요가 없습니다.
  • 서버의 메모리가 4GB 또는 그 이상일 때에만 설정하세요. 이 작업을 하면 Apache 가 더 많은 메모리를 사용하게 됩니다.

 

실행모드 확인

# a2query -M

prefork 라고 뜰겁니다.

 

 

prefork 관련 동시접속 설정

# vi /etc/apache2/mods-available/mpm_prefork.conf

당신의 서버 메모리가 4GB 또는 그 이상(4GB or more)라면 아래 숫자를 적용해보세요.


<IfModule mpm_prefork_module>
    StartServers             10
    MinSpareServers       10
    MaxSpareServers      20
    MaxRequestWorkers     300
    ServerLimit           300
    MaxConnectionsPerChild   0
</IfModule>

설정 변경 후 Apache 를 재시작하면 적용됩니다.

 

규칙

StartServer 와 MinSpareServers 는 같은값이어야 합니다.
MaxSpareServer 는 MinSpareServers 의 2배이어야 합니다.
ServerLimit 의 기본값은 256 입니다.
MaxRequestWorkers 는 ServerLimit 을 넘을 수 없습니다.
만약 MaxRequestWorkers 값이 256 이 넘는값을 설정하려면 같은 값으로 ServerLimit 도 설정해주세요.

 

*) 이것을 손대기 전에 (이미지 캐시서버 구축하기 : https://blog.lael.be/post/7605) 글을 읽고 적용해보세요.
물리적으로 connection 수가 줄어들기 때문에 더 많은 동시접속을 처리할 수 있게 됩니다. 그리고 2대가 처리하기 때문에 페이지가 더 빠르게 표시됩니다.

 


 

 

 

# 1차 글 완성 : 2018년 11월 16일
# 2차 수정 : 2018년 11월 18일
# 3차 검수완료 : 2018년 11월 21일
# 4차 수정완료 : 2018년 11월 29일
# 5차 수정완료 : 2018년 12월 13일
# 6차 수정완료 : 2019년 01월 10일
# 7차 수정완료 : 2019년 01월 14일 - OCSP 및 업로드폴더 보안설정 추가.
# 검수 및 마무리 : 2019년 01월 22일

 

* 성공적으로 구성을 마쳤다면 SNS에 이 글을 공유해 주시거나, 댓글로 알려주세요.
후기나 시행착오 파악에 도움이 됩니다.
감사합니다!

190 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 은 써볼만 합니다. 저렴하니까 사용해보세요.

  9. 위의 글대로 모두 설정후 그누보드5 설치를 했습니다.

    1. 처음에는 로그인 기능과 자동로그인 캡챠 그림이 나왔습니다.

    2. 그후 한두시간 후에 다시 접속해보니 로그인기능과 자동로그인 캡챠그림이 안나옵니다.

    즉, 아이디와 패스워드가 맞으면, 다시 로그인창이 그대로 있구요,
    아이디와 패스워드가 틀리면, 틀리다는 팝업창이 나옵니다.

    그리고, 회원가입이나 패스워드 찾기에서 자동등록방지 캡챠그림이 안나옵니다.

    3. 처음에 AWS 라이트세일 우분투 18.04 버전에서 NGINX로 설치했으나,
    위와 같은 문제때문에, 다시 Apache2로 설치했는데,
    처음에는 잘 되었는데, 시간이 흐른후(고작 한두시간후)에 안되네요

    물론 mysql 환경설정의 passwd 관련 2 가지도 설정한 상태입니다.

    답답해서 일단 댓글 올립니다. 감사합니다.

    1. myuser1 디렉토리의 소유권을 제가 예전처럼 www-data 로 해서 안된거 같습니다.
      chown -R myuser1:myuser1 myuser1 으로 하니, 해결이 되었습니다.

  10. 그누보드5 설치후 관리자 – 기본환경설정 – 메일 보내기 또는 아이디 비밀번호 찾기하면, 메일이 날아갑니다.
    문제는 메일 도착시간이 딜레이(Delay)가 거의 2~3시간 됩니다.

    구글메일, 다음메일 등으로 테스트를 해봤는데, 바로 오는 경우는 극히 드물고,
    1~3시간 후에 도착하는 경우가 많은데, 혹시 무슨 문제인지 알 수 있을까요?

    sendmail 프로세스는 떠 있는 상태입니다.

    1. 그건 스팸검사 때문에 그런거에요. spf 설정하면 괜찮아 질겁니다.

      1. SPF 설정후
        AWS 라이트세일 인스턴스를 생성해서 해봐도 delay가 생깁니다.
        처음 한두번은 잘 되다가 6~10분 딜레이가 생기네요

        그래서, 오늘은 VULTR 를 이용해서, 똑같은 조건에 해보면,
        메일보내기(sendmail)가 잘됩니다.

        ifconfig -a 해보면,
        라이트세일은 사설IP가 세팅되어 있고,
        VULTR은 고정IP가 세팅되어 있습니다.

        아마 고정IP 영향이 아닐까 싶습니다.

        ps -ef | grep sendmail

        해보면,
        라이트세일은 메일보내기후에도 계속 남아있다가 sendmail데몬이 사라지면 그제서야 메일이 도착하고,

        VULTR은 sendmail데몬이 순신간에 사라지고, 메일이 금방 도착해서 보입니다.

        저는 라이트세일을 사용하고 싶은데,
        sendmail 해결방법이 없을까요?

        1. 방금 lightsail에서 본문과 완전히 동일한 구성으로 구축한 그누보드 사이트에서, 메일발송 테스트를 해 보았고 즉시 도착하는 것을 확인했습니다.
          다른 원인이 있을 수 있습니다.

          1. 처음 한두번은 잔되다가 세네번째부터 늦게 도착하네요

            그나마 다행인건 SPF설정후인지 30분내로는 도착하네요

            낼 다시 해볼게요 감사합니다.

            무료도메인 이용했는데 그 영향은 아니겠지요?

            1. 본문에 5-2) 시스템 이름(hostname) 설정 를 추가했습니다.
              읽어보시고 적용해주세요. sendmail 프로그램 사용시, 스팸으로 분류되는 것을 막아주고, 메일 전송속도를 높여줍니다.

  11. 안녕하세요 ! 서버셋팅할때마다 와서 도움받고 있습니다 ~ 이번에도 문제없이 설치 완료 했습니다 ! 감사합니다 🙂
    그런데 명령어중에, 맨 위에 있는 qwerty가 vagrant 를 이용한 가상박스에서 작동하지 않고 해당 커맨드가 없다는 오류를 띄우던데, 혹시 따로 설치하는게 있는건가 해서요 🙂

    매번 감사드립니다 !

    1. 안녕하세요! 은아월님!
      은아월님 댓글은 조금더 신경써서 살펴보고 있어요.
      동일한 닉네임을 사용하신 다른 은아월님께서 몇년전에 이런 그림을 선물해 주셨거든요~ 지금도 제 Mac 컴퓨터의 바탕화면입니다~
      해당 qwerty 명령어는 쉘의 언어값 확인을 위해 사용하는, 존재하지 않는 의미없는 명령어입니다. 오류나는 것이 정상입니다.
      vagrant 를 이용하신다면 https://puphpet.com/ 를 살펴봐주세요.
      감사합니다!

      1. 아 🙂 그런데 아쉽게도 저는 다른 은아월 이라서요 ㅜㅜ
        저도 매번 도움만 받고 있는 처지라 정말 된다면 커피라도 한잔 사드리고 싶네요 ‘-‘ !
        답글 감사합니다!

        1. 앗, 저는 사주시는건 사양하지 않아요 ㅜㅜ

  12. 덕분에 설치 잘하였습니다. ^^ 감사합니다.

    근데, 다름이 아니라,
    FTP가 처음엔 잘 되었는데, 얼마 안 있어 아래와 같은 에러가 생기면서
    error while writing: received failure with description ‘Failure’
    업로드도, 설치해둔 그누보드 로그인도 안 되네요.

    /var/www/html
    /tmp
    /home

    이 세 폴더 살펴보니 용량이 아주 쪼매난데,
    왜 용량 부족이라는 메세지가 뜨는지?

    다시 정상적으로 파일 업로드 되게 설정하는 법과 그 설정을 유지하려면 어떻게 해야 하는지 알고 싶습니다.

    1. 용량이 부족해서 생긴 오류인지는 알 수 없습니다.
      ftp 서버 로그를 살펴보셔야 할 것 같네요.

    2. 디스크 점검해보니, 아래 애가 만땅으로 차지 중인데, 이게 뭔지?

      ~# df
      Filesystem 1K-blocks Used Available Use% Mounted on
      udev 990656 0 990656 0% /dev
      tmpfs 204008 632 203376 1% /run
      /dev/mapper/ubuntu–vg-root 36815556 36796312 0 100% / <———— 요놈 ?
      tmpfs 1020036 0 1020036 0% /dev/shm
      tmpfs 5120 0 5120 0% /run/lock
      tmpfs 1020036 0 1020036 0% /sys/fs/cgroup
      /dev/vda1 482922 141065 316923 31% /boot
      tmpfs 204004 0 204004 0% /run/user/0
      tmpfs 204004 0 204004 0% /run/user/1000

      1. 서버 디스크가 40GB 이고, 사이트 파일이 40GB 가 넘는것 같습니다. (실제 사용가능 공간은 35GB)
        상위 상품으로 변경해서 용량을 늘리거나 파일을 지워주세요.

        1. /var/www 폴더 안에 용량 100% 잡아먹는 유령 index.html 파일이 있었네요.
          그걸 삭제했더니 업로드 잘 되네요.

          덕분에 잘 해결되었습니다. 감사합니다.

          P.S
          /dev/mapper/ubuntu–vg-root 이건 파티션이라 지우면 안 된다고 하네요.

  13. 이 글 보고 한번에 사이트 열었습니다! 흐얽 감사드립니다ㅠㅠ

    1. 흐얽 화이팅!
      이제 웹의 세계로!

  14. 라엘 님, /var/www/html 폴더 안에 설치한 phpmyadmin 프로그램은 어디에서 삭제 가능한지?
    여기에다 설치해서 그런지,
    가상호스트로 https 적용한 도메인 뒤에 해당 폴더 이름을 붙이니까 접속이 안 되더라구요.

    설치된 걸 지우고 예전 우분투 14.04 때 설치한 방식으로 설치하려고 합니다.
    기존 거 깨끗이 지우는 방법 소개 부탁드립니다.

    루트에서도,
    var/www/html 폴더에서도
    아래 명령어 둘 다 안 먹히더라구요.
    sudo apt-get remove phpmyadmin
    sudo apt-get remove mydbadmin

    1. ftp 로 접속해서 그냥 지우시면 됩니다.

  15. 라엘 님, 비밀번호 엄격성 완화된 상태를 영구적으로 적용하려면 어떻게 해야 하는지?
    https://sir.kr/qa/289623

    ps.
    설 연휴 잘 보내시길 바랍니다.

    1. 안녕하세요. 해당 링크 글에 답변 달았습니다.
      감사합니다!

  16. 안녕하세요. 라엘 님,

    현재 제가 아래와 같은 상황을 겪고 있는데,
    카페24측 답변이 해당 글에 답변 달아놓은 것과 같습니다.
    https://sir.kr/qa/288988

    어떤 걸 살펴봐야 할까요?
    PHP나 MySQL 등에서 패킷 설정이 잘못 되었을까요?

    http://homzzang.com/b/license (403에러발생 O) –> https로 못 넘어감.
    http://homzzang.com/b/license-11 (403 에러발생 X) –> https로 잘 넘어감.

    현재, 다 괜찮은데, 아래 두 게시판에서 같은 증상 발생하네요.
    http://homzzang.com/b/license
    http://homzzang.com/b/copyright

    ps.

    1.
    오토셋 (PHP7.2.10 + MariaDB10) 버전에서, 홈페이지 동일 소스로 접속 잘 됩니다.

    2.
    두 게시판을 복사한 license2, copyright2 게시판은 잘 접속됩니다.

    1. 해당글에 답변달았습니다.

      1. 감사합니다.
        덕분에 궁금해 환장할뻔한 난제 해결했네요.
        오늘 기분이 너무너무 좋습니다.
        ( ^ __________ ^ ) ===b

  17. 안녕하세요. 라엘 님,

    다름이 아니라, 제가 바둑 솔루션을 받아서 설치했는데, 착수가 안 되네요.
    https://homzzang.com/game/baduk/

    https://codepen.io/drshoggoth/pen/wCcBy 에서 받은 건데, 컴에서도 잘 됩니다.
    그런데, 제 서버에서는 착수가 안 되네요.

    어떤 모듈을 설치해줘야 착수가 될까요?

    1. 하단의 jquery 불러오는걸 http 에서 https 로 바꿔보세요.

      1. 오~~~~~~~~~~호, 잘 돼요. ^^
        감사합니다. ( ^ _______ ^ ) ===b

  18. 언제나 도움 잘 받고 있습니다. 이 글 보고 하루만에 서버 세팅 다 했네요.

    위 포스팅 스크린샷에 있는 터미널 폰트 가독성이 좋아 보이는데 어떤 걸 쓰시나요?

    1. 저는 코딩은 맥 컴퓨터만 사용합니다.
      저 폰트는 맥 기본폰트인 애플고딕입니다.

  19. 문형환 님 저는 위키북스 출판사에서 근무하는 이인호라고 합니다.
    형환 님께 메일을 보내고 싶은데 메일 주소를 찾지 못했습니다.
    혹시 답변 가능하시면 —-로 보내주실 수 있을지요?
    그럼 해당 메일로 문의를 드리고 싶습니다.
    그럼 답변 부탁드립니다.

  20. 안녕하세요 . 우선 좋은 강좌 감사드립니다.

    한가지 궁금한점이 있습니다. nginx를 설치하고 설정을 보니
    저의 경로는 /etc/nginx/conf.d 식으로 되있습니다.
    node js를 설치하려 구글링을 하니 모두 아래의 경로에 있다고하는데요..
    /etc/nginx/sites-available/default
    제가 잘못 설치를 한건지 궁금합니다.

    1. 음, apache 글에 nginx 질문을 하셨고, 갑자기 nodejs 가 왜 나온것인지 모르겠습니다.
      아마 nginx 에서 nodejs 로 proxy 설정하는 방법을 구글에 찾아보신 것 같습니다.
      폴더 구조 및 경로는 설치한 배포판 종류에 따라서 다릅니다.
      따라서 폴더 및 파일위치를 적당히 해석해서 적용하면 될것 같습니다.
      또는 시간이 된다면 제가 nodejs 구축법을 작성하도록 하겠습니다.

      1. 아 죄송합니다. NGINX + PHP-FPM + MariaDB 이 글에 쓴다는 것이 apache글에 썻네요..
        글을보고 작업을 하였고 추가로 nodejs를 설치하다 궁금한 사항이 있어서 여쭈어 본겁니다.
        답변 감사드립니다. 🙂

        1. 네. 참고로, nginx.org(공식사이트) 에서 제공한 패키지로 설치하면 /etc/nginx/conf.d 폴더구조로,
          packages.ubuntu.com (운영체제 기본 패키지 저장소) 에서 설치하면 /etc/nginx/sites-available/ 폴더구조로 설치됩니다.
          폴더구조뿐만 아니라 실행방식도 달라져서 세팅법도 달라집니다.

  21. 덕분에 잘 서버를 구축했습니다
    그런데 wordpress를 돌려보고 싶어서 똑같이 따라했는데 Apache2의 화면이 계속 뜨고 있는데 혹시 원인을 알 수 있을까요ㅜㅜ

    1. 안녕하세요? 예은님!
      본문의 Apache2 환경설정 생성기를 살펴봐주세요.
      환경설정 파일을 만들지 않았거나, 도메인주소 입력에 오타가 있거나, 환경설정파일을 활성화(a2ensite)하지 않았거나, 아파치 재시작(service apache2 reload 또는 restart)을 하지 않았을 것입니다.

  22. 항상 Lael 님 덕분에 서버 세팅시 도움을 많이 받고 있습니다
    아직 초보 단계라 모르는게 너무 많습니다

    Nginx + php-fpm 관련 글은 많은데
    Apache + php-fpm 관련 글은 찾아 보기 힘듭니다
    특별한 이유가 있을까요?

    제가 하고 싶은건 Apache + php-fpm + HTTP2 인데
    자세한 정보를 찾기가 쉽지 않네요

    1. 수요의 문제이겠죠? apache2, php-fpm 을 사용하는 경우는 거의 없습니다.

  23. 안녕하세요^^ 덕분에 너무 설치 잘하였습니다.

    다름 아니라, 그누보드 설치만 앞두고 있는 상황입니다.

    근데 아무리 정보를 넣어도 다 틀리다고 나오네요.

    분명히 mydbadmin은 잘 접속이 되는 아이디와 비번인데,

    그누보드 설치에 넣으니 정보다 틀리다고 나옵니다..

    (물론 그누보드 설치할 DB도 세팅해 두었습니다!^^)

    덕분에 너무 잘 세팅했는데, 코앞에서 막혀버리네요 ㅠ

    1. 확인이 늦었네요. 아마 지금쯤 해결하셨을것이라 생각합니다.

  24. 리눅스 셋팅할때마다 찾게되는 블로그…
    이번에도 잘 봤습니다. 내용이 많이 추가되어, 좋은 정보 많이 봤습니다.

    1. 감사합니다! 글 쓸때마다 노하우가 쌓이는 것 같아요.
      최대한 쉽고 안전하게 작성하고 있습니다!

  25. 서버아이피주소/mydbadmin
    을 하였을시에 접속이 안되는데 무엇이 문제일까요
    그대로 따라했는데

  26. 라엘 님, 안녕하세요?
    다름이 아니라, 그누보드에서 게시판을 생성했는데,
    생성한 게시판으로 이동을 안 하고, 404 페이지로 넘어가네요.
    게시판 아이디가 game , xml 입니다.
    number나 aaa 등 테이블은 정상적으로 생생되어 해당 게시판으로 이동하더라구요.
    아마도, 이것도 서버 세팅 어딘가의 문제로 인해서 그런 듯 한데,,,,
    어디를 손 봐야 할까요?

    1. 원인을 더 찾아봐야할것 같습니다.
      바로 생각나는 해결책은 없네요.

      1. 생성한 당일엔 인터넷임시파일제거 캐시새로고침 서버재시작 등
        온갖 조치를 다 해봐도 404페이지로 이동하던데,
        다음 날 일어나서 확인해 보니 정상적으로 게시판으로 이동하더라구요.
        어찌된 영문인지 모르겠네요. 아무튼, 현재는 정상적으로 이동되네요.
        혹시, 나중에 비슷한 증상 발견하거든 다시 제보드릴게요.

        ps.
        항상 감사하는 거 아시죠? ^ !~

  27. 라엘 님,
    혹시, 라엘 님 사용하시는 캡챠 어디서 구할 수 있는지요?
    저도 숫자 연산 캡챠 사용해보고 싶네요.

    그누보드 사용 중인데, 스팸가입 때문에 돌아가시겠네용.ㅜㅜ

    1. 저는 워드프레스 플러그인으로 쓰고 있어요. 수동캡챠 만들어보세요. 특정한 고정단어 입력하도록.

  28. 안녕하세요
    학생이라 배우는중인데
    LetsEncrypt인증서 받는 중에 오류가 나서 어떤게 문제인지 궁금합니다
    Plugins selected: Authenticator webroot, Installer None
    Obtaining a new certificate
    Performing the following challenges:
    http-01 challenge for wlzlwhk.cf
    Using the webroot path /home/wlzlwhk/www for all unmatched domains.
    Waiting for verification…
    Cleaning up challenges
    Failed authorization procedure. wlzlwhk.cf (http-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: unknownHost :: No valid IP addresses found for wlzlwhk.cf

    IMPORTANT NOTES:
    – The following errors were reported by the server:

    Domain: wlzlwhk.cf
    Type: connection
    Detail: unknownHost :: No valid IP addresses found for wlzlwhk.cf

    To fix these errors, please make sure that your domain name was
    entered correctly and the DNS A/AAAA record(s) for that domain
    contain(s) the right IP address. Additionally, please check that
    your computer has a publicly routable IP address and that no
    firewalls are preventing the server from communicating with the
    client. If you’re using the webroot plugin, you should also verify
    that you are serving files from the webroot path you provided.

    이렇게 오류가 나는데 ip주소가 유효하지 않다는데
    제가 vmware로 일단 실험중이라 그런지 vmware가 문제인지 잘 모르겠습니다

    1. 도메인 DNS 설정을 하지 않았네요. 먼저, 도메인의 네임서버 설정에서 서버의 IP를 적어야합니다.

  29. 와… 완벽 하시네요 덕분에 설치 잘 했습니다. FTP만 이제 하면 되겠어요 ㅋ

    1. 감사합니다! 물론 블로그에 ftp 구축하는 방법도 있습니다.

  30. 안녕하세요, 개인 웹사이트 개설해보려고 공부하다가 꼼꼼하게 친절한 설명 적어주신 덕분에 AWS 설정 이후로 큰 도움 받고있습니다. 감사드립니다.
    헌데 진행중에 중간 과정에서 막혀버렸네요 ㅠㅠ

    ‘ 3] 웹사이트 Apache 환경설정파일 작성 ‘
    단계에서 config 파일을 적용하면 forbidden/notfound이 떠서
    ‘ 4] 데이터베이스 생성 ‘단계의 (사이트)/mydbadmin에 접속을 할 수가 없어 막힌 상태입니다 ㅠㅠ
    이전 단계까지는 잘못 설정한 것이 없는 것 같은데 어디서 놓친걸까요?

    사이트 최상위 디렉토리로 접속시도하면 forbidden이 뜨고 (You don’t have permission to access / on this server.)
    하위 디렉토리에 접근하려하면 NotFound가 표시되네요. (The requested URL /mydbadmin was not found on this server.)

    1. 워낙 경우의 수가 많아서 문제의 원인을 찾기 어렵네요. 처음부터 다시 시도해 보세요.

    2. 저도 딱 여기부터 막히더라구요. 저거랑 ipv6 차단한거 지우면 mydbadmin에 잘 들어가지던데 전공자가 아니라서 잘 모르겠네요

  31. 안녕하세요.

    서버 셋팅중 ip를 브라우저에 입력하면 접속이 되야하는데 접속이 되지않습니다.

    ifconfig 입력 후 inet에 해당되는 ip를 입력하였는데 되지를 않네요..

    무엇이 문제일까요

    1. AWS를 사용중인 것으로 보입니다. 이 경우 웹브라우저에 서버의 공인IP 를 입력해주세요. 방화벽 설정(Security Group)도 확인해보세요.

  32. 서버를 아무리 여러번 갈아엎어가면서 시도해도 HTTP/HTTPS 구성하는 과정에서 자꾸 오류가 발생하는데 이 단계는 건너뛰고 진행해도 서버 구성 자체에는 문제가 없나요?

    1. 넵. 우선 http 로만 사이트를 열고 그 후에 https 를 도전해보세요.
      처음 한번만 어렵습니다.

  33. 글만 잘쓰신 게 아니라, 순서까지 완벽하네요.. 좋은 정보 감사합니다. 따봉!

  34. IP 주소로 접속하는 거는 어떻게 차단하면 좋을까요?

    1. 본문 예시에 나와있습니다.

      1. lael.be 도메인 IP 주소가 121.131.xx.xxx 이렇게 되어있는 데,
        작성자 님께서는 ip 접속을 따로 차단하진 않으시고,
        해당 ip로 들어오는 접속은 빈 index 파일에 연결되도록 해놓으신 건가요?

        1. 네. 이렇게 해두어도 큰 문제는 없어요.

  35. 안녕하세요.
    좋은글 항상감사드립니다.
    다만 16.04로 항상 진행하다가 이번에 처음으로 18.04로 구축을 진행해보는데
    apache2 버추얼호스트가 작동을 안하는것처럼 보이네요 ㅠㅠ
    (계속 기본 도큐먼트 디렉토리인 /var/www/html/ 연결됨, SSL 적용안됨)

    a2ensite 후 reload확인, hosts 확인, 방화벽 관련 확인등 해보고
    apache2 error.log로 확인해보니 별다른 에러는 없는것같습니다 ㅠㅠ

    더 확인해봐야할 사항이 있을까요?

    1. apache2ctl -S 명령어를 실행해보세요.

      1. 결국 원인은 못찾고 다시 설치했는데 성공했습니다.ㅠㅠ

        제가 중간에 뭔가를 잘못 설정한 모양이네요.

        항상 좋은글과 답변 감사드립니다.

  36. 라엘님블로그보고 우분투서버를 따라 만들어서 미디어서버 전용으로 잘 사용하고 있습니다.
    그런데 컴퓨터 전공자가 아니라서 그런지 막히는 문제가 있어서 하나 질문드릴까 합니다.
    현재 transmission 을 사용중에 외장하드 2T를 추가해서 그곳에서 다운받아서 삼바공유와 plex폴더를 모두 연결해서 사용할려고 하는데 삼바와 플렉스는 모두 잘되는데 transmission에서 다운을 받으면 권한을 준 폴더임에도 불구하고 Permission denied 가 뜸니다.
    구글링을 아무리 해봐도 해결책이 보이지 않아서 염치불구하고 문의드립니다.
    안되면 다 밀어버리고 그냥 2Tb서버를 다시만들어야 할지..신중히 고민중입니다.ㅠ
    끝가지봐주셔서 감사합니다.

    1. 죄송해요. 모든 소프트웨어 상황에 대해서는 알지 못합니다.
      다만, 리눅스 권한은 상위 폴더를 살피므로, /home/mydata/nas1/movie 폴더에 권한을 줄 경우 /home 부터 /home/mydata, /home/mydata/nas1 에 대해서 other 사용자에 x(execute) 권한이 있어야 할겁니다.

  37. 안녕하세요 블로그보고 세팅 공부중입니다.
    3] 웹사이트 Apache 환경설정파일 작성
    부분에서 환경설정 파일을 생성하고 적용을 하려고 reload를 하면

    AH00526: Syntax error on line 12 of /etc/apache2….conf
    invalid command ‘php_value’ perhaps misspelled or defined by a module not included in the server configuration

    이런 에러가 발생합니다.
    이틀동안 구글링 하고 찾아봐도 도무지 답이 안나와서 댓글남깁니다.

    1. 안녕하세요 솔진님.
      아마도, apache는 설치하시고, php는 설치하지 않으신것 같습니다. php를 설치하지 않은 경우 php_value 와 같은 구문은 오류를 일으키므로, 해당conf 파일에서 오류가 나는 줄을 삭제한 후 다시 시도해보세요. 또는 php를 설치하시면 됩니다.
      감사합니다.

  38. 안녕하세요. 항상 잘보고 있습니다.

    https://blog.lael.be/post/5107 <- 여기에 나와있는 ssl 인증하는 과정은

    18.04도 동일한가요?

    아니면 18.04는 다른 방법이 있는것인지요?

    답변을 주신다면 정말 감사합니다.

    1. 안녕하세요. 인증하는 과정은 완전히 동일합니다.
      몇가지 변경된 부분이 있긴한데 이전 명령어로도 완전히 잘 동작하도록 되어 있습니다.

  39. 안녕하세요.
    이 글을 보고 워드프레스를 작업하려고 합니다.
    Apache2 환경설정 생성기 보고 설정 파일 추가 후 서버 재시작까지 했는데 도메인으로 접속을 하면
    522 Connection timed out
    에러가 뜹니다.

    클라우드 플레어 사용 중입니다
    혹시 원인을 알 수 있을까요?

    1. 아 https 방화벽을 안키고 했었네요…

      처음부터 그대로 따라 했는데 잘 됩니다.
      감사합니다!

  40. 안녕하세요 글을 보면서 설정하고 있는데
    /etc/apache2/mods-available/php7.2.conf를 에디터로 열게 되면 아무것도 적혀있지 않아서 확인을 해봤더니
    /etc/apache2/mods-available 위치에 php7.2.conf 파일이 없었습니다
    이런 경우에는 해결 방법이 있을까요?

    1. 중간에 php 설치 명령어를 안쓰신 것 같습니다.
      또는
      # apt install libapache2-mod-php7.2
      명령어를 입력해보세요.

      1. 알려주신 apt install libapache2-mod-php7.2을 입력해봤는데

        패키지 목록을 읽는 중입니다… 완료
        의존성 트리를 만드는 중입니다
        상태 정보를 읽는 중입니다… 완료
        libapache2-mod-php7.2 is already the newest version (7.2.19-0ubuntu0.18.04.1).
        0개 업그레이드, 0개 새로 설치, 0개 제거 및 0개 업그레이드 안 함.
        라고 출력됩니다

        혹시 설정중에 블로그에 있는 16.04 LTS 버전의 글을 따라서 apache, php, mysql을 설치하던 도중에 오류가 나서 apache만 삭제하고 현재 글을 처음부터 다시 따라했는데 여기서 문제가 될수도 있을까요?

        1. 무언가 놓친 부분이 있을거에요. 서버를 초기화 한 다음에 다시 시도하는걸 추천해드립니다.

  41. 안녕하세요 설정하던 중에 궁금해서 다시 여쭤봅니다.
    DB관리자 생성하는데에서 생성을 했는데 블로그프로그램에서 쓰지못하면 어떤계정을 만들어서 써야하나요?

    1. root 이외의 사용자 이름으로 다시 사용자를 생성해보세요.

  42. 이 페이지의 게시글을 보고 너무 잘 되어서 페이지를 따로 갖고가고싶어서 댓글 남겨드립니다..
    페이지의 워드프레스 내보내기하신 파일을 이메일로 받을 수 있는가 궁금합니다.

    1. adblock 같은 광고차단 프로그램을 설치한 후에, 브라우저의 인쇄 > PDF 저장 메뉴를 이용해보세요.
      블로그 테마 디자인 할 때, 인쇄/PDF저장에 호환되도록 처리해두었습니다.

  43. 안녕하세요? 라엘님 오랜만에 블로그 방문했다가 18.04 버전 글이 올라와서 업데이트 후 테스트 중 입니다.

    우선 매번 좋은 글 감사합니다.

    위 글대로 작성하여 거의 모든 것을 마무리했는데 ftp말고 sftp를 사용하려고 하는데 위에 설정대로하면 sftp는 작동되지 않는건가요? 따로 해야하는 작업이 있는건가요?

    1. 위의 내용대로 따라하시면 sftp는 기본적으로 사용할 수 있습니다.

  44. 최고예요!!!!! 잘 보고 적용 했습니다!!

  45. 안녕하세요.
    어제까지 잘 되던 사이트가 갑자기 오늘부로 접속이 안됩니다.
    로그를 볼려해도 어제까지의 로그만 쌓여있고 오늘은 쌓이지가 않네요..

    사이트에 연결할 수 없다고만나오네요.

    테스트 서버인데 주소는 아래와 같습니다.
    http://49.247.203.182:8080/Kallyas/index.html

    curl을 해보면 아래와 같이 나옵니다.
    curl 49.247.203.182:8080
    curl: (7) Failed to connect to 49.247.203.182 port 8080: No route to host

    어디부분이 잘못 된걸까요?
    로그가 남지 않으니 어떻게 해결해야될 지 막막합니다..ㅜㅜ

    환경은 apache + Ubuntu 18.04 입니다.

    1. 저는 접속이 되네요. 일시적 장애 아니었을까요?

      1. 안녕하세요. 답변감사드립니다.

        iptables -F 로 초기화 하니 접속이되네요..ㅠ

  46. 안녕하세요.
    이 글을 보고 ec2 인스턴스에 서버구축하고 워드프레스 설치를 했는데요 워드프레스 설치하고 시작할때 사용할 데이터베이스 이름을 입력하라는곳에 어떤이름을 입력해야 하나요?
    그리고…. 인증서 발급 부분이 잘 안되는데… 포트 80어쩌구 하는 에러문구가 나와요 …

    1. 안녕하세요. 데이터베이스 주소는 localhost, 데이터베이스 이름은 db로그인아이디 를 입력하시면 됩니다.
      인증서 80은 아마도 방화벽 관련 문제인것 같습니다. aws 에서 lightsail의 경우엔 방화벽, ec2인 경우에는 security group 부분을 확인 후 http 및 https 가 anywhere 로 허용되어있는지 확인해보세요.

  47. 블로그 참고해서 우분투 서버 세팅해서 사용해보고 있습니다. 소규모 웹 서버 운영이 목표라서요~^^

    많이 따라왔는데 오류가 있습니다 ㅠ 중간중간 빠트린게 있는지 싶기도 하고,

    1) 그누보드5 설치 – 최초 설정한 관리자 계정으로는 그누보드5가 설치가 되는데, 별도로 생성한 사용자 계정에서는 설치가 안됩니다.

    2) 별도로 설치한 사용자 계정이나 최초 설정한 관리자 계정의 경우 index.php를 먼저 읽어들이게 하고 싶은데 index.html을 먼저 읽는데, 순서를 변경할 수 있나요?

    http://webpublisher.iptime.org/index.php : 정상적으로 포트포워딩 되어서 접속되십니다.
    http://webpublisher.iptime.org/~seon/index.php : 이게 지금 문제되는 사용자 계정이네요 -ㅅ-;

    그누보드5가 관리자 계정에서는 되는데, 별도 생성한 사용자 계정에서는 설치도 안되고 아예 php 코드가 노출이 되어버리는 문제가 있습니다.

    어디서부터 체크를 해봐야할까요?

    1. 안녕하세요. ~seon 같은 형식은 UserDir 형식이라고 하는데 요즘엔 잘 안쓰이는 방식입니다. 보안문제도 있고 관리도 힘듭니다.
      제 가이드는 UserDir 형식을 지원하게 되어 있지 않습니다.
      본문 중앙의 도메인 구매 링크를 통해서, 1년에 1만원 정도하는 com 도메인을 구매하시거나, 무료 도메인을 만들어보세요.
      도메인을 만든 후에 DNS에 webpublisher.iptime.org와 동일한 아이피를 적어보세요.

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

    그누보드 소스에서 다음의 함수를 수정.

    lib/common.lib.php 1557째줄 근처의 sql_password 함수를 아래와 같이 변경합니다.

    lib/common.lib.php => 경로에 파일이 안보입니다.

    1. 아 글 수정해야겠네요. 최근 발표된 그누 5.4에서 대폭개편되어서 본문의 코드패치가 없어도 동작합니다.

      1. 저는 우분투 파일인줄 알았네요
        그누 소스 파일은 있네요..
        우분투 14.04 php5.5.9 => 서버를 옴기려고 하는데 큰입니다.
        우분투 16.04 에 php5.6인줄 알고 셋팅 다 했는데…ㅠㅠ

  49. 감사합니다~~

    잘 쓰고 잘 활용하겠습니다~

  50. 선배님,
    매번 잘 보고 있습니다.
    현재 ssl 설정에서
    아래와 같은 명령어를 입력하니,
    a2ensite 000-default-ssl.conf

    ERROR: Site 000-default-ssl does not exist!라고 뜹니다.. 어떻게 해결방법이 없을까요?ㅠㅠ

    1. 안녕하세요 후배님,
      mv /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/000-default-ssl.conf 명령어를 실행해주세요.

      /etc/apache2/sites-available/ 위치의 파일 목록을 확인 후 명령어를 수정해보세요.

  51. 엄청 큰 도움 받고 갑니다!! 감사해요!

  52. 라엘 님, 잘 살고 계시죠? ^^
    다름이 아니라,
    SSH 접속 관련해 궁금한 게 있어 문의차 들렸어요.

    얼마 전 제 아이피가 갑자기 바뀐 이후로,
    재부팅만 후 putty로 SSH 접속 시도하면,
    root 입력하는 부분조차 안 뜨더라구요.

    iptables에 예전 아이피로만 접근 설정을 한 게 화근이 되어서
    카페24 고객센터에 요청해서 접속은 되게 해주셨어요.

    현재 설정 상태는 아래와 같습니다.
    (1) UFW: inactive 상태
    (2) iptables 프로그램: 제거된 상태.,
    (3) 카페24방화벽: 현재 IP로만 SSH접근 가능 상태

    카페24 운영자 님 말씀으로는 카페24 방화벽 문제는 아니라고 하시더라구요.
    제 서버 방화벽이 문제를 일으킨다고 하시네요.

    혹시, SSH 접근 제어하는 부분이 또 있을까요?
    어떻게 해야 재부팅해도 SSH 로그인창이 뜰까요?

    1. 접속한다음 iptables -F 를 입력해보세요

  53. 안녕하세요.
    서버 구성 찾다가 들어오게 됐습니다.
    db서버,file서버,워드프레스 선배들. 어깨너머로만 보다가 직접만들어 보려 합니다.
    목표는 lg웹하드 비슷하게 한번 만들어 보는것 입니다.
    라엘님 올려주신글 20번은 더 봐야할 거 같습니다.

    덕분에 좋은 되게 해주셔서 감사합니다.

    1. 초기에 많은 노력이 필요할 것입니다.
      그리고 생각보다 쉽게 lg웹하드를 구축할수 있습니다.

  54. 안녕하세요. 라엘님.
    라엘님 글 보고 엄청난 도움을 받고 있습니다. 감사합니다.
    이 글을 보고, 우분투 20.04에도 동일하게 설치했습니다.
    근데, MySQL 설치에서, ‘/etc/mysql/mysql.conf.d/override.cnf 파일을 생성하고 아래의 내용을 저장한다.’ 부분에서 에러가 납니다.
    그래서, ‘아래의 내용’ 13줄 중에 위의 3줄만 남기고, 아랫쪽 10줄을 지우니까 작동하더군요.
    제가 지식이 짧아서, 뭐가 문제인지 까지는 모르겠습니다.
    그럼, 수고하세요.

    1. Ubuntu 20.04 LTS 출시를 확인했습니다.
      지금은 원인을 모르겠지만, 이 부분에 대해서는 조금 더 검토해보겠습니다.

  55. 안녕하세요 라엘님!

    아는 지인분 서버 구축을 하고 있는데
    사이트가 무조건 www.a.com으로 되도록 소스가 짜여져있는데
    이때 a.com과의 CORS 이슈가 있어서 폰트 몇개(폰트어썸)이 깨지는 현상이 있는데
    이를 어떻게 해결해야할까요 ㅠㅠ
    conf 및 .htaccess를 수정했는데도 cors 이슈가 있네요 ㅠㅠ

    1. conf에서 a.com 과 www.a.com 을 별개의 블록으로 정의하시고 a.com 의 cors 에 www.a.com 을 등록하세요.

  56. 여러 사이트를 참고해 우분투 서버를 설치하던중
    다시한번 도전해 보고 있습니다.

    설치과정이 다른 사이트에서 접하지 않은 여러 설정이 있어서 매우 만족스럽습니다
    이번에는 성공할것 같은 느낌리 듭니다

    궁금한 점은 설치과정중
    mysql server 설치후 버전 확인과정에 다음과 같은 에러가 발생 합니다.

    ~$ mysqladmin version 를 실행하면

    mysqladmin: connect to server at ‘localhost’ failed
    error: ‘Access denied for user ‘myserver’@’localhost’ (using password: NO)’

    이와같은 메시지가 나옵니다.
    건너띄고 계속하기는 신경이 쓰입니다.

    어느부분에서 빠트린 설정이 있을까요???

    ** 이전까지는 에러 발생이 없었습니다~~

    1. 혹시 mysql server 설치시 비밀번호 설정하셨었나요?
      그렇다면 mysqladmin -p version 이라고 입력해보세요.

      1. root@mkpchNT:/# mysqladmin -p version
        Enter password:
        mysqladmin: connect to server at ‘localhost’ failed
        error: ‘Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)’
        Check that mysqld is running and that the socket: ‘/var/run/mysqld/mysqld.sock’ exists!

        저 역시 위의 메세지만 나옵니다.

  57. 이 글 보면서 워드프레스까지 세팅했습니다.
    꼼꼼한 설명 너무 감사합니다.

  58. 라엘님 항상 감사드립니다 ㅠ

    다름이 아니라 일시적 mysql 계정생성이 안되도록 설정으로 막는 방법이 있을까요?

    아는 지인분 사이트(그누보드 구버전)에서 xss공격을 이용해서 임의로 db계정을 만들걸 확인해서
    xss공격이 어디서 났는지 확인하기전에 그런 방법이 있는지 궁금합니다 ㅠㅠ

    1. 임의의 db 계정을 만든것을 보니 그누보드를 root 사용자 계정으로 운영한것 같습니다.
      이것은 명백한 운영 잘못으로 보입니다. root 계정을 사용하지 않고 이 글처럼 일반 유저를 생성해서 사용한다면, 권한이 잘 적용되어 그런 문제가 발생하지 않을 것입니다.

      1. 감사합니다 ㅠㅠ
        안그래도 점검해보니 그누보드가 사용하는 db계정이 모든 권한으로 되어있었네요 ㅠ
        바로 수정했네요

        항상 감사드립니다.

  59. 안녕하세요? 오랜만에 질문 글을 남겨보는 것 같습니다.
    새로 서버 세팅할 일이 생겨 보니 우분투 20.04 LTS 버전이 나와서 라엘님의 18.04 세팅방법을 따라서 하던 중
    php의 기본 설치버전이 7.4라 위의 명령어 중 7.2로 되어있는 경로들 7.4로 세팅하고 작업을 잘 이어나가던 중
    mysql 설치 후 기본세팅 후 mysqld –verbose –help | grep configtest 명령어를 입력하니
    2020-06-10T15:18:28.745916Z 0 [ERROR] [MY-000077] [Server] /usr/sbin/mysqld: Error while setting value ‘NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’ to ‘sql_mode’.
    2020-06-10T15:18:28.747922Z 0 [ERROR] [MY-010119] [Server] Aborting 라는 오류 메시지를 띄우는데 혹시 무슨 오류인지 해결 방법은 있는지 알고 싶습니다. mysql 버전은 8.0.20-0ubuntu0.20.04.1 입니다.

    항상 라엘님 블로그 보면서 많이 공부하고 갑니다. 항상 감사드립니다.

    1. mysql 8 버전에서 많이 바뀐것 같습니다. 우선 해당 옵션 줄은 제거해주세요. 정상적인 웹소프트웨어를 사용중이라면 서비스에 영향을 전혀 주지 않습니다.

  60. 배우는데 정말 많은 도움이 되었습니다. 감사합니다~~~

    1. 힘차게 앞으로 나아가기 화이팅!

  61. 안녕하세요. 웹서버 구축 중에 이렇게 지금까지도 관리되고 있는 좋은 자료를 제공 받을 수 있음에 감사드립니다.

    다름이 아니고 따라가던 중 의문이 생겨서 질문을 하나 드립니다

    중간부분에 configuration 설정에서

    mv /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/000-default-ssl.conf

    명렁어는 왜 입력하는 건가요? 이렇게되면 이전 스텝에서 수정한 000-default-ssl.conf 파일이 사라지고 default-ssl.conf파일로 대체가 될텐데 왜 이런 작업을 하는지가 궁금합니다.

    또한 이 이후의 단계에서 a2ensite 000-default-ssl.conf 명령어를 입력시

    000-default-ssl 파일이 존재하지 않는 에러가 뜨는데 이를 어떻게 해결 할 수 있을까요?

    1. 안녕하세요.
      본문의 글을 보면 아시겠지만, 000-default.conf(http용) 파일과 000-default-ssl.conf(https용) 파일은 다른 파일입니다.
      올바르게 작업했다면 a2ensite 명령어가 오류를 발생시키지 않습니다.
      mv 명령어를 써야하는 이유는 본문에 추가하겠습니다.
      감사합니다.

  62. 와 .. 이제껏 APM 셋팅 관련해서 많은 포스팅들을 찾아봤지만, 이렇게 정리가 잘되어 있는 포스팅은 정말 처음 봅니다.
    감사합니다!!!

  63. 서버 설치후 그누보드 5.3.3.3 설치시 mysql 정보입력, 최고관리자 정보입력창에서 충분한 대,소문자,숫자,특수문자 8글자이상 암호설정이 되어있는데도 잘못된 요청입니다 만 뜹니다…

    1. 안녕하세요. 해당 사항은 특정 소프트웨어의 상황으로, 그누보드 질문게시판에 작성해 주시면 답변을 받으실 수 있을 것입니다.
      감사합니다.

  64. 안녕하세요?
    라엘님 글을 보며 고군분투하며(^^;) 우분투+apm 설치, 그리고 워드프레스까지 설치 했습니다. 감사합니다.

    그런데요, 워드프레스 설치 완료후, 워드프레스 설정에서 플러그인이든, 업데이트든 하려면 FTP 자격증명을 하라는 메시지가 나옵니다. 이 부분은 아무리 검색하며 해보아도 해결이 안되어 문의 드려봅니다.

    (제가 라엘님 설명과 다른 부분은 개인 유저부분 생성하지 않았고, 그냥 phpinfo and phpmyadmin 설치한 그 위치 /var/www/html 에 사용하였습니다.)

    부디 조언 부탁드려요~~….

  65. 안녕하세요 라엘님 혹시 제가 사이트를 운영하던 도중
    원본서버 ip가 노출되 원본서버 ip를 변경하였는데요
    그때 이후로 접속이 안되던데 딱히 설정해야되는 것은 없나요?
    (그냥 적용시간이 긴 거일수도 있는것 같아서 물어봅니다.)

    1. 클플 사용중이셨을거고, 원본 서버 아이피를 변경하셨다면, 클플에서 바꿔주기만 하면 1분안에 적용 될거에요.

  66. Pingback: 워드프레스 사이트 구축 | uncategorized

  67. 안녕하세요 글 잘 읽었습니다.
    현재 워드프레스 블로그를 만들어보려 하는데 메가존 유료도메인을 보유하고 있고 phpmyadmin 설명까지 진행하였습니다.
    워드프레스 블로그를 완성하였을때 접속을 도메인.com을 입력해도 www.도메인.com 으로만 접속되게하고 싶은데 DNS레코드 설정에서 www 서브도메인을 서버 IP에 연결해주고 ssl인증서는 www.도메인.com으로 발급받으면 되는 것인가요?

    감사합니다.

    1. DNS 에서 www 및, www 제외한것 모두 서버의 ip에 연결해주시고,
      SSL 인증서도 2개의 도메인에 인증을 받으시면 됩니다. (대부분 www 인증받으면, 기본도메인도 인증을 해줍니다.)
      도메인.com -> www.도메인.com 이동은 아래의 글을 참고해주세요.
      https://blog.lael.be/post/1130

  68. 처음으로 웹서버 도전중인데 워드프레스(?) 설치 과정에서 문제가 생겼습니다 블로그에서는 myuser1으로 로그인해서 하셨다고 했는데 제가 su myuser1 cd www이라고 치면 허가 거부하고 뜨네요..ㅠㅠ 처음으로 여기까지 왔는데 여기서 어떻데 해야할지 모르겠습니다 www파일이 /var 파일에있는 www로 해야하나요?하지만 그렇게하면 아이피 치고 서버 들어갔을때 워드프레스가 뜨지 않더라구요…

    1. root 로그인 한 상태에서 www 폴더를 지우고, myuser1 상태에서 www 를 만들어보세요.
      아마 소유권한 문제일 것입니다.

  69. 안녕하세요. 고맙습니다. 절차대로 우분투에 그누보드 잘 사용하고 있습니다.
    그런데 한가지 질문이 있습니다.

    /var/www/html/ 안에 mydbadmin 과 index.html(apach2 우분투 default page) 와 myphpinfo.php 있고 [제간만든폴더] 있습니다. 제가만든폴더에 그누보드를 설치해서 사용하고 있습니다.
    그런데 제가 도메인(~.co.kr) 치면 계속 index.html 파일이 나오더라고요.
    할수 없이 계속 도메인/제가만든폴더/index.php 로 입력해야 갈수 있는데
    상세하게 입력하지 않아도 도메인만 치면 바로 그누보드로 접근할 수 있는방법이 있나요?

    제가 노력한것은 index.html(apach2 우분투 default page)파일에

    이렇게 했는데 안되더라고요.
    우분투 18.04에 설명되로 권한설정 과 모든 프로그램을 절차되로 설치했는데
    제가 하고자하는 것에 충돌이 있는지 해결할수 있는 방법이 없습니다.

    조언 부탁드립니다.

    1. 글의
      12) 실제 사용 테스트
      부분을 참고해주세요.
      /var/www/html/ 에서의 사이트 구성은 권장하지 않습니다.

      그래도 /var/www/html/ 폴더를 사용하고 싶으시다면, /var/www/html/[내가만든폴더]/ 안에 있는 내용을 /var/www/html/ 위치로 이동하세요.
      명령어는 mv /var/www/html/[내가만든폴더]/* /var/www/html/ 입니다.

      1. 답변주셔서 고맙습니다. 그렇게 하겠습니다. 그리고 질문 있는데요. 죄송해요.
        mydbadmin 입니다.

        url/: 도메인/mydbadmin
        Not Found
        The requested URL was not found on this server.

        다른사이트에서 /etc/apache2/apache2.conf 여기 맨 마지막줄에
        Include /etc/phpmyadmin/apache.conf 입력하고 restart 하면
        문제가 해결된다고 하는데 현재 우분투에 /etc/phpmyadmin/apache.conf 파일이
        없어서요. phpmyadmin은 현재 /var/www/html/mydbadmin 에 있는데
        거기에도 apache.conf 파일이 없습니다.
        셋팅에 대해서 자세한 내용을 제가 몰라서 조언 부탁드려요. ㅜㅜ

        1. 안녕하세요. mydbadmin 도 그누보드와 함께 옮겨주세요.
          옮긴 후의 위치가, /home/myuser1/www/mydbadmin 같이 되어야 합니다.

          1. 답변고맙습니다. 그누보드와 mydbadmin도 모두 /var/www/html ==>
            /home/myuser1/www/mydbadmin 과 그누보드를 같이 둬야 하군요.
            수정하겠습니다. 정말 고맙습니다. ㅜㅜ

  70. 아래 글 참고해서 slow query log 설정을 해보려고 하는데….
    https://sleepyeyes.tistory.com/45

    my.cnf 파일이 아래 경로에 있더라구요.
    /etc/mysql/my.cnf

    해당 파일을 열어보니, 달랑 이런 코드만 있더군요. (주석 빼고)
    !includedir /etc/mysql/conf.d/
    !includedir /etc/mysql/mysql.conf.d/

    그런데. 위 파일에 어떤 식으로 써줘야 슬로우쿼리 설정이 가능할까요?
    이런 저런 시도를 다 해봤는데, 안 됩니다. ㅡㅡ;

    라라곤에서는 아래처럼 입력하니까 되던데, 우분투는 어떤 파일에 어떻게 넣어줘야 할까요?

    #slow-query-setting
    slow_query_log=1
    slow_query_log_file=C:/laragon/data/mysql/mysql-slow.log
    long_query_time=2

  71. 안녕하세요, 강의대로 따라하고 있습니다.

    vi /etc/apache2/conf-available/security.conf 이 “추가 보안 설정” 에서 다 설정하고

    “아파치 재시작”을 하니까 아래와 같은 문구가 뜨는데

    Job for apache2.service failed because the control process exited with error code. See “systemctl status

    AH00526: Syntax error on line 64 of /etc/apache2/conf-enabled/security.conf

    64행 문구를 봐도 전혀 이상없거든요? 무슨 문제인지 아시나요? 조언 부탁드립니다!

      1. 감사합니다. 제가 쓴 글에는 문제가 없었던거죠?

        1. 전혀 문제 없었습니다!

          한가지 질문 여쭤보고 싶습니다!

          그누보드 파일은 /var/www/html/에 있습니다.
          ip주소를 적으면 그누보드 메인 홈페이지 출력됩니다.
          이제 도메인을 사용하여 그누보드 메인 홈페이지 출력하려면
          도메인DNS설정만 하면 되나요? 가상호스트 설정 뭐 이런거 필요없나요?

          1. 그렇게 해서 사용해도 되긴한데, 본문에서 설명한대로 myuser1 사용자를 추가해서 사용하는것을 추천드려요.
            /var/www/html/ 를 웹루트로 사용하는것은 고수에게만 권장합니다.

            1. 사용자 추가해서 사용하란 말씀이..
              그누보드 파일을 home 디렉토리에 추가된 사용자쪽으로 옮겨서
              진행하라 이 말씀이신가요?
              그럼 도큐멘트 루트 또한 당연히 수정을 다 해야되는거죠?

  72. 답변 감사합니다, 그럼

    사용자 추가해서 사용하란 말씀을 풀어보자면..
    /var/www/html/ 이 아닌 home 디렉토리에서 작업을 진행하고
    마찬가지로 /var/www/html/ 에 있는 그누보드 파일은
    home 디렉토리쪽에 생성된 폴더쪽으로 이동을 해라 이말씀이죠?
    그럼 가상호스트 설정도 지정해야되는거구요.

    내용이 제대로 전달되지 않은거같아 다시 남겼습니다!

    1. 네. 항상 /home/사용자아이디/www 등의 형태로 사용하셔야해요.
      /var/www/html/ 위치는 퍼미션(권한) 관리가 어려워서, root 사용자를 사용하거나 /var/www/html/ 를 777 퍼미션으로 사용하는데, 둘다 잠재적인 보안문제가 있습니다.
      반드시 일반사용자 계정을 만들고 /home/사용자아이디/위치에서 서비스되도록 설정하세요.
      이 방법에 대해서는 본문에 설명해두었습니다.

      1. 답변 감사합니다, 선생님!

  73. 안녕하세요 선생님
    궁금한게 있는데 아파치 업데이트-업그레이드는 자주 실행해줘야되나요?
    업그레이드 끝난뒤 간혹 오류가 발생하더라구요

    1. 자주 해주는게 좋고, 오류 발생도 안되어야 합니다.
      stable 채널에서 설치되는 것이기 때문에, 소프트웨어 오류는 아닐것으로 보입니다. 최신버전으로 올린 후 아파치 재시작을 잘해주세요.

  74. 안녕하세요 선생님
    서버 업데이트-업그레이드 하려는데
    개별적으로 업데이트-업그레이드 내용 확인하려면 어떻게 해야되나요?
    그냥 한번에 3-40개 업데이트-업그레이드 해도 괜찮은가요?

    1. 한번에 하는 것을 매우 권장합니다.
      그리고 가끔 업그레이드중에 Y/N/I/O/D/Z 선택하라고 나오면 [엔터키]를 누르시면 됩니다.

      1. 예전에 업그레이드 진행했을당시 오류 발생되어
        이번에 업그레이드할 때 조마조마했었습니다
        2번이나 이렇게 조언주신 덕분에 용기얻어서 업그레이드했는데 이상없이 처리되었습니다
        덕분에 감사합니다 선생님 감기조심하세요

  75. 안녕하세요 선생님
    새해 복 많이 받으시고 올해도 건강하세요!
    궁금한게 있는데 phpmyadmin 페이지에서 DB백업 진행해도 괜찮죠?
    DB백업파일은 제 외장하드로 보관하려하거든요
    이렇게해도 괜찮은지 문의드립니다!

    1. 아주 권장하는 방법입니다. 백업/복원 phpmyadmin 으로 하세요.
      다만 phpmyadmin 백업 및 복원시 오류가 발생할 경우 linux 에서 mysqldump 명령어로 백업하셔야 합니다.

  76. 라엘님 블로그를 참고해서 워드프레스 창까지 열렸는데 데이터베이스는 myuser1인거까지는 알겠는데 사용자명에 뭐가 들어가야 할지 모르겠어서 이렇게 질문 남깁니다!

    1. 지금 또는 앞으로 있을 99%의 상황에서 사용자명과 데이터베이스명은 같을 것입니다.
      따라서 사용자명도 myuser1 입니다.

      1. 라엘님! 서버 컴퓨터를 잠시 끄고 있다가 오랜만에 다시 키려고 service apache2 start를 입력하는데 Invalid command ‘export’, perhaps misspelled or defined by a module not included in the server configuration 이게 뜨더라구요 전에는 서버가 잘 돌아갔는데 갑자기 이러네요 해결법 좀 알수있을까요??

        1. 문제가 되는 부분을 확인하셔야 합니다.
          # apache2ctl -S 명령어를 통해서 문제가 된 부분을 확인해주세요.
          문제를 일으키는 파일을 열어서 export 관련줄을 삭제해보세요.

  77. 안녕하세요 선생님 오랜만에 인사드립니다.
    궁금한게 있는데 도메인 변경시 서버내에서 해야될 작업이 어떤것들이 있나요?

    제가 정리한 것은 이렇습니다.
    1. config.php
    2. sites-available 폴더내 파일
    3. 그누보드 관리자페이지내 이미지 변경하기 사용

    인데 네임서버 다루고 있는 클라우드플레어에서 리디렉션까지 해야되는가요?
    생각하면 참 간단하면서도 자료 찾아보니 너무 방대하여 이렇게 문의구했습니다.

    1. 1. cloudflare 에서 신규도메인등록, dns 관리에서 서버의 ip 등록
      2. sites-available 폴더내 파일 수정.
      이 내용을 수정하면 됩니다. – ServerName변경 (바꿀 경우), ServerAlias추가(기존 및 추가적으로 사용할 경우)

      3. service apache2 restart

      그리고 https://blog.lael.be/post/11772 이 글 보시고 ubuntu pro 도 활성화하세요.

      1. 클라우드플레어 처음 등록했던것처럼 동일한 작업이 필요한것이군요.
        답변 주셔서 감사합니다 선생님!

        우분투 프로 활성화 참고해보겠습니다!

지나가는행인에 답글 남기기 응답 취소

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

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>
*
*