前言
將本地開發的django項目部署至linux上的uwsgi服務器,並配置nginx,完成基於ubuntu+nginx+uwsgi的上線運行。下面整理相關步驟。
服務器配置virtualenv
如果不想直接用python環境運行,則需要在服務器上安裝並配置virtual env。如果直接用python環境,則可跳過這一步。
pip install virtualenv
pip install virtualenvwrapper
需要配置環境變量,以能使用相關命令:
在 ~下創建.bash_profile,添加如下內容:
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/workspace
source /usr/local/bin/virtualenvwrapper.sh
然后運行命令:
source ~/.bash_profile
配置完成。使用如下命令:
mkvirtualenv its_name # 創建virtual env
workon its_name # 切換到某個env下(如果不指定its_name)則是列出所有已有env
deactive # 退出當前env
rmvirtualenv its_name # 刪除某個virtual env
安裝依賴包
首先在開發本地,需要導出pip依賴包列表。
pip freeze > plist.txt
將此文件放至服務器環境,並批量安裝依賴。
workon [虛擬環境名稱]
pip install -r plist.txt -i https://pypi.douban.com/simple
# 注,這里使用豆瓣源安裝,在國內下載速度比pip官方源快很多
django項目的修改
需要修改settings.py文件,關閉debug模式。
DEBUG = False
ALLOW_HOSTS=['*',] #表示可以訪問服務器的ip
配置uwsgi
安裝:
pip install uwsgi
需要在django項目根目錄(與manage.py同級目錄)下,新建一個uwsgi.ini文件,寫入相關配置:
[uwsgi]
socket=外網ip:端口(使用nginx連接時,使用socket)
http=外網ip:端口(直接做web服務器,使用http)
chdir=項目根目錄
wsgi-file=項目中wsgi.py文件的目錄,相對於項目根目錄
processes=4
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uswgi.log
可以啟動uwsgi啦:
啟動:uwsgi --ini uwsgi.ini
停止:uwsgi --stop uwsgi.pid
重啟:uwsgi --reload uwsgi.pid
配置nginx
需要預先安裝nginx:
apt install nginx
對nginx進行配置:
cd /etc/nginx/sites-available
cp default default.bak
vi default
可進行如下配置:
server{
# 根據自身需要使用80或443
listen 443;
server_name search.codingcat.cn;
# 可以配置域名ssl證書
ssl on;
ssl_certificate /etc/nginx/ssl/search.codingcat.cn.crt;
ssl_certificate_key /etc/nginx/ssl/search.codingcat.cn.key;
location / {
uwsgi_pass 127.0.0.1:8888;
include uwsgi_params;
}
# 因為uwsgi下,靜態目錄無法訪問,所以使用nginx來處理靜態請求
# 這里是直接將static路徑請求賺到了項目的static下
location /static {
root /home/ubuntu/pythonweb/wesearch/;
}
}
備注:如果使用了django自帶admin后台,admin的靜態目錄也無法訪問,可依此方法配置/ static/admin 到django源碼中的admin靜態目錄下,或者將admin目錄拷貝到自己項目的static目錄下。
啟動nginx:
service nginx start
service nginx stop
service nginx restart
