[学习笔记]Linux环境下部署 .Net5 程序
公司的项目需要部署到一台公网的linux服务器,以便同事们测试小程序。
目标服务器是新搭建的CentOS 8虚拟机,以非docker的方式部署。现记录过程便于日后部署至项目甲方的服务器上,因为甲方的服务器可能未联网,或者网络资源有限(公司按流量算钱的WiFi棒) 宗旨是尽量用U盘拷贝二进制文件以离线的方式安装
首先需要准备环境:
- .net5 环境Download .NET 5.0 (Linux, macOS, and Windows) (microsoft.com)下载SDK X64就好
- Microsoft SQL Server 14 数据库Index of /rhel/7/mssql-server-2017/ (microsoft.com)
- Node-v16.13.0下载 | Node.js (nodejs.org)
- 以及一些服务,比如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错误日志
我们更改了监听端口到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 程序的更多相关文章
- Linux环境下部署完JDK后运行一个简单的Java程序
前言 前一篇文章详细讲解了如何在Windows环境下安装虚拟机+Linux系统,并且成功部署了JDK. 不过部署完JDK之后,我们判断部署是否成功的依据是看"java -version&qu ...
- Django Linux环境下部署CentOS7+Python3+Django+uWSGI+Nginx(含Nginx返回400问题处理、防火墙管理)
本文将介绍如何在Linux系统上部署Django web项目,本次部署基于下面的架构: CentOS7+ Python3.5 + Django1.11 + uWSGI + Nginx 亲测可行!!按照 ...
- linux 环境下部署 Asp.Net Core 项目 访问 oralce 数据库
1.ASP.NET Core 是一个跨平台的高性能开源框架,可以部署到Linux上,那项目部署在Linux上有哪些好处呢? 1.linux硬件需求小,大部分版本免费,成本低. 2.linux的用户管理 ...
- Linux 学习笔记 Linux环境变量初稿
set命令会显示为某个特定进程设置的所有环境变量,但不包括一些没有设置值的默认环境变量 可以通过等号来给环境变量赋值,值可以是数值或字符串 如果要给变量赋一个含有空格的字符串值,必需用单引号来界定字符 ...
- 在Linux环境下部署MySql服务
之前有下载部署过几次,但是每次都会踩一些坑.特此记录在liunx下部署安装mysql的基本步骤: 1.卸载老版本的mysql find / -name mysql|xargs rm -rf 查 ...
- linux环境下部署tomcat
服务器环境:Red Hat Enterprise Linux Server release 6.5 安装部署包:apache-tomcat-8.0.30.tar.gz.jdk-8u66-linux-x ...
- Docker学习笔记之向服务器部署应用程序
部署的应用仅仅是简单应用程序,使用的是node管理的web应用,具体我也不是很会,当然也可以配置tomcat服务器.这里主要是学习docker.需要客户机和服务机,其中服务机必须要为Linux操作系统 ...
- .NetCore~Linux环境下部署
NetCore正式版已经出现有段时候了,Windows下使用vs2015开发.netCore应用程序,然后通过dotnet程序开启WEB服务,用着很像node.js,当然我们不会于只局限于window ...
- linux环境下编译C++ 程序
GCC(GNU Compiler Collection)是Linux下最主要的编译工具,GCC不仅功能非常强大,结构也异常灵活.它可以通过不同的前端模块来支持各种语言,如:Java.Fortran.P ...
随机推荐
- 【计算机组成】 Quartus II 关于总线data[][]转换多个总线data[]时不成功的问题
xjtuse 直接使用报错: 加中间层不报错:
- 【服务器】【环境搭建】WordPress建立数据库连接时出错---问题---解决
这意味着您在wp-config.php文件中指定的用户名和密码信息不正确,或我们未能在localhost联系到数据库服务器.这可能意味着您主机的数据库服务器未在运行. 您确定用户名和密码正确吗? 您确 ...
- CS5211替代兼容PS8625|普瑞PS8625替代方案|CapstoneCS5211
PS8625是一个DP显示端口 到LVDS转换器芯片,利用GPU和显示端口(DP) 或嵌入式显示端口(eDP) 输出和接受LVDS输入的显示面板.PS8625实现双通道DP输入,双链路LVDS输出.P ...
- 基于Spring MVC + Spring + MyBatis的【图书信息管理系统(二)】
资源下载:https://download.csdn.net/download/weixin_44893902/35123371 练习点设计:添加.删除.修改 一.语言和环境 实现语言:JAVA语言. ...
- DOTween实现缓动变值动效
DOTween.To(getter, setter, to, float duration) 是常用的一个变值方法(一定时间将某变量从起始值到终点值进行变化),可以便捷实现 滚分.涨进度条 等功能 但 ...
- 【java多线程】synchronized和volatile
文章目录 一.synchronized 1.synchronized使用的方法 2.注意 3.不要以字符串作为锁的对象 4.`synchronized`锁的是什么? 二.volatile 1.引出问题 ...
- vue3 父菜单渲染出来了,但是子菜单渲染不出来的原因
子菜单始终渲染不出来,控制台出现警告如下: 在查看框架源码时,发现在渲染时应用了递归.在这个博客找到答案,原因是升级的vue的版本没有升级@vue/compiler-sfc的版本,这两个版本应该保持一 ...
- unittest_认识unittest(1)
unittest是python内置的单元测试框架,具备编写用例.组织用例.执行用例.输出报告等自动化框架的条件. 使用unittest前需要了解该框架的五个概念: 即test case,test su ...
- 详解nginx的请求限制(连接限制和请求限制)
https://www.jb51.net/article/143682.htm 一,背景 我们经常会遇到这种情况,服务器流量异常,负载过大等等.对于大流量恶意的攻击访问,会带来带宽的浪费,服务器压力, ...
- kubernetes 之部署metrics-server
Kubernetes 版本是 1.14 # kubectl version --short Client Version: v1.14.3 Server Version: v1.14.2 下载文件 f ...