zoukankan      html  css  js  c++  java
  • LNMP 环境配置(基于 CentOS 7 + Nginx 1.8.0 + PHP 7.4.16 + MySQL 8.0.22)

    CentOS 的配置

    安装 net-tools

    默认安装的 CentOS 没有 ifconfig 命令,需要安装 net-tools 工具才能支持。

    $ yum install net-tools
    

    设置静态 IP

    在虚拟机里面安装的 CentOS,如果使用 DHCP 模式的网络配置,有时候会自动变更 IP 地址,为了后续操作不受 IP 地址变更的影响,将其设为固定的静态 IP 。

    $ cd /etc/sysconfig/network-scripts/
    $ cp ifcfg-ens33 ifcfg-ens33.bak
    $ vi ifcfg-ens33
    

    修改为以下内容。

    TYPE="Ethernet"
    PROXY_METHOD="none"
    BROWSER_ONLY="no"
    #BOOTPROTO="dhcp"
    
    BOOTPROTP="static"
    IPADDR="192.168.245.132"
    NETMASK="255.255.255.0"
    GATEWAY="192.168.245.2"
    DNS1="192.168.245.2"
    
    DEFROUTE="yes"
    IPV4_FAILURE_FATAL="no"
    IPV6INIT="yes"
    IPV6_AUTOCONF="yes"
    IPV6_DEFROUTE="yes"
    IPV6_FAILURE_FATAL="no"
    IPV6_ADDR_GEN_MODE="stable-privacy"
    NAME="ens33"
    UUID="e276b54a-1dcc-41db-9975-c9c762ed431f"
    DEVICE="ens33"
    ONBOOT="yes"
    

    说明:

    这里的 NETMASK 与 GATEWAY 可以通过查看 VMware 的 “编辑->虚拟机网络编辑器->NAT 模式->NAT 设置” 里面的信息来配置。DNS1 设置成 与 GATEWAY 一样即可,IPADDR 设置成在 GATEWAY 网段的 IP 即可。

    重启网络服务

    $ systemctl reload network
    

    或者重启系统。然后使用 ping 命令检测试一下是否能够访问外部网络。

    设置时间和时区

    系统安装后,使用 date 命令查看时间,发现其与当前的北京时间不一致,可以使用 ntpdate 来更新系统时间。

    # 安装 ntpdate 工具
    $ yum install ntpdate
    # 更新系统时间
    $ ntpdate cn.pool.ntp.org
    

    安装 Nginx

    安装依赖包

    $ yum -y install gcc zlib-devel pcre-devel openssl-devel
    

    获取 Nginx 安装包

    在 Nginx 官网获取 Nginx 的安装包,官网下载页面地址如下。

    http://nginx.org/en/download.html

    可以手动进行下载,也可以使用 wget 命令进行下载,使用 wget 下载命令如下。

    # 安装 wget
    $ yum -y install wget
    # 使用 wget 下载 Nginx 源码包
    $ wget http://nginx.org/download/nginx-1.18.0.tar.gz
    

    编译安装

    # 解压下载的源码包
    $ tar -zxvf nginx-1.18.0.tar.gz
    # 进入解压后的目录
    $ cd nginx-1.18.0
    # 配置 Nginx 的编译选项,指定 Nginx 的安装目录
    $ ./configure --prefix=/usr/local/nginx --with-http_ssl_module
    # 通过 make 命令编译和安装 Nginx
    $ make && make install
    

    Nginx 的服务管理

    # 切换到 Nginx 安装目录中的 sbin 目录
    $ cd /usr/local/nginx/sbin
    # 启动 Nginx
    $ ./nginx
    

    Nginx 启动后没有任何提示,可以通过以下命令查看 Nginx 的运行状态。

    $ ps aux | grep nginx
    root      57040  0.0  0.1  45972  1120 ?        Ss   16:03   0:00 nginx: master process ./nginx
    nobody    57041  0.0  0.1  46412  1872 ?        S    16:03   0:00 nginx: worker process
    root      57043  0.0  0.0 112824   984 pts/1    R+   16:03   0:00 grep --color=auto nginx
    

    建立软连接

    为了更方便地使用 Nginx,可以将 Nginx 软链接到 /usr/local/sbin 目录中,这样不论当前处于什么目录下,都可以直接使用命令操作 Nginx。创建软连接命令如下。

    $ ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/nginx
    

    ln 命令用于创建链接,选项 “-s” 表示创建软链接,类似 Windows 的快捷方式,后面跟两个路径,第 1 个路径是源文件路径,第 2 个路径是目标文件路径。

    访问测试

    设置防火墙,开放 80 端口。

    # 查看防火墙是否正在工作
    $ firewall-cmd --state
    # 始终开放 80 端口
    $ firewall-cmd --zone=public --add-port=80/tcp --permanent
    # 使防火墙配置立即生效
    $ systemctl reload firewalld
    # 查看 80 端口是否已经开放
    $ firewall-cmd --zone=public --query-port=80/tcp
    

    注意:

    如果提示 FirewallD is not running ,使用 systemctl start firewalld 命令启动防火墙。

    设置 Nginx 开机启动

    1. 创建服务脚本。
    $ vi /usr/lib/systemd/system/nginx.service
    
    1. 在服务脚本中编写如下内容。
    [Unit]
    Description=nginx = high performance web server
    Documentation=http://nginx.org/en/docs
    After=network.target remote-fs.target nss-lookup.target
    
    [Service]
    Type=forking
    WorkingDirectory=/usr/local/nginx
    ExecStart=/usr/local/nginx/sbin/nginx
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    ExecStop=/usr/local/nginx/sbin/nginx -s quit
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    
    1. 保存服务脚本后,可以通过如下命令管理 Nginx 服务。
    $ systemctl start nginx
    $ systemctl reload nginx
    $ systemctl stop nginx
    
    1. 使用如下命令设置 Nginx 服务开机启动。
    $ systemctl enable nginx
    
    1. 查看 Nginx 服务是否已经开机启动。
    $ systemctl list-unit-files | grep nginx
    

    提示:

    可以使用以下命令查看服务的启动状态。

    $ systemctl status nginx.service
    

    如果修改了 .service 服务脚本,需要执行如下命令重新加载服务脚本,修改才会生效。

    $ systemctl daemon-reload
    

    禁止服务开机启动。

    $ systemctl disable nginx.service
    

    安装 PHP

    安装依赖包

    $ yum install libxml2-devel openssl-devel curl-devel libjpeg-devel freetype-devel libpng-devel sqlite-devel
    

    以下两个依赖是 php 7.4.x 版本需要的。

    $ yum install https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/o/oniguruma-6.8.2-1.el7.x86_64.rpm
    $ yum install https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/o/oniguruma-devel-6.8.2-1.el7.x86_64.rpm
    

    获取 PHP 源代码

    官网下载地址如下。

    https://www.php.net/downloads.php

    可以手动下载源代码包,也可以使用 wget 下载,使用 wget 下载命令如下。

    $ wget https://www.php.net/distributions/php-7.4.16.tar.gz
    

    PHP 的编译安装

    $ tar -zxvf php-7.4.16.tar.gz
    $ cd php-7.4.16
    $ ./configure --prefix=/usr/local/php --enable-zip --enable-mbstring --enable-fpm --enable-bcmath --enable-opcache --with-zlib --with-mysqli --with-pdo-mysql --with-openssl --with-mhash --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-curl
    $ make && make install
    

    上面的命令有些选项的前缀是 enable,有些是 with,其区别在于 enable 选项用于开启 PHP 的一些内置功能,而 with 选项依赖于系统中的共享库,如果系统中没有则需要安装相应的依赖包。

    注意:

    如果出现 unrecognized options: --enable-zip, --with-gd, --with-jpeg-dir, --with-png-dir, --with-freetype-dir 类似的提示(php 8.x 版本会报),使用 ./configure --help 查看一下正确的写法。因为每个版本的 php 这些选项 with 或 enable 都不太一样。

    简单使用 PHP

    安装完成后,可以使用 /usr/local/php/bin 目录的 php 执行 PHP 文件或代码。示例如下。

    $ cd /usr/local/php/bin
    $ ./php -r 'echo 8*40, "
    ";'
    320
    

    建立软连接

    为了方便使用 php 命令,可以将 php 程序链接到 /usr/local/bin 目录中。

    $ ln -s /usr/local/php/bin/php /usr/local/bin/php
    

    配置 Nginx 解析 PHP

    创建配置文件

    对于 Nginx 而言,PHP 是一个外部程序,若想要 Nginx 能够解析 PHP,需要用到 FastCGI。FastCGI 是 Web 服务器与外部程序之间的接口标准。PHP 提供的 PHP-FPM (FastCGI Process Manager)就是一个 FastCGI 进程管理器,在使用 PHP-FPM 管理 PHP 之前,需要先创建配置文件。操作如下。

    # 创建 PHP-FPM 的配置文件
    $ cd /usr/local/php/etc
    $ cp php-fpm.conf.default php-fpm.conf
    $ cp php-fpm.d/www.conf.default php-fpm.d/www.conf
    # 创建 PHP 的配置文件
    $ cd ~/php-7.4.16
    $ cp php.ini-development /usr/local/php/lib/php.ini
    

    管理 PHP-FPM 服务

    PHP-FPM 的可执行文件位于 PHP 安装目录下的 sbin 目录下,虽然执行 sbin 目录下的 php-fpm 可以启动 PHP-FPM,但此方式比较麻烦,PHP 解压后的源码包提供了 service 方式管理 PHP-FPM 的 shell 脚本,将此脚本复制到系统目录中,通过实现开机启动。具体操作如下。

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

    添加以下内容。

    [Unit]
    Description=The PHP FastCGI Process Manager
    After=network.target
    
    [Service]
    Type=forking
    ExecStart=/usr/local/php/sbin/php-fpm
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    

    添加到开机启动项。

    $ systemctl enable php-fpm
    

    然后就可以通过 systemctl 方式管理 PHP-FPM 了。

    $ systemctl start php-fpm
    $ systemctl reload php-fpm
    $ systemctl restart php-fpm
    $ systemctl stop php-fpm
    

    在启动 PHP-FPM 后,可使用 ps aux | grep php 查看程序的主进程用户是 root,子进程工作于 nobody 用户;利用 ss -tlnp | grep php 可查看 PHP-FPM 监听的端口,默认端口号是9000。

    在 Nginx 配置文件中添加对 PHP 的支持

    打开 Nginx 配置文件

    $ cd /usr/local/nginx/conf
    $ vi nginx.conf
    

    在打开的配置文件的 http 块的节结束位置大括号前添加以下配置。

    http {
    	# ……(原有代码)
        include vhost/*.conf;       #用于加载 vhost 目录下的所有配置文件
    }
    

    创建 vhost 目录,并在 vhost 目录中配置一个虚拟主机。

    $ mkdir vhost
    $ vi vhost/192.168.245.132.conf
    

    添加以下内容。

    server {
        listen 80;
        server_name 192.168.245.132;   
        root html;
        index index.html index.php;
        location ~ .php$ {
            try_files $uri = 404;
            fastcgi_pass 127.0.0.1:9000;
            include fastcgi.conf;
        }
    }
    

    上面的配置中各项说明。

    • listen 指定 Nginx 服务器监听的端口号。
    • server_name 用于设置主机域名。
    • root 用于设置主机站点根目录路径。
    • index 指定默认索引文件。
    • location 用于匹配路径以 “.php” 结尾的请求,将这些请求发送给监听本机(127.0.0.1)9000端口的 FastCGI 程序(即 PHP)。
    • try_files 指令用来检测文件是否存在,如不存在则 Nginx 会优先返回 404 页面,并且不会发送给 PHP 执行。
    • include fast.conf 用于引入 FastCGI 的环境变量配置。

    完成以上操作,执行 systemctl reload nginx 命令使配置生效,或者重启系统。

    访问测试

    在 Nginx 的站点根目录中创建一个 test.php 文件,用于输出 phpinfo 信息。

    $ cd /usr/local/nginx/html
    $ echo '<?php phpinfo();' > test.php
    

    然后通过浏览器访问 http://192.168.245.132/test.php (前面在虚拟主机配置中配置的主机),如果能够看到 PHP 的配置信息页面,说明配置成功。

    安装 MySQL

    安装编译工具和依赖包

    $ yum install gcc-c++ cmake ncurses-devel
    
    

    安装 CMake 3

    MySQL 8.x 版本需要使用到 CMake3,而使用 yum 安装的 cmake 是 2.x 版本,因此需要自己下载 CMake 源码进行安装。

    CMake 官网链接如下。

    https://cmake.org/download/

    安装步骤如下。

    # 解压 CMake 源码
    $ tar -zxvf cmake-3.20.0.tar.gz
    
    # 编译安装
    $ cd cmake-3.20.0
    $ ./bootstrap
    $ gmake
    $ gmake install
    
    # 卸载老版本 CMake
    $ yum remove cmake
    
    # 为新版本 CMake 创建软连接
    $ ln -s /usr/local/bin/cmake /usr/bin/cmake
    
    # 查看版本
    $ cmake --version
    cmake version 3.20.0
    
    CMake suite maintained and supported by Kitware (kitware.com/cmake).
    

    获取 MySQL 的源代码

    在 MySQL 官网上提供了其源代码的下载,地址如下。

    https://downloads.mysql.com/archives/community/

    MySQL 提供了两种版本的源代码,文件名分别为 mysql-8.0.22.tar.gz 和 mysql-boost-8.0.22.tar.gz,且别是后者的版本包含了 Boost 头文件,而前者不包含。为了方便,此处选择 mysql-boost-8.0.22.tar.gz。

    可以手动进行下载,也可以使用 wget 进行下载,使用 wget 下载方式如下。

    $ wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-8.0.22.tar.gz
    

    编译安装

    编译安装 MySQL 共分为两步:第 1 步是执行 cmake 生成 Makefile 文件,第 2 步是执行 make 命令编译。具体操作如下。

    # 解压源码
    $ tar -zxvf mysql-boost-8.0.22.tar.gz
    $ cd mysql-8.0.22
    $ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DWITH_BOOST=boost -DWITH_SYSTEMD=1 -DMYSQL_DATADIR=/var/lib/mysql -DMYSQLX_UNIX_ADDR=/tmp/mysql.sock -DSYSTEMD_PID_DIR=/var/lib/mysql
    $ make && make install
    

    注意:

    解决 GCC 5.3 or newer is required (-dumpversion says 4.8.5) 的问题

    # 安装软件集成包,这里面能够找到新版的 gcc
    $ yum install centos-release-scl scl-utils-build
    # 安装 gcc、g++
    $ yum install devtoolset-9-gcc devtoolset-9-gcc-c++
    # 切换为 scl 的 bash
    $ scl enable devtoolset-9 bash
    

    然后删除原来解压的 MySQL 源码包,重新解压,重新编译安装即可,如果还是不行的话卸载原来的 gcc、gcc-c++,即执行以下命令。

    $ yum remove gcc gcc-c++
    

    然后再重新使用 devtoolset-9 的 bash 模式(此模式不是永久的,每次重启后会自动变为正常模式的 bash,因此需要使用的时候需要再使用 scl enable 命令开启)重新进行编译安装的全部步骤。

    另一个注意:

    编译安装比较耗时,虚拟机需要编译很久,需要耐心等待,建议使用 -j 设置多一点编译线程数。中途可以使用 Ctrl + C 中断编译,想要继续编译的时候,再次使用 make && make install 命令即可,会接着上次没编译完的继续编译。

    创建配置文件

    # 备份 CentOS 系统自带的配置文件
    $ mv /etc/my.cnf /etc/my.cnf.bak
    $ vi /etc/my.cnf
    

    添加以下内容。

    [mysqld]
    port=3306
    log-error=/var/lib/mysql/mysqld.log
    symbolic-links=0
    user=mysql
    

    其中各配置项用途。

    • port 表示端口。
    • log-error 表示错误日志路径。
    • symbolic-links 设为 0 表示禁用符号链接。
    • user 表示 MySQL 的工作用户。

    在 Linux 中,禁用符号链接,为 MySQL 指定一个专门的用户(而不是使用 root 用户),都是为了提高安全性。

    下面创建 mysql 用户。

    # 创建 mysql 用户组和用户,并禁止登录
    $ groupadd mysql
    $ useradd -r -M -g mysql -s /bin/false mysql
    

    上述操作中各项意义如下。

    • groupadd 用于创建用户组。
    • useradd 用于创建用户。
    • useradd 的选项 -r 表示创建系统用户,-M 表示不创建用户目录,-g mysql 表示加入 mysql 用户组, -s /bin/false 表示禁止登录。

    初始化数据库

    # 切换至 mysql 安装目录
    $ cd /usr/local/mysql
    # 初始化数据库
    $ ./bin/mysqld --initialize-insecure
    # 查看初始化后的文件
    $ ls /var/lib/mysql
    

    管理 MySQL 服务

    将 MySQL 提供的 mysqld.service 服务脚本复制到 CentOS 的 systemd 目录中,就可以使用 systemctl 命令来管理 MySQL 服务。

    $ cp ~/mysql-8.0.22/scripts/mysqld.service /usr/lib/systemd/system/
    $ systemctl enable mysqld
    

    登录 MySQL 设置 root 用户密码

    在 MySQL 服务启动后,使用客户端工具登录 MySQL,具体操作如下。

    # 切换到 MySQL 客户端工具所在目录
    $ cd /usr/local/mysql/bin
    # 运行客户端程序,登录 MySQL
    $ ./mysql -uroot
    # 设置 root 用户的密码为 root
    > ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
    # 退出客户端程序
    > exit
    

    为了方便的在任意目录使用 mysql 命令,在 /usr/local/bin 目录中创建一个软链接。

    $ ln -s `pwd`/mysql /usr/local/bin/mysql
    # 或者
    $ ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql
    
  • 相关阅读:
    回到原点 重新感受01背包的魅力 ZerOnePack
    中等·Magry摆什锦糖 buaacoding DP 动态规划
    树形DP初步-真树 buaacoding
    二叉树的最长链长度—DFS buaacoding 树形DP初步-二叉树
    至多可以交易k次的股票交易 (c++)
    至多只能交易两次的股票交易 最大值
    Leetcode 股票交易(c++)
    Android四大组件之—— BroadcastReceiver的使用
    Android四大组件之—— 使用服务进行后台操作
    使用ContentProvider进行应用程序间的数据交互
  • 原文地址:https://www.cnblogs.com/QingXiaxu/p/14609606.html
Copyright © 2011-2022 走看看