LNMP手工安装方法-CentOS8

LNMP手工安装方法-CentOS8

LNMP手工安装方法-CentOS8

普通用户建站很少会用到代码调试,因此也没有必要进行源码编译安装,所以安装过程简单之极。

目标环境说明

硬件信息:

  • CPU:1 vCPU
  • 内存:1 GiB
  • 网络类型:专有网络VPC
  • IP地址:公网IP

软件信息:

  • 操作系统:公共镜像CentOS 8.2 64位
  • Nginx版本:Nginx 1.20.1
  • MySQL版本:MySQL 8.0.21
  • PHP版本:PHP 7.3.5

提前说明:提供使用LNMP安装配置脚本安装

下面的安装与配置LNMP过程已经封装在脚本中,如果想要直接使用脚本,可以看这里。

获取脚本工具到本地目录:

git clone https://github.com/Awkee/install_linux.git
cd lnmp

说明:使用脚本前,需要设置一些变量参数信息:

例如:config_lnmp.sh 脚本中如下变量:

domain_name=""   # 替换 example.com 为个人域名地址
webroot_dir=""     # Web服务部署的根目录
mysql_root_password=""  # MySQL数据库root密码

install_lnmp.sh脚本中的如下变量也是可以选择的,前提是你知道安装源是否包含正确的版本号软件包:

nginx_ver="1.20.1"  # 安装Nginx版本号
php_ver="7.4"       # 安装PHP版本号

设置好,接下来就可以执行脚本了:

./install_lnmp.sh
./config_lnmp.sh

安装配置完成后,即可部署WordPressTypecho或者你个人的PHP项目了,这个过程就不介绍了。

安装Nginx

访问 Nginx官方安装包获取适用于CentOS 8系统的多版本的Nginx安装包。

安装命令:

dnf -y install http://nginx.org/packages/centos/8/x86_64/RPMS/nginx-1.20.1-1.el8.ngx.x86_64.rpm

成功后,检查安装版本信息:

nginx -v

执行成功后预计显示结果如下:

nginx version: nginx/1.20.1

安装MySQL

运行如下命令开始安装:

dnf -y install @mysql

检查安装是否成功:

mysql -V

预计输出信息为:

mysql  Ver 8.0.21 for Linux on x86_64 (Source distribution)

安装PHP

  1. 添加并更新epel源:
dnf -y install epel-release
dnf update epel-release
dnf clean all
dnf makecache
  1. 启用php:7.4模块
# 先安装remi源
dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

dnf module enable php:7.4

  1. 开始安装php模块
dnf -y install php php-curl php-dom php-exif php-fileinfo php-fpm php-gd php-hash php-json php-mbstring php-mysqli php-openssl php-pcre php-xml libsodium

安装成功检查方法:

php -v

预计输出结果为:

PHP 7.4.6 (cli) (built: May 12 2020 08:09:15) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.6, Copyright (c), by Zend Technologies

配置Nginx

查看配置文件/etc/nginx/nginx.conf内容:

cat /etc/nginx/nginx.conf

可以看到如下内容(原始配置,不用修改的):

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}
http {
    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  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}

配置文件里有两个配置文件存放目录:
- /etc/nginx/conf.d/ : 这里面可以添加虚拟服务(vhost),提供独立端口服务的配置,例如配置HTTPS服务。
- /etc/nginx/default.d/ : 这里是存放虚拟服务器不同的访问路径、重写路径等信息,用于控制vhost中访问路径的处理信息,例如配置访问路径/path1(URL地址为https://your.domain.com/path1)的处理规则。

我们可以添加很多虚拟服务/etc/nginx/conf.d/而不会影响全局配置,保证了独立服务拥有独立的配置。

HTTPS服务配置示例

我们以域名example.com配置为例:

配置文件/etc/nginx/conf.d/https.conf:

# Settings for a TLS enabled server.
server {
    # HTTPS服务端口-必须为443,且一定要放开防火墙限制
    listen       443 ssl http2 default_server;
    listen       [::]:443 ssl http2 default_server;
    # 服务域名
    server_name  example.com;
    # 存放网站文件的根目录
    root         /www/example.com;

    # SSL 证书(从Let's Encrypt获取免费SSL证书),使用certbot下载获取
    ssl_certificate "/etc/letsencrypt/live/example.com/fullchain.pem";
    ssl_certificate_key "/etc/letsencrypt/live/example.com/privkey.pem";

    # PSF完美前向加密,生成方法:
    # mkdir -p /etc/ssl/private/
    # openssl dhparam -out /etc/ssl/private/dhparam.pem 2048
    ssl_dhparam /etc/ssl/private/dhparam.pem;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    # ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:AES:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # 导入以https_开头的配置文件
    include /etc/nginx/default.d/https_*.conf;
}

添加SSL证书配置https_php.conf:

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

    proxy_read_timeout 150;
    # 设置伪静态页面规则 #
    if (-f $request_filename/.html){
        rewrite (.*) $1/.html break;
    }
    if (-f $request_filename/index.php){
        rewrite (.*) $1/index.php;
    }
    if (!-f $request_filename){
        rewrite (.*) /index.php;
    }
}

location ~ \.php(.*)$ {
    #Nginx通过unix套接字与PHP-FPM建立联系,该配置与/etc/php-fpm.d/www.conf文件内的listen配置一致。
    fastcgi_pass   unix:/run/php-fpm/www.sock;
    fastcgi_index  index.php;
    #将/scripts$fastcgi_script_name修改为$document_root$fastcgi_script_name。
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    #Nginx调用fastcgi接口处理PHP请求。
    include        fastcgi_params;
    fastcgi_connect_timeout 5;
    fastcgi_send_timeout 10;
    fastcgi_read_timeout 10;
}

可以看到这里配置的是虚拟服务的路径请求处理规则和一些相关选项信息,这样做的好处是配置规则的重复利用

SSL证书获取

我们采用 certbot 脚本方式申请 let's encript 证书,依次执行如下命令安装该工具:

yum install -y epel-release
yum install -y certbot

# 申请证书
certbot certonly --nginx -d example.com

执行成功后,证书就保存在 /etc/letsencrypt/live/example.com/目录下,这里的example.com是你自己的域名名称。

证书是3个月有效期,可以在到期前14天内延期,自动延期方法当然是添加cron调度配置:

# 每两月的1日1点00分,执行延期命令。
00 1 1 */2 * /usr/bin/certbot renew --quiet

增加安全性-完美前向加密

执行如下命令生成perfect forward secrecy (PFS)文件:

[[ -f /etc/ssl/private/dhparam.pem ]] || ( mkdir -p /etc/ssl/private/ && openssl dhparam -out /etc/ssl/private/dhparam.pem 2048 )

完美前向加密(PFS)指的是长期使用的主密钥泄漏不会导致过去的会话密钥泄漏,即使有人监听了你的历史会话消息数据,也无法通过主密钥解密,保证了历史数据的安全性。

启动Nginx

# 手动启动服务
systemctl start nginx

# 设置开机自启动
systemctl enable nginx

配置PHP

配置文件/etc/php-fpm.d/www.conf

修改/etc/php-fpm.d/www.conf文件内容如下:

  1. 找到user = apachegroup = apache,将apache修改为nginx。
user = nginx
group = nginx

  1. 修改监听文件以及其监听文件归属用户和组都是nginx(这样nginx服务才有权限访问 /run/php-fpm/www.sock unix socket 文件):
listen = /run/php-fpm/www.sock

listen.owner = nginx
listen.group = nginx
  1. 启动php-fpm服务
systemctl start php-fpm
systemctl enable php-fpm

检测配置是否成功:

# 添加 phpinfo.php 文件到`HTTPS`服务的`root`目录`/www/example.com`
echo '<?php echo phpinfo(); ?>' > /www/example.com/phpinfo.php

chown -R nginx:nginx /www/example.com/phpinfo.php

此时,访问https://example.com/phpinfo.php网址(example.com可以直接替换成公网IP地址)检测是否可以看到PHP配置信息。

配置Mysql数据库

  1. 设置开机自启动Mysql服务:
systemctl enable --now mysqld
  1. 检查是否启动成功:
systemctl status mysqld
  1. 进行安全配置:
    可以使用下面命令配置:
# 更新root用户密码,这里需要修改`CHANGEME`为你想设置的密码!
mysql -e "UPDATE mysql.user SET Password = PASSWORD('CHANGEME') WHERE User = 'root'"
# 禁止匿名用户登录
mysql -e "DROP USER ''@'localhost'"
mysql -e "DROP USER ''@'$(hostname)'"
# 删除测试数据库test
mysql -e "DROP DATABASE test"
# 使修改内容生效
mysql -e "FLUSH PRIVILEGES"

当然,你也可以执行官方提供的脚本进行配置(需要交互进行选择):

mysql_secure_installation

第一次安装时root口令为空,需要重新设置一个更安全的密码,具体步骤如下:
1. Enter current password for root (enter for none): ,第一次运行密码为空,直接按回车键即可。
2. Change the root password? [Y/n],提示修改root密码,输入:Y
3. New password: 输入新密码,例如:Pasword1234! ,包含大小写字母、数字及符号,这样更加安全。
4. Re-enter new password::重新输入一次新密码进行确认。
5. Remove anonymous users? [Y/n]: 删除匿名登录用户,输入Y确认。
6. Disallow root login remotely? [Y/n]: 禁止远程登录使用root帐号(本机可以登录),输入Y确认。
7. Remove test database and access to it? [Y/n] : 删除test数据库内容,输入Y确认。
8. Reload privilege tables now? [Y/n]:重新加载权限表,输入Y保存修改信息。

完成设置。

配置完成后,我们就完成了LNMP环境的部署工作,接下来就可以部署博客文件了(WordPress或者Typecho以及其他PHP项目)。


转载本文时请注明出处及本文链接地址LNMP手工安装方法-CentOS8

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注