记一次真实的 asp .net core 3.0网站部署到阿里云ubuntu18.04 *64的经历。
1.准备工作
1.1台ubuntu 18.04 64位主机
AspNetCore 3.0 在ubuntu上运行的条件是ubuntu 版本号必须在16.04及以上,最好是64位版本。32位版本当然也能装,方式不一样,需要另外安装个什么包,没看,被我直接无视了。本次购买的是ubuntu 18.04 64位主机。
1.2 域名1个
先备案,手续并不复杂但我觉得超级麻烦,过程不想多说。
2.实施步骤
为避免中间出错查找原因花时间,我是一步一步往下走的。
step 1:修改ubuntu 18.04 64的实例root用户密码,安装客户端winscp,连上ubuntu 18.04 64位主机
在阿里云web控制台修改ubuntu 18.04 64的实例root用户密码,然后用winscp连上主机。以前我在阿里云web控制台直接登陆ubuntu 18.04 64位主机,然后照着手册敲命令,一长串命令敲进去运行不对,还要按循序逐个字母对照检查哪里敲掉了、敲多了,敲错了,敲错循序了,累死。装上winscp后,直接把手册上的命令复制、粘贴到终端窗口、回车执行,一气呵成。
step 2:在ubuntu 18.04 64位主机上运行一个网站,确保本机运行正常。
2.1 首先安装 .NET core sdk 3.0
操着手册:https://dotnet.microsoft.com/download/linux-package-manager/ubuntu18-04/sdk-current
2.1.1 Install the .NET SDK
sudo add-apt-repository universe
sudo apt-get update
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-sdk-3.0
2.2.2 Check everything installed correctly
#dotnet --info
NET Core SDK (reflecting any global.json):
Version: 3.0.100
Commit: 04339c3a26
Runtime Environment:
OS Name: ubuntu
OS Version: 18.04
OS Platform: Linux
RID: ubuntu.18.04-x64
Base Path: /usr/share/dotnet/sdk/3.0.100/
Host (useful for support):
Version: 3.0.0
Commit: 95a0a61858
.NET Core SDKs installed:
3.0.100 [/usr/share/dotnet/sdk]
.NET Core runtimes installed:
Microsoft.AspNetCore.App 3.0.0 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 3.0.0 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
To install additional .NET Core runtimes or SDKs:
https://aka.ms/dotnet-download
2.2 建一个 mvc 网站
dotnet new mvc -o test
2.3 运行 网站
dotnet run --urls http://0.0.0.0:5005
2.4 用客户端浏览网站
wget http://localhost:80/
输出:
Resolving localhost (localhost)... ::1, 127.0.0.1
Connecting to localhost (localhost)|::1|:5000... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified
Saving to: ‘index.html’
index.html [ <=> ] 12 --.-KB/s in 0s
执行以下命令,查看index.html
more index.html
index.html内容
Hello World!
安装一个,检查一个,确保每一步安装正确,到这里如果一切正常,说明本机运行OK
step 3:域名指向在ubuntu 18.04 64位主机上运行的一个网站
这一步骤有三个地方要注意
3.1检查两层防火墙的80端口
3.1.1.1测试远程主机的端口是否开启
telnet 192.168.1.103 80
3.1.1.2 查看ubuntu 18.04 64位主机的端口开启情况(ubuntu下执行)
sudo ufw status
用户请求80端口->阿里云的前端防火墙(检查80端口是否打开?)->ubuntu 18.04 64位主机(检查80端口是否打开?)->到达web server(Microsoft.AspNetCore.Server.Kestrel80端口)
阿里云的ubuntu 18.04 64位主机前面有一个前端防火墙,也即用户安全规则的配置,在web控制台里面操作,把你的ubuntu 18.04 64位主机加入到安全组里面,安全组里面配置了是否允许80端口的数据进来,和windows server 的高级防火墙是一个原理。
操作手册:首先登录到云管理控制台,然后“实例”->“更多”->“网络安全和安全组”->“安全组配置”->“配置规则”->“入方向”->“添加安全组规则”->端口范围 80/80 授权对象 0.0.0.0/0
3.2 web server 监听80端口的IP地址
error:
dotnet run --urls http://localhost:80
[40m[1m[33mwarn[39m[22m[49m: Microsoft.AspNetCore.Server.Kestrel[0]
Unable to bind to http://localhost:5005 on the IPv6 loopback interface: 'Cannot assign requested address'.
Hosting environment: Development
Content root path: /root/myapp/test
Now listening on: http://localhost:80
Application started. Press Ctrl+C to shut down.
correct:
dotnet run --urls http://0.0.0.0:5005
[40m[1m[33mwarn[39m[22m[49m: Microsoft.AspNetCore.Server.Kestrel[0]
Unable to bind to http://localhost:5005 on the IPv6 loopback interface: 'Cannot assign requested address'.
Hosting environment: Development
Content root path: /root/myapp/test
Now listening on: http://0.0.0.0:80
Application started. Press Ctrl+C to shut down.
前一个在127.0.0.1监听80端口,后一个在 0.0.0.0上监听80端口。
因为本机运行正常,但外面死活连不上,检查80端口是始终是关闭的。这一步花了我好长时间来排错。最后啥问题没有,就是网站的监听地址不对。
step 3:安装nginx,在一台服务器上反向代理多个网站
下次写
step 4:将nginx 配置为https
下次写
step 5:安装mongodb
下次写
step 6:安装redis
安装失败
step 6:上传真实的网站
错误处理
1.网站用release方式发布后出现上传图片出现错误:
/Blog/Edit/Access to the path '/publish/wwwroot/uploadimages/20191123200959.png' is denied.
Ubuntu access publish/wwwroot' is denied
目录没有写入权限,修改目录权限。
2.登陆post出现错误
nginx 配置注释掉
# proxy_set_header Connection "Upgrade";
非常正常关闭Hello World Web Server的处理
https://blog.csdn.net/genwise/article/details/81322371
Programming C# on Ubuntu Linux
https://tqdev.com/2016-dot-net-core-ubuntu-linux