.net core3.1+angular+is4 项目记录:部署篇

.net core3.1+angular+is4 项目记录:部署篇

  项目本来年前就可以结束的,可是前几个月一直在忙别的事情所以就耽搁了。原本打算边做边写,后来感觉在做的过程中想怎么写容易分心,所以写完了再写,之后有空的话应该会补充几篇,如果没有的话。。就算了吧。毕竟毕业事情还是挺多的。文末给出源码。

整体思路

  整理代码(包含数据库字符串,代理头等),上传 github,准备阿里云服务器(安装 git,.net core sdk,nginx,数据库可选等),发布项目,设置代理,守护进程。大约就这么多,全文根据官方文档来,官方文档没有的来自...

整理代码

  这部分根据个人需求,我没有用 https,所以只需要配置代理头部,和修改字符串。修改字符串不做过多解释,连接到你想要的数据库就可以了。配置代理头部,在 startup 的 Configure 中添加:

app.UseForwardedHeaders(new ForwardedHeadersOptions

{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});

  注意这部分在开发的时候是用不到。

上传 github,准备阿里云

  上传 github,不做解释。准备阿里云,我是用 Ubuntu 18.04。各种工具的安装各个官网都有文档请自行查阅,需要 git,.net core sdk,nginx,iptables,iptables-persistent。

发布项目

  创建一个文件夹使用 git 把源码 clone 下来,然后执行

dotnet publish --configuration Release

  接下来我们切换到 bin/Release/netcoreapp3.0/目录下,这里有发布完成的文件,将文件复制到网站根目录下。

配置代理

我们需要修改 nginx 的配置文件(/etc/nginx/sites-available/default )

server {
listen 80;//外部访问的端口
server_name example.com *.example.com;
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;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    }
}

  接下来我们需要验证配置文件有没有写对,执行:sudo nginx -t,如果显示成功则执行:sudo nginx -s reload 重启 nginx,这样才会读到我们修改之后的配置文件。

  执行完之后我们切回到网站根目录执行 dotnet xxx.dll 运行文件。此时在浏览器中输入 公网地址:80/controllers/action 你会发现访问不到。

开启端口

  开启对外端口分两步,第一步开启 ubuntu 中的端口,第二部开启阿里云的安全组。
  开启 ubuntu 的端口非常简单,请保证成功安装 iptables,iptables-persistent。

  1. iptables -I INPUT -p tcp --dport 开启的端口号 -j ACCEPT
  2. iptables-save
  3. sudo netfilter-persistent save
  4. sudo netfilter-persistent reload

  开启阿里云的安全组。请在实例列表中点击 更多-网络和安全组-安全组配置-配置规则-快速创建规则。只需要填写端口和授权对象,没有特殊要求的话授权对象填 0.0.0.0/0 即可。

守护进程

  就是为了防止程序出错的时候挂掉,如果挂掉就重启,目前我是这么理解的。首先创建一个服务文件。

sudo vim /etc/systemd/system/kestrel-helloapp.service

  编写文件内容

[Unit]
Description=描述信息

[Service]
WorkingDirectory=/var/www/helloapp 网站根目录
ExecStart=/usr/bin/dotnet 执行的命令 /var/www/helloapp/helloapp.dll 执行命令的目标
可以理解为 dotnet /var/www/helloapp/helloapp.dll
Restart=always

RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target
  1. 对服务进行保存 sudo systemctl enable kestrel-helloapp.service
  2. 使服务执行 sudo systemctl start kestrel-helloapp.service
  3. 查看服务的状态 sudo systemctl status kestrel-helloapp.service

  这样我们就不用再网站根目录下执行 dotnet xxx.dll 了服务会自动帮我们执行,还有许多大佬用 PM2,可以学习一下。

总结

  总体来说官方文档还是非常好用的,中途虽然出现过问题但都是粗心出的。一切比较顺利,希望未来能找个好工作,加油!源码:https://github.com/netLearner7/graduation_API

原文地址:https://www.cnblogs.com/zyz-Notes/p/12631160.html