ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Nginx应用与运维——Nginx编译及部署(部署)

Nginx应用与运维——Nginx编译及部署(部署) Nginx编译及部署5、Nginx部署5.1、环境配置5.2、命令行参数5.3、注册系统服务6、Nginx的Docker容器化部署6.1、Docker简介6.2、Docker环境安装6.3、Dockerfile常用命令及编写6.4、Nginx Docker运行5、Nginx部署5.1、环境配置Nginx编译成功后为了便于操作维护建议把Nginx执行文件的路径添加到环境变量中可以通过如下命令完成。cat/etc/profile.d/nginx.shEOF PATH$PATH:/usr/local/nginx/sbin EOFsource/etc/profile对于OpenResty为了保持与Nginx的维护一致性可以将Nginx目录软连接到/usr/local目录下。ln-s/usr/local/openresty/nginx /usr/local/nginx在CentOS操作系统中配置文件通常放在/etc目录下建议将Nginx的conf目录软连接到/etc目录下。ln-s/usr/local/nginx/conf /etc/nginx5.2、命令行参数Nginx执行文件的命令行参数可以通过-h参数获取Nginx命令行参数如下Usage: nginx[-?hvVtTq][-s signal][-c filename][-p prefix][-g directives]Options: -?,-h:thishelp-v:show version andexit-V:show version and configure optionsthenexit-t:testconfiguration andexit-T:testconfiguration, dump it andexit-q:suppress non-error messages during configuration testing-ssignal:send signal to a master process: stop, quit, reopen, reload-pprefix:setprefix path(default: /usr/local/openresty/nginx/)-cfilename:setconfigurationfile(default: conf/nginx.conf)-gdirectives:setglobal directives out of configurationfile上述代码中的主要参数解释说明如下。-v参数显示Nginx执行文件的版本信息。-V参数显示Nginx执行文件的版本信息和编译配置参数。-t参数进行配置文件语法检查测试配置文件的有效性。-T参数进行配置文件语法检查测试配置文件的有效性同时输出所有有效配置内容。-q参数在测试配置文件有效性时不输出非错误信息。-s参数发送信号给Nginx主进程信号可以为以下4个。stop快速关闭。quit正常关闭。reopen重新打开日志文件。reload重新加载配置文件启动一个加载新配置文件的Worker Process正常关闭一个加载旧配置文件的Worker Process。-p参数指定Nginx的执行目录默认为configure时的安装目录通常为/usr/local/nginx。-c参数指定nginx.conf文件的位置默认为conf/nginx.conf。-g参数外部指定配置文件中的全局指令。应用示例如下nginx-t# 执行配置文件检测nginx-t-q# 执行配置文件检测且只输出错误信息nginx-sstop# 快速停止Nginxnginx-squit# 正常关闭Nginxnginx-sreopen# 重新打开日志文件nginx-sreload# 重新加载配置文件nginx-p/usr/local/newnginx# 指定Nginx的执行目录nginx-c/etc/nginx/nginx.conf# 指定nginx.conf文件的位置# 外部指定pid和worker_processes配置指令参数nginx-gpid /var/run/nginx.pid; worker_processes sysctl -n hw.ncpu;Tengine的扩展命令如下nginx-m# 列出所有的编译模块nginx-l# 列出支持的所有指令5.3、注册系统服务CentOS系统环境中使用systemd进行系统和服务管理可以按需守护进程并通过systemctl命令进行systemd的监测和控制。为了方便Nginx应用进程的维护和管理此处把Nginx注册成系统服务由systemd进行服务管理命令如下。cat/usr/lib/systemd/system/nginx.serviceEOF [Unit] # 记录service文件的通用信息 DescriptionThe Nginx HTTP and reverse proxy server # Nginx服务描述信息 Afternetwork.target remote-fs.target nss-lookup.target # Nginx服务启动依赖在指定服务之后启动 [Service] # 记录service文件的service信息 Typeforking # 标准UNIX Daemon使用的启动方式 PIDFile/run/nginx.pid # Nginx服务的pid文件位置 ExecStartPre/usr/bin/rm -f /run/nginx.pid # Nginx服务启动前删除旧的pid文件 ExecStartPre/usr/local/nginx/sbin/nginx -t -q # Nginx服务启动前执行配置文件检测 ExecStart/usr/local/nginx/sbin/nginx -g pid /run/nginx.pid; # 启动Nginx服务 ExecReload/usr/local/nginx/sbin/nginx -t -q # Nginx服务重启前执行配置文件检测 ExecReload/usr/local/nginx/sbin/nginx -s reload -g pid /run/nginx.pid; # 重启Nginx服务 ExecStop/bin/kill -s HUP$MAINPID# 关闭Nginx服务 KillSignalSIGQUIT TimeoutStopSec5 KillModeprocess PrivateTmptrue [Install] # 记录service文件的安装信息 WantedBymulti-user.target # 多用户环境下启用 EOFsystemctlenablenginx# 将Nginx服务注册为系统启动后自动启动systemctl start nginx# 启动Nginx服务命令systemctl reload nginx# reload Nginx服务命令systemctl stop nginx# stop Nginx服务命令systemctl status nginx# 查看Nginx服务运行状态命令6、Nginx的Docker容器化部署6.1、Docker简介Docker是一款基于Go语言开发的开源应用容器引擎Docker可以让用户将需要运行的应用服务和依赖环境打包在一个小体积的应用容器中被打包的容器可以移植到任意可运行Docker环境的操作系统中极大地缩短了应用服务编译和部署所需的时间。Docker的虚拟化机制也使得在不同操作系统环境下编译的应用服务都可运行在同一Docker宿主机中。Docker中有两个基本概念镜像(Image)和容器(Container)。Docker使用AUFS文件系统进行文件管理这种文件系统的文件是分层叠加存储的镜像是存储在只读层的文件而运行的容器则是镜像运行的实例它的实例文件存储在可写层中所以通常需要先通过Docker命令制作镜像然后再通过Docker编排命令将镜像运行成容器。6.2、Docker环境安装Docker的虚拟化机制是基于操作系统的进程级别虚拟化技术所以Docker也可以安装在其他虚拟机中。在物理机或云环境的CentOS 7环境下均可通过yum命令实现快速安装安装命令如下。# 安装yum工具yuminstall-yyum-utils# 安装Docker官方yum源yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo# 安装Docker及docker-compose应用yuminstall-ydocker-cedocker-compose# 设置Docker服务开机自启动systemctlenabledocker# 启动Docker服务systemctl startdocker6.3、Dockerfile常用命令及编写Dockerfile是按照Docker Build语法约定的顺序结构规则脚本文件。通过Dockerfile的编写可以实现Docker镜像的自动化制作本章所介绍的编译过程均可被编写在Dockerfile中使用Docker命令打包为Nginx的Docker镜像。Dockerfile常用命令如下。1)FROM用于指定构建当前镜像的基础镜像名使用方法如下。FROM centos2)MAINTAINER用于填写作者声明的描述信息使用方法如下。MAINTAINER Nginx Dockerfile Write by John.Wang3)ADD命令会向Image中添加文件支持文件、目录、URL的源使用方法如下。ADD /tmp/init_nginx.sh /usr/local/nginx/sbin/4)COPY用于向镜像内复制文件夹使用方法如下。COPY./tmp5)ENV设置Container启动后的环境变量使用方法如下。ENVPATH$PATH:/usr/local/nginx/sbin6)EXPOSE设置Container启动后对外开放的端口它只相当于一个防火墙开放端口的概念与实际运行的服务无关使用方法如下。EXPOSE80807)RUN用于在制作Image时执行指定的脚本或shell命令使用方法如下。RUM yum-yinstallnet-tools8)USER设置运行Image或Container的系统用户使用方法如下。USERnginx:nginx9)VOLUME定义Image挂载点该挂载点可被其他Container使用且目录中的内容是共享的将会同步更新使用方法如下。VOLUME[/data1,/data2]10)WORKDIR设置CMD参数指定命令的运行目录使用方法如下。WORKDIR /11)CMD命令是设定于Container启动后执行的命令可被外部docker run命令参数覆盖使用方法如下。CMDHello Nginx12)ENTRYPOINT命令是设定于Container启动后执行的命令不可被外部docker run命令参数覆盖。ENTRYPOINT /usr/local/nginx/sbin/init_nginx.sh现在可以按照Dockerfile的命令格式编写Dockerfile了基础镜像选用CentOS 7, Nginx选用Nginx的扩展版本OpenResty 1.15.8.2。Nginx镜像Dockerfile脚本如下FROM centos:centos7 MAINTAINER Nginx Dockerfile Write by John.Wang RUN yum-yinstallepel-releaseyum-yinstallwgetgccmakepcre-devel\zlib-devel openssl-devel libxml2-devel libxslt-devel luajit GeoIP-devel\gd-devel libatomic_ops-devel luajit-devel perl-devel perl-ExtUtils-Embed RUNcd/tmpwgethttps://openresty.org/download/openresty-1.15.8.2.tar.gz\tarzxmf openresty-1.15.8.2.tar.gz\cdopenresty-1.15.8.2\./configure\--with-threads\--with-file-aio\--with-http_ssl_module\--with-http_v2_module\--with-http_realip_module\--with-http_addition_module\--with-http_xslt_moduledynamic\--with-http_image_filter_moduledynamic\--with-http_geoip_moduledynamic\--with-http_sub_module\--with-http_dav_module\--with-http_flv_module\--with-http_mp4_module\--with-http_gunzip_module\--with-http_gzip_static_module\--with-http_auth_request_module\--with-http_random_index_module\--with-http_secure_link_module\--with-http_degradation_module\--with-http_slice_module\--with-http_stub_status_module\--with-streamdynamic\--with-stream_ssl_module\--with-stream_realip_module\--with-stream_geoip_moduledynamic\--with-libatomic\--with-pcre-jit\--with-stream_ssl_preread_module\gmakegmakeinstallENVPATH$PATH:/usr/local/nginx/sbin RUNln-s/usr/local/openresty/nginx /usr/local/nginx RUNln-sf/dev/stdout /usr/local/nginx/logs/access.log\ln-sf/dev/stderr /usr/local/nginx/logs/error.log EXPOSE80ENTRYPOINT[nginx,-g,daemon off;]在Dockerfile文件的同一目录下执行如下命令构建Nginx的Dokcer镜像。dockerbuild-tnginx:v1.0.在脚本执行结束后当尾行出现“Successfully taggednginx:v1.0”时表示Dokcer镜像已经构建成功可以通过Docker命令docker images查看镜像是否已经存在于本地的镜像仓库中查询结果如图所示。6.4、Nginx Docker运行Docker镜像在AUFS文件系统中是只读的需要通过docker run命令以容器方式运行脚本如下dockerrun--namenginx-p80:80-dnginx:v1.0dockerps-aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 26ffd54950e8 nginx:v1.0nginx -g daemon of…7seconds ago Up7seconds0.0.0.0:80-80/tcp nginx通过curl命令访问本地80端口可以返回OpenResty的提示信息。Docker容器如果被移除所有的修改文件同样会被删除为了把变更的配置保存下来需要把配置文件目录复制出来进行持久化所以需要通过卷挂载的方式实现配置的使用和维护脚本如下mkdir-p/opt/data/apps/nginx/dockercpnginx:/usr/local/nginx/conf /opt/data/apps/nginx/dockerstop nginxdockerrmnginxdockerrun--namenginx-hnginx-p80:80-v/opt/data/apps/nginx/conf:/usr/local/nginx/conf-dnginx:v1.0如图所示Docker容器已经把本地目录挂载到容器中。在使用docker run命令时每次都需要使用很多参数为了便于维护可以用Docker-Compose工具进行容器编排Docker-Compose是使用基于YAML语法的脚本配置文件来实现容器的运行管理的。Nginx的docker-compose.yaml脚本文件如下nginx: image: nginx:v1.0 restart: always container_name: nginx hostname:nginxports: -80:80 volumes: -/opt/data/apps/nginx/conf:/usr/local/nginx/conf
返回列表