CentOS7에서 Wordpress 설치하기(nginx,php7, mariadb10)

Posted by Everyharu
2016.05.03 16:59 IT/Etc

이하 모든 설치는 root계정으로 진행한다고 가정합니다.


1. php 7.0 설치

1
2
3
4
yum install -y epel-release
rpm -ivh http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum --enablerepo=remi update remi-release
yum --enablerepo=remi-php70 install -y php php-mbstring php-pear php-fpm php-mcrypt php-devel php-xml php-mysql php-gd
cs

설치가 완료되면 php.ini 파일을 설정해야한다. 기본적으로 아래의 설정은 설정하고 넘어가자.

vim /etc/php.ini

1
2
3
4
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Asia/Seoul
cs

1
2
;cgi.fix_pathinfo=1
cgi.fix_pathinfo=0
cs

이번에는 nginx에서 proxy로 사용하기 위해 php-fpm 을 설정한다.
vim /etc/php-fpm.d/www.conf
1
2
3
4
5
;user = apache
user = nginx
; RPM: Keep a group allowed to write in log dir.
;group = apache
group = nginx
cs


1
2
;listen = 127.0.0.1:9000
listen = /var/run/php-fpm/php-fpm.sock
cs

1
2
3
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
cs
이렇게 세군대를 수정해준다.
그리고 php-fpm을 실행하고 시작프로그램으로 등록한다.
1
2
systemctl enable php-fpm.service
systemctl start php-fpm
cs


2. mariadb10 설치

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

1
2
3
4
5
6
7
# MariaDB 10.1 centos repository
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/rhel7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
cs

yum install -y mariadb mariadb-server
설치가 완료되면 간단하게 설정을 한다.

vim /etc/my.cnf

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
[mysql]
default-character-set = utf8
 
[mysqld]
skip-host-cache
skip-name-resolve
lower_case_table_names=1
character-set-client-handshake=FALSE
init_connect="SET collation_connection = utf8_general_ci"
init_connect="SET NAMES utf8"
character-set-server = utf8
collation-server = utf8_general_ci
max_connections = 500 
thread_pool_max_threads = 300 
innodb_file_per_table                           # innodb 테이블스페이스를 테이블별로 각각의 파일로 나누어 생성한다. 
innodb_buffer_pool_size = 2G               # 버퍼풀의 메모리 사이즈. 권장은 메인메모리의 50~70% (전용서버일때) 디폴트는 8M  
innodb_flush_log_at_trx_commit = 1 
innodb_adaptive_flushing = ON
innodb_adaptive_hash_index = ON
innodb_autoextend_increment  = 8  # 테이블스페이스를 자동으로 늘려주는 단위, MB 단위이다. 
 
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
 
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
 
!includedir /etc/my.cnf.d
cs

위처럼 설정했으면 이제 mariadb 를 최초 실행해준다.

systemctl start mariadb
systemctl enable mariadb

그리고 다음을 실행한다.

1
mysql_secure_installation
cs

mysql 의 기본보안설정이다. testdb등을 삭제해야한다.
처음에 패스워드를 물어보면 그냥 엔터로 넘어가고 추가적으로 새로운 패스워드를 설정하겠냐고 물어보니 설정하자.
Change the root password? [Y/n] y

이후 질답

1
2
3
4
5
6
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
 
systemctl restart mariadb.service
cs

이렇게 하고나면 접속할 사용자 계정이 필요해진다.

1
mysql -uroot -p
cs

아까 설정한 password를 입력하여 접속하자.

이후에 다음과 같이 권한설정과 함께 내가 사용할 root이외의 계정을 만들자. 한글로 되어있는 부분을 잘 변경해서 입력하자.

1
2
GRANT ALL PRIVILEGES ON *.* TO '이부분에 사용할 계정명'@'%' IDENTIFIED BY '이부분에 사용할 패스워드 입력' WITH GRANT OPTION;
FLUSH PRIVILEGES;
cs
1
2
3
4
CREATE USER 'wordpress'@'localhost' IDENTIFIED BY '이곳에는 패스워드를 넣어주세요.';
GRANT EXECUTE, PROCESS, SELECT, SHOW DATABASES, SHOW VIEW, ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TABLESPACE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, EVENT, INDEX, INSERT, REFERENCES, TRIGGER, UPDATE, LOCK TABLES, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHUTDOWN, SUPER  ON *.* TO 'wordpress'@'127.0.0.1';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'wordpress'@'localhost';
cs

위 명령으를 입력하고 다른 GUI 툴로 접속해서 계정에 대한 관리를 하는걸 추천한다. 일단 권한 설정은 이정도만 다루도록 한다.

설정이 완료되면 exit 를 입력하여 나오도록 한다.

그리고 방금 만든계정으로 다시 접속해서 db를 만들어보자

mysql -uwordpress -p

1
CREATE DATABASE `wordpress`
cs

위와같이 database까지 생성했으면 db준비완료


3. nginx 설치
(nginx의 경우 버전이 wordpress 에 별로 영향을 미치지 않는다. 안정성있게 기본제공버전으로 설치하도록 하자.)

1
2
yum install -y nginx
systemctl enable nginx
cs

wordpress 디렉토리를 아직 만들진 않았지만 설정을 미리 해놓도록 하자.

1
vim /etc/nginx/conf.d/default.conf
cs
아래 설정내용은 자유롭게 수정해도 좋지만 일단 기본적으로 다음과 같다.
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
server {
    listen       80
    server_name  localhost;
 
    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;
 
    index   index.php;
    root    /home/www/wordpress;
 
    location / { 
        try_files $uri $uri/ /index.php?$args;
    }   
 
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }   
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }   
 
    #error_page  404              /404.html;
 
    # redirect server error pages to the static page /50x.html
    #   
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }   
 
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /home/www/wordpress$fastcgi_script_name;
        include     fastcgi_params;
    }   
}
cs

nginx 의 conf가 제대로 작성됬는지 테스트한다.

nginx -t


그리고나서 nginx를 재시작한다.

systemctl restart nginx


4. wordpress 설치

다음을 순차적으로 따라해본다.(중간에 wget으로 받는 파일은 워드프레스 영문버전이다. 한글버전을 받고 싶다면 해당 url로 교체하여 입력한다.)

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
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --permanent --zone=public --add-port=3306/tcp
firewall-cmd --reload
firewall-cmd --list-all
mkdir /home/www/
 
cd
wget https://wordpress.org/latest.tar.gz
tar zxvf latest.tar.gz wordpress
rm -rf latest.tar.gz
mv wordpress/ /home/www/wordpress
mkdir /home/www/wordpress/wp-content/uploads
mkdir /home/www/wordpress/wp-content/upgrade
chown -R nginx:nginx /home/www/wordpress
chown -R nginx:nginx /var/lib/php/
 
chcon -R -t httpd_sys_content_t /home/www
/usr/sbin/setsebool -P httpd_can_network_connect true
setsebool -P httpd_can_network_connect 1
setsebool -P httpd_enable_homedirs 1
setsebool -P httpd_can_network_relay 1
setsebool -P httpd_setrlimit 1
chcon -R -t httpd_sys_rw_content_t /home/www/wordpress/
 
cd /home/www/wordpress/
cp /home/www/wordpress/wp-config-sample.php /home/www/wordpress/wp-config.php
vim /home/www/wordpress/wp-config.php
cs

이제 편집기의 내용 중 DB이름과 user 이름을 넣어주도록하자.

1
2
3
4
5
6
// database_name_here 부분에 DB의 이름을 넣어야 한다. 원하는 이름으로 넣어주자.
define('DB_NAME', 'database_name_here');
// username_here 부분에 위에서 만들었던 db의 계정명을 넣어주자.
define('DB_USER', 'username_here');
// password_here 부분에 위에서 만들었던 db 계정의 password를 입력해주자.
define('DB_PASSWORD', 'password_here');
cs

그리고 db내용이 끝나는 부분쯤에 다음을 넣자

1
define('FS_METHOD','direct');
cs

저장하고 빠져나오면 일단 준비는 완료.


부가적으로 메일이 필요한 기능을 쓴다면 추가적으로 php에서의 mail 기능이 이상태로는 안될 수 있으니 sendmail도 설치하자.

1
2
3
yum install sendmail
sestatus -| grep sendmail
setsebool -P httpd_can_sendmail=on
cs


그리고 이제 웹브라우저를 열고 워드프레스 인스톨 페이지에 접속해보자.

http://서버의IP/wp-admin/install.php

만약 위와같은 화면을 만나지 못했다면 위의 내용을 다시한번 천천히 정독해보도록한다.

이 댓글을 비밀 댓글로
    • 2016.07.04 16:44
    비밀댓글입니다
    • 음...어디서부터 어디까지를 도와드려야하는건지..감이 잘안와서 ^^;;
      일단 말씀해주신 VPS 서비스가 OVH? 여기꺼 말씀하시는건가여?

      기본적으로 order할때 My OS 부분에서 Operating system에 대한 설정을 지원하고 있네요. 또 Control Panel 에서 설정을 할수도 있다고도 나와있네요.
      여기서 Distribution 에서 Centos, Version 에서 Centos 7 64bits 로 놓고 위의 글을 그대로 따라하시면 될거같아요~

      가상서버에서 위처럼 명령어를 입력하기위해서는 ssh 접속이 필요한데 putty 또는 XShell 로 접속하시면 되요.
    • BONG
    • 2016.09.13 10:16 신고
    안녕하세요 하루님
    하루님께서 올려주신 포스트 보고 덕분에 워드프레스 잘 설정해서 사용중입니다. ^^

    다만 서버 응답속도 및 웹페이지 속도 향상을 위해서 nginx pagespeed 모듈을 추가하고자 하는데
    이미 설정 완료된 nginx 에 대한 pagespeed 모듈 추가하는 방법은 예제가 잘 없어서 ㅠ

    혹시 진행 해보신적 있거나 pagespeed 모듈 추가해볼 계획 있으시면 정보 공유좀 부탁 드려도 될까요?
    • pagespeed 를 설치해본적이 있지만 그게 2012년이네요..
      지금은 pagespeed를 사용하고 있지는 않습니다만...
      제 기억에 의하면 nginx 를 설치할때 기본 yum 으로 설치하면 안됬던걸로 기억합니다.

      위의 내용에는 기본 yum으로 설치이니 compile 버전으로 설치하셔야 합니다.
      시간이 많다면 제가 직접 해보고 올려드릴수도 있지만 지금 조금 바쁜 상황이라 상세하게는 설명하기 어렵네요..

      일단 소스버전으로 받으셔서 nginx 컴파일을 하면서 pagespeed 모듈을 넣는 방법으로 하셔야합니다.

      nginx 를 소스파일로 컴파일하여 설치하게 되면 기존의 nginx 랑 별개의 디렉토리로 설치가 되지만 혹시모르는 문제가 발생할 수 있으므로 될 수 있으면 yum remove nginx 하고 설치하시길 바랍니다.

      기존에 설정된 내용들이 걱정이라면
      어차피 /etc/nginx/conf.d/
      에 설정된 내용들을 백업해놓고 다시 이 설정파일만 가지고 다시 세팅하면 되기 때문에 재설치를 겁내지 않으셔도 됩니다.

      게다가 어차피 위의 상황에서 nginx 가 다른 모듈들에 종속되어 있는게 아니기 때문에 저기서 그냥 nginx 만 삭제하고 apache를 설치해서 사용해도 무관합니다.
      • BONG
      • 2016.09.13 20:54 신고
      답변 감사합니다. 한번 시도해 보겠습니다~
    • 2016.12.12 15:49
    비밀댓글입니다
    • 음..제가 직접 확인해볼 수 있는 문제가 아니라 확답을 드릴수는 없지만
      로그가 타임아웃이고, 이를 늘렸을때 느리긴 해도 되긴 된다고 하셨는데..
      워드프레스 자체가 그렇게 최적화가 잘되있는 툴은 아니라 느리긴 느립니다.
      아마 코드상에 문제가 있는건 아닐까 추측이 됩니다.
      해보셨을때 회원가입외에는 그렇게 느리지 않다면 해당 user-new.php 파일에 문제가 없는지 체크를 해보시는건 어떨까요?
      아니면 /var/log/php-fpm/ 로 가서 php상에 에러로그가 찍힌것은 없는지 체크를 해보셔야 할듯 합니다.
      만약 로그가 찍혀있지 않다면 /etc/php.ini 에서 로그를 기록하도록 해보세요.

      추가)
      일단 위의 글을 쓸 때 세팅했던 워프 서버를 가서 사용자 추가를 해보았지만 이상없이 잘 됩니다. 느리지도 않구요.
      일단은 로그를 확인해보시도록 하고
      아무래도 위에서 빠트리신 부분이 없는지도 확인해보시는게 좋을것 같습니다.
      위의 php, nginx 등의 구성이 각기 다른서버에 설치된 것이라면 네트워크 상황도 체크해볼 만 합니다.

      위의 글이 적용된 서비스는 최신의 CPU를 가진 4코어에 2기가의 메모리를 가진 서버가 사용되었고 CentOS7은 불필요한 리소스가 없게끔 GUI환경이 없는 Minimum 설치가 되어있는 상태입니다.
    • 2016.12.15 13:13
    비밀댓글입니다
    • 잘안되셨나보군요 ㅠㅠ 지금은 밖이라 봐드리기 어렵고..이따 밤에 별일없다면 연락드리도록 하겠습니다 ㅎㅎ