ASP.NET Core 部署至ubuntu、部署至ubuntu下的Docker

关于ABP代码 生成器的使用介绍 https://blog.csdn.net/q710777720/article/details/91358450

将自定义-ABP代码生成器,使用. NET Core下的Razor模板引擎,配合RazorPage界面,可自定义cshtml模板,开源地址: https://github.com/i542873057/SJNScaffolding 部署至ubuntu、Docker的记录

相关技术 .NET Core2.2+Docker+Nginx+Supervisor(守护进程)

部署至ubuntu下

可参考 https://www.cnblogs.com/linezero/p/aspnetcoreubuntu.html

需要安装 .NET Core 2.2,直接看官网

https://dotnet.microsoft.com/download/linux-package-manager/ubuntu18-04/sdk-current

发布

使用VS2017或VS2019,右击SJNScaffolding.RazorPage->发布->配置后,如下图所示,点击保存后,生成发布包。

Deploy-Settingsb6cfb.png

将生成的这个文件夹内容,使用xftp上传至linux的某一文件夹中。
使用以下命令运行

cd /home/admin/SJNScaffolding # 先cd的项目目录 
dotnet SJNScaffolding.RazorPage.dll #启动web项目,默认应该是http://localhost:5000

参考下图

https://miao.su/images/2019/06/09/5NOPVXLDV0IMA_QO7cdd8d.png

ip:端口是无法访问到的,
命令行中执行,下面这行命令,是正常的,但只能服务器访问,外网无法访问。

wget http://localhost:5000

使用nginx反向代理

sudo apt-get install nginx

安装好以后,定位到 /etc/nginx/sites-available/default 文件。更改server 节点如下

server {
    listen 80;
    location / {
        proxy_pass http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection keep-alive;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

然后重新启动 Nginx

sudo service nginx restart 
#sudo nginx -s reload   #也可以使用这条命令重新加载配置项

Supervisor 守护进程

此时使用ctrl+c会退出项目运行状态,无法关闭shell,可使用Supervisor,目的是上的是服务器开机时即启动服务器上的发布的 ASP .NET Core Web项目

ASP.NET Core Linux下为 dotnet 创建守护进程(必备知识)
前言

结合Nginx将asp net core部署在Linux(ubuntu)上[基于微软官方文档翻译并补充]

Ubuntu 18.04 安装部署Net Core、Nginx全过程

sudo apt-get install supervisor  # 安装 守护进程 supervisor
cd /etc/supervisor/conf.d/     # 进入配置目录 
vim SJNScaffolding.conf        # 新建 一个配置文件 ,只要以 .conf结尾即可。

在文件SJNScaffolding.conf中配置如下内容,

[program:SJNScaffolding]
command=dotnet /home/admin/SJNScaffolding.RazorPage/SJNScaffolding.RazorPage.dll
directory=/home/admin/SJNScaffolding.RazorPage
environment=ASPNETCORE__ENVIRONMENT=Production
user=www-data
stopsignal=INT
autostart=true
autorestart=true 
startsecs=1
stderr_logfile=/var/log/SJNScaffolding.RazorPage.err.log 
stdout_logfile=/var/log/SJNScaffolding.RazorPage.out.log 

有相应注释的,conf不能有注释,虽然没有任何异常,但无法启动服务。

[program:HelloWebApp]
command=dotnet HelloWebApp.dll  #要执行的命令
directory=/home/yxd/Workspace/publish #命令执行的目录
environment=ASPNETCORE__ENVIRONMENT=Production #环境变量
user=www-data  #进程执行的用户身份
stopsignal=INT
autostart=true #是否自动启动
autorestart=true #是否自动重启
startsecs=1 #自动重启间隔
stderr_logfile=/var/log/HelloWebApp.err.log #标准错误日志
stdout_logfile=/var/log/HelloWebApp.out.log #标准输出日志

重启守护进程(重新发布后,或服务崩溃后)

sudo /etc/init.d/supervisor restart #或 sudo service supervisor restart
#或
# 暂停服务supervisor,启动服务supervisor
sudo service supervisor stop
sudo service supervisor start
#查看日志
tail -f  /var/log/SJNScaffolding.RazorPage.out.log 

设置ubuntu下的supervisor开机 自启动

vi /etc/rc.local

在exit 0 之前加入以下命令

/usr/local/bin/supervisord

由于linux,我遇到 了

java.io.IOException: Permission denied

只要给SJNScaffolding.json文件777权限即可

cd /home/admin/SJNScaffolding.RazorPage
chmod 777 SJNScaffolding.json

还会遇到

System.UnauthorizedAccessException: Access to the path '/home/f/download/a/TelSCode.Application/Domain/Plat/MWorkInfos' is denied. ---> System.IO.IOException: Permission denied

意思是,当前用户组没有访问/home/f的权限,因为,在linux下的权限是分的很仔细的,

首页中的配置项:输出目录设置为此:(/home/admin/download)

imagec4aba.png
cd /home/admin
mkdir download
chown -R www-data:www-data ./download
ls -l #可看到当前download的文件的用户组为www-data,

SJNScaffolding.Razor为项目发布包,download是自己新建的文件夹,所属用户组为www-data,这样就不会出现无权限的问题

image6af1f.png

使用Docker 方式部署

可参考此文档 :ASP.NET Core开发Docker部署

#1.本地安装Docker for Windows后,可使用Docker方式运行
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
COPY ["SJNScaffolding.RazorPage/SJNScaffolding.RazorPage.csproj", "SJNScaffolding.RazorPage/"]
COPY ["SJNScaffolding/SJNScaffolding.csproj", "SJNScaffolding/"]
RUN dotnet restore "SJNScaffolding.RazorPage/SJNScaffolding.RazorPage.csproj"
COPY . .
WORKDIR "/src/SJNScaffolding.RazorPage"
RUN dotnet build "SJNScaffolding.RazorPage.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "SJNScaffolding.RazorPage.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "SJNScaffolding.RazorPage.dll"]

#2. 发布时,使用此Dockerfile配置
#FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
#COPY . /app
#WORKDIR /app
#EXPOSE 80
#ENTRYPOINT ["dotnet", "SJNScaffolding.RazorPage.dll"]

把第"2. 发布时,使用此Dockerfile配置“后面的注释展开,上面的全部注释。

Dockerfileea151.png

右击SJNScaffolding.RazorPage->发布->配置后,如下图所示,点击保存后,生成发布包。

Deploy-Settingsb6cfb.png

将生成的这个文件夹内容,使用xftp上传至linux的某一文件夹中。

PXKF63RUOC5L99LPWe1367.png

具体上传步骤就不说了。

MYGE3MZ5BNFJQ6R476cf92.png

前置条件,在ubuntu上安装好了docker。并且正常运行。

-d 代表后台运行,此时将对外显露5000端口运行,5000是运行后,docker对外的端口,80是这个服务对外的端口,其中Dockerfile 存在语句EXPOSE 80

cd /home/admin/SJNScaffolding # 先cd的项目目录 
docker build -t igeekfan/sjnscaffolding .     #生成images
docker run -d -p 5000:80 igeekfan/sjnscaffolding  # 生成 container 并运行在5000端口

此时打开 浏览器, ip+端口5000即可访问服务。affolding](https://github.com/i542873057/SJNScaffolding)

你可能感兴趣的:(ASP.NET Core 部署至ubuntu、部署至ubuntu下的Docker)