搭建采用在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 /
再次更新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