docker nginx supervisor gunicorn vue阿里云

写在前面-总结

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

前端使用vue开发。部署采用的是docker+nginx+gunicorn+supervisor
遇到的一些坑:我是在windwos下开发,进行docker build,在build image时遇到了很多很多网上常见的问题。

  1. apt 无法更新
    比如在apt时用了很多方法装不上nginx这些包,看了网上的博客,换了apt源发现还是有问题,最后发现是博客提供的源有问题,源的ftp可能更新了路径不对。
    ps:如果换了源还不对,可以拿着源的url自己去访问一下,我就是这样发现的问题。
  2. 下载image时超时、报错
    这个时候需要切换docker的源,打开docker的setting,切换源。
    ps:网上很多方法,这个我没遇到很大的坑。
  3. 在初期搭建环境的时候最好不要==“一步到位”==,一步一步的来,完成一部先进入容器内部看看,自己在容器内先测试接下来的命令,要不然只凭docker build的报错命令是有很多看不出来的。

进入主题

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

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

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

一、文件的配置信息

1、Dockfile
# 使用python镜像,可以去dockerhup.com去找适合自己的镜像
FROM python:3.6.4

WORKDIR /app
COPY . .

#更新apt-get源 使用163的源
RUN echo "deb http://mirrors.163.com/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 https://mirrors.aliyun.com/pypi/simple/

ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf
ADD gunicorn.conf /etc/supervisor/conf.d/gunicorn.conf
ADD nginx_arrway.conf /etc/nginx/conf.d/nginx_arrway.conf

CMD supervisord

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

2、 supervisor
[supervisord]
nodaemon=true

[program:nginx]
command=/usr/sbin/nginx

[program:arrway-server]
directory = /app
command = 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 registry.cn-hangzhou.aliyuncs.com
# 创建标签
$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/skykxt/arrway:[镜像版本号]
# 上传到仓库
$ sudo docker push registry.cn-hangzhou.aliyuncs.com/skykxt/arrway:[镜像版本号]

服务器拉取镜像

$ sudo docker pull registry.cn-hangzhou.aliyuncs.com/skykxt/arrway:[镜像版本号]

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

总结

其实这些技术都不是很难理解,比较麻烦的就是把很多技术糅合到一起,根据自己的情况去选择技术如何搭配。然而网上很多的例子也不一定符合自己开发的环境,就会掉入很深的坑,最主要的还是学会解决问题,形成一个良好的解决问题的思路。
最后呢还是推荐大家多去看看技术的官方文档,FQ去看看那边的技术,因为那边讲的一般都很细,很原理的一些东西。

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值