nginx + gunicorn + django的簡單部署
sudo apt-get install nginx
cd /etc/nginx/sites-available
sudo vim default
原本是想安裝Image包,但是百度的方法都亂七八糟的不能用,最後是參考這篇文章的方法安裝PIL的,Image是PIL的一個模組。
方法非常簡單,兩個步驟:
-
安裝相應的庫和包:
sudo apt-get build-dep python-imaging
- 1
- 1
-
ubuntu14.04中libfreetype 的標頭檔案在目錄/usr/include/freetype2下,但PIL中使用的路徑是freetype,所以將原來的目錄連結到新建的freetype:
cd /usr/include sudo ln -s freetype2 freetype
- 1
- 2
- 1
- 2
最後忍不住想吐槽百度簡直是程式設計師的噩夢,這麼簡單的問題都找不到好答案
>>>import django >>>print django.get_version()
django-admin.py startproject myweb
python manage.py startapp learn
將配置檔案修改為這樣的 注意自己修改下面的路徑
server {
listen 80;
server_name server_name;
access_log /home/virusdefender/Desktop/access.log;
error_log /home/virusdefender/Desktop/error.log;
location / {
proxy_pass http://127.0.0.1:8020;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
sudo nginx -t 測試配置檔案
sudo nginx -s reload 重啟nginx
然後去程式碼目錄執行python manage.py runserver 8020
測試一下
這個時候應該就能訪問到了
然後執行sudo pip install gunicorn
去配置gunicorn代替runserver
在django的settings INSTALLED_APPS
裡面加上gunicorn
在manage.py資料夾中執行
gunicorn ×××.wsgi:application -b 127.0.0.1:8020 --reload
×××是工程名字 也就是settings所在的目錄的名字 ip和埠要和上面的那個一樣
這個時候應該就可以了
如果是ssh 連線 使用命令
nohup gunicorn ×××.wsgi:application -b 127.0.0.1:8011 --reload&
其實就是前面新增nohup 最後面加上&符號
程序操作的一點知識
停止程序操作 停止操作是通過向程序傳送訊號來進行的
步驟1:查詢程序的主程序號,以nginx為例 ps -ef | grep nginx 在程序列表裡面找master程序,它的編號就是主程序號了。
步驟2:傳送訊號 從容停止Nginx: kill -QUIT 主程序號
快速停止Nginx: kill -TERM 主程序號
強制停止Nginx: pkill -9 nginx
平滑重啟 如果更改了配置就要重啟Nginx,要先關閉Nginx再開啟?不是的,可以向Nginx 傳送訊號,平滑重啟。
平滑重啟命令: kill -HUP 主程序號或程序號檔案路徑 或者使用
sudo nginx -s reload
託管 Django Web 應用程式相當簡單,雖然它比標準的 PHP 應用程式更復雜一些。 讓 Web 伺服器對接 Django 的方法有很多。 Gunicorn 就是其中最簡單的一個。
Gunicorn(Green Unicorn 的縮寫)在你的 Web 伺服器 Django 之間作為中間伺服器使用,在這裡,Web 伺服器就是 Nginx。 Gunicorn 服務於應用程式,而 Nginx 處理靜態內容。
Gunicorn
安裝
使用 Pip 安裝 Gunicorn 是超級簡單的。 如果你已經使用 virtualenv 搭建好了你的 Django 專案,那麼你就有了 Pip,並且應該熟悉 Pip 的工作方式。 所以,在你的 virtualenv 中安裝 Gunicorn。
- $ pip install gunicorn
配置
Gunicorn 最有吸引力的一個地方就是它的配置非常簡單。處理配置最好的方法就是在 Django 專案的根目錄下建立一個名叫 Gunicorn 的資料夾。然後在該資料夾內,建立一個配置檔案。
在本篇教程中,配置檔名稱是 gunicorn-conf.py。在該檔案中,建立類似於下面的配置:
import multiprocessing bind = "127.0.0.1:8000" workers = 2 errorlog = "/home/nginxuser/example/gunicorn.error.log" #loglevel = "debug" proc_name = "gunicorn_example"
- import multiprocessing
bind = "127.0.0.1:8000"
workers = multiprocessing.cpu_count() * 2 + 1- reload = True
- daemon = True
在上述配置的情況下,Gunicorn 會在 /tmp/ 目錄下建立一個名為 gunicorn1.sock 的 Unix 套接字。 還會啟動一些工作程序,程序數量相當於 CPU 核心數量的 2 倍。 它還會自動重新載入並作為守護程序執行。
/home/wwwroot/myweb/gunicorn
執行
Gunicorn 的執行命令有點長,指定了一些附加的配置項。 最重要的部分是將 Gunicorn 指向你專案的 .wsgi 檔案。
- gunicorn -c gunicorn/gunicorn-conf.py -D --error-logfile gunicorn/error.log myweb.wsgi
上面的命令應該從專案的根目錄執行。 -c 選項告訴 Gunicorn 使用你建立的配置檔案。 -D 再次指定 gunicorn 為守護程序。 最後一部分指定 Gunicorn 的錯誤日誌檔案在你建立 Gunicorn 資料夾中的位置。 命令結束部分就是為 Gunicorn 指定 .wsgi 檔案的位置。
yum install nginx
檢查配置是否有錯
nginx -t -c /etc/nginx/nginx.conf
啟動nginx
service nginx start
設定開機自啟
systemctl enable nginx
建立使用者
useradd nginxuser passwd nginxuser
修改nginx主配置
vim /etc/nginx/nginx.conf
非註釋首行
user nginx
改為
user nginxuser
不然可能會出現網站靜態檔案訪問報403問題。
新建網站執行配置
mkdir /etc/nginx/site-available/example.conf
server { listen 80; server_name example.com; charset utf-8; client_max_body_size 75M; access_log /home/nginxuser/projects/example/nginxlogs/access.log; error_log /home/nginxuser/projects/example/nginxlogs/error.log; location /static { alias /home/nginxuser/projects/explame/static; } location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } jk
建立軟連結
ln -s /etc/nginx/sites-available/explame.conf /etc/nginx/sites-enabled/explame.conf
Gunicorn
安裝
pip install gunicorn
專案根目錄下新增gunicorn執行配置檔案gunicorn.conf.py
import multiprocessing bind = "127.0.0.1:8000" workers = 2 errorlog = "/home/nginxuser/example/gunicorn.error.log" #loglevel = "debug" proc_name = "gunicorn_example"
啟動
sudo gunicorn example.nginx_wsgi:application -c /home/nginxuser/projects/example/gunicorn.conf.py
後臺執行
sudo nohup gunicorn example.nginx_wsgi:application -c /home/nginxuser/projects/example/gunicorn.conf.py&
如果執行報錯先使用以下命令檢查下nginx配置是否有錯
nginx -t -c /etc/nginx/nginx.conf
接上一章:已經按照之前章節安裝了Python2.7.10,Django 1.8.14. 以及mysql,並建立了資料庫以及資料庫帳號密碼。
一、安裝nginx
yum -y install nginx#設定nginx開機啟動: chkconfig nginx on
啟動nginx:service nginx start如果安裝不了或者找不到nginx的源,則手動新增檔案:
1 /etc/yum
.repos.d
/nginx
.repo
在裡面填入:
123456789 [nginx]
name=nginx repo
baseurl=http:
//nginx
.org
/packages/centos/6/
$basearch/
gpgcheck=0
enabled=1
然後再執行一次yum -y install nginx
啟動報錯:nginx: [emerg] socket() [::]:80 failed (97: Address family not supported by protocol)
解決辦法:vim /etc/nginx/conf.d/default.conf
將: listen 80 default_server;
listen [::]:80 default_server;
改為: listen 80; #listen [::]:80 default_server;啟動nginx就行了。。
二、配置nginx
vi /etc/nginx/nginx.conf
(修改成自己的使用者賬號,它預設用的是nginx使用者,但我們部落格的目錄下訪問這些是需要使用者賬號的,而nginx這個使用者是沒有許可權的。所以將user後改成自己的使用者賬號brad。如果不做這些修改,我們後面訪問靜態檔案會出現問題。因為nginx本來就沒有許可權去訪問這些靜態的檔案。)
三、安裝gunicorn
1、安裝
/usr/local/bin/pip install gunicorn
2、 在xxx_project下新建gunicorn的配置檔案gunicorn.conf.py
import multiprocessing bind = "127.0.0.1:8080" workers = 2 errorlog = '/home/brad/xxx_project/gunicorn.error.log' #accesslog = './gunicorn.access.log' #loglevel = 'debug' proc_name = 'gunicorn_blog_project'3、在XXX_project下新建nginx的配置檔案nginx.conf
server { listen 80; server_name localhost example.com; access_log /home/brad/xxx_project/nginx.access.log; error_log /home/brad/xxx_project/nginx.error.log; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /robots.txt { alias /home/brad/xxx_project/static/robots.txt; } location /favicon.ico { alias /home/brad/xxx_project/static/img/favicon.ico; } location ~ ^/(media|static)/ { root /home/brad/xxx_project; expires 30d; } # this prevents hidden files (beginning with a period) from being served location ~ /\. { access_log off; log_not_found off; deny all; } }4、將其連結到 /etc/nginx/conf.d/blog_project.conf (需要root帳號許可權或者sudo)
sudo ln -s /home/brad/xxx_project/nginx.conf /etc/nginx/conf.d/xxx_project.conf5、同時,必須把nginx.conf裡server_name後面的內容(localhost)加入到 settings.py裡的ALLOWED_HOSTS
sudo vi settings.py
6、現在我們現在可以執行一下gunicorn:
sudo nohup /usr/local/python2710/bin/gunicorn xz1024_project.wsgi:application -c /home/brad/xz1024_project/gunico