98 第一个ASP.NET Core MVC站点及发布到Linux Docker环境 - xiaoxin01/Blog GitHub Wiki
本文介绍如何建立一个最简单的ASP.NET Core MVC站点及一键部署到Linux Docker环境下
.NET Core的特性是跨平台,既然选择了.NET Core,便可以将我们开发的程序部署在Linux下,避开臃肿的windows和低下的性能,并且Linux系统开销很小,不需要高规格的服务器就可以跑起来。
本文以 .NET Core,Nginx为例,介绍如何利用Docker一键部署站点。
在进行之前,先确认已经按照 xxx 准备好了开发及部署环境。
在开发环境打开命令行工具,进入项目所在目录(此目录已经共享并挂载进了Linux),通过命令建立 MVC 站点:
mkdir D:\projects\firstweb\web\
cd D:\projects\firstweb\web\
dotnet new mvc
还原依赖,构建和启动:
dotnet restore
dotnet run
console会输出:
Hosting environment: Development
Content root path: D:\projects\firstweb\web
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
然后在浏览器中打开地址:
http://localhost:5000
确认网站可以正常访问。
站点最终在Linux服务器会运行在Docker容器中,这里用微软官方的镜像,专门做了一些优化。
FROM microsoft/aspnetcore:1.1.1
WORKDIR /app
EXPOSE 5000
COPY obj/Docker/publish .
ENTRYPOINT ["dotnet", "web.dll"]
利用docker-compose,将需要的服务编排起来。
建立文件夹,D:\projects\firstweb\docker\
Web编排文件:docker-compose.yml
version: '2'
services:
web:
build:
context: ../web/
dockerfile: Dockerfile
Nginx编排文件:docker-compose.nginx.yml:
version: '2'
services:
nginx:
image: nginx:1.11.9
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
ports:
- "80:80"
links:
- web
Nginx配置文件:nginx.conf:
server {
listen 80;
location /{
proxy_pass http://web:5000;
}
}
建立build的编排文件:docker-compose.ci.build.yml
version: '2'
services:
build:
image: microsoft/aspnetcore-build:1.1.1
volumes:
- ../:/src
- ~/.nuget/packages:/root/.nuget/packages
working_dir: /src
command: /bin/bash -c "cd web && pwd \
&& echo 'install node packages' && npm install -no-bin-links && echo 'done' \
&& echo 'run gulp tasks' && gulp min && echo 'done' \
&& echo 'install bower packages' && bower install --allow-root && echo 'done' \
&& echo 'restore project' && dotnet restore && echo 'done' \
&& echo 'update database' && dotnet ef database update && echo 'done' \
&& echo 'publish project' && dotnet publish -c Release -o ./obj/Docker/publish && echo 'finished!'"
在目录 D:\projects\firstweb\
建立:start.sh
projectName="firstweb"
echo "build project"
docker-compose -f ./Docker/docker-compose.ci.build.yml -p $projectName up
echo "build web image"
docker-compose -f ./Docker/docker-compose.yml \
-f ./Docker/docker-compose.nginx.yml -p $projectName build
echo "start web"
docker-compose -f ./Docker/docker-compose.yml \
-f ./Docker/docker-compose.nginx.yml -p $projectName up -d
进入Linux部署环境,建立脚本,用于将windows下编写的代码更新到Linux下。
cd ~/projects/firstweb
vi sync.sh
然后输入:
source=/mnt/win/projects/firstweb/
distination=~/projects/firstweb/
echo "sync source code"
rsync -tvrP --exclude-from=exclude.list $source $distination
exclude.list文件的作用是排除不需要复制的文件,内容如下:
.git/
.vs/
.vscode/
ref
**/bin/
**/obj/
**/node_modules/
**/wwwroot/lib/
sync.sh
先把代码复制过来并加上执行权限:
cd ~/projects/firstweb
chmod +x sync.sh
./sync.sh
chmod +x start.sh
网站已经部署成功。
未来在windows开发环境修改代码之后,只需要在Linux下运行如下命令即可:
./sync.sh
./start.sh
未来还可以利用Gitlab runner来实现CI/CD,后续会有文章介绍。