uwsgi+nginx+django(部署两个website)

2018年12月19日 17:03

说明:这里只是简单的记录下,在部署过程的遇到的几个小坑(如果需要详细记录可以访问下面几个博客,我也是从那里爬出来的)。

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/python
2.安装pip:
sudo apt-get update
sudo apt-get install python3-pip
3.安装虚拟环境
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 ~/.bashrc
4.创建虚拟环境,安装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 restart
4.启动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改变了,只需要域名正确就可以。



先记录这些吧,天气有点冷,买双手套会不会合适一点,在办公室手冻得不行,老是要拿到屁股底下暖一会。




评论

ming.zhong(2019-03-05 08:41:49)#1楼
面朝大海,春暖花开!回复

nige(2019-09-12 16:09:32)#2楼
临渊羡鱼,不如退而结网!回复