天天看點

django+nginx+uwsgi部署web站點

環境:

django:1.8.16  

python:2.7.13

pip:2.7

uwsgi:2.0.15

project路徑: /opt/cmdb/

Uwsgi的安裝配置

1、安裝python2.7 (省略安裝過程)

2、安裝pip2.7 (省略安裝過程)

3、安裝uwsgi(注意:要用pip2.7安裝)

1

2

3

<code>pip2.7 </code><code>install</code> <code>uwsgi</code>

<code>pip2.7 </code><code>install</code> <code>requests</code>

<code>ln</code> <code>-s </code><code>/usr/local/python2</code><code>.7</code><code>/bin/uwsgi</code> <code>/usr/bin/uwsgi</code>

4、配置uwsgi.ini 

路徑: /opt/cmdb/uwsgi.ini

檔案内容:

[root@localhost cmdb]# cat uwsgi.ini 

4

5

6

7

8

9

10

11

<code>[uwsgi]</code>

<code>socket = 127.0.0.1:8088</code>

<code>chdir=</code><code>/opt/cmdb</code>

<code>wsgi-</code><code>file</code> <code>= cmdb</code><code>/wsgi</code><code>.py</code>

<code>pidfile = </code><code>/var/run/uwsgi</code><code>.pid</code>

<code>daemonize = </code><code>/var/log/uwsgi</code><code>.log</code>

<code>perl-auto-reload = 2</code>

<code>#buffer-size = 102400</code>

<code>master = </code><code>true</code>

<code>processes = 2</code>

<code>threads = 4</code>

Uwsgi:常用參數和選項

chdir 項目目錄

home virtualenv目錄(如沒有運作virtualenv虛拟環境,則無需設定)

socket 套接字檔案或TCP套接字,例如:site1.uwsgi.sock 或 127.0.0.1:8000

uid 使用者id

gid 使用者組id

processes 工作程序數

harakiri 程序超過該時間未響應就重新開機該程序(預設機關為秒)

module 要啟動的wsgi子產品入口,如:mysite.wsgi:application

ini 指定ini配置檔案

xml 指定xml配置檔案(與ini類似)

file 指定要運作的wsgi程式檔案,如:test.py

emperor Emperor模式

so-keepalive 開啟TCP KEEPALIVE(unix套接字方式下無效)

uwsgi服務init腳本 /etc/init.d/cmdb

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

<code>#!/bin/bash</code>

<code># Comments to support chkconfig on Linux</code>

<code># chkconfig: 35 85 15</code>

<code># description: uwsgi is an HTTP(S) server, HTTP(S) reverse</code>

<code>#</code>

<code># author     [email protected]</code>

<code># chmod +x /etc/rc.d/init.d/uwsgi</code>

<code># chkconfig --add uwsgi</code>

<code># chkconfig --level 2345 uwsgi on</code>

<code># Change History:</code>

<code># date        author          note</code>

<code># 2016/11/16  [email protected]  create, refer to nginx, and http://uwsgi-docs.readthedocs.io/en/latest/Management.html</code>

<code> </code> 

<code>set</code> <code>-e</code>

<code>PATH=</code><code>/usr/local/sbin</code><code>:</code><code>/usr/local/bin</code><code>:</code><code>/sbin</code><code>:</code><code>/bin</code><code>:</code><code>/usr/sbin</code><code>:</code><code>/usr/bin</code>

<code>DESC=</code><code>"uwsgi daemon"</code>

<code>NAME=uwsgi            </code>

<code>DAEMON=</code><code>/usr/bin/</code><code>$NAME  </code><code>##指向uwsgi的指令路徑</code>

<code>SCRIPTNAME=</code><code>/etc/init</code><code>.d/$NAME  </code><code>##啟動腳本路徑</code>

<code>CONFFILE=</code><code>/opt/cmdb/uwsgi</code><code>.ini  </code><code>##uwsgi.ini配置檔案路徑</code>

<code>PIDFILE=</code><code>/var/run/uwsgi</code><code>.pid   </code><code>##pid檔案路徑</code>

<code>test</code> <code>-x $DAEMON || </code><code>exit</code> <code>0</code>

<code>d_start(){</code>

<code>    </code><code>$DAEMON --ini $CONFFILE || </code><code>echo</code> <code>-n </code><code>" already running"</code>

<code>}</code>

<code>d_stop() {</code>

<code>    </code><code>$DAEMON --stop $PIDFILE || </code><code>echo</code> <code>-n </code><code>" not running"</code>

<code>d_reload() {</code>

<code>    </code><code>$DAEMON --reload $PIDFILE || </code><code>echo</code> <code>-n </code><code>" counld not reload"</code>

<code>d_freload() {</code>

<code>    </code><code>$DAEMON --die-on-term $PIDFILE || </code><code>echo</code> <code>-n </code><code>" counld not force reload"</code>

<code>case</code> <code>"$1"</code> <code>in</code>

<code>start)</code>

<code>    </code><code>echo</code> <code>-n </code><code>"Starting $DESC:$NAME"</code>

<code>    </code><code>d_start</code>

<code>    </code><code>echo</code> <code>"."</code>

<code>;;</code>

<code>stop)</code>

<code>    </code><code>echo</code> <code>-n </code><code>"Stopping $DESC:$NAME"</code>

<code>    </code><code>d_stop</code>

<code>reload)</code>

<code>    </code><code>echo</code> <code>-n </code><code>"Reloading $DESC configuration..."</code>

<code>    </code><code>d_reload</code>

<code>    </code><code>echo</code> <code>"reloaded."</code>

<code>force_reload)</code>

<code>    </code><code>echo</code> <code>-n </code><code>"The official provision of the parameters, tested and found not to support..."</code>

<code>    </code><code># d_freload</code>

<code>    </code><code># echo "force reloaded."</code>

<code>restart)</code>

<code>    </code><code>echo</code> <code>-n </code><code>"Restarting $DESC: $NAME"</code>

<code>    </code><code>sleep</code> <code>2</code>

<code>*)</code>

<code>    </code><code>echo</code> <code>"Usage: $SCRIPTNAME {start|stop|restart|reload|force_reload}"</code> <code>&gt;&amp;2</code>

<code>    </code><code>exit</code> <code>3</code>

<code>esac</code>

<code>exit</code> <code>0</code>

Nginx安裝配置

1、安裝nginx

<code>yum -y </code><code>install</code> <code>nginx</code>

2、配置nginx

[root@localhost cmdb]# cat /etc/nginx/conf.d/cmdb.conf 

<code>upstream django {</code>

<code>    </code><code>server 127.0.0.1:8088;</code>

<code>    </code><code>}</code>

<code>server {</code>

<code>    </code><code>listen      80;</code>

<code>    </code><code>server_name 172.16.42.128;</code>

<code>    </code><code>charset     utf-8;</code>

<code>    </code><code>client_max_body_size 10M;</code>

<code>    </code><code>location </code><code>/static</code> <code>{</code>

<code>        </code><code>alias</code> <code>/opt/cmdb/static</code><code>;</code>

<code>    </code><code>location / {</code>

<code>        </code><code>uwsgi_send_timeout 300;</code>

<code>        </code><code>uwsgi_connect_timeout 300;</code>

<code>        </code><code>uwsgi_read_timeout 300;</code>

<code>        </code><code>uwsgi_pass  django;</code>

<code>        </code><code>include     </code><code>/etc/nginx/uwsgi_params</code><code>;</code>

啟動站點

1、啟動nginx服務

/etc/init.d/nginx start (删除預設的default.conf配置)

2、啟動uwsgi

/etc/init.d/cmdb start

排錯:

1、在實際操作中發現,啟動uwsgi服務後,通路站點出現“502 Bad Gateway”的報錯,後來發現是在settings中設定了不允許通路站點

<code>ALLOWED_HOSTS = []</code>

改成

<code>ALLOWED_HOSTS = [‘*’]</code>

後問題解決。

2、由于python2.6 不支援django1.8 ,是以需要在伺服器上安裝python2.7,并且在安裝之前,最好輸入以下指令,将可能用到的包都裝上,否則出現問題時,需要重新編譯安裝python2.7

<code>yum -y </code><code>install</code> <code>zlib-devel </code><code>bzip2</code><code>-devel openssl-devel </code>

<code>yum -y </code><code>install</code> <code>ncurses-devel sqlite-devel readline-devel </code>

<code>yum -y </code><code>install</code> <code>tk-devel gdbm-devel db4-devel libpcap-devel</code>

<code>yum -y </code><code>install</code> <code>xz-devel libffi-devel</code>

3、用pip安裝uwsgi時,一定要用pip2.7(用python2.7安裝的pip) 進行安裝

4、invalid request block size: 4161 (max 4096)...skip報錯解決

在通路站點時,出現了invalid request block size: 4161 (max 4096)...skip報錯解決的報錯。

解決辦法是在uwsgi.ini配置檔案中增加一條配置:buffer-size = 102400

将buffer-size設定大一些

本文轉自 曾哥最愛 51CTO部落格,原文連結:http://blog.51cto.com/zengestudy/1930346,如需轉載請自行聯系原作者

繼續閱讀