我的第一個python web開發架構(20)——產品發布(部署到伺服器),python產品發布

來源:互聯網
上載者:User

我的第一個python web開發架構(20)——產品發布(部署到伺服器),python產品發布

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

  我們的網站是前後端分離的,所以需要部署兩個網站。首先來發布前端網站。

 

  部署前端網站

  輸入命令進入svn管理檔案夾:cd /data/svn/

  建立svn:svnadmin create simple_html

  

  進入svn帳號與密碼管理檔案夾:cd /data/svn/simple_html/conf/

  建立svn帳號:vi authz   (在檔案裡面添加下面代碼)

[simple_html:/]py = rw

  編輯svn帳號密碼:vi passwd  (在檔案裡面添加下面代碼)

py = 123456

  修改svn配置資訊:vi svnserve.conf  (將設定檔裡的內容對著下面參數進行修改)

anon-access = noneauth-access = writepassword-db = passwdauthz-db = authz

  進入勾子檔案夾:cd /data/svn/simple_html/hooks/

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

#!/bin/sh# POST-COMMIT HOOKexport 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 HOOKexport 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.inidirectory=/data/www/simple_interfacestdout_logfile=/data/logs/supervisord/simple_interface.logsocket-timeout=3autostart=trueautorestart=trueredirect_stderr=truestopsignal=QUIT

  添加uwsgi配置:vi simple_interface.ini (如果是正式項目上線,最好使用python35_plugin.so來運行xml配置,穩定性和效能會好很多,前期寫伺服器環境安裝配置時沒有經驗,所以沒有配置成功只能使用ini了)

[uwsgi]socket = 127.0.0.1:10080chdir = /data/www/simple_interface/wsgi-file = /data/www/simple_interface/main.pylimit-as = 512reload-on-as = 256reload-on-rss = 192processes = 1max-requests = 1000pythonpath = /data/www/simple_interface/daemonize = /data/logs/uwsgi/simple_interface_uwsgi.loglog-maxsize = 10000000disable-logging = truemaster = truevacuum = trueno-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 會發現內容還是空的,這是因為我們還沒有對前端進行反向 Proxy處理,還需要做下面最後一步操作

  編輯前端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:添加了反向 Proxy,當訪問以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    作者部落格:http://www.cnblogs.com/EmptyFS/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.