ubuntu+nginx+uwsgi部署django web项目
前言
将本地开发的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