拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
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.sh<<EOF 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/nginx

5.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-g"pid /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.service<<EOF [Unit] # 记录service文件的通用信息 Description=The Nginx HTTP and reverse proxy server # Nginx服务描述信息 After=network.target remote-fs.target nss-lookup.target # Nginx服务启动依赖,在指定服务之后启动 [Service] # 记录service文件的service信息 Type=forking # 标准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服务 KillSignal=SIGQUIT TimeoutStopSec=5 KillMode=process PrivateTmp=true [Install] # 记录service文件的安装信息 WantedBy=multi-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 startdocker

6.3、Dockerfile常用命令及编写

Dockerfile是按照Docker Build语法约定的顺序结构规则脚本文件。通过Dockerfile的编写可以实现Docker镜像的自动化制作,本章所介绍的编译过程均可被编写在Dockerfile中,使用Docker命令打包为Nginx的Docker镜像。

Dockerfile常用命令如下。

  • 1)FROM用于指定构建当前镜像的基础镜像名,使用方法如下。
    FROM centos
  • 2)MAINTAINER用于填写作者声明的描述信息,使用方法如下。
    MAINTAINER Nginx Dockerfile Write by John.Wang
  • 3)ADD命令会向Image中添加文件,支持文件、目录、URL的源,使用方法如下。
ADD /tmp/init_nginx.sh /usr/local/nginx/sbin/
  • 4)COPY用于向镜像内复制文件夹,使用方法如下。
    COPY./tmp
  • 5)ENV设置Container启动后的环境变量,使用方法如下。
    ENVPATH$PATH:/usr/local/nginx/sbin
  • 6)EXPOSE设置Container启动后对外开放的端口,它只相当于一个防火墙开放端口的概念,与实际运行的服务无关,使用方法如下。
    EXPOSE8080
  • 7)RUN用于在制作Image时执行指定的脚本或shell命令,使用方法如下。
    RUM yum-yinstallnet-tools
  • 8)USER设置运行Image或Container的系统用户,使用方法如下。
    USERnginx:nginx
  • 9)VOLUME定义Image挂载点,该挂载点可被其他Container使用,且目录中的内容是共享的,将会同步更新,使用方法如下。
    VOLUME["/data1","/data2"]
  • 10)WORKDIR设置CMD参数指定命令的运行目录,使用方法如下。
    WORKDIR ~/
  • 11)CMD命令是设定于Container启动后执行的命令,可被外部docker run命令参数覆盖,使用方法如下。
CMD"Hello Nginx"
  • 12)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-release&&yum-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/tmp&&wgethttps://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_module=dynamic\--with-http_image_filter_module=dynamic\--with-http_geoip_module=dynamic\--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-stream=dynamic\--with-stream_ssl_module\--with-stream_realip_module\--with-stream_geoip_module=dynamic\--with-libatomic\--with-pcre-jit\--with-stream_ssl_preread_module&&\gmake&&gmakeinstallENVPATH$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.0"nginx -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:'nginx'ports: -80:80 volumes: -'/opt/data/apps/nginx/conf:/usr/local/nginx/conf'
返回列表