前言

在win10简单的使用Docker打包那纯属玩蛇,真正的部署还是要在Centos,这里为什么要用gunicorn呢,因为uwsgi还要编写配置文件,比较麻烦,所以我偷个懒使用gunicorn,日后有时间再讲解uwsgi

Nginx呢,就好像一层缓冲墙,使用Nginx来反向代理,就相当于用户不能直接访问服务器,而是先访问Nginx,由Nginx来负责分发。

Nginx的默认策略就是轮询,按照顺序发送,如果服务器要横向扩展,按照顺序一个个的发送,如果服务器配置高低不一,可以将策略改为加权。根据服务器的配置来设置阈值,增加容灾性。

开始操作

  • 首先呢,就是将项目打包,具体流程不再赘述了,请观阅拙作:Docker部署Django项目

  • 然后,注册Dockerhub,类似gitee和github的仓库:[地址][https://hub.docker.com/]

  • 创建仓库
  • 然后呢,我们需要对本地的镜像名重命名
docker tag 本地镜像名 仓库拥有者/仓库名
例如:
docker tag mydjango godhearing/mydjango
  • 之后在命令行输入命令
docker login
  • 使用dockerhub的账号密码登录

这里我是登录过了,输入账号密码后出来这个就是登录成功了

  • 然后将本地镜像上传到dockerhub中

    docker push godhearing/mydjango
  • 然后登录你的云服务器,然后安装docker服务

    #升级yum
    sudo yum update
    #卸载旧版本docker
    sudo yum remove docker  docker-common docker-selinux docker-engine
    #安装依赖
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    #设置源
    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    sudo yum makecache fast
    #安装docker
    sudo yum install docker-ce
    
    #启动服务
    sudo systemctl start docker
  • 安装完成后键入 docker -v

    如果出来版本号就说明没有问题

    然后从dockerhub把镜像拉下来

  • 采用后台守护进程模式起服务

    sudo docker run -d -p 8000:8000 --name 自定义镜像名 镜像名
    例如:
    sudo docker run -d -p 8000:8000 --name testdjango godhearing/mydjango

    可以使用docker ps来查看是否运行成功

  • 然后访问一下

    ok,没有问题,额。。。也不能叫没有问题,因为我的mysql是本地的,没有更改,不过也还可以啦,总之,项目呢,是部署的没有问题了。不要在意这些细节

  • 然后呢,我们安装Nginx服务

    docker pull nginx
  • 然后启动

    docker run -d -p 80:80 nginx
  • 现在,我们将运行Nginx容器里的配置文件copy到宿主机里面(拉到本地)

    docker cp 容器id:/etc/nginx/conf.d/default.conf /root/default.conf
  • 复制出来之后,输入命令修改这个nginx配置

    vim /root/default.conf
  • 将Gunicorn配置加到里面

    server {
        listen       80;
        server_name  localhost;
    
        #charset koi8-r;
        #access_log  /var/log/nginx/host.access.log  main;
    
         location / {
            proxy_pass http://你的服务器公网ip:5000; # 这里是指向 gunicorn host 的服务地址
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    
        #error_page  404              /404.html;
    
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
  • 修改完配置文件之后,关掉运行的nginx服务容器,并且删掉它

    docker stop 容器id
    docker rm $(docker ps -a -q)
  • 然后再次启动nginx,通过-v来进行挂载,就是将宿主机的文件替换Docker容器内部的文件,达到修改的效果

    docker run --name mynginx -d -p 80:80 -v /root/default.conf:/etc/nginx/conf.d/default.conf nginx
  • 重新启动成功后,访问服务器ip即可

ok完毕,比原始命令行shell安装不知快了多少倍