1、编译安装Nginx 1.15 安装及运行控制
试验环境: CentOS 7.6 Nginx 1.15 关闭防火墙、核心防护
2软件支持
Nginx的配置及运行需要pcre, zlib等软件包的支持,因此应预先安装这些软件的开发包
(devel) ,以便提供相应的库和头文件,确保 Nginx 的安装顺利完成
[root@localhost ~# yum -y install \
gcc \
gcc-c++ \
make \
pcre-devel \
expat-devel \
perl \
zlib-devel
创建运行用户、组
Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制
其访问权限,增加灵活性、降低安全风险。例如,创建一个名为nginx的用户,不建立宿主文件夹,
也禁止登录到Shell环境。-M 不让它创建家目录 -s 指定shell环境
[root@localhost ~]# useradd -M -s /sbin/nologin nginx
#有了指定用户之后,就可以在编译安装过程就可以 去指定 user和group
编译安装Nginx##
配置Nginx的编译选项时,将安装目录设为/usr/local/nginx,运行用户和组均设为nginx;
启用http_stub_status_module模块以支持状态统计,便于查看服务器的连接信息。
具体选项根据实际需要来定, 配置前可参考"./configure–help" 给出的说明.
上传nginx-1.15.9.tar.gz至/opt目录
[root@localhost ~]#cd /opt
[root@localhost opt]# tar xzvf nginx-1.15.9.tar.gz
[root@localhost opt]# cd nginx-1.15.9
[root@localhost nginx-1.15.9]#
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
[root@localhost nginx-1.15.9]# make && make instal
路径优化##
为了使 Nginx 服务器的运行更加方便, 可以为主程序 nginx 创建链接文件, 以便管理员
直接执行 “nginx” 命令就可以调用Nginx的主程序
[root@localhost nginx-1.15.9]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@localhost nginx-1.15.9]# ls -l /usr/local/sbin/nginx
Irwxrwxrwx 1 root root 27 2月 28 05:17 /usr/local/sbin/nginx -> /usr/local/nginx/sbin/nginx
添加 Nginx系统服务##
为了使Nginx服务的启动、停止、重载等操作更加方便,可以编写基于CentOs 7.6的
Nginx服务控制文件使用systemctl工具来进行管理.CentOS7.6系统的管理习惯
[root@localhost ~]# vi /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
##配置参数解释##
[Unit]
Description=nginx ###描述
After=network.target ####描述服务类别
[Service]
Type=forking ###后台运行形式
PIDFile=/usr/local/nginx/logs/nginx.pid ###PID文件位置
ExecStart=/usr/local/nginx/sbin/nginx ###启动服务
ExecReload=/usr/bin/kill -s HUP $MAINPID ###根据PID重载配置
ExecStop=/usr/bin/kill -s QUIT $MAINPID ###根据PID终止进程
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[root@localhost ~]# chmod 754 /lib/systemd/system/nginx.service
[root@localhost ~]# systemctl enable nginx.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
###为什么754?给了执行权限就可以执行systemctl enable nginx.service了
#OK了,这时候可以用电脑也访问验证了#
#安装Mysq环境依赖包
环境包中,cmake一定不能少
[root@localhost ~]#
yum -y install \
ncurses \
ncurses-devel \
bison \
cmake
上传mysql-boost-5.7.20.tar.gz到opt目录下
[root@localhost ~]# cd /opt
[root@localhost opt]# ll
总用量 75016
-rw-r--r--. 1 root root 11875579 9月 7 16:17 Discuz_X3.4_SC_UTF8.zip
-rw-r--r--. 1 root root 48833145 9月 7 16:16 mysql-boost-5.7.20.tar.gz
drwxr-xr-x. 9 nginx nginx 186 9月 2 19:17 nginx-1.15.9
-rw-r--r--. 1 root root 1031760 2月 26 2019 nginx-1.15.9.tar.gz
-rw-r--r--. 1 root root 15069098 9月 7 16:16 php-7.1.10.tar.bz2
[root@localhost opt]# tar xzvf mysql-boost-5.7.20.tar.gz
#等待时间过长
[root@localhost opt]#cd /opt/mysql-5.7.20/
[root@localhost mysql-5.7.20]#
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1
######################上面内容讲解#################
1 DCMAKE_INSTALL_PREFIX 指定安装路径
2 DMYSQL_UNIX_ADDR 指定mysql链接性的文件
3 DSYSCONFDIR=/etc 放的mysql的配置文件
4 DSYSTEMD_PID_DIR pid文件指定目录
5-6 字符集
7-10 支持的4个引擎
11 DMYSQL_DATADIR 数据存放位置
12 DWITH_BOOST=boost 底层要支持c++运行库
13 这个为了后面mysql做主从复制的时候用到当中的一个ID序列号
###############################################################
[root@localhost mysql-5.7.20]#make -j3
[root@localhost mysql-5.7.20]#make install -j3
######编译安装####-j3是你的虚拟机分配的核数-1,等于3个线程同时进行编译
#数据库目录进行权限调整###为了让你安装时不报错,踩坑集!!
chown -R mysql:mysql /usr/local/mysql/
建立调整配置文件
##将原内容全部替换为下面的内容
[root@localhost ~]# vi /etc/my.cnf
[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
[mysql]
port = 3306
default-character-set=utf8
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
server-id = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
chown mysql:mysql /etc/my.cnf
设置环境变量
为了让系统能够直接识别 mysql/bin下的命令 和mysql/lib 下的各种库
[root@localhost ~]#echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/bin:$PATH' >> /etc/profile
[root@localhost ~]#echo 'export PATH' >> /etc/profile
[root@localhost ~]# source /etc/profile
###########初始化##########
[root@localhost ~]# cd /usr/local/mysql/
bin/mysqld \
--initialize-insecure \ bin/mysql里的初始化的命令
--user=mysql \ 指定用户
--basedir=/usr/local/mysql \ 指定工作目录
--datadir=/usr/local/mysql/data 定数据存放位置
cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
###为什么cp usr/而不是cp /usr/ ?因为现在是在这个目录底下
###为什么要cp?为了让systemctl进行管理,systemctl管理/usr/lib/systemd/system/下的程序
systemctl enable mysqld
systemctl start mysqld
systemctl status mysqld
netstat -anpt | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 52125/mysqld
mysqladmin -u root -p password
#开始没密码是空的直接回车,然后输入密码abc123,在此确认abc123,这是在root账户下运行的
mysql -u root -p
#提示要输入密码,这个就是刚才设置的
exit
#这个是从mysql退出的命令
有了以上三步就说明成功了,接下来我们安装PHP
1、安装环境依赖包,踩坑提示:\后不要有空格
yum -y install \
libjpeg \
libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 \
libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel
因为要解压bzip的压缩包,最小安装需要安装
yum -y install bzip2
编译安装
[root@localhost opt]# cd /opt
[root@localhost opt]# ll
总用量 75020
-rw-r--r--. 1 root root 11875579 9月 7 16:17 Discuz_X3.4_SC_UTF8.zip
drwxr-xr-x. 38 7161 31415 4096 9月 7 16:33 mysql-5.7.20
-rw-r--r--. 1 root root 48833145 9月 7 16:16 mysql-boost-5.7.20.tar.gz
drwxr-xr-x. 9 nginx nginx 186 9月 2 19:17 nginx-1.15.9
-rw-r--r--. 1 root root 1031760 2月 26 2019 nginx-1.15.9.tar.gz
-rw-r--r--. 1 root root 15069098 9月 7 16:16 php-7.1.10.tar.bz2
[root@localhost opt]# tar xjvf php-7.1.10.tar.bz2
[root@localhost opt]#cd php-7.1.10
[root@localhost php-7.1.10]#
./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-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip
########以上功能注释######
安装目录
–prefix=/usr/local/php \
你的sock文件要指向/usr/local/mysql/mysql.sock,原来文件就在这里,不然链接不了数据库,因为是后台程序,后台程序要找数据库取其他数据
–with-mysql-sock
客户终端处理,你装的mysql 1客户终端工具可以直接取访问mysql服务器,找它定义存储过程,事务等相对应功能
–with-mysqli \
–with-gd \ 图像化处理
–with-jpeg-dir \ 支持图片
–enable-fpm \ 指进行动态请求
–enable-mbstring \ 多字节字符串进行处理
–enable-xml \ xml格式支持
–enable-session \ 支持session会话
–enable-ftp \ 支持FTP功能
–enable-pdo \ 相当于一个通用接口,不管什么数据库过来全是统一接口
–enable-tokenizer \ 函数库,不用管
–enable-zip zip压缩
#####################################################################
编译安装
[root@localhost php-7.1.10]# make && make install
优化
[root@localhost php-7.1.10]# cp php.ini-development /usr/local/php/lib/php.ini
[root@localhost php-7.1.10]# vi /usr/local/php/lib/php.ini
#修改
mysqli.default socket =/usr/local/mysql/mysql.sock
date.timezone = Asia/Shanghai
##验证安装的模块
[root@localhost php-7.1.10]# /usr/local/php/bin/php -m
配置及优化FPM模块
[root@localhost php-7.1.10]# cd /usr/local/php/etc/
[root@localhost etc]# cp php-fpm.conf.default php-fpm.conf
[root@localhost etc]# cd /usr/local/php/etc/php-fpm.d/
[root@localhost php-fpm.d]# cp www.conf.default www.conf
[root@localhost php-fpm.d]# cd /usr/local/php/etc/
[root@localhost etc]# vi php-fpm.conf
pid = run/php-fpm.pid 去掉;
;user = nginx 添加
;group = nginx 添加
[root@localhost etc]# /usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini
[root@localhost etc]# netstat -anpt | grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 59189/php-fpm: mast
[root@localhost etc]# ln -s /usr/local/php/bin/* /usr/local/bin/
[root@localhost etc]# ps aux | grep -c "php-fpm"
4
下面是让nginx支持PHP功能
#在合适的位置添加
[root@localhost etc]# vi /usr/local/nginx/conf/nginx.conf
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;
include fastcgi_params;
}
#添加测试页
[root@localhost etc]# vi /usr/local/nginx/html/index.php
<?php
phpinfo();
?>
在网页测试 http://20.0.0.26/index.php
下面测试数据库工作是否正常
[root@localhost etc]# mysql -u root -p
mysql> CREATE DATABASE bbs; ###这条设数据库名字
mysql> GRANT all ON bbs.* TO 'bbsadm'@'%' IDENTIFIED BY 'admin123'; #这条设账户和密码
mysql> GRANT all ON bbs.* TO 'bbsadm'@'localhost' IDENTIFIED BY 'admin123'; #这条是让本地也能访问
mysql> flush privileges; #这条是刷新数据库
mysql> exit
Bye
将下面内容整个替换掉再测试一下:没问题就开始搭建论坛
[root@localhost etc]# vi /usr/local/nginx/html/index.php
<?php
$link=mysqli_connect('20.0.0.26','bbsadm','admin123');
if($link) echo "Success!!
";
else echo "Fail!!";
?>
[root@localhost etc]# systemctl restart nginx
[root@localhost ~]# yum -y install unzip
[root@localhost ~]# cd /opt
[root@localhost opt]# unzip Discuz_X3.4_SC_UTF8.zip -d /tmp
[root@localhost opt]# cd /tmp/dir_SC_UTF8/
[root@localhost dir_SC_UTF8]# cp -r upload/ /usr/local/nginx/html/bbs/
[root@localhost dir_SC_UTF8]# cd /usr/local/nginx/html/bbs/
因为属组root没有权限,你必须是程序用户nginx才能使用,所以要改,不然等会验证一定出错
在这个地方我踩了大坑,修改了很长时间才找到原因
[root@localhost bbs]# chown -R root:nginx ./config/
[root@localhost bbs]# chown -R root:nginx ./data/
[root@localhost bbs]# chown -R root:nginx ./uc_client/
[root@localhost bbs]# chown -R root:nginx ./uc_server/
这里为了方便测试,我将所有权限全部放通
[root@localhost bbs]# chmod -R 777 ./config/
[root@localhost bbs]# chmod -R 777 ./data/
[root@localhost bbs]# chmod -R 777 ./uc_client/
[root@localhost bbs]# chmod -R 777 ./uc_server/
接下来是访问验证步骤:我写在模块里方便查看
http://IP/bbs/install/index.php
http://20.0.0.26/bbs/install/index.php
################填写数据库信息#################
数据库服务器: localhost ###本地架设就用localhost, 如何不是在在本机上就要填写IP地址和端口号
数据库名字: bbs ###CREATE DATABASE bbs;这条的时候告诉你名字叫bbs
数据库用户名: bbsadm #谁来管理这个数据库
(GRANT all ON bbs.* TO 'bbsadm'@'%' IDENTIFIED BY 'admin123';)你建的
数据库密码: admin123
数据表前缀:pre_
###############填写管理员信息
账号:admin
管理员密码:随便设 比如:admin123
###这时候数据库OK了,你回头到20.0.0.26输 mysql -u root -p然后 use bbs; 然后
show tables;看看 ,全是pre_开头,不看也无所谓
########进入后台方式
http://IP/bbs/admin.php //管理后台
http://20.0.0.26/bbs/admin.php
账户: admin #刚刚你在上面设的
密码: admin123 #刚刚你在上面验证的时候设的
首页出现 ###Please delete install/index.php via FTP###
总结:
############在整个lnmp基础之上装了Discuz论坛,其实就是开发个web网站
[root@localhost bbs]# cd /usr/local/nginx/html/bbs/
[root@localhost bbs]# mv install/ install.lock
[root@localhost bbs]# chmod 600 install.lock/