慕學在線--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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章