从零开始配置Django在Centos7的生产环境

首先需要有一个能运行的django项目.
本文不会从头开始实现如何写一个django项目,而是记录在完成django并且在pycharm测试通过后,如何配置到生产环境的过程.

生产环境搭建如下:
系统:Centos7
数据库:Mysql 8.0
项目配置:Nginx + uWSGI + Django

获取并安装Centos7

  1. 选择需要的映像文件下载

下载链接: https://www.centos.org/download/

  1. 下载并安装UltraISO
  2. 使用UltraISO 文件-> 打开ISO文件
  3. 插入U盘(重要数据提前备份)并在UltraISO中 启动 ->写入硬盘映像

至此,安装盘(U盘)制作完成.

安装Centos7

  1. 语言随意

  2. 选择最小安装

  3. 配置网络

  4. 分区

    • /boot:256M

    • /swap:16G

    • 其余空间全分给 /

  5. 输入服务器密码,创建新用户

至此系统安装完成.

安装Xshell6远程工具(太简单略)

安装后升级及配置

  1. 更新Yum

     yum update
    
  2. 更新组件

     yum install -y net-tools setuptool ntsysv iptables system-config-securitylevel-tui  system-config-network-tui tree vim
    
  3. 更新开发工具

     yum groupinstall "Development tools" -y
    
  4. 安装依赖包

     yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel wget -y
    

安装python3

  1. 新建下载目录和安装目录并进入下载目录

     mkdir /home/download
     cd /home/download
    
  2. 下载python3并解压进入目录

     wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tar.xz
     tar xf Python-3.6.6.tar.xz
     cd Python-3.6.6
    
  3. 编译安装

     ./configure --prefix=/usr/local/python3 
     make && make install
    
  4. 创建软连接(python3和pip3)

     ln -s /usr/local/python3/bin/python3 /usr/bin/python3
     ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
    
  5. pip升级

     pip3 install -upgrade pip
    
  6. 安装包

     pip3 install uwsgi django==1.11 jieba  pymysql django-pure-pagination
    
  7. 创建uwsgi和django的软连接

     ln -s /usr/local/python3/bin/django-admin /usr/bin/  
     ln -s /usr/local/python3/bin/uwsgi /usr/bin/
    

安装mysql8.0

  1. 下载源

     wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
    
  2. 安装并更新缓存

     rpm -ivh mysql80-community-release-el7-1.noarch.rpm  
     yum clean all  
     yum makecache
    

插曲:查看仓库及修改要安装的版本

    # 查看仓库
    yum repolist all | grep mysql
    # 使用 yum-config-manager 命令修改相应的版本为启用状态最新版本为禁用状态
    yum-config-manager --disable mysql80-community
    yum-config-manager --enable mysql57-community
    # 或者可以编辑 mysql repo文件
    cat /etc/yum.repos.d/mysql-community.repo
    # 更改相应版本下面的enable为1
  1. 安装Mysql

     yum install mysql-community-server -y
    
  2. 重启mysql(必须!)

     # 重启
     systemctl restart mysqld.service
     # 关闭
     systemctl stop mysqld.service
     # 启动
     systemctl start mysqld.service
    
  3. 获取初始密码

     cat /var/log/mysqld.log | grep password
    
  4. 修改密码及创建新用户

     # 修改密码
     ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
     # 刷新
     flush privileges; 
     # 创建新用户
     CREATE USER 'django'@'192.168.1.132' IDENTIFIED BY 'password';
     # 查看权限
     SHOW GRANTS FOR 'django'@'192.168.1.132';
     # 赋予权限
     GRANT EXECUTE,INSERT,SELECT,UPDATE DROP ON *.* TO 'DJANGO'@'192.168.1.132';
     # 开启远程登录权限
     # 不推荐这样做
     # 同样不推荐上面创建新用户来管理,因为要开端口
     # 可以使用SSH通道
     update user set host = '%' where user = 'root';
     flush privileges;
     alter user 'root'@'%' identified with mysql_native_password by  'password';
    
  5. 以下是旧版mysql:

    1. 登陆并修改密码(旧版mysql使用)
      mysql -u root
      use mysql;
      update user set password=password(‘123456‘) where user=‘root‘;
      flush privileges;
      exit;
    2. 开启远程连接
      mysql -u root -p
      GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
  6. 编译安装(如果非要这样的话)

    https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.12-linux-glibc2.12-x86_64.tar.xz

防火墙开启端口

  1. 关闭,开启,重启防火墙

     # 关闭
     service iptables stop
     # 开启
     service iptables start
     # 重启
     service iptables restart
    
  2. 增加打开端口

     # 编辑配置文件
     vim /etc/sysconfig/iptables
     # 按相应端口新增下面内容
     -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
    

测试并配置uwsgi

  1. 把jdango项目上传至指定目录

  2. 测试django项目

     # 注意:要在上面防火墙一步开启相应端口,测试后再关闭
     python3 manage.py runserver 192.168.1.132:8080
    
  3. 测试uwsgi托管django服务

     # 确保出于和manage.py同一层目录
     # module后是项目的主名称,也就是包含wsgi.py文件的目录名称
     # 此时uwsgi无法处理静态文件
     uwsgi --http :8080 --module Standard_server.wsgi
    
  4. 创建uwsgi配置文件

     # 在项目根目录(与manage.py同级目录)建立uwsgi配置文件
     >vim /home/server/uwsgi.ini
    
     [uwsgi]
     # 通过外网直接访问uwsgi服务的地址(通常测试后即关闭此端口)
     http = :8080
     # nginx通过这一项和项目相连
     socket =  127.0.0.1:8001
     # 项目目录,BASE_DIR
     chdir = /home/server
     # 相对BASE_DIRr的wsgi文件
     wsgi-file = Standard_server/wsgi.py
     # 进程数
     processes = 4
     # 线程数
     threads = 2
     stats = 127.0.0.1:9191
     vacum = true 
     # 静态文件目录
     static-map = /static=/home/server/static
    
     # 开启服务,开启式务必开放配置文件内端口(测试后即关掉)
     >uwsgi /home/server/uwsgi.ini
    

安装并配置nginx

  1. 查看源

    http://nginx.org/packages/

  2. 下载并安装源

     http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.14.0-1.el7_4.ngx.x86_64.rpm
     rpm -ivh nginx-1.14.0-1.el7_4.ngx.x86_64.rpm
     # 下一步貌似可以省略
     yum install -y nginx
    
  3. 启动,停止,重启nginx

     # 启动
     service nginx start
     # 停止
     service nginx stop
     # 重启
     service nginx restart
    
  4. 使用nginx托管django服务的原理

    • 使用uwsgi开启django服务(通过配置文件启动)
    • 防火墙关闭uwsgi端口(uwsgi的websocket一定要使用127.0.0.1的方式配置))
    • 编写nginx配置文件,通过nginx访问uwsgi,再通过uwsgi访问django
  5. nginx配置文件

     # 编辑创建配置文件(扩展名必须是.conf)
     vim /home/server/server_nginx.conf
    
     # 编辑配置文件
     upstream django {
         server 127.0.0.1:8001;
     }
     server {
                 listen          80;
                 server_name     DLSC;
                 charset         utf-8;
    
                 client_max_body_size    75M;
    
                 location /media {
                         alias   /path/media;
                 }
    
                 location /static/ {
                         alias   /home/server/static/;
                 }
    
                 location / {
                         uwsgi_pass      django;
                         include         /home/server/uwsgi_params;
                 }
     }
    
  6. 注意地方

    1. nginx配置文件可以放在项目目录,但是要建立去向nginx目录下的软连接

       ln -s /home/server/server_nginx.conf /etc/nginx/conf.d
      
    2. nginx版本不同,建立软连接的目标也可能不同,具体参照nginx目录下nginx.inf文件中include:

       # 例如例子里的版本中是
       include /etc/nginx/conf.d/*.conf;
      
    3. 如果软连接目标地方还有其他配置文件(例如默认的default.conf),并且监听的端口和建立配置文件冲突的,修改或者改名(扩展名不能是.conf)

  7. 最后重启nginx,配置完成.

推荐阅读更多精彩内容