美文网首页
.netcore linux + nginx 部署

.netcore linux + nginx 部署

作者: lesliefang | 来源:发表于2018-12-05 11:37 被阅读42次

    参考官方文档 https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.1

    Kestrel 是 ASP.NET Core 的默认 web server。Kestrel 是跨平台的 (linux macos windows 上都能运行)。部署时可以直接用 Kestrel 跑。也可以与反向代理服务器(IIS、Nginx、Apache)一起使用。

    kestrel-1.png kestrel-2.png

    一般在生产环境中都用反向代理来部署,因为反向代理方便做负载均衡、 SSL 和安全防护等。

    下面用 centos7 来演示一下部署

    打包发布

    dotnet publish --configuration Release
    

    用 detnet 命令行发布。或在 VS 中点击 Build -> Publish 选择发布到文件夹。

    下面是发布后的目录结构

    publish.png

    之后把打包好的文件压缩上传到服务器。

    centos7 中安装 .NET Core runtime

    官方文档 https://dotnet.microsoft.com/download/dotnet-core/2.1

    .NET Core 有两种安装方式。一可以直接下载官方编译好的二进制文件,然后解压,配置 PATH 就行了。二可以用 Package Manager (yum、 apt-get 等) 自动安装。

    下面用 yum 安装

    sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
    sudo yum update
    sudo yum install aspnetcore-runtime-2.1
    

    上面的命令会同时安装 .NET Core runtime 和 ASP.NET Core runtime。 .NET Core runtime 只能运行 .net core 命令行程序等, ASP.NET Core runtime 能够运行 ASP.NET web 应用。

    确保命令行可以正确执行 dotnet 命令。

    切换到程序根目录执行 dotnet xxxx.dll 启动程序(xxx 是你 app 的名称),确保程序可以正确启动。

    run.png

    默认启动在 5000 端口,也可以配置为别的端口号

    下面安装 nginx 并配置反向代理

    首先添加 nginx 的 yum repository, 新建一个文件 /etc/yum.repos.d/nginx.repo, 把下面的配置拷贝到文件中

    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=0
    enabled=1
    

    之后执行

    sudo yum install nginx
    

    确保 nginx 成功安装并运行在 80 端口

    nginx.png

    nginx 默认配置文件是 /etc/nginx/nginx.conf, 里面默认包含了conf.d 下面的所有配置文件。(include /etc/nginx/conf.d/*.conf;

    修改 conf.d 目录下默认的 default.conf 文件替换为下面的反向代理配置

    server {
        listen        80;
        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;
        }
    }
    

    之后执行

    nginx -s reload
    

    执行时报了一个 nginx: [error] invalid PID number "" in "/var/run/nginx.pid" 的错误, pkill -9 nginx 杀死进程重启后重新执行 reload 就好了

    命令行启动程序, 之后访问 80 端口,发现反向代理已经起作用了。

    home.png

    systemd 做进程管理(也可以用 supervisor)

    /etc/systemd/system 下面新建一个 kestrel-helloapp.service 文件,把下面的配置拷贝进去

    [Unit]
    Description=Example .NET Web App running on centos
    
    [Service]
    WorkingDirectory=/root/hello/publish
    ExecStart=/usr/bin/dotnet /root/hello/publish/WebApplication2.dll
    Restart=always
    # Restart service after 10 seconds if the dotnet service crashes:
    RestartSec=10
    KillSignal=SIGINT
    SyslogIdentifier=dotnet-example
    User=root
    Environment=ASPNETCORE_ENVIRONMENT=Production
    Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
    
    [Install]
    WantedBy=multi-user.target
    

    enable service

    sudo systemctl enable kestrel-helloapp.service
    

    start service 并查看状态

    sudo systemctl start kestrel-helloapp.service
    sudo systemctl status kestrel-helloapp.service
    
    success.png

    浏览器访问发现运行成功

    查看日志

    奔溃或运行失败时需要查看 systemd 的日志

    sudo journalctl -fu kestrel-helloapp.service --since "2016-10-18" --until "2016-10-18 04:00"
    

    相关文章

      网友评论

          本文标题:.netcore linux + nginx 部署

          本文链接:https://www.haomeiwen.com/subject/bixicqtx.html