First, preface What is the main content of this article?
- Publish the project to a local directory
- Transfer items to the server and configure startup & Boot Auto-start
- Configure the reverse proxy as an access entry for Nginx
This article environmental information
Use |
Tools & Versions |
Operating system |
Windows 10 |
Development tools |
Visual Studio 2017 (15.7.5) |
Sdk |
. NET Core SDK 2.1 |
Transfer tool |
FlashFxp |
Use |
Tools & Versions |
Linux Server |
CentOS 7 |
Sdk |
. NET Core SDK 2.1 |
Transfer tool |
Vsftp |
Reverse Proxy |
Nginx 1.12.2 |
preparatory work
- ASP. NET Core Sample Project
Items |
Description |
Sdk |
. NET Core SDK 2.1 |
Project templates |
ASP. NET Core Web App (MVC) |
Project name |
Helloweb |
Solution Name |
Helloweb |
Solution root Directory |
D:\Projects\Test\HelloWeb |
After the project is created, you need to modify the Program.cs file
Manually specify the startup URL as: http://*:5000
public class program {public static void main (string[] args) {createwebhostbuilder (args). Build (). Run (); } public static IWebHostBuilder createwebhostbuilder (string[] args) = Webhost.createdefaultbuilder (args). Usestartup<startup> (). Useurls ( "http://*:5000");}
http://*:5000
Can be compatible,, and http://localhost:5000
http://127.0.0.1:5000
easy to http://所在机器ip:5000
test after we deploy to Linux server
- CentOS 7 Deployment environment
CentOS 7 Virtual machine installation: Ken.io/note/hyper-v-course-setup-centos
- Deploying the FTP service: Ken.io/note/centos-quickstart-ftpserver
- Deploying the. NET Core SDK 2.1:ken.io/note/centos7-.netcore2.1-setup
- Deploying Nginx:ken.io/note/centos-quickstart-nginx-setup
second, publish to the local 1. Command Line Publishing
operation on cmd command line
#进入项目根目录(HelloWeb.csproj所在目录)d: && cd D:\Projects\Test\HelloWeb\HelloWeb#执行publish命令dotnet publish -c release#dotnet publish -h可以查看publish可选参数#-c release 表示以Release方式进行编译
2. Visual Studio Graphical interface operation
- In the item's right mouse button menu, select: Publish
- Select a folder on the left and create a configuration
- Select Publish in the Publish Actions panel
3. Run the test locally
After publishing is complete, you can view the published file output in D:\Projects\Test\HelloWeb\HelloWeb\bin\Release\netcoreapp2.1\publish.
On the cmd command line operation:
#进入发布输出目录d: && cd D:\Projects\Test\HelloWeb\HelloWeb\bin\Release\netcoreapp2.1\publish#启动应用dotnet HelloWeb.dll#启动成功会输出以下信息Hosting environment: ProductionContent root path: D:\Projects\Test\HelloWeb\HelloWeb\bin\Release\netcoreapp2.1\publishNow listening on: http://[::]:5000Application started. Press Ctrl+C to shut down.
Access via browser: localhost:5000, verify if normal
Iii. Deployment 1. Environment Configuration & Start-up Test
Connect to the CENTOS7 server via Xshell
- Create a Site directory and authorize
#创建站点根目录sudo mkdir -p /webroot/helloweb#创建站点应用目录sudo mkdir -p /webroot/helloweb/app#创建站点日志目录sudo mkdir -p /webroot/helloweb/logs#目录授权sudo chmod 777 /webroot/helloweb/appsudo chmod 777 /webroot/helloweb/logs
#添加可访问端口sudo firewall-cmd --add-port=5000/tcp --permanent#重新加载防火墙策略sudo firewall-cmd --reload
Transfer to/webroot/helloweb/app via FTP
Start with command:
#进入app目录并通过dotnet命令启动站点cd /webroot/helloweb/app/dotnet HelloWeb.dll#启动成功后,将会输出:Hosting environment: ProductionContent root path: /webrootNow listening on: http://[::]:5000Application started. Press Ctrl+C to shut down.
This time through the browser access to http://{centos-ip}:5000 can
If the site style is not loaded properly, it should be 404 when accessing static files under Wwwroot.
This is because ASP. NET core defaults to the directory where the command executes as the application root to read the file
Therefore, be sure to execute the dotnet command in the directory where the HelloWeb.dll is located, otherwise you will not be reading static files in the Wwwroot directory
2. Configure Startup Scripts
Show how it starts, and if you close the Xshell connection window, the app is turned off. So you can start with the Nohup command, the script example:
nohup dotnet HelloWeb.dll &
Nohup because it is a private boot, the application is closed to find the process ID before it can be closed, so it is more convenient to configure the startup, stop the script to operate more easily
- To create a startup script
Create a start.sh file
sudo vi /webroot/helloweb/start.sh
Script content:
#!/bin/shCD $ (cd "$ (dirname" $ ")"; pwd) app_name=helloweb.dllecho " Start begin ... "echo $APP _name CD appnohup dotnet $APP _name >>. /logs/info.log 2>> /logs/error.log &CD. Sleep 5if test $ (pgrep-f $APP _ name|wc-l)-eq 0then echo "start Failed "else echo " start successed "fi
Create a stop.sh file
sudo vi /webroot/helloweb/stop.sh
Script content:
#!/bin/shCD $ (CD $ (dirname "$") "; pwd) App_name=helloweb.dllprocess= ' ps-ef|grep $APP _name|grep-v grep |awk ' {print $} ' while: do kill-9 $PROCESS >/dev/null 2>&1 if [$-ne 0]; then break else continuefidone echo ' stop success! '
#启动应用sh /webroot/helloweb/start.sh#启动成功输出start begin...HelloWeb.dllstart successed#停止应用sh /webroot/helloweb/stop.sh#停止成功后输出stop success!
Boot & Reverse proxy configuration 1. Configure boot-up
- To mark a stop script as an executable file
sudo chmod +x /webroot/helloweb/stop.sh
- Create a Helloweb service
#创建服务文件sudo vi /usr/lib/systemd/system/helloweb.service#文件内容[Unit]Description=hellowebAfter=network.target[Service]WorkingDirectory=/webroot/helloweb/appExecStart=/usr/bin/dotnet /webroot/helloweb/app/HelloWeb.dllExecStop=/webroot/helloweb/stop.shRestart=alwaysRestartSec=10[Install]WantedBy=multi-user.target
If you have more than one version of the. NET core environment, remember to replace the/usr/bin/dotnet with the corresponding path
- Set up service boot & start service
#设置服务开机启动sudo systemctl enable helloweb#启动服务sudo systemctl start helloweb
2, Nginx reverse proxy configuration
- Create a Helloweb site configuration
#新建配置文件sudo vi /etc/nginx/conf.d/helloweb.conf#反向代理配置内容server { listen 80; #监听80端口 server_name helloweb.mydomain.com; #绑定的域名 location / { #转发或处理 proxy_pass http://localhost:5000; } error_page 500 502 503 504 /50x.html;#错误页 location = /50x.html { root /usr/share/nginx/html; }}
- Heavy-duty Nginx configuration
sudo nginx -s reload
#添加可访问端口sudo firewall-cmd --add-port=80/tcp --permanent#重新加载防火墙策略sudo firewall-cmd --reload
Point the helloweb.mydomain.com to the server IP by setting the local hosts
Then access through the browser: helloweb.mydomain.com
you can
Above, if in doubt, please contact me: ken.io/home/about
- This article was first published: 2018-07-22
- This text link: ken.io/note/asp.net-core-publish-deploy-guide