Construction of LNMP service

Construction of LNMP service

1. LNMP service

1. Features of LNMP

LNMP stands for: Nginx+MySQL+PHP this kind of website server architecture under Linux system.

Linux is a collective name for a class of Unix computer operating systems, and is currently the most popular free operating system. Representative versions are: debian, centos, ubuntu, fedora, gentoo, etc.

Nginx is a high-performance HTTP and reverse proxy server, as well as an IMAP/POP3/SMTP proxy server.

Mysql is a small relational database management system.

PHP is a scripting language that is executed on the server and embedded in HTML documents.

These four kinds of software are all free and open source software, combined together to become a free, efficient, and extensible website service system.

2. Advantages of LNMP

As a web server: Compared with Apache, Nginx uses fewer resources, supports more concurrent connections, and reflects higher efficiency.

Nginx installation is very simple, and the configuration file is very concise (it can also support perl syntax). Nginx supports smooth loading of new configurations, and can also perform software without interruption in service

Version upgrade.

Second, the establishment of LNMP service

1. Install Nginx service

1.1 First turn off the firewall and security services

Insert picture description here

1.2 Installation environment dependent packages

Insert picture description here

1.3 Create a running user

Insert picture description here

1.4 Compile and install

Insert picture description here


Insert picture description here
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/

cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

make -j2 && make install

1.5 Optimizing the path

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

Insert picture description here

1.6 Add Nginx system service

vim /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=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service


Insert picture description here

2. Install Mysql service

2.1 Install the Mysql environment dependency package

Insert picture description here

2.2 Create a running user

useradd -M -s /sbin/nologin  mysql

2.3 Compile and install

cd /opt
tar zxvf mysql-boost-5.7.20.tar.gz

cd /opt/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_EXTRA_CHARSETS=all \
-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

make && make install

2.4 modify the mysql configuration file

Delete the source file and add new content

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=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

Insert picture description here

2.5 Change the owner group of the mysql installation directory and configuration file

chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf
Insert picture description here

2.6 Set path environment variables

echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile	
source /etc/profile
Insert picture description here

2.7 Initialize the database

cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
Insert picture description here

2.8 Add mysqld system service

cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl start mysqld.service
systemctl enable mysqld
Insert picture description here

2.9 modify mysql login password

mysqladmin -u root -p password "abc123"

2.10 Authorized remote login

mysql -u root -p

grant all privileges on *.* to 'root'@'%' identified by '123123';

show databases;

quit
Insert picture description here

3. Install and configure PHP parsing environment

3.1 Installation environment dependent packages

yum -y install gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel

3.2 Compile and install

cd /opt
tar jxvf php-7.1.10.tar.bz2

cd 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

make && make install

3.3 Path optimization

ln -s /usr/local/php/bin/* /usr/local/bin/
ln -s /usr/local/php/sbin/* /usr/local/sbin/
Insert picture description here

3.4 Adjust the PHP configuration file

php has three configuration files:
php.ini main configuration file
php-fpm.conf process service configuration file
www.conf extended configuration file
cp /opt/php-7.1.10/php.ini-development /usr/local/php/lib/php.ini	
vim /usr/local/php/lib/php.ini
--1170行--修改
mysqli.default_socket = /usr/local/mysql/mysql.sock
--939行--取消注释,修改
date.timezone = Asia/Shanghai

php -m 					#验证安装的模块
Insert picture description here
Insert picture description here


Insert picture description here


Insert picture description here
#调整进程服务配置文件:
cd /usr/local/php/etc/
cp  php-fpm.conf.default php-fpm.conf
vim php-fpm.conf
--17行--去掉";"注释
pid = run/php-fpm.pid
Insert picture description here


Insert picture description here
#调整扩展配置文件:
cd /usr/local/php/etc/php-fpm.d/
cp www.conf.default www.conf
#优化
vim www.conf

user = nginx
#更改用户名
group = nginx

pm.max_children = 50
#fpm支持的最大进程数

pm.start_servers = 20
#启动时开启的进程数

pm.min_spare_servers = 5
#空闲时最小保留的进程数

pm.max_spare_servers = 20
#最大空闲进程数

Insert picture description here


Insert picture description here

3.5 start php-fpm

/usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini
netstat -anpt | grep 9000

#PHP-FPM(FastCGI Process Manager:FastCGI 进程管理器)是一个 PHPFastCGI 管理器, 由于Nginx服务器不能处理动态页面,需要由 Nginx 把动态请求交给 php-fpm 进程进行解析。

cd /opt/php-7.1.10/sapi/fpm
cp php-fpm.service /usr/lib/systemd/system/php-fpm.service
systemctl restart php-fpm.service

Insert picture description here


Insert picture description here

3.6 Configure Nginx to support PHP parsing

vim /usr/local/nginx/conf/nginx.conf
--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的工作目录
	include        fastcgi_params;
}

systemctl restart nginx.service
Insert picture description here

3.7 Verify PHP test page

vim /usr/local/nginx/html/index.php
<?php
phpinfo();
?>


nginx -t
Insert picture description here


Insert picture description here

3.8 Verify that the database is working properly

mysql -u root -p
CREATE DATABASE bbs;
GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123';
GRANT all ON bbs.* TO 'bbsuser'@'localhost' IDENTIFIED BY 'admin123';
flush privileges;

vim /usr/local/nginx/html/index.php      		#替换原来的测试页内容
<?php
$link=mysqli_connect('192.168.80.10','bbsuser','admin123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
?>

Insert picture description here


Insert picture description here


Insert picture description here

4. Deploy Discuz! Community Forum Web Application

cd /opt
unzip Discuz_X3.4_SC_UTF8.zip  -d /opt/dis
cd /opt/dis/dir_SC_UTF8/
cp -r upload/ /usr/local/nginx/html/bbs/

调整论坛目录的权限:
cd /usr/local/nginx/html/bbs/
chown -R nginx ./config/
chown -R nginx ./data/
chown -R nginx ./uc_client/
chown -R nginx ./uc_server/
或
chmod -R 777 ./config/
chmod -R 777 ./data/
chmod -R 777 ./uc_client/
chmod -R 777 ./uc_server/
http://192.168.64.129 /bbs/index.php

论坛后台管理员页面:
http://192.168.64.129/bbs/admin.php
Insert picture description here


Insert picture description here


Insert picture description here


Insert picture description here


Insert picture description here


Insert picture description here