微软在其官方网站 - .NET Core 中提供了各种平台下 .NET Core 环境的搭建方法,其中包括了 Windows、Linux、Mac 以及 Docker 。其代码托管在GitHub - dotnet/cli。如果你使用Docker进行部署的话,微软官方也提供了相应的已经搭建好环境的官方镜像:microsoft/dotnet 和 microsoft/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
。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。