美文网首页
Centos下使用ngxin+supervisor部署netco

Centos下使用ngxin+supervisor部署netco

作者: 长安小白菜 | 来源:发表于2018-11-27 17:14 被阅读0次

    背景

    小白菜最近在腾讯云购买了一台云主机,配置是单核1G,后来我升级到了单核2G,起初系统使用的Windows Server 2012,开机一看内存,我去,500多M没了,好吧,安装个MySql,服务跑起来,我又去,Mysql吃了400多M,这这这...可怜的配置容不起这个昂贵的开销呀,果断从装系统,这次拥抱了Centos,开机后舒服多了,90多M,安装个Nginx跑restful先。

    既然服务器选择了Centos,后端的选择有Nodejs、java、php...等,当然还有net-core,于是乎小白菜也尝尝鲜,在Centos部署个net-core版本的restful Api玩玩。

    环境准备

    1. 本地环境

    本地依然使用Windows开发,环境清单如下

    • .NET Core 2.1 SDK
    • Visual Studio Code
    • 用于Visual Studio Code的C#

    下面是下载地址:

    https://www.microsoft.com/net/download/archives
    https://code.visualstudio.com/download
    https://marketplace.visualstudio.com/items?itemName=ms-vscode.csharp

    安装完成之后,测试一下是否安装成功

    dotnet --info
    

    2. 服务器环境

    登录我们的云主机,如果没有云主机,也可以在虚拟机中创建一台Centos,我使用的是putty进行管理。

    首先安装rpm

    sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
    

    再安装.NET SDK

    sudo yum update
    sudo yum install dotnet-sdk-2.1
    

    测试一下是否安装成功

    dotnet --info
    

    输出如下信息,可以看到版本号


    2018-11-26_163953.jpg

    接着我们在服务器做一个Hello World!的控制台应用

    dotnet new console -o myApp
    cd myApp
    dotnet run
    

    输出了Hello World!

    2018-11-26_164318.jpg

    nginx安装

    Nginx (engine x)是C语言开发的一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。

    1.编译ngixn依赖gcc环境,首先安装编译环境

    yum install gcc-c++
    

    2.ngxin需要pcre来解析正则表达式,pcre-devel 是使用pcre开发的一个二次开发库

    yum install -y pcre pcre-devel
    

    3.安装zlib提供压缩和解压缩的方式,nginx使用 zlibhttp 包的内容进行 gzip

    yum install -y zlib zlib-devel
    

    4.安装OpenSSL,强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,nginx不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL库。

    yum install -y openssl openssl-devel
    

    5.下载nginx安装包

    wget -c https://nginx.org/download/nginx-1.10.1.tar.gz
    

    6.解压并进入文件夹

    tar -zxvf nginx-1.10.1.tar.gz
    cd nginx-1.10.1
    

    7.配置,使用默认配置

    ./configure
    

    8.编译安装

    make
    make install
    

    9.查看ngxin安装路径

    whereis nginx
    

    10.nginx的相关命令

    #进入安装目录的sbin文件夹
    cd /usr/local/nginx/sbin/
    
    ./nginx #启动
    ./nginx -s stop  #停止
    ./nginx -s quit  #退出
    ./nginx -s reload  #重新加载,修改配置文件后
    

    ngxin安装完毕,启动ngxin后,浏览器输入ip地址,可以看到如下画面证明安装成功!


    2018-11-27_141123.jpg

    本地编写api代码

    首先进入到你的工作空间,创建空文件夹

    mkdir dotnet-core-webapi-test
    cd dotnet-core-webapi-test
    

    创建一个webapi项目,名字就叫TodoApi

    dotnet new webapi -o TodoApi
    

    如下图,创建成功!


    2018-11-26_162002.jpg

    然后使用Visual Studio Code打开这个文件夹,像介样子

    2018-11-26_162235.jpg

    在根目录添加host.json文件,用于配置api启动的端口,内容如下:

    { "url": "http://*:5000" }
    

    修改Program.cs文件,加入配置的url

        public class Program
        {
            public static void Main(string[] args)
            {
                CreateWebHostBuilder(args).Build().Run();
            }
    
            public static IWebHostBuilder CreateWebHostBuilder(string[] args)
            {
                var config = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory).AddJsonFile("host.json").Build();
                var url = config["url"];
                return WebHost.CreateDefaultBuilder(args).UseUrls(url).UseStartup<Startup>();
            }
        }
    

    F5运行调试

    2018-11-26_170704.jpg

    输入地址http://localhost:5000/api/values在浏览器中查看,输出了默认的值,暂时不做任何修改,我们本篇的目的是把它部署到生产环境Centos上。

    2018-11-27_165136.jpg

    到目前为止,api项目已经跑起来了,我们接下来编译发布它。
    在vscode中选择 Terminal > New Terminal打开一个终端窗口,在底部,默认地址是我们的项目文件夹地址。

    2018-11-26_171739.jpg

    输入dotnet publish发布该项目,发布到哪里去了,在bin\Debug\netcoreapp2.1\publish下面,就是需要部署到服务器的内所有文件。我们使用psftp将文件上传到服务器的/home/wwwroot目录下,命令如下

    #使用密钥登录 ppk是密钥文件
    D:\putty\psftp -i D:\putty\opfree.ppk 
    #输入账号和密钥密码,这里我使用root用户登录
    login as: root
    Passphrase for key "imported-openssh-key":
    #使用put -r “本地目录” “服务器目录”命令,将文件夹上传到云主机上
    put -r E:\WorkSpace.2018\dotnet-core-webapi-test\TodoApi\bin\Debug\netcoreapp2.1\publish /home/wwwroot
    

    效果如下:

    2018-11-27_144742.jpg

    这时候,文件已经上传至服务器,我们去服务器进行部署。

    服务器部署

    修改nginx配置文件

    #找到nginx的配置文件,在根目录搜索
    cd /
    find -name nginx.conf
    

    如下图:

    2018-11-27_152044.jpg

    打开该文件,进行修改:

    #编辑文件
    vi /usr/local/nginx/conf/nginx.conf
    #按i键进入修改模式
    #修改完毕按ESC退出,按:进入底行模式,输入wq保存退出
    

    修改内容如下,使得80端口的默认路径指向本机的5000端口

    2018-11-27_141744.jpg

    保存成功后,重启nginx

    cd /usr/local/nginx/sbin
    ./nginx -s quit  #退出
    ./nginx #启动
    

    现在访问http://45.40.193.247/api/values是会报错的,因为5000端口没有任何东西

    2018-11-27_154256.jpg

    启动webapi项目

    dotnet /home/wwwroot/TodoApi.dll
    

    此时再访问http://45.40.193.247/api/values就得到了api返回值了。

    2018-11-27_141459.jpg

    在chorme中查看Headers信息,发现果然是nginx

    2018-11-27_154821.jpg

    进程守护

    如果我们此时,将dotnet /home/wwwroot/TodoApi.dll这个shell关掉的话,那么对应的api服务也就关掉了,部署一个网站,总不能打shell吧,所以我们需要它在后台进行运行,并且在服务器挂机、重启之后可以自动启动。

    ngxin开机启动

    在rc.local增加启动代码就可以了。

    #编辑文件
    vi /etc/rc.local
    #最底部增加代码
    /usr/local/nginx/sbin/nginx
    #设置执行权限
    chmod 755 /etc/rc.local
    
    dotnet项目守护和开机启动

    supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,我们使用supervisor来守护我们的todoapi

    1.安装

    yum install python-setuptools
    easy_install supervisor
    

    2.配置

    #在etc下创建目录supervisor
    mkdir /etc/supervisor
    #在supervisor下创建目录conf.d
    mkdir /etc/supervisor/conf.d
    #拷贝配置文件
    echo_supervisord_conf > /etc/supervisor/supervisord.conf
    #指定配置文件
    supervisord -c /etc/supervisor/supervisord.conf
    #打开配置文件编辑
    vi /etc/supervisor/supervisord.conf、
    #将最后两行修改为
    [include]
    files=./conf.d/*.conf
    #进入目录 /ect/supervisor/conf.d
    cd /ect/supervisor/conf.d
    #创建文件 todoapi.conf
    vi todoapi.conf
    #输入以下内容
    [program:todoapi]
    command=dotnet TodoApi.dll #要执行的命令
    directory=/home/wwwroot #命令执行的目录
    environment=ASPNETCORE__ENVIRONMENT=Production #环境变量
    user=root #进程执行的用户身份
    stopsignal=INT
    autostart=true #是否自动启动
    autorestart=true #是否自动重启
    startsecs=1 #自动重启间隔
    stderr_logfile=/var/log/common.err.log #标准错误日志
    stdout_logfile=/var/log/common.out.log #标准输出日志
    #保存后重新加载配置
    supervisorctl shutdown
    supervisord -c /etc/supervisor/supervisord.conf
    #Supervisor的常用命令
    supervisorctl shutdown #关闭所有任务
    supervisorctl stop|start program_name #启动任务
    supervisorctl status #查看所有任务状态
    ps -ef | grep common #查看进程信息
    

    退出shell,重启计算机,依然可以正常访问地址“http://45.40.193.247/api/values”。

    至此,我们将netcore版本的api已经部署到了云主机上。小伙伴可能会问,为什么不使用5000端口直接访问呢,因为云主机为了安全期间,是会屏蔽一些端口的,比如web只开放了80、43,linux ssh登录的22等少量端口,大多数时候,一个服务器是不可能只有一个站点的,所以在最顶层使用nginx进行一个代理,后续随着域名的备案完成,ngxin届时需要更多的配置,我们会在这台服务器使用mysql、nginx域名与二级域名的配置、静态资源使用cdn(可能会牵扯到七牛之类的云服务)当然必不可少是一个前端的管理界面(使用vue进行构建)。


    小白菜 - 程序猿
    尘埃深处,清醒自持

    相关文章

      网友评论

          本文标题:Centos下使用ngxin+supervisor部署netco

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