.NET Core 是微软提供的免费, 跨平台和开源的开发框架, 可以构建桌面应用程序, 移动端应用程序, 网络应用程序, 物联网应用程序和游戏应用程序等. 如果你是 Windows 平台下的 dotnet 开发人员的话, 使用 .NET core 可以很轻松就设置好任何 Linux 和类 Unix 操作系统下的开发环境. 本文将会逐步带着大家在 Linux 上部署. NET Core 应用程序.
一. 环境准备
服务器: 阿里云 64 位 CentOS 7.4.1708 版本;
客户端: Windows 10;
SFTP 客户端: FileZilla; 用来进行文件传输;
SSH 工具: Xshell 6; 用来在 Windows 上远程访问 CentOS;
二. 在 Linux 上安装. NET 环境
使用如下命令注册 Microsoft 需要的依赖环境, 该命令类似于 Windows 上的环境变量, 它指向了微软的环境源, 地址中的对每个系统是不一样, 所以我们要斟酌一下的 Linux 系统是什么, 再去拉取.
wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb
比如你当时装了. NET Core3.0, 但是呢! 微软过了几天又出了. NET Core 3.1 , 这个时候就需要更新你这个配给的配置, 通过以下命令.
yum update
yum update 命令会重新拉取下, 随后重新做配置, 但你的 dotnet sdk 不会受任何影响, 随后安装 dotnet sdk.
yum install dotnet-sdk-3.1
安装完会出现以下截图, 随后我们可以通过 dotnet--info 来判断是否安装成功.
此时环境就运行环境就搭建完璧了~
二. 使用 FileZilla 工具向服务器推送应用程序
值得一提的是任何服务器的 ftp 端口都是 22, 这个是必须要注意的, 否则会一直连接失败.
此时我们向服务器传送了发布文件, 如果不出意外我们可以直接在 Liunx 上看到. 通过 Ls ,Cd / 完成查看.
随后我们找到了以 dll 结尾并且是你解决方案的名称, 随后我们直接 dotnet 命令来进行启动项目.
三. 启动应用程序
此时我们可以看到我们的内网是以 5000 端口启动的, 这得益于我们直接将. NET Core 直接设置原因, 当然我们如果要在阿里云上公网 IP 的安全映射进行设置, 在此之前我们要测试一下内网是否正常, 常用的命令是 curl, 不够这个命令需要安装, 在 CentOS 和 Ubuntu 安装命令是不一样的. 具体命令如下:
- apt-get install curl //Ubuntu 的命令
- yum install curl //CentOS 的命令
关于 Curl 这个命令很强大, 这个就不这里详谈了, 安装完成之后就可以使用这个命令了, 最后我们测试内网看看是否正常.
此时发现内网已经打通, 现在我们通过阿里云公网 IP 对内网进行映射. 在阿里云中的安全组中, 找到安全组规则, 添加一条映射. 放开所有 IP, 这样就 ok 了, 具体如下.
此时, 试着激动的双手打开手机试着去访问....OK,Nice..
.
四. 进程守护
不过一个尴尬的事情出现了, 我们只是通过 dotnet 命令启动了项目, 但是我们的 XShell 关闭你的应用程序就会关闭, 此时我们就需要进程守护了. 这样就可以让你的应用程序每时每刻都可以为你服务. Supervisor http://supervisord.org/introduction.html#overview 是 Python 做一个 client/se Linux/Unix 双系统下的一个进程管理工具. 它可以很方便的监听, 启动, 停止, 重启一个或多个进程. 用 Supervisor 管理的进程, 当一个进程意外被杀死, supervisort 监听到进程死后, 会自动将它重新拉起, 很方便的做到进程自动恢复的功能, 不再需要自己写 shell 脚本来控制. 通过这里你应该就会明白我们会干什么, 我们会尝试着关闭 Xshell, 看看它会不会帮我们去重启应用程序, 如果可以正常访问, 那么你的进程守护配置成功! 好吧废话不多说.
我们首先需要在 Linux 系统上安装 Supervisor , 在安装它之前, 我们需要安装 Python 包.
yum install python-setuptools
随后我们在安装 Supervisor, 执行结果如下图.
easy_install supervisor
随后创建几个文件夹, 包括 supervisor, 在这个文件夹中包含了 supervisor 的一切配置. 包含了进程配置文件 (也就是大概你想让这个进程去干什么? 去执行什么命令? 在什么目录下? 下面我们会逐一说明下配置文件的各个节点) 以及 supervisor 本身监听服务的配置.
4.1 在 etc 文件夹下新建文件夹 supervisor
mkdir /etc/supervisor
4.2 在 supervisor 文件夹下新建文件夹 conf.d
mkdir /etc/supervisor/conf.d
4.3 生成 supervisord.conf 配置文件
echo_supervisord_conf> /etc/supervisor/supervisord.conf
4.4 定位到文件夹下修改配置文件:
- cd /etc/supervisor
- VIM supervisord.conf
改变这个路径只是为了能够找到我们的 conf.d 文件夹中我们自定义的配置文件. conf.d 中是我们自己创建的. 所以要进行改变. 我们在这个文件内容的最下面, 可以看到有一个 included 标签, 这个就是我刚才所说的. 它默认是这个样子, 从内容可以看出是让我们进行修改的.
修改前的内容如下:
- ;[include]
- ;files = relative/directory/*INI
修改后的内容如下:
- [include]
- files = conf.d/*.conf
这个时候 supervisord 的配置已经结束了, 那么就剩你的应用程序级别的配置文件了. 上述的步骤其实都可以通过 FileZilla 工具实现, 这样更好的去编辑.
4.5 创建应用程序级别配置文件
- [program:AspNetCore_Cookie]
- command=dotnet AspNetCore_Cookie.dll
- directory=/home/publish
- environment=ASPNETCORE__ENVIRONMENT=Production
- user=root
- stopsignal=INT
- autostart=true
- autorestart=true
- startsecs=1
- stderr_logfile=/var/log/HellowebApp.err.log
- stdout_logfile=/var/log/HelloWebApp.out.log
对于上述的配置文件我做了如下解释, 当然有错误的话可以纠正, 毕竟是根据我对鸟语的理解不是很...emmm
command= 要执行的命令, 在. NET Core 应用程序中 我们都是使用 dotnet 命令来启动应用程序的
directory= 命令执行的目录 比如你的 publish 在某个文件夹 那你就写哪里
environment= 环境变量 ASP.NET Core 的环境变量 可能是有的时候需要 Linux 管理员去访问, 不过我是 root, 这个我是不太懂
user= 进程执行的用户身份 这里写的 root
stopsignal=INT 这个都没人动 我也不动 emmm
autostart= 是否自动启动
autorestart= 是否自动重启
startsecs= 自动重启间隔
stderr_logfile= 标准错误日志
stdout_logfile= 标准输出日志
就现在, 我们的配置已完毕, 如果你是按照上方进行配置的, 那么你肯定是没有问题的.
4.6 启动进程守护服务
运行 supervisord -c /etc/supervisor/supervisord.conf 看看是否包报错信息, 如果没有则配置成功. 随后我们直接启动 Supervisord 服务.
sudo supervisorctl shutdown && sudo supervisord -c /etc/supervisor/supervisord.conf
并且我们查看进程看看我们刚才的应用程序级别配置是否有效.
现在配置一切成功, 去打开你的网站吧!, 关闭你的 XShell 或者 云端在线远程, 这个时候再去试着访问你的网站. ok 没问题.
来源: https://www.cnblogs.com/ZaraNet/p/12064008.html