一、LNMP
1. LNMP概述
LNMP是一种常见的网站服务器架构,包括Linux、Nginx、MySQL、PHP。
- Linux:操作系统,提供系统环境。
- Nginx:网站的前端页面,将客户端请求转发给后端服务。
- PHP:处理网站的动态请求,与数据库交互。
- MySQL:存储和管理数据。
二、论坛部署
1. 部署Nginx服务
-
关闭系统的防火墙开机自启动,以免其他网络无法访问相关程序。非必要步骤。
ufw disable
-
安装程序的依赖环境。
apt -y install libpcre3-dev zlib1g-dev libssl-dev build-essential
-
libpcre3-dev:这是 Perl 兼容正则表达式库(PCRE)的开发包。提供了开发库和头文件,用于在其他程序中使用 PCRE 库。
-
zlib1g-dev:这是 zlib 库的开发包。提供了开发库和头文件,用于在其他程序中使用 zlib 进行数据压缩和解压缩。
-
libssl-dev:这是 OpenSSL 库的开发包。提供了开发库和头文件,用于在其他程序中使用 OpenSSL 进行安全通信。
-
build-essential:这是一个元包,它自动安装编译 C 和 C++ 程序所需的基本工具和库,包括 gcc(GNU 编译器集合)、g++(GNU C++ 编译器)、make(构建工具)等。
-
-
创建程序的执行用户。
useradd -M -s /sbin/nologin nginx
- -M:不创建用户的家目录。
- -s:设置用户的登录 shell。/sbin/nologin是一个特殊的shell,禁止用户登录。通常用于不需要交互式登录,只用于运行特定服务的用户。
- nginx:创建的用户名。
-
软件包解压缩。
tar -xf nginx-1.22.0.tar.gz
-
进入软件源码包,执行configure文件,配置程序的安装路径和执行用户,以及启动的组件。
./configure --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_realip_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-pcre \ --with-stream \ --with-stream_ssl_module \ --with-stream_realip_module
-
编译并安装。
make && make install
-
创建软链接,便于直接使用nginx命令来调用Nginx程序。
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
-
在安装目录下创建一个run目录,用于存放Nginx程序的PID文件。并修改安装目录的所有者和所有组。
mkdir /usr/local/nginx/runchown -R nginx.nginx /usr/local/nginx
-
进入Nginx程序安装目录下的配置目录conf,修改配置文件nginx.conf,设置Nginx程序PID文件的位置。
pid /usr/local/nginx/run/nginx.pid;
保存退出后,可执行下面的命令,查看配置是否存在问题。
nginx -t
-
编写Nginx程序的系统服务。
vim /lib/systemd/system/nginx.service
在文件中写入以下内容:
[Unit] Description=nginx - high performance web server Documentation=http://nginx.org/en/docs/ After=network-online.target remote-fs.target nss-lookup.target Wants=network-online.target [Service] Type=forking PIDFile=/usr/local/nginx/run/nginx.pid #注意文件位置,如果不对 启动不了 ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf #注意启动文件位置 ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s TERM $MAINPID [Install] WantedBy=multi-user.target
-
启动Nginx服务。
# 配置完服务文件后,重新加载系统服务 systemctl daemon-reload# 设置Nginx服务开机自启动 systemctl enable nginx# 启动Nginx服务 systemctl start nginx # restart是重启
-
查看Nginx程序的PID。
netstat -anutp | grep nginx
-
在本机浏览器中访问虚拟机的Nginx服务,IP为虚拟机的IP地址,端口为80,可不写。还可以编辑Nginx安装目录下html目录中的index.html文件,自定义页面显示内容。
2. 部署MySQL服务
-
创建程序的执行用户。
useradd -M -s /sbin/nologin mysql
-
解压安装包,这里使用的是免编译安装版本。
tar -xf mysql-8.0.30-el7-x86_64.tar.gzmv mysql-8.0.30-el7-x86_64 /usr/local/mysql
-
设置MySQL目录的所属用户和所属组。
chown -R mysql.mysql /usr/local/mysql
-
下载安装所需的依赖。
apt -y install libaio1 libncurses5
-
编辑MySQL的配置文件/etc/my.cnf。
[client] port = 3306 socket=/usr/local/mysql/mysql.sock[mysqld] user = mysql basedir=/usr/local/mysql datadir=/usr/local/mysql/data port = 3306 character-set-server=utf8 pid-file = /usr/local/mysql/mysqld.pid socket=/usr/local/mysql/mysql.sock bind-address = 0.0.0.0 skip-name-resolve max_connections=2048 default-storage-engine=INNODB max_allowed_packet=16M server-id = 1 sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
-
修改配置文件的所有者和所属组。
chown mysql.mysql /etc/my.cnf
-
向/etc/profile文件追加MySQL的环境变量,并刷新。
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile source /etc/profile
-
进入MySQL的bin目录,执行下面命令实现MySQL服务的初始化。
./mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
-
将MySQL目录下的启动脚本复制到系统的服务管理目录/etc/init.d/下,并设置脚本的执行权限。
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqldchmod +x /etc/init.d/mysqldsystemctl daemon-reload
-
开启MySQL服务,设置MySQL服务的root用户密码。
systemctl start mysqldmysqladmin -u root -p password "123456"
-
登录MySQL终端,修改root用户的远程访问权限。
update mysql.user set host="%" where user="root";flush privileges;
3. 部署PHP服务
-
下载安装所需要的依赖。
apt-get install -y libgd-dev libjpeg8-dev libpng-dev libfreetype6-dev libxml2-dev zlib1g-dev libcurl4-openssl-dev libssl-dev libonig-dev libsqlite3-dev
-
解压安装包。
tar -xf php-8.1.27.tar.gz
-
进入源码目录,执行下面命令进行安装配置。
./configure --prefix=/usr/local/php --with-mysql-sock=/usr/local/mysql/mysql.sock --with-mysqli --with-zlib --with-curl --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-pdo-mysql --with-openssl --with-sqlite-devel --with-oniguruma-devel --enable-fpm --enable-mbstring --enable-xml --enable-session --enable-ftp --enable-pdo --enable-tokenizer --enable-zip
-
编译PHP源码,并安装服务。
make && make install
-
创建PHP命令的软链接。
ln -s /usr/local/php/bin/* /usr/local/bin/ ln -s /usr/local/php/sbin/* /usr/local/bin/
-
复制源码目录中的环境配置文件到PHP安装目录中。
cp /opt/software/php-8.1.27/php.ini-development /usr/local/php/lib/php.ini
-
编辑环境配置文件,设置时区和MySQL的socket文件路径。
date.timezone = Asia/Shanghaimysqli.default_socket = /usr/local/mysql/mysql.sock
-
复制PHP配置文件模板。
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
-
编辑配置文件php-fpm.conf,设置pid文件和错误日志的存放位置。
pid = /var/log/php-fpm.piderror_log = /var/log/php-fpm.log
-
复制PHP的扩展配置文件模板。
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
-
编辑www.conf配置文件,设置用户和用户组。
user = nginx group = nginx
- 跳过本步骤,在后续的PHP启动时,有一定概率会报错。
-
复制源码包中的PHP的服务文件到系统的服务文件目录下。
cp /opt/software/php-8.1.27/sapi/fpm/php-fpm.service /usr/lib/systemd/system/php-fpm.servicesystemctl daemon-reload
-
启动PHP服务。
systemctl start php-fpm.service systemctl status php-fpm.service
-
编辑Nginx服务的配置文件,新增一个location模块配置动态请求的转发。
location / {root /var/www/html;index index.html index.htm; }location ~ \.php$ {root /var/www/html;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params; }
-
检查Nginx配置语法,并重启Nginx服务。
nginx -t systemctl restart nginx
-
在指定的/var/www/html下编写一个index.php文件,测试Nginx是否能够正确解析到PHP文件,以及PHP是否能够正常连接MySQL。
<?php $link=mysqli_connect('192.168.1.128','root','123456'); if($link) echo "<h1>Success!!</h1>"; else echo "Fail!!"; ?>
-
在浏览器访问192.168.1.128/index.php页面。
4. 部署Discuz论坛
-
解压论坛软件安装包。
unzip Discuz_X3.5_SC_UTF8.zip -d /opt/software/dis
-
复制论坛安装目录中的upload目录到/var/www/html目录下。
cp -r /opt/software/dis /var/www/html/bbs
-
设置bbs目录的权限和所有者、所属组。
chmod -R 777 /var/www/html/bbs chown -R nginx.nginx /var/www/html/bbs
-
登录MySQL终端,创建论坛的数据库。
CREATE DATABASE bbs;CREATE USER 'bbsuser'@'%' IDENTIFIED BY 'admin123'; GRANT ALL PRIVILEGES ON bbs.* TO 'bbsuser'@'%'; FLUSH PRIVILEGES;CREATE USER 'bbsuser'@'localhost' IDENTIFIED BY 'admin123'; GRANT ALL PRIVILEGES ON bbs.* TO 'bbsuser'@'localhost'; FLUSH PRIVILEGES;
-
在浏览器端访问192.168.1.128/bbs/install/index.php页面,根据配置论坛的服务器IP地址,以及论坛数据库配置。配置完成后,等待安装下载。完成安装,就可以访问192.168.1.128/bbs/index/php进入论坛。