1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > docker nginx supervisor gunicorn vue阿里云

docker nginx supervisor gunicorn vue阿里云

时间:2018-11-03 15:39:52

相关推荐

docker nginx supervisor gunicorn vue阿里云

写在前面-总结

前言:本项目后端使用的是flask框架进行开发,数据库以及oss存储使用的都是第三方服务。

前端使用vue开发。部署采用的是docker+nginx+gunicorn+supervisor

遇到的一些坑:我是在windwos下开发,进行docker build,在build image时遇到了很多很多网上常见的问题。

apt 无法更新

比如在apt时用了很多方法装不上nginx这些包,看了网上的博客,换了apt源发现还是有问题,最后发现是博客提供的源有问题,源的ftp可能更新了路径不对。

ps:如果换了源还不对,可以拿着源的url自己去访问一下,我就是这样发现的问题。下载image时超时、报错

这个时候需要切换docker的源,打开docker的setting,切换源。

ps:网上很多方法,这个我没遇到很大的坑。在初期搭建环境的时候最好不要==“一步到位”==,一步一步的来,完成一部先进入容器内部看看,自己在容器内先测试接下来的命令,要不然只凭docker build的报错命令是有很多看不出来的。

进入主题

既然可以搜到这篇blog,首先我认为docker的基础命令都是ok的,否则建议先看一下这几篇文章。

容器十年 —— 一部软件交付编年史关于构建flask项目的docker技术文档(纯英文)基础命令(这样的文章有很多…)

因为本项目后端使用的时supervisor管理进程,gunicorn启动项目。所以需要了解上面两个技术的基本使用。

supervisor官方文档(英文)

supervisor基础命令

gunicorn官方(英文)

gunicorn基础命令

基础命令的文档有很多,网上可以搜到很多的中文文档,但是有的可能没有写清楚是在什么环境下安装,安装的什么版本,具体的参数是什么功能,导致很多人虽然跟着技术博客做出来,但是会遇到很多问题。还是推荐大家FQ看一下官方的文档,虽然是英文的吧。

一、文件的配置信息

1、Dockfile

# 使用python镜像,可以去去找适合自己的镜像FROM python:3.6.4WORKDIR /appCOPY . .#更新apt-get源 使用163的源RUN echo "deb /debian/ jessie main non-free contrib" >/etc/apt/sources.list \&& apt-get update \&& apt install -y nginx supervisor \&& pip3 install gunicorn \&& pip install -r requirements.txt -i /pypi/simple/ADD supervisord.conf /etc/supervisor/conf.d/supervisord.confADD gunicorn.conf /etc/supervisor/conf.d/gunicorn.confADD nginx_arrway.conf /etc/nginx/conf.d/nginx_arrway.confCMD supervisord

上面的这些命令都很基础,最麻烦的一点可能就是在windows下无法apt update,那就用我上面RUN的第一行命令,换源,亲测有效的。

2、 supervisor

[supervisord]nodaemon=true[program:nginx]command=/usr/sbin/nginx[program:arrway-server]directory = /appcommand = gunicorn -b 0:5500 -w 8 app:app

我的supervisor.conf没有配置那么多的东西,比如log文件等,根据自己的需求可以看上面的技术文档自己增加对应的参数进去。因为这里我直接使用了gunicorn启动,所以没有用到gunicorn.conf文件。根据自己的实际情况可以去配置。

3、nginx

宿主主机的配置:

server {listen 80;server_name '你的域名';location / {proxy_pass http://127.0.0.1:5000; # 这里指向的是启动容器时映射的端口}}

容器内nginx配置

server {listen 5000; # 监听被映射的端口location /api/v1/ {proxy_pass http://127.0.0.1:5500; # 这个是后端项目启动的端口,对应在supervisor.conf使用gunicorn启动时的端口}location / {# 这里指向前端静态文件,因为我是在build镜像前打包的项目,所以直接指向就ok。# 也可以在dockerfile文件中使用命令打包前端项目,但是装npm有时候可能会遇到很多无法预测的错误。root /app/web/dist;index index.html;try_files $uri $uri/ /index.html;}}

二、 build镜像

build 镜像

docker build -t [镜像名]:[tag] .

使用exec命令可以进入镜像内部查看

docker exec -t [images ID] /bin/bash

使用run命令启动镜像,此时会生成一个容器

docker run -it -p 5000:5000 [images ID]# images ID 可以通过 docker images -a 查看

上传镜像

# 登陆镜像仓库$ sudo docker login --username=skykxt_fy -# 创建标签$ sudo docker tag [ImageId] -/skykxt/arrway:[镜像版本号]# 上传到仓库$ sudo docker push -/skykxt/arrway:[镜像版本号]

服务器拉取镜像

$ sudo docker pull -/skykxt/arrway:[镜像版本号]

拉取镜像后就可以run,生成容器。到此大功告成。

总结

其实这些技术都不是很难理解,比较麻烦的就是把很多技术糅合到一起,根据自己的情况去选择技术如何搭配。然而网上很多的例子也不一定符合自己开发的环境,就会掉入很深的坑,最主要的还是学会解决问题,形成一个良好的解决问题的思路。

最后呢还是推荐大家多去看看技术的官方文档,FQ去看看那边的技术,因为那边讲的一般都很细,很原理的一些东西。

如果你发现了这篇blog有问题,或者有更好的解决方案,尽快和我留言吧~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。