워드프레스 5.7 설치

Estimated reading: 6 minutes 14 views

워드프레스 5.7 설치

  1. Requirements
  • php 7.4 이상
  • MySQL version 5.6 OR MariaDB version 10.1 or greater.
  • We also recommend either Apache or Nginx

We recommend servers running version 7.4 or greater of PHP and MySQL version 5.6 OR MariaDB version 10.1 or greater.
We also recommend either Apache or Nginx as the most robust options for running WordPress, but neither is required.

  • 설치전 Requirements ( LAMP 설치 )
  1. centos 7.9 설치
  2. yum update -> reboot
  3. 아파트 설치
  • apache 설치

EPEL 활성화

yum -y install epel-release yum-utils

CodeIT 저장소를 추가

cd /etc/yum.repos.d
wget https://repo.codeit.guru/codeit.elrpm -q --qf "%{VERSION}" $(rpm -q --whatprovides redhat-release).repo

[root]# yum clean all

가능 버전 확인 ( current 2.4.6 -> upgrade 2.4.46 )

[root]# yum info httpd

Available Packages
Name : httpd
Arch : x86_64
Version : 2.4.46

설치 진행

yum -y install httpd httpd-devel apr apr-util apr-devel \
apr-util-devel gcc gcc-c++ pcre-devel apr-util-openssl mod_http2 \
apr-util libnghttp2 libnghttp2-devel expat-devel libxml2-devel \
mod_proxy_html

  • MariaDB 설치

10버전의 MariaDB를 설치하기 위해서는 repo 설정을 먼저 진행해야 한다.

  1. repo 설정
    먼저 MariaDB.repo 라는 파일을 만들고 아래처럼 내용을 입력하자.

vi /etc/yum.repos.d/MariaDB.repo

MariaDB 10.4 CentOS repository list – created 2020-06-05 23:35 UTC

http://downloads.mariadb.org/mariadb/repositories/

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
아래 링크에서 repo 설정에 대한 더 자세한 내용을 확인할 수 있다.

https://downloads.mariadb.org/mariadb/repositories/#distro=CentOS&distro_release=centos7-amd64–centos7&mirror=nucleus&version=10.4
  1. Mariadb 설치 ( current : 10.0.4.18 )

yum install MariaDB-server.x86_64 MariaDB-devel.x86_64

lv 생성

  • pv 생성 : pvcreate /dev/sdb1
  • vg 생성 : vgcreate vgdata /dev/sdb1
  • lv 생성 : lvcreate -n lvdata -l 100%FREE vgdata
  • format : mkfs.xfs /dev/mapper/vgdata-lvdata
  • mount : mount /dev/mapper/vgdata-lvdata /opt/data/

systemctl start mariadb

mysql_secure_installation

  • mariadb root 패스워드 변경

[root]# systemctl start mysqld

  • mysql 를 처음 시작 하고 로그에서 임시 비밀번호를 확인 할 수 있습니다.
    [root]# cat /var/log/mysqld.log | grep “temporary password”
    [Note] A temporary password is generated for root@localhost: RTZwovJ#r8*:

[root]# mysql -uroot -p
Enter password: <==위에서의 비밀번호 입력, RTZwovJ#r8*:

mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘m@ntech7790’;
<– 패스워드는 복잡도를 고려 해야 합니다. mysql> commit;
mysql> flush privileges;
mysql> exit;

  • data 위치 변경
    1) MariaDB 서비스 정지

systemctl stop mariadb

2) 새로운 Data 디렉토리 생성 및 데이터 복사하기

(Data 디렉토리를 /home/data/mysql 로 한다는 가정 하에)

mkdir /home/data/
rsync -av /var/lib/mysql /home/data/
chown -R mysql:mysql /home/data/mysql

​3) my.cnf 파일을 수정하여 MariaDB의 data 디렉토리 경로 변경

sudo vi /etc/my.cnf

[mysqld]
datadir=/opt/data/mysql
socket=/opt/data/mysql/mysql.sock

[client]
socket=/opt/data/mysql/mysql.sock

  • php 7 설치
    저장소 추가
    PHP7을 설치하기 위해서 먼저 아래와 같이 저장소를 추가해준다.

yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm

repository 설치 후 repo 파일을 수정
[root]# vi /etc/yum.repos.d/remi.repo

[remi]
name=Remi’s RPM repository for Enterprise Linux 7 – $basearch

baseurl=http://rpms.remirepo.net/enterprise/7/remi/$basearch/

mirrorlist=https://rpms.remirepo.net/enterprise/7/remi/httpsmirror

mirrorlist=http://cdn.remirepo.net/enterprise/7/remi/mirror
enabled=1 <———- 0에서 1 로
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

설치
yum -y install php74 php74-php-common php74-php-fpm php74-php-gd php74-build php74-php php74-php-devel php74-php-mysqlnd php74-php-opcache php74-php-mbstring php74-php-pdo php74-php-pecl-crypto php74-php-pecl-imagick php74-php-pecl-imagick-devel php74-php-pecl-mcrypt php74-php-pecl-zip php74-php-bcmath php74-php-pecl-mysql curl curl-devel libpng libpng-devel libwebp libwebp-devel libXpm libXpm-devel openssl openssl-devel autoconf zlib zlib-devel freetype freetype-devel gd gd-devel libmcrypt libmcrypt-devel libtool-ltdl-devel libxml2-devel libxml2 libcurl libcurl-devel

  • Apache 버전 확인
    설치된 Apache 버전을 확인할 수 있다.
    httpd -v
  • PHP 버전 확인
    설치된 PHP 버전을 확인 할 수 있다.
    php74 -v
  • MariaDB 버전 확인
    설치된 MariaDB 버전을 확인 할 수 있다.
    mysql -V php 설정 변경 ( mod_php 와 php-fpm 공통)

[root]# vi /etc/opt/remi/php74/php.ini

아래 5개는 주석 제거 및 내용 수정

date.timezone = Asia/Seoul
expose_php = Off
post_max_size = 500M
upload_max_filesize = 200M
memory_limit = 512M

PHP-FPM 으로 Apache 연동

Apache 와 PHP 연동을 PHP-FPM 으로 하도록 하겠습니다.

향후 Nginx 로의 변경시 변경이 자유롭고 Apache MPM방식을 event(thread) 방식을 사용할 수 있는 장점이 있습니다.

성능 또한 Apache + mod_php 방식에 비해 PHP-FPM을 사용하여 별도로 php 로직을 처리해주는것이 성능적으로도 더좋다고 확인 되고 있습니다.

그래서 이미 이전 부터 php-fpm 을 많이 사용하는 추세 입니다.

먼저 Apache 설정을 변경

/etc/httpd/conf/httpd.conf 파일 수정
[root]# vi /etc/httpd/conf/httpd.conf

ServerName www.example.com:80
-> 주석 해제

-> 아래 쪽에 2개 내용추가
ServerTokens Prod
ServerSignature Off

아래 Directory 사이의 내용을 변경 합니다.
…. 사이의 내용…

Options Indexes FollowSymLinks

-> 주석 처리 후 아래 내용으로 입력
Options MultiViews FollowSymLinks
-> 내용 추가

AllowOverride None

-> 주석 처리 후 아래 내용으로 입력
AllowOverride All
-> 내용 추가

15-php74-php.conf 파일 수정

[root]# vi /etc/httpd/conf.modules.d/15-php74-php.conf

# LoadModule php7_module modules/libphp74.so

=> PHP-FPM 을 사용하기 위해서는 mod_php 모듈을 unload 해야 함으로
LoadModule php7_module 주석 처리 합니다

00-mpm.conf 파일 수정

[root]# vi /etc/httpd/conf.modules.d/00-mpm.conf

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

=> 주석 처리

LoadModule mpm_event_module modules/mod_mpm_event.so
=> 주석 해제

  • php-fpm 사용시 event-mpm방식을 사용할 수 있습니다.

00-proxy.conf 파일 수정

[root]# vi /etc/httpd/conf.modules.d/00-proxy.conf
아래 4개 내용 추가

ProxyRequests Off
ProxyErrorOverride on
ProxyTimeout 600
ProxyPreserveHost On

php-fpm.conf 파일 수정

[root]# cd /etc/opt/remi/php74
[root]# vi php-fpm.conf

daemonize = yes
-> 주석으로 되어 있다면 주석을 해제 합니다. ( default : 주석해제상태 )

; Log level
; Possible Values: alert, error, warning, notice, debug
; Default Value: notice
;log_level = notice
-> PHP-FPM 데몬의 Log level Default 는 notice 입니다.
-> 문제에 대한 분석이나 초기 설정 후 확인 등이 필요하다면 debug 레벨로 변경하여 사용해도 됩니다.

include=/etc/opt/remi/php74/php-fpm.d/*.conf
-> include 로 하여 php74/php-fpm.d/ 아래 *.conf 절이 주석처리 되어 있는지 확인 합니다.
-> 버전 등에 따라 맨위나 맨아래, 혹은 맨 위나 맨 아래 둘 다 있을 수 있습니다.
-> 주석처리가 해제 되어 있는지만 체크 하면 됩니다. ( default : 주석해제 상태 )

재부팅 후에 디렉토리가 생성될 수 있도록 설정

[root]# cd /usr/lib/tmpfiles.d
[root]# vi php.conf

d /run/php 0755 root root –
==> php.conf 파일에 내용 입력

php-fpm www.conf 파일 수정

www.conf 수정

[root]# cd /etc/opt/remi/php74/php-fpm.d
[root]# vi www.conf

; pool name (‘www’ here)
[www]
-> PHP Pool 이름을 지정하는 항목 입니다.
-> 프로그램명이나 사이트 명이나, 업무가 있다면 업무명 등을 입력 하여도 됩니다.
-> Pool 혹은 Container 의 식별, 이름 입니다 기본으로 www 지정되어 있습니디.
-> Pool은 conf 파일 별로 여러개의 Pool을 만들 수 있습니다. 이때는 Pool 별로 이름을 지정하여 겹치지 않게 해야 합니다.

= 주석 해제 및 apache 로 내용을 변경 합니다 mode 는 0660 으로 합니다.
user = apache
group = apache
listen.owner = apache
listen.group = apache
listen.mode = 0660

sten = /run/php/php-fpm.sock
=> 이부분은 접속을 받는 방식을 설정하는 부분으로 Socket(UDS) 방식으로 사용 하거나 IP 방식으로 사용하거나 둘 중 하나를 선택하여 설정해야 합니다.

=> IP 방식으로는 아래와 같이 지정 할 수 있습니다.
listen = 123.123.123.123.123:9000
listen = 127.0.0.1:9000
listen = 9000 <== 이와 같이 IP 없이 포트만 기재하면 모든 주소에서 접속이 가능한 상태 입니다
(listen on a TCP socket to all addresses)

소켓 방식은 아래와 같이 파일명을 지정해주면 됩니다.
listen = /run/php/php-fpm.sock

같은 서버에서 apache 와 php-fpm 사용 하는 설정으로 할 것임으로 socket 을 지정하여 설정하도록 하겠습니다

같은 서버내 라도 IP를 사용 할 수 있고 사용하여도 됩니다.

FPM 프로세스

프로세스 수와 관련된 pm 으로 시작하는 파라미터 가 있습니다

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 40
pm.max_requests = 500

  • 위의 설정값은 예시입니다.

pm.max_children 는 설정된 PHP Pool(여기서는 www) 내에서 가동할 수 있는 최대 자식 프로세스 수를 의미 합니다

pm.start_servers 는 php-fpm 을 실행할 때 초기에 생성하는 자식 프로세스의 개수입니다

pm.min_spare_servers 는 idle 상태의 자식 프로세스 개수가 이 개수보다 작으면 자식 프로세스를 생성합니다

pm.max_spare_servers 는 idle 상태의 자식 프로세스의 최대 개수를 의미 합니다.

pm.max_requests 는 각 프로세스가 최대 request를 처리하면 수 입니다.
500 으로 설정되어 있다면 500번 request 후 프로세스를 다시 생성 합니다
프로세스가 점진적인 메모리 증가에 대한부분을 방지 할 수 있습니다.
apache 에서 유사한 설정으로는 MaxRequestsPerChild 있습니다.

[참고] PHP-FPM 메모리 사용현황 및 세션 계산

아래 명령어를 이용하면 현재 fork된 php-fpm 프로세스 당 메모리 사용량을 확인 할 수 있습니다.
[root]# ps –no-headers -o “rss,cmd” -C php-fpm | awk ‘{ sum+=$1 } END { printf (“%d%s\n”, sum/NR/1024,”M”) }’

시스템에 가용한 메모리나 사용 할 정도에서 프로세스당 사용메모리를 나누어서 최대 자식프로세스 개수를 산정 해도 되겠습니다

ex) PHP에 6GB 를 사용 하려고 함 , PHP-FPM이 현재 사용중인 메모리량이 대략 60MB 임
6000MB / 60MB = 자식 프로세스 개수 100개 로 설정

이와 같이 각 시스템 마다 메모리 상황을 고려하여 적절한 pm.max_children 값을 선정하여 설정하면 되겠습니다.

[참고] PHP-FPM 메모리 사용현황 및 세션 계산

아래 명령어를 이용하면 현재 fork된 php-fpm 프로세스 당 메모리 사용량을 확인 할 수 있습니다.
[root]# ps –no-headers -o “rss,cmd” -C php-fpm | awk ‘{ sum+=$1 } END { printf (“%d%s\n”, sum/NR/1024,”M”) }’

시스템에 가용한 메모리나 사용 할 정도에서 프로세스당 사용메모리를 나누어서 최대 자식프로세스 개수를 산정 해도 되겠습니다

ex) PHP에 6GB 를 사용 하려고 함 , PHP-FPM이 현재 사용중인 메모리량이 대략 60MB 임
6000MB / 60MB = 자식 프로세스 개수 100개 로 설정

이와 같이 각 시스템 마다 메모리 상황을 고려하여 적절한 pm.max_children 값을 선정하여 설정하면 되겠습니다.

  • 로그 관련 파라미터 수정

로그 관련된 파라미터의 주석 해제와 변경을 합니다.

access.log = /var/opt/remi/php74/log/php-fpm/$pool.access.log
-> 주석 해제 및 경로 지정
access.format = “%R – %u %t \”%m %r%Q%q\” %s %f %{mili}d %{kilo}M %C%%”
–> 주석제거
slowlog = /var/opt/remi/php74/log/php-fpm/$pool.slow.log
–> 주석제거, 파일명 변경
request_slowlog_timeout = 5
–> 주석제거, 내용변경
–> 단위는 초로 5는 예시 입니다. 해당 시간은 선택해서 변경 하시면 됩니다.
catch_workers_output = yes
-> 주석 제거
-> main error log 파일에 worker 의 에러 로그가 같이 기록 되게 됩니다.
php_admin_value[error_log] = /var/opt/remi/php74/log/php-fpm/www-error.log
-> 주석 제거
php_admin_flag[log_errors] = on
-> 주석제거
php74-php.conf 파일 수정

[root] vi /etc/httpd/conf.d/php74-php.conf

아래의 내용을 추가, 아닌 곳에 설정을 하면 됩니다.
위쪽에 적절한 곳에 설정 하면 됩니다.

이부분은 2가지 방식으로 설정 할 수 있으며 위에서 PHP-FPM의 Listen 방식에 따라 Apache에서도 설정이 달라 집니다.

Unix Socket 방식으로 사용시 아래와 같이 사용 합니다.

php-fpm options

SetHandler “proxy:unix:/run/php/php-fpm.sock|fcgi://localhost”
-> SetHandler 절에 파일명은 위에서 설정한 PHP-FPM의 Socket의 경로와 파일명이 같아야 합니다
-> PHP-FPM : listen=/run/php/php-fpm.sock 사용시

IP 방식으로 사용시 아래와 같이 아이피나 호스트명을 사용 합니다.

php-fpm options

# SetHandler “proxy:fcgi://127.0.0.1:9000” # SetHandler “proxy:fcgi://localhost:9000” SetHandler “proxy:fcgi://node3:9000”

-> PHP-FPM : listen = 127.0.0.1:9000 이나 listen = 9000 사용시

php-fpm 서비스 활성화 및 시작

[root]]# systemctl enable php74-php-fpm

[root]]# systemctl start php74-php-fpm

프로세스 및 포트 오픈 확인

[root]]# ps -ef| grep php
root 6389 1 0 17:18 ? 00:00:00 php-fpm: master process (/etc/opt/remi/php74/php-fpm.conf)
apache 6390 6389 0 17:18 ? 00:00:00 php-fpm: pool www
apache 6391 6389 0 17:18 ? 00:00:00 php-fpm: pool www
apache 6392 6389 0 17:18 ? 00:00:00 php-fpm: pool www
apache 6393 6389 0 17:18 ? 00:00:00 php-fpm: pool www
apache 6394 6389 0 17:18 ? 00:00:00 php-fpm: pool www

listen을 IP 으로 사용 할 경우

[root]]# netstat -antp | grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 6389/php-fpm: maste

listen을 Unix Socket 으로 사용 할 경우

[root]]# ls -al /run/php
srw-rw—-. 1 apache apache 0 Oct 24 16:25 php-fpm.sock

OS 방화벽 오픈 합니다.

80 포트 추가

firewall-cmd –permanent –add-port=80/tcp

80 포트 삭제(참고)

firewall-cmd –permanent –remove-port=80/tcp

정책 재반영 및 방화벽 정책 확인

firewall-cmd –reload;firewall-cmd –list-all

답글 남기기

Chat Icon Close Icon