公司企业架构LNMP二(单点服务器部署)

学习目标和内容

1、能够部署配置Nginx生产环境

2、能够部署配置PHP生产环境

3、能够实现项目代码上线配置

三、企业服务器LNMP环境搭建

之前的课程中,已经搭建了MySQL服务,不管之后公司的业务使用何种后端代码,很大部分都是使用MySQL作为数据存储服务。

Nginx

介绍

nginx是一款轻量级的服务器软件

web http server location

proxy 反向代理 负载均衡

mail pop3 smtp

特点:

①热部署 重载快速

②高并发 同时响应的请求多

③响应快 轻量级 加载的东西少

④消耗低 cpu和内存占用率都比apache低

⑤分布式

安装

问题编译过程中出现问题:

依赖解决

nginx依赖pcre库进行url重写,如果已经安装可以忽略

如果需要部署支持https协议,需要ssl的支持,安装openssl

shell > yum -y install pcre-devel zlib-devel openssl-devel

解压进入目录

shell > tar zxf nginx-1.14.0.tar.gz

shell > cd nginx-1.14.0

配置编译参数

shell > ./configure --prefix=/usr/local/nginx-1.14.0 --with-http_ssl_module

编译并安装到目录

shell > make && make install

3、配置

添加启动服务

nginx编译包里默认服务启动脚本模板,可以通过社区获得

https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/

nginx的启动脚本文件,可以通过以上链接获得,或者使用之前分享给大家的,也就是通过yum方式安装后,生成的脚本。

修改软件和配置路径即可

shell > chmod +x /etc/init.d/nginx

shell > chkconfig --add nginx

这里nginx已经部署配置完成,可以通过service命令进行管理,自启动。

PHP

介绍

网站应用:

页面分类:

静态页面 html(css、js) 页面写好之后,多次访问还是一个样儿

动态页面 用户可以和服务器进行交互页面

执行动态页面,需要和服务器进行交互,使用后端语言进行开发

LNMP 使用php进行开发交互

编程语言:

编译型: 开发之后,需要把代码进行预编译,生成一种中间文件,再去执行

编译后的文件,执行过程是很快,编译过程中会进行语法的检查,优化

C C++ JAVA go

解释型: 通过语言脚本的解释器,预执行检查语法,一行一行的顺序执行。效率稍低一些。边解释边执行

shell (/bin/bash) PHP python ruby

php的生产环境由开发代码的人决定,里面的编程的API(函数、方法)不同版本会不一样

当前稳定php5系列是5.6.36

稳定的php7系列是7.2.5

mysql_connect函数废弃了(很多开源的老代码使用的这个函数)

安装

解压进入目录

shell > tar zxf php-5.6.36.tar.gz

shell > cd php-5.6.36

编译参数配置

shell > ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --with-mcrypt --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --disable-fileinfo --enable-maintainer-zts

解决遇到的依赖软件问题

shell > yum -y install libxml2-devel openssl-devel curl-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel

libmcrypt-devel需要epel源里安装,yum源需要提前配置好epel的源

如果epel源不能够使用,那就使用源码包编译的方式安装libmcrypt

shell > tar xvf libmcrypt-2.5.7.tar.gz

shell > cd libmcrypt-2.5.7

shell > ./configure && make && make install

选做Tip:configure遇到的问题

configure: error: Don't know how to define struct flock on this system, set --enable-opcache=no

解决方案:加载类库目录

shell > echo "/usr/local/lib" >> /etc/ld.so.conf.d/local.conf

shell > echo "/usr/local/lib64" >> /etc/ld.so.conf.d/local.conf

shell > ldconfig

编译并安装到目录

shell > make && make install

查看是否安装到--prefix的目录路径

配置

LAMP和LNMP在使用和配置PHP的一个区别:

PHP-FPM 是PHP的一种服务器管理形式

复制配置文件

shell > cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

shell > cp /root/soft/php-5.6.36/php.ini-development /usr/local/php/etc/php.ini

注意PHP.ini配置文件类型

development配置项多一些 显示语法错误等等信息

production 默认开启项少 生产环境是不要出现错误 暴露服务器目录结构

添加php-fpm运行用户

shell > groupadd www

shell > useradd -s /sbin/nologin -g www -M www

添加启动服务

shell > cp /root/soft/php-5.6.36/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

shell > chmod +x /etc/init.d/php-fpm

shell > chkconfig --add php-fpm

shell > chkconfig php-fpm on

添加环境变量

shell > echo 'PATH=/usr/local/php/bin:$PATH' >> /etc/profile

shell > source /etc/profile

如果使用php语法写的脚本,需要通过/usr/local/php/bin/php 解释执行

编写一个php-cli 脚本测试

执行脚本

网站应用配置

nginx和php进行关联,告诉nginx,php在哪里

$document_root加载的就是root的目录

测试网站index.php

四、产品代码上线

代码上传到服务器

多种方式上传,scp、pscp、sftp、lrzsz

解压

thinkphp5 需要解析绑定域名到public目录

配置server段虚拟机

shell > vim /usr/local/nginx/conf/nginx.conf

检测配置语法并重载配置文件

通过域名测试访问网站应用

如果需要在windows访问,需要解析win下的hosts文件

C:\Windows\System32\drivers\etc

出现403的问题:

403有时候,可能也是因为绑定的访问目录路径有问题,有可能是被配置文件里的deny禁止了。

解决方案:

解决数据库问题

以上问题解决办法:

①登录mysql数据库命令行

创建数据库,导入数据库文件

②修改配置文件

thinkphp5开发下application文件夹下database.php配置文件

项目上线成功

重写解决路径问题

pathinfo路径方式

作业:

  1. LAMP服务器环境单台部署完成
  2. 项目代码上线,并且调试成功,可以正常访问
  3. 需要一个脚本定时检测常用的服务(mysql、nginx、ssh),每个一小时检测,记录是否正常运行,到一个日志文件中。

①检测服务的脚本 返回服务的状态信息

服务在不在线,service status|ps -A|netstat

②每个小时 执行一次 服务状态保存到一个日志中(写一些信息)

crontab

  1. 使用脚本批量检测服务器开启了哪些常用端口