​公司的项目需要部署到一台公网的linux服务器,以便同事们测试小程序。

目标服务器是新搭建的CentOS 8虚拟机,以非docker的方式部署。现记录过程便于日后部署至项目甲方的服务器上,因为甲方的服务器可能未联网,或者网络资源有限(公司按流量算钱的WiFi棒) 宗旨是尽量用U盘拷贝二进制文件以离线的方式安装

首先需要准备环境:

  1. .net5 环境Download .NET 5.0 (Linux, macOS, and Windows) (microsoft.com)下载SDK X64就好
  2. Microsoft SQL Server 14 数据库Index of /rhel/7/mssql-server-2017/ (microsoft.com)
  3. Node-v16.13.0下载 | Node.js (nodejs.org)
  4. 以及一些服务,比如RocketChat或者Nginx

使用github或者gitee创建代码仓库,用于迁移代码至测试服务器,如果公司的git和代码仓库需要同时更新,可以依据下面文章进行设置:

如何同步多个 git 远程仓库 - taadis - 博客园 (cnblogs.com)https://www.cnblogs.com/taadis/p/12170953.html

调整项目源代码

各项安装好之后,新建一个解决方案专用的文件夹,git clone代码至文件夹内

并打开解决方案的WebHost项目目录,并键入dotnet build测试编译情况

​

处理一下错误,以我为例:

比如我在Windows下编写的一些代码文件会以GB2312的编码保存,则Linux下会出现乱码,更改后编译通过。

在Configuration读取的时候用了reloadOnChange为True:

​

那么linux在使用inotify 文件系统的变化通知机制时就会报错超过使用上限的错误:

---> System.IO.IOException: The configured user limit (128) on the number of inotify instances has been reached, or the per-process limit on the number of open file descriptors has been reached

另外linux下的SQL server不支持集成验证方式登录,将连接字符串的 integrated security改为false;并且在后面提供用户名及密码:

User ID=YourProperUserName;Password=YourProperUserPassword;

配置数据库

bash中键入sudo /opt/mssql/bin/mssql-conf setup以启动配置脚本,在一些列配置完成后,输入systemctl status mssql-server以确认SQL server启动成功

​

如果没有成功,需要手动运行systemctl start mssql-server启动服务,运行systemctl enable mssql-server保证开机时能自动启动

安装sql-tool工具:

curl https://packages.microsoft.com/config/rhel/8/prod.repo > /etc/yum.repos.d/msprod.repo
sudo yum install -y mssql-tools unixODBC-devel
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc

验证安装是否成功

sqlcmd -S localhost -U SA -P '<你的数据库密码>'

如果显示>1表示链接成功

​

[可选]建议修改管理员登录密码

sqlcmd -U sa -P oldpassword -Z newpassword

[可选]如果在宿主机上使用数据库管理工具,则需要打开1433端口,以便外部访问

firewall-cmd --zone=public --add-port=1433/tcp --permanent

firewall-cmd --reload

运行数据库迁移

回到解决方案目录的Miguration项目目录中运行迁移,如下运行成功

​

运行完迁移,回到Web.Host项目中运行dotnet run。如下运行成功

​

配置网络  

首先来配置Nginx,打开配置文件:etc/nginx/nginx.conf,修改配置为:

server {
listen 3100;
location / {
proxy_pass http://localhost:21021;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}

然后运行重新加载命令

nginx -s reload

宿主机的浏览器打开http://192.168.137.101:3100/192.168.137.101来测试代理是否畅通,如果无法链接(ERR_CONNECTION_REFUSED)或者出现502(Bad Gateway)错误,则需要对网络配置进行排查:

1. 安装nmap查看对外端口开放情况:

​​

2. 查看nginx错误日志

​​

比如我的情况是没有权限,则参考此方案解决django - (13: Permission denied) while connecting to upstream:[nginx] - Stack Overflowhttps://stackoverflow.com/questions/23948527/13-permission-denied-while-connecting-to-upstreamnginx

我们更改了监听端口到3100,则因为Centos的安全策略可能会出现 [emerg] bind() to 0.0.0.0:XXXX failed (13: Permission denied)的报错,则运行如下命令将3100添加至http的端口配置:

sudo semanage port -a -t http_port_t  -p tcp 3100

添加完成后运行 ,观察到端口3100已经添加完成

semanage port -l | grep http_port_t

​​

再次在宿主机的浏览器打开http://192.168.137.101:3100/192.168.137.101来测试代理是否畅通

查看到主页已经顺利打开

​​

配置宿主机网络

若要在公网上顺利访问,则需要配置宿主机的网络

之后在宿主机将这个端口号添加至端口转发规则:

netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=3100 connectaddress=192.168.137.1 connectport=3100

​​

在宿主机的防火墙设置中,将3100端口添加到入站和出站规则

​

在任意终端访问我的阿里云域名,可以访问到接口,至此所有部署工作已结束!

​

​

[学习笔记]Linux环境下部署 .Net5 程序的更多相关文章

  1. Linux环境下部署完JDK后运行一个简单的Java程序

    前言 前一篇文章详细讲解了如何在Windows环境下安装虚拟机+Linux系统,并且成功部署了JDK. 不过部署完JDK之后,我们判断部署是否成功的依据是看"java -version&qu ...

  2. Django Linux环境下部署CentOS7+Python3+Django+uWSGI+Nginx(含Nginx返回400问题处理、防火墙管理)

    本文将介绍如何在Linux系统上部署Django web项目,本次部署基于下面的架构: CentOS7+ Python3.5 + Django1.11 + uWSGI + Nginx 亲测可行!!按照 ...

  3. linux 环境下部署 Asp.Net Core 项目 访问 oralce 数据库

    1.ASP.NET Core 是一个跨平台的高性能开源框架,可以部署到Linux上,那项目部署在Linux上有哪些好处呢? 1.linux硬件需求小,大部分版本免费,成本低. 2.linux的用户管理 ...

  4. Linux 学习笔记 Linux环境变量初稿

    set命令会显示为某个特定进程设置的所有环境变量,但不包括一些没有设置值的默认环境变量 可以通过等号来给环境变量赋值,值可以是数值或字符串 如果要给变量赋一个含有空格的字符串值,必需用单引号来界定字符 ...

  5. 在Linux环境下部署MySql服务

    之前有下载部署过几次,但是每次都会踩一些坑.特此记录在liunx下部署安装mysql的基本步骤: 1.卸载老版本的mysql find / -name mysql|xargs rm -rf     查 ...

  6. linux环境下部署tomcat

    服务器环境:Red Hat Enterprise Linux Server release 6.5 安装部署包:apache-tomcat-8.0.30.tar.gz.jdk-8u66-linux-x ...

  7. Docker学习笔记之向服务器部署应用程序

    部署的应用仅仅是简单应用程序,使用的是node管理的web应用,具体我也不是很会,当然也可以配置tomcat服务器.这里主要是学习docker.需要客户机和服务机,其中服务机必须要为Linux操作系统 ...

  8. .NetCore~Linux环境下部署

    NetCore正式版已经出现有段时候了,Windows下使用vs2015开发.netCore应用程序,然后通过dotnet程序开启WEB服务,用着很像node.js,当然我们不会于只局限于window ...

  9. linux环境下编译C++ 程序

    GCC(GNU Compiler Collection)是Linux下最主要的编译工具,GCC不仅功能非常强大,结构也异常灵活.它可以通过不同的前端模块来支持各种语言,如:Java.Fortran.P ...

随机推荐

  1. Going Deeper with Convolutions (GoogLeNet)

    目录 代码 Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[C]. computer vision and pattern ...

  2. MCMC using Hamiltonian dynamics

    目录 算法 符号说明 Hamilton方程 物理解释 一些性质 可逆 Reversibility H的不变性 保体积 Volume preservation 辛 Symplecticness 离散化H ...

  3. springboot 项目在idea 中不能起动,但是在eclipse中能起动

    新建的springboot 项目,在idea中用main方法起动时出现如下 : 但是把项目导入到eclispe中却能正常运行,百思不其解,网上一通百度,有的说没有依赖springboot的web 启动 ...

  4. [ SQLAlchemy ] 自我引用型的多对多关系(Self-Referential Many-to-Many Relationship)理解

    参考: https://www.jianshu.com/p/2c6c76f94b88 https://madmalls.com/blog/post/followers-and-followeds/ 实 ...

  5. Thrift框架-具体使用

    1.前言 使用thrift心得: (1)thrift是一个RPC的框架  ,RPC是远程过程调用协议:用于进行可扩展且跨语言的服务的开发,以构建在C++.Java.Python.PHP.Ruby.Er ...

  6. 曾经大量使用的Model1开发模式,虽不常用,但可以帮我们理解JSP

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6513394762370777604/ 1.<JSP页面实际上就是Servlet> 2.<JSP页 ...

  7. vue3.0+vite+ts项目搭建-postcss-pxtorem 实现移动自适应(五)

    这里不考虑大屏,所以不做amfe-flexible的配置 首先是安装依赖 yarn add postcss-loader postcss-pxtorem -D yarn add autoprefixe ...

  8. eclipse中配置Webdriver

    安装JDK,配置好Java环境 下载Eclipse,并完成安装 下载Webdriver的JAR文件(访问Selenium官网,下载Java版的zip文件,并且解压到本地磁盘,解压后文件夹内容如下图:) ...

  9. Termux劣质的入门指南

    直入主题: 1.1 下载安装 Google下载(有条件的用!) F-droid下载(建议使用!) 也可以去酷安下载! 1.2 配置 apt update && apt upgrade ...

  10. [开发笔记usbTOcan]系统架构设计

    SYS.3 | 系统架构设计 系统架构设计过程的目的是建立一个系统体系结构设计,并确定哪些系统需求分配给系统的哪些元素,并根据确定的标准评估系统架构. 系统结构设计需要做一下工作: 开发系统架构设计. ...