美文网首页Ubuntu
Ubuntu系统部署.net core 项目 并开机自启动

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

作者: Rinaloving | 来源:发表于2021-12-15 11:14 被阅读0次

    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 #查看状态
         
         
         
         
         ```
    

    相关文章

      网友评论

        本文标题:Ubuntu系统部署.net core 项目 并开机自启动

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