目录

部署到IIS(Windows)

发布程序

运行环境安装

部署站点

部署到Linux(CentOS7)

发布程序

Linux运行环境安装

启动站点

安装Nginx

安装supervisord守护进程

重启系统

部署到Docker

发布程序

安装Docker

创建容器

安装Nginx

通过Nginx配置多容器负载

部署到IIS(Windows)

发布程序

  • 打开代码所在目录,按住Shift+右键,在弹出的框中选择在命令行执行
  • 执行命令:dotnet publish -c release,发布成功的文件存储于\bin\Release(用传统的通过vs publish发布也可)

docker安装nis用户集群管理 docker安装iis_Docker

运行环境安装

docker安装nis用户集群管理 docker安装iis_docker安装nis用户集群管理_02

docker安装nis用户集群管理 docker安装iis_Nginx_03

  • 查看是否安装成功

docker安装nis用户集群管理 docker安装iis_Nginx_04

部署站点

  • 与传统的asp.net站点一样,在IIS中创建一个site,指向站点发布文件目录
  • 将ApplicationPool托管.Net Framework版本设为无托管代码

docker安装nis用户集群管理 docker安装iis_Docker_05


部署到Linux(CentOS7)

发布程序

  • 打开代码所在目录,按住Shift+右键,在弹出的框中选择在命令行执行
  • 执行命令:dotnet publish -c release,发布成功的文件存储于\bin\Release
  • 通过FTP直接将发布的文件上传到Linux服务器目录,比如我们上传到/opt/netcoreapp目录

docker安装nis用户集群管理 docker安装iis_docker安装nis用户集群管理_06

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系统中,输入以下命令启动站点
  1. cd /opt/netcoreapp
  2. dotnet myFirstCore.dll(指定端口dotnet myFirstCore.dll --urls http://*:8888;)
  • 输入curl http://localhost:5000 验证站点是否正常运行(donet core启动后,默认挂载5000端口),如果部署成功,则会显示网页信息

安装Nginx

  • 服务器默认是不对外开放5000端口的,所以localhost:5000只能在内网访问,通过Nginx实现反向代理,即访问80端口,映射到内网的5000端口站点
  1. sudo yum install epel-release
  2. sudo yum install nginx
  3. sudo systemctl start nginx
  • 查看nginx是否启动:ps -ef | grep nginx,如果看到Nginx master进程,则启动成功
  • 设置Nginx开机自启动

输入命令:sudo systemctl enable nginx

  • 修改Nginx配置文件,实现请求转发
  1. 通过命令:vi /etc/nginx/nginx.conf 或者直接用文本工具打开
  2. 在http节点末尾,添加 :include /etc/nginx/hosts/*;
  3. 在/etc/nginx/ 目录中新建hosts文件夹,并且在文件夹里面新建配置文件netcore.conf
  4. 打开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
  1. 在浏览器中输入服务器外网Ip,回车,如果页面正常显示,表示Nginx配置成功
  2. 可能出现的错误502 Bad Gateway,以下是解决方法
    1. 原因:SELinux配置问题。
    2. 解决:关闭SELinux。
    3. 输入:sestatus,如果SELinux status: enabled ,表示开启,
    4. 输入 vi /etc/selinux/config  修改配置: SELINUX=disabled
    5. 重启操作系统

安装supervisord守护进程

  • 输入命令:yum install supervisor 安装
  • 创建配置文件,在/etc/supervisord.d/目录下面创建一个ini配置文件
  1. cd /etc/supervisord.d/
  2. vim myFirstCore.ini
  3. 打开文件,将以下内容粘贴进去并保存
#冒号后面为应用名称

[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
  1. 输入命令:systemctl restart supervisord
  • 配置supervisord开机自启动
  1. 查看supervisord是否开机启动:systemctl is-enabled supervisord
  2. 设置开机启动:systemctl enable supervisord

重启系统

  • 输入命令:reboot 查看Nginx,supervisord是否自启动成功

部署到Docker

发布程序

  • 用VS发布向导进行发布,注意部署模式改为“框架依赖”,目标运行时改为“可移植”

docker安装nis用户集群管理 docker安装iis_.Net Core_07

  • 将发布的程序拷贝到服务器的目录,比如/opt/web/site1

安装Docker

  • 安装Docker
  • 安装一些必要的系统工具:

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镜像

根据版本获取,这里以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安装nis用户集群管理 docker安装iis_Nginx_08

  • 验证容器运行成功,如果返回站点相关的信息,则成功

  • 设置容器自动启动

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;
    }
}