WordPress服务器搭建(centos+nginx+mysql+php)

搭建采用在CentOs7服务器上,通过nginx,mysql,及php搭建整个系统,wordpress运行在nginx指定的根节点下。

1.准备网络服务器

wordpress需要一个网络服务器。经过比较后,我选择了的amazon的aws(amazon web service),aws第一年免费,正好拿来测试。选择了EC2服务,并启动了一个utunbu的镜像,折腾了一天,最后虽然wordpress可以使用了,但是在更新themes时,总是显示创建不了文件夹。各种方案,也没有解决问题。

不得已重新启动了一个centos7的镜像,通过一番研究试坑,最终搭建成功。
如果用阿里云的服务器主机,搭建过程相对简单。

2.编译安装nginx

首先升级yum,直接通过 yum install nginx,没有成功。

参考( https://www.cnblogs.com/lihailin9073/p/11173537.html )。

编译安装Nginx

cd /usr/local/src

wget http://nginx.org/download/nginx-1.16.0.tar.gz

tar -zxvf nginx-1.16.0.tar.gz

cd nginx-1.16.0

yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

 ./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --pid-path=/usr/local/nginx/run/nginx.pid --lock-path=/usr/local/nginx/run/nginx.lock --http-client-body-temp-path=/usr/local/nginx/run/client_body_temp --http-proxy-temp-path=/usr/local/nginx/run/proxy_temp --http-fastcgi-temp-path=/usr/local/nginx/run/fastcgi_temp --http-uwsgi-temp-path=/usr/local/nginx/run/uwsgi_temp --http-scgi-temp-path=/usr/local/nginx/run/scgi_temp --http-log-path=/usr/local/nginx/log/access.log --error-log-path=/usr/local/nginx/log/error.log --with-debug --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_degradation_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module

make

make install 

安装完毕,启动/关闭/重启Nginx命令如下:

/usr/local/nginx/sbin/nginx //启动
/usr/local/nginx/sbin/nginx -s stop //关闭
/usr/local/nginx/sbin/nginx -s reload //重启

查看启动状态

ps -ef | grep nginx

设置Nginx开机启动

 vi /usr/lib/systemd/system/nginx.service

在文件中写入启动脚本

[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecReload=/usr/local/nginx/sbin/nginx -s reload
PrivateTmp=true

[Install]
WantedBy=multi-user.target

保存上述脚本文件,并执行如下命令,完成Nginx开机启动设置:

systemctl enable nginx.service

重启系统

reboot

查看Nginx是否开机启动成功,在浏览器输入:http://localhost

为了让nginx命令有效,将nginx添加到系统环境变量中:

vim /etc/profile

在profile文件中添加如下两行代码:

PATH=$PATH:/usr/local/nginx/sbin
export PATH

保存退出/etc/profile文件,执行如下命令让profile立即生效:

source /etc/profile

3.编译安装php7.2

直接记录命令

cd /usr/local/src
wget https://www.php.net/distributions/php-7.2.20.tar.gz
tar -zxvf php-7.2.20.tar.gz
cd php-7.2.20
yum install -y gcc gcc-c++ make automake autoconf gd file bison patch mlocate flex diffutils zlib zlib-devel pcre pcre-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel libcurl libcurl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers openldap-devellibxslt-devel kernel-devel libtool-libs readline-devel gettext-devel libcap-devel php-mcrypt libmcrypt libmcrypt-devel recode-devel gmp-devel icu libxslt libxslt-devel php-devel
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql-sock --with-mysqli --with-libxml-dir --with-openssl --with-mhash --with-pcre-regex --with-zlib --with-iconv --with-bz2 --with-curl --with-cdb --with-pcre-dir --with-gd --with-openssl-dir --with-jpeg-dir --with-png-dir --with-zlib-dir --with-freetype-dir --with-gettext --with-gmp --with-mhash --with-libmbfl --with-onig --with-pdo-mysql --with-zlib-dir --with-readline --with-libxml-dir --with-xsl --with-pear --enable-fpm --enable-soap --enable-bcmath --enable-calendar --enable-dom --enable-exif --enable-fileinfo --enable-filter --enable-ftp --enable-gd-jis-conv --enable-json --enable-mbstring --enable-mbregex --enable-mbregex-backtrack --enable-pdo --enable-session --enable-shmop --enable-simplexml --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-wddx --enable-zip --enable-mysqlnd-compression-support
make && make install

创建php-fpm.conf、www.conf配置文件:

cd /usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf
cd /usr/local/php/etc/php-fpm.d
cp www.conf.default www.conf

创建php.ini配置文件:

find /usr/local/src/php-7.2.20 -name php.ini*
cp /usr/local/src/php-7.2.20/php.ini-production /usr/local/php/etc/php.ini

手动启动和关闭php:

/usr/local/php/sbin/php-fpm
/usr/bin/pkill -9 php-fpm
pstree -p | grep php

设置php-fpm开机启动:
首先,关闭php-fpm进程:

 /usr/bin/pkill -9 php-fpm

然后,修改php-fpm.conf中的 [pid = /run/php-fpm.pid] 配置项,该配置在后续的php-fpm.service文件中需要用到

vi /usr/local/php/etc/php-fpm.conf

创建php-fpm.service文件:

vi /usr/lib/systemd/system/php-fpm.service

在文件中写入启动脚本

[Unit]
Description=php-fpm
After=network.target

[Service]
Type=forking
PIDFile=/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm
ExecStop=/usr/bin/pkill -9 php-fpm
PrivateTmp=true

[Install]
WantedBy=multi-user.target

保存上述脚本文件,并执行如下命令,完成php-fpm开机启动设置:

systemctl enable php-fpm.service

这样就可以使用systemctl命令管理php-fpm:

systemctl start php-fpm.service
systemctl stop php-fpm.service

也可以使用如下命令管理php-fpm:

service php-fpm start
service php-fpm stop
service php-fpm restart
service php-fpm reload

4. 安装mysql

下载mysql源安装包

wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm

安装mysql源

yum localinstall mysql57-community-release-el7-8.noarch.rpm

启动MySQL服务

systemctl start mysqld

安装MySQL

yum install mysql-community-server

查看MySQL的启动状态

systemctl status mysqld

开机启动

systemctl enable mysqld
systemctl daemon-reload

修改root本地登录密码
mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码。
通过下面的方式找到root默认密码,然后登录mysql进行修改:

grep ‘temporary password’ /var/log/mysqld.log
mysql -uroot -p

mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘123456’;
mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘123456’;

或者

mysql> set password for ‘root’@’localhost’=password(‘123456’);

这里出于安全需求,应该为wordpress设立一个专门的账号。
新版本的mysql要求的密码规则比较复杂。

5. 配置nginx+php7.2

编辑nginx.conf

vi /usr/local/nginx/conf/nginx.conf

修改如下部分:

location / {
root html;
index index.php index.html index.htm;
}

location ~ .php$ {
# root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

重启nginx。

/usr/local/nginx/sbin/nginx //启动

6. 创建数据库

mysql -u root -p

系统会提示您输入为MySQL root帐户设置的密码。

登录MySQL成功后,我们为wordpress 创建wordpress的数据库,另外创建独立的用户,并为远程登录数据库打开权限,

CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE USER 'wpUser'@'local' identified by '123456';
GRANT ALL ON wordpress.* TO 'wpUser'@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

这样我们就可以通过navicat等数据库软件远程登录mysql。

7.下载并配置wordpress

cd /tmp
wget https://wordpress.org/latest.tar.gz
unzip -zxvf latest.tar.gz

将文件夹wordpress拷贝到nginx运行的文件夹下。之后为文件夹赋予权限。

groupadd nginx
useradd -g nginx nginx
sudo chown -R nginx:nginx /usr/local/nginx/html

其中nginx:nginx是nginx的用户组和用户名。与ngixn.conf里面设置的用户组一致。

user nginx nginx;
worker_processes 1;

另行需要前期先设置好用户组和用户,如何创建这里没有涉及,可另外查看。

要从WordPress密钥生成器中获取安全值,

curl -s https://api.wordpress.org/secret-key/1.1/salt/ > key.txt

您将获得看起来像这样的唯一值,内容保存在key.txt文件中,类似如下:

define('AUTH_KEY',         'cH?Dp28B5e*+m,fSPI#mhwR%3&>SekkPRh}N-2N1zpA+D~|Q.~}8%|ea8H8njhP[');
define('SECURE_AUTH_KEY',  'OAKV5cDS+H&W|vk7T?ai7XniC&A-X=[#[8{uKWSMnS/,pq603SD/^|;1xFjpXnO#');
define('LOGGED_IN_KEY',    'Gjz#DgEZNoNlk4oy&:^~U0K|PLI~Wd@k4>2~jJiJTz=2{0ONOY;-YzE20lIZB,,2');
define('NONCE_KEY',        ']=m;bAO?Qzz_1f!Z7b+9UYX[6n(>~Q/CBX(Rb.-X;~d2W;LA O`|Z&.ga%u2ML}6');
define('AUTH_SALT',        'V}*d9G6[M)Lv]l*ahbZ}VEfRIH-oK^2%uK(Ck~!*IBhLtU]-;_x]36G ]q^|4-$-');
define('SECURE_AUTH_SALT', '^0z/>{mH],+$c5j{Arn,}n?LyXSkuu}7u|3hhtWkrk+C>j][:n^qY6z-n)Q.lY-1');
define('LOGGED_IN_SALT',   'wHs):;U1o-8~tTI:Z#+]{w+ Dob{eV%8qReJ^d[FRc;Fqqspi+s-P|1]gLje~,>R');
define('NONCE_SALT',       '&?X)Q/+~X? FBG7Oy4iWzDm>)60jMZF-oH|({9?4~jmL3>;4q(WOv,X:5$M-2Dck');

复制你获取到保存在key.txt文件中内容,替换wp-config.php中类似如下内容:

define('AUTH_KEY',         'put your unique phrase here');
define('SECURE_AUTH_KEY',  'put your unique phrase here');
define('LOGGED_IN_KEY',    'put your unique phrase here');
define('NONCE_KEY',        'put your unique phrase here');
define('AUTH_SALT',        'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT',   'put your unique phrase here');
define('NONCE_SALT',       'put your unique phrase here');

替换完成后保存文件。
接下来我们修改wp-config.php文件中的数据库配置内容。找到下面内容,填写你实际的数据库名称,用户名,密码等内容。

define('DB_NAME', 'wordpress');
define('DB_USER', 'root');
define('DB_PASSWORD', '123456');
define('DB_HOST','.127.0.0.1');

添加define('FS_METHOD', 'direct'),用来自动更新时,自动设置ftp,不需要另外在输入用户名及密码。

define('FS_METHOD', 'direct');

另外,在centos系统中,DB_NAME 不能用 localhost,需要具体的host地址才可以。具体原因不明。

8.启动wordpress

上述情况完成后,就可以在Web浏览器的地址栏中输入域名或IP地址,启动wordpress了。第一次启动wp,会有一个设置向导页,按照向导输入相关信息就可以完成初始化,出现helloworld界面,完成安装。

9.遇到的问题

1.启动wordpress后,更新下载themes时,显示无法创建文件夹。查了相关问题解决方案,大概率是因为文件权限问题。

在centos中将wp-content文件夹设置为777,另外将文件夹赋予权限。我将整个文件夹都赋予相应权限。

sudo chown -R nginx:nginx /usr/local/nginx/html /
sudo chmod -R 777 /usr/local/nginx/html /
捕获.png

再次更新themes,可以正常下载了。

2.刷新后台页面时,有几次网页读取一半中断,刷新几次,有可以度过去。查看console信息,显示

VM3162 customize.php:1573 GET http://18.163.73.15/wp-admin/load-scripts.php?c=1&load%5Bchunk_0%5D=wp-hooks,heartbeat,customize-base,customize-controls,customize-widgets,thickbox,media-upload,mce-view,imgareaselect,image-edit,a&load%5Bchunk_1%5D=ccordion,wp-sanitize,customize-nav-menus,customize-models,customize-views,jquery-ui-slider,jquery-touch-punch,iris,wp-color-pick&load%5Bchunk_2%5D=er,updates,quicktags,wplink,jquery-ui-position,jquery-ui-menu,jquery-ui-autocomplete&ver=5.3.2 net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)

检查了nginx的error.log

# vim error.log
2020/02/05 07:35:28 [crit] 25290#0: *1858 open() “/var/temp/nginx/fastcgi/1/17/0000000171” failed (13: Permission denied) while reading upstream, client: 35.241.77.171, server: localhost, request: “POST /wp-admin/admin-ajax.php HTTP/1.1”, upstream: “fastcgi://127.0.0.1:9000”, host: “18.163.73.15”, referrer: “http://18.163.73.15/wp-admin/customize.php?url=http%3A%2F%2F18.163.73.15%2F”

将/var/temp/nginx/fastcgi文件夹权限设置成777,问题解决。

参考链接

https://www.jianshu.com/p/d1316588fc4a
https://www.cnblogs.com/lihailin9073/p/11173537.html

你可能感兴趣的:(WordPress服务器搭建(centos+nginx+mysql+php))