文章来源:公众号-智能化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(超详解附截图)的更多相关文章

  1. Docker+Redis镜像的原理以及部署安装(超详解附截图)

    文章来源:公众号-智能化IT系统. 一. DOCKER介绍 Docker简介 (1)Docker 是一个开源的应用容器引擎,基于 Go 语言,并遵从Apache2.0协议开源. (2)Docker 可 ...

  2. centos LVM详解

    title: centos LVM详解 date: 2018-04-24 14:00:03 tags: [linux,centos,LVM] --- 知识了解 LVM关系图 fdisk命令详解 [ro ...

  3. (转)Centos7上部署openstack ocata配置详解

    原文:http://www.cnblogs.com/yaohong/p/7601470.html 随笔-124  文章-2  评论-82  Centos7上部署openstack ocata配置详解 ...

  4. Ubuntu14.04下Mongodb官网安装部署步骤(图文详解)(博主推荐)

    不多说,直接上干货! 在这篇博客里,我采用了非官网的安装步骤,来进行安装.走了弯路,同时,也是不建议.因为在大数据领域和实际生产里,还是要走正规的为好. Ubuntu14.04下Mongodb(离线安 ...

  5. Ubuntu16.04下Mongodb官网安装部署步骤(图文详解)(博主推荐)

    不多说,直接上干货! 在这篇博客里,我采用了非官网的安装步骤,来进行安装.走了弯路,同时,也是不建议.因为在大数据领域和实际生产里,还是要走正规的为好. Ubuntu16.04下Mongodb(离线安 ...

  6. Mybatis案例超详解(上)

    Mybatis案例超详解(上) 前言: 本来是想像之前一样继续跟新Mybatis,但由于种种原因,迟迟没有更新,快开学了,学了一个暑假,博客也更新了不少,我觉得我得缓缓,先整合一些案例练练,等我再成熟 ...

  7. Python3调用C程序(超详解)

    Python3调用C程序(超详解) Python为什么要调用C? 1.要提高代码的运算速度,C比Python快50倍以上 2.对于C语言里很多传统类库,不想用Python重写,想对从内存到文件接口这样 ...

  8. Ubuntu14.04下Mongodb(离线安装方式|非apt-get)安装部署步骤(图文详解)(博主推荐)

    不多说,直接上干货! 说在前面的话  首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu LTS \n \l r ...

  9. Ubuntu16.04下Mongodb(离线安装方式|非apt-get)安装部署步骤(图文详解)(博主推荐)

    不多说,直接上干货! 说在前面的话  首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu LTS \n \l r ...

随机推荐

  1. [Swift]LeetCode978. 最长湍流子数组 | Longest Turbulent Subarray

    A subarray A[i], A[i+1], ..., A[j] of A is said to be turbulent if and only if: For i <= k < j ...

  2. [Swift]LeetCode1027. 最长等差数列 | Longest Arithmetic Sequence

    Given an array A of integers, return the length of the longest arithmetic subsequence in A. Recall t ...

  3. Thrift 代码分析

    Thrift的基本结束 Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目.Thrift通过IDL(Interface Definiti ...

  4. PyCharm2019 激活码

    因公司的需求,需要做一个爬取最近上映的电影.列车号.航班号.机场.车站等信息,所以需要我做一个爬虫项目,当然java也可以做爬虫,但是还是没有python这样方便,所以也开始学习Python啦!!! ...

  5. python获取当前运行程序的名字

    import os filename = os.path.abspath(__file__) print filename 打印结果: E:\bluedon\test.py

  6. .NET Core实战项目之CMS 第十三章 开发篇-在MVC项目结构介绍及应用第三方UI

    作为后端开发的我来说,前端表示真心玩不转,你如果让我微调一个位置的样式的话还行,但是让我写一个很漂亮的后台的话,真心做不到,所以我一般会选择套用一些开源UI模板来进行系统UI的设计.那如何套用呢?今天 ...

  7. mybatis框架(6)---mybatis插入数据后获取自增主键

    mybatis插入数据后获取自增主键 首先理解这就话的意思:就是在往数据库表中插入一条数据的同时,返回该条数据在数据库表中的自增主键值. 有什么用呢,举个例子: 你编辑一条新闻,同时需要给该新闻打上标 ...

  8. Java基础1:深入理解Java面向对象三大特性

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  9. Kafka~Linux环境下的部署

    概念 Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素. 这些数据 ...

  10. Python的协程

    什么是协程 协程又叫做微线程,它是在单一线程内通过不断切换执行的.协程的切换不是上下文的切换也就是说不是CPU的执行任务的切换,比如CPU执行一会线程1,然后再执行一会线程2,在多核CPU上,Pyth ...