nginx自动部署-跨操作系统

news2024/12/28 12:05:22

项目里面有一个需求,就是需要用让nginx进程提供给系统管理一个start,stop和getPid方法,这样系统管理可以自动拉起来nginx,达到自动部署的目的。离线部署同样适用

这样一来,我就需要提供windows版本linux不同版本的nginx源码包,windows版本的好办,就直接从官网下载的,我下载的是nginx1.24.0的稳定版本的,linux版本的就需要自己编译源码包了,因为wget下载的nginx首先产物目录就很不一样,我需要就是跟windows差不多的目录结构,便于我写nginx.conf配置文件

window的产物目录如下

linux产物目录如下

linux的这个产物只需要编译一次,后面部署就直接拷贝这个就可以了,编译的过程如下:

官网下载nginx源码,新建一个文件夹叫Nginx

进入到源码目录 

./configure --prefix=新建的产物目录地址
make -j12
make install 

可能中间需要装 pcre库,wget 下载一下好了。

pcre是因为我的nginx配置需要用到正则,就是html下面有不同文件夹,每个文件夹是一个项目,部署的时候有多少个文件夹部署多少个项目。

这个过程比较曲折,首先nginx没有地方写日志是不会启动成功的,所以配置文件需要指定日志的生成位置,还有配置文件的启动位置,pid等

贴一份windows的配置文件:

worker_processes  1;
error_log  D:/code/system/run/nginx/logs/error.log error;
pid        D:/code/system/run/nginx/logs/nginx.pid;
events { 
   worker_connections  1024; 
} 
http { 
   include       mime.types; 
   default_type  application/octet-stream; 
   sendfile        on; 
   keepalive_timeout  65; 
   access_log D:/code/system/run/nginx/logs/access.log; 
   map $_FilePath $_FilePathForUse { 
       "" "index.html"; 
       "/" "index.html";
       default $filePathFromRemote; 
   }
   	client_body_temp_path D:/code/system/run/nginx/temp/client_temp; 
	proxy_temp_path D:/code/system/run/nginx/temp/proxy_temp; 
	fastcgi_temp_path D:/code/system/run/nginx/temp/fastcgi_temp; 
	uwsgi_temp_path D:/code/system/run/nginx/temp/uwsgi_temp;
	scgi_temp_path D:/code/system/run/nginx/temp/scgi_temp; 
   server { 
       listen 8090; 
	
       location /{ 
           gzip on; 
           gzip_static on; 
           root  D:/code/system/run/nginx/html/; 
           add_header X-URI-Part1 $1; 
           add_header X-URI-Part2 $2; 
           add_header 'Access-Control-Allow-Origin' '*'; 
           add_header 'Access-Control-Allow-Credentials' 'true'; 
           set $module $1; 
           set $filePathFromRemote $2; 
           set $_FilePath "$filePathFromRemote"; 
       } 
       error_page 500 502 503 504 /50x.html; 
   } 
   server { 
        listen 9000; 
		location / {  
			root  D:/code/system/run; 
			autoindex on;  
			add_header Access-Control-Allow-Origin *; 
			add_header Access-Control-Allow-Headers X-Requested-With;  
			add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;  
		}  
    } 
} 

两个server是因为还用到了nginx做文件服务

linux版本的配置文件:

  worker_processes  1;
  
  error_log  ${ROOT_DIR}/run/nginx/logs/error.log error;
  pid         ${ROOT_DIR}/run/nginx/logs/nginx.pid;
  events {
      worker_connections  1024;
  }
  
  
  http {
      include       mime.types;
      default_type  application/octet-stream;
  
      sendfile        on;
      keepalive_timeout  65;
      access_log  ${ROOT_DIR}/run/nginx/logs/access.log; 
  
      map $_FilePath $_FilePathForUse {
          "" "index.html";
          "/" "index.html";
          default $filePathFromRemote;
      }
	  client_body_temp_path ${ROOT_DIR}/run/nginx/client_temp;
	  proxy_temp_path ${ROOT_DIR}/run/nginx/proxy_temp;
	  fastcgi_temp_path ${ROOT_DIR}/run/nginx/fastcgi_temp;
	  uwsgi_temp_path ${ROOT_DIR}/run/nginx/uwsgi_temp;
	  scgi_temp_path ${ROOT_DIR}/run/nginx/scgi_temp;
  
      server {
          listen 8090;
          server_name localhost;

          location ~ ^/([^/]+)(/?.*)$ {
              root  ${ROOT_DIR}/run/nginx/html/;
  
              add_header 'Access-Control-Allow-Origin' '*';
              add_header 'Access-Control-Allow-Credentials' 'true';
  
              set $module $1;
              set $filePathFromRemote $2;
              set $_FilePath "$filePathFromRemote";
          }
  
          error_page 500 502 503 504 /50x.html;
          location = /50x.html {
              root ${ROOT_DIR}/run/nginx/html;
          }
      }
	   server {
          listen 9000;
          server_name localhost;
          location / {
            root ${ROOT_DIR}/run;
            autoindex on;
            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Headers X-Requested-With;
            add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
          }
      }
  }

这两个配置文件的生成是通过脚本自动写入的,用到了各自系统的环境变量

下面就是启动程序了

start方法


    #ifdef _WIN64
    cmd = fmt::format("{}/nginx/nginx -c {}/nginx/conf/nginx.conf -e {}/nginx/logs/error.log",
                      根目录,
                      根目录);
    #endif 

    #ifdef __linux__
    cmd = fmt::format("{}/nginx/sbin/nginx -c {}/nginx/conf/nginx.conf -e {}/nginx/logs/error.log",根目录,根目录,根目录);
    #endif

大概就是通过命令行启动nginx进程,涉及到一些公司里面封装的底层方法,就不方便写了。。

stop方法同理

getPid方法比较复杂,nginx每次启动成功都会往nginx.pid文件写入一个进程号,需要把文件读出来然后返回出去,而且需要自己判断进程是不是存活,不能返回一个没有启动的进程出去。

启动成功之后浏览器输入当前机器的ip地址:8090就能访问到内容

系统管理界面可以管理nginx的启停

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1647293.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git -- reset 详解

引言 当我们在项目中有多个人协同开发时候,难免会出现一些错误的提交或者删除了一些重要文件。我们需要回滚到指定的某一个节点。那些乱七八糟的各种提交都要清除掉。 这时候,我们的指令就要用到了。reset 正文 git reset。它的一句话概括 git-reset …

Java设计模式 _结构型模式_享元模式

一、享元模式 1、享元模式 享元模式(Flyweight Pattern)是一种结构型模式。主要用于减少创建对象的数量,以减少内存占用和提高性能。主要解决有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来&#x…

【C语言】整数,浮点数数据在内存中的存储

Tiny Spark get dazzling some day. 目录 1. 整数在内存中的存储1.1 原码、反码、补码1.1 大小端存储1.2.1 字节序分类1.2.2 判断字节序 2. 浮点数在内存中的存储2.1 浮点数的存储形式2.2 浮点数的 “ 存 ”2.2.1 S2.2.2 E2.2.3 F 2.3 浮点数的 “ 取 ”2.3.1 S2.3.2 E、F 3. 浮…

Docker重启容器失败

Bug描述 [rootVM-12-15-centos ~]# docker restart ca1008fbdf25 Error response from daemon: Cannot restart container ca1008fbdf25: driver failed programming external connectivity on endpoint nginx_java (aded2fc7cbfa784b2e6a39e08d3ae2e7d00c13af88879a8fe7c5007…

软件2班20240506

package com.yanyu;public interface JDBC {void getConnection(); }package com.yanyu;public class Mysql implements JDBC{// ALT ENTER // ctrl o 专门 针对 写 父类方法的Overridepublic void getConnection() {System.out.println("正在 了解…

专家解读 | NIST网络安全框架(1):框架概览

随 着信息技术的快速发展,组织面临着越来越严峻的网络安全挑战。NIST网络安全框架(NIST Cybersecurity Framework,CSF)是一个灵活的综合性指南,旨在协助各类组织建立、改进和管理网络安全策略,以加强网络安…

流畅的python-学习笔记_符合python风格的对象

对象表示形式 查看对象说明,可以通过__repr__和__str__方法,前者主要用于开发者,后者主要用于用户,这两个方法分别对内置函数repr和str函数提供支持 向量类 备选构造方法 classmethod和staticmethod staticmethod用的不是特别…

yum仓库和NFS网络共享服务

一、yum 1.1yum的定义 yum是一个基于RPM包,构建的软件更新机制,能够自动解决软件包之间的依赖关系。解决了日常工作中的大量查找安装依赖包的时间 为什么会有依赖关系的发生 因为linux本身就是以系统简洁为自身优势,所以在安装操作系统的时…

南京观海微电子---电源,从微观角度观看电功率是怎么产生

从微观角度看看无功功率是怎么产生的,在此之前,我们得先知道引起无功功率的元器件是储能器件,主要是电感和电容。 首先,在宏观上,我们知道电感能导致电压超前电流90,可从如下公式推出: 由此可以…

asp.net mvc使用IHttpModule拦截所有请求,包括资源文件

目录 HttpApplication 类 添加App_Code文件夹 MyHttpModel2 Web.config添加配置,在iis模块中生效 项目发布后,察看注册的自定义模块 框架集:.NET Framework 4.7web框架:asp.net mvc 5 HttpApplication 类 HttpApplication 类…

ASP.NET MVC(二) HtmlHelper

强类型 》》》 Form Html.Action() 执行一个Action,并返回html字符串。 Html.ActionLink() 生成一个超链接。 》》》 htmlhelper 扩展方法 /// 扩展方法 三要素 静态类静态方法this 》》》》上面需要引入命名空间, 》》》 不需要引入命名空间 pu…

数据结构:线性表(详解)

线性表 线性表的知识框架: 线性表的定义: 线性表是具有相同数据类型的n(n > 0)个数据元素的有限序列,当n 0时线性表为一个空表。 若用L命名为线性表,则数据集合为L {a1,a2,…,an},其中a1称为表头元素&#xff0c…

【JAVA入门】Day03 - 数组

【JAVA入门】Day03 - 数组 文章目录 【JAVA入门】Day03 - 数组一、数组的概念二、数组的定义2.1 数组的静态初始化2.2 数组的地址值2.3 数组元素的访问2.4 数组遍历2.5 数组的动态初始化2.6 数组的常见操作2.7 数组的内存分配2.7.1 Java内存分配2.7.2 数组的内存图 一、数组的概…

SAPUI5基础知识1 - 概览,库,支持工具,自学教程

1. SAPUI5 概览 1.1 SAPUI5 SAPUI5是一种用于构建企业级Web应用程序的开发框架。它是由SAP开发的,基于HTML5、CSS3和JavaScript技术。 SAPUI5提供了一套丰富的UI控件和工具,使开发人员能够快速构建现代化、可扩展和可定制的应用程序。 它还提供了数据…

cmake进阶:变量的作用域说明一(从函数作用域方面)

一. 简介 如同 C 语言一样,在 cmake 中,变量也有作用域的概念,本文我们就来聊一聊关于 cmake 中变量作用域的问题。 接下来从三个方面进行介绍:函数作用域、目录作用域以及全局作用域。 二. 函数作用域 我把这个作用域叫做函数…

文献速递:深度学习医学影像心脏疾病检测与诊断---利用深度学习进行动态心脏PET的自动帧间患者运动校正

Title 题目 Automatic Inter-frame Patient Motion Correction for Dynamic Cardiac PET Using Deep Learning 利用深度学习进行动态心脏PET的自动帧间患者运动校正 01 文献速递介绍 OSITRON正电子发射断层扫描(PET)心肌灌注成像已被证明相较于其他…

LeetCode-741. 摘樱桃【数组 动态规划 矩阵】

LeetCode-741. 摘樱桃【数组 动态规划 矩阵】 题目描述:解题思路一:动态规划,定推初遍举。解题思路二:倒序循环解题思路三:0 题目描述: 给你一个 n x n 的网格 grid ,代表一块樱桃地&#xff0…

Android硬件加速hardwareAccelerated支持/不支持的绘图接口

Android硬件加速hardwareAccelerated支持/不支持的绘图接口 Android硬件加速也即在Androidmanifest.xml配置开启GPU渲染&#xff1a; <application android:hardwareAccelerated"true" > 配置后&#xff0c;Android将启用GPU渲染&#xff0c;在trace里面看会…

2023 年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷 B(容器云)

#需要资源&#xff08;软件包及镜像&#xff09;或有问题的&#xff0c;可私聊博主&#xff01;&#xff01;&#xff01; #需要资源&#xff08;软件包及镜像&#xff09;或有问题的&#xff0c;可私聊博主&#xff01;&#xff01;&#xff01; #需要资源&#xff08;软件包…

【一起深度学习——kaggle叶子分类】

kaggle 叶子分类 目的&#xff1a;将叶子进行分类。实现步骤&#xff1a;1、数据处理&#xff1a;2、加载数据3、 定义残差块4、定义Resnet模型。5、定义训练以及评估函数&#xff1a;6、开始训练&#xff1a;7、输出结果&#xff1a; 目的&#xff1a;将叶子进行分类。 实现步…