LNMP原理及源码安装LNMP、搭建论坛的shell脚本

旧城等待, 2024-04-08 12:18 150阅读 0赞

一、LNMP

1、LNMP组成:

①Nginx服务:一款高性能的轻量级Web服务软件

》》》稳定性高

》》》支持正则,系统资源消耗低

》》》对HTTP并发连续的处理能力高(理论上处理3~5万个并发请求,实际上大概2~3万个并发请求)

②MySQL服务

③PHP服务

二、LNMP框架

a89e9d382be04cefa3c416045c818bf6.png

三、LNMP业务层面的对接原理

1、LNMP的组成

由Nginx 、PHP 、MysQL组成

三者关系:各司其职,对接集成

①各司其职:云计算/运维角度分析

Nginx 属于前端 主要提供静态处理+跳转到php的功能

PHP 属于后端 只要处理动态任务,和对接数据库

MysQL存储存储数据(存储基础数据、核心数据、业务数据)

2、对接集成(组合)

nginx———>> 对接PHP————>>对接Mysql

3、对接方式

3.1Nginx <=========> php

3.1.1 Nginx角度来看,Nginx只要修改配置文件即可修改:

①location ~ l.php$s { }

②在以上模块中修改php-fpm模块的位置:127.0.0.1:9000

《FPM是Nginx对接PHP的一个小工具(接口),此接口会调用FastCgi这个API接口,从而和PHP进行对接》

3.1.2、从PHP角度来看,PHP需要开启Pid进程暴露9000端口,用于方便Nginx来对接。

小结:Nginx和php直接对接交互,就是通过ip: port来交互的

3.2 php<=========>mysql

3.2.1 从PHP角度来看

①需要在./configure配置过程中,指向mysql.sock 文件的位置

②php.ini调整”mysqli.default socket= /usr/local/mysql/mysql.sock”配置参数来和mysql进行对接从

(mysql.sock是用于将访问请求或调用等来访任务传递到mysql服务内部的一个通讯文件,mysql是由自己的内部空间的,而通讯就依靠mysql.sock)

3.2.1 MySQL角度来看

①本身如果PHP使用的是root权限来访问的话,则无需操作

②如果PHP借助于独立用户来访问的话,则需要进行grant提权处理

四、一键部署LNMP服务

1、安装过程收集的log需要的可自行下载

百度链接:https://pan.baidu.com/s/1HEdUoLx6Z3dQkQs9ZcUSXA?pwd=lnmp
提取码:lnmp

(文件过大,不便贴图)

2、LNMP的shell内容

  1. #!/bin/bash
  2. ######################################系统初始化设置#################################
  3. #####关闭防火墙
  4. systemctl stop firewalld.service
  5. if [ $? -eq 0 ];then
  6. echo "防火墙已关闭"
  7. else
  8. echo "防火墙关闭失败,请重新操作"
  9. break
  10. fi
  11. systemctl disable firewalld.service
  12. if [ $? -eq 0 ];then
  13. echo "防火墙已设置为开机不启动"
  14. else
  15. echo "防火墙开机不启动设置失败,请重新开始"
  16. break
  17. fi
  18. ########关闭安全中心
  19. setenforce 0 ####
  20. echo "selinux已关闭"
  21. sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
  22. grep -w "SELINUX=disabled" /etc/selinux/config
  23. if [ $? -eq 0 ];then
  24. echo "selinux已设置为永久关闭"
  25. else
  26. echo "selinux设置永久关闭失败"
  27. break
  28. fi
  29. #########调试网络
  30. ping -c1 -w1 -i0.2 www.baidu.com
  31. if [ $? -eq 0 ];then
  32. echo "网络正常"
  33. else
  34. sed -i 's/BOOTPROTO="dhcp"/BOOTPROTO="static"/' /etc/sysconfig/network-scripts/ifcfg-ens33
  35. read -p "请输入IP地址: " ip
  36. read -p "请输入子网掩码: " mask
  37. read -p "请输入网关地址: " way
  38. read -p "请输入DNS: " dns
  39. cat<<EOF>>/etc/sysconfig/network-scripts/ifcfg-ens33
  40. IPADDR=$ip
  41. NETMASK=$mask
  42. GATEWAY=$way
  43. DNS=$dns
  44. EOF
  45. systemctl restart network &>/dev/null
  46. ping -c2 www.baidu.com
  47. if [ $? -eq 0 ];then
  48. echo "网络正常"
  49. else
  50. echo "网络设置失败"
  51. fi
  52. fi
  53. yum -y install epel-release.noarch
  54. ####################################### LNMP 安装#################################
  55. install_Nginx () {
  56. yum -y install gcc gcc-c++ pcre-devel zlib-devel make
  57. id nginx
  58. if [ $? -eq 0 ];then
  59. echo "nginx已存在,无需在创建"
  60. else
  61. useradd -M -s /sbin/nologin nginx
  62. if [ $? -eq 0 ];then
  63. echo "nginx用户新建成功"
  64. else
  65. echo "nginx用户新建失败"
  66. exit
  67. fi
  68. fi
  69. cd /opt
  70. if [ -f nginx-1.15.9.tar.gz ];then
  71. tar xzvf nginx-1.15.9.tar.gz
  72. else
  73. echo "nginx-1.15.9.tar.gz不存在"
  74. exit
  75. fi
  76. cd nginx-1.15.9/
  77. ./configure \
  78. --prefix=/usr/local/nginx \
  79. --user=nginx \
  80. --group=nginx \
  81. --with-http_stub_status_module
  82. make -j3
  83. make install
  84. if [ $? -eq 0 ];then
  85. echo "nginx编译安装成功"
  86. else
  87. echo "nginx编译安装失败"
  88. fi
  89. cp /usr/local/nginx/sbin/nginx /usr/local/sbin/
  90. yum -y install lynx
  91. echo "
  92. [Unit]
  93. Description=nginx
  94. After=network.target
  95. [Service]
  96. Type=forking
  97. PIDFile=/usr/local/nginx/logs/nginx.pid
  98. ExecStart=/usr/local/nginx/sbin/nginx
  99. ExecReload=/usr/bin/kill -s HUP $MAINPID
  100. ExecStop=/usr/bin/kill -s QUIT $MAINPID
  101. PrivateTmp=true
  102. [Install]
  103. WantedBy=multi-user.target
  104. " > /lib/systemd/system/nginx.service
  105. chmod 754 /lib/systemd/system/nginx.service
  106. systemctl enable nginx.service --now
  107. if [ $? -eq 0 ];then
  108. echo "nginx设置为开机启动并立即启动"
  109. else
  110. echo "nginx设置为开机启动并立即启动!!!!失败!!!!"
  111. fi
  112. }
  113. install_Nginx
  114. install_mysql () {
  115. yum -y install gcc gcc-c++ pcre-devel zlib-devel make expect
  116. yum -y install \
  117. ncurses \
  118. ncurses-devel \
  119. bison \
  120. cmake \
  121. id mysql
  122. if [ $? -eq 0 ];then
  123. echo "mysql用户已存在,不需新建"
  124. else
  125. useradd -s /sbin/nologin mysql
  126. fi
  127. cd /opt
  128. if [ -f mysql-boost-5.7.20.tar.gz ];then
  129. tar xzvf mysql-boost-5.7.20.tar.gz
  130. else
  131. echo "mysql-boost-5.7.20.tar.gz不存在"
  132. exit
  133. fi
  134. cd /opt/mysql-5.7.20/
  135. cmake \
  136. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
  137. -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
  138. -DSYSCONFDIR=/etc \
  139. -DSYSTEMD_PID_DIR=/usr/local/mysql \
  140. -DDEFAULT_CHARSET=utf8 \
  141. -DDEFAULT_COLLATION=utf8_general_ci \
  142. -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  143. -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
  144. -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
  145. -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
  146. -DMYSQL_DATADIR=/usr/local/mysql/data \
  147. -DWITH_BOOST=boost \
  148. -DWITH_SYSTEMD=1
  149. make -j3
  150. make install
  151. if [ $? -eq 0 ];then
  152. echo "mysql编译安装成功"
  153. else
  154. echo "mysql编译安装失败"
  155. exit
  156. fi
  157. chown -R mysql:mysql /usr/local/mysql/
  158. cat<<EOF>/etc/my.cnf
  159. [client]
  160. port = 3306
  161. default-character-set=utf8
  162. socket = /usr/local/mysql/mysql.sock
  163. [mysql]
  164. port = 3306
  165. default-character-set=utf8
  166. socket = /usr/local/mysql/mysql.sock
  167. [mysqld]
  168. user = mysql
  169. basedir = /usr/local/mysql
  170. datadir = /usr/local/mysql/data
  171. port = 3306
  172. character_set_server=utf8
  173. pid-file = /usr/local/mysql/mysqld.pid
  174. socket = /usr/local/mysql/mysql.sock
  175. server-id = 1
  176. 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
  177. EOF
  178. chown mysql:mysql /etc/my.cnf
  179. echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
  180. echo 'export PATH' >> /etc/profile
  181. source /etc/profile
  182. cd /usr/local/mysql/
  183. bin/mysqld \
  184. --initialize-insecure \
  185. --user=mysql \
  186. --basedir=/usr/local/mysql \
  187. --datadir=/usr/local/mysql/data
  188. cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
  189. systemctl enable mysqld --now
  190. if [ $? -eq 0 ];then
  191. echo "mysqld开机启动及立即启动成功"
  192. else
  193. echo "mysqld开机启动及立即启动失败"
  194. exit
  195. fi
  196. yum install -y expect
  197. /usr/bin/expect <<EOF
  198. spawn mysqladmin -u root -p password
  199. expect {
  200. "Enter password:"
  201. { send "\r";exp_continue }
  202. "New password:"
  203. { send "abc123\r";exp_continue }
  204. "Confirm new password"
  205. { send "abc123\r"; }
  206. }
  207. expect eof
  208. EOF
  209. }
  210. install_mysql
  211. install_php () {
  212. yum -y install \
  213. libjpeg \
  214. libjpeg-devel \
  215. libpng libpng-devel \
  216. freetype freetype-devel \
  217. libxml2 \
  218. libxml2-devel \
  219. zlib zlib-devel \
  220. curl curl-devel \
  221. openssl openssl-devel \
  222. cd /opt
  223. if [ -f php-7.1.10.tar.bz2 ];then
  224. tar xjvf php-7.1.10.tar.bz2
  225. else
  226. echo "xjvf php-7.1.10.tar.bz2不存在"
  227. exit
  228. fi
  229. cd php-7.1.10
  230. ./configure \
  231. --prefix=/usr/local/php \
  232. --with-mysql-sock=/usr/local/mysql/mysql.sock \
  233. --with-mysqli \
  234. --with-zlib \
  235. --with-curl \
  236. --with-gd \
  237. --with-jpeg-dir \
  238. --with-png-dir \
  239. --with-freetype-dir \
  240. --with-openssl \
  241. --enable-fpm \
  242. --enable-mbstring \
  243. --enable-xml \
  244. --enable-session \
  245. --enable-ftp \
  246. --enable-pdo \
  247. --enable-tokenizer \
  248. --enable-zip \
  249. make -j3
  250. make install
  251. if [ $? -eq 0 ];then
  252. echo "php编译安装成功"
  253. else
  254. echo "php编译安装失败"
  255. exit
  256. fi
  257. cp php.ini-development /usr/local/php/lib/php.ini
  258. sed -i 's/mysqli.default_socket =/mysqli.default_socket = \/usr\/local\/mysql\/mysql.sock/' /usr/local/php/lib/php.ini
  259. sed -i 's/date.timezone =/date.timezone = Asia\/Shanghai/' /usr/local/php/lib/php.ini
  260. /usr/local/php/bin/php -m
  261. cd /usr/local/php/etc/
  262. cp php-fpm.conf.default php-fpm.conf
  263. cd /usr/local/php/etc/php-fpm.d/
  264. cp www.conf.default www.conf
  265. cd /usr/local/php/etc/
  266. sed -i 's/;pid = run\/php-fpm\.pid/pid = run\/php-fpm\.pid/' php-fpm.conf
  267. /usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini
  268. /usr/local/php/bin/* /usr/local/bin/
  269. sed -i '42alocation ~ \\.php$ {\n root html;\nfastcgi_pass 127\.0\.0\.1:9000;\nfastcgi_index index\.php;\nfastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;\ninclude fastcgi_params;\n}' /usr/local/nginx/conf/nginx.conf
  270. sed -i 's/index index\.html index\.htm;/index index\.html index\.htm index\.php;/' /usr/local/nginx/conf/nginx.conf
  271. cat<<EOF>/usr/local/nginx/html/index.php
  272. <?php
  273. phpinfo();
  274. ?>
  275. EOF
  276. systemctl restart nginx
  277. if [ $? -eq 0 ];then
  278. echo "nginx重启成功"
  279. else
  280. echo "nginx重启失败"
  281. exit
  282. fi
  283. mysql -u root -pabc123 -e 'create database bbs;'
  284. mysql -u root -pabc123 -e "grant all on bbs.* to 'bbsuser'@'%' identified by 'admin123'"
  285. mysql -u root -pabc123 -e "grant all on bbs.* to 'bbsuser'@'localhost' identified by 'admin123'"
  286. mysql -u root -pabc123 -e "flush privileges;"
  287. systemctl restart nginx
  288. cd /opt
  289. if [ -f Discuz_X3.4_SC_UTF8.zip ];then
  290. unzip Discuz_X3.4_SC_UTF8.zip -d /tmp
  291. else
  292. echo "Discuz_X3.4_SC_UTF8.zip不存在"
  293. exit
  294. fi
  295. cd /tmp/dir_SC_UTF8/
  296. cp -r upload/ /usr/local/nginx/html/bbs/
  297. cd /usr/local/nginx/html/bbs/
  298. chown -R root:nginx ./config/
  299. chown -R root:nginx ./data/
  300. chown -R root:nginx ./uc_client/
  301. chown -R root:nginx ./uc_server/
  302. chmod -R 777 ./config/
  303. chmod -R 777 ./data/
  304. chmod -R 777 ./uc_client/
  305. chmod -R 777 ./uc_server/
  306. }
  307. install_php

脚本运行完以后需要执行下,source /etc/profile。当时只是在shell脚本的环境加载生效,退出脚本后需要重新加载一下。

3、验证

f9eeb21a67bf410588b49ef429b43437.png

21bfa871698347ffaa685ae14af6a0e9.png

ba878bac6a244c1494d022d096f2cd2b.pngd018c2a863fd4a8d8de5d8e4c1e18b37.png点击安装:跳转太快没截到图片

ec22da9b8ada4b9bb582c532515af7b9.png 33a104c663224ca4ad780704ed16ee8e.png

总结:

学习了LNMP的架构组成,及服务流向;学会搭建源码搭建 lnmp服务

发表评论

表情:
评论列表 (有 0 条评论,150人围观)

还没有评论,来说两句吧...

相关阅读