當前位置:首頁 » 編程語言 » nginx部署python

nginx部署python

發布時間: 2023-03-12 15:10:53

⑴ Nginx+python 怎麼搞才好

python服務後台運行

由於python程序一般只有單進程,因此要用uwsgi啟動多個python進程來同時服務,寫代碼時就要求所有請求必須是無狀態的。

為了保證python程序能一直運行,一般用supervisor來拉起並運行在後台。

supervisor配置這樣寫:

[program:app]

command = uwsgi

--socket 0.0.0.0:6580

--chdir /app

--mole app.wsgi

--processes 8

--master

--uid root

--listen 100

stopsignal=QUIT

autostart=true

autorestart=true

user=root

stdout_logfile_maxbytes=10MB

stdout_logfile_backups=10

stdout_logfile=/app/log/debug.log

redirect_stderr=true

nginx轉發

要將請求轉到python,一般用nginx轉發請求到uwsgi,nginx配置文件中server段這樣寫:

server {

listen 8000;

location / {

uwsgi_pass 127.0.0.1:6580;

include uwsgi_params;

}

}

總結一下:一般的實踐是用uwsgi+supervisor啟動多個python程序的服務進程,再用nginx轉發uwsgi請求到python模塊。

⑵ 如何部署python web程序

Python Web 程序的部署方案
綜合而言, 高性能的Python web站點部署方式首推 nginx + uwsgi
apache + mod_wsgi 是簡單穩定但性能一般的方式
API伺服器 可以直接使用tornado或者gevent
mod_python
非常原始的cgi模式部署python已經沒有什麼好介紹了。對於不太追求性能的管理系統和網站來說,使用 Apache 部署是一個不錯的選擇。較早的時候,使用 mode_python 部署python的web應用十分流行,在Django 0.96 的時候官方文檔甚至推薦這種方式。
它將Python解釋器嵌入到Apache server,以提供一個訪問Apache server內部的介面。mod_python 在現在看來性能是不佳的,每一個http請求 mod_python 都會由一個進程初始化python解釋器、載入代碼、執行、然後銷毀進程。
mod_wsgi
如果非要用Apache來部署python應用,mod_wsgi是一個更好的選擇。WSGI 全稱是 Web Server Gateway Interface ,由 PEP-333 定義。 基本上所有的python web框架都實現了wsgi介面,用mod_wsgi 能部署任何實現了wsgi的框架。實際上,不需要任何框架也可以用mod_wsgi 部署python程序。使用mod_wsgi的daemon模式,python程序會常駐內存,不會有很大的初始化和銷毀進程方面的開銷,所以性能是好於mod_python的。綜合來說,使用Apache部署python web程序,推薦使用mod_wsgi的daemon模式。
Fastcgi
先說觀點:不建議用fastcgi的方式部署Python web。
前幾年由於lighttpd風頭正勁和豆瓣的成功案例,fastcgi是一種很流行的部署方式。fastcgi與具體語言無關,也與web伺服器無關。是一種通用的部署方式。fastcgi是對於cgi的增強,CGI程序運行在獨立的進程中,並對每個Web請求建立一個進程。面對大量請求,進程的大量建立和消亡使操作系統性能大大下降。
與為每個請求創建一個新的進程不同,FastCGI使用持續的進程來處理一連串的請求。這些進程由FastCGI伺服器管理,而不是web伺服器。 當進來一個請求時,web伺服器把環境變數和這個頁面請求通過一個socket比如FastCGI進程與web伺服器都位於本地)或者一個TCP connection(FastCGI進程在遠端的server farm)傳遞給FastCGI進程。
主流的web伺服器,Apache,lighttpd,nginx 都支持fastcgi,在幾年前,lighttpd的mod_fcgi模塊性能強勁,lighttpd+fastcgi十分流行。無論是python,ruby還是php,都有大量的站點使用這種方式部署。由於nginx的崛起,現在很少有人使用lighttpd了。
fastcgi 並不是專門為python設計,並不是所有的python框架天然的支持fastcgi,通常需要flup這樣的容器來配適。flup由python編寫,和專門的c實現的wsgi容器比起來性能顯得相當不堪。fastcgi的穩定性對於新興的wsgi容器來說也有差距。無論從哪個方面來看,部署python web程序,fastcgi 都已經是過去式。
uwsgi
前幾年nginx還未內置uwsgi模塊的時候,部署uwsgi還是一件挺麻煩的事情。隨著能夠在nginx中直接使用uwsgi模塊,uwsgi已經是最可靠,最方便的高性能python web程序的部署方式了。
在1U的四核XEON伺服器上,一個簡單的wsgi handler甚至能用AB壓到8000以上的qps,這已經是完爆tornado,接近gevent的性能了。 同時,uwsgi的穩定性極好。之前我們有個每天500w-1000w動態請求的站點使用uwsgi部署非常穩定,在一個渣HP 1U 伺服器上,基本不用管它。
上面提到的部署方式都是相對於web網站的方式,在移動互聯網的時代,我們需要的是高性能的API服務,上面這些都是過時的東西。
tornado
tornado 號稱高性能,如果拿他寫網站,其實一般般,只不過跟uwsgi加一些簡單框架差不多而已。它真正的作用,是用來寫API伺服器和長連接的伺服器。
由於tornado能夠直接處理http請求,很多人直接拿他來裸奔直接提供服務。這種方式是不可取的,單線程的tornado只能利用cpu的一個核心,並且一旦阻塞直接就廢了。通常情況下,由supervisor啟動多個tornado進程,通過nginx進行反向代理負載均衡。nginx 1.14 以後的版本反向代理支持長連接,配合tornado的comet效果很好。
tornado還有一些比較奇葩的用法,比如用來做wsgi容器之類的。
gevent
gevent是一個神器,能做的事情很多。在web方面,處理http請求,用起來其實跟tornado差不多,但是要簡陋很多,cookie之類的都沒有。用gevent寫的一些API服務,部署方式還是類似tornado,用supervisor管理多個守護進程,通過nginx做負載均衡。 同樣的它的奇葩用法也和tornado一樣,可以當wsgi容器用。

⑶ 如何用Nginx部署Django

如果你在windows上開發的django項目。部署的話,需要分三步。
第一步:在linux下下載python用的依賴包,搭建python環境。將windows下的項目復制到linux下,使用django自帶服務進行啟動。
第二步:下載uwsgi模塊並且編寫配置文件來替代django自帶的服務模塊。
第三步:下載nginx包,編譯安裝。然後創建配置文件,配置nginx啟動django項目的信息。然後訪問即可。

⑷ 如何快速有效的安裝Python+Nginx+Tornado+Mysql

下面我將介紹在UNIX(LINUX、MAC下的配置方法其本一致)下如何快速搭建其運行環境:

1、安裝Python
wget http //www python org/ftp/python/2.7.5/Python-2.7.5.tgz tar xvfz Python-2.7.5.tgzcd Python-2.7.5 ./configure
make
sudo make install

2、安裝Python的包管理工具setuptools、pip和打包工具distribute
wget http //peak telecommunity com/dist/ez_setup.py python ez_setup.py
wget http //python-distribute org/distribute_setup.py python distribute_setup.py
wget https //github com/pypa/pip/raw/master/contrib/get-pip.py python get-pip.py

3、安裝Readline
sudo pip install readline

4、安裝Mysql
#安裝cmake wget http //www cmake org/files/v2.8/cmake-2.8.8.tar.gz
tar xvfz cmake-2.8.8.tar.gz
cd cmake-2.8.8
./configure
make
sudo make install #安裝mysql wget http //cdn mysql com/Downloads/MySQL-5.5/mysql-5.5.29.tar.gz
tar xvfz mysql-5.5.29.tar.gz
cd mysql-5.5.29
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/localmysql/data/ -DMYSQL_UNIX_ADDR=/usr/localmysql/data/mysqld.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DSYSCONFDIR=/etc -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_unicode_ci -DWITH_DEBUG=0
make
sudo make install #下載安裝mysql-python wget http://sourceforge.net/projects/mysql-python/files/mysql-python/1.2.3/MySQL-python-1.2.3.tar.gz
tar xvfz MySQL-python-1.2.3.tar.gz
cd MySQL-python-1.2.3 #修改site.py中mysql_config的路徑(為mysql安裝路徑下的/bin/mysql_config), site.py
mysql_config = /usr/local/mysql/bin/mysql_config #更改完進行編譯和安裝 python setup.py build
sudo python setup.py install #將mysql安裝路徑下的lib加入到環境變數LD_LIBRARY_PATH中 export LD_LIBRARY_PATH=/usr/local/mysql/lib/:$LD_LIBRARY_PATH

5、安裝一些Python的常用模塊和tornado
pip install tornado
pip install torndb
pip install requests
pip install markdown

6、配置Mysql
groupadd mysql useradd -g mysql mysql chown mysql.mysql -R /service/mysql/ /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf

7、安裝Nginx
wget http://nginx.org/download/nginx-0.8.33.tar.gz tar zxvf nginx-0.8.33.tar.gz
cd nginx-0.8.33 ./configure
make
make install

8、配置nginx,編輯/usr/local/nginx/conf/nginx.conf文件
user nobody;
worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;

upstream snail {
server 127.0.0.1:8888;
}

sendfile on; #tcp_nopush on; keepalive_timeout 65;
proxy_read_timeout 200;
tcp_nopush on;
tcp_nodelay on;
gzip on;
gzip_min_length 1000;
gzip_proxied any;

server {
listen 80;
server_name localhost; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

location / {
proxy_pass_header Server;
proxy_set_header Host $http_host; # proxy_redirect false; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_pass http://snail; }

}

}

9、創建一個項目
vi demo.py
import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world")

application = tornado.web.Application([
(r"/", MainHandler),
]) if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()

10、運行這個項目
#啟動項目 nohup python demo.py & #重啟Nginx /usr/local/nginx/sbin/nginx -s reload

在瀏覽器中輸入http://127.0.0.1 看到頁面輸出hello word!
轉載,僅供參考,祝你愉快,滿意請採納。

⑸ Nginx+Python 怎麼搞才好

介紹NGINX和Python如何配合使用
Python以易用,有趣而出名,它讓軟體開發變得簡單,據說運行性能也高於其他腳本語言(PHP最新版本PHP 7的性能好像可以與Python一較高下)
每一個人都希望自己的網站或應用可以運行得更快。但是每一個網站在大流量和流量激增時都容易遇到性能問題,甚至當機,業務繁忙時,這種情況會更加糟糕。其實無論流量是穩定增長,還是陡峭增長,所有網站都面臨性能和當機的困擾。

NGINX和NGINX插件的出現就是為了解決這個問題。他們通過三種不同的方式來改善網站性能:

1、web服務 – 最初開發NGINX是為了解決 C10K 問題 – 可以輕松支撐10,000或更多的並發連接。使用NGINX為你的Python應用提供web服務,可以讓你的網站運行更快,即便在小流量的情況下也有效果。當你的用戶成千上萬時,確定無疑,它可以提供更高的性能,更少的崩潰,以及更少的當機時間。你也可以使用NGINX提供靜態文件緩存或者微緩存服務,一個獨立的NGINX反向代理也是很好的選擇(見下一段)。

2、反向代理– 你可以在應用服務的前端用NGINX做反向代理。NGINX接收Web請求並分發到你的應用服務。這個「怪招」可以讓你的網站運行得更快,減少當機,消費更少的服務資源,而且可以提高安全性。你也可以在反向代理伺服器上緩存靜態資源(非常高效),添加靜態內容的微緩存,以減少應用自身的負載,等等。

3、為多個應用服務提供動態均衡 – 通過布署反向代理服務。通過多應用服務並行運行和NGINX或者NGINX插件來做流量負載均衡。通過這種布署,根據流量需要,增長穩定性和運行時間需要,你可以很輕松地在線擴展網站性能。如果你需要讓給定用戶的會話在同一個服務上,你只需要配置負載均衡以支持會話持久化。

不管是為你的Python應用提供網站服務,還是做反向代理服務,還是做負載均衡,或者三者都用,NGINX和NGINX插件都會給你帶來優勢。

這是本系列(由兩部分組成)中的第一篇文章,將會介紹五個提升Python應用性能的技巧,包括如何使用NGINX或NGINX插件提供web服務,如何實現靜態文件的緩存,如何為動態內容做微緩存。在第二部分,我們將介紹如果用NGINX或NGINX插件提供反向代理服務,以及如何為多個應用服務提供負載均衡。

技巧 1– 定位Python性能瓶頸
有兩種截然不同的情況會讓你的Python應用遇到性能問題– 第一,每天有海量用戶;第二,高負載。大部分網站長都不需要擔心性能問題,因為他們的負載很小,根據我們的拙見,他們應該努力降低響應時間。將響應時間控制在毫秒級是一個非常困難且不被關注的工作。但可以讓我們的用戶體驗更好,業績更優秀。

但是這篇博文和剩下的第二部分,將關注每個人都確實關注的場景:當網站繁忙時可能會出現的性能問題,如性能大幅下降和當機。還有黑客模擬大量用戶攻擊造成的流量激增,同時提高網站性能也是處理攻擊的重要步驟。

像Apache HTTP Server這樣的系統會為每個用戶分配一定數量的內存,隨著用戶的不斷增加,物理內存不堪重負。伺服器開始使用磁碟的交換分區,性能直線下降,性能問題和當機接踵而至。這篇博文中所介紹的遷移到NGINX,有助於解決這一問題。

Python特別容易出現內存相關的性能問題,因為與其他腳本語言相比,Python通常是使用更多的內存來執行任務(所以執行速度快)。所以在相同條件下,與用其他語言寫的應用相比,你的Python應用更容易在少量用戶的情況下而「絆倒」。

優化你的應用對解決問題會有所幫助,但要解決流量相關的性能問題,這通常不是最好最快的方式。這篇博文及剩下的第二部分,將介紹一種最好並且最快的方式。在實施這些措施之後,再採取一切方法優化你的應用,或者使用微服務架構重寫。

技巧 2 – 選擇單服務或者微服務布署
小網站在單個伺服器上就可以運行得很好。大的網站需要多個伺服器。但如果你處於中間地帶–或者你的網站從一個小網站變成一個大網站– 你可以做一些有趣的選擇。

如果你使用單機布署,大流量和瀏覽激增會給你帶來很大的風險。你的擴展手段非常有限,無外乎優化你的應用,把web服務切換到NGINX,使用一個更大更快的伺服器,或者使用內容分發網路(CDN)。所有這些可選項的實施都耗時耗錢,而且在實施過程中還有引入bug的風險。

另外一個很顯然的風險是單機布署存在單點故障問題 – 很多問題可以導致你的站點掛掉,而且沒有快速簡單的解決方案。

使用NGINX做為應用的代理服務

如果你把服務切換成NGINX並且使用單機布署,你可以自由地選擇使用開源的NGINX或者NGINX插件。NGINX包括企業級支持和一些擴展功能。像實時活動監測這樣的擴展功能是支持單機布署的。如果做為反向代理,採用分布式布署,你可以使用其他NGINX插件,如負載均衡和會話持久化。

有很多事情都要考慮周詳,除非你確定你的網站在未來很長時間內都是一個小網站,不需要關心當機問題,否則,你要明白,單機布署存在很多風險。分布式布署比較易於擴展 – 單點故障可以通過工程解決,性能可以按需調整,可以快速擴充伺服器能力。

技巧 3 – 使用NGINX替換你的Web服務
在Web時代的早期,Apache就是web服務的同義詞。但NGINX自2000年出現以來,迅速流行開來;現在已經是排名第一的web服務,被1,000, 10,000多個網站和世界上最繁忙的100,000多個網站使用。

NGINX最初是為了解決C10K問題而開發 – 在給定內存預算下支持10,000+並發。其他web服務需要為每個連接分配內存塊,所以他們會耗盡物理內存,當數以千記的用戶在同一時間訪問一個網站,它會變慢甚至崩潰。NGINX處理器可以單獨處理一個請求,也可以優雅地擴展,同時處理多個用戶。(這可以很好地解決額外問題,後面會詳述。)

一個高層NGINX架構圖如下所示。

NGINX 架構, 選自開源應用架構第二卷

在上圖,一個Python應用服務被布署在後端的應用服務塊中,如圖所示,它通過FastCGI被訪問。NGINX不「知道」怎麼運行Python,所以它需要一個網關連結需要的環境。FastCGI是一個被PHP,Pyhton和其他語言廣泛使用的介面。

但是,連結Python和NGINX的流行方案是網路服務網關介面(WSGI)。WSGI工作在多線程和多進程環境下,所以他兼容本文所提到的所有布署選項。

如果你將web服務遷移到NGINX,這里有一些有用的軟體:

Configuring gunicorn – 「Green Unicorn」是一個流行的WSGI服務,配合NGINX使用。
Configuring uWSGI – 另一個流行的WSGI服務,配合NGINX使用. uWSGI包含NGINX指令支持。
Using uWSGI, NGINX, and Django – 一個流行的Python web框架。

下面的代碼片斷將向你展示如何配置NGINX和uWSGI – 這個案例中的工程使用Python框架Django。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

http
{
...
upstream
django {
server
127.0.0.1:29000;
}

server
{
listen
80;
server_name
myapp.example.com;

root
/var/www/myapp/html;

location
/ {
index
index.html;
}

location
/static/
{
alias
/var/django/projects/myapp/static/;
}

location
/main {
include
/etc/nginx/uwsgi_params;
uwsgi_pass
django;

uwsgi_param
Host $host;
uwsgi_param
X-Real-IP $remote_addr;
uwsgi_param
X-Forwarded-For $proxy_add_x_forwarded_for;
uwsgi_param
X-Forwarded-Proto $http_x_forwarded_proto;
}
}
}

技巧 4 – 實現靜態文件緩存
緩存靜態內容包括:為不經常變更的文件保存副本 – 不經常是指數小時或者永遠 – 副本保存在其他位置而不是應用服務中。典型的靜態內容是網頁中經常用到的JPEG圖片。

緩存靜態文件是提升應用性能的常用手段,經常被用到:

1、用戶瀏覽器
2、互聯網提供商 – 從公司網路到互聯網提供商(ISP)
3、web服務, 也就是本文所講的

在web服務端實現靜態文件緩存有兩個好處:
1、為用戶提供快速服務 – NGINX 專門為靜態文件緩存做過優化,對靜態內容請求的處理比應用服務要快。
2、減少應用服務負載– 應用服務不需要處理已經緩存的靜態文件,已經由web服務接管。

緩存靜態文件在單伺服器上也可以很好的實現,但底層硬體資源仍然是由web服務和應用服務所共享。如果web服務要處理頻率的靜態文件訪問 – 甚至是海量 – 應用服務可以使用的硬體資源就會變少,一些功能可能就會變慢。

如果要支持瀏覽器緩存,需要正確設置靜態文件的頭部信息。如HTTPCache Control(特別是它的max age設置),Expires,和Entity標記。如果想深入了解,參見NGINX Plus的管理員指南:使用NGINX為uWSGI和Django提供應用網關

下面的NGINX配置代碼用來緩存靜態文件,包括JPEG文件,GIF文件,PNG文件,MP4文件,Powerpoint文件,和一些其他文件,請把www.example.com替換成你自己的網址。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

server
{
#
substitute your web server's URL for

"www.example.com"
server_name
www.example.com;
root
/var/www/example.com/htdocs;
index
index.php;
access_log
/var/log/nginx/example.com.access.log;
error_log
/var/log/nginx/example.com.error.log;

location
/ {
try_files
$uri $uri/ /index.php?$args;
}

location
~ \.php$ {
try_files
$uri =404;
include
fastcgi_params;
#
substitute the socket, or address and port, of your Python server
fastcgi_pass
unix:/var/run/php5-fpm.sock;
#fastcgi_pass
127.0.0.1:9000;
}

location
~* .(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg
|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid
|midi|wav|bmp|rtf)$
{
expires
max;
log_not_found
off;
access_log
off;
}
}

技巧 5 – 實現微服務
微緩存可以很明顯的大幅提升Python, PHP和一些其他語言開發的應用服務性能,根據是否適合緩存,可以把網頁分成三類:

靜態文件 – 這類文件適合緩存,見技巧4所述。
動態,非個性化頁面 – 因為它們需要刷新,這些文件通常不適合做緩存。例如未登錄前的電商用戶所看到的頁面(見下一點) – 可用商品和推薦相似商品經常要發生改變,所以必須生成新頁面。但是,如果有另外一個用戶,在10毫秒之後發送同樣請求,將前一用戶看到的網頁緩存並發送給後一用戶就變得合情合理。
動態,個性化頁面 –這些不適合緩存,因為它們是針對具體用戶的,同一個用戶不希望兩次看到同一個個性化頁面。例如一個電商用戶登錄後的頁面不應該展示給另外一個用戶。

靜態文件和非個化性動態內容可以緩存

微緩存適用於上面提到的第二類頁面–動態,非個性化頁面。「微」是指很短的時間。如果你的網站在一秒內要多次生成同一個頁面,如果你把這個頁面只緩存一秒,並不影響該頁面的刷新。但這個短暫的緩存可以極大的降低應用服務的負載,特別是流量較大時。將原來在一個緩存區間內,同一內容生成10,或者20,甚至100次,調整為只生成一次並緩存,為其他用戶提供緩存內容。

這個效果是很神奇的。一個服務如果一秒鍾要處理大量請求會變得很慢,但如果只處理一個請求,就會變得很快。(包括任何個性化頁面)。我們自己的Owen Garrett有一篇博客對微服務的優勢做了詳情介紹,裡面還有配置代碼。主要要修改的地方是把代理緩存過期時間設為一秒,只需要幾行配置代碼就可以搞定。

1
2
3
4
5
6

proxy_cache_path
/tmp/cache keys_zone=cache:10m levels=1:2

inactive=600s max_size=100m;
server
{
proxy_cache
cache;
proxy_cache_valid
200

1s;
...
}

更多配置樣例,參見Tyler Hicks Wright關於Python和uWSGI如何使用NGINX的博客。

總結
在第一部分,我們回顧了一下在單機環境下提高Python應用性能的解決方案,還有緩存的使用,在單機情況下緩存可以應用於反向代理伺服器或者獨立緩存服務(緩存比獨立服務性能更好)。在下一部分,我們將會介紹分布式環境下的性能提升方案。

如果你想在應用中使用更多的NGINX Plus特性,如實時事件監測,在線修改配置,你可以馬上開通30天免費試用,或者聯系我們,可以獲得一個真實例子。

⑹ 在Windows系統上搭建Nginx+Python+MySQL環境的教程

1 安裝nginx

下載windows上的nginx最新版本,/en/download.html。

解壓後即可。

運行nginx.exe後本地打開localhost,將會看到歡迎頁面,這證明nginx在本地運行良好,如果沒有出現歡迎頁面,請檢查是否有進程佔用了80埠。

2 安裝flup

下載對應版本的flup,這里下載flup3.x版本,適合python3.2,下載地址:https:///chxanders/flup3

解壓(比如解壓到D:flup)

安裝(進入到python的安裝路徑,然後執行下面的命令

1 python setup.py install )

!注意,如果提示缺少setuptools,安裝distribute-0.6.49.tar.gz,安裝方法和flup安裝一樣,下載地址:https:///pypi/distribute/0.6.49

3 安裝Mysql

在這里我使用的是5.1版本。在win系統上雙擊安裝文件,下一步下一步完成。下載地址:/downloads/

4 安裝資料庫驅動

下載用於win上對應py版本的的python-mysql驅動,雙擊安裝即可。下面的下載地址是3.2:

/wangqc/distribute-0.6.49.zip

5 配置伺服器

首先需要修改nginx的配置文件nginx.conf。

找到:

1 2 3 4 location / { root html; index index.html index.htm; } 在裡面加上:

1 2 3 4 5 6 7 8 9 10 11 12 # host and port to fastcgi server fastcgi_pass 127.0.0.1:55880; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param QUERY_STRING $query_string; fastcgi_param SERVER_NAME $server_name; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_pass_header Authorization; fastcgi_intercept_errors off; 然後測試該配置文件是否正確,在cmd中切換到nginx安裝目錄里,輸入

1 nginx.exe -t 即可開始對配置文件測試,如果提示成功,說明配置正確,

這是可以結束掉任務管理器中所有的nginx.exe進程,重新運行ngin.exe重啟nginx服務。

6 運行Server.py

在cmd下切換到項目目錄,輸入命令

1 python Server.py runfcgi method=threaded host=127.0.0.1 port=55880 注意,

這條命令只能用來啟動項目,如果出現錯誤並不會給出提示。下面是正確的情況.

用瀏覽器打開127.0.0.1:8080 測試一下,項目是不是已經跑起來了(第一次運行等待的時間稍長,請耐心等待)。

7 一些注意事項

(1)、首先應該改的地方,這個大家應該都知道:

1 DEBUG = TEMPLATE_DEBUG = False#將debug設置為False (2)、改一下ALLOWED_HOSTS,我死死的就將這個給忘了,我的`配置:

1 2 3 4 if DEBUG:#根據DEBUG來確定 ALLOWED_HOSTS = [""] else: ALLOWED_HOSTS = ["localhost","127.0.0.1"] (3)、重頭戲來了,配置nginx:

這里相關的代碼網上很多,但是幾乎都沒有說明一件事:

配置location ~ ^/static/ 的位置,一定要在location ~ ^/的前面,而且不能單純的使用 location /static/ 或者location /static ,不然,static文件夾中的靜態文件都不能載入!!!

ps:提起這個,慢慢的淚啊,就錯在這里了。

嫌麻煩可以寫成批處理,運行的時候雙擊一下就好了。

⑺ 在阿里雲伺服器使用nginx+uwsgi+venv部署Django項目

1.首先先把項目上傳到阿里雲伺服器
2.需要安裝python3.0以上版本(centeros7自帶2.75版本)
3.在此不介紹如何安裝python高版本和虛擬環境

4.在項目根目錄創建虛擬環境,就像你在Pycharm里一樣
然後啟動虛擬環境

5.在虛擬環境下安裝你項目所需要的依賴
pip3 install requirements.txt
6.編寫nginx配置文件和uwsgi配置文件
配置如下
nginx.conf

注意編寫完nginx配置文件需要檢查語法
nginx -t 注意別忘記加;或者文章尾末多空格都會導致出錯
nginx -s reload 重啟nginx
uwsgi.ini配置如下

7.都配置好之後
啟動虛擬環境
在venv里 uwsgi uwsgi.ini 即可啟動你的項目

⑻ CentOS+nginx+uwsgi+Python 多站點環境搭建

轉自 Xiongpq

http://www.cnblogs.com/xiongpq/p/3381069.html

略有補充(可能出現錯誤及解決辦法)

環境:

CentOS X64 6.4

nginx 1.5.6

Python 2.7.5

正文:

一:安裝需要的類庫及Python2.7.5

安裝必要的開發包

yum groupinstall "Development tools"

yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

CentOS 自帶Python2.6.6,但我們可以再安裝Python2.7.5:

cd ~

wget http://python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2

tar xvf Python-2.7.5.tar.bz2

cd Python-2.7.5

./configure --prefix=/usr/local

make && make altinstall

安裝完畢後,可是使用」python2.7」命令進入python2.7的環境。

二:安裝Python包管理

easy_install包 https://pypi.python.org/pypi/distribute

方便安裝Python的開發包

cd ~

wget https://pypi.python.org/packages/source/d/distribute/distribute-0.6.49.tar.gz

tar xf distribute-0.6.49.tar.gz

cd distribute-0.6.49python2.7 setup.py install

easy_install --version

紅色部分必須是「python2.7」,否則將安裝到默認的2.6環境內。

pip包 https://pypi.python.org/pypi/pip

安裝pip的好處是可以pip list、pip uninstall 管理Python包, easy_install沒有這個功能,只有uninstall

easy_install pip

pip --version

三:安裝uwsgi

uwsgi: https://pypi.python.org/pypi/uWSGI

uwsgi參數詳解: http://uwsgi-docs.readthedocs.org/en/latest/Options.html

pip install uwsgi

uwsgi --version

測試uwsgi是否正常:

新建test.py文件,內容如下:

def application(env, start_response):

start_response('200 OK', [('Content-Type','text/html')])

return "Hello World"

然後在終端運行:

uwsgi --http :8001 --wsgi-file test.py

在瀏覽器內輸入: http://你購買的雲主機公網ip:8001 ,看是否有「Hello World」輸出,若沒有輸出,請檢查你的安裝過程。

四:安裝django

pip install django

測試django是否正常,運行:

django-admin.py startproject demosite

cd demositepython2.7 manage.py runserver 0.0.0.0:8002

在瀏覽器內輸入: http://1 你購買的雲主機公網 :8002,檢查django是否運行正常。

五:安裝nginx

cd ~

wget http://nginx.org/download/nginx-1.5.6.tar.gz

tar xf nginx-1.5.6.tar.gz

cd nginx-1.5.6

./configure --prefix=/usr/local/nginx-1.5.6 \

--with-http_stub_status_mole \

--with-http_gzip_static_mole

make && make install

安裝Nginx時報錯

錯誤提示:

./configure: error: the HTTP rewrite mole requires the PCRE library.

安裝pcre-devel與openssl-devel解決問題

yum -y install pcre-devel openssl openssl-devel

./configure --prefix=/usr/local/nginx

make

make install

六:配置uwsgi

uwsgi支持ini、xml等多種配置方式,但個人感覺ini更方便:

在/ect/目錄下新建uwsgi9090.ini,添加如下配置:

[uwsgi]

socket =

master = true         //主進程

vhost = true          //多站模式

no-stie = true        //多站模式時不設置入口模塊和文件

workers = 2           //子進程數

reload-mercy = 10

vacuum = true         //退出、重啟時清理文件

max-requests = 1000

limit-as = 512

buffer-sizi = 30000

pidfile = /var/run/uwsgi9090.pid    //pid文件,用於下面的腳本啟動、停止該進程

daemonize = /website/uwsgi9090.log

設置uwsgi開機啟動,在/etc/init.d/目錄下新建uwsgi9090文件,內容如下:

uwsgi9090

#! /bin/sh

# chkconfig: 2345 55 25

# Description: Startup script for uwsgi webserver on Debian. Place in /etc/init.d and

# run 'update-rc.d -f uwsgi defaults', or use the appropriate command on your

# distro. For CentOS/Redhat run: 'chkconfig --add uwsgi'

### BEGIN INIT INFO

# Provides:          uwsgi

# Required-Start:    $all

# Required-Stop:     $all

# Default-Start:     2 3 4 5

# Default-Stop:      0 1 6

# Short-Description: starts the uwsgi web server

# Description:       starts uwsgi using start-stop-daemon

### END INIT INFO

# Author:   licess

# website:  http://lnmp.org

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

DESC="uwsgi daemon"

NAME=uwsgi9090

DAEMON=/usr/local/bin/uwsgi

CONFIGFILE=/etc/$NAME.ini

PIDFILE=/var/run/$NAME.pid

SCRIPTNAME=/etc/init.d/$NAME

set -e

[ -x "$DAEMON" ] || exit 0

do_start() {

$DAEMON $CONFIGFILE || echo -n "uwsgi already running"

}

do_stop() {

$DAEMON --stop $PIDFILE || echo -n "uwsgi not running"

rm -f $PIDFILE

echo "$DAEMON STOPED."

}

do_reload() {

$DAEMON --reload $PIDFILE || echo -n "uwsgi can't reload"

}

do_status() {

ps aux|grep $DAEMON

}

case "$1" in

status)

echo -en "Status $NAME: \n"

do_status

;;

start)

echo -en "Starting $NAME: \n"

do_start

;;

stop)

echo -en "Stopping $NAME: \n"

do_stop

;;

reload|graceful)

echo -en "Reloading $NAME: \n"

do_reload

;;

*)

echo "Usage: $SCRIPTNAME {start|stop|reload}" >&2

exit 3

;;

esac

exit 0

uwsgi9090

然後在終端執行:

-- 添加服務

chkconfig --add uwsgi9090

-- 設置開機啟動

chkconfig uwsgi9090 on

七:設置nginx

找到nginx的安裝目錄/usr/local/nginx,打開conf/nginx.conf文件,修改server配置

server {

listen       80;

server_name  localhost;

location / {

include  uwsgi_params;

uwsgi_pass  ;              //必須和uwsgi中的設置一致

index  index.html index.htm;

client_max_body_size 35m;

}

}

注意 :安裝django這步中startproject的demosite路徑,需要和nginx.conf中 uwsgi_param UWSGI_CHDIR /demosite;對應上。

設置nginx開機啟動,在/etc/init.d/目錄下新建nginx文件,內容如下:

nginx

#!/bin/sh

#

# nginx - this script starts and stops the nginx daemon

#

# chkconfig:   - 85 15

# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \

#               proxy and IMAP/POP3 proxy server

# processname: nginx

# config:      /usr/local/nginx/conf/nginx.conf

# pidfile:     /var/run/nginx.pid

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ "$NETWORKING" = "no" ] && exit 0

nginx="/opt/nginx-1.5.6/sbin/nginx"

prog=$(basename $nginx)

NGINX_CONF_FILE="/opt/nginx-1.5.6/conf/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

start() {

[ -x $nginx ] || exit 5

[ -f $NGINX_CONF_FILE ] || exit 6

echo -n $"Starting $prog: "

daemon $nginx -c $NGINX_CONF_FILE

retval=$?

echo

[ $retval -eq 0 ] && touch $lockfile

return $retval

}

stop() {

echo -n $"Stopping $prog: "

killproc $prog -QUIT

retval=$?

echo

[ $retval -eq 0 ] && rm -f $lockfile

return $retval

}

restart() {

configtest || return $?

stop

sleep 1

start

}

reload() {

configtest || return $?

echo -n $"Reloading $prog: "

killproc $nginx -HUP

RETVAL=$?

echo

}

force_reload() {

restart

}

configtest() {

$nginx -t -c $NGINX_CONF_FILE

}

rh_status() {

status $prog

}

rh_status_q() {

rh_status >/dev/null 2>&1

}

case "$1" in

start)

rh_status_q && exit 0

$1

;;

stop)

rh_status_q || exit 0

$1

;;

restart|configtest)

$1

;;

reload)

rh_status_q || exit 7

$1

;;

force-reload)

force_reload

;;

status)

rh_status

;;

condrestart|try-restart)

rh_status_q || exit 0

;;

*)

echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"

exit 2

esac

nginx

然後在終端執行:

-- 添加服務

chkconfig --add nginx

-- 設置開機啟動

chkconfig nginx on

八:測試

OK,一切配置完畢,在終端運行

service uwsgi9090 start

service nginx start

錯誤1:

[root@VM_23_251_centos nginx-1.5.6]# service uwsgi9090 start

env: /etc/init.d/uwsgi9090: Permission denied

[root@VM_23_251_centos nginx-1.5.6]# service nginx start

env: /etc/init.d/nginx: Permission denied

解決辦法1:把可執行勾選上

錯誤2:

[root@VM_23_251_centos ~]# sudo service nginx start

env: /etc/init.d/nginx: No such file or directory

解決辦法1:

Be careful what text editors you use on your local Windows computer. Some create Windows-style line endings (\r\n, CR-LF), which cause problems like this on Unix-like systems such as Linux or Mac OS X.

If you use such an editor, adjust its settings so that it creates files with Unix-style line endings. If the editor has no such setting, you should not be using it at all.

文本格式由windows 改為unix版

錯誤3:

*** WARNING: Can't find section "uwsgi" in INI configuration file /etc/uwsgi9090.ini ***

解決辦法3:

在瀏覽器輸入: http:// 雲主機公網ip,恭喜你可以看到django的「It work」了~

九:多站配置

我採用運行多個uwsgi服務的方法來實現多個站點。

重復第六步,創建uwsgi9091.ini,並相應修改文件中的

socket = 127.0.0.1:9091

pidfile = /var/run/uwsgi9091.pid

daemonize = /website/uwsgi9091.log

並創建服務uwsgi9091,設置開機啟動。

然後修改nginx的配置文件為:

nginx

然後我們就可以通過 http://127.0.0.1:1300 來訪問新的網站了。

十:其他配置

防火牆設置

CentOS默認關閉外部對80、3306等埠的訪問,所以要在其他計算機訪問這台伺服器,就必須修改防火牆配置,打開/etc/sysconfig/iptables

在「-A INPUT –m state --state NEW –m tcp –p –dport 22 –j ACCEPT」,下添加:

-A INPUT -m state --state NEW -m tcp -p -dport 80 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p -dport 3306 -j ACCEPT

然後保存,並關閉該文件,在終端內運行下面的命令,刷新防火牆配置:

service iptables restart

安裝Mysqldb

yum -y install mysql-develeasy_install-2.7 MySQL-python

注意紅色部分,easy_install-2.7,否則它將默認安裝到Python2.6環境內。

------------------------------------------------------------------------------------------------------------------

2014年12月02日添加:

CentOS 7中默認使用Firewalld做防火牆,所以修改iptables後,在重啟系統後,根本不管用。

Firewalld中添加埠方法如下:

firewall-cmd --zone=public --add-port=3306/tcp --permanent

firewall-cmd --reload

熱點內容
動態規劃01背包演算法 發布:2024-11-05 22:17:40 瀏覽:849
nasm編譯器如何安裝 發布:2024-11-05 22:01:13 瀏覽:181
登錄密碼在微信的哪裡 發布:2024-11-05 22:00:29 瀏覽:739
c防止反編譯工具 發布:2024-11-05 21:56:14 瀏覽:247
安卓虛擬機怎麼用 發布:2024-11-05 21:52:48 瀏覽:344
php時間搜索 發布:2024-11-05 20:58:36 瀏覽:479
燕山大學編譯原理期末考試題 發布:2024-11-05 20:13:54 瀏覽:528
華為電腦出現臨時伺服器 發布:2024-11-05 20:05:08 瀏覽:408
斗戰神免費挖礦腳本 發布:2024-11-05 19:53:25 瀏覽:665
網吧伺服器分別是什麼 發布:2024-11-05 19:45:32 瀏覽:392