美文网首页
CentOS 下部署 .NET Core Web项目

CentOS 下部署 .NET Core Web项目

作者: Paulo21 | 来源:发表于2020-03-02 19:21 被阅读0次

    服务器安装配置

    参考 https://www.jianshu.com/p/e2f8a56af5e0

    安装 .NET Core 运行时

    运行以下命令

    sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
    
    sudo yum install aspnetcore-runtime-3.1   // WEB 服务 需要安装 aspdotnet
    

    参考文档 https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-package-manager-centos7

    发布你的项目

    1. 使用VS发布你的项目
    2. 然后使用FTP将项目文件上传到项目目录

    启动你的 .NET Core 项目

    切换至项目目录,运行你的主dll文件

    dotnet webapp.dll
    

    至此,你的项目应该可以通过 http://your_ip:5000 访问了(如果需要,可能还要开放 5000 端口)。

    设置服务

    为了避免每次需要执行 dotnet 命令开启 web 服务,我们来创建一个服务。

    cd /etc/systemd/system   
    # 创建服务
    touch webapp.service
    # 更改服务文件的内容
    vi webapp.service
    

    内容如下:

    [Unit]
    Description=Oms.SCU Application running on CentOS
    [Service]
    ExecStart=/usr/bin/dotnet /你的目录/你的dll.dll --basePath /你的目录 --contentRoot /你的目录
    Restart=always
    RestartSec=5
    SyslogIdentifier=oms.scu
    User=root
    Environment=ASPNETCORE_ENVIRONMENT=Development
    [Install]
    WantedBy=multi-user.target
    

    然后就可以运行下面的命令管理你的服务了

    service webapp start
    service webapp stop
    service webapp restart
    

    设置为开机自启动

    systemctl enable webapp
    

    安装Apache

    安装 Apache ,配置反向代理,将服务映射到其他端口(此步按需进行)。

    sudo yum -y install httpd mod_ssl
    

    /etc/httpd/conf.d/目录内创建一个配置文件,如webapp.conf内容如下:

    <VirtualHost *:80>
        ProxyPreserveHost On
        ProxyPass / http://127.0.0.1:5000/
        ProxyPassReverse / http://127.0.0.1:5000/
        ErrorLog logs/webapp-error.log
        CustomLog logs/webapp-access.log common
    </VirtualHost>
    

    作用是将监听本地的 80 端口并将请求转发至 5000 端口。5000 为默认的 dotnet 项目启动的端口。
    然后重启 apache

    service httpd restart
    

    此时,你的项目应该可以通过 http://your_ip 访问了(如果有问题注意检查一下防火墙是否开启80端口)。

    如果需要监听其他端口,如 8080 ,则在 webapp.conf 内更改:

    Listen 8080
    <VirtualHost *:8080>
        ProxyPreserveHost On
        ProxyPass / http://127.0.0.1:5000/
        ProxyPassReverse / http://127.0.0.1:5000/
        ErrorLog logs/webapp-error.log
        CustomLog logs/webapp-access.log common
    </VirtualHost>
    

    将 Apache 设置为开机自启动

    systemctl enable httpd
    

    503 Service Unavailable

    可能出现如下问题:
    http://ip:5000 可正常访问
    但通过 Apache 代理之后无法访问,报错 503 Service Unavailable

    经过查看 Apache log 发现如下错误:

    [Thu Apr 02 15:14:45.481445 2020] [proxy:error] [pid 3065] (13)Permission denied: AH00957: HTTP: attempt to connect to 127.0.0.1:5000 (127.0.0.1) failed
    [Thu Apr 02 15:14:45.481488 2020] [proxy:error] [pid 3065] AH00959: ap_proxy_connect_backend disabling worker for (127.0.0.1) for 60s
    [Thu Apr 02 15:14:45.481493 2020] [proxy_http:error] [pid 3065] [client 192.168.9.1:54901] AH01114: HTTP: failed to make connection to backend: 127.0.0.1
    

    原因是 httpd 默认被 SELinux 拦截,导致无法转发请求,使用以下命令查看设置:

    getsebool -a | grep httpd
    
    …………
    httpd_can_network_connect --> off
    …………
    

    运行如下命令

    setsebool -P httpd_can_network_connect 1
    

    503 错误解决,访问正常。

    SELinux 问题

    SELinux 真的会给各种应用带来权限问题,导致部署可能出现各种奇怪及潜在的问题,个人建议关闭。

    vim /etc/selinux/config
    
    #  将原本的 SELINUX=enforcing 改为 disbaled
    SELINUX=disabled
    

    然后重启服务器即可

    相关文章

      网友评论

          本文标题:CentOS 下部署 .NET Core Web项目

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