目录
部署到IIS(Windows)
发布程序
- 打开代码所在目录,按住Shift+右键,在弹出的框中选择在命令行执行
- 执行命令:dotnet publish -c release,发布成功的文件存储于\bin\Release(用传统的通过vs publish发布也可)
运行环境安装
- 安装IIS(此处省略)
- 安装dotnet core runtime
在官网下载https://dotnet.microsoft.com/download/dotnet-core
下载匹配的.net core版本,这里以2.1为例
- 查看是否安装成功
部署站点
- 与传统的asp.net站点一样,在IIS中创建一个site,指向站点发布文件目录
- 将ApplicationPool托管.Net Framework版本设为无托管代码
部署到Linux(CentOS7)
发布程序
- 打开代码所在目录,按住Shift+右键,在弹出的框中选择在命令行执行
- 执行命令:dotnet publish -c release,发布成功的文件存储于\bin\Release
- 通过FTP直接将发布的文件上传到Linux服务器目录,比如我们上传到/opt/netcoreapp目录
Linux运行环境安装
- 安装Linux运行环境,依次执行以下命令(运行时的版本与开发net core一致,这里以2.1为例)
官网连接(https://dotnet.microsoft.com/download/linux-package-manager/centos7/runtime-2.1.13)
- sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
- sudo yum install dotnet-sdk-2.1
- sudo yum install aspnetcore-runtime-2.1
启动站点
- 在Linux系统中,输入以下命令启动站点
- cd /opt/netcoreapp
- dotnet myFirstCore.dll(指定端口dotnet myFirstCore.dll --urls http://*:8888;)
- 输入curl http://localhost:5000 验证站点是否正常运行(donet core启动后,默认挂载5000端口),如果部署成功,则会显示网页信息
安装Nginx
- 服务器默认是不对外开放5000端口的,所以localhost:5000只能在内网访问,通过Nginx实现反向代理,即访问80端口,映射到内网的5000端口站点
- sudo yum install epel-release
- sudo yum install nginx
- sudo systemctl start nginx
- 查看nginx是否启动:ps -ef | grep nginx,如果看到Nginx master进程,则启动成功
- 设置Nginx开机自启动
输入命令:sudo systemctl enable nginx
- 修改Nginx配置文件,实现请求转发
- 通过命令:vi /etc/nginx/nginx.conf 或者直接用文本工具打开
- 在http节点末尾,添加 :include /etc/nginx/hosts/*;
- 在/etc/nginx/ 目录中新建hosts文件夹,并且在文件夹里面新建配置文件netcore.conf
- 打开netcore.conf,将以下代码粘贴进去,并保存
server {
listen 80;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For
proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
- 重启nginx
输入命令:sudo systemctl restart nginx
- 测试Nginx
- 在浏览器中输入服务器外网Ip,回车,如果页面正常显示,表示Nginx配置成功
- 可能出现的错误502 Bad Gateway,以下是解决方法
- 原因:SELinux配置问题。
- 解决:关闭SELinux。
- 输入:sestatus,如果SELinux status: enabled ,表示开启,
- 输入 vi /etc/selinux/config 修改配置: SELINUX=disabled
- 重启操作系统
安装supervisord守护进程
- 输入命令:yum install supervisor 安装
- 创建配置文件,在/etc/supervisord.d/目录下面创建一个ini配置文件
- cd /etc/supervisord.d/
- vim myFirstCore.ini
- 打开文件,将以下内容粘贴进去并保存
#冒号后面为应用名称
[program:myFirstCore]
#应用启动命令,需要dotnet的完整路径
command=/usr/share/dotnet/dotnet /opt/netcoreapp/myFirstCore.dll
#启动的目录,否则应用会报找不到appsetting.json错误
directory=/opt/netcoreapp
#服务启动时自动启动,崩溃自动重启
autostart=true
autorestart=true
# .net core mvc应用启动参数,表明是生产环境
environment=ASPNETCORE_ENVIRONMENT=Production
user=root
# 日志输出路径
stdout_logfile=/var/log/supervisor/smartops.log
stderr_logfile=/var/log/supervisor/smartops.err.log
- 重启supervisord
- 输入命令:systemctl restart supervisord
- 配置supervisord开机自启动
- 查看supervisord是否开机启动:systemctl is-enabled supervisord
- 设置开机启动:systemctl enable supervisord
重启系统
- 输入命令:reboot 查看Nginx,supervisord是否自启动成功
部署到Docker
发布程序
- 用VS发布向导进行发布,注意部署模式改为“框架依赖”,目标运行时改为“可移植”
- 将发布的程序拷贝到服务器的目录,比如/opt/web/site1
安装Docker
- 安装Docker(https://www.runoob.com/docker/centos-docker-install.html)
- 安装一些必要的系统工具:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- 添加软件源信息:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 更新 yum 缓存:
sudo yum makecache fast
- 安装 Docker-ce:
sudo yum -y install docker-ce
- 启动 Docker 后台服务
sudo systemctl start docker
- 查看Dock状态
输入命令:systemctl status docker
- 设置Dock开机自启动
输入命令:systemctl enable docker
创建容器
- 获取net core镜像(https://hub.docker.com/_/microsoft-dotnet-core-runtime/)
根据版本获取,这里以2.1为列
docker pull mcr.microsoft.com/dotnet/core/runtime:2.1
- 查看镜像
docker images
- 创建运行容器
docker run -d -p 5000:80 -v /opt/web/site1:/app --workdir /app mcr.microsoft.com/dotnet/core/aspnet:2.1 dotnet /app/myFirstCore.dll
参数说明
-d参数表示容器在后台运行,我们不需要进入到容器。
-p参数表示端口映射,“-p 5000:80”表示将容器的80端口映射到本地5000端口。
-v参数表示目录映射,将服务器的/opt/web/site1目录挂到容器的/app目录。
--workdir参数表示容器中服务程序的工作路径,也就是我们映射的/app目录。
“mcr.microsoft.com/dotnet/core/aspnet:2.1”表示要运行的镜像。
- 容器操作常用命令
- 验证容器运行成功,如果返回站点相关的信息,则成功
- 设置容器自动启动
Docker container update --restart=always 容器名字
安装Nginx
参考前面的安装Nginx章节,截至到目前将.Net Core程序部署到Docker已经完成。
通过Nginx配置多容器负载
根据前面章节的步骤,新创建一个容器(site2),将容器的80端口映射到5001端口,修改Nginx配置文件
#设定负载均衡服务器列表
upstream roundrobin {
#后端服务器访问规则
server 127.0.0.1:5001 weight=1; #server1
server 127.0.0.1:5000 weight=1; #server2
}
server {
listen 80;
server_name 0.0.0.0; #服务器外网地址或者域名
location / {
proxy_pass http://roundrobin;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For
proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}