关于Django 部署(uwsgi)的记录
虚拟环境
sudo pip install virtualenv
sudo pip install virtualenvwrapper
mkdir ~/.virtualenvs
然后
#打开文件
vi ~/.bashrc
#在文件内容末尾添加如下内容:
export WORKON_HOME=$HOME/.virtualenvs # 所有虚拟环境存储的目录
source /usr/local/bin/virtualenvwrapper.sh
#让其生效
source ~/.bashrc
如果在你创建虚拟环境 mkvirtualenv 虚拟环境名字 -p python版本
创建虚拟环境的时候报错 /usr/bin/python: No module named virtualenvwrapper
这是因为服务器环境或者电脑有多个python版本,可能python 版本是 指向python2的,我们还需要 vi ~/.bashrc
export WORKON_HOME=$HOME/.virtualenvs # 所有虚拟环境存储的目录
source /usr/local/bin/virtualenvwrapper.sh
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 # 报以上错是加上这一行
最后别忘了 source ~/.bashrc
静态文件问题
在django 中 我们自己调试程序 一般都是 python manage.py runserver ip:port
,静态文件设置在settings中
STATIC_URL = '/static/' # 这是设置访问静态文件的 url 前缀
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static_files'), # 这个static_files才是装静态文件的文件夹
]
但如果我们需要我们的代码在服务器上跑,就需要用到uwsgi 进行布置, 这样的话就不能访问静态文件了,需要我们收集静态文件,需要经过如下步骤
1 在settings
中添加静态文件收集目录
STATIC_ROOT = os.path.join(BASE_DIR, "static") # 静态文件都会被收集到 static 这个文件夹
2 运行 python manage.py collectstatic
收集静态文件到 STATIC_ROOT
目录中
3. 在url 中添加访问收集静态路由路径
from django.conf import settings
from django.conf.urls import url,re_path
re_path(r'static/(?P<path>.*)', static.serve,
{'document_root': settings.STATIC_ROOT}, name='static'),
配置uwsgi
pip install uwsgi
- 创建 uwsgi.ini 文件,这里我是创建在和 manage.py 同一路径
复制以下内容到uwsgi.ini
文件中
[uwsgi]
#使用nginx连接时使用,Django程序所在服务器地址
;socket=x.x.x.x:8000
#直接做web服务器使用,Django程序所在服务器地址
http=0.0.0.0:9999
#项目目录
chdir=/home/python/Desktop/jiang-search/JiangSearch
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=JiangSearch/wsgi.py
# 进程数
processes=4
# 线程数
threads=2
# uwsgi服务器的角色
master=True
# 存放进程编号的文件
pidfile=uwsgi.pid
# 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。我们以前的runserver是依赖终端的
daemonize=uwsgi.log
# 指定依赖的虚拟环境
virtualenv=/home/python/.virtualenvs/jiangsearch
接下来 启动 uwsgi 就可以访问服务器了
uwsgi --ini uwsgi.ini # 启动
uwsgi --stop uwsgi.pid # 关闭
如果想让其他人都访问到 别忘了 settings 中 ALLOWED_HOSTS = ["*"]