微软在其官方网站 - .NET Core 中提供了各种平台下 .NET Core 环境的搭建方法,其中包括了 Windows、Linux、Mac 以及 Docker 。其代码托管在GitHub - dotnet/cli。如果你使用Docker进行部署的话,微软官方也提供了相应的已经搭建好环境的官方镜像:microsoft/dotnetmicrosoft/dotnet-preview,而且针对不同的用途发布了不同的版本,即镜像的标签不同,这里用的是 microsoft/dotnet:latest。其镜像构建文件 Dockerfile。接下来是我的一些操作记录。
部署的demo文件:点击下载

在Linux系统中部署virgo-api-demo

这里我选择的操作系统:Ubuntu Server 16.04 LTS,也可点击这里直接下载;
接下来需要在实体机或者虚拟机上进行 Ubuntu Server 16.04 LTS 的安装
紧接着就是要搭建 .NET Core 环境:

sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet/ xenial main" > /etc/apt/sources.list.d/dotnetdev.list'
sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893
sudo apt-get update

如果现有环境中已安装有 .NET Core ,请先用下面的脚本进行卸载清理:

#!/usr/bin/env bash
#
# Copyright (c) .NET Foundation and contributors. All rights reserved.
# Licensed under the MIT license. See LICENSE file in the project root for full license information.
#

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

current_user=$(whoami)
if [ $current_user != "root" ]; then
    echo "$(basename "$0") uninstallation script requires superuser privileges to run"
    exit 1
fi

host_package_name="dotnet-host"

remove_all(){
    apt-get purge -y $host_package_name
}

is_dotnet_host_installed(){
    local out="$(dpkg -l | grep $host_package_name)"
    [ -z "$out" ]
}

is_dotnet_host_installed
[ "$?" -eq 0 ] && echo "Unable to find dotnet installation to remove." \
    && exit 0

remove_all
[ "$?" -ne 0 ] && echo "Failed to remove dotnet packages." && exit 1

is_dotnet_host_installed
[ "$?" -ne 0 ] && \
    echo "dotnet package removal succeeded but appear to still be installed. Please file an issue at https://github.com/dotnet/cli" && \
    exit 1

echo "dotnet package removal succeeded."
exit 0

安装 .NET Core SDK:

sudo apt-get install dotnet-dev-1.0.0-preview2-003121

查看 .NET Core 的版本信息:

dotnet --version

做一个简单的demo并编译运行:

mkdir demo
cd demo
dotnet new
dotnet restore
dotnet run

如果上面两步都正常,说明安装没什么问题,接下来就进行部署操作。上面提供的demo下载是发布好的文件,所以这里就不需要编译了。将下载好的文件解压后直接连同文件夹一起上传到host的根路径“/”下。然后进入发布文件夹并执行部署操作:

cd virgo-api-demo
dotnet Virgo.WebApi.dll

会有这样的提示:

Hosting environment: Production
Content root path: /app
Now listening on: http://*:5000
Application started. Press Ctrl+C to shut down.

再通过另外一个ssh客户端连接该host,然后执行:

curl http://localhost:5000/api/values

如果返回结果如下则正常:

["value1","value2"]

但是当通过局域网的其他主机访问http://localhost:5000/api/values时则会发现被拒绝···说到这里需要谢谢VIVA LA VIDA的解惑。在部署完成后,运行的过程中侦听的是host内部的5000端口,与外部的其他主机是不互通的,所以本地访问正常,而外部却被拒绝。要解决这个问题有两个方法:
运行时传入参数--server.urls http://*:5000

dotnet Virgo.WebApi.dll --server.urls http://*:5000

或者在项目的 program 下的 host 中添加参数.UseUrls("http://*:5000")
然后再从局域网中的其他主机通过浏览器访问http://192.168.2.129:5000/api/values即可返回正确的结果["value1","value2"]。如需了解更多详情请移步 .NET Core

通过Docker部署virgo-api-demo

在主机上部署完成且可以正常访问后在用Docker部署就很容易了。我部署的过程中主要就是不知道上面提到的那个参数,通过上面的操作明白了其作用,再来用Docker部署就只需三条命令:

# 第一条命令用于定位到发布文件夹所在的位置
cd /opt/virgo-api-demo
docker run --rm -ti -p 8888:5000 -v $(pwd)/virgo-api-demo:/virgo microsoft/dotnet:latest
dotnet ./virog/Virgo.WebApi.dll --server.urls http://*:5000

接着就可以通过外部其他主机的浏览器访问了。当然,也可以先构建镜像然后直接启动容器
Dockerfile:

FROM microsoft/dotnet:latest                                    
MAINTAINER Mongo <willem@xcloudbiz.com>

# 这里Dockerfile和virgo-api-demo在同一目录下
ADD virgo-api-demo /virgo-api
WORKDIR /virgo-api
EXPOSE 5000 
CMD dotnet Virgo.WebApi.dll --server.urls http://*:5000

构建镜像,启动容器:

docker build -t virgoapi .
docker run -d -p 6677:5000 virgoapi

外部主机通过浏览器访问 hostip:6677/api/values


Ably
603 声望44 粉丝

Let everything around us become better


引用和评论

0 条评论