一、安装Nginx服务
1、关闭防火墙,将安装nginx所需软件包传到/opt目录下
systemctl stop ufw
systemctl disable ufw
apt update
apt install -y lrzsz
2、安装依赖包
nginx的配置及运行需要pcre、zlib、openssl等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。
build-essential: 包含编译工具如gcc、make等。
libpcre3-dev: 用于正则表达式支持。
zlib1g-dev: 用于压缩功能。
libssl-dev: 提供SSL支持。
apt -y install libpcre3-dev zlib1g-dev libssl-dev build-essential
3、创建运行用户、组
Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限
useradd -M -s /sbin/nologin nginx
4、编译安装Nginx
cd /opt
tar zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0/
./configure --prefix=/usr/local/nginx \
--user=nginx --group=nginx \
--with-http_gzip_static_module \
--with-http_flv_module \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_v2_module \
--with-http_sub_module \
--with-http_mp4_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
---------------------------------------------------------------------------------------
--prefix=/usr/local/nginx
--user=nginx 和 --group=nginx #指定了运行Nginx进程的用户和组。在这种情况下,它将是用户和组 nginx。
--with-http_ssl_module #启用了对HTTP连接的SSL/TLS加密支持。
--with-http_v2_module #启用了对HTTP2.0协议的支持。
--with-http_realip_module #允许Nginx从X-Real-IP或X-Forwarded-For头部获取客户端的真实IP地址。
--with-http_stub_status_module #启用了 stub_status 模块,提供了访问Nginx状态信息的方法。
--with-http_gzip_static_module #启用了支持使用 .gz 扩展名提供预压缩文件的功能。
--with-pcre #启用了对Perl Compatible Regular Expressions(PCRE)库的支持。
--with-stream #启用了对TCP/UDP代理模块的支持。
--with-stream_ssl_module #启用了对TCP/UDP连接的SSL/TLS加密支持。
--with-stream_realip_module #允许Nginx从PROXY协议头部获取客户端的真实IP地址。
make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #让系统识别nginx的操作命令
chown -R nginx.nginx /usr/local/nginx
安装好后生成四个文件功能如下
conf:保存nginx所有的配置文件,其中nginx.conf是nginx服务器的最核心最主要的配置文件,其他的.conf文件则是用来配置nginx相关的功能的,例如fastcgi功能使用的是fastcgi.conf和fastcgi_params两个文件,配置文件一般都有个样板配置文件,是文件名.default结尾,使用的使用将其复制为并将default去掉即可。
html:保存了nginx服务器的web文件,但是可以更改为其他目录保存web文件,另外还有一个50x的web文件是默认的错误页面提示页面。
logs:保存nginx服务器的访问日志、错误日志等日志,logs目录可以放在其他路径,比如/var/logs/nginx里面。
sbin:保存nginx二进制启动脚本,可以接受不同的参数以实现不同的功能。
5、检查、启动、重启、停止 nginx服务
nginx -t #检查配置文件是否配置正确
启动
/usr/local/nginx/sbin/nginx
二、安装 MySQL 服务
1、上传二进制压缩包并解压
tar xf mysql-8.0.41-linux-glibc2.28-x86_64.tar.xz -C /opt/
mv /opt/mysql-8.0.41-linux-glibc2.28-x86_64 /usr/local/mysql
2、创建运行用户
useradd -M -s /sbin/nologin mysql
3、创建 mysql 配置文件
vim /etc/my.cnf
[client]
socket=/usr/local/mysql/mysql.sock
port = 3306
[mysql]
auto-rehash
prompt="\\u@\\h [\\d]> "
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port=3306
character-set-server=utf8mb4
pid-file=/usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip_name_resolve=1
max_connections=1000
default-storage-engine=INNODB
max_allowed_packet=32M
server-id=1
default_authentication_plugin=mysql_native_password
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT
4、更改mysql安装目录和配置文件的属主属组
chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf
5、设置路径环境变量
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile
6、初始化数据库
cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
7、添加mysqld系统服务
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
systemctl daemon-reload
systemctl start mysqld
systemctl enable mysqld
8、修改mysql 的登录密码
mysqladmin -u root password "abc123"
9、授权远程登录
mysql -u root -pabc123
#创建用户并设置密码:
mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'abc123';
#赋予远程连接的权限
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' with grant option;
#刷新生效
mysql> flush privileges;
三、安装配置 PHP 解析环境
1、安装环境依赖包
apt install -y libgd-dev libjpeg8-dev libpng-dev libfreetype6-dev libxml2-dev zlib1g-dev libcurl4-openssl-dev libssl-dev libonig-dev libsqlite3-dev
2、编译安装
cd /opt
tar xf php-8.3.16.tar.gz -C /opt/
cd /opt/php-8.3.16
./configure \
--prefix=/usr/local/php \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-mysqli \
--with-pdo-mysql \
--with-zlib \
--with-curl \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
#--prefix=/usr/local/php: 指定PHP的安装目录为/usr/local/php。
#--with-mysql-sock=/usr/local/mysql/mysql.sock: 指定MySQL的Unix socket文件路径,用于与MySQL数据库建立连接。
#--with-mysqli: 启用MySQLi扩展,用于支持MySQL数据库。
#--with-zlib: 启用Zlib库,用于压缩和解压缩数据。
#--with-curl: 启用cURL库,用于支持对URL的操作,如下载文件等。
#--with-openssl: 启用OpenSSL库,用于支持SSL加密和HTTPS协议。
#--enable-fpm: 启用PHP-FPM(FastCGI Process Manager),用于提供更高效的PHP进程管理和请求处理。
#--enable-mbstring: 启用多字节字符串支持,用于处理多字节字符集的操作。
#--enable-xml: 启用XML支持,用于处理XML文档和数据。
#--enable-session: 启用会话支持,用于在不同页面间保持用户会话状态。
#--enable-ftp: 启用FTP支持,用于对FTP服务器进行操作。
#--enable-pdo: 启用PDO(PHP Data Objects),用于支持数据库访问的统一接口。
#--enable-tokenizer: 启用Tokenizer扩展,用于对字符串进行分词处理。
make && make install
3、路径优化
chown -R nginx:nginx /usr/local/php
ln -s /usr/local/php/bin/* /usr/local/bin/
ln -s /usr/local/php/sbin/* /usr/local/sbin/
#验证命令
php -m
php --ini
4、调整PHP配置文件
php有三个配置文件:
php.ini php |
主配置文件 |
php-fpm.conf php-fpm | 进程服务配置文件 |
www.conf php-fpm | 扩展配置文件 |
#调整主配置文件:
cp /opt/php-8.3.16/php.ini-development /usr/local/php/lib/php.ini
vim /usr/local/php/lib/php.ini
--987行--取消注释,修改 date.timezone = Asia/Shanghai
--1196行--修改 mysqli.default_socket = /usr/local/mysql/mysql.sock
#调整进程服务配置文件:
cd /usr/local/php/etc/
cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf
--17行--去掉";"注释
pid = run/php-fpm.pid
#调整扩展配置文件:
cd /usr/local/php/etc/php-fpm.d/
cp www.conf.default www.conf
vim www.conf
--28行--修改
user = nginx
group = nginx
--41行--
listen = 127.0.0.1:9000
5、启动php-fpm
PHP-FPM(FastCGI Process Manager:FastCGI 进程管理器)是一个 PHPFastCGI 管理器, 由于Nginx服务器不能处理动态页面,需要由 Nginx 把动态请求交给 php-fpm 进程进行解析。
cd /opt/php-8.3.16/sapi/fpm cp php-fpm.service /usr/lib/systemd/system/php-fpm.service
vim /usr/lib/systemd/system/php-fpm.service ProtectSystem=false
#当这个值为true的时候,php-fpm进程将以只读的方式挂载 /usr 目录
systemctl daemon-reload
systemctl start php-fpm.service
systemctl enable php-fpm.service
ss -lnpt | grep 9000
6、配置 Nginx 支持 PHP 解析
vim /usr/local/nginx/conf/nginx.conf
location / {
root html;
index index.php index.html index.htm;
}
--65行--取消注释,修改
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name; #将 /scripts 修改为nginx的网页目录
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #$document_root 代表当前请求在root指令中指定的值
include fastcgi_params;
}
systemctl restart nginx.service
7、验证PHP 信息页
vim /usr/local/nginx/html/info.php
<?php
phpinfo();
?>
浏览器访问
http://本机IP/info.php
8、验证数据库工作是否正常
mysql -u root -p
CREATE DATABASE bbs;
create user 'bbsuser'@'localhost' identified by 'admin123';
create user 'bbsuser'@'%' identified by 'admin123';
GRANT all ON bbs.* TO 'bbsuser'@'%';
GRANT all ON bbs.* TO 'bbsuser'@'localhost';
flush privileges;
vim /usr/local/nginx/html/test.php #替换原来的测试页内容
<?php
$link=mysqli_connect('192.168.80.20','bbsuser','admin123');
if($link) echo "Success!!";
else echo "Fail!!";
?>
浏览器访问
http://本机地址/test.php
四、部署 Discuz!社区论坛 Web 应用
1、准备部署文件
cd /opt
apt install -y unzip
unzip Discuz_X3.5_SC_UTF8.zip -d /opt/bbs
cd /opt/dis/dir_SC_UTF8/config
cp config_global_default.php config_global.php
cp config_ucenter_default.php config_ucenter.php
cd /opt/bbs/dir_SC_UTF8/
cp -r upload/ /usr/local/nginx/html/bbs
2、调整论坛目录的权限
cd /usr/local/nginx/html/
chown -R nginx:nginx bbs/
论坛页面访问
http://本机IP地址/bbs/install/index.php
数据库服务器:localhost ###本地架设就用localhost或127.0.0.1,如果不是在本机上就要填写IP地址和端口号
数据库名字:bbs
数据库用户名:bbsuser
数据库密码:admin123
管理员账号:admin
管理员密码:admin123
访问论坛页面:
http://本机地址/bbs/index.php
http://本机地址/bbs/admin.php
fpm参数优化
Nginx的PHP解析功能实现如果是交由FPM处理的,为了提高PHP的处理速度,可对FPM模块进行参数的调整
根据服务器的内存与服务负载,调整FPM模块参数
vim /usr/local/php/etc/php-fpm.conf
pid = run/php-fpm.pid
vim /usr/local/php/etc/php-fpm.d/www.conf
--96行--
pm = dynamic #fpm进程启动方式,动态的
--107行--
pm.max_children=20 #fpm进程启动的最大进程数
--112行--
pm.start_servers = 5 #动态方式下启动时默认开启的进程数,在最小和最大之间
--117行--
pm.min_spare_servers = 2 #动态方式下最小空闲进程数
--122行--
pm.max_spare_servers = 8 #动态方式下最大空闲进程数
systemctl restart php-fpm.service
ps -elf | grep php-fpm