发布自己的第一版asp.net core的RESTful接口程序
使用window开发一个简单的asp.net Core的RESTfull程序,网上很多,这里不说,我是直接使用IDE自己生成的项目来发布的。没有修改过主要代码。在IDE里发布到本地目录,得到类似文件
好了,去linux服务器上安装dotnet core
https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial#install
注意选择需要操作系统
我的CentOS7上安装,只需要
#sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
#sudo yum install dotnet-sdk-2.2
结果提示
File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: ^ SyntaxError: invalid syntax
网上查了,应是升级到了python3,yum用的是python2,于是
$ vi /usr/bin/yum
将第一行"#!/usr/bin/python" 改为 "#!/usr/bin/python2.7"
继续录入安装命令。成功!
把发布的文件夹上传到linux上,在当前目录下执行如下命令
dotnet MyPriceApi.dll
到此我都比较顺利。当然上面的执行方式有两个问题。
问题一:端口侦听是的localhost,本机,外部无法访问,如果用nginx反向代理就不是什么问题,如果简单点,想直接对外服务,可以使用以下命令
dotnet MyPriceApi.dll --urls http://*:5000
问题二:使用以上命令在断开终端后,程序会退出。所以还需要弄个守护进程。这有两个办法,一个是将dotnet以服务的方式运行,二是使用supervisor。
将命令以服务的方式运行
vi /etc/systemd/system/myprice.service
录入以下内容
[Service] WorkingDirectory=/opt/wcsc/myprice ExecStart=/usr/bin/dotnet /opt/wcsc/myprice/MyPriceApi.dll --urls http://*:5000 Restart=always # Restart service after 10 seconds if the dotnet service crashes: RestartSec=10 KillSignal=SIGINT SyslogIdentifier=dotnet-example User=root Environment=ASPNETCORE_ENVIRONMENT=Production Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false [Install] WantedBy=multi-user.target
启用服务
systemctl enable myprice.service
systemctl start myprice.service
使用supervisor
结果网上的信息比较旧的,搞得很是狼狈。最后在参考以下文章,
https://www.xncoding.com/2016/10/12/linux/supervisor.html
才得到完成。这里详细说说
安装配置supervisor
我使用以下命令安装
yum install supervisor
安装完成之后,可以运行 echo_supervisord_conf 生成默认的配置文件:
echo_supervisord_conf > /etc/supervisord.conf
修改配置文件,方便导入子目录下的所有conf文件
vi /etc/supervisord.conf
将文件尾部的files一段修改如下
[include] files = supervisord.d/*.conf
之后在/etc/supervisord.d目录下创建我自己其中的一个项目配置文件priceApi.conf,内容如下:
[program: MyPriceApi] command=dotnet MyPriceApi.dll ; 运行程序的命令 directory=/opt/publish/ ; 命令执行的目录 autorestart=true ; 程序意外退出是否自动重启 autostart=true ; 是否自动启动 stderr_logfile=/var/log/MyPriceApi.err.log ; 错误日志文件 stdout_logfile=/var/log/MyPriceApi.out.log ; 输出日志文件 environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量 user=root ; 进程执行的用户身份 stopsignal=INT startsecs=1 ; 自动重启间隔
将文中开始说到的文件都上传到linux的/opt/publish目录下,启动守护进程程序
systemctl start supervisord.service
期间还遇到过服务器曾升级过python,部分命令支行出错,需要vi相关命令文件,修改头的一行#!/usr/bin/python修改为#!/usr/bin/python2.7
好了,第一版就这样了,以后主程序修改后,可以直接上传测试期间生成的相关dll,并执行重启就行了
#supervisorctl restart MyPriceApi
最后需要配置一下服务的自启动
systemctl enable supervisord.service