Ubuntu编译安装lnmp+discuz论坛
- 什么是Inmp
- nginx
-
- 第一步:安装依赖环境
- 第二步:创建用户
- [第三步: 安装到指定的路径](#第三步: 安装到指定的路径)
- 第四步:安装完成之后对程序进行配置(权限,控制)
- mysql数据库
- php
- discuz论坛
- nginx的优化
-
- [1. 隐藏版本号](#1. 隐藏版本号)
- [2. nginx的日志分割](#2. nginx的日志分割)
什么是Inmp
l:linux 操作系统
n:nginx前端页面
m:mysql数据库 账号密码,等等都是保存在这个数据库里面
p:php-------nginx擅长处理的是静态页面,页面登录账户,需要请求到数据库,通过php把动态请求转发数据库
nginx
第一步:安装依赖环境
csharp
tar -xf nginx-1.22.0.tar.gz #解包
apt -y install libpcre3-dev zlib1g-dey libssl-dey build-essential #安装依赖环境
第二步:创建用户
csharp
useradd -M -s /sbin/nologin nginx
-M:只创建用户,不创建家目录
-s:指定创建用户的登录shell,禁止该用户登录系统nginx 用户名nginx
第三步: 安装到指定的路径
csharp
cd nginx-1.22.0/ #cd到解压文件夹下
ll #查看是否存在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
第四步:安装完成之后对程序进行配置(权限,控制)
csharp
make -j 4 && make install #使用 4 个线程(或进程)来并行编译源代码可以显著加快编译速度让系统识别nginx的操作命令
ln -s /usr/local/nginx/sbin/nginx /usr/bin/ #让系统识别nginx的操作命令
cd /usr/local/
ll
总计 44
...
drwxr-xr-x 6 root root 4096 12月 5 14:09 nginx/ #查看nginx文件与所需的所有者和所在不同
...
root@u1:/usr/local# chown -R nginx.nginx nginx/ #修改nginx安装目录的所有者和所在组
cd nginx/ #进入nginx文件夹里
mkdir run #创建一个新的文件
ll
总计 28
...
drwxr-xr-x 2 root root 4096 10月 29 11:38 run/
...
root@du123:/usr/local/nginx# chown nginx.nginx run/ #修改run安装目录的所有者和所在
cd /usr/local/nginx/conf
ll
总计 76
...
-rw-r--r-- 1 nginx nginx 2656 12月 9 14:50 nginx.conf
...
vim nginx.conf
pid /usr/local/nginx/run/nginx.pid #将pid那一行修改即可
:wq!
nginx -t #检查配置文件的语法是否正确,出现下方英文即为正确
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
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
systemctl daemon-reload #使更改生效
systemctl restart nginx #重新启动
mysql数据库
csharp
tar -xf mysql-8.0.30-el7-x86_64.tar.gz #解压安装包
mv mysql-8.0.30-el7-x86_64 /usr/local/mysql
useradd -s /sbin/nologin mysql #创建用户
chmod mysql.mysql -R /usr/local/mysql/ #设置所有者所在用户都为mysql
apt install -y libaio1 libncurses5 #安装环境
修改主配置文件my.cnf
my.cnf:mysql的主配置文件
csharp
vim /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
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
对数据库进行初始化
csharp
cd /mysql/bin
#命令行输入并回车
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
cd /usr/local/mysql/support-files/
cp mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld #使其变为可执行
systemctl daemon-reload
systemctl restart mysqld
netstat -antp | grep 3306 #查看端口是否启动
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 3764/mysqld
tcp6 0 0 :::33060 :::* LISTEN 3764/mysqld
mysqladmin -u root -p password "123456" #修改 MySQL 数据库的 root 用户密码
Enter password: #出现这段直接回车
mysql -u root -p123456 #进入root用户
mysql> #正确进入会出现这个开头
mysql> create user 'root'@'%' identified by '123456';
mysql> grant all privileges on
*.* to 'root'@'%';
mysql> flush privileges;
mysql> alter user 'root'@'%'identified with mysql native password by '123456';
mysql> exit
php
php.ini:主配置文件
php-fpm.conf:进程服务端的配置文件
www.conf:扩展配置文件
php-fpm:是一个fastcgi的管理工具,nginx的动态请求实际上是由php-fpm来处理
csharp
tar -xf php-8.1.27.tar.gz
#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
groupadd nobody #创建nobody组
cd php-8.1.27
#命令行输入
./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
make -j 4 && make install
ln -s /usr/local/php/bin* /usr/local/bin/
ln -s /usr/local/php/sbin* /usr/local/sbin/
php.ini
csharp
cp php.ini-development /usr/local/php/lib/php.ini
vim /usr/local/php/lib/php.ini
976行
date.timezone = Asia/Shanghai
1181行
mysqli.default socket =/usr/local/mysql/mysql.sock
php-fpm.conf
csharp
cd /usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf
17行
pid = /var/log/php-fpm.pid
24行
error_log = /var/log/php-fpm.log
www.conf
csharp
cd /usr/local/php/etc/php-fpm.d
cp www.conf.default www.conf
启动
csharp
/usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini
netstat -antp | grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 112970/php-fpm: mas
cd /opt/php-8.1.27/sapi/fpm/
cp php-fpm.service /usr/lib/systemd/system/php-fpm.service
systemctl restart php-fpm.service
discuz论坛
csharp
cd /usr/local/nginx/conf/
cp nginx.conf nginx.conf.bark.2024.12.9
vim nginx.conf
#修改location并添加location
location / {
root /var/www/html;
index index.html index.htm;
}
location ~ \.php$ {
#localtion的正则匹配
root /var/www/html;
fastcgi_pass 127.0.0.1:9000;
#指定转发动态请求的地址
fastcgi_index index.php;
#指定处理动态请求的文件和后缀名
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
#表示当前请求的脚本路径,$fastcgi_script_name/bbs/install/index.php
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#$document root,nginx访问的默认的路径/var/www/html/bbs/install/index.php,变>量赋值,传给php
include fastcgi_params;
#使用include指令,把fastcgi_param的配置合并到一起
}
csharp
mysql -u root -p123456
#添加bbsuser用户
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;
cd /usr/local/nginx/html/
vim index.php
<?php
$link=mysqli_connect('192.168.246.6','bbsuser','admin123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
?>
浏览器访问192.168.246.6/index.php
csharp
unzip Discuz_X3.5_SC_UTF8.zip -d /opt/dis
cd dis/
cp -r upload/ /var/www/html/bbs
cd /var/www/html/
chmod 777 -R bbs/
chown nginx.nginx -R bbs/
192.168.246.6/bbs/index.php
nginx的优化
1. 隐藏版本号
csharp
vim /usr/local/nginx/conf/nginx.conf
#在http中添加
server_token off;
通用方法编译,apt yum都可以使用,只是影藏版本,服务名称还在
修改源码文件:仅限于编译安装
csharp
usr/src/core/nginx.h
2. nginx的日志分割
使用shell脚本实现日志分割
(nginx本身没有设计日志分割的工具,需要自己进行处理和分割。)
csharp
#!/bin/bash
d=$(date +%Y-%m-%d)
#直接获取当前的日期
dir="/usr/local/nginx/logs"
#获取日志目录所在的位置
logs_access='/usr/local/nginx/logs/access.log'
logs_error='/usr/local/nginx/logs/error.log'
#定义需要分割的日志分件
pid_file='/usr/local/nginx/run/nginx.pid'
#定义pid分件的位置
if [ ! -d "$dir" ]
then
mkdir -p $dir
fi
mv ${logs_access} ${dir}/access_${d}.log
#mv /usr/local/nginx/logs/access.log /usr/local/nginx/logs/access_2024-12-09.log
mv ${logs_error} ${dir}/error_${d}.log
#mv /usr/local/nginx/logs/error.log /usr/local/nginx/logs/error_2024-12-09.log
kill -USR1 $(cat ${pid_file})
#-USR1,通过发送USR1这个信号,给nginx的主进程,让nginx重新生成acces.log和error.log
#日志清理. 清理30天以前的日志
find $dir -mtime +30 -exec rm -rf {} \;