uwsgi+nginx+django(部署两个website)
说明:这里只是简单的记录下,在部署过程的遇到的几个小坑(如果需要详细记录可以访问下面几个博客,我也是从那里爬出来的)。
1.http://https://blog.csdn.net/qq_41664526/article/details/80407382
2.https://blog.csdn.net/youngys123/article/details/79884993
如果有什么问题很久都没有解决,可以在右上角的联系方式中找到我。
一.环境依赖下载
1.安装python3,并设置默认为Python3:
参考:https://blog.csdn.net/fireflychh/article/details/78195778
sudo apt-get update sudo apt-get install python3.5 sudo cp /usr/bin/python /usr/bin/python_bak sudo rm /usr/bin/python sudo ln -s /usr/bin/python3.5 /usr/bin/python2.安装pip:
sudo apt-get update sudo apt-get install python3-pip3.安装虚拟环境
sudo -H pip3 install --upgrade pip sudo -H pip3 install virtualenv virtualenvwrapper echo "export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3" >> ~/.bashrc echo "export WORKON_HOME=~/Env" >> ~/.bashrc echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrc source ~/.bashrc4.创建虚拟环境,安装Django
mkvirtualenv firstsite pip install django cd ~ django-admin.py startproject firstsite cd ~/firstsite ~/firstsite/manage.py migrate ~/firstsite/manage.py createsuperuser ...5.setting.py 的修改
ALLOWED_HOSTS = ['your_server_domain_or_IP', 'second_domain_or_IP', . . .] STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'static/') ~/firstsite/manage.py collectstatic sudo ufw allow 8080 ~/firstsite/manage.py runserver 0.0.0.0:8080
二.文件配置
1.配置nginx文件
upstream django_01{ server 127.0.0.1:8002; } upstream django_02{ server 127.0.0.1:8000; } server{ listen 80; server_name mihon.cn; charser utf-8; client_max_body_size 75M; location /static { alias /opt/myblog/static; } location / { uwsgi_pass 127.0.0.1:8002; include /etc/nginx/uwsgi_params; } } server{ listen 80; server_name share.mihon.cn; charser utf-8; client_max_body_size 75M; location /static { alias /opt/mihonShare/static; } location /media { alias /opt/mihonShare/media/img; } location / { uwsgi_pass 127.0.0.1:8002; include /etc/nginx/uwsgi_params; } }2.配置uwsgi文件
[uwsgi] socket = 127.0.0.1:8002 chdir = /opt/myblog wsgi-file = Myblog/wsgi.py master = true processes = 4 threads = 2 max-request = 6000 chmod-socket = 664 vacuum = true
3.重启nginx
/etc/init.d/nginx restart4.启动uwsgi
/usr/local/bin/uwsgi Myblog-uwsgi.ini
注意的小坑:
1.django 不渲染的问题(我是在admin中CSS丢失)
解决:静态文件一定要配对,不要有路径错误或者英文字母打错,并且一定要执行 python manage.py collectstatic (注意!)这样django会将admin等后台需要的渲染文件都加载到静态文件中。
2.icon 不显示(没解决),我是用用vue写的前端,webpack打包的,用IP和本地测试都可以,缓存二级域名DNS解析之后不显示了,郁闷
解决:icon的src设置为静态资源,不要链接到media,就可以被渲染了,完美。
3.media,和media相关的url和资源拿不到
解决:也是在nginx配置文件和django setting文件中的配置/media一定要对,可以多检查一下,我是少配置了一个路径/media/img
4.关于vue向后台发请求,利用axios发post,写代码测试的时候好好地,一打包到后端,就出现403的问题。
解决:配置一段axios关于csrf的配置,不配置不行,即使我后端把csrf的中间件给注释了也不管用;
配置如下:
import axios from 'axios'; axios.interceptors.request.use((config) => { config.headers['X-Requested-With'] = 'XMLHttpRequest'; let regex = /.*csrftoken=([^;.]*).*$/; // 用于从cookie中匹配 csrftoken值 config.headers['X-CSRFToken'] = document.cookie.match(regex) === null ? null : document.cookie.match(regex)[1]; return config });5.vue我这是第一次用,写代码发请求我都是在本机,都是127.0.0.1:8000,后面发现打包后,这个是被固定了,所以往后还是在本地,使用预定的域名来进行测试,这样的话就不怕端口和ip改变了,只需要域名正确就可以。
先记录这些吧,天气有点冷,买双手套会不会合适一点,在办公室手冻得不行,老是要拿到屁股底下暖一会。


评论