从零开始配置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,配置完成.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容