二、ubuntu虚拟机上创建发布.NetCore程序 --ubuntu上通过Docker部署.NetCore +MySQL程序

通过上次,我们已经搭建起了ubuntu虚拟机的环境。现在我们在此环境上安装下Docker.
1、先创建一个非root用户。
sudo adduser docker_user
设置密码,其他信息直接默认。具体如下: 在这里插入图片描述
2、安装.netCore

wget https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb

安装SDK:

sudo apt-get update; \  sudo apt-get install -y apt-transport-https && \  sudo apt-get update && \  sudo apt-get install -y dotnet-sdk-5.0

检查是否安装成功:

dotnet --version

在这里插入图片描述

3、创建应用程序
创建文件目录

sudo mkdir -p /data/sites/demo
// 修改文件夹访问权限
sudo chmod -R 777 /data

//sudo chmod a+rwx /data
//sudo chown -R docker-user:docker-user /data

创建MVC项目

cd ~/
cd /data/sites/demo
dotnet new mvc

在这里插入图片描述
查看文件夹下文件,已经有相关项目文件:
在这里插入图片描述

编译和发布程序

dotnet restore
dotnet publish -c Release

详细见下图:
在这里插入图片描述

查看发布目录下文件,已经生成,具体见下图:
在这里插入图片描述

运行已经发布的程序

cd bin/Release/net5.0/publish/
dotnet demo.dll

在这里插入图片描述
检查测试程序是否正常运行:

// 通过wget请求网站
wget http://localhost:5000

在这里插入图片描述
4、安装成守护进程
首先在var目录下创建www文件夹,并把发布好的应用程序放在该目录下:

sudo mkdir -p /var/www/demo
cd /var/www/demo
sudo cp -r /data/sites/demo/bin/Release/net5.0/publish/* .

拷贝之前发布的项目,具体见下图:
在这里插入图片描述
其次,创建服务配置文件

cd /etc/systemd/system/
sudo touch dotnet-demo.service

将创建服务定义文件dotnet-demo.service,具体见下图:
在这里插入图片描述
接着,编辑服务配置文件,具体命令如下:

sudo vi dotnet-demo.service

打开文件如下图:
在这里插入图片描述
进入编辑页面,输入以下内容,具体可以参考:
https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.1&tabs=aspnetcore2x,
https://swimburger.net/blog/dotnet/how-to-run-a-dotnet-core-console-app-as-a-service-using-systemd-on-linux 两个网址。注意中间的备注信息,格式不正确会影响到服务的正常部署。

[Unit]
Description=DotNet Core Demo Running on Ubuntu

[Service]
WorkingDirectory=/var/www/demo
# systemd will run this executable to start the service
ExecStart=/usr/bin/dotnet /var/www/demo/demo.dll
Restart=always
RestartSec=10
# to query logs using journalctl, set a logical name here
SyslogIdentifier=dotnet-example

# Use your username to keep things simple.
# If you pick a different user, make sure dotnet and all permissions are set correctly to run the app
# To update permissions, use 'chown yourusername -R /srv/HelloWorld' to take ownership of the folder and files,
#       Use 'chmod +x /srv/HelloWorld/HelloWorld' to allow execution of the executable file
User=docker-user

# This environment variable is necessary when dotnet isn't loaded for the specified user.
# To figure out this value, run 'env | grep DOTNET_ROOT' when dotnet has been loaded into your shell.
# Environment=DOTNET_ROOT=/opt/rh/rh-dotnet31/root/usr/lib64/dotnet  
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

编辑结束,按ESC 键 跳到命令模式,然后输入退出命令:

:wq

保存文件并退出vi 编辑。
注意:如果打开编辑无法保存,需要给当前用户赋当前文件夹权限,可以参考以下命令:

sudo chmod -R 777 /etc

当然,也可以使用别的方式编辑,比如是用vim编辑。

现在,可以启动服务了,具体命令如下:

systemctl daemon-reload

如果中间调整过服务定制文件,请使用下面命令重新加载:

sudo systemctl enable dotnet-demo.service
sudo systemctl start dotnet-demo.service

执行后命令窗体见下图:
在这里插入图片描述

启动服务有可能会报以下错误:

sudo: /etc/sudoers is world writable
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin

原因是sudoers文件夹权限问题.具体解决办法如下:

pkexec chmod 555 /etc/sudoers
pkexec chmod 555 /etc/sudoers.d/README

最后,我们检查下我们安装好的服务状态:

sudo systemctl status dotnet-demo.service

在这里插入图片描述

服务启动过程中遇到的两个错误及解决办法:
1、code=exited, status=217/USER
用户配置错误,更改文件中的用户,重新加载,启动后正常。
2、code=exited, status=1/FAILURE
配置文件中动态库路径有错,调整后,重新加载,启动后正常。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值