zoukankan      html  css  js  c++  java
  • .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

  • 相关阅读:
    Linux基础命令grep(如何过滤字符串)
    Linux基础命令wc(如何统计文件的行数?如何统计文件的字节数?)
    Linux基础命令tr(如何替换字符)
    django4
    django3
    django2
    django1
    jQuery2
    jQuery1
    事件
  • 原文地址:https://www.cnblogs.com/zyz-Notes/p/12631160.html
Copyright © 2011-2022 走看看