首先按上一章節所講述的,將服務器環境安裝好以后,接下來就是按步驟將網站部署到服務器上了。
我們的站點是前后端分離的,所以需要部署兩個站點。首先來發布前端站點。
部署前端站點
輸入命令進入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 = 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/