NET core 项目部署至linux服务器步骤
预计达成效果:
1、配置好所有项目所需环境,创建本地数据库,redies,mq等中间件库,
2、将项目发布至服务器中,
3、前端如有模型,则需要将模型库配置进本地,
4、配置测试运行无问题,后台程序需要通过守护进程使其后台运行,并且开机自启,前端vue通过打包成服务,开机自启,实现服务器开机即可进入项目网站
额外资料:
docker拉取出现问题的解决方法:
#进入并编辑配置文件
vi /etc/resolv.conf
#末尾添加这两行
nameserver 8.8.8.8
nameserver 8.8.4.4
(只有基础开发工具的yum安装包)离线yum源配置教程:
下载CentOS镜像
Index of /centos-store/7.3.1611/isos/x86_64/
离线yum源的配置
1.上传下载的镜像源iso
2.挂载iso文件
#mount -o loop -t iso9660 CentOS-7-x86_64-Everything-1511.iso /mnt
3.配置yum
# cd /etc/yum.repos.d/ # mkdir bak# mv *repo bak/# vim local.repo
local.repo文件内容如下:
[iso] name=CentOS-7-x86_64-Everything-iso baseurl=file:///mntgpgcheck=0enabled=1
4.验证
# yum clean all # yum makecache
配置服务器网络
首先,通过执行命令ip addr,找到需要配置的网卡名。
配置主机IP地址。
进入/etc/sysconfig/network-scripts/ 目录找到与网卡名对应的网卡配置文件。
修改网卡配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens160 ,配置静态IP
TYPE="Ethernet" # 网络类型为以太网
BOOTPROTO="static" # 配置成静态IP
NAME="ens160" # 要跟文件名一致
DEVICE="ens160" # 要跟文件名一致
ONBOOT="yes" # 是否随网络服务启动
IPADDR="192.168.1.103" #主机ip地址
GATEWAY="192.168.1.1" # 网关
NETMASK="255.255.255.0" # 子网掩码
DNS1="114.114.114.114" #DNS2也可以配置成8.8.8.8
上面是静态IP的配置,如果想配置动态IP
修改网卡配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens160
动态获取IP地址需要修改两处,不需要配置相关IP地址
BOOTPROTO="dhcp" # 配置成动态IP
ONBOOT="yes" # 是否随网络服务启动
配置DNS解析,vi /etc/resolv.conf
添加内容 nameserver 114.114.114.114
修改后重启一下网络服务即可(无报错就是正常重启)
systemctl restart network
然后执行ip addr 确认IP配置
执行ping www.baidu.com 确认DNS解析正常
安装Docker-CE(免费开源的)
- (不要直接安装)**如果是默认yum安装(yum install docker),则版本为:1.13.1,必然踩坑!!!
- 如果系统默认安装了111.229.32.166请先卸载
- 确保 yum 包更新到最新: yum update
- 安装所需的软件包。yum-utils 提供了 yum-config-manager
- yum install -y yum-utils device-mapper-persistent-data lvm2
- 设置Dokcer下载仓库:
sudo yum-config-manager --add-repo /https://download.docker.com/linux/centos/docker-ce.repo
- 或者使用阿里云的仓库进行下载官方的下载比较慢
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo - 使用命令直接进行安装 yum install docker-ce
- 启动docker命令 systemctl start docker.service
- 开机自动启动docker服务 systemctl enable docker.service
- 检查安装是否正常 docker -v
- 查看docker服务状态绿色为启动成功 systemctl status docker
- 修改镜像存储地址
- 在/etc/docker新建daemon.json
- 新增 "graph": "/mnt/sdc/dockerimages"
- 重启生效:systemctl restart docker
- 更改docker下载镜像源地址
- 编辑 /etc/docker/daemon.json,如果文件不存在就新增文件
- 添加为中国科技大学镜像源
- {"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]}
- Docker info 查看镜像是否配置成功
- 重启docker 生效:systemctl restart docker.service
在Dockers安装PerconaMySql
- 参考
- 拉取镜像版本号可自行输入 docker pull percona:ps-8.0.20-11
如果拉取失败可以尝试以下方法传送门 1、在/etc/re
solv.conf #添加这两行
nameserver 8.8.8.8
nameserver 8.8.4.4
输入 systemctl restart docker 重启服务。
- 查看已拉取的镜像 docker images
- 创建实例前,先创建好对应文件夹
mkdir /mnt/sdc/mydatatest/mysqltest/log
- 需要在/mnt下创建mydatatest文件夹,在此文件夹下创建mysqltest文件夹,在此文件夹下还需要创建log文件夹,以此类推, 本机文件夹:镜像文件夹
- 创建好后需要将创建的文件夹的读写权限放开,之后重启容器 chmod -R 777 文件路径(/mnt/sdc/test/mysql)
- 创建实例并启动MySQL 可以直接复制
sudo docker run -p 3306:3306 --name mysql -v /mnt/sdc/mydatatest/mysqltest/log:/var/log/mysql -v /mnt/sdc/mydatatest/mysqltest/data:/var/lib/mysql -v /mnt/sdc/mydatatest/mysqltest/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root-d percona:latest
- -p 3306:3306:将容器的3306号端口映射到主机的3306号端口
- -v/mnt/sdc/test/mysql/log:/var/log/mysql:将容器的日志文件挂载到主机
- -v /mnt/sdc/test/mysql/data:/var/lib/mysql:将容器的数据文件挂载到主机
- -v /mnt/sdc/test/mysql/conf:/etc/mysql:将容器的配置文件挂载到主机
- -e MYSQL_ROOT_PASSWORD=root:初始化root用户的密码
- -d percona:ps-8.0.20-11:指定以什么镜像启动容器
- 查看已启动的实例容器 docker ps
- 将文件夹的读写权限放开,之后重启容器 chmod -R 777 文件路径(/mnt/sdc/test/mysql)
- 重启mysql容器 docker restart mysql(注意这里的myql是你是实例化的docker镜像的name)
- 设置MySQL容器开机自启动 docker update mysql --restart=always(注意这里的myql是你是实例化的docker镜像的name)
- 使用root登录容器MYSQL修改密码 docker exec -it -u root(密码) mysql bash(注意这里的myql是你是实例化的docker镜像的name)
- 在容器内登陆Mysql mysql -uroot -p
- 修改密码并开启所有IP都可以登录()
ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '12345qwerT&*()';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;
- 退出Mysql容器 exit;
- mysql配置完成后,可用Navicat进行测试,看内网下其他电脑是否能正常连接
- 导出导入mysql传送门
- 导出mysql数据库指令 mysqldump -uroot -p -P3336 personnellocation --ignore-table=personnellocation.facilityrecord --ignore-table=personnellocation.loginlog > JQDWSJ.sql
- 导入mysql数据库指令
\mysql -u用户名 -p密码 -D数据库 < 【sql脚本文件路径全名】,示例: C:\MySQL\bin\mysql -uroot -p 123456 -Dtest < C:\test.sql
在Docker容器安装Redis
- 拉取镜像 docker pull redis
- 安装运行 docker run -itd --name redis -p 6379:6379 redis
- 容器开机自启动 docker update redis --restart=always
在Docker中安装RabbitMQ消息队列
- 指定版本,该版本包含了web控制页面
- docker pull rabbitmq:management
- 设置用户名和密码方式启动 账号为admin 密码为123456
- docker run -d --hostname my-rabbit --name rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 -p 15672:15672 -p 5672:5672 rabbitmq:management
- 容器开机自启动 docker update rabbit --restart=always
- 内网下 IP:15672进入rabbitMQ进入测试;配置接入使用IP:5672。
通过Docker安装nginx(两种方式之一)
- 参考
- 拉取镜像 docker pull nginx
- 首先创建nginx的一些文件存储目录ls
- mkdir -p /mnt/sdc/test/nginx/www /mnt/sdc/test/nginx/logs /mnt/sdc/test/nginx/conf
- 将环境所需的配置文件里的nginx.conf拷贝到 /mnt/sdc/test/nginx/conf 目录下
- 创建新的nginx 容器并映射目录到本地 (\不需要写)
- 如果有报错参考传送门
docker run -it -d -p 80:80 \
--name nginx \
-v /mnt/sdc/test/nginx/www:/usr/share/nginx/html \
-v /mnt/sdc/test/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /mnt/sdc/test/nginx/logs:/var/log/nginx nginx
容器开机自启动 docker update nginx --restart=always
直接安装nginx(两种方式之一)推荐使用此方式较为稳定
1.安装依赖包
//一键安装上面四个依赖
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
2.下载并解压安装包
//创建一个文件夹
cd /usr/local
mkdir nginx
cd nginx
//下载tar包
wget http://nginx.org/download/nginx-1.13.7.tar.gz
tar -xvf nginx-1.13.7.tar.gz
3.安装nginx
//进入nginx目录
cd /usr/local/nginx
//进入目录
cd nginx-1.13.7
//执行命令 考虑到后续安装ssl证书 添加两个模块
./configure --with-http_stub_status_module --with-http_ssl_module
//执行make命令
make
//执行make install命令
make install
4.启动nginx服务
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
4.配置nginx.conf
# 打开配置文件
vi /usr/local/nginx/conf/nginx.conf
将端口号改成8089(随便挑个端口),因为可能apeache占用80端口,apeache端口尽量不要修改,我们选择修改nginx端口。
将localhost修改为你服务器的公网ip地址。
5.重启nginx
/usr/local/nginx/sbin/nginx -s reload
查看nginx进程是否启动:
ps -ef | grep nginx
6.若想使用外部主机访问nginx,需要关闭服务器防火墙或开放nginx服务端口,端口为上一步nginx.conf的配置端口:
centOS6及以前版本使用命令: systemctl stop iptables.service
centOS7关闭防火墙命令: systemctl stop firewalld.service
关闭防火墙会导致服务器有一定风险,所以建议是单独开放服务端口 :
开放80端口:
firewall-cmd --zone=public --add-port=80/tcp --permanent
查询端口号80 是否开启:
firewall-cmd --query-port=80/tcp
重启防火墙:
firewall-cmd --reload
随后访问该ip:端口 即可看到nginx界面。
7.访问服务器ip查看(备注,由于我监听的仍是80端口,所以ip后面的端口号被省略)
安装完成一般常用命令
进入安装目录中,
命令: cd /usr/local/nginx/sbin
启动,关闭,重启,命令:
./nginx 启动
./nginx -s stop 关闭
./nginx -s reload 重启
在linux上部数.NET 6环境
需要通过wget获取资源,出现”找不到命令“的情况说明没有安装wget工具,
安装wget: yum install wget
#注册 Microsoft 密钥。注册产品存储库。安装必需的依赖项。
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
#安装 .NET Core 运行时
sudo yum -y install aspnetcore-runtime-6.0
#查看Dotnet 版本信息
dotnet --info
#安装.NET Core SDK
sudo yum -y install dotnet-sdk-6.0
#查看Dotnet 版本信息
dotnet --info
#查看Dotnet 版本信息
dotnet --version
查看无误即可
在linux上部署.NET core 项目
参考传送门
配置好net6环境后,将项目发布以文件夹的目标,通过传输工具传输到服务器上,进入该文件夹
直接运行项目查看是否能正常使用
执行指令 dotnet 项目名.dll
注意安装插件libgdiplus,不安装运行项目会报错
安装步骤:
1、下载 epel-release-7-11.noarch.rpm
wget http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-14.noarch.rpm
2、rpm -Uvh epel-release*rpm
3、sudo yum install libgdiplus
安装完后再次运行查看是否会报错
执行指令 dotnet 项目名.dll
ctrl+c退出进程
通过nginx部署VUE项目
1.Vue项目打包
# 打包正式环境 npm run build:prod # 打包预发布环境 npm run build:stage
2. 部署时可能会发现资源路径不对 ,只需修改 vue.config.js下 文件资源路径
# 请根据自己路径来配置更改 publicPath: './'
3. 将打包后的dist文件夹上传至服务器
本次项目路径为 /usr/local/webapp/
4.修改Nginx的conf文件
vim /usr/local/nginx/cong/nginx.conf #修改如下 server { listen 80; server_name localhost; # 注意设定 root路径是有dist的 location / { root /usr/local/webapp/dist; index /index.html; } #跨域 ip和port自行替换 location /adminApi { proxy_pass http://ip:port; } }
5. 使配置生效
sbin/nginx -s reload sbin/nginx -s stop sbin/nginx
6.访问ip地址查看效果
创建nginx service 并设置开机启动(前端vue开机自启)
1、cd到指定目录
cd /usr/lib/systemd/system
2、创建nginx.service
vi nginx.service
3.输入以下内容,路径为nginx安装路径
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
设置开机启动
systemctl enable nginx
其它命令
#重启应用
systemctl restart nginx
#停止应用
systemctl stop nginx
#查看应用的日志
systemctl status nginx
Supervisor制作守护进程使得.NET core项目在后台运行,并且开机启动
supervisor:C/S架构的进程控制系统,可使用户在类UNIX系统中监控、管理进程。常用于管理与某个用户或项目相关的进程。
组成部分
supervisord:服务守护进程
supervisorctl:命令行客户端
Web Server:提供与supervisorctl功能相当的WEB操作界面
XML-RPC Interface:XML-RPC接口
启动或者更新报错
错误信息 :unix:///tmp/supervisor.sock no such file
解决方法如下:(4条消息) “unix:///tmp/supervisor.sock no such file“ 错误解决方案
错误信息:error: <class 'socket.error'>, [Errno 111] Connection refused: file: /usr/lib64/python2.7/socket.py line: 224
解决方法:重新关联配置文件启动:supervisord -c /etc/supervisor/supervisord.conf
supervisorctl命令说明
supervisorctl 是 supervisord 的命令行客户端工具,使用的配置和 supervisord 一样,这里就不再说了。下面,主要介绍 supervisorctl 操作的常用命令:
输入命令 supervisorctl
进入 supervisorctl 的 shell 交互界面,就可以在下面输入命令了。:
- help # 查看帮助
- status # 查看程序状态
- stop program_name # 关闭 指定的程序
- start program_name # 启动 指定的程序
- restart program_name # 重启 指定的程序
- tail -f program_name # 查看 该程序的日志
- update # 重启配置文件修改过的程序(修改了配置,通过这个命令加载新的配置)
也可以直接通过 shell 命令操作:
supervisorctl status //查看所有进程的状态 supervisorctl stop program_name //停止指定程序 supervisorctl start program_name //启动指定程序 supervisorctl restart program_name //重启指定程序
supervisorctl update //配置文件修改后使用该命令加载新的配置
supervisorctl reload //重新启动配置中的所有程序
supervisorctl tail program_name //查看启动时具体报错信息
注:把program_name换成all可以管理配置中的所有进程。
查看版本信息:
supervisord -v
参考地址:http://beginman.cn/linux/2015/04/06/Supervisor/
官网文档地址:http://www.supervisord.org
我使用的环境:
$ python -V
Python 2.6.6
安装:
yum install python-setuptools
easy_install supervisor
配置:
1、在etc下创建目录,并赋权限
mkdir -m 700 -p /etc/supervisor
2、在目录“ /etc/supervisor”下创建配置文件
echo_supervisord_conf > /etc/supervisor/supervisord.conf
3、修改配置文件
vim /etc/supervisor/supervisord.conf
在文件末尾添加,注意首尾需无空格,需顶格
[include] files=/etc/supervisor/conf.d/*.ini
4、在目录“/etc/supervisor”下创建dotnet core 进程配置文件存放目录“conf.d”
mkdir -m 700 /etc/supervisor/conf.d
5、编辑并创建进程配置文件:
vim /etc/supervisor/conf.d/dotnet.ini
配置文件内容: asp.net core
[program:OneAspNetCore] command=dotnet OneAspNetCore.dll ; 运行程序的命令 directory=/home/webapps/aspnet/ ; 执行前要不要先cd到目录去,一般不用 autorestart = true ; 程序异常退出后自动重启 autostart=true ; 随着supervisord的启动而启动 startretries = 10 ; 启动失败自动重试次数,默认是 3numprocs=1 ; 启动几个进程 stderr_logfile=/var/log/OneAspNetCore.err.log ; 错误日志文件 stdout_logfile=/var/log/OneAspNetCore.out.log ; 输出日志文件 environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量 user=root ; 进程执行的用户身份 stopsignal=KILL ; 用来杀死进程的 stopsignal=INT
注:这里的日志文件目录必须存在 supervisor不会创建该日志目录
配置文件内容:nginx 预防nginx死掉
[program:nginx] command=systemctl start nginx ; 运行程序的命令 directory= ; 执行前要不要先cd到目录去,一般不用 autorestart = true ; 程序异常退出后自动重启 autostart=true ; 随着supervisord的启动而启动 startretries = 10 ; 启动失败自动重试次数,默认是 3numprocs=1 ; 启动几个进程 stderr_logfile=/var/log/nginx/nginx.err.log ; 错误日志文件 stdout_logfile=/var/log/nginx/nginx.out.log ; 输出日志文件 user=root ; 进程执行的用户身份 stopsignal=KILL ; 用来杀死进程的 stopsignal=INT
启动Supervisor
supervisord -c /etc/supervisor/supervisord.conf
ps:如果服务已启动,修改配置文件可用“ supervisorctl reload ”命令来使其生效
配置Supervisor开机启动
新建一个“supervisord.service”文件
#supervisord service for systemd (CentOS 7.0+) # by ET-CS (https://github.com/ET-CS)[Unit] Description=Supervisor daemon [Service] Type=forking ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown ExecReload=/usr/bin/supervisorctl $OPTIONS reload KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target
将文件拷贝至:“/usr/lib/systemd/system/”
执行命令:systemctl enable supervisord
执行命令:systemctl is-enabled supervisord #来验证是否为开机启动
重启检测是否正常!!!
到此已经完成内网环境下的.NET core 项目部署,内网下可以访问到页面地址,默认8080,可在指定配置页面修改
.NET core 后台开放连接端口修改位置:
修改后记得修改vue前端后台连接配置文件
vue前端通过nginx反向映射,修改位置为nginx的配置文件:
centos下
/usr/local/nginx/conf/nginx.conf
注意事项:
需要注意检测防火墙是否启动,如果防火墙启动,部署完成后也是不能对网页进行访问的
防火墙操作指令:
先开启防火墙
systemctl start firewalld
查看防火墙
systemctl status firewalld
防火墙相关命令
查看防火墙状态 systemctl status firewalld
开启防火墙 systemctl start firewalld
关闭防火墙 systemctl stop firewalld
重启防火墙 service firewalld start
若遇到无法开启
systemctl unmask firewalld.service
systemctl start firewalld.service
添加指定需要开放的端口
firewall-cmd --add-port=8080/tcp --permanent
重载入添加的端口
firewall-cmd --reload
查询指定端口是否已开
firewall-cmd --query-port=8080/tcp
移除指定端口:
firewall-cmd --permanent --remove-port=8080/tcp
查询开放的防火墙列表
firewall-cmd --zone=public --list-ports
注意: 如果开放了端口还是连接不上,有可能是安全组策略没有开放,需要去安全组开放