day28-項目部署

django部署

redis緩存
上線項目debug要改成False
nginx轉發uwsgi及靜態資源(css、js等樣式加載)


問題:---經過重裝centos解決!!
1.解決依賴語句,報錯
2.pip3 提示無此命令


虛擬機用戶名:
root
root1234



virtualenv python中的一個模塊
pip3 list查看安裝的pip列表
which pip3 查看pip3的路徑

lsvirtualenv查看 virtualenv項目

在pycharm中使用虛擬環境:
settings,Project Interpreter---小齒輪---Add Local---Virtualenv Environment

新建虛擬環境:mkvirtualenv nginx_uwsgi
立刻:pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple uwsgi

uwsgi
啓動項目:
cd mysite
uwsgi --http :9999 --module mysite.wsgi

nginx:簡單的cs。
touch nginx.ini
vim nginx.ini
指定配置文件啓動命令
uwsgi --ini /etc/nginx.ini

supervisor:任務管理工具
supervisor
    1.再也不經過命令行的方式,啓動項目,經過ps -ef  kill 
    2.進行進程管理(python ,mysql,redis,nginx)
    3.經過supervisr統一化管理linux進程
    4.檢測到你服務掛了,自動重啓

安裝配置supervisor
1.經過easy_install安裝
    #注意此時已經退出虛擬環境了!!!!!
    yum install python-setuptools
    easy_install supervisor
    
    
2.經過命令生成supervisor的配支文件
    echo_supervisord_conf > /etc/supervisord.conf
    
3.在配置文件中,添加任務,管理django項目
    vim /etc/supervisord.conf #寫入信息
    
    [program:s21_django]
    #管理uwsgi的命令, 使用絕對路徑
    command=/root/Envs/nginx_uwsgi/bin/uwsgi  --ini /home/mysite/uwsgi.ini
    #檢測項目是否掛掉,自動重啓
    autorestart=true

4.啓動supervisord
    supervisord -c supervisord.conf 


5.管理supervisor的命令
1、添加好配置文件後
2、更新新的配置到supervisord    
supervisorctl update

3、從新啓動配置中的全部程序
supervisorctl reload

4、啓動某個進程(program_name=你配置中寫的程序名稱)
supervisorctl start program_name
5、查看正在守候的進程
supervisorctl

6、中止某一進程 (program_name=你配置中寫的程序名稱)
pervisorctl stop program_name

7、重啓某一進程 (program_name=你配置中寫的程序名稱)
supervisorctl restart program_name

8、中止所有進程
supervisorctl stop all
注意:顯示用stop中止掉的進程,用reload或者update都不會自動重啓。
    
    
環境初始化:
關閉防火牆
systemctl stop firewalld
iptables -F
setenforce 0   #系統自帶防火牆也給關了


項目發佈博客地址:
https://www.cnblogs.com/pyyu/p/9481344.html
supervisor

 

總結:
1.準備linux環境,安裝虛擬機,準備服務器環境;
安裝python3,注意添加環境變量
編譯安裝python3
解決依賴
yum install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y

1.下載python3源碼包
wget https://www.python.org/ftp/python/3.4.7/Python-3.4.7.tar.xz
xz -d Python-3.4.7.tar.xz
tar -xf Python-3.4.7.tar

2.進入python3源碼包路徑,開始編譯安裝

./configure --prefix=/opt/python3/   #生成一個makefile文件
make 
make install  
結束後,完成編譯安裝

3.配置python3可執行命令,快捷方式
#linux添加python3的環境變量

#第一種方式
    ln -s /opt/python3/bin/python3   /usr/bin/python3  
#第二種方式,寫入到/etc/profile中,這一步很是重要  base prefix 基本路徑
    export PATH=/opt/python3/bin/:$PATH
    source /etc/profile  使得配置文件生效
能夠用echo $PATH 查看,python3放在環境變量中!
4.測試直接輸入 python3,可否進入python 
安裝python及配置

 


2.準備項目,上傳到服務器;
安裝一個遠程傳輸軟件 lrzsz
yum install lrzsz -y
sz #send 傳輸文件
rz #接受文件 選擇文件路徑;或者直接拖拽文件

3.unzip 解壓zip包
4.進入到項目目錄,修改settings
allow_host=['*']
5.建立virtualenv 1-3
virtualenv      https://www.cnblogs.com/pyyu/p/9015317.html
    問題比較多,不容易管理
    
    
1.下載virtualenv
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
2.經過命令建立虛擬環境venv
#確保環境乾淨隔離,與宿主及解釋器隔離開 --no-site-packages

virtualenv --no-site-packages --python=python3  venv 

3.檢查環境變量,確認已經進入venv虛擬環境中
source venv/bin/activate--------------------------------------------
echo $PATH #打印環境變量

4.測試安裝兩個不一樣版本的django環境
    1.在系統解釋器下---宿主機環境下(linux操做系統root開頭下)
        pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple django==1.11.15
    2.在虛擬環境venv中(linux操做系統venv開頭下)
        pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple django==1.11.12 
5.能夠測試在兩個解釋器中,運行不一樣的任務

6.退出虛擬環境
deactivate命令

保證開發/測試環境一致性
1.經過命令導入項目依賴(能夠在宿主機上執行)
pip3 freeze > requirements.txt   
2.傳輸此requirements.txt 文件到服務器環境,經過命令直接安裝
pip3 install -r requirements.txt
virtualenv

virtualenvwrapper 安裝
virtualenvwrapper
(和virtualenv二選一)

    爲了解決虛擬環境難以管理的問題,而且容易使用
    
1.安裝  
pip3 install  virtualenvwrapper

2.配置環境變量,使得每次登錄就啓動virtualenvwrapper
寫入到 ~/.bashrc 文件中,
vim ~/.bashrc 

export WORKON_HOME=~/Envs   #設置virtualenv的統一管理目錄
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'   #添加virtualenvwrapper的參數,生成乾淨隔絕的環境
export VIRTUALENVWRAPPER_PYTHON=/opt/python3/bin/python3     #指定宿主機python3解釋器絕對路徑
source /opt/python3/bin/virtualenvwrapper.sh #執行virtualenvwrapper安裝腳本

3.使得腳本生效,從新登陸一次
logout  在從新登陸的時候,加載virtualenvwrapper腳本


4.使用virtualenvwrapper經常使用命令
    建立一個虛擬環境:(在哪兒輸入無所謂,由於有統一目錄WORKON_HOME,能夠經過echo $WORKON_HOME查看)
    $ mkvirtualenv my_django115
    這會在 ~/Envs 中建立 my_django115 文件夾。(建立後自動激活)

    在虛擬環境上工做:激活虛擬環境my_django115
    $ workon my_django115--------------------------------------------------------

    再建立一個新的虛擬環境
    $ mkvirtualenv my_django2

    virtualenvwrapper 提供環境名字的tab補全功能。
    當有不少環境, 而且很難記住它們的名字時,這就顯得頗有用。
    workon還能夠任意中止你當前的環境,能夠在多個虛擬環境中來回切換
    workon my_django115
    workon my_django2.0

    也能夠手動中止虛擬環境
    deactivate

    刪除虛擬環境,須要先退出虛擬環境
    rmvirtualenv my_django115
virtualenvwrapper

建立一個虛擬環境:mkvirtualenv s21crm
cdvirtualenv 查看pwd爲/root/Envs/s21crm,此時環境爲咱們所用
6.安裝django
django

準備一個django項目文件夾,配置好外網訪問
修改settings.py 
    allow_host=['*']
修改數據庫驅動---用mysql數據庫須要修改如下內容!

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

pip3 install pymysql 
__init__.py 文件中添加數據庫驅動
import pymysql 
    pymysql.install()
django

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple django==1.11.11

測試運行: python3 manage.py runserver 0.0.0.0:7000
此時輸入ip:7000就能夠訪問界面啦!用戶名lijie 密碼123

注:修改數據庫驅動---用mysql數據庫須要修改如下內容!

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}

注意virtualenvwrapper配置環境變量
7.優化:
用uwsgi 支持多進程,高併發
uwsgi 
    django默認啓動 python  manager.py  runserver  它調用wsgiref單機web服務器模塊,性能不好
    在線上啓動django項目,選擇的是uWSGI + django,使用多進程高性能的web服務器運行,支持併發性更好
    
重點標記:
    django建立時,會產生wsgi.py文件
    mysite/mysite/wsgi.py 
        #wsgi.py產生的application應用---------(沒有項目就沒法啓動!!提示「Internal Server Error」)
        application = get_wsgi_application()
    可能出現的坑:
        1. no  application  xxxxxx   這個問題就是說,你指定的wsgi.py文件不正確
新建虛擬環境:mkvirtualenv nginx_uwsgi    
    1.安裝uwsgi
    pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple    uwsgi
    2.經過uwsgi啓動一個python web文件
        1.test.py 
        
        def application(env, start_response):
            start_response('200 OK', [('Content-Type','text/html')])
            return [b"Hello World"] # python3
        2.經過命令啓動
            uwsgi --http :9000 --wsgi-file test.py  
        3.啓動後能夠瀏覽器 ip:9000  訪問django程序
    3.經過uwsgi啓動一個python django項目 
        1.準備django項目,編寫urls、views.py ,修改settings.py 
        2.經過命令啓動 django ,
            要點就是,必須先進入django的第一層目錄,而後經過相對路徑找到wsgi.py 
            cd mysite 
            uwsgi --http :9999 --module  mysite.wsgi 
uwsgi

在項目中 安裝uwsgi:pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple uwsgi
安裝成功後,在項目路徑下/opt/s21crm - all執行 uwsgi --http :8000 --module s21crm.wsgi
必須先進入django的第一層目錄
在瀏覽器中訪問發現靜態文件丟失,無css樣式,因此用到nginx
7.2安裝nginx,
nginx 
    1.由於nginx處理併發的良好性、
    2.nginx對靜態文件處理的良好性
        備註:由於uwsgi啓動django項目,不會讀取一個靜態文件的配置參數
    3.nginx負載均衡的一個做用

    
安裝配置nginx


    1.yum install nginx -y  
      yum install epel-*  -y 

    #須要提早備好epel源
    #檢測nginx是否安裝成功 
        rpm -qi nginx
    
    
    2.啓動nginx web服務器
    /usr/sbin/nginx  啓動nginx web服務

    3.配置nginx.conf配置反向代理uwsgi,以及靜態資源處理
    若是找不到nginx.conf ,經過命令查找
        find / -name nginx.conf   結果: /etc/nginx/nginx.conf

    
    
        location / {
             include /etc/nginx/uwsgi_params;
             uwsgi_pass 0.0.0.0:8000;
        }
        #靜態資源入口
            location /static {
                  alias /opt/static/;
                }
            }
            
    4.修改完,重啓nginx
    /usr/bin/nginx -s  reload 
    

配置項目的靜態文件資源,經過nginx加載
    1.修改django的setings.py文件

    s21crm/settings.py 
    加入如下信息
        #指定靜態文件存放路徑
            STATIC_ROOT='/opt/static'
        #指定靜態資源,請求入口
            STATIC_URL = '/static/'
            STATICFILES_DIRS=[
                os.path.join(BASE_DIR,"static"),
            ]

    2.經過命令收集靜態文件資源
        python3 manage.py collectstatic 收集全部你使用的靜態文件保存到STATIC_ROOT!
        
    3.此時static_root下有了全部項目的靜態資源
nginx

檢測是否安裝成功 rpm -qi nginx ;
啓動nginx: /usr/sbin/nginx
啓動報錯???nginx: [emerg] "location" directive is not allowed here in /etc/nginx/nginx.conf:58

編輯配置文件:/etc/nginx/nginx.conf
建立、編輯uwsgi.ini,注意修改工做目錄、module和home

uwsgi --ini uwsgi.ini 啓動配置文件,此時項目就能夠訪問啦!!--??提示頁面找不到?settings中靜態文件的修改建立static目錄 mkdir static 全部靜態文件放入opt/static下執行:python3 manage.py collectstatic 選擇-- yes可經過ls /opt/static/rbac/查看是否拷貝成功,存在靜態文件,,再次訪問界面存在樣式!nginx+uwsgi完成項目發佈!
相關文章
相關標籤/搜索