Toggle navigation
首页
技术
骑行
羽毛球
资讯
联络我
登录
第一个ASP.NET-Core-MVC站点及发布到Linux-Docker环境
2017-06-02
.NET Core
Docker
.NET Core的特性是跨平台,既然选择了.NET Core,便可以将我们开发的程序部署在Linux下,避开臃肿的windows和低下的性能,并且Linux系统开销很小,不需要高规格的服务器就可以跑起来。 本文以 .NET Core,Nginx为例,介绍如何利用Docker一键部署站点。 # 在开发环境建立ASP.NET Core MVC站点 在进行之前,先确认已经按照 [Ubuntu下Docker及Docker-Compose的环境快速搭建](/Coding/Details/quick-install-docker) 准备好了开发及部署环境。 在开发环境打开命令行工具,进入项目所在目录(此目录已经共享并挂载进了Linux),通过命令建立 MVC 站点: ```bash mkdir D:\projects\firstweb\web\ cd D:\projects\firstweb\web\ dotnet new mvc ``` 还原依赖,构建和启动: ```bash 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 确认网站可以正常访问。 # 建立Web的Dockerfile 站点最终在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 ```yml version: '2' services: web: build: context: ../web/ dockerfile: Dockerfile ``` Nginx编排文件:docker-compose.nginx.yml: ```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: ```conf server { listen 80; location /{ proxy_pass http://web:5000; } } ``` 建立build的编排文件:docker-compose.ci.build.yml ```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 ```bash 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下。 ```bash 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 ``` # 复制文件及部署 先把代码复制过来并加上执行权限: ```bash cd ~/projects/firstweb chmod +x sync.sh ./sync.sh chmod +x start.sh ``` 网站已经部署成功。 未来在windows开发环境修改代码之后,只需要在Linux下运行如下命令即可: ```bash ./sync.sh ./start.sh ``` 未来还可以利用Gitlab runner来实现CI/CD,后续会有文章介绍。
×
本文为博主原创,如需转载,请注明出处:
http://www.supperxin.com
返回博客列表