首先按上一章節所講述的,將服務器環境安裝好之後,接下來就是按步驟將網站部署到服務器上了。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/