lnmp
l:linux操作系统
n:nginx前端页面
m:mysql数据库,账号密码等等都是保存在这个数据库里面
p:php------nginx擅长处理的是静态页面,页面登录账户,需要请求到数据库,通过php把动态请求转发数据库
搭建Discuz论坛
1、编译安装数据库mysql
安装依赖源
c
apt install -y libaio1 libncurses5
将mysql的源代码包放置到/opt的目录下,然后解压mysql源代码包,将解压好的mysql移到/usr/local/目录下
c
tar -xf mysql-8.0.30-el7-x86_64.tar.gz
mv mysql-8.0.30-el7-x86_64 /usr/local/mysql
创建用户并修改mysql的所属者和所属组为mysql
c
useradd -s /usr/sbin/nologin mysql
chown -R mysql.mysql mysql/
修改mysql的主配置文件,并修改其的所属者和所属组
c
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_D IVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
保存退出
chown mysql.mysql /etc/my.cnf
配置环境变量
c
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
初始化数据库,并给/etc/init.d/mysqld赋权
c
cd /usr/local/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 mysql
#查看数据库的端口是否开启
netstat -antp | grep 3306
初始化数据库密码
c
mysqladmin -u root -p password "123456"
#测试数据库是否完成
mysql -u root -p123456
create user 'root'@'%' identified by '123456';
grant all privileges on *.* to 'root'@'%';
flush privileges;
alter user 'root'@'%' identified with mysql _native_password by '123456';
2、php
安装php的依赖环境
将php的源码包放到/opt目录下,并将其解压
c
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
创建用户
c
groupadd nobody
编译安装
c
编译
./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
建立软链接
cpp
ln -s /usr/local/php/bin/* /usr/local/bin/
ln -s /usr/local/php/sbin/* /usr/local/sbin/
php有三个配置文件
php.ini:主配置文件
php-fpm.conf:进程服务端的配置文件
www.conf:扩展配置文件
php.ini:主配置文件
cpp
#从php源码包中复制主配置文件到指定目录
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:进程服务端的配置文件
c
cd /usr/local/php/etc/
#把 php-fpm.conf.default重命名php-fpm.conf
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.pid
www.conf:扩展配置文件
c
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
#启动
/usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini
#把系统管理文件复制到指定目录
cp php-fpm.service /usr/lib/systemd/system/php-fpm.service
3、nginx的配置
c
修改nginx的配置文件
vim /usr/local/nginx/conf/nginx.conf
loction / {
root /var/www/html;
index index.html;
}
location ~ \.php$ {
#locatioan的正则匹配
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_script_name/bbs/install/index.php
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#$document_root,nginx访问的默认的路径/usr/local/nginx/html/bbs/install/index.php,变量赋值,传给php
include fastcgi_params;
#使用include指令,把fastcgi_param的配置合并到一起
}
#重启nginx
systemctl restart nginx
创建数据库
c
mysql -u root -p123456
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;
创建网页文件
c
cd /usr/local/nginx/html
vim index.php
<?php
$link=mysqli_connect('192.168.233.61','bbsuser','admin123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
?>
4、搭建论坛discuz
将discuz源码包放到/opt目录下,并将其解压到dis目录下
c
unzip Discuz_X3.5_SC_UTF8.zip -d /opt/dis/
创建目录
c
mkdir -p /var/www/html
#拷贝文件到数据
cp -r upload/ /var/www/html/bbs/
cd /var/www/html/bbs/config
cp config_global_default.php config_global.php
cp config_ucenter_default.php config_ucenter.php
#修改所属者和所属组
chmod -R 777 bbs/
chown -R nginx.nginx bbs/
nginx的优化
1、隐藏版本号
第一种:通用方法编译,apt,yum都可以使用
c
vim nginx.conf
在http模块
http {
server_tokens off;
}
第二种(仅限于编译安装)
c
vim /opt/nginx-1.22.0/src/core/nignx.h
第13行和14行可以改成xy104和xy105
cd /opt/nginx-1.22.0
./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 -j 4 && make install
vim /usr/local/nignx/conf/nginx.conf
http {
server_tokens on;
}
systemctl restart nginx
2、日志分割
nginx本身没有设计日志分割的工具,是由运维人员自己进行处理和分割
使用shell脚本实现日志分割
c
vim /opt/nginxlogs.sh
#!/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 ${logs_error} ${dir}/error_${d}.log
kill -USR1 $(cat ${pid_file})
#-USR1,通过发送USR1这个信号,给nginx的主进程,让nginx重新生成access.log和error.log
#日志清理,清理30天以前的日志
find $dir -mtime +30 -exec rm -rf {} \;