System Administrator/OS Tech

[세번째] Ubuntu 22.04 LTS 에서 웹서버(Apache + PHP + MySQL) 구성하기

투푸월드 2023. 7. 20. 23:33

시스템 기초 설정이 끝났기 때문에, 이제 웹 어플리케이션 서버를 구축하도록 하겠습니다.

앞으로 설치할 모든 패키지는 공식저장소(Repository)에서 제공 받습니다. Ubuntu Canonical Group 에서 향후 10년간 유지보수를 제공합니다.

Apache2, PHP, MySQL 순서로 구축하도록 하겠습니다.

 

7) Apache2 설치

# apt install apache2

 

- 설치된 아파치 버전 확인

# apache2 -v

Server version: Apache/2.4.52 (Ubuntu)

< 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 에 대해서 주석처리되어 있을 텐데 주석(#)을 제거해 준다.

 

- 추가 보안 설정

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

매우 권장하는 보안 설정이므로 Ubuntu Apache 패키지 제작자가 미리 작성해 두었다.
아래의 그림을 참고하여 설정하도록 하자.

 


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

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

# vi /etc/apache2/apache2.conf

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

/etc/apache2/apache2.conf 설정파일 중간에 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 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|config|sql|sh|key|yml|lock|bak|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>
 
<DirectoryMatch "/(data/session)/">
    Require all denied
</DirectoryMatch>

 

 



 

- 변경사항 적용

# service apache2 restart

 

Apache 개별 사용자 권한 설정

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

# apt-cache search mpm-itk

libapache2-mpm-itk - multiuser module for Apache

 

# 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 한 줄 추가해주세요.

1
ServerName localhost

 

- HTTPS 기본사이트 켜기

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

 

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

 

 

8) PHP 설치

Ubuntu 22.04 LTS 에서는 PHP 8.1 버전이 설치된다.
만약 당신의 소프트웨어가 PHP 8.1 에서 오류가 발생한다면, ppa 등을 통해서 낮은 버전의 php 를 설치하지 마시고, OS 버전을 낮춰서 다른 Ubuntu LTS 를 사용하는것을 권장합니다.
소프트웨어 의존성 관리는 매우 번거로운 작업이기 때문입니다.


이 글에서는 PPA나 개별저장소, 소스설치가 아니라, Ubuntu 공식 저장소에서 지원하는 패키지로만 설치합니다.
Ubuntu 22.04 LTS 는 장기적으로 사용할 수 있게 출시된 버전이며, 2032년 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)


만약 시간이 흘러서 PHP 8.1 의 Lifetime 이 종료되었다고 할지라도, 구축 후 변경하는 것은 권장하지 않습니다.
Software Lifetime 이 끝나면(PHP8.1의 수명은 10년 미만임) 큰 보안 취약점이 생기는 것 같이 설명하시는 분이 있던데, 전혀 그렇지 않습니다!!
보안 취약점이 발견되더라도, Ubuntu Security Team 에 의해 2032년까지 신속한 패치가 이루어집니다.


https://packages.ubuntu.com/jammy/php

Ubuntu PHP 는 전 세계적으로 매우 많은 사람들이 사용하고 있으며, 따라서, Ubuntu 개발팀에서 우선적으로 관리하는(main) 소프트웨어 패키지입니다.
위 링크를 클릭 후 Maintainer 항목을 살펴보세요.

 

# apt install php

 

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

- 설치된 PHP 버전 확인

# php -v

글을 작성하는 현재 설치된 버전은 PHP 8.1.2 이며, 여러분의 버전은 이것보다 높을 것이다. (물론 주기적으로 업데이트 명령어인 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/php8.1.conf

.php .phar .phtml  확장자 파일이 기본적으로 php를 해석할 수 있게 되어있다.

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

 

.php 를 제외한 나머지의 접근을 차단하자.
아래 그림의 위치에 추가한다. 보안사고 방지를 위해서 몇가지 php관련 확장자 접근제어 설정도 추가하였다.

/etc/apache2/mods-available/php8.1.conf
1
2
3
<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/8.1/apache2/php.ini

* 편집 가이드

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

 

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

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

 

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

이 값을 찾아서

 

이렇게 변경.

 

변경사항 적용하기

#service apache2 restart

 

phpinfo 파일 생성

 

서버의 hostname(호스트 이름) 확인하기 (서버 컴퓨터의 이름)

# hostname

 

php 환경설정 정보를 볼 수 있는 파일을 생성한다. 의도치 않게 이 정보가 노출되더라도 보안에 위협이 되지는 않는다.

# echo "<?php if (gethostname() == (empty(\$_GET['q']) ? '' : \$_GET['q'])) phpinfo(); ?>" > /var/www/html/myphpinfo.php

웹 브라우저에서 http://서버의아이피/myphpinfo.php?q=서버의 호스트 이름 로 접속해 보자.

 

이 페이지에서 “default_charset”, “Default timezone” 값을 살펴보세요. (UTF-8, Asia/Seoul)

 

phpmyadmin 설치하기

phpmyadmin 은 php로 제작된 mysql 관리툴입니다. 매우 안정적이고 안전한 프로그램입니다. 설치해봅니다.

# wget https://files.phpmyadmin.net/phpMyAdmin/5.1.3/phpMyAdmin-5.1.3-all-languages.zip -O /var/www/html/dbmyadmin.zip.lock
# cd /var/www/html && unzip dbmyadmin.zip.lock && mv phpMyAdmin-5.1.3-all-languages dbmyadmin

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

이렇게 뜨면 정상입니다. 지금은 DB 접속정보가 없어서 할 수 있는 작업이 없기 때문에, 화면이 표시되는지만 확인해주세요.

 

phpmyadmin 웹소프트웨어의 환경설정을 진행합니다.
phpmyadmin 이 설치된 폴더로 이동한 후에 config.sample.inc.php 파일 이름을 config.inc.php 로 바꿉니다. (mv 명령어 또는 비슷한 명령어 사용)

# mv /var/www/html/dbmyadmin/config.sample.inc.php /var/www/html/dbmyadmin/config.inc.php

 

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

# vi /var/www/html/dbmyadmin/config.inc.php
vi 에디터 진입 후 :set paste  엔터 -> 복사 붙여넣기 모드 설정하면 정상적인 내용 붙여넣기가 가능해집니다.

예제를 잘 만들어 두었으니 코드를 해석해보고 적절히 응용해보세요.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
declare(strict_types=1);
 
$valid_passwords = ['webuser1' => 'webpass1', 'webuser2' => 'webpass2'];
$valid_users = array_keys($valid_passwords);
$user = $_SERVER['PHP_AUTH_USER'];
$pass = $_SERVER['PHP_AUTH_PW'];
$validated = (in_array($user, $valid_users)) && ($pass == $valid_passwords[$user]);
if (!$validated) {
    header('WWW-Authenticate: Basic realm="password?"');
    header('HTTP/1.0 401 Unauthorized');
    die ("Not authorized");
}
 
$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;
 
/**
* Servers configuration
*/
$i = 0;
 
$i++;
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['port'] = '3306';
 
/*
$i++;
$cfg['Servers'][$i]['host'] = 'mydatabase-instance01.cohyfvqnmewt.ap-northeast-2.rds.amazonaws.com';
$cfg['Servers'][$i]['port'] = '3306';
*/
 
/*
$i++;
$cfg['Servers'][$i]['host'] = '211.192.211.192';
$cfg['Servers'][$i]['port'] = '3306';
*/

 


선택 작업 1. ssh 및 sftp 비밀번호 접속 허용하기

이 작업은 인증키를 사용한 로그인을 못하는 초보자분들께만 권장합니다.
항상 내 아이피만 접속할 수 있도록 방화벽을 잘 설정해주세요.
서버가 이미 비밀번호 로그인 방식을 허용하도록 설정되어 있을 수도 있습니다.

내 IP주소 확인하기 : https://ipconfig.tools/ko/

 

ssh daemon 환경설정

# vi /etc/ssh/sshd_config

 

아래 그림을 적절히 참고하여, 설정 값을 변경하세요.

반드시 방화벽 설정을 하세요. 대부분의 클라우드 호스팅에서는 네트워크 방화벽 기능을 지원합니다. (TCP 22)

 

변경사항 적용

# service ssh restart

접속중인 쉘의 연결은 끊기지 않습니다.

 

사용자 비밀번호 설정

# passwd 사용자이름(아이디)

비밀번호 접속 확인

Filezilla (https://filezilla-project.org/download.php?type=client) 같은 FTP 프로그램을 사용해서 서버에 접속해 보세요.

 

선택 작업 2. 동시 접속자 수 설정하기

- Ubuntu Apache 에서 순간 동시 처리가능한 갯수는 150개 입니다.
1000개의 처리 요청이 있다면 150개는 프로세서가 즉시 처리하고, 나머지 850개는 대기열에서 대기(stall)하다가 순서대로 처리됩니다.

* CPU 나 Memory 사용량이 높지 않은데, 사이트가 5초 대기한 후에 접속된다면 이 부분을 설정해야 합니다.

* 또는, 서비스 운영중에 /var/log/apache2/error.log 파일에 아래의 메세지가 표시되면 설정합니다.

server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting

 

 

이 설정을 하여 순간동시 처리 갯수를 늘릴 수 있습니다.

 

실행모드 확인

# a2query -M

prefork 라고 뜰겁니다.

 

 

prefork 관련 동시접속 설정

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

당신의 서버 메모리가 4GB 이상이고 대기시간 문제가 발생하고 있다면 아래와 같이 적용해보세요.
서버 운영중에 Server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting 에러 로그가 쌓일때에만 아래의 설정을 해주세요.

1
2
3
4
5
6
7
8
<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대가 분산처리하기 때문에 페이지가 더 빠르게 표시됩니다.

 


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

1] 도메인 준비하기

1) 유료 도메인을 구매 하려면 https://blog.lael.be/post/6357 글로 이동하세요.
자신의 PC 에 설치한 가상머신이나 회사 내부 사설망의 서버에도 도메인 연결이 가능합니다. 무엇을 하든 반드시 도메인을 준비해주세요.

2) 무료 도메인을 활용할 수도 있습니다.
이 글에서는 https://nip.io/ 를 사용하도록 하겠습니다.

 

무료도메인 nip.io 를 기준으로 설명하겠습니다.

만약 당신의 서버의 IP 가 52.79.173.82 이라면 52-79-173-82.nip.io 도메인을 사용할 수 있습니다.

이 본문 예제에서는 다음의 3가지 도메인을 사용합니다.

52-79-173-82.nip.io

 

도메인을 사용해서 myphpinfo 페이지를 열어보도록 합시다. 아래의 파란부분을 자신에 맞게 수정하세요. (뒷 부분은 hostname)

http://52-79-173-82.nip.io/myphpinfo.php?q=ip-10-12-14-10

 

2] 일반 사용자 계정 생성

일반 사용자 추가하기
원하시는 아이디 있으면 그것으로 하세요. 선호하는 아이디가 없으면 myuser1 으로 하세요.

#adduser myuser1

참고로 반대동작을 하는 계정삭제 명령어는 (계정을 삭제하고 홈디렉토리도 삭제함) 아래와 같습니다.

#userdel -r myuser1

 

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

#su -l myuser1
#mkdir 52-79-173-82.nip.io
#mkdir mysite1.52-79-173-82.nip.io
#mkdir mysite2.52-79-173-82.nip.io
#exit

 

 

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

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

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

 

이 본문의 예제에서는 다음의 값을 사용하겠습니다.

https://webmaster.cafe/tools/apache-conf-generator/?s=myuser1&h=52-79-173-82.nip.io&r=&t=&d=%2Fhome%2Fmyuser1%2F52-79-173-82.nip.io

내용을 복사하여 /etc/apache2/sites-available/52-79-173-82.nip.io.conf 위치에 생성.

 

 

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

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

 

사이트 켜기

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

# a2ensite 52-79-173-82.nip.io.conf

 

참고 : 사이트 끄는 명령어

# a2dissite 52-79-173-82.nip.io.conf

 

변경사항 적용

# service apache2 reload

 

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

위의 apache2 reload 를 완료한 후에, 4번째 탭으로 이동.

방화벽에서 anywhere(0.0.0.0/0) TCP 80, TCP 443 포트가 열려있어야 합니다.

< Congratulations! 를 확인하셔야 합니다. >

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

# apache2ctl -S

 

이 상태에서 다시 3번째 탭 내용을 적용해야 합니다.

아까 작성했던 /etc/apache2/sites-available/52-79-173-82.nip.io.conf 파일 내용을 교체하세요.
아까는 유효하지 않은 임시인증서로 구동을 했던 것이고, 이제는 방금 발급받은 유효한 인증서로 구동을 하는 것입니다.

 

최종 적용

# service apache2 reload

주소창에 열쇠가 보이면 정상이다.

 

인증서 갱신 프로그램 주기적으로 실행하기
https://blog.lael.be/post/5107 이동 후 4번 인증서 갱신 프로그램 주기적으로 실행하기 보고 똑같이 입력하세요.


10) MYSQL 설치

요즘엔 웹어플리케이션 서버만 구축하고, DB는 DB호스팅 서비스를 이용하는 분위기입니다.

여기에서는 이러한 DB호스팅을 사용하지 않고, 직접 MYSQL DB서버를 구축하는 방법에 대해 설명하도록 하겠습니다.

 

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

#apt install mysql-client

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

 

MySQL 서버 설치

#apt install mysql-server

설치된 버전 확인

#mysqladmin version

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

 

기본 설정으로 MySQL 의 root 사용자는 auth_socket 인증을 사용하도록 설정되어 있으며, 따라서 리눅스 root 사용자는 비밀번호 입력없이 MySQL root 사용자로 로그인 할 수 있다.
추가적으로, auth_socket 이 설정된 사용자 비밀번호 설정이 되지 않는다. (정확히 말하자면 비밀번호 설정은 되는데 그 값을 저장하지 않는다. 즉, 절대로 비밀번호 로그인 불가능)
다시 말해서, 기본적으로 root 사용자로 비밀번호 로그인을 할 수 없다는 것이다. (auth_socket 인증을 사용하도록 설정되어 있으므로)

굳이 기본 설정을 건드리지는 않겠다.


 

MySQL 8.0 부터 바뀐 서버 기본값 살펴보기 : https://dev.mysql.com/blog-archive/new-defaults-in-mysql-8-0/
MySQL 8.0 부터 기본 설정값이 적절하게 바뀌어 있으므로, 추가적인 설정을 하지 않고 바로 사용하면 됩니다.

추가적으로 변경을 원하는 값이 있다면, 다음의 명령어를 사용하여 값을 변경할 수 있다.

# vi /etc/mysql/mysql.conf.d/mysqld.cnf

 

웹UI를 사용하여 서버에 로그인

# cat /etc/mysql/debian.cnf

이 명령어를 사용해서 서버의 기본 최고관리자의 비밀번호를 확인한다.

조금전에 설치한 phpmyadmin 을 통해서 DB서버에 로그인 해 보도록 하자.

 

MySQL 사용자 계정 생성

빨간 부분만 입력하세요.

 

참고 : MySQL 사용자 계정 삭제하는 방법


이제 리눅스의 세계로~

 

11) 워드프레스 설치 예제

먼저 myuser1 계정으로 로그인합니다. (myuser1 계정으로 전환합니다.)
위의 9번 예제에서 myuser1 계정을 생성 했을 것입니다.

웹루트로 이동합니다.

# cd 52-79-173-82.nip.io/

워드프레스 최신버전을 다운받습니다.

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

 

압축해제

# unzip latest.zip

 

다운받은 설치파일 삭제

# rm latest.zip

 

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

# mv wordpress/* .

 

사용하지 않는 wordpress 폴더 삭제

rmdir wordpress

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

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

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

 

6] 완성

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

워드프레스의 세계로!