《Linux运维学习日记》第十七篇:LNMP实现discuz和wordpress

本文详细记录了在CentOS系统上搭建LNMP环境的过程,包括Nginx的源码安装、配置隐藏响应头、安装PHP-FPM以满足WordPress 5.4.1的要求,以及WordPress的部署和权限设置。同时,还介绍了自定义403、404错误页面的方法,以及Nginx的热部署和回滚策略。最后,文章涵盖了MySQL 5.7.25的安装、初始化及为网站创建数据库的步骤。
摘要由CSDN通过智能技术生成

Nginx安装并搭建 wp

1、安装nginx服务器

1.1、安装所需依赖库
[root@duduhome ~]# yum install lrzsz wget git make cmake gcc gcc-c++ pcre pcre-devel openssl openssl-devel ncurses-devel libaio bison git ncurses -y
1.2、创建LNMP运行用户
[root@duduhome ~]# useradd -s /sbin/nologin -M  www
 -s:指定创建的用户的 bash,nologin表示不能登录
 -M:表示在创建用户的时候,不创建家目录
1.3、创建用于存放网站数据的文件目录
网站数据存放目录:
[root@duduhome ~]# mkdir -p /data/www/html

数据库数据存放目录:
[root@duduhome ~]# mkdir -p /data/www/mysql
1.4、安装nginx(源码安装)
[root@duduhome nginx-1.16.0]# 
 ./configure  --user=www  --group=www  --prefix=/usr/local/nginx --with-http_ssl_module  --with-http_stub_status_module  --with-pcre
[root@duduhome nginx-1.16.0]# make && make install

2、nginx配置文件:nginx.conf

2.1、相关配置参数(目前我自己的网站就这样配置)
[root@duduhome ~]# vim /usr/local/nginx/conf/nginx.conf

user  www;
worker_processes  auto;

events {
    use epoll;
    worker_connections  65565;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    # 响应头信息状态,更改响应头里面的Server字段用
    server_tokens off;

    # 加速访问,sedfile:直接内核处理,tcp_nopush:不阻塞
    sendfile        on;
    tcp_nopush     on;

    #keepalive_timeout  0;
    # 防爬虫,30秒内最多只能请求100次
    keepalive_timeout   30;
    keepalive_requests  100;

    # 开启压缩文件, 文件大于10K后就开始进行压缩,
    # 只对文件的类型是text/plain text/xml 的文件压缩
    gzip  on;
    gzip_min_length 10k;
    gzip_types  text/plain  text/xml;   # 压缩类型,公司里面开发会说明
    gzip_comp_level 5;                  # 压缩级别

    # 主机配置(网站)
    server {
        listen       80;
        server_name  localhost;
        charset utf-8;
        root /data/www/html;


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

        #error_page  404              /404.html;
        # redirect server error pages to the static page /404.html
        error_page 404 500 502 503 504  /404.html;
        location = /404.html {
            root  /data/www/error_page;
        }

        # error_page 403 /403.html
        error_page 403 /403.html;
        location = /403.html {
            root /data/www/error_page;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {
            root           /data/www/html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        location ~ /\.ht {
            deny  all;
        }
    }
    
    server {
        listen 80;
        #填写绑定证书的域名
        server_name www.yushaodu.com;
        #把http的域名请求转成https
        return 301 https://$host$request_uri;
    }
}
2.2、隐藏响应头信息,避免被别人看到使用的是什么服务器和版本
a、修改src下的http源码文件:
[root@duduhome opt]# vim nginx-1.16.0/src/http/ngx_http_header_filter_module.c 

b、找到并修改成这样(这样别人看到的头信息,server就会显示是 GitHub.com):
    static u_char ngx_http_server_string[] = "Server: GitHub.com" CRLF;
    static u_char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;
    static u_char ngx_http_server_build_string[] = "Server: " NGINX_VER_BUILD CRLF;

c、重新编译安装nginx服务器(争对还没有开启Nginxe服务器的情况,若已经开启的在“在线升级nginx相关篇幅里面介绍”)

d、修改nginx.conf配置文件:
在http模块下添加:
         server_tokens off;

3、搭建php-fpm

3.1、安装php-fpm(php7.2,因为wroldpress5.4必须要php7.0以上)
更新php安装包(CentOS7只有5.4):
[root@duduhome ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
[root@duduhome ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

安装php-fpm相关服务:
[root@duduhome ~]# yum install php72w php72w-devel php72w-fpm php72w-mysql -y
3.2、配置 php-fpm 的配置文件
[root@duduhome ~]# vim /etc/php-fpm.d/www.conf

把里面的 
    user = apache   group = apache
更改为
    user = www   group = www

因为我只有一台服务器,所以
    listen = 127.0.0.1:9000
我就不更改了,若要设置静态分离,这里就要设置为你的动态处理的服务器IP

4、wordpress(这里是用的5.4.1版本)
4.1、获取wordpress网站代码
从本地上传:
[root@duduhome opt]# rz 
                       然后找到要上传的wordpress

从wroldpress官网上下载:
[root@duduhome opt]# wget https://cn.wordpress.org/latest-zh_CN.tar.gz
4.2、把wordpress网站代码拷贝到网站数据目录下
解压:
[root@duduhome opt]# tar zxf wordpress-5.4.1-zh_CN.tar.gz 

拷贝网站代码到网站数据目录下:
[root@duduhome opt]# mv wordpress/*  /data/www/html/
4.3、给网站数据目录配置权限,让网站其能正常运作
[root@duduhome opt]# chown www. -R /data/www/html

5、更改自定义的403、404错误页面

5.1、创建错误页面存放的目录,这样有利于以后的管理
创建目录:
[root@duduhome www]# mkdir /data/www/error_page/
修改权限:
[root@duduhome www]# chown www. -R /data/www/error_page
5.2、403、404 错误页面:

由于篇幅问题,直接把这两个页面上传到目录里了,这些页面均复制于 https://404.life/


6、nginx、php-fpm的启动、重启等相关命令

6.1、nginx:
启动:
[root@duduhome ~]# /usr/local/nginx/sbin/nginx 
重启:
[root@duduhome ~]# /usr/local/nginx/sbin/nginx -s reload

停止:
[root@duduhome ~]# /usr/local/nginx/sbin/nginx -s stop 

修改配置文件后,测试是否有问题:
[root@duduhome ~]# /usr/local/nginx/sbin/nginx -t

查看版本信息:
[root@duduhome ~]# /usr/local/nginx/sbin/nginx -v

查看预编译的参数(用于升级):
[root@duduhome ~]# /usr/local/nginx/sbin/nginx -V
6.2、php-fpm:
启动:
[root@duduhome ~]# systemctl start php-fpm

重启:
[root@duduhome ~]# systemctl restart php-fpm

停止:
[root@duduhome ~]# systemctl stop php-fpm

运行状态:
[root@duduhome ~]# systemctl status php-fpm

查看版本:
[root@duduhome ~]# yum list installed | grep php

7、nginx热部署

当服务器在运行状态,而因为某些原因需要添加一些模块或者升级的时候,要做到服务器不停机,就必须用到热部署了

7.1、方法一(推荐使用)
  • 查看nginx版本和已经编译的模块,如果不添加以前的模块,那么以前的模块就不能使用:
[root@duduhome nginx-1.16.0]# /usr/local/nginx/sbin/nginx  -V
  • 预编译/编译/安装:

–add-module:添加编译模块;eg:–add-module=./src/echo-nginx-module

[root@duduhome nginx-1.16.0]# make clean
[root@duduhome nginx-1.16.0]# ./configure 带上以前编译的模块和要添加的模块,若是升级nginx,那就把以前编译的模块加上即可
[root@duduhome nginx-1.16.0]# make && make install
  • 生成新的master进程:
[root@duduhome nginx-1.16.0]# kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`

[root@duduhome nginx]# ls /usr/local/nginx/logs/
access.log  error.log  nginx.pid  nginx.pid.oldbin
  • 查看nginx的进程号:
[root@duduhome nginx-1.16.0]# ps -ef | grep nginx

root      1554     1  0 11:51 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
www       1555  1554  0 11:51 ?        00:00:00 nginx: worker process
root     26978  1554  0 14:40 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
www      26979 26978  0 14:40 ?        00:00:00 nginx: worker process
root     27044 13347  0 14:41 pts/0    00:00:00 grep --color=auto nginx
  • 退出老 worker进程:
向老的 master进程发信号:
[root@duduhome nginx-1.16.0]# kill -WINCH 1554
[root@duduhome nginx-1.16.0]# ps -ef | grep nginx
root      1554     1  0 11:51 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
root     26978  1554  0 14:40 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
www      26979 26978  0 14:40 ?        00:00:00 nginx: worker process
root     27343 13347  0 14:43 pts/0    00:00:00 grep --color=auto nginx

等一段时间服务器确定没有问题后退出老的master:
[root@duduhome nginx-1.16.0]# kill -QUIT 1554
[root@duduhome nginx-1.16.0]# ps -ef | grep nginx
root     26978     1  0 14:40 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
www      26979 26978  0 14:40 ?        00:00:00 nginx: worker process
root     27430 13347  0 14:44 pts/0    00:00:00 grep --color=auto nginx
7.2、方法二(不太推荐使用,容易丢失数据)
  • 查看nginx版本和已经编译的模块,如果不添加以前的模块,那么以前的模块就不能使用:
[root@duduhome nginx-1.16.0]# /usr/local/nginx/sbin/nginx  -V
  • 预编译/编译/安装:
[root@duduhome nginx-1.16.0]# make clean
[root@duduhome nginx-1.16.0]# ./configure 带上以前编译的模块和要添加的模块,若是升级nginx,那就把以前编译的模块加上即可
[root@duduhome nginx-1.16.0]# make && make install
  • 直接升级
[root@duduhome nginx-1.16.0]# make upgrade

8、回滚

8.1、热部署的方法一可以进行热部署,方法二不行
8.2、回滚:
  • 在“生成新的master进程”这步的时候,重新拉起老的worker进程:
查看进程:
[root@duduhome nginx-1.16.0]# ps -ef | grep nginx

root      1554 22238  0 11:51 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
www       1555  1554  0 11:51 ?        00:00:00 nginx: worker process
root      1672 13347  0 11:52 pts/0    00:00:00 grep --color=auto nginx
www       1923 22238  0 May05 ?        00:00:00 nginx: worker process
root     22238     1  0 May04 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx

重新拉起老的worker进程:
[root@duduhome nginx-1.16.0]# kill -HUP 22238
  • 退出新的maseter进程
[root@duduhome nginx-1.16.0]# kill -QUIT `cat /usr/local/nginx/logs/nginx.pid`
  • 新生master进程:
经过一段时间测试,服务器没有问题后,退出老的master:
[root@duduhome nginx-1.16.0]# kill -QUIT 8054

MySQL 的安装

1、获取mysql

1.1、从本地上传:
[root@duduhome opt]# rz 
                    然后找到mysql
1.2、从网上下载:
下载mysql:
[root@duduhome opt]# wget http://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-5.7.25.tar.gz

下载boost:
[root@duduhome opt]# wget http://nchc.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
tar xf boost_1_59_0.tar.gz

下载二进制包(免安装,解压直接使用):
wget -c  https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.28-linux-glibc2.12-x86_64.tar

2、安装(mysql5.7.25)

2.1、安装依赖
[root@duduhome ~]# yum install lrzsz wget git make cmake gcc gcc-c++ pcre pcre-devel openssl openssl-devel ncurses-devel libaio bison git ncurses numactl numactl-devel -y
2.2、解压源码包
解压mysql:
[root@duduhome opt]# tar zxf mysql-5.7.25.tar.gz 

解压boost:
[root@duduhome opt]# tar zxf boost_1_59_0.tar.gz 
2.3、安装(好像是从Mysql5.7后都要有boost库,否则无法安装成功)
重命名 boost:
[root@duduhome opt]# mv boost_1_59_0  boost


预编译:
[root@duduhome mysql-5.7.25]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/usr/local/mysql -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=3306 -DWITH_XTRADB_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DWITH_EXTRA_CHARSETS=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_BIG_TABLES=1 -DWITH_DEBUG=0 -DWITH_BOOST=/opt/boost

安装:
[root@duduhome mysql-5.7.25]# make && make install

3、创建目录和所需文件(以配置文件里面的参数为主)

数据库数据存放目录:
[root@duduhome opt]# mkdir /data/mysql/

日志文件:
[root@duduhome opt]# mkdir /data/mysql/logs
[root@duduhome opt]# touch /data/mysql/logs/mysql.log

给所有mysql目录权限:
[root@duduhome opt]# chown mysql. -R /data/mysql

给日志文件写、执行权限:
[root@duduhome opt]# chmod 755 /data/mysql/logs/mysql.log

剩下的到时在启动的时候,按它提示的错误信息来处理


4、修改mysql配置文件

[root@duduhome opt]# vim /etc/my.cnf

[mysqld]
server-id=1
log-bin=mysql-bin
basedir=/usr/local/mysql
datadir=/data/mysql
port=3306
socket=/data/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/data/mysql/logs/mysql.log
pid-file=/data/mysql/mysql.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d


5、初始化

[root@duduhome opt]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/data/mysql/3306 --basedir=/usr/local/mysql

2020-05-14T07:11:31.872694Z 1 [Note] A temporary password is generated for root@localhost: ft.;QmEkK39j
出现上面的那个临时密码后,说明初始化成功没有问题了


如果出现 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' 问题,一般就是在编译的时候,配置的参数与 my.cnf 配置文件里面的不一致所导致,直接 ln -s  把 mysql.socket 到 /tem/ 下即可

6、启动、重启、关闭等操作命令

启动:
[root@duduhome opt]# /usr/local/mysql/support-files/mysql.server start

重启:
[root@duduhome opt]# /usr/local/mysql/support-files/mysql.server restart
[root@duduhome opt]# /usr/local/mysql/support-files/mysql.server reload

停止:
[root@duduhome opt]# /usr/local/mysql/support-files/mysql.server stop

运行状态:
[root@duduhome opt]# /usr/local/mysql/support-files/mysql.server status

查看帮助:
[root@duduhome opt]# /usr/local/mysql/support-files/mysql.server
[root@duduhome opt]# /usr/local/mysql/support-files/mysql.server --help
[root@duduhome opt]# /usr/local/mysql/support-files/mysql.server -h

7、给网站创建数据库

7.1、连接数据库
先修改my.cnf配置文件,让其能空命令登录mysql,否则会报错:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

[root@www_1 ~]# vim /etc/my.cnf
在 [mysqld] 的最后一行加上一句:“skip-grant-tables
”
然后保存,在重启下 mysql 即可正常连接到数据库

[root@www_1 ~]# /usr/local/mysql/support-files/mysql.server restart
[root@www_1 ~]# /usr/local/mysql/bin/mysql


修改密码:
mysql> update mysql.user set authentication_string=password("WS5mNoir69vEN!H6iw") where user="root";
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

ysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> 


测试下用密码是否可以登录上Mysql:
mysql> quit;
Bye
[root@www_1 ~]# /usr/local/mysql/bin/mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.28

mysql> 
登录成功!!!
这个时候要修改新的密码,否则下次登录进Mysql后,在创建表之类的就会出现 “ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statemen”的错误

重新修改密码:
mysql> alter user 'root'@'localhost' identified by '&E83fcl1Al#NvnqF';
Query OK, 0 rows affected (0.00 sec)

mysql>
7.2、创建wordpress网站使用的数据库
连接数据库:
[root@www_1 ~]# /usr/local/mysql/bin/mysql -uroot -p
mysql> 

创建数据库:
mysql> create database ddhome charset=utf8;
Query OK, 1 row affected (0.00 sec)

授权网站连接:
mysql> grant all on ddhome.* to "wordpress"@xx.xxx.84.194 identified by "P&rQ4$scC#5Cujxr";
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> 

1
2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值