当前位置: 首页 > news >正文

nginx自动部署-跨操作系统

项目里面有一个需求,就是需要用让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 _WIN64cmd = 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的启停

相关文章:

nginx自动部署-跨操作系统

项目里面有一个需求,就是需要用让nginx进程提供给系统管理一个start,stop和getPid方法,这样系统管理可以自动拉起来nginx,达到自动部署的目的。离线部署同样适用 这样一来,我就需要提供windows版本linux不同版本的nginx源码包&am…...

组合模式(结构型)

目录 一、前言 二、透明组合模式 三、安全组合模式 四、总结 一、前言 组合模式(Composite Pattern)是一种结构型设计模式,将对象组合成树形结构以表示“部分-整体”得层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 组合模式由以下角色组成…...

Pspice for TI学习

Pspice for TI中PSpice Part Search空白解决方法 配置环境变量 Cad_PSpice_TI_Regr_Srvr https://software-dl.ti.com/pspice/S009 重新安装2023版的Pspice Pspice安装链接 打开新安装的软件即可发现PSpice Part Search可以正常使用了 VSIN各参赛的含义 VOFF直流偏置VAMPL…...

LoRA的原理简介

在文章开始前先澄清一个概念,需要区分形近的单词"LoRa"(long range),这是一项通信技术。熟悉物联网行业的朋友相对会比较熟悉LoRa这项技术,因为有些设备比如电梯的控制就使用了这个技术进行本地数据和命令的…...

安卓使用Fiddler抓包 2024

简介 最近试了一下安卓使用fiddler 抓包,发现https包基本都会丢失。原因是Anandroid 7版本针对ssl安全性做了加强,不认可用户的证书。我们要做的就是把fiddler导出的证书进过处理后放置到系统证书目录下面,这样才能抓包https请求。 这里使用…...

【前端每日基础】day2 const var const的区别

var: 在早期的 JavaScript 中,var 是声明变量的唯一方式。它有以下特点: var 声明的变量是函数作用域(function-scoped),而不是块作用域(block-scoped),这意味着它们在整个函数内部都…...

乡村振兴的文化旅游融合:整合乡村文化资源与旅游资源,发展文化旅游产业,提升美丽乡村的文化内涵和旅游吸引力

一、引言 随着城市化进程的加速和人们精神文化需求的日益增长,乡村旅游逐渐成为旅游市场的新热点。乡村振兴战略的提出,为乡村旅游的发展提供了新的契机。在这一背景下,如何整合乡村文化资源与旅游资源,发展文化旅游产业&#xf…...

力扣题目101:对称二叉树

作者介绍:10年大厂数据\经营分析经验,现任大厂数据部门负责人。 会一些的技术:数据分析、算法、SQL、大数据相关、python 欢迎加入社区:码上找工作 作者专栏每日更新: LeetCode解锁1000题: 打怪升级之旅 python数据分析…...

struct和union大小计算规则

Union 一:联合类型的定义 联合也是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体) 比如:共用了 i 这个较大的空间 二: 联合的…...

数据库课程设计《基于Spring Boot + MyBatis + MySQL 实现Java医院药品管理系统》+源代码

文章目录 源代码下载地址项目介绍项目功能 项目备注源代码下载地址 源代码下载地址 点击这里下载源码 项目介绍 项目功能 库存管理 登记入库的药品。 登记出库的药品。 每日检查库存下限,报警。 每日检查过期的药品,报警并做退回销毁处理。 对有问题…...

【每日力扣】98. 验证二叉搜索树 与 108. 将有序数组转换为二叉搜索树

🔥 个人主页: 黑洞晓威 😀你不必等到非常厉害,才敢开始,你需要开始,才会变的非常厉害 98. 验证二叉搜索树 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&a…...

Django3 个人开发笔记

查询函数 select_related 在 Django ORM 中,select_related 是一个查询性能优化工具,用于解决关联对象的查询效率问题。当你有两个通过外键(ForeignKey)或一对一字段(OneToOneField)连接的模型时&#xf…...

【全开源】Java U U跑腿同城跑腿小程序源码快递代取帮买帮送源码小程序+H 5+公众号跑腿系统

特色功能: 智能定位与路线规划:UU跑腿小程序能够利用定位技术,为用户提供附近的跑腿服务,并自动规划最佳路线,提高配送效率。订单管理:包括订单查询、订单状态更新、订单评价等功能,全行业覆盖…...

物联网实战--平台篇之(五)账户界面

目录 一、界面框架 二、首页(未登录) 三、验证码登录 四、密码登录 五、帐号注册 六、忘记密码 本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/cat…...

9. Django Admin后台系统

9. Admin后台系统 Admin后台系统也称为网站后台管理系统, 主要对网站的信息进行管理, 如文字, 图片, 影音和其他日常使用的文件的发布, 更新, 删除等操作, 也包括功能信息的统计和管理, 如用户信息, 订单信息和访客信息等. 简单来说, 它是对网站数据库和文件进行快速操作和管…...

ELK+kafka日志采集

ElasticSeach(存储日志信息) Logstash(搬运工) Kibana 连接ElasticSeach图形化界面查询日志 ELK采集日志的原理: 在每个服务器上安装LogstashLogstash需要配置固定读取某个日志文件Logstash将日志文件格式化为json的…...

【C++ list所有函数举例如何使用】

C 中的 std::list 是一个双向链表&#xff0c;提供了在列表中添加、删除、访问元素等操作的方法。以下是一些常用的 std::list 函数以及如何使用它们的示例&#xff1a; push_back(const T& value): 在列表的末尾添加一个值为 value 的元素。 std::list<int> mylis…...

HTML5(1)

目录 一.HTML5(超文本&#xff08;链接&#xff09;标记&#xff08;标签<>&#xff09;语言) 1.开发环境&#xff08;写代码&#xff0c;看效果&#xff09; 2.vscode 使用 3.谷歌浏览器使用 4.标签语法 5.HTML基本骨架&#xff08;网页模板&#xff09; 6.标签的…...

【LAMMPS学习】八、基础知识(6.2)LAMMPS GitHub 教程

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…...

专业习惯:避开本地语言,使用通用语言

如果你的目标是走一步看一步&#xff0c;那躺平就得了&#xff0c;学习什么的都没有必要。如果你的目标是远方&#xff0c;那么就需要未雨绸缪。 在工作之中&#xff0c;本地语言及习惯固然可用&#xff0c;但非常局限&#xff0c;随便换一个地方和场景&#xff0c;别人就难以理…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...