Ubuntu

Ubuntu系统部署.net core 项目 并开机自启动

2021-12-15  本文已影响0人  Rinaloving

Ubuntu系统部署.net core 项目 并开机自启动

一、使用远程工具连接服务器

  1. 可以使用 Xshell 工具远程(百度下载破解版),这里使用的是 Tabby :

    #Tabby下载地址:https://tabby.sh/
    
    #连接服务器 (ip地址:192.168.194.128 用户名:dunhao, 密码:123456)
    #查看ip地址: ifconfig -a
    根据提示安装 net-tools
    sudo apt install net-tools
    #检查SSH是否开启(Ubuntu默认是不安装SSH服务的) 
    ps -e|grep ssh
    # 安装SSH
    sudo apt-get install ssh
    # 启动SSH服务
    sudo /etc/init.d/ssh start
    # 修改SSH配置文件(可以更改包括端口、是否允许root登录等设置、配置文件位置)
    /etc/ssh/sshd_config
    #默认是不允许root远程登录的,可以在配置文件中开启
    sudo vim /etc/ssh/sshd_config
    找到PermitRootLogin without-password 修改为PermitRootLogin yes
    # 重启SSH服务
    service ssh restart
    
    
    

二、安装程序运行环境

  1. 安装.net core 环境( .net core 2.1 )

    # 更新环境
    sudo apt-get update
    
    wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
        
    sudo dpkg -i packages-microsoft-prod.deb
    
    rm packages-microsoft-prod.deb
     
    # 安装SDK 
    
    sudo apt-get install apt-transport-https
    
    sudo apt-get update
    
    sudo apt-get install dotnet-sdk-2.1
    # 验证SDK安装情况
    dotnet --info
    
    
    
    
  1. 安装 Nginx

    # 参考文档地址:https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-20-04
    # 安装
    sudo apt update
    sudo apt install nginx
    # 设置防火墙
    sudo ufw allow 'Nginx HTTP'
    # 查看状态
    sudo ufw status
    # 停掉服务
    sudo systemctl stop nginx
    # 开启服务
    sudo systemctl start nginx
    # 重启服务
    sudo systemctl restart nginx
    
    
    
  1. 安装 Mysql

    # 安装 mysql 5.7.21  数据库
    
    # 更新
    sudo apt-get update 
    sudo apt-get upgrade
    # 安装
    官网下载 mysql-server_5.7.36-1ubuntu18.04_amd64.deb-bundle.tar
    mkdir mysql5.7.36
    # 解压
    sudo tar -vxf  mysql-server_5.7.36-1ubuntu18.04_amd64.deb-bundle.tar
    # 用dpkg 进行安装
    sudo dpkg -i mysql-*.deb
    # 解决报错 (必须联网)
    sudo apt-get install libtinfo5
    sudo apt-get install libmecab2
    
    # 安装成功后,开启远程连接
    1. 连接数据库
    mysql -uroot -p 
    
    GRANT ALL PRIVILEGES ON *.* TO root@"192.168.194.128" IDENTIFIED BY "root" WITH GRANT OPTION;
    
    flush privileges;
    
    use mysql
    
    update user set host = '%' where user = 'root';
    
    flush privileges;
    
    # 以上操作还是无法远程连接
    1. 查看3306端口是否正常
    
    修改mysql配置文件
    sudo  vim /etc/mysql/mysql.conf.d/mysqld.cnf
    找到
    bind-address = 127.0.0.1
    # 前面加注#释掉  #bind-address = 127.0.0.1
    # 重启 mysql 服务
    service mysql restart
    重新连接则成功
    
    # 创建工位(会议数据库) 导入sql语句
    
    
    
    
  ## 三、项目部署

  1. 前端:

     ```python
     # nginx中部署前端wevb 
     etc/nginx/nginx.conf文件里, 也可以配置在子配置文件里etc/nginx/conf.d/default.conf。我这里为了配置方便,就配置在子文件里了。当然你也可以再新建一个文件,只要在conf.d文件夹下就可以了。 
     #在conf.d目录下新建一个test.conf文件:
     touch test.conf
     #打开test.conf文件:
     vim test.conf
     # 添加如下内容
     server{
             listen 8001;
             server_name localhost;
             root /usr/share/nginx/html/html8001;
             index index.html;
     }
     # 然后在/usr/share/nginx/html目录下新建一个目录:
     mkdir html8001
     # 然后把项目放进去,重启nginx
     sudo systemctl restart nginx
     #访问 http://192.168.194.128:8001
     
     # 设置nginx开机自启动 (按照上面方式默认已经自启动了)
     
     我们需要在 /etc/init.d/目录下创建一个nginx的脚本文件,命令 vi nginx 输入以下内容
     
     #! /bin/sh
     # Author: rui ding
     # Modified: Geoffrey Grosenbach http://topfunky.com
     # Modified: Clement NEDELCU
     # Reproduced with express authorization from its contributors
     set -e
     PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
     DESC="nginx daemon"
     NAME=nginx
     DAEMON=/usr/local/nginx/sbin/$NAME
     SCRIPTNAME=/etc/init.d/$NAME
     
     
     # If the daemon file is not found, terminate the script.
     test -x $DAEMON || exit 0
     
     d_start() {
       $DAEMON || echo -n " already running"
     }
     
     d_stop() {
       $DAEMON –s quit || echo -n " not running"
     }
     
     d_reload() {
       $DAEMON –s reload || echo -n " could not reload"
     }
     
     case "$1" in
       start)
         echo -n "Starting $DESC: $NAME"
         d_start
         echo "."
       ;;
       stop)
         echo -n "Stopping $DESC: $NAME"
         d_stop
         echo "."
       ;;
       reload)
         echo -n "Reloading $DESC configuration..."
         d_reload
         echo "reloaded."
       ;;
       restart)
       echo -n "Restarting $DESC: $NAME"
       d_stop
     # Sleep for two seconds before starting again, this should give the
     # Nginx daemon some time to perform a graceful stop.
       sleep 2
       d_start
       echo "."
       ;;
       *)
       echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2
       exit 3
       ;;
     esac
     exit 0
     
     # 然后输入命令
     update-rc.d –f nginx defaults
     
     # 如果要取消开机自启动:
     update-rc.d -f nginx remove
     
     
     补充资料:
     
     /etc/init.d/里存放了所有的启动脚本,我们平时可以通过/etc/init.d/脚本名 启动模式 来启动某个应用。 例如输入命令“/etc/init.d/smb start”来启动smb服务。 如果是在RedHat系统下,还可以通过service smb start来启动某个服务。
     
     尽管/etc/init.d目录中的脚本可以启动和停止各个服务,但在系统引导时,init并不是直接在/etc/init.d目录下找各个服务的启动脚本,而是在/etc/rc.d/目录下查找,该目录包含rc0.d、rc1.d等分别代表不同的init启动级别的子目录。
     
     你可以用Runlevel命令查看当前你的系统是在那个运行级
     
     #Runlevel
          N  2
     注:我当前的系统是2级
     接着来看看这些rcx.d的目录下所包含的内容,内容全是一些符号链接,链接到上一级init目录中的脚本上。 这些符号链接名称都以S或K开头,后面跟一个数字以及该脚本所控制的服务名,例如S10network。 当init从低的运行级向高的运行级过渡时,它按照数字递增的顺序运行所有以S开头的脚本,S=start,即启动脚本对应的服务;K=kill,即杀死脚本对应服务。
     
     前面介绍到rcx.d目录下指向启动脚本的符号链接是由K或S+数字+服务名 所组成,中间这个数字十分重要,系统启动时按照这个数字递增执行所有S开头的脚本,系统关闭时按照这个数字递减执行所有K开头的脚本。
     
     如何自定义符号链接? 启动脚本: 因为我刚才的运行级是2级 所以在/etc/rc.d/rc2.d 目录下运行
     
     #ln -s /etc/init.d/nginx S99nginx       //重新定义nginx服务的脚本启动顺序
     nginx
     
     
     
     ```

     

  2. 后台:

     ```python
     # 在home文件夹下wwwroot 文件夹
     mkdir wwwroot
     # 下面可自行创建文件夹,把后台项目放进对应的文件夹即可(我的是在 /home/dunhao/wwwroot/deskbook 下)
     # 用Xftp 工具把项目文件放到文件夹下面 ( tabby工具文件夹没法传 )
     # 部署完成后对项目设备开机自启动
     这里使用 Supervisor
     官网地址:http://supervisord.org/
     # Supervisor
     # 安装
     sudo apt-get install supervisor
     # 你也可以使用pip安装
     pip install supervisor
     官方安装教程:http://supervisord.org/installing.html
     # 安装完之后我们配置自启动配置文件,配置文件目录为: 
     /etc/supervisor/conf.d/
     # 我们创建一个配置文件
     sudo touch deskbook.conf
     sudo vim deskbook.conf
     # 加入如下
     [program:GeduDistributionApi]
     command=dotnet GeduDistributionApi.dll
     directory=/home/dunhao/wwwroot/deskbook # 项目地址
     environment=ASPNETCORE__ENVIRONMENT=Production
     command=sh frp.sh
     autostart=true
     autorestart=true
     startretries=100
     redirect_stderr=true
     stdout_logfile=/home/dunhao/wwwroot/deskbook/out.log
     
     官方给出的详细的参数设置文档:http://supervisord.org/configuration.html
     
     # 重启生效
     sudo service supervisor stop
     sudo service supervisor start
     #发布文件之后重启生效的命令
     service supervisor restart
     
         
     # 检查 Supervisor 状态
     配置之后,我们可以检查一下 Supervisor 状态。首先确认是否运行:
     ps aux | grep supervisor
     一般都能看到对应进程。
     # 设置 Supervisor开机自动启动
     如果我们是使用 apt 安装的,一般来说会自动设置好开机启动,这也是为什么文章开头推荐使用 apt 进行安装的理由。但是如果你重启之后发现没有开机自动启动,可以按照下面的方法配置。(我的并没有)
     
     把下面的命令写进 rc.local 即可:
     /usr/bin/supervisord
     
     # Ubuntu 配置 rc.local 
     
     Ubuntu 18.04 的改动还是比较大,很多之前版本 Ubuntu 上简单易用的一些功能都被砍了,比如设置 rc.local 自动启动脚本的功能。之前的 Ubuntu 上只需要把想要自动启动的脚本放到 /etc/rc.local 这个文件,就可以开机启动了,但是 Ubuntu 18.04 这样做已经不行了,因为 rc-local.service 这个 systemd service 已经默认不启用了。所以我们所需要做的就是重新启用 rc-local.service,然后就可以像之前一样简单的设置开机自动启动脚本了。
     
     # 创建 rc-local.service 配置文件
     这个配置文件默认在 /lib/systemd/system/ 这个目录下,我们只需将它拷贝到对应目录:
     sudo  cp /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service
     
     然后编辑这个文件:
     sudo vim /etc/systemd/system/rc-local.service
     最后加上这些内容
     [Install]
     WantedBy=multi-user.target
     Alias=rc-local.service
     
     修改后的 rc-local.service 文件完整如下:
     #  SPDX-License-Identifier: LGPL-2.1+
     #
     #  This file is part of systemd.
     #
     #  systemd is free software; you can redistribute it and/or modify it
     #  under the terms of the GNU Lesser General Public License as published by
     #  the Free Software Foundation; either version 2.1 of the License, or
     #  (at your option) any later version.
     
     # This unit gets pulled automatically into multi-user.target by
     # systemd-rc-local-generator if /etc/rc.local is executable.
     [Unit]
     Description=/etc/rc.local Compatibility
     Documentation=man:systemd-rc-local-generator(8)
     ConditionFileIsExecutable=/etc/rc.local
     After=network.target
     
     [Service]
     Type=forking
     ExecStart=/etc/rc.local start
     TimeoutSec=0
     RemainAfterExit=yes
     GuessMainPID=no
     
     [Install]
     WantedBy=multi-user.target
     Alias=rc-local.service
     
     # 创建 rc.local 文件 (18.04 以后默认是没有/etc/rc.local这个文件夹的, 需要手动创建)
     配置完成后,需要创建一个rc.local文件:
     sudo vim /etc/rc.local
     脚本内容为:
     #!/bin/sh -e
     cmd
     exit 0
     在这个文件里写入我们想要开机自动启动的命令即可,完整内容如下:
     #!/bin/sh -e
     cmd
     /usr/bin/supervisord
     exit 0
     
     #然后给这个文件加上执行权限:
     sudo chmod +x /etc/rc.local
     至此,就已经完成了 rc.local 的配置,重启之后会自动启动对应想启动的脚本。
     
     #如果发现没有生效,可以尝试:
     sudo systemctl enable rc-local
     
     # 拓展
     systemctl start rc-local.service  #启动服务
     systemctl stop rc-local.service  #暂停服务
     systemctl status rc-local.service #查看状态
     
     
     
     
     ```
上一篇下一篇

猜你喜欢

热点阅读