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配置“后面的注释展开,上面的全部注释。

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

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

具体上传步骤就不说了。

前置条件,在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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342