如何使用Docker将.Net6项目部署到Linux服务器(三)
目录
四 安装nginx
4.1 官网下载nginx
4.2 下载解压安装nginx
4.3 进行configure
4.4 执行make
4.5 查看nginx是否安装成功
4.6 nginx的一些常用命令
4.6.1 启动nginx
4.6.2 通过命令查看nginx是否启动成功
4.6.3 关闭Nginx
4.6.5 重启Nginx
4.6.6 杀掉所有Nginx进程
4.6.7 指定nginx的配置文件
4.7 验证nginx是否可以正常访问
4.8 解决nginx加载时Pid为空的问题
五 打包vue项目并上传
5.1 打包VUE项目
5.2 配置nginx.conf
5.3 nginx主子配置
5.4 配置vue的Api代理
四 安装nginx
4.1 官网下载nginx
官网地址:nginx: download,我们可以看到下载地址分为三部分:
Mainline version:最新版本
Stable version:最新稳定版本
Legacy versions:以前版本
4.2 下载解压安装nginx
我们在usr/local中创建目录nginx。
cd /usr/local
mkdir nginx
cd /usr/local/nginx
wget http://nginx.org/download/nginx-1.24.0.tar.gz
下载结果如下:
我们将该压缩包解压到当前目录
tar -zxvf nginx-1.24.0.tar.gz
解压后当前目录中多出一个文件夹
4.3 进行configure
进入nginx的根目录,执行命令
cd /usr/local/nginx/nginx-1.24.0
./configure
如果执行configure时报错,执行命令 yum -y install pcre-devel,然后再进行configure
yum -y install pcre-devel
如果执行时还报错,可以执行命令
yum -y install openssl openssl-devel
然后再执行configure
4.4 执行make
还是在该目录下,执行make
make
执行完make之后,执行命令make install
make install
4.5 查看nginx是否安装成功
whereis nginx
出现nginx目录则表示安装成功
4.6 nginx的一些常用命令
以下命令都是在进入安装Nginx的sbin目录中操作,我这里是 /usr/local/nginx/sbin
4.6.1 启动nginx
./nginx
4.6.2 通过命令查看nginx是否启动成功
ps -ef | grep nginx
4.6.3 关闭Nginx
./nginx -s stop
然后我们接着使用命令查看nginx进程是否还在
ps -ef | grep nginx
4.6.5 重启Nginx
./nginx -s reload
4.6.6 杀掉所有Nginx进程
pkill -9 nginx
4.6.7 指定nginx的配置文件
./nginx -t -c /usr/local/nginx/conf/nginx.conf
4.7 验证nginx是否可以正常访问
输入命令:
netstat -anput | grep nginx
我们发现80端口已经被nginx命令占用
我们通过浏览器直接对Ip地址进行访问,如果出现该界面,则说明nginx安装完成
4.8 解决nginx加载时Pid为空的问题
执行 nginx -s reload
加载配置文件的时候报错了。
提示 nginx: [error] invalid PID number "" in "/run/nginx.pid"
输入命令
./nginx -t
我们可以查看到配置文件的位置
执行下 nginx -c /etc/nginx/nginx.conf 重新设置下配置文件就好了,"/run/nginx.pid" 文件里的主进程号也被同步进来了
五 打包vue项目并上传
5.1 打包VUE项目
npm run build
然后我们将dist中的文件上传至linux服务器
5.2 配置nginx.conf
在nginx下的conf中,找到配置文件nginx.conf
在文件中编辑 http{} 块 中的 server{} 块
新增(或者编辑已经不用的)server,这是nginx.conf原始配置文件:
server {listen 80;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location / {root html;index index.html index.htm;}}
listen :代理端口
# server{}中的server_name
server_name:服务名,比较简单的就写服务器ip;
# 注意,还可以写域名,但是需要额外的配置,后面示例会介绍,这个实例是简单的测试服务器的nginx配置、不过多说明# location{}中的root和index
root :资源根目录
index :默认索引页面
附完整的配置文件内容
server {listen 4012;server_name 192.168.191.52;location / {root /usr/local/publish_2023/forum_manage_vue;try_files $uri $uri/ /index.html $uri/ =404;index index.html index.htm;add_header X-Content-Type-Options 'nosniff';#禁止嗅探文件类型add_header Content-Security-Policy "script-src 'self' 'unsafe-eval' 'unsafe-inline' oyxdwx.com:9443 *.aliyun.com unpkg.com g.alicdn.com *.alibaba.com *.aliapp.org *.csslcloud.net *.qq.com *.bokecc.com";#只允许同源下的jsadd_header X-XSS-Protection "1; mode=block";#开启XSS过滤器}}
以我对上面admin的配置为例子,访问首页的地址应该是
http://192.168.191.52:4012
5.3 nginx主子配置
一台nginx服务器,往往不只为我们一个项目使用;尤其在测试环境,多个项目公用一个nginx的情况很多,这个时候,如果多个项目的nginx配置都放在一个conf配置文件中,会特别混乱。所以我们需要对nginx配置文件进行优化
- 在nginx.conf这个主配置中,我们保留所有公共配置,但是所有server不要写在主配置中
- 在nginx/conf文件夹下新建一个文件夹,我这里叫www,在此文件夹下建多个.conf配置文件,具体建多少个看需要,一般是一个项目一个;这些子配置文件,最好以
项目名简称.conf
格式命名、做到见名知义
如下图:
然后我们需要在该配置文件中单独配置该项目的server{}模块
server {listen 4101;server_name 192.168.191.52;location / {root /webserver/nuohua/ui/admin;try_files $uri $uri/ /index.html $uri/ =404;index index.html index.htm;add_header X-Content-Type-Options 'nosniff';#禁止嗅探文件类型add_header Content-Security-Policy "script-src 'self' 'unsafe-eval' 'unsafe-inline' oyxdwx.com:9443 *.aliyun.com unpkg.com g.alicdn.com *.alibaba.com *.aliapp.org *.csslcloud.net *.qq.com *.bokecc.com";#只允许同源下的jsadd_header X-XSS-Protection "1; mode=block";#开启XSS过滤器}}# xxx项目-用户端pcserver {listen 4102;server_name 192.168.191.52;location / {root /usr/local/publish_2023/forum_manage_vue;try_files $uri $uri/ /index.html $uri/ =404;index index.html index.htm;add_header X-Content-Type-Options 'nosniff';#禁止嗅探文件类型add_header Content-Security-Policy "script-src 'self' 'unsafe-eval' 'unsafe-inline' *.bokecc.com class.csslcloud.net *.amap.com *.haoyisheng.com 192.168.191.52";#只允许同源下的jsadd_header X-XSS-Protection "1; mode=block";#开启XSS过滤器}}
在主配置的http模块加include,引入子配置
http {......include /usr/local/nginx/conf/www/*.conf;
}
ok,让我们访问以下地址:
http://192.168.191.52:4012
按照nginx配置,它应该监听4012端口,然后找到根目录/usr/local/publish_2023/forum_manage_vue,访问我们的vue网站,可是却提醒我们,该网页无法显示。
我们检查阿里云的安全组,确定该端口已经放开,但是依然无法访问。这是什么原因呢?
主要问题是云服务器上面的防火墙为了安全起见阻碍了外界的访问,只需要再在防火墙开放访问端口就可以了!
# 查看 开放的端口列表 firewall-cmd --list-ports# 开放 自己的端口 firewall-cmd --zone=public --add-port=自己想开放的端口/tcp --permanent# 关闭自己的端口 firewall-cmd --zone=public --remove-port=自己想开放的端口/tcp --permanent# 重启防火墙 systemctl restart firewalld.service# 再次确认 自己的端口 是否开放 firewall-cmd --list-ports
ok,到这里我们的vue项目就可以正常通过IP地址以及端口的方式进行访问了。
5.4 配置vue的Api代理
我们继续更改我们的forum.conf文件,我们需要在该配置文件中增加代理监视配置信息:
location /api {proxy_set_header Host $http_host;proxy_set_header ?X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;rewrite ^/api/(.*)$ /$1 break; #重写proxy_pass http://127.0.0.1:8030; # 设置代理服务器的协议和地址}
完整配置文件如下:
# forum项目-用户端pcserver {listen 8087;server_name 101.200.90.17;location / {root /usr/local/publish_2023/forum_manage_vue;try_files $uri $uri/ /index.html $uri/ =404;index index.html index.htm;}location /api {proxy_set_header Host $http_host;proxy_set_header ?X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;rewrite ^/api/(.*)$ /$1 break; #重写proxy_pass http://127.0.0.1:8030; # 设置代理服务器的协议和地址}}
至此我们的项目就可以正常使用Ip地址进行访问了,但是这远远不够,我们正常上线的项目都有域名以及Https证书。下文我们将会介绍如何使用nginx部署一个可以正常使用的项目。
相关文章:
如何使用Docker将.Net6项目部署到Linux服务器(三)
目录 四 安装nginx 4.1 官网下载nginx 4.2 下载解压安装nginx 4.3 进行configure 4.4 执行make 4.5 查看nginx是否安装成功 4.6 nginx的一些常用命令 4.6.1 启动nginx 4.6.2 通过命令查看nginx是否启动成功 4.6.3 关闭Nginx 4.6.5 重启Nginx 4.6.6 杀掉所有Nginx进程 4.…...
《Spring Cloud学习笔记:分布式事务Seata》
解决分布式事务的方案有很多,但实现起来都比较复杂,因此我们一般会使用开源的框架来解决分布式事务问题。 在众多的开源分布式事务框架中,功能最完善、使用最多的就是阿里巴巴在2019年开源的Seata了。 1. 初识Seata Seata是 2019 年 1 月…...
MySQL:权限控制
要授予用户帐户权限,可以用GRANT命令。有撤销用户的权限,可以用REVOKE命令。这里以 MySQl 为例,介绍权限控制实际应用。 GRANT授予权限语法: GRANT privilege,[privilege],.. ON privilege_level TO user [IDENTIFIED BY passwo…...
安全生产知识竞赛活动方案
为进一步普及安全生产法律法规知识,增强安全意识,提高安全技能,经研究,决定举办以“加强安全法治、保障安全生产”为主题的新修订《安全生产法》知识竞赛活动,现将有关事项通知如下: 一、活动时间…...
2023 IoTDB Summit:天谋科技 CTO 乔嘉林《IoTDB 企业版 V1.3: 时序数据管理一站式解决方案》...
12 月 3 日,2023 IoTDB 用户大会在北京成功举行,收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题,多位学术泰斗、企业代表、开发者,深度分享了工业物联网时序数据库 IoTDB 的技术创新…...
LangChain.js 实战系列:如何统计大模型使用的 token 使用量和花费
📝 LangChain.js 是一个快速开发大模型应用的框架,它提供了一系列强大的功能和工具,使得开发者能够更加高效地构建复杂的应用程序。LangChain.js 实战系列文章将介绍在实际项目中使用 LangChain.js 时的一些方法和技巧。 统计调用大模型的 to…...
基于多反应堆的高并发服务器【C/C++/Reactor】(中)EventLoop初始化
这个Dispatcher是一个事件分发模型,通过这个模型,就能够检测对应的文件描述符的事件的时候,可以使用epoll/poll/select,前面说过三选一。另外不管是哪一个底层的检测模型,它们都需要使用一个数据块,这个数据块就叫做DispatcherData。除此之外,还有另外一个部分,因为…...
OpenCV(Python)基础—9小时入门版
OpenCV(Python)基础—9小时入门版 # # Author : Mikigo # Time : 2021/12/1 # 一、一句话简介 OpenCV (Open Source Computer Vision Library) 是用 C 语言编写,提供 Python、Java 等语言 API的一个开源计算机视觉库。 二、安装 1、Debian 系使用 apt 安装 O…...
SpringBoot整合Canal
一 linux docker compose版本 1.第一步:基础环境 (1)第1步:安装jak、maven、git、nodejs、npm yum install maven mvn -v 安装maven时会帮安装jdkyum install git git --version 2.27.0yum in…...
用 Python 提取某一个公众号下的所有文章
当我们想要提取某一个公众号下的所有文章时,我们可以借助微信公众平台的开放接口,通过Python编写一个爬虫程序来实现。下面是一个示例代码,以及如何将其转化为一篇详细的微信公众号推文文章。 1. 导入所需库 首先,我们需要导入所…...
鸿蒙4.0实战教学—基础ArkTS(简易视频播放器)
构建主界面 主界面由视频轮播模块和多个视频列表模块组成,效果图如图: VideoData.ets中定义的视频轮播图数组SWIPER_VIDEOS和视频列表图片数组HORIZONTAL_VIDEOS。 // VideoData.ets import { HorizontalVideoItem } from ./HorizontalVideoItem; impo…...
4. 深入 Python 流程控制
4. 深入 Python 流程控制 除了前面介绍的 while 语句,Python 还从其它语言借鉴了一些流程控制功能,并有所改变。 4.1. if 语句 也许最有名的是 if 语句。例如: >>> x int(raw_input("Please enter an integer: "))…...
2000-2022年上市公司股票流动性指标数据/股票流动性Amihud(原始数据+计算代码+计算结果)
2000-2022年上市公司股票流动性指标数据/股票流动性Amihud(原始数据计算代码计算结果) 1、时间:2000-2022年 3、指标:证券代码_没有单位、交易日期_没有单位、日个股交易金额_元、考虑现金红利再投资的日个股回报率_没有单位、交…...
Unity 数据存储PlayerPrefs管理类
Unity 数据存储PlayerPrefs管理类 Unity 数据存储PlayerPrefs管理类实现存取实体类对象存储格式为Json格式Singleton.csInventoryEntity.csDataManager.cs用法如下 Unity 数据存储PlayerPrefs管理类 实现存取实体类对象 存储格式为Json格式 源码如下: Singleton…...
一篇文章学会如何使用 NestJS 过滤器处理系统全局异常情况
前言 在实际的应用开发中,你或许遇到过异常处理机制不统一或错误信息展示混乱的现象。为了解决这些问题,NestJS提供了一个优雅的解决方案:过滤器(Filter)。本文将从实际出发,向你介绍NestJS过滤器的基本概…...
ubuntu 守护进程 supervisor
# 安装 apt-get install supervisor# 检查 echo_supervisord_conf# 查看配置文件所在位置 # [include] # files /etc/supervisor/conf.d/*.conf ps -ef | grep supervisorcd /etc/supervisor/conf.d/lscat frp.conf[program:frp] command /data/work/frp/frpc -c /data/work/…...
SparkStreaming_window_sparksql_reids
1.5 window 滚动窗口滑动窗口 window操作就是窗口函数。Spark Streaming提供了滑动窗口操作的支持,从而让我们可以对一个滑动窗口内的数据执行计算操作。每次掉落在窗口内的RDD的数据,会被聚合起来执行计算操作,然后生成的RDD,会…...
爬虫工作量由小到大的思维转变---<第二十四章 Scrapy的`统计数据`收集stats collection ---12月26日补>
前言: 前两篇是讲的数据诊断分析,还有一篇深挖解决内存泄漏的文章,目前我还没整理汇编出来;但是,想到分析问题的时候,忽然觉得爬虫的数据统计好像也挺重要;于是,心血来潮准备来插一篇这个------让大家对日常scrapy爬的数据,做到心里有数!不必自己去搅破脑汁捣腾日志,敲计算器了…...
Kafka:本地设置
这是设置 Kafka 将数据从 Elasticsearch 发布到 Kafka 主题的三部分系列的第一部分;该主题将被 Neo4j 使用。第一部分帮助您在本地设置 Kafka。第二部分将讨论如何设置Elasticsearch将数据发布到Kafka主题。最后 将详细介绍如何使用连接器订阅主题并使用数据。 Kafka Kafka 是…...
.NetCore NPOI 读取excel内容及单元格内图片
由于数据方提供的数据在excel文件中不止有文字内容还包含图片信息,于是编写相关测试代码,读取excel文件内容及图片信息. 本文使用的是 NPOI-2.6.2 版本,此版本持.Net4.7.2;.NetStandard2.0;.NetStandard2.1;.Net6.0。 测试文档内容…...
TCP/UDP协议
1. 请解释TCP和UDP的主要区别。 TCP和UDP都是位于传输层的协议,具有不同的特点和应用场景。以下是它们的主要区别: 连接方式:TCP是面向连接的协议,这意味着在数据传输之前需要先建立连接。这通常通过三次握手来建立连接ÿ…...
3D 渲染如何帮助电商促进销售?
在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 3D 渲染图像因其高转化率而成为亚马逊卖家的最新趋势。它是电子商务平…...
使用栈求表达式的值【数据结构】
中缀表达式转后缀表达式 转换流程: 初始化一个运算符栈。自左向右扫描中缀表达式,当扫描到操作数时直接连接到后缀表达式上。当扫描到操作符时,和运算符栈栈顶的操作符进行比较。如果比栈顶运算符高,则入栈。如果比栈顶运算符低…...
{MySQL}索引事务和JDBC
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、索引1.1索引是什么1.2作用1.3代码 二、事务2.1什么是事务2.2使用 三.JDBC总结 前言 接着上次,继续讲下MySQL 提示:以下是本篇文章正…...
Qt designer界面和所有组件功能的详细介绍(全!!!)
PyQt5和Qt designer的详细安装教程:https://blog.csdn.net/qq_43811536/article/details/135185233?spm1001.2014.3001.5501 目录 1. 界面介绍2. Widget Box 常用组件2.1 Layouts(布局)2.2 Spacers(间隔器)2.3 Item V…...
mysql_存储过程
举例子 createdefiner root% procedure insert_batch_test(IN START int(10), IN max_num int(10)) BEGINDECLAREi INT DEFAULT 0;SET autocommit 0;REPEATSET i i 1;INSERT INTO test (std, score)VALUES (CEILING(RAND() * 10 100), CEILING(RAND() * 50 50));UNTIL i …...
uboot学习及内核更换_incomplete
官方文档 在前面 文章目录 uboot常见命令学习环境变量网络控制台uboot标准启动其他 升级uboot或内核bin和uimg以及booti和bootm的区别制作uImage更换内核更换uboot后续计划 uboot常见命令学习 环境变量 Environment Variables环境变量 autostart 如果值为yes,则会…...
KVM 自动化脚本的使用及热/冷迁移
一、介绍 目录结构介绍 [rootkvm-server kvm]# tree -L 2 . ├── control # 控制脚本目录 │ ├── KVMInstall.sh # kvm服务安装脚本 │ ├── VMHost.sh # kvm虚拟机克隆脚本 │ └── VMTemplate.sh # kvm模板机安装脚本 ├── mount # 此目录保持为空&…...
Unity中Shader裁剪空间推导(在Shader中使用)
文章目录 前言一、在Shader中使用转化矩阵1、在顶点着色器中定义转化矩阵2、用 UNITY_NEAR_CLIP_VALUE 区分平台矩阵3、定义一个枚举用于区分当前是处于什么相机 二、我们在DirectX平台下,看看效果1、正交相机下2、透视相机下3、最终代码 前言 在上一篇文章中&…...
ES的使用(Elasticsearch)
ES的使用(Elasticsearch) es是什么? es是非关系型数据库,是分布式文档数据库,本质上是一个JSON 文本 为什么要用es? 搜索速度快,近乎是实时的存储、检索数据 怎么使用es? 1.下载es的包(环境要…...
摄影网站模板源码/百度搜不干净的东西
每天有数以百万计的人使用 Python ,用户群呈现出指数级增长,几乎没有下降的趋势。无论在什么行业,为了获取更多的职业发展可能,Python 都成为了隐形的必备技能。那么,你学 Python 是否遇到过:初学 Python 一…...
乌鲁木齐市市政工程建设处网站/外贸seo是什么意思
1.5Java设计模式快速入门之建造者模式 1.5.1概念 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 一个 Builder 类会一步一步构造最终的…...
预约营销型网站建设专家/阿里云域名购买
1.ChatGPT简介 ChatGPT是美国人工智能研究实验室OpenAI新推出的一种人工智能技术驱动的自然语言处理工具,使用了Transformer神经网络架构,也是GPT-3.5架构,这是一种用于处理序列数据的模型,拥有语言理解和文本生成能力,…...
网站建设与管理好找工作吗/百度推广开户需要多少钱
2019独角兽企业重金招聘Python工程师标准>>> Navicat for Oracle是有关Oracle数据库的客户端工具。通过这个客户端,我们可以图形方式对Oracle数据库进行操作。 说 明我们此次试验的Oracle数据库版本是Oracle 10G Express Edition,也即是我们平…...
寿光专业做网站的公司有哪些/唯尚广告联盟平台
本文翻译自:How to sum a list of integers with java streams?I want to sum a list of integers. 我想总结一个整数列表。 It works as follows, but the syntax does not feel right. 它的工作原理如下,但语法感觉不对。 Could the code be optimize…...
厦门网站建设有哪些公司/进入百度app
参照网上各大神文章,自己总结了下如下,欢迎大家指正与交流!(主参照:http://blog.csdn.net/brokge/article/details/9045629) 1. 到 github下载开源库 (https://github.com/zxing/zxing) 2. 得到代码后只需要…...