docker nginx uwsgi django python 组合配置

一. centos 7 安装及环境配置

  1. 正常安装centos7
  2. 更换yum源
  3. 关闭selinux
  4. 用firewall-cmd开启 ssh, 80, ssh更改过的端口
  5. 更改ssh默认端口
  6. 安装配置python3.7, django环境
  7. 安装docker
  8. 安装docker-compose
  9. 针对项目写Dockerfile文件和docker-compose.yml文件 
  10. 写nginx.conf 和 uwsgi.ini

二. 本地装python, django

  1. 安装Python 3.7
    • 安装准备工作:
      • yum -y install gcc make zlib-devel bzip2-devel openssl-devel sqlite-devel readline-devel libffi-devel ncurses-devel  tk-devel gdbm-devel xz-devel
      • 下载python3.7.5源码包:
        • wget https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz
      • 检查sqlite3的版本
        • 要3.20以上: sqlite3 --verion
        • 如果不是3.20以上, 下载源码包安装: wget https://www.sqlite.org/snapshot/sqlite-snapshot-201911030007.tar.gz   
          注意:在安装时我这里用了 ./configure --prefix=/usr/local/sqlite3
        • 替换sqlite3:
          mv /usr/bin/sqlite3 /usr/bin/sqlite3_3.7.17     
          ln -s /usr/local/sqlite3/bin/sqlite3 /usr/bin/sqlite3
        • 在 .bashrc文件里加入:
          export LD_LIBRARY_PATH="/usr/local/sqlite3/lib" 把lib库共享给python
        • 再次检查版本确认替换成功
          在系统环境下: sqlite3 --version
          在python交互模式下: 
            import sqlite3
            sqlite3.sqlite_version
    • 配置安装python:
      • ./configure --prefix=/usr/local/Python37/
      • make
      • make install
      • ln -s /usr/local/Python37/bin/python3.7 /usr/bin/python37
      • ln -s /usr/local/Python37/bin/pip3.7 /usr/bin/pip37
      • 本地配置pip源
        • 在home目录mkdir .pip
        • 在.pip目录下建立pip.conf文件
        • 内容为:
          [global]
          index-url = https://mirrors.aliyun.com/pypi/simple/
          [install]
          trusted-host = mirrors.aliyun.com
      • 设置virtulaenvs工作目录
        • 在home目录下, mkdir .virtualenvs
        • 在.bashrc文件里添加:
          export WORKON_HOME=$HOME/.virtualenvs
          source /usr/local/Python37/bin/virtualenvwrapper.sh
        • 在/etc/profile文件加入
          VIRTUALENVWRAPPER_PYTHON=/usr/bin/python37 
        • ln -s /usr/local/Python/bin/virtualenv  /usr/bin/virtualenv
        • logout
  2. 安装django
    • 新建环境: mkvirtualenv xxxx
    • pip install django
  3. 新建项目
    • mkdir /www
    • 进入/www
    • django-admin startproject xxx

至此, Python和django环境安装配置完整        

              

三. 安装docker

  1.  安装一些必要的系统工具

    sudo yum install -y yum-utils device-mapper-persistent-data lvm2

  2. 添加软件源信息

    # 阿里云源
    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  3. 安装 Docker-ce

    # 安装前可以先更新 yum 缓存:
    sudo yum makecache fast
    # 安装 Docker-ce
    sudo yum install docker-ce

  4. 启动 Docker 后台服务

    $ sudo systemctl start docker
    通过运行 hello-world 镜像,验证是否正确安装了 docker。

  5. 配置阿里镜像源
    vim /etc/docker/daemon.json

      {
                "registry-mirrors": ["https://bxpcf41j.mirror.aliyuncs.com"]
      }

  6. systemctl daemon-reload
  7. systemctl restart docker
  8. docker run hello-world   #测试docker是否安装成功

四. 安装Docker Compose

  1. 优化访问 github 速度

    打开IPAddress.com网站,查询下面3个网址对应的IP地址 : github.com, assets-cdn.github.com, github.global.ssl.fastly.net
    在/etc/hosts里添加解析后的ip和域名映射
    重启network服务

  2. curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  3. ln -s /usr/local/bin/docker-compose  /usr/bin/docker-compose
  4. chmod +x /usr/local/bin/docker-compose

五. 容器及项目配置文件

  1. Dockerfile
    在项目根文件夹下建立Dockerfile文件, 比如: /www
    /www/Dockerfile内容为:
    1. # 从仓库拉取 带有 python 3.7 的 Linux 环境
    2. FROM python:3.7  
    3. # 设置 python 环境变量
    4. ENV PYTHONUNBUFFERED 1 
    5. # 更改 Debian 华为镜像源
    6. RUN cp -a /etc/apt/sources.list /etc/apt/sources.list.bak
    7. RUN sed -i "s@http://ftp.debian.org@https://repo.huaweicloud.com@g" /etc/apt/sources.list
    8. RUN sed -i "s@http://security.debian.org@https://repo.huaweicloud.com@g" /etc/apt/sources.list
    9. RUN sed -i "s@http://deb.debian.org@https://repo.huaweicloud.com@g" /etc/apt/sources.list
    10. RUN apt-get install apt-transport-https ca-certificates
    11. RUN apt-get update
    12. RUN apt-get install python3-dev default-libmysqlclient-dev -y
    13. RUN apt-get update
    14. RUN apt-get install python3-dev default-libmysqlclient-dev -y
    15. # 创建 www文件夹并将其设置为工作目录
    16. RUN mkdir /www
    17. WORKDIR /www
    18. # 更新 pip
    19. RUN pip install pip -U -i https://pypi.douban.com/simple
    20. # 将 requirements.txt 复制到容器的 www 目录
    21. ADD requirements.txt /www/
    22. # 安装库
    23. RUN pip install -r requirements.txt  -i https://pypi.douban.com/simple
    24. # 将当前目录复制到容器的 www 目录
    25. ADD . /www/
  2. 在项目根文件夹下建立docker-compose.yml文件:
    /www/docker-compose.yml
     1 version: "3"
     2 services:
     3     app:
     4         restart: always
     5         build: .
     6         command: bash -c "python3 cmdb/manage.py collectstatic --no-input && python3 cmdb/manage.py migrate && uwsgi --ini uwsgi/uwsgi.ini"
     7         volumes:
     8             - .:/www
     9             - static:/www/cmdb/online_static
    10         expose:
    11             - "8000"
    12         depends_on:
    13             - db
    14         networks:
    15             - web_network
    16             - db_network
    17     db:
    18         image: mysql:5.7
    19         volumes:
    20             - "./mysql:/var/lib/mysql"
    21         expose:
    22             - "3306"
    23         restart: always
    24         environment:
    25             - MYSQL_ROOT_PASSWORD=cmdbpassword
    26             - MYSQL_DATABASE=cmdb
    27         networks:
    28             - db_network
    29     nginx:
    30         restart: always
    31         image: nginx:latest
    32         ports:
    33             - "80:80"
    34         volumes:
    35             - static:/www/cmdb/online_static
    36             - ./nginx:/etc/nginx/conf.d
    37         depends_on:
    38             - app
    39         networks:
    40             - web_network
    41 networks:
    42     web_network:
    43         driver: bridge
    44     db_network:
    45         driver: bridge
    46 volumes:
    47     static:
  3. nginx配置文件
    /www/nginx/nginx.conf
     1 upstream django{
     2         server app:8000;
     3 }
     4 
     5 server {
     6     listen 80;
     7     server_name localhost;
     8     charset utf-8;
     9     client_max_body_size 75M;
    10 
    11     location /media {
    12         alias /www/cmdb/media;
    13     }
    14     location /static {
    15         alias /www/cmdb/online_static;
    16     }
    17     location / {
    18         uwsgi_pass django;
    19         include uwsgi_params;
    20     }
    21 }
  4. uwsgi配置文件
    /www/uwsgi/uwsgi.ini
    [uwsgi]
    env DJANGO_SETTINGS_MODULE=cmdb.settings
    chdir=/www/cmdb
    callable=app
    socket=0:8000
    chmod-socket = 666
    uid=root
    gid=root
    module=cmdb.wsgi:application
    master=true
    workers=5
    processes=10
    vacuum=true
    thunder-lock=true
    enable-threads=true
    harakiri=30
    post-buffering=4096
    buffer-size=65535
  5. requirements.txt 文件
    /www/requirements.txt 内容:

    django
    mysqlclient
    uwsgi

  6. 更改/www/cmdb/cmdb/settings.py文件, 如下:
     1 ALLOWED_HOSTS = ['*']
     2 
     3 DATABASES = {
     4     'default': {
     5         'ENGINE': 'django.db.backends.mysql',
     6         'NAME': 'cmdb',
     7         'USER': 'root',
     8         'PASSWORD': 'cmdbpassword',
     9         'HOST': 'db',
    10         'PORT': '3306',
    11         'OPTIONS': {'charset': 'utf8mb4'},
    12     }
    13 }
    14 
    15 LANGUAGE_CODE = 'zh-hans'
    16 
    17 TIME_ZONE = 'Asia/Shanghai'
    18 
    19 USE_TZ = False
    20 
    21 STATIC_URL = '/static/'
    22 
    23 STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static')
    24 
    25 MEDIA_URL = '/media/'
    26 
    27 MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
  7. 测试项目
    docker-compose up
    如果出现以下错误:
        Docker报错 WARNING: IPv4 forwarding is disabled. Networking will not work.
    解决方法如下:
        # vim /usr/lib/sysctl.d/00-system.conf
        添加如下代码:
        net.ipv4.ip_forward=1
        重启network服务
        # systemctl restart network
        完成以后,删除错误的容器,再次创建新容器,就不再报错了。

六. 出现经典的小火箭

七. 创建django admin 用户

  在宿主机的/www目录下

  docker-compose exec app python cmdb/manage.py  createsuperuser  

    用户名 (leave blank to use 'root'): admin
    电子邮件地址:
    Password:
    Password (again):
    密码长度太短。密码必须包含至少 8 个字符。
    Bypass password validation and create user anyway? [y/N]: y
    Superuser created successfully.

登录django admin后台成功

至此, , 项目测试成功!

 

最后的最后

systemctl enable docker

 

最后的最后的最后

在app容器里, 配置pip阿里源

首先确定宿主机的/root/.pip/目录下有pip.conf文件

docker-compose exec app mkdir  /root/.pip

docker cp ~/root/.pip.*  www_app_1:/root/.pip/

 

设置3个容器的时区

查看 nginx服务器的时区是不是CST的: docker-compose exec nginx date

如果不是: docker-compose exec nginx cp /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime

 

完美!

posted @ 2019-11-08 15:55  leiaoo  阅读(61)  评论(0)    收藏  举报