Linux 安裝并部署python+django+uwsgi+nginx總結
1. python和django的環境搭建
(1)下載anaconda3并安裝
wget https://3230d63b5fc54e62148e-c95ac804525aac4b6dba79b00b39d1d3.ssl.cf1.rackcdn.com/Anaconda3-2.3.0-Linux-x86_64.sh
sh Anaconda3-2.3.0-Linux-x86_64.sh
一路enter鍵,然后提示是否加入到環境變量時,輸入yes即可。
(2)安裝django
直接pip install django
安裝成功之后就可以新建項目
django-admin startproject demosite
cd demosite
python manage.py startapp blog
python manage.py migrate (要執行這個命令,讓django生成可運行的app,否則后面使用uwsgi會報錯)
(3)運行django
python manage.py runserver
curl 127.0.0.1:8000進行如果可以正常訪問,就說明django安裝成功。
2. 安裝uwsgi
(1)centOS
yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
pip install uwsgi
uwsgi --version #查看 uwsgi 版本
(2)test.py
然后,Run uWSGI:
uwsgi --http :8000 --wsgi-file test.py
def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return ["Hello World"] # python2 #return [b"Hello World"] # python3
(3)ubuntu可以能會出現錯誤:
如果出現錯誤,!!! no internal routing support, rebuild with pcre support !!!
sudo apt-get install libpcre3 libpcre3-dev
sudo pip uninstall uwsgi
sudo apt-get remove uwsgi
sudo pip install uwsgi
(4)測試
1) 打開下面url,瀏覽器上應該顯示hello world
curl http://127.0.0.1:8000 如果安裝httpie模塊的話使用http http://127.0.0.1:8000
如果顯示正確是Hello World,說明上面的環節是暢通的
2) 測試django
默認使用django新建工程會在app下面生成一個wsgi.py的文件
uwsgi --http :8000 --wsgi-file wsgi.py 直接這樣也會報錯
uwsgi --http :8000 --wsgi-file appname/wsgi.py
打開瀏覽器輸入http://127.0.0.1:8000 如果現實正確說明web client <-->uwsgi <---> django是暢通的
3. 安裝配置nginx
(1)安裝
wget http://nginx.org/download/nginx-1.9.5.tar.gz
tar xf nginx-1.9.5.tar.gz
cd nginx-1.9.5
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_gzip_static_module
make && make install
或者參考
http://cantgis.blog.51cto.com/5788192/1540004
(2)配置文件
vi /usr/local/nginx/conf/nginx.conf
一般來說加入個server就OK了
參考配置如下
user root; 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 { use epoll; worker_connections 65535; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 8099; server_name 10.117.52.157; ##對外訪問的IP和端口號 access_log /tmp/cms/access.log; error_log /tmp/cms/error.log; #charset koi8-r; #access_log logs/host.access.log main; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8088; uwsgi_read_timeout 300; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # #error_page 500 502 503 504 /registration/500.html; #location = /registration/500.html { # root html; #} location /static/ { alias /root/cms/cms/static/; index index.html index.htm; } location /media/ { alias /root/cms/cms/media/; } } }
(3)運行and 重啟
/usr/local/nginx/sbin/nginx
啟動: nginx start
重啟: nginx -s reload
4. 使用uwsgi的配置文件運行django
在確保nginx運行之后,就可以通過uwsgi來運行django了。nginx 在最外層接收請求,靜態的自己處理,動態的通過 socket端口交給uwsgi來處理。
配置文件內容如下
[uwsgi]
socket=:8088 #要和nginx對應的IP和端口號一致
chdir=/root/cms/cms #APP的目錄
module=cms.wsgi #wsgi.py文件位置
touch-reload=/root/cms/cms/reload #重啟只要輸入命令touch reload文件即可
processes=4
threads=2
daemonize=/tmp/cms/wsgi.log #日志文件位置
放在APP的上一級目錄
直接運行uwsgi --ini uwsgi.ini 即可