個人第一個python web開發框架(20)——產品發佈(部署到服務器)

  首先按上一章節所講述的,將服務器環境安裝好之後,接下來就是按步驟將網站部署到服務器上了。html

  咱們的站點是先後端分離的,因此須要部署兩個站點。首先來發布前端站點。前端

 

  部署前端站點python

  輸入命令進入svn管理文件夾:cd /data/svn/nginx

  建立svn:svnadmin create simple_htmlweb

  

  進入svn賬號與密碼管理文件夾:cd /data/svn/simple_html/conf/sql

  創建svn帳號:vi authz   (在文件裏面添加下面代碼)數據庫

[simple_html:/]
py = rw

  編輯svn帳號密碼:vi passwd  (在文件裏面添加下面代碼)後端

py = 123456

  修改svn配置信息:vi svnserve.conf  (將配置文件裏的內容對着下面參數進行修改)api

anon-access = none
auth-access = write
password-db = passwd
authz-db = authz

  進入勾子文件夾:cd /data/svn/simple_html/hooks/瀏覽器

  添加勾子文件:vi post-commit  (添加下面代碼,用於svn提交代碼成功後,自動將代碼發佈出去)

#!/bin/sh
# POST-COMMIT HOOK

export LANG=en_US.UTF-8
/usr/bin/svn up --username=py --password=123456 /data/www/simple_html

  給勾子賦可執行權限:chmod +x post-commit  (可有賦了可執行權限後,勾子纔會被執行)

  建立前端網站發佈文件夾:mkdir /data/www/simple_html

  檢出svn到新建立的網站發佈文件夾:svn checkout svn://localhost/simple_html /data/www/simple_html/  (輸入前面建立的帳號:py和密碼123456,提示Store password unencrypted (yes/no) 時輸入y就能夠了。若是運行後出現svn: E000013 xxx  Permission denied錯誤,有多是你剛剛修改的svn配置沒有生效,重啓一下svn就能夠了)

  在本地電腦安裝個svn客戶端(我用的是TortoiseSVN-1.9.4.27285-x64-svn-1.9.4.msi),將剛建立的svn檢出到本地

  

  將前端html代碼複製到剛檢出的文件夾裏,提交到服務器端

  

  檢查服務器網站文件夾,看看提交的svn是否自動發佈了

  

  配置nginx,讓瀏覽器能夠正常訪問

  進入nginx配置文件夾:cd /usr/local/nginx/conf/vhost/ (若是你按前面章節操做,這裏已建立了test.conf配置,否則使用80端口會發生衝突,能夠將它刪除:rm -rf test.conf

  建立simple_html.conf配置文件:vi simple_html.conf (添加下面代碼)

server {
    listen      80;
    charset     utf-8;
    root        /data/www/simple_html;
    server_name am.zh192.168.0.128;

        location /favicon.ico {  
                log_not_found off;
        access_log off;
        } 

        location / {
                index  Index.html index.html;
        }

    access_log  /data/logs/nginx/simple_html.log  main;
}

  重啓nginx,讓配置生效:/usr/local/nginx/sbin/nginx -s reload

  在瀏覽器中輸入:http://192.168.0.128/ 就能夠訪問到前端html頁面了,因爲接口尚未部署,因此這裏訪問後中間那一塊是空的,按F12也能夠發現接口沒法訪問,接下來咱們來部署後端接口服務。

  

 

  部署後端接口站點

  建立svn的相關步驟與前面的同樣,咱們建立一個名叫simple_interface的svn,具體你們本身參考前面內容

  在建立勾子時,因爲接口咱們要用到supervisord+uwsgi,因此在勾子裏須要添加劇啓supervisord服務的命令,讓發佈的代碼從新生效

  vi post-commit

#!/bin/sh
# POST-COMMIT HOOK

export LANG=en_US.UTF-8
/usr/bin/svn up --username=py --password=123456 /data/www/simple_interface
/usr/bin/supervisorctl restart simple_interface

  記得給post-commit賦可執行權限哦

  當你在服務器端檢出simple_interface到/data/www/simple_interface後,接口svn就建立成功了,接下來配置supervisord

  輸入命令:vi /etc/supervisord.conf (以前建立的test配置這裏也能夠直接刪除)

  在supervisord.conf後面添加下面配置

[program:simple_interface]
command=/usr/local/bin/uwsgi /etc/uwsgi/simple_interface.ini
directory=/data/www/simple_interface
stdout_logfile=/data/logs/supervisord/simple_interface.log
socket-timeout=3
autostart=true
autorestart=true
redirect_stderr=true
stopsignal=QUIT

  添加uwsgi配置:vi simple_interface.ini (若是是正式項目上線,最好使用python35_plugin.so來運行xml配置,穩定性和性能會好不少,前期寫服務器環境安裝配置時沒有經驗,因此沒有配置成功只能使用ini了)

[uwsgi]
socket = 127.0.0.1:10080
chdir = /data/www/simple_interface/
wsgi-file = /data/www/simple_interface/main.py
limit-as = 512
reload-on-as = 256
reload-on-rss = 192
processes = 1
max-requests = 1000
pythonpath = /data/www/simple_interface/
daemonize = /data/logs/uwsgi/simple_interface_uwsgi.log
log-maxsize = 10000000
disable-logging = true
master = true
vacuum = true
no-orphans = true

  supervisord載入添增配置(若是對supervisord.conf修改也須要使用這個命令):/usr/bin/supervisorctl reread

  更新到進程管理中:/usr/bin/supervisorctl update (這個命令會啓動有更改的服務,若是不生效時,也可使用/usr/bin/supervisorctl reload重啓整個服務,若是更改的只是uwsgi配置文件,可使用/usr/bin/supervisorctl restart xxx來啓動指定項目)

  輸入命令:ps -ef | grep uwsgi 就能夠查看到剛剛添加的simple_interface正在運行了

  配置後端接口nginx

  建立simple_interface.conf配置文件:vi /usr/local/nginx/conf/vhost/simple_interface.conf (添加下面代碼)

server {
    listen      20080;
    charset     utf-8;
    root        /data/www/simple_interface;
    server_name 192.168.0.128;

        location /favicon.ico {  
                log_not_found off;
                access_log off;
        } 

        location / {
        include uwsgi_params;
        uwsgi_param UWSGI_PYHOME /data/www/simple_interface;
        uwsgi_param UWSGI_CHDIR /data/www/simple_interface;
        uwsgi_param UWSGI_SCRIPT main; # 對應main.py
        uwsgi_pass  127.0.0.1:10080;
        proxy_connect_timeout      2; #nginx跟後端服務器鏈接超時時間(代理鏈接超時)
        proxy_send_timeout         4; #後端服務器數據回傳時間(代理髮送超時)
        proxy_read_timeout         4; #鏈接成功後,後端服務器響應時間(代理接收超時)
    }

    access_log  /data/logs/nginx/simple_interface.log  main;
}

  而後咱們按前面步驟將代碼提交到服務器端,並檢查 /data/www/simple_interface/ 目錄是否同步成功

  若是沒有問題,咱們訪問:http://192.168.0.128:20080/api/about/  這個獲取公司介紹的接口,會發現返回 {"msg": "\u67e5\u8be2\u5931\u8d25", "data": {}, "state": -1} (PS:msg內容是查詢失敗,它是Unicode編碼,須要使用站長工具進行轉換才能看到中文)

  這是由於咱們尚未將數據庫導入進來,咱們先將本地的數據庫導出,而後再導入到服務器裏

  打開CMD,而後輸入:cd C:\Program Files (x86)\PostgreSQL\9.6\bin\  (這是替換成你本身本地安裝的PostgreSQL數據庫的地址,我本地之前安裝的是9.4)

  而後輸入命令導出數據:pg_dump.exe -h localhost -U postgres -p 5432 simple_db > D:/simple_db.sql

  

  運行完命令後,會在D盤根目錄下看到simple_db.sql這個文件,將它上傳到服務器的/tmp/目錄中

  切換數據庫帳號:su postgres

  登陸postgresql:psql -U postgres

  建立數據庫simple_db:createdb simple_db

  退出postgresql:\q

  切回root帳號:su root (回車後輸入密碼)

  導入數據庫結構與數據:psql simple_db < /tmp/simple_db.sql

  這時咱們再次訪問:http://192.168.0.128:20080/api/about/ 就能夠看到返回的公司介紹內容了,而直接訪問 http://192.168.0.128 會發現內容仍是空的,這是由於咱們尚未對前端進行反向代理處理,還須要作下面最後一步操做

  編輯前端hmtl的nginx配置:vi /usr/local/nginx/conf/vhost/simple_html.conf   (替換成下面配置內容)

upstream myweb {
    ip_hash;
    server 127.0.0.1:20080 weight=1 max_fails=5 fail_timeout=5s; 
}

server {
    listen      80;
    charset     utf-8;
    root        /data/www/simple_html;
    server_name 192.168.0.128;

        location /favicon.ico {
                log_not_found off;
        access_log off;
        }

        location / {
                index  Index.html index.html;
        }

    location ~* ^/(index|api|upload)/ {
        proxy_pass                 http://myweb;
        proxy_cache_key            $host$uri$is_args$args;
        proxy_set_header           Host $host; 
        proxy_set_header           X-Real-IP $remote_addr; 
        proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout      3;
        proxy_send_timeout         5;
        proxy_read_timeout         5;
    }


    access_log  /data/logs/nginx/simple_html.log  main;
}

  PS:添加了反向代理,當訪問以index、api和upload爲開頭的url時,就會調用後端的接口地址了

  重啓nginx服務,讓剛剛的配置生效:/usr/local/nginx/sbin/nginx -s reload

 

  如今直接訪問 http://192.168.0.128就能夠看到首頁有數據了

 

  咱們輸入http://192.168.0.128/login.html 想要登陸後臺時,驗證碼會顯示出錯,顯示不了,這是由於咱們使用的字體在服務器上不存在,須要上傳驗證碼圖片和修改驗證碼工具包的地址

  將文章後面的包下載下去,static文件夾裏有arial.ttf字體,另外還須要修改common文件夾裏的verify_helper.py文件,將參數修改成:font_type='/data/www/simple_interface/static/arial.ttf'  這是更改成你上傳後字體文件所在的路徑就能夠了

   按以上步驟只要細心的話應該就能正常運行了。

 

  本文對應的源碼下載(完整代碼)

 

版權聲明:本文原創發表於 博客園,做者爲 AllEmpty 本文歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然視爲侵權。

python開發QQ羣:669058475(本羣已滿)、733466321(能夠加2羣)    做者博客:http://www.cnblogs.com/EmptyFS/

相關文章
相關標籤/搜索