参考文献:https://mp.weixin.qq.com/s/U-qsP9vbH0tWXyfXBMDlTQ

1、下载安装SDK和运行时

https://dotnet.microsoft.com/download/dotnet/5.0/runtime

image.png
image.png

//按照命令依次往下执行即可:
image.png

  1. //1.安装SDK
  2. sudo dnf install dotnet-sdk-5.0

image.png

  1. //2.安装运行时
  2. sudo dnf install aspnetcore-runtime-5.0

image.png

  1. //3.查看SDKb版本
  2. dotnet --list-sdks

2、安装源代码管理工具

(1)安装Git

  1. sudo yum -y install git

image.png

  1. //查看是否安装成功
  2. git --version

3、发布项目

(1)运行【Blog.Core.Publish.Linux.sh】该项目,但是会提示权限不足。
//文件里代码如下:

  1. git pull;
  2. rm -rf .PublishFiles;
  3. dotnet build;
  4. dotnet publish -o /home/Bookkeeping/Bookkeeping.Api/bin/Debug/net5.0;
  5. cp -r /home/Bookkeeping/Bookkeeping.Api/bin/Debug/net5.0 .PublishFiles;
  6. echo "Successfully!!!! ^ please see the file .PublishFiles";
  1. ./Blog.Core.Publish.Linux.sh

image.png
(2)赋予最高权限,然后再次执行。

  1. chmod 777 ./Blog.Core.Publish.Linux.sh

image.png
(3)然后会自动执行,执行结果如下,然后刷新文件夹,可以看出多了一个【.PublishFiles】文件夹,说明发布成功。
image.png
image.png
(4)属于”dotnet”命令运行项目。

  1. dotnet xxx.dll

image.png

4-1、守护进程(方法一)

(1)进入Home文件夹下,然后安装Node.js

  1. //1.切换到home文件夹下
  2. cd /home/
  3. //2.下载Node.js
  4. wget https://nodejs.org/dist/v12.16.3/node-v12.16.3-linux-x64.tar.xz
  5. //3.解压
  6. tar -xf node-v12.16.3-linux-x64.tar.xz
  7. //4.设置全局变量
  8. vim /etc/profile
  9. PATH=$PATH:/home/node-v12.16.3-linux-x64/bin/

image.png
(2)然后刷新配置文件

  1. source /etc/profile

(3)测试结果,有版本号说明安装成功了。

  1. npm -v
  2. node -v

image.png
(4)当然,想要更快,可以使用淘宝的国内镜像cnpm

  1. npm install -g cnpm --registry=https://registry.npm.taobao.org

image.png

(4)输入以下命令安装pm2

  1. cnpm install -g pm2

//pm2常用命令

  1. pm2常用命令记录
  2. $ pm2 start app.js # 启动app.js应用程序
  3. $ pm2 start app.js -i 4 # cluster mode 模式启动4个app.js的应用实例
  4. # 4个应用程序会自动进行负载均衡
  5. $ pm2 start app.js --name="api" # 启动应用程序并命名为 "api"
  6. $ pm2 start app.js --watch # 当文件变化时自动重启应用
  7. $ pm2 start script.sh # 启动 bash 脚本
  8. $ pm2 list # 列表 PM2 启动的所有的应用程序
  9. $ pm2 monit # 显示每个应用程序的CPU和内存占用情况
  10. $ pm2 show [app-name] # 显示应用程序的所有信息
  11. $ pm2 logs # 显示所有应用程序的日志
  12. $ pm2 logs [app-name] # 显示指定应用程序的日志
  13. $ pm2 flush # 清空所有日志文件
  14. $ pm2 stop all # 停止所有的应用程序
  15. $ pm2 stop 0 # 停止 id为 0的指定应用程序
  16. $ pm2 restart all # 重启所有应用
  17. $ pm2 reload all # 重启 cluster mode下的所有应用
  18. $ pm2 gracefulReload all # Graceful reload all apps in cluster mode
  19. $ pm2 delete all # 关闭并删除所有应用
  20. $ pm2 delete 0 # 删除指定应用 id 0
  21. $ pm2 scale api 10 # 把名字叫api的应用扩展到10个实例
  22. $ pm2 reset [app-name] # 重置重启数量
  23. $ pm2 startup # 创建开机自启动命令
  24. $ pm2 save # 保存当前应用列表
  25. $ pm2 resurrect # 重新加载保存的应用列表
  26. $ pm2 update # Save processes, kill PM2 and restore processes
  27. $ pm2 generate # Generate a sample json configuration file

//安装成后,输入以下命令查看是否安装成功:
image.png
(5)进入需要发布项目的根目录。
image.png
(6)我们已经进去了/home/bookkeeping_website/.PublishFiles/文件夹,通过执行dotnet名利判断项目可以运行,那接下来我们换一种写法,守护一下这个进程

  1. pm2 start "xxx.dll" --name apk.dll

image.png

4-2、守护进程(方法一:推荐)

(1)在【/etc/systemd/system】下新建文件(推荐使用winscp),文件名以.service结尾,配置内容为(注意:中文注释需要删掉,否则部分 Linux 服务器会报错):

  1. [Unit]
  2. Description=blogcore #服务描述,随便填就好
  3. [Service]
  4. WorkingDirectory=/website/blogcore #工作目录,填你应用的绝对路径
  5. ExecStart=/usr/bin/dotnet /website/blogcore/CZKJ.CMS.Web.dll #启动:前半截是你dotnet的位置(一般都在这个位置),后半部分是你程序入口的dll,中间用空格隔开
  6. Restart=always
  7. RestartSec=25 #如果服务出现问题会在25秒后重启,数值可自己设置
  8. SyslogIdentifier=blogcore #设置日志标识,此行可以没有
  9. User=root #配置服务用户,越高越好
  10. Environment=ASPNETCORE_ENVIRONMENT=Production
  11. [Install]
  12. WantedBy=multi-user.target

(2)写完配置文件后保存,输入指令确认服务:

  1. systemctl enable (你的服务名).service;
  2. 例如:systemctl enable blogcore.service;

(3)然后启动服务

  1. systemctl start (你的服务名).service
  2. 例子:systemctl start blogcore.service

(4)然后查看一下服务状态, 出现状态说明服务运行正常。

  1. systemctl status 你的服务名
  2. 例如:systemctl status blogcore

5、开放端口

4.2.1-添加http服务到firewalld,pemmanent表示永久生效,若不加—permanent系统下次启动后就会失效。

  1. sudo firewall-cmd --permanent --add-service=http

//使用FirewallID:

  1. #手动开启端口:5656
  2. firewall-cmd --permanent --zone=public --add-port=5656/tcp
  3. #重启
  4. firewall-cmd --reload

6、端口问题

当遇到端口重复,先杀死进程,在重启。
image.png