linux部署简单部署

news/2025/1/13 17:34:09/文章来源:https://www.cnblogs.com/hyt810/p/18242955

.NetCore程序的linux部署说明

主要内容

本篇介绍在linux部署.netcore程序的几种方式,包括传统方式,服务打包,docker部署等。

系统环境/工具

  • 腾讯云服务器
    • 操作系统:centos8.2
    • 地址:124.221.86.194
    • 用户名:root
    • 密码:hyt-linux12345!
  • 远程连接工具:xShell6
  • 数据库使用mariadb
    • 用户名:root
    • 密码:mysql123!
    • 端口:3306
  • 应用程序版本.net6.0(后端) + vue3.0(前端)

部署方式一:传统部署

0、linux的包管理器

  • Centos的包管理器
    • rpm
    • yum
    • dnf
  • Ubuntu的包管理器
    • apt-get
    • apt
    • snap

本地打包,服务器直接部署

1、安装mariadb

安装和配置

#1.安装命令
sudo yum install mariadb-server #2.查看状态
sudo systemctl  status  mariadb#3.服务启动
sudo systemctl  start  mariadb#4.开机自启
sudo systemctl  enable mariadb  #5.安装完成首次使用前初始化数据库,设置root新密码(mysql123!)
mysql_secure_installation#6.数据库登陆测试 
sudo mysql -u root -p#7.设置数据库远程登陆账号
use mysql;
select user,hose from user;#步骤1:查看root账号有没有host为%的记录,如果没有需要增加,查看步骤2
update user set host = '%' where host = 'localhost';#步骤2:修改localhost为%,如果不修改数据库无法远程登陆,如果执行失败直接执行步骤3
grant all privileges on *.* to 'root'@'%' identified by 'mysql123!';#步骤3:授权给root用户;*.*表示所有数据库下的所有表;'root'@'%' 表示支持所有ip地址使用root访问。
flush privileges; #步骤4:刷新数据库,也可以重启数据库服务 systemctl  restart  mariadb#8.服务器防火墙开启数据库端口(一般不选择关闭防火墙的操作,采用防火墙开放指定端口的策略)
firewall-cmd --query-port=3306/tcp #查看防火墙是否开放数据库端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent #如果没有开放需要开放#9.如果是云服务器,检查云服务器本身的防火墙策略是否打开指定端口#10.本地备份mariadb数据库(使用powershell导出后放到linux有问题,需要使用cmd导出)
d:\Program Files\MariaDB 10.8\bin>mysqldump.exe  --opt --single-transaction=TRUE --user=root --password=123456 --default-character-set=utf8 ceredb >D:\Work\CERE\DB\cere_backup.sql#11.将备份的数据库文件还原到服务器(将数据库备份文件上传到服务器)
CREATE DATABASE ceredb; #创建一个空数据库
use ceredb; #切换到创建的数据
source /home/DB/cere_backup.sql; #执行还原#12.检查数据库配置是否区分大小写,windows没有这个问题,只有linux有
cd /etc/my.cnf
#在[mysqld]下添加配置: lower_case_table_names = 1 
#如果配置文件指向!includedir /etc/my.cnf.d,则修改对应的文件
cd /etc/my.cnf.d/mariadb-server.cnf#重启服务
sudo systemctl  restart  mariadb #关闭服务
sudo systemctl  stop  mariadb #数据库密码修改
set password for 'root'@'%'  = password('123456');#linux服务器上备份数据 mysqldump -h 地址 -P 端口 --hex-blob -R -u 用户 -p 数据库名 > 备份.sql
cd /home/DB #打开想要存放的目录
mysqldump -h 127.0.0.1 -P 3306 --hex-blob -R -u root -p ceredb > 备份.sql #执行命令,输入密码后生成备份文件
  • 数据库服务启动查看状态
    图 1

  • 更新数据库user表,实现数据库远程连接
    图 2

  • 查看云服务器本身防火墙策略
    图 3

  • my.cnf 配置
    图 10

  • mariadb-server.cnf配置
    图 9

  • windows系统使用DataGrip备份和还原mysql

    • 备份数据库 图 1 图 2

    • 使用备份文件还原 图 3 图 4

问题

  • Q1:登陆失败 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
    • 解决:确认登陆用户名密码是否正确
  • Q2:远程连接数据库失败
    • 关闭服务器防火墙或者防火墙开放数据库端口。
    • 如果是云服务器检查是否防火墙有相关配置
    • 查看mysql远程登陆是否开启

防火墙配置

#查看防火墙状态
systemctl status firewalld.service#禁用防火墙的服务
systemctl disable firewalld.service#关闭防火墙
systemctl stop firewalld.service#打开防火墙
systemctl start firewalld.service#开机启动防火墙
systemctl enable firewalld.service#查看防火墙是否开放某个端口(例如3306)
firewall-cmd --query-port=3306/tcp#防火墙开放指定端口(例如3306)
firewall-cmd --zone=public --add-port=3306/tcp --permanent#防火墙关闭指定端口(例如3306)
firewall-cmd --zone=public --remove-port=3306/tcp --permanent  #配置立即生效
firewall-cmd --reload 

2、安装nodejs

#因为要安装进程守护pm2所以要先安装node
#安装命令
1.sudo yum install nodejs npm#查看node版本
2.nodejs --version#查看npm版本
3.npm -v#安装cnpm,提高安装包的速度
4.npm install -g cnpm --registry=https://registry.npm.taobao.org

3、安装pm2

#需要先安装node
#安装命令
1.cnpm install -g pm2#查看监控的进程
2.pm2 list#添加进程监控
3.pm2 start " 程序启动脚本 " --name 进程名#查看日志
pm2 logs 进程名#查看进程
pm2 info 进程名#监控进程
pm2 monit 进程名#重启进程
pm2 restart 进程名#删除进程
pm2 delete 进程名#开机自启
pm2 startup
pm2 save

4、安装nginx

#1.安装nginx
sudo yum install nginx#2.开机自启
sudo systemctl enable nginx#3.启动nginx
sudo systemctl start nginx#4.查看状态
sudo systemctl status nginx#重启服务
systemctl restart nginx#修改配置检查语法
nginx -t#立刻重启
nginx -s reload#查看日志
cd vi /var/log/nginx/error.log

5.安装.NET-SDK

#官方文档centos8是不支持.net6.0的
#1.将 Microsoft 包签名密钥添加到受信任密钥列表,并添加 Microsoft 包存储库,这一步保证能够下载最新的版本。
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm#2.安装SDK(为了方便直接安装SDK)
sudo yum install dotnet-sdk-6.0#3.查看版本
dotnet --info#安装.net6 SDK  (sdk包含运行时和编译环境,安装sdk除了可以运行程序外还可以对源代码进行编译打包)
sudo yum install dotnet-sdk-6.0#安装.netcore 运行时 (与 .NET 最兼容的运行时,包含运行环境但是不能对代码进行编译)
sudo yum install aspnetcore-runtime-6.0#安装不包含 ASP.NET Core 支持的 .NET 运行时
sudo yum install dotnet-runtime-6.0
  • 查看安装的dotnet版本
    图 5

6、应用程序部署

#1.安装 libgdiplus,对于使用 System.Drawing.Common 程序集的 .NET Core 应用,还需要依赖libgdiplus(版本 6.0.1 或更高版本),由于excel组件依赖了System.Drawing,所以需要安装libgdiplus
sudo yum install libgdiplus#2.发布后的后台程序修改 appname.runtimeconfig.json文件,在configProperties节点下加入"System.Drawing.EnableUnixSupport": true
{"runtimeOptions": {"configProperties": {"System.Drawing.EnableUnixSupport": true}}
}#3.上传到服务器,解压
unzip -O GBK publish.zip #使用GBK编码方式中文文件出现乱码#4.使用pm2进行进程守护
cd publish/  #进入程序根目录
pm2 start "dotnet CERE.WebApi.dll  --urls 'http://*:5000'  " --name webapi.dll #pm2监听
pm2 startup #开机启动
pm2 save #保存#5.打包前端程序上传到服务器
unzip -O GBK dist.zip #使用GBK编码方式中文文件出现乱码#6.配置nginx转发
cd /etc/nginx/
vi nginx.conf#7.修改配置后重启
nginx -t #检查语法
nginx -s reload #重启nginx让配置生效#8.防火墙开放nginx前后端对应端口(云服务器也要开放)
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=90/tcp --permanent
firewall-cmd --reload #8.访问系统
curl http://124.220.78.52:5000/api/helper/test #服务器测试接口http://124.220.78.52  #测试站点
  • CERE.WebApi.runtimeconfig.json文件新增配置
    图 4

  • 云服务器防火墙开放端口
    图 6

  • nginx 配置文件如下

#前端vue配置
server {listen 80;server_name  127.0.0.1;location / {root /home/App/dist; #vue文件目录try_files $uri $uri/  /index.html; #解决刷新404的问题index  index.html index.htm;}    #这里注意发布的时候,前端配置的后台接口地址直接配前端地址,这里进行转发到后台地址,来解决跨域问题location /api/ {            # API Serverproxy_pass http://124.220.78.52:90;  #将后台接口的请求代理到真实的服务器地址proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;                        proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}#后端.netcore配置
server {listen       90;server_name  127.0.0.1;location / {root html;proxy_pass http://127.0.0.1:5000; #后台接口启动地址端口index   index.html      index.htm;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection keep-alive;proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;                        }}

问题

  • Q1:修改nginx配置后重启服务出错 nginx: [emerg] bind() to 0.0.0.0:8088 failed (13: Permission denied)

    • 1.查看getenforce #如果是enabled表示开启,这个必须关闭,会造成很多不确定的权限问题
    • 2.临时关闭 :setenforce 0
    • 3.彻底关闭:修改/etc/selinux/config文件中的SELINUX="" 为 disabled ,然后重启reboot。
  • Q2:访问前端地址失败

    • 1.检查nginx配置前端文件路径是否正确
    • 2.检查防火墙是否开放对应端口,云服务器防火墙是否开放对应端口
    • 3.查看nginx日志
  • Q3:前端访问后台接口报错

    • 1.检查nginx配置的后台接口地址端口是否开放
    • 2.查看pm2程序日志
  • Q4:接口连接数据库失败 MySqlConnector.MySqlException (0x80004005): Table '****' doesn't

    • 修改数据库配置 etc/my.cnf 在[mysqld]下添加配置: lower_case_table_names = 1
  • 连接数据库失败
    图 7

7、修改服务器地址

#修改网络配置文件中的ip,dns 等信息
vi /etc/sysconfig/network-scripts/ifcfg-eth0#前端项目需要修改配置重新打包#后端项目需要修改appsetting.json的连接配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/723308.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP

asp.net core 3.0 学习笔记01 2022.04.29~05.02 本篇为基本入门,介绍一些基本概念和配置,对asp.net core建立一个基本的概念。 1.创建一个Web项目本质上来说asp.net core web 项目其实就是一个控制台程序public class Program {public static void Main(string[] args){Creat…

abp项目

abp项目.net版本升级 系统基于abp框架,.net版本为.net core 2.1,升级之后为.NET 6.0 1.升级项目的目标框架和依赖包项目列表如下升级顺序如下 HPE_ProjectManagement_WebApi.Web (需要修改的东西最多) HPE_ProjectManagement_WebApi.Utility HPE_ProjectManagement_WebApi.C…

代码随想录 算法训练营 d6 哈希表 Leetcode242 有效的字母异位词 Leetcode349 两个数组的交集 Leetcode202 快乐数Leetcode1 两数之和

哈希表 很重要 哈希表 哈希表 场景 一般哈希表都是用来快速判断一个元素是否出现集合里 一般来说 数组模拟 哈希set 哈希map 不同的场景当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。 但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组…

扫描线

扫描线 引入 扫描线一般运用在图形上面,它和它的字面意思十分相似,就是一条线在整个图上扫来扫去,它一般被用来解决图形面积、周长,以及二维数点等问题。 面积问题 例题1:【模板】扫描线 想象有一条线从下往上扫,会将整个图像依次扫描。我们只需要计算出每一条矩形(即图…

笛卡尔树

笛卡尔树 引入 笛卡尔树是一种二叉树,每一个节点由一个键值二元组\((k,w)\)构成。要求k满足二叉搜索树的性质,而w满足堆的性质。 一个有趣的事实是,如果笛卡尔树的\(k,w\)键值确定,且k互不相同,w互不相同,那么这个笛卡尔树的结构是唯一的。上面这棵笛卡尔树相当于把数组元…

虚树

虚树 什么是虚树 虚树常常被用在树形\(dp\)中。当一次询问仅仅涉及到整棵树中少量节点时为每次询问都对整棵树进行\(dp\)在时间上是不可接受的。此时,我们建立一棵仅仅包含部分关键节点的虚树,将非关键节点构成的链简化成边或是剪去,在虚树上进行\(dp\)。 虚树包含所有的询问…

矩阵乘法与矩阵快速幂

1 矩阵乘法 1.定义 若矩阵A的大小为\(n \times m\),矩阵B的大小为\(m \times p\),则两个矩阵可以做乘法,得到的矩阵C的大小为\(n \times p\)。 \[A = \begin{bmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \end{bmatrix} \]\[B = \begin{…

状压dp

状压dp 1.状态压缩 状态压缩就是使用某种方法,以最小的代价来表示某种状态,通常是用一串01数字(二进制数)来表示各个点的状态。这就要使用状态压缩的对象的点的状态只有两种:0和1。 2.使用条件 1.解法需要保存一定的状态数据(表示一种状态的一个数据值),每个状态通常情…

Redis之哨兵模式

概述无哨兵模式的主从切换的方法是当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费时费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。 Redis从2.8开始正式提供了Sentinel(哨兵)架构来解决这个问题…

ibus-libpinyin无法使用中括号下一页(未解决)

问题 中括号切换上下页用惯了,使用这个不能【】真不习惯。 SunPinyin sunpinyin可以[]切换,但是【】本身变成其他字符了。 不能使用shift将半路的中文换为英文。比如我打拼音,输入完后按shift,我希望他变成英文,并且切换到英文。 搜狗输入法 系统是Ubuntu 22.04 搞了半天用…

m基于FPGA的FIR低通滤波器实现和FPGA频谱分析,包含testbench和滤波器系数MATLAB计算程序

1.算法仿真效果 本系统进行了Vivado2019.2平台的开发,Vivado2019.2仿真结果如下:整体仿真结果如下:放大看,滤波效果如下:对应的频谱如下:FPGA的RTL结构如下:最后用matlab对比仿真,结果如下:可以看到,FPGA的滤波效果和频谱分析与matlab的结果一致。2.算法涉及理论知识…

ch6 信息商品

ch6 信息商品课程目标熟悉信息商品的形成和信息劳动价值理论 掌握信息商品的特征分析及信息商品的价格理论 运用信息商品价格理论分析和理解相关案例多看两眼 ppt 吧,这一部分考的很多 知识回顾 信息商品的概念信息成为商品的基本条件 不宜成为信息商品的信息产品类型 信息商品…