dotNet core 应用部署至 centos(超详解附截图)
文章来源:公众号-智能化IT系统。
|
需要安装的插件以及支撑架构 |
1.dotnetSDK
dotnet 相关命令是属于 .NET Core command-line (CLI) 的一部分,Microsoft 为我们提供了这个命令行工具以供我们在开发程序中使用,它主要用来进行对代码的编译、NuGet 包的管理、程序的运行、测试等等。
2.jexus
Jexus 是Linux平台上 的一款免费的ASP.NET WEB服务器。它是 Linux、Unix、FreeBSD等非Windows系统架设 ASP.NET WEB 服务器的核心程序,具备反向代理、入侵检测等重要功能。拥有IIS和其它Web服务器所不具备的高度的安全性
3.supervisord
supervisord 是用Python实现的一款非常实用的进程管理工具,在批量服务化管理时特别有效。可以将非Daemon的应用转为Daemon程序。
|
安装dotNetSDK |
执行命令
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
sudo yum update
sudo yum install libunwind libicu
sudo yum install dotnet-sdk-2.1.200
安装对应的dotnet运行时,这次开发用到的是 2.0.6,参考地址:
https://www.microsoft.com/net/download/linux-package-manager/centos/runtime-2.0.6
执行命令
sudo yum install dotnet-runtime-2.0.6
|
安装Jexus |
curl https://jexus.org/release/x64/install.sh|sh
cd /usr/jexus/siteconf
cp default lottery
#lottery是配置名称,不同网站名称不同
vim lottery
修改的内容参考:
port=80
root=/ /dotnet/webAPP/admin1.lottery.com/
hosts=*,admin2.lottery.com #OR your.com,*.your.com
# addr=0.0.0.0
# CheckQuery=false
NoLog=true
AppHost={CmdLine=/dotnet/webAPP/admin1.lottery.com/Lottery.WEB.dll;AppRoot=/dotnet/webAPP/admin1.lottery.com;Port=5001}
#这一行数据可以不管他,配置https时候用到
# UseHttps=true
# ssl.certificate=/x/xxx.crt #or pem
# ssl.certificatekey=/x/xxx.key
# ssl.protocol=TLSv1.0 # TLSv1.1 or TLSv1.2...
# ssl.ciphers=
重启读取配置文件
sh /usr/jexus/jws restart
重启读取配置文件之后,本地机器做好host文件映射即可通过域名方式访问该站点
设置jexus开机自启动
参考地址:http://www.bubuko.com/infodetail-1295747.html
cd /etc/init.d
vim jws
编辑如下:
#!/bin/bash
#chkconfig: 2345 80 05
#description:jws
#
. /etc/rc.d/init.d/functions
case "$1" in
start)
echo "Jexus Start.."
/usr/jexus/jws start
;;
stop)
echo "Jexus Stop.."
/usr/jexus/jws stop
;;
restart)
echo "Jexus Restart"
/usr/jexus/jws restart
;;
status)
/usr/jexus/jws status
;;*)
exit 1
;;
esac
exit $RETVAL
添加权限
chmod 766 jws
添加服务
chkconfig --add jws
|
安装Supervisord |
参考地址:https://www.cnblogs.com/hobinly/p/7382038.html
yum install python-setuptools
easy_install supervisor
配置supervisor
在etc下创建目录,并赋权限
mkdir -m 700 -p /etc/supervisor
在目录“ /etc/supervisor”下创建配置文件
echo_supervisord_conf > /etc/supervisor/supervisord.conf
修改配置文件
vim /etc/supervisor/supervisord.conf
在文件末尾添加,注意首尾需无空格,需顶格
[include]
files=/etc/supervisor/conf.d/*.conf
在目录“/etc/supervisor”下创建dotnet core 进程配置文件存放目录“conf.d”
mkdir -m 700 /etc/supervisor/conf.d
创建进程配置文件
vim /etc/supervisor/conf.d/lottery.conf
编辑内容:
[program:Lottery.WEB]
command=/bin/bash -c "dotnet Lottery.WEB.dll"
directory=/dotnet/webAPP/admin1.lottery.com/
stderr_logfile=/var/log/Lottery.error.log
stdout_logfile=/var/log/Lottery.stdout.log
environment=ASPNETCORE_ENVIRONMENT=Production
user=root
stopsignal=INT
autostart=true
autorestart=true
startsecs=1
具体参数说明如下:
[program:Lottery.WEB] ;显示名称
command=/bin/bash -c "dotnet MyDotNetName.dll" ;运行命令,启动dotnet进程
directory=/usr/PublishOutput/ ;MyDotNetName目录
stderr_logfile=/var/log/Lottery.error.log ;错误日志文件
stdout_logfile=/var/log/Lottery.stdout.log ;日志文件
environment=ASPNETCORE_ENVIRONMENT=Production ;进程环境变量
user=root ;进程执行用户
autostart=true ;自动启动 autorestart=true ;是否自动重启
startsecs=1 ;自动重启间隔时间
备注:command=/bin/bash -c "dotnet Lottery.WEB.dll"
可以改成 command=dotnet /dotnet/webAPP/admin1.lottery.com/dotnet Lottery.WEB.dll
创建supervisor 自启动服务
vim /etc/systemd/system/supervisor.service
编辑内容:
[Unit]
Description=supervisor
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
使配置生效
systemctl daemon-reload
设置服务开机启动,即设置enable
systemctl enable supervisor.service
启动服务
systemctl start supervisor.service
验证dotnet进程是否启动,使用命令“ps -ef | grep dotnet”查看dotnet 是否运行
ps -ef | grep dotnet
root 1549 2529 0 17:17 pts/0 00:00:00 grep --color=auto dotnet
root 27795 27764 0 17:07 ? 00:00:02 dotnet Lottery.WEB.dll
supervisor远程管理
使用命令“vim /etc/supervisor/supervisord.conf”修改配置文件,如下设置
[inet_http_server]
port=192.168.1.71:9001 ;ip 加端口
username=admin ;登陆账号,可以不设
password=123456 ;登陆账户,可以不设
重启服务,就可以访问了,注意防火墙是否对端口9001开放。
也可以设置成
[inet_http_server]
port=*:9001
username=admin ;登陆账号,可以不设
password=123456 ;登陆账户,可以不设
|
问题汇总 |
图片验证码报错
解决:
yum install libgdiplus-devel
注意:
yum install libgdiplus 后,在centos7 下,程序并不能运行成功还是报错,查看libgdiplus安装情况
rpm -qa |grep libgdiplus
rpm -ql libgdiplus-2.10-9.el7.x86_64
在/usr/lib64下缺少libgdiplus.so文件
Centos7 需要通过安装libgdiplus-devel来解决
yum install autoconf automake libtool
yum install freetype-devel fontconfig libXft-devel
yum install libjpeg-turbo-devel libpng-devel giflib-devel libtiff-devel libexif-devel
yum install glib2-devel cairo-devel
git clone https://github.com/mono/libgdiplus
cd libgdiplus
./autogen.sh
make
make install
cd /usr/lib64/
ln -s /usr/local/lib/libgdiplus.so gdiplus.dll
错误一:
type init 错误。提示找不到libgdiplus组件
Make solution 1:
ln -s /usr/local/lib/libgdiplus.so /usr/lib64/libgdiplus.so
ln -s /usr/local/lib/libgdiplus.so /usr/libgdiplus.so
验证码乱码问题:
如果验证码乱码,请确认生成验证码的字体库是否存在服务器中
|
注意事项、扩展延伸 |
关于更新应用
Dotnet程序在运行当中,如果需要更新 dotnetCore应用,将新打包的应用直接覆盖到部署的路径下,在从supervisord 9001端口中重启指定的应用,或者在服务器上执行命令
supervisorctl -c /etc/supervisor/supervisord.conf restart Lottery.WEB
关于dotnetCore WEB应用设置不同的端口
修改Program.cs文件
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseKestrel()
.UseStartup<Startup>()
.UseUrls("http://*:5001")
.Build();
}
关于部署 https的WEB应用
在部署https WEB应用的时候,我已经拿到了 一个后缀为pem文件还有一个后缀为key的文件
第一步:需要这两个文件生成后缀为pfx的文件,并设置生成 pfx文件的密码
centos系统下执行命令
openssl pkcs12 -export -out iiscert.pfx -inkey private.key -in public.pem
然后会让你输入密码(密码不要忘记了)
第二步:修改jexus站点配置信息
vim /etc/supervisor/conf.d/lottery.conf
编辑如下:
UseHttps=true
ssl.certificate=/dotnet/httpsKey/public.pem #crt or pem
ssl.certificatekey=/dotnet/httpsKey/private.key
ssl.protocol=TLSv1.2 # TLSv1.1 or TLSv1.2...
#ssl.ciphers=
wp! 保存
修改程序 Program.cs文件
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseKestrel(options => options.Listen(IPAddress.Any, 5003, listenOptions =>
{
listenOptions.UseHttps(new X509Certificate2("/dotnet/httpsKey/iiscert.pfx", "123456"));
}))
.UseStartup<Startup>()
.Build();
重新部署到服务器,并重启supervisor对应的进程
关于部署非WEB应用
如果需要部署到非WEB应用程序,则不需要执行 jexus的步骤,直接在 supervisor上新增一个进程配置文件(/etc/supervisor/conf.d/ 这个目录下一个*,conf文件代表一个进程配置)
公众号-智能化IT系统。每周都有技术文章推送,包括原创技术干货,以及技术工作的心得分享。扫描下方关注。
dotNet core 应用部署至 centos(超详解附截图)的更多相关文章
- Docker+Redis镜像的原理以及部署安装(超详解附截图)
文章来源:公众号-智能化IT系统. 一. DOCKER介绍 Docker简介 (1)Docker 是一个开源的应用容器引擎,基于 Go 语言,并遵从Apache2.0协议开源. (2)Docker 可 ...
- centos LVM详解
title: centos LVM详解 date: 2018-04-24 14:00:03 tags: [linux,centos,LVM] --- 知识了解 LVM关系图 fdisk命令详解 [ro ...
- (转)Centos7上部署openstack ocata配置详解
原文:http://www.cnblogs.com/yaohong/p/7601470.html 随笔-124 文章-2 评论-82 Centos7上部署openstack ocata配置详解 ...
- Ubuntu14.04下Mongodb官网安装部署步骤(图文详解)(博主推荐)
不多说,直接上干货! 在这篇博客里,我采用了非官网的安装步骤,来进行安装.走了弯路,同时,也是不建议.因为在大数据领域和实际生产里,还是要走正规的为好. Ubuntu14.04下Mongodb(离线安 ...
- Ubuntu16.04下Mongodb官网安装部署步骤(图文详解)(博主推荐)
不多说,直接上干货! 在这篇博客里,我采用了非官网的安装步骤,来进行安装.走了弯路,同时,也是不建议.因为在大数据领域和实际生产里,还是要走正规的为好. Ubuntu16.04下Mongodb(离线安 ...
- Mybatis案例超详解(上)
Mybatis案例超详解(上) 前言: 本来是想像之前一样继续跟新Mybatis,但由于种种原因,迟迟没有更新,快开学了,学了一个暑假,博客也更新了不少,我觉得我得缓缓,先整合一些案例练练,等我再成熟 ...
- Python3调用C程序(超详解)
Python3调用C程序(超详解) Python为什么要调用C? 1.要提高代码的运算速度,C比Python快50倍以上 2.对于C语言里很多传统类库,不想用Python重写,想对从内存到文件接口这样 ...
- Ubuntu14.04下Mongodb(离线安装方式|非apt-get)安装部署步骤(图文详解)(博主推荐)
不多说,直接上干货! 说在前面的话 首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu LTS \n \l r ...
- Ubuntu16.04下Mongodb(离线安装方式|非apt-get)安装部署步骤(图文详解)(博主推荐)
不多说,直接上干货! 说在前面的话 首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu LTS \n \l r ...
随机推荐
- [Swift]LeetCode82. 删除排序链表中的重复元素 II | Remove Duplicates from Sorted List II
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...
- [Swift]LeetCode354. 俄罗斯套娃信封问题 | Russian Doll Envelopes
You have a number of envelopes with widths and heights given as a pair of integers (w, h). One envel ...
- [Swift]LeetCode903. DI 序列的有效排列 | Valid Permutations for DI Sequence
We are given S, a length n string of characters from the set {'D', 'I'}. (These letters stand for &q ...
- Spring之AOP流程解析(ProxyFactory)
本节我们从ProxyFactory开始分析.该类有几个比较重要的方法——addAdvice.addAdvisor.getProxy,其中最后一个方法是我们本节的重点.前两个方法都是向ProxyFact ...
- 微信小程序入门(六)
28.页面路由 框架以栈的形式维护了当前的所有页面. 当发生路由切换的时候,页面栈的表现如下: 路由方式 29.小程序事件流 什么是事件? 事件是视图层到逻辑层的通讯方式 事件可以将用户的行为反馈到逻 ...
- SpringCloud(4)---Ribbon服务调用,源码分析
SpringCloud(4)---Ribbon 本篇模拟订单服务调用商品服务,同时商品服务采用集群部署. 注册中心服务端口号7001,订单服务端口号9001,商品集群端口号:8001.8002.800 ...
- Redis哨兵
Redis Sentinel Redis哨兵为Redis提供高可用.这就意味着你用哨兵可以创建一个Redis部署,在没有人为干预的情况下抵抗某些失败.(PS:自动故障转移) Redis哨兵还提供其他的 ...
- Quartz.NET学习笔记(四) 计划任务触发器
通常来说计划任务触发器会比简单触发器的使用频率高很多.如果你的任务是需要基于日历每天定时运行,那你就应该使用计划任务触发器,例如每周五中午12:00执行任务,或者每天早上9点执行任务. 计划任务表达式 ...
- SSL / TSL 传输加密算法 初解读
SSL(SecureSocketLayer)是netscape公司提出的主要用于web的安全通信标准,.TLS(TransportLayerSecurity)是IETF的TLS工作组在SSL3.0基础 ...
- Lucene 03 - 什么是分词器 + 使用IK中文分词器
目录 1 分词器概述 1.1 分词器简介 1.2 分词器的使用 1.3 中文分词器 1.3.1 中文分词器简介 1.3.2 Lucene提供的中文分词器 1.3.3 第三方中文分词器 2 IK分词器的 ...