Introduction
In this tutorial you’ll set up and deploy a production-ready ASP.NET Core application with a MongoDb Server on Ubuntu 18.04 using Nginx.
How it works
Remember the relationships.
OS/ ubuntu server 18.04-x64 Solution Folder
OS---------- ubuntu server 18.04-x64
├── .NET SDK & .NET Runtime
│ ├── .NET SDK <- ---------- SDK ,/usr/share/dotnet/sdk/8.0.403/ , sudo apt-get update && sudo apt-get install -y dotnet-sdk-8.0
│ ├── ASP.NET Core Runtime <--- The ASP.NET Core Runtime enables you to run existing web/server applications. Microsoft.AspNetCore.App 8.0.10 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App] sudo apt-get update && sudo apt-get install -y aspnetcore-runtime-8.0
│ ├── Desktop Runtime <--- The Desktop Runtime enables you to run existing Windows desktop applications.
│ └── .NET Runtime <--- The .NET Runtime enables you to run existing console app. Microsoft.NETCore.App 8.0.10 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
- sudo apt-get install -y dotnet-runtime-8.0
├── ASP.NET Core web applications <----backend Local_Server, Listens on http://locahost:5000
│ ├── nongodb server
│ └── redis server
└── Nginx web server <--- frontend Local_Server ,Listens on Port 443 / 80 and forwards HTTP/S calls to http://locahost:5000.
One Ubuntu 18.04 server - Your server
ASP.NET Core Web Application - Runs your app / website on Ubuntu 18.04 server
nginx - Listens on Port 443 / 80 and forwards HTTP/S calls to your website.
A secured Nginx web server
Mongodb Redis - Keeps your app data
Supervisor - Keeps your app running
Table of contents
Requirements
Register Microsoft key and feed
Install the .NET SDK
Install the .NET Core Runtime
Install ASP.NET Core Runtime
Create a new ASP.NET Core web application
Publish and copy over the app
Install Monodb
Install nginx as reverse proxy
Configure SSL
Configure nginx
Monitoring the app
Conclusion
Prepare an Run Evironmentn for ASP.NET Core Application on Ubuntu
Install the .NET Core 3.x Runtime <--an Run Evironmentn for ASP.NET Core Application on Ubuntu
Install the .NET Core 3.x SDK <--an Run Evironmentn for ASP.NET Core Application on Ubuntu
Prepare an ASP.NET Core Website
insall web <--Running an ASP.NET Core Website on Ubuntu
install mongodb
install redis
nginx
insall nginx
Configure NGINX<--Configure NGINX as a Reverse Proxy to ASP.NET Core
install https<--Configure the reverse proxy for secure (HTTPS) client connections
domain
buy domain
part one:Prepare an Run Evironmentn for ASP.NET Core Application on Ubuntu
step 1.Setting up a Linux host
1.Prerequisites
Linux Distribution
ubuntu 18.04-x64
root permissions
2.One Ubuntu 18.04 server
There are many service providing offering a cheap Linux based VPS (virtual private server). vultr.com offers a single core, 1GB RAM instance for about 5 USD/month. The instance we select is an Ubuntu Server 18.04 *64 LTS (HVM) with 8GB of storage (SSD).
3.NET Core 3.0 - Supported OS versions
.NET Core 3.0 is supported on the following Linux distributions/versions:
OS:Ubuntu
Ubuntu OS Version >=16.04* 64,
Architectures:x64, ARM32, ARM64
For information on Linux distributions supported by ASP.NET Core, see Prerequisites for .NET Core on Linux.
https://docs.microsoft.com/en-us/dotnet/core/linux-prerequisites?tabs=netcore30
step 2. connect to this instance through SSH
1.On a Windows machine, you can use mRemoteNG to connect to a Linux machine.
2.PuTTY: a free SSH and Telnet client
https://www.chiark.greenend.org.uk/~sgtatham/putty/?spm=5176.2020520101.0.0.20c74df5gR1HOz
3.Xshell6 https://www.netsarang.com/en/all-downloads/
4.Termius SSH:https://www.termius.com/windows
step 3.Prepare an Run Evironmentn for ASP.NET Core Application on Ubuntu
Prepare ASP.NET Projects
Initial Server Setup with Ubuntu 18.04
How To Install Nginx on Ubuntu 18.04
Install winscp on windows
https://winscp.net/download/WinSCP-5.15.3-Setup.exe
文件传输协议 = SFTP-3
加密协议 = SSH-2
SSH实现 = OpenSSH_7.2p2 Ubuntu-4ubuntu2.4
加密算法 = aes
压缩 = 否
other tools:
SecureCRT+SecureFX https://www.portablesoft.org/securecrt-securefx-legacy-versions/
3 Ways to Use SSH on Windows to Log Into Linux Server
Method 1: Windows 10’s Built-in SSH Client
Use the OpenSSH client on Windows 10,open a PowerShell window or a command prompt window and run the ssh command:
ssh [email protected]
Method 2: Use SSH in Windows Subsystem for Linux
Open the Microsoft Store and enter WSL in the search box. Select Run Linux on Windows and install a Linux distro of your choice.
Once your Linux distro is installed, open the Control Panel and select Programs -> Turn Windows features on or off. Tick on the checkbox of Windows Subsystem for Linux to enable this feature. (You may need to reboot your Windows PC for this change to take effect.)
Next, you can launch the Linux distro from the start menu by search the distro’s name. The first time you launch it, you need to create a user and set a password.
ssh [email protected]
Method 3: Use SSH client on Windows
# lsb_release -a
LSB Version: core-9.20170808ubuntu1-noarch:security-9.20170808ubuntu1-noarch
Distributor ID: Ubuntu
Description: Ubuntu 18.04.3 LTS
Release: 18.04
Codename: bionic
Install .NET Core SDK on Linux Ubuntu 18.04 - x64
you can read the doc https://dotnet.microsoft.com/download/linux-package-manager/ubuntu18-04/sdk-current and run the commands.
This tutorial installs .Net core 3.x on ubuntu 18.04-x64 .
step 1:Register Microsoft key and feed,This only needs to be done once per machine.
Before installing .NET, you'll need to register the Microsoft key, register the product repository, and install required dependencies.
Open a terminal and run the following commands:
wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
step 2: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
step 3.Check everything installed correctly
To make sure it works after you’ve set it up, just run:
#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
If the command runs, printing out information about dotnet, you're good to go.
step 4:Website Creation
#mkdir myapp
#cd myapp
#dotnet new mvc -o test
#cd test
The template "ASP.NET Core Empty" was created successfully.
Processing post-creation actions...
Running 'dotnet restore' on test1/test1.csproj...
Restore completed in 1.03 sec for /root/myapp/test1/test1.csproj.
Restore succeeded.
The dotnet command creates a new website server application of type website for you. The -o parameter creates a directory named test where your app is stored, and populates it with the required files. The cd myApp command puts you into the newly created app directory.
step5:Run the app
Kestrel is the web server that is included by default in ASP.NET Core new project templates. It is a cross-platform web server for ASP.NET Core based on libuv, a cross-platform asynchronous I/O library. If your application accepts requests only from an internal network, you can use Kestrel by itself.
error:
dotnet run --urls http://localhost:5005
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://localhost:5005
Application started. Press Ctrl+C to shut down.
step 5:Test the Application Directly on Kestrel Server
navigate to http://<serveraddress>:<port> to verify the app works on Linux locally.
visit http://localhost:5000/。,open another terminal
wget http://localhost:5000/
or
curl -v localhost:5999
output
Connected to localhost (127.0.0.1) port 5999 (#0)
> GET / HTTP/1.1
> Host: localhost:5999
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Sat, 21 Aug 2021 12:37:10 GMT
< Content-Type: text/html; charset=utf-8
< Server: Kestrel
< Transfer-Encoding: chunked
We use the following command to list the available releases of .NET Core on Linux host.
apt-cache search dotnet
Configure ASP.NET Core as a Background Service
We will use systemd and create a service file to start and monitor the underlying web app. systemd is an init system that provides many powerful features for starting, stopping and managing processes.
We can create a configuration file using the following command
sudo vi /etc/systemd/system/kestrel-wwwstocksocom.service
The content of the .sevice file is as follows.
[Unit]
Description=www.stockso.com App running on Ubuntu
[Service]
WorkingDirectory=/var/www/nopcommerce/wwwstocksocom/src/Presentation/Nop.Web/bin/release/netcoreapp3.0/publish
ExecStart=/usr/bin/dotnet /var/www/nopcommerce/wwwstocksocom/src/Presentation/Nop.Web/bin/release/netcoreapp3.0/publish/Nop.Web.dll --urls http://0.0.0.0:16999
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=www-data #以www-datar的身份启动
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
If you completed the configuration and save the .service file, you need to enable it.
sudo systemctl enable kestrel-wwwstocksocom.service
then start it.
sudo systemctl start kestrel-wwwstocksocom.service
sudo systemctl restart kestrel-wwwstocksocom.service
sudo systemctl status kestrel-wwwstocksocom.service
sudo journalctl -fu kestrel-wwwstocksocom.service
sudo systemctl daemon-reload
在你的Linux 里确认 8045 处于 Listen 状态用命令: netstat -tlanp | grep 8045
首先登录到云管理控制台,然后“实例”->“更多”->“网络安全和安全组”->“安全组配置”->“配置规则”->“入方向”->“添加安全组规则”->
端口范围 80/80
授权对象 0.0.0.0/0
加规则到安全测量组
将实例加入到安全策略组
windows
1.dotnet publish
2.copy in\Debug\netcoreapp2.1\publish\*.* to linux var/www/
3.cd var/www/publish
4.dotnet project.dll
Resources
Prerequisites for .NET Core on Linux
https://docs.microsoft.com/en-us/dotnet/core/linux-prerequisites?tabs=netcore2x
Microsoft Host ASP.NET Core 3.x 5.x on Linux with Nginx
https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-5.0
https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-3.0
Debug Linux core dumps in Visual Studio
https://devblogs.microsoft.com/cppblog/debug-linux-core-dumps-in-visual-studio/
3 Ways to Use SSH on Windows to Log Into Linux Server