慕学在线--2、开发准备及布署上线

Django项目开发规范

  1. Django项目开发顺序:

    1. 分析项目初步明确:
      a. 预估需要引入的第三方开源工具包
      b. 明确将要使用的数据库
      c. 初步预估项目模块
      i. 初步分析数据之间的关系,一对多、多对一、多对多、一对一,
      ii. 动态数据与基础静态数据尽可能分离,避免交叉引用
      iii. 网页及数据分类
    2. 基础开发环境初步搭建
      a. 开发包安装
      b. 创建app,创建需要的文件夹
      c. setting初步设置
      d. 数据库的准备
    3. 完成urls.py及View.py文件
      a. 确定url的路由设置
      b. 写view的基本框架,保证基本的网页链接
    4. 完善后台管理,填入部分测试数据
      a. 完成adminx的设置
      b. 填入部分测试数据
    5. 完成base.html页面
      a. 分析所有网页,分类分析,确定主要base页面
      b. 预估base页面参数,完成参数的填入
    6. 逐一完善views.py、forms.py等,直至项目完成
  2. 命名规范
    ● 类名首字母用大写: class AddAskView():
    ● APP项目名,用小写:userprofile
    ● 属性名用小写 : user_profile,第一个单词为名词
    ● 方法用下划线:add_ask,第一个单词为动词
    ● bool变量为:is_read 或 has_read
    ● 数据集、列表用:course_dict course_list course_set
    ● 总数:course_count
    ● 时长:加上小时或分钟,并以复数形式展现,如course_minutes

开发环境搭建(windows)

  1. pycharm、mysql、navicat、python的安装

    1. pycharm 官网下载Professional Edition(专业版)
    2. 百度搜索 mysql for windows,下载mysql,并安装
    3. 百度搜索 navicat for mysql,下载navicat,并安装
    4. 百度搜索 python for mysql,下载python2.7 64位安装包
  2. windows下虚拟环境的搭建

    1. 安装virtualenvwrapper:pip install virtualenvwrapper-win
    2. 创建虚拟环境:mkvirtualenv 虚拟环境名
    3. 查看系统已有的虚拟环境:workon
    4. 进入虚拟环境:workon 虚拟环境名
    5. 退出当前虚拟环境:deactivate
    6. 如果需要安装不同版本的python,可以类似下面的命令:
      mkvirtualenv -p C:\Python35\python.exe py3scrapy
  3. 安装虚拟环境依赖包

    1. 进入虚拟环境:workon 虚拟环境名
    2. 安装依赖包,如:
      a. pip install django==1.9.8
      b. pip install mysql-python 安装如果报错,如error: Microsoft Visual C++ 9.0 is required. Get it from http://aka.ms/vcpython27,可尝试安装驱动
      i. 在http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python下载对应的包版本,如果是win7 64位2.7版本的python,就下载MySQL_python-1.2.5-cp27-none-win_amd64.whl,也可以下载:mysqlclient-1.3.12-cp27-cp27m-win_amd64.whl,安装方法同下
      ii. 命令行执行pip install MySQL_python-1.2.5-cp27-none-win_amd64.whl,需要在cmd下跳转到下载MySQL_python-1.2.5-cp27-none-win_amd64.whl的目录下
      c. pip install pillow 用到ImageField字段,需要安装pillow
      d. 其它根据需要安装
  4. 项目目录结构

    1. 新建文件夹apps,同时将文件夹mark成Source Root,用于存放app
      a. 创建app,命令:python manage.py startapp app名,并将app移到apps文件夹下
      注:python manage.py 可以查看所有项目管理命令
    2. 新建文件夹static,用于存放静态文件
    3. 新建文件夹media,用于存放用户上传文件
    4. 新建文件夹log,用于存放日志文件

生产环境配置及布署上线(linux)

一、python安装

  1. 下载及解压:

    ● 查看版本:Linux一般都会预装 Python,但版本比较低,可用python命令查看 python –version
    ● 下载安装包:wget http://mirrors.sohu.com/python/2.7.13/Python-2.7.13.tgz
    ● 解压缩:tar -zxf Python-2-7.13.tgz
    ● 进入到解压缩后的文件夹下,如:cd /usr/local/src/Python-2-7.13

  2. 编译

    • 安装准备准备编译环境
    yum install gcc wget  #  准备编译环境\安装下载命令
    yum install openssl-devel openssl   # 保证网络连接  ( 需要安装依赖包 zlib-devel )
    • 二进制文件编译安装Python

      • ./configure –prefix=/usr/local/python2.7 #configure 命令执行完之后,会生成一个 Makefile 文件,这个 Makefile主要是被下一步的 make 命令所使用。打开 Makefile你就会发现,里边制定了构建的顺序, Linux 需要按照Makefile 所指定的顺序来构建 (build) 程序组件。
      • make #实际上编译你的源代码,并生成执行文件。出现如下问题,解决方法

        • yum install tcl tcl-devel tk tk-devel # 避免 can’t locate tcl/tk libs and/or headers错误
        • yum install zlib-devel zlib # 如果yum install openssl-devel openssl ,无需要安装
        • 重新 ./configure –prefix=/usr/local/python2.7 make
        • 仍然还有一些包不存在的,可以暂时忽略
          clipboard.png-11.9kB
      • make install #实际上是把生成的执行文件拷贝到 linux系统中必要的目录下,比如拷贝到 /usr/local/bin 目录下,这样所有 user就都能运行这个程序了

        • 创建链接来使系统默认python变为python2.7 # 可以不修改,实际工作中,用虚拟环境
          ln -fs /usr/local/python2.7/bin/python2.7 /usr/bin/python # 建立软链接
        • 查看Python版本:python –V
      • 修改yum配置(如果上一步修改python软链接,yum可能无法正常运行)
        vim /usr/bin/yum
        将第一行的 #!/usr/bin/python修改为系统原有的python版本地址#!/usr/bin/python2.6
        注:为不对原系统造成影响,也便于使用,可以:
        将 /usr/local/python2.7/bin 加入到全局变量中,在文件 /etc/profile 中添加。
        export PYTHON2_7=/usr/local/python2.7
        export PATH=$JAVA_HOME/bin:$PATH:$PYTHON2_7/bin

二、安装pip

  • yum安装pip(方法一:此方法pip会默认安装到python2.6,尚不知怎么指定的python2.7)

    • 参考:pip源码 https://pypi.python.org/pypi/pip pip文档 https://pip.pypa.io/en/stable/installing/
    • 采用Package Managers的方式进行安装:package managers : Installing pip/setuptools/wheel with Linux Package Managers 将pypa-pypa.repo文件存到/etc/yum.repo.d/目录下
    • yum安装:
      sudo yum install python-pip python-wheel
      sudo yum upgrade python-setuptools
  • 推荐:python 安装 pip (方法二) 安装完成后,默认为pip2.7

三、安装python 虚拟环境

  1. 安装:pip install virturenv
  2. 安装:pip install virtualenvwrapper # virtualenvwrapper 是virtualenv的扩展包,要使用 virtualenvwrapper 步骤如下:
    此信息来自于文件:/usr/bin/virtualenvwrapper.sh

    1. Create a directory to hold the virtual environments.
      (mkdir $HOME/.virtualenvs).
    2. Add a line like “export WORKON_HOME=$HOME/.virtualenvs”
      to your .bashrc.
    3. Add a line like “source/usr/local/python2.7/bin/virtualenvwrapper.sh” Add a line like “export VIRTUALENVWRAPPER_PYTHON=/usr/local/python2.7/bin/python” to your .bashrc.
    4. Run: source ~/.bashrc # 如果还是不能成功,可尝试退出重新登录
    5. Run: workon
  3. 主要命令:

    列出虚拟环境列表:workon 或 lsvirtualenv
    新建虚拟环境:mkvirtualenv [虚拟环境名称]
    启动/切换虚拟环境:workon [虚拟环境名称]
    删除虚拟环境:rmvirtualenv [虚拟环境名称]
    离开虚拟环境:deactivate
    注:如果用sudo安装,显示“不在 sudoers 文件中。此事将被报告”,解决方法:
    在visudo命令调出的vim编辑窗口中,找到如下行:
    root ALL=(ALL:ALL) ALL # 文件中已设
    ltf ALL=(ALL:ALL) ALL # 添加需要sudo的用户名(ltf)

  4. 创建虚拟环境:
    mkvirtualenv –python=/usr/local/python-2.7.8/bin/python2.7 env1 # –python 指明pyhon的版本

四、安装Nginx

  1. 配置CentOS第三方yum源 # CentOS默认的标准里没有nginx软件包
  2. sudo yum install -y nginx #yum安装nginx
  3. sudo service nginx start #启动nginx服务
    • 查看进程,如下:
      1.png-9.7kB
    • window下网页测试(chrome浏览器),说明nginx服务启动成功
      clipboard.png-58.7kB
    • sudo chkconfig –level 235 nginx on # 开机自动启动

五、安装mysql,并配置mysql

  1. 安装并记启动。# 安装前需要把原来的mysql删除干净

    • yum install -y mysql mysql-server mysql-devel #安装mysql,默认安装mysql5.5.5
    • service mysqld start #启动mysql服务
      • 查看进程,如下:
        1.png-17.7kB
      • 设置用户名、密码:mysqladmin -u root password ‘root’
      • 进入mysql:mysql -h主机地址 -u用户名-p用户密码 # -h主机地址可省略,默认为本地登录,例:mysql -uroot -proot
        c. chkconfig –level 235 mysqld on #开机自动启动
        注:chkconfig 可以查看所有启动的服务
        clipboard.png-40.4kB
  2. 配置mysql(以mysql 5.5.5为例)

    • 若出现错误:can’t connect to MySQL server on ‘192.168.1.64’(10038),可能是防火墙原因
      • netstat -ntpl # 查看网络端口信息
      • iptables -vnL # 查看防火墙的状态
      • iptables -F # 清除防火墙中链中的规则
        2.png-16.6kB
    • 如下错误:Host ’192.168.1.3′ is not allowed to connect to this MySQL server,解决办法(需要在mysql环境下运行):

      • 方法一:root(mysql用户名)使用root从任何主机连接到mysql服务器
        1、GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ IDENTIFIED BY ‘root’ WITH GRANT OPTION;
        2、FLUSH PRIVILEGES;
      • 方法二:允许用户从ip为192.168.1.3的主机连接到mysql服务器,并使用root作为密码
        1、GRANT ALL PRIVILEGES ON . TO ‘root’@’192.168.1.3’ IDENTIFIED BY ‘root’ WITH GRANT OPTION;
        2、FLUSH PRIVILEGES;

      • 若出现错误:Can’t get hostname for your address,解决方案是修改配置文件
        在windows下面,文件是my.ini
        在Linux下面,文件是/etc/my.cnf,解决方案是在[mysqld]后面加上:skip-name-resolve

  3. Linux下mysql的卸载:

    • 查找以前是否装有mysql
      命令:rpm -qa|grep -i mysql
    • 删除mysql 删除命令:rpm -e –nodeps 包名
    • 删除老版本mysql的开发头文件和库
      检查各个mysql文件夹是否删除干净
      find / -name mysql 如果有,rm -rf 文件夹,强制删除
    • 卸载后/var/lib/mysql中的数据及/etc/my.cnf不会删除,如果确定没用后就手工删除
      rm -f /etc/my.cnf rm -fr /var/lib/mysql
    • 删除mysql用户及用户组: userdel mysql groupdel mysql

六、安装uwsgi

  • 批量安装安装依赖包:
    • 在windows下,进入虚拟环境 activate mxonline ,pip freeze >requirements.txt
    • 将requirements.txt传到虚拟系统中,
    • 进入python虚拟环境中,source activate mxonlinepip
    • 批量安装 install -r requirement.txt
  • 安装 uwsgi:pip install uwsgi
    django-admin.py startproject PROJECT_NAME
    python manage.py runserver 0.0.0.0:8000
    如果出现错误:Error: That port is already in use,ps aux | grep -i manage ,kill -9 XXX

测试uwsgi:uwsgi –http :8000 –module MxOnline.wsgi

七、项目布署上线

  1. python包安装及项目迁移
    以下所有都在python虚拟环境下进行

    1. python开发包安装:开发环境下,获得开发包清单,pip freeze > requirements.txt,在服务器上安装python虚拟环境需要的包:pip install -r requirements.txt
      如果出现个别安装包下载非常慢,可以用国内的douban网址下载。如:
      pip install -i https://pypi.douban.com/simple pillow ==3.4.1
    2. 将项目文件夹整体迁移到服务器上;同时在服务器的mysql上建立相同文件名的数据库,将开发环境的数据复制到服务器
    3. 测试django能否运行 python manage.py runserver 0.0.0.0:8000 ,然后在流览器中用http://192.168.1.64:8000/测试。若成功,可以看到网页
  2. uwsgi安装

    • (uwsgi为python的一个开发包) pip install uwsgi
    • 测试uwsgi 。如果项目名为 mxonline ,cd mxonline项目目录之下,uwsgi –http :8000 –module mxonline.wsgi,可再打开网页,可能发现静态文件(如样式)不能正常显示。
  3. 配置及运行nginx

    • 新建文件 uc_nginx.conf (注意:复制下文时,特别要注意不要少了第一个#号)
    
    ## the upstream component nginx needs to connect to
    
    upstream django {
    
    # server unix:///path/to/your/mysite/mysite.sock; # for a file socket
    
    server 127.0.0.1:8000 ; # for a web port socket (we'll use this first)
    }
    
    
    
    # configuration of the server
    
    server {
    
    # the port your site will be served on
    
    listen      80;
    
    # the domain name it will serve for
    
    server_name 你的ip地址  域名(可不写) ; # substitute your machine's IP address or FQDN
    charset     utf-8;
    
    # max upload size
    
    client_max_body_size 75M;   # adjust to taste
    
    
    # Django media
    
    location /media  {
        alias 你的目录/Mxonline/media;  # 指向django的media目录
    }
    
    location /static {
        alias 你的目录/Mxonline/static; # 指向django的static目录,不能指向各个app的static
    }
    
    
    # Finally, send all non-media requests to the Django server.
    
    location / {
        uwsgi_pass  django;
        include     uwsgi_params; # the uwsgi_params file you installed
    }
    }
    • 将该配置文件加入到nginx的启动配置文件中
      sudo ln -s 你的目录/Mxonline/conf/nginx/uc_nginx.conf /etc/nginx/conf.d/
      sudo service nginx restart # 重启服务,可能会遇到问题:
      nginx: [emerg] open() “/etc/nginx/conf.d/uc_nginx.conf” failed (13: Permission denied) in /etc/nginx/nginx.conf:31
      nginx: configuration file /etc/nginx/nginx.conf test failed
      解决办法(非root用户要加sudo):
      1、vim /etc/nginx/nginx.conf ,将 user nginx ; 改为:user root ;
      2、删除nginx 进程:pkill -f nginx
      3、重启nginx ,直接用命令:nginx

    • 拉取所有需要的static file 到同一个目录
      在django的setting文件中,添加下面一行内容,同时需要注释static_files相关内容
      STATIC_ROOT = os.path.join(BASE_DIR, “static/”)
      运行命令
      python manage.py collectstatic

    • 运行nginx
      sudo /usr/sbin/nginx
      这里需要注意 一定是直接用nginx命令启动, 不要用systemctl启动nginx,不然可能会有权限问题
  4. 配置uwsgi文件启动文件

    • 新建uwsgi.ini 配置文件, 内容如下:

      
      # mysite_uwsgi.ini file
      
      [uwsgi]
      
      # Django-related settings
      
      
      # the base directory (full path)
      
      chdir           = /home/bobby/Projects/MxOnline
      
      # Django's wsgi file
      
      module          = MxOnline.wsgi
      
      # the virtualenv (full path)
      
      virtualenv = /home/bobby/.virtualenvs/mxonline
      
      # process-related settings
      
      
      # master
      
      master          = true
      
      # maximum number of worker processes
      
      processes       = 10
      
      # the socket (use the full path to be safe
      
      socket          = 127.0.0.1:8000
      
      # ... with appropriate permissions - may be needed
      
      
      # chmod-socket    = 664
      
      
      # clear environment on exit
      
      vacuum          = true
      
      logto = /tmp/mylog.log

      注:
      chdir: 表示需要操作的目录,也就是项目的目录
      module: wsgi文件的路径
      processes: 进程数
      virtualenv:虚拟环境的目录

    • 启动uwsgi
      a. uwsgi -i 你的目录/Mxonline/conf/uwsgi.ini & # & 表示后台启动
      b. 访问 http://你的ip地址/

    • 如果要测试域名登录,方法:
      a. 修改文件:C:\Windows\System32\drivers\etc\hosts 如果没有权限,修改文件属性,改为用户可修改
      b. 添加如:192.168.1.64 www.mxonline.com
      c. 如果报错,可能是由于dns缓存造成的(由“DNS Client” 服务导致),解决方法是将hosts文件移出,再移进etc目录下。
发布了40 篇原创文章 · 获赞 6 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章