简述:
LNMP是当前各大中小公司常采用的技术架构,作为运维工程师必了解的技术之一,本文简单描述LNMP架构的部署方式,无论单机或分离部署采用的方法大同小异。
1.LNMP架构之linux环境的准备
本文采用centos7.9版本,初始化配置请点击如下链接进行查阅
centos7.9初始化配置
2.LNMP架构之nginx安装
#1.下载依赖
sudo yum install yum-utils
#2. 配置最新稳定版
cat > /etc/yum.repos.d/nginx.repo << 'EOF'
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
#3.清空yum源,安装最新版nginx
yum clean all
yum install nginx
#4. 安装完nginx版本查看
[root@nginx-test yum.repos.d]# which nginx
/usr/sbin/nginx
[root@nginx-test yum.repos.d]# nginx -V
nginx version: nginx/1.24.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
[root@nginx-test yum.repos.d]#
#5 查看默认安装路径
[root@nds-1 app]# find / -name nginx
/etc/logrotate.d/nginx
/etc/nginx
/var/log/nginx
/var/cache/nginx
/usr/sbin/nginx
/usr/lib64/nginx
/usr/share/nginx
/usr/libexec/initscripts/legacy-actions/nginx
[root@nds-1 app]#
#6.启动
nginx
[root@nds-1 app]# netstat -ntlp |grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1619/nginx: master
3.LNMP架构之mysql安装
3.1mysql环境准备及配置文件编辑
#安装前查询是否已安装
grep "mysql" /etc/passwd
#1.创建普通mysql用户,降低程序运行权限
useradd -s /sbin/nologin mysql
#2.查看msyql用户信息
[root@localhost ~]# id mysql
uid=1000(mysql) gid=1000(mysql) groups=1000(mysql)
#3.提前下载msyql 二进制代码包,注意提前下载好wget工具
yum install wget -y
#4.下载mysql二进制
wget https://mirrors.aliyun.com/mysql/MySQL-5.7/mysql-5.7.36-linux-glibc2.12-x86_64.tar
#5. 解压缩msyql包,会多解压出两个包
tar -xf mysql-5.7.36-linux-glibc2.12-x86_64.tar
#6.继续解压
tar zxvf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz
#7.移动解压后的包到/opt/mysql/
mv mysql-5.7.36-linux-glibc2.12-x86_64 /opt/mysql/
#8.设置软连接(第七步未做的情况下)
ln -s mysql-5.7.36-linux-glibc2.12-x86_64 /opt/mysql
#9.安全性的准备工作,卸载可能centos7存在的mariadb相关的依赖关系
rpm -e --nodeps mariadb-libs
#10.开始准备启动mysql 的配置文件,[mysqld]是区,以下的参数对其生效。
#[mysqld] 对服务端生效的参数
#[mysql] 对客户端生效的参数
vim /etc/my.cnf
[mysqld]
basedir=/opt/mysql/
datadir=/opt/mysql/data
socket=/tmp/mysql.sock
server_id=1
port=3306
log_error=/opt/mysql/data/mysql_err.log
[mysql]
socket=/tmp/mysql.sock
3.2初始化mysql服务端
#1.先卸载系统自带的mariadb的依赖
rpm -e --nodeps mariadb-libs
#2.检查mysql的所需依赖环境
yum install libaio-devel -y
#3.创建mysql 数据库文件夹,用于初始化数据,且进行权限控制
mkdir -p /opt/mysql/data/
chown -R mysql.mysql /opt/mysql/ #修改mysql所有内容属主属组都为mysql
#4.初始化数据库
/opt/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql/ --datadir=/opt/mysql/data/
3.3 配置mysql客户端
#1.编写mysql启动脚本,定义一个mysqld.service
touch /etc/systemd/system/mysqld.service
vim /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(7)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/opt/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE=5000
3.4 启动mysql服务
#1.由于我们配置了msyql.service脚本,直接用命令启动
systemctl start mysqld.service
systemctl status mysqld.service
● mysqld.service - MySQL Server
Loaded: loaded (/etc/systemd/system/mysqld.service; disabled; vendor preset: disabled)
Active: active (running) since Sat 2023-07-08 20:54:13 CST; 22s ago
Docs: man:mysqld(7)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Main PID: 12003 (mysqld)
CGroup: /system.slice/mysqld.service
└─12003 /opt/mysql/bin/mysqld --defaults-file=/etc/my.cnf
#检查状态为active
3.5 配置mysql环境变量及登录mysql数据库
#1.配置mysql的环境变量PATH
/opt/mysql/bin
#2.编辑全局配置文件,在末尾写入安装路径
vim /etc/profile
PATH="$PATH:/opt/mysql/bin"
source /etc/profile
#3.which mysql 查看mysql,有具体路径则设置成功
[root@localhost ~]# which mysql
/opt/mysql/bin/mysql
#4登录MySQL,此时msyql无密码,可以直接回车登录
mysql -uroot -p
#5.简单查看数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
mysql> create database haige;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| haige |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql>
3.6 修改数据库密码
注意不是登录数据库后改密码,是直接在命令终端直接改
mysqladmin -u root password 'xlgw123456!' 使用mysqladmin命令,修改root 密码为xlgw123456!
修改密码后需要密码登录
4.LNMP架构之php安装
4.1 php安装环境准备
1.先检查好nginx和mysql的安装和启动
ps -ef |grep nginx
ps -ef |grep mysql
#安装前对服务器做好基本的初始化设置
#2.安装php所必须有的依赖环境
yum install -y gcc gcc-c++ \
make zlib-devel libxml2-devel \
libjpeg-devel libjpeg-turbo-devel libiconv-devel \
freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel \
#网上找的(上面依赖不全,使用这个最好)
yum install -y gcc gcc-c++ \
libxml2 libxml2-devel \
openssl openssl-devel \
bzip2 bzip2-devel \
libcurl libcurl-devel \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
gmp gmp-devel \
readline readline-devel \
libxslt libxslt-devel \
systemd-devel \
openjpeg-devel \
curl curl-devel \
pcre pcre-devel \
epel-release \
libmcrypt-devel \
autoconf
2、安装php所必须有的依赖环境
yum install gcc gcc-c++ make zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel \
freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel libxslt-devel -y
3、发现yum仓库默认缺少一个libiconv-devel软件包,因此我们可以手动下载,自行编译安装该软件
No package libiconv-devel available.
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz
4、解压缩安装该软件包,编译三部曲(解压,检查环境,安装)
tar -zxvf libiconv-1.15.tar.gz
./configure --prefix=/opt/libiconv
make && make install
5、检查上述编译安装的命令是否正确结束了在执行上一条shell语句结束后,echo $?
[root@lnmp-php libiconv-1.15]# echo $?
0
[root@lnmp-php libiconv-1.15]#
4.2 编译安装php
#1.下载php源代码
wget http://mirrors.sohu.com/php/php-7.3.5.tar.gz
#2、解压缩php源代码,准备编译安装
tar -zxvf php-7.3.5.tar.gz
# 准备编译环境,指定安装路径,开启额外的功能等等
./configure --prefix=/opt/php735 \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-iconv-dir=/opt/libiconv \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--with-gd \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-soap \
--enable-short-tags \
--enable-static \
--with-xsl \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--enable-ftp \
--enable-opcache=no
#无报错则进行下一步
#系统环境检查完毕后,准备开始编译且安装
make && make install
4.3 php 配置
#通过命令查找,有两个文件一个是开发,一个是生产,复制开发的到编译安装的目录下
ls php.ini*
#1.比较生产模式和生产模式两文件的区别
[root@lnmp-php php-7.3.5]# vimdiff php.ini-development php.ini-production
#2.拷贝该配置文件,放到php的编译安装目录下并改名
[root@lnmp-php php-7.3.5]# cp php.ini-development /opt/php735/lib/php.ini
#1.检查fastcgi的默认配置文件
cd /opt/php735/etc
ls
[root@lnmp-php etc]# ls
pear.conf php-fpm.conf.default php-fpm.d
#2.拷贝模板配置文件,生成新的php配置文件
cp php-fpm.conf.default php-fpm.conf
cd php-fpm.d
cp www.conf.default www.conf
4.4 启动php服务
#创建用户nginx
useradd nginx -u 1111 -s /sbin/nologin -M
#用绝对路径启动
/opt/php735/sbin/php-fpm
#查看启动状态
ps -ef |grep php
[root@lnmp-php sbin]# ps -ef |grep php
root 45665 1 0 23:45 ? 00:00:00 php-fpm: master process (/opt/php735/etc/php-fpm.conf)
nginx 45666 45665 0 23:45 ? 00:00:00 php-fpm: pool www
nginx 45667 45665 0 23:45 ? 00:00:00 php-fpm: pool www
root 45670 1608 0 23:46 pts/0 00:00:00 grep --color=auto php
4.5 修改nginx支持php代码
#1.删除无用的注释及server,采用引入的方式
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#error_log "pipe:rollback logs/error_log interval=1d baknum=7 maxsize=2G";
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
#access_log "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G" main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
include extra/my_php.conf;
}
#2 .创建extra目录,编辑虚拟机文件server内容,文件名为my_php.conf,注意转到后端(后端部署在其他服务器上时)需要填写绝对路径
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
# add this php setings
location ~ .*\.(php|php5) {
root /opt/nginx/html/myphp;
fastcgi_pass 192.168.10.52:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
#3.检查nginx语法,以及重启nginx
[root@lnmp-nginx extra]# nginx -t
nginx: the configuration file /opt/tngx233/conf/nginx.conf syntax is ok
nginx: configuration file /opt/tngx233/conf/nginx.conf test is successful
[root@lnmp-nginx extra]# nginx -s reload
[root@lnmp-nginx extra]# netstat -ntlp
#4. 创建php的首页文件放到后端服务器上
mkdir -p /opt/nginx/html/myphp
echo "<?php phpiinfo(); ?>" > /opt/nginx/html/myphp/index.php
#5.访问验证
192.168.10.50/index.php
当看到phpinfo的页面,表示lnmp环境搭建好了,nginx已可以转发请求给php了。
4.6 测试php访问mysql
#后端服务器上(php服务器上)
#注意由于数据库是在其他服务器上,所以需要开启数据库的远程远程链接功能,数据库的用户权限设置等,具体请参考文档:https://www.python100.com/html/97120.html
cd /opt/nginx/html/myphp
vim test_mysql.php
<?php
$link_id=mysqli_connect('192.168.10.51','xlgw','xlgw123456!') or mysql_error();
if($link_id){
echo "mysql successful by haige.\n";
}
else {
echo mysql_error();
}
?>
-----------
##代码解释:
#1.建立mysql连接,把连接信息复制给变量 link_id
#2.如果link_id为真,那么就打印一串字符串信息,告诉你mysql链接成功了
#3.否则给你输出mysql链接报错的信息,让你能够自行体哦阿正程序
至此,LNMP架构部署完成,有问题欢迎留言探讨!!