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 开机启动
- 创建服务脚本。
$ vi /usr/lib/systemd/system/nginx.service
- 在服务脚本中编写如下内容。
[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
- 保存服务脚本后,可以通过如下命令管理 Nginx 服务。
$ systemctl start nginx
$ systemctl reload nginx
$ systemctl stop nginx
- 使用如下命令设置 Nginx 服务开机启动。
$ systemctl enable nginx
- 查看 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 官网链接如下。
安装步骤如下。
# 解压 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