티스토리 뷰

CentOS 강좌 PART 2. 4  LEMP 기반 WordPress 설치

LEMP는 Linux , Nginx, MySQL/MariaBD , PHP 등을 묶어서 일컫는 용어로 운영체제, 웹서버, 데이터베이스 및 언어 등을 오픈소스 기반으로 구축하는 데서 부르는 용어이다.
LAMP와 비교했을 때 웹서버를 NGINX를 사용한다는데 차이가 있다. 최근 4~5년 사이에 Apache 를 크게 위협하며 등장한 것이 NGINX이다.
NGINX는 Apache와 비교 했을 때 가볍고, 자원을 덜 소모하면서 성능이 우수하다는 데 주목을 많이 받고 있다.
물론 Apache 2.4가 구조 개선을 크게하고 등장하면서, 실제로는 성능상의 차이는 대동소이하다.
둘 간의 차이는 별도의 블로깅에서 다루도록 하겠다. (Apache vs Nginx)
이번 편에서는 CentOS7기반에서 MariaDB, NGINX,PHP 기반으로 WordPress를 올리는 과정을 소개한다.


1.사전 준비 작업

Remi Repository를 추가한다.
기본 설치된 환경에서는 MySQL과 PHP의 최신버전을 받을 수 없다. 이유는 보수적이기 때문에 안정적인 버전을 YUM에 배포하는 경우가 많기 때문에 MySQL/MariaDB, PHP의 최신버전이나, Remi Repository를 등록하고 설치 업데이트 하는 것이 좋다.

1
2
3
4
5
6
7
8
9
10
[root@lemp whchoi]# yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
[root@remp whchoi]# ls /etc/yum.repos.d/
epel-testing.repo  remi-glpi91.repo  remi-glpi94.repo   remi-php70.repo  remi-php73.repo
epel.repo          remi-glpi92.repo  remi-modular.repo  remi-php71.repo  remi-safe.repo
local-repos.repo   remi-glpi93.repo  remi-php54.repo    remi-php72.repo  remi.repo
 
[root@web whchoi]# yum install yum-utils
 
[root@web whchoi]# yum-config-manager --disable remi-php54
[root@web whchoi]# yum-config-manager --enable remi-php73
cs



2. Nginx 구성

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
[root@lemp whchoi]# vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=0
 
# Nginx Repo를 구성한다.
 
[root@lemp whchoi]# yum -y --enablerepo=nginx install nginx
 
# Nginx를 설치한다.
 
[root@lemp whchoi]# firewall-cmd --permanent --add-service=https
[root@lemp whchoi]# firewall-cmd --permanent --add-service=http
[root@lemp whchoi]# firewall-cmd --reload
[root@lemp whchoi]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources:
  services: ssh dhcpv6-client https http
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
 
# http/https에 대해서 서비스 포트 오픈을 한다.
 
[root@lemp ~]# systemctl start nginx
[root@lemp ~]# systemctl enable nginx
 
# Nginx를 활성화하고, 리부팅시에도 동작할 수 있도록 설정한다.
cs




3.WordPress 설치 및 기본 구성 

Nginx 웹 데몬에서 Wordpress가 동작할 수 있도록 환경 설정을 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@lemp whchoi]# mkdir -p /var/www/html/lemp.cisko-dc.com
[root@lemp whchoi]# chown nginx:nginx /var/www/html/lemp.cisko-dc.com
 
# wordpress 홈 디렉토리를 만들고 소유권을 nginx:nginx로 만든다.
 
[root@web whchoi]# cd /tmp && wget http://wordpress.org/latest.tar.gz
[root@lemp tmp]# tar xzvf latest.tar.gz
[root@lemp whchoi]# cp /tmp/wordpress/wp-config-sample.php /var/www/html/lemp.cisko-dc.com/wp-config.php
[root@lemp whchoi]# cp -a /tmp/wordpress/. /var/www/html/lemp.cisko-dc.com 
 
#/tmp 디렉토리로 wordpress를 다운받고, /tmp에서 압축을 해제한다.
# /tmp/wordpress/wp-config-sample.php 포맷을 사전에 생성한 홈 디렉토리로 복사한다.
# 나머지 전체 파일도 홈디렉토리로 복사한다.
cs


nginx에 대한 환경 설정을 한다.

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
root@lemp ~]# vi /etc/nginx/conf.d/lemp.cisko-dc.com.conf
server {
  listen 80;
  server_name lemp.cisko-dc.com;
  root /var/www/html/lemp.cisko-dc.com;
  index index.php index.html index.htm;
  location / {
      try_files $uri $uri/ =404;
  }
  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }
}
 
# nginx에 /etc/nginx/conf.d/default.conf 파일은 그대로 두고, 하나의 환경설정 파일을 만든다
# server name을 선언해 주고, root 는 wordpress가 설치된 디렉토리를 선언해 준다.
# 나머지 내용은 그대로 복사해서 넣어 준다.
 
[root@lemp ~]# nginx -t
[root@lemp ~]# systemctl start nginx
[root@lemp ~]# systemctl enable nginx
 
# nginx 구성이 올바른지 점검하고, 에러가 없으면 활성화 하고, 부팅시 동작할 수 있도록 적용한다. 
cs



4.PHP 설치 구성

PHP 7.3을 설치하고 정상적으로 설치되었는지 확인한다.

1
2
3
4
5
6
7
[root@lemp ~]# yum -y install --enablerepo=epel, remi-php72 php php-mbstring php-pear php-fpm php-mcrypt php-mysql
[root@lemp ~]# php -v
PHP 7.3.3 (cli) (built: Mar  5 2019 13:50:38) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.3, Copyright (c) 1998-2018 Zend Technologies
 
# PHP를 설치하고, 버전을 확인한다.
cs

PHP-fpm 구성을 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@lemp ~]# vi  /etc/php-fpm.d/www.conf
user = nginx
group = nginx
listen = 127.0.0.1:9000
listen = /var/run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx 
listen.mode = 0660
[root@lemp ~]# systemctl start php-fpm
[root@lemp ~]# systemctl enable php-fpm
 
# /etc/php-fpm.d/www.conf 파일을 수정하고, 활성화 및 부팅시 동작하도록 선언한다.
# 반드시 user/group, listen.owner/group등을 수정하도록 한다. 권한 설정 문제로 구동하는 데 중요하다.
cs


5.MariaDB 설치 구성 및 WordPress DB 생성

MariaDB를 설치하고, WordPress DB를 위한 DB 및 보안설정을 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@lemp ~]# yum -y install mariadb mariadb-server
[root@lemp ~]# vi /etc/my.cnf.d/server.cnf
[mysqld]
character-set-server = utf8
[root@lemp ~]# systemctl start mariadb
[root@lemp ~]# systemctl enable mariadb
 
# yum을 통해 mariadb, server를 설치한다.
# 환경 구성에서 character-set utf8을 선언한다.
# mariaDB에 대해 활성화하고, 재구동시 동작할 수 있도록 선언한다.
 
[root@web whchoi]# mysql -u root -p
# SQL로 접속한다.
MariaDB [(none)]> CREATE DATABASE wordpress;
# wordpress DB를 생성한다. (예 -DB 이름 : wordpress)
MariaDB [(none)]> CREATE USER wordpress@localhost IDENTIFIED BY "secure_password";
# wordpress DB User의 보안을 생성한다. (예 - password : secure_password)
MariaDB [(none)]> GRANT ALL ON wordpress.* TO wordpress@localhost;
# wordpress 로 부터의 접근을 승인한다.
MariaDB [(none)]> FLUSH PRIVILEGES;
 
[root@lemp tmp]# systemctl restart mariadb
 
# mariaDB를 재구동한다.
cs


WordPress가 SQL DB를 사용할 수 있도록 환경 설정을 해 준다.

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
[root@lemp ~]# vi /usr/share/nginx/www/wp-config.php
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );
/** MySQL database username */
define( 'DB_USER', 'wordpress' );
/** MySQL database password */
define( 'DB_PASSWORD', 'secure_password' );
/** MySQL hostname */
define( 'DB_HOST', 'localhost' );
/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );
/** The Database Collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );
 
# 앞서 설정한 mariaDB 이름과 사용자이름, 패스워드를 설정해 준다.
 
[root@lemp whchoi]# chown nginx:nginx /var/run/php-fpm/php-fpm.sock
# nginx가 php-fpm을 호출할 수 있도록 권한을 변경해 준다.
 
[root@lemp tmp]# systemctl restart mariadb
[root@lemp tmp]# systemctl restart nginx
[root@lemp tmp]# systemctl restart php-fpm
 
# 이제 모든 구성이 완료되었으므로, 전체 재구동을 해 준다.
cs



6. Wordpress 설정

Wordpress 구동을 위한 기초구성을 한다.
설정된 hostname 또는 IP를 접속한다. (http://lemp.cisko-dc.com)





Trouble Shooting Tip

메인 홈페이지가 제대로 동작하지 않고 error return code를 발생하면, 반드시 아래와 같이 error.log를 확인하여 조치를 취한다.
대표적으로 아래 bad gateway 출력시 로그 분석 및 해결 예제이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@lemp whchoi]# sudo tail -30 /var/log/nginx/error.log
2019/03/29 03:44:01 [crit] 8219#8219: *1 connect() to unix:/var/run/php-fpm/php-fpm.sock failed 
(13: Permission denied) while connecting to upstream, 
client: 10.70.233.169, server: lemp.cisko-dc.com, request: "GET / HTTP/1.1", 
upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm.sock:", host: "10.72.78.251"
 
# /var/run/php-fpm/php-fpm.sock 에 대한 에러가 권한 문제임을 알수 있다.
 
[root@lemp whchoi]# ls -al /var/run/php-fpm/
합계 4
drwxr-xr-x.  2 root   root    80  3월 29 03:29 .
drwxr-xr-x. 29 root   root   820  3월 29 03:42 ..
-rw-r--r--.  1 root   root     4  3월 29 03:29 php-fpm.pid
srw-rw----.  1 nobody nobody   0  3월 29 03:29 php-fpm.sock
[root@lemp whchoi]# chown nginx:nginx /var/run/php-fpm/php-fpm.sock
[root@lemp whchoi]# ls -al /var/run/php-fpm/
합계 4
drwxr-xr-x.  2 root  root   80  3월 29 03:29 .
drwxr-xr-x. 29 root  root  820  3월 29 03:42 ..
-rw-r--r--.  1 root  root    4  3월 29 03:29 php-fpm.pid
srw-rw----.  1 nginx nginx   0  3월 29 03:29 php-fpm.sock
 
# 권한 문제를 해결해 주고 정상 접속을 확인할 수 있다.
cs


공지사항