【LNMP】网站架构分布式部署

一、安装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
相关推荐
Liquad Li4 分钟前
UML(统一建模语言)详解
架构·uml
风飘百里43 分钟前
Go语言DDD架构的务实之路
后端·架构
设计师小聂!1 小时前
RabbitMQ详解
java·spring boot·分布式·rabbitmq·maven
猿java2 小时前
Feign如何实现负载均衡?它和Ribbon有什么关系?
面试·架构·负载均衡
猿java2 小时前
为什么服务设计需要考虑限流?
java·面试·架构
货拉拉技术3 小时前
货拉拉安全治理中台化的落地之路
后端·架构
斯普信专业组3 小时前
Caddy + CoreDNS 深度解析:从功能架构到性能优化实践(上)
性能优化·架构·kubernetes·coredns
洗荡千万春3 小时前
如果让项目使用自定义的maven版本去构建——maven wrapper
java·架构·github
无线认证x英利检测4 小时前
科普 | 5G支持的WWC架构是个啥(1)?
5g·架构
挖坑的张师傅4 小时前
基于 Rust 的高性能 S3 over NFS 系统设计
后端·架构