在服务器Ubuntu16.04 上部署Django+uWSGI+Nginx

1.安装好Ubuntu系统

  • 先换下载源
  • 然后在设置语言

2.更新所有软件(重要)

sudo apt update

sudo apt upgrade

3.升级pip到最近版本

sudo pip3 install --upgrade pip
# 如果报错
sudo pip3 install -U setuptools

4.pip安装错误:pip install - locale.Error: unsupported locale setting

Traceback (most recent call last):
  File "/usr/bin/pip3", line 11, in 
    sys.exit(main())
  File "/usr/lib/python3/dist-packages/pip/__init__.py", line 215, in main
    locale.setlocale(locale.LC_ALL, '')
  File "/usr/lib/python3.5/locale.py", line 594, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting

解决办法:

export LC_ALL=C

5.使用pip配置相同的运行环境

1.在配置好的机器上使用 pip freeze > requirements.txt 生成安装列表
2.把生成的文件复制到目标机器上
3.在目标机器上执行 sudo pip install -r requirements.txt 自动读取列表并安装

6.安装mysqlclient报错:

Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-94ik7yxu/mysqlclient/

解决办法:

sudo apt-get install libmysqlclient-dev

7.安装虚拟环境

安装虚拟环境 sudo pip3 install virtualenv virtualenvwrapper
安装完成使用 which virtualenvwrapper.sh 查看 virtualenvwrapper.sh 位置,然后将它放到source后
配置环境变量 vim ~/.bashrc 添加如下内容,保存后执行 source .bashrc

具体配置如下:

VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
export WORKON_HOME=$HOME/.virutalenvs
source /usr/local/bin/virtualenvwrapper.sh

8.安装uwsgi,虚拟环境和外部环境都要安装

sudo pip install uwsgi

测试

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"] # python3
    #return ["Hello World"] # python2

运行:

uwsgi --http :8000 --wsgi-file test.py

测试Django项目:

python manage.py runserver 0.0.0.0:8000

使用uWSGI运行Django项目:

uwsgi --http :8000 --module mysite.wsgi

9.安装Nginx

sudo apt-get install nginx

设置uwsgi_params:

uwsgi_param  QUERY_STRING       $query_string;
uwsgi_param  REQUEST_METHOD     $request_method;
uwsgi_param  CONTENT_TYPE       $content_type;
uwsgi_param  CONTENT_LENGTH     $content_length;

uwsgi_param  REQUEST_URI        $request_uri;
uwsgi_param  PATH_INFO          $document_uri;
uwsgi_param  DOCUMENT_ROOT      $document_root;
uwsgi_param  SERVER_PROTOCOL    $server_protocol;
uwsgi_param  REQUEST_SCHEME     $scheme;
uwsgi_param  HTTPS              $https if_not_empty;

uwsgi_param  REMOTE_ADDR        $remote_addr;
uwsgi_param  REMOTE_PORT        $remote_port;
uwsgi_param  SERVER_PORT        $server_port;
uwsgi_param  SERVER_NAME        $server_name;

设置 projectname_nginx.conf:

upstream django {
    server 127.0.0.1:8001;
}

# configuration of the server
server {
    listen      80;
    server_name .example.com; # substitute your machine's IP address or FQDN
    charset     utf-8;

    # max upload size
    client_max_body_size 75M;   # adjust to taste

    # Django media
    location /media  {
        alias /path/to/your/mysite/media;  # your Django project's media files - amend as required
    }

    location /static {
        alias /path/to/your/mysite/static; # your Django project's static files - amend as required
    }

    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass  django;
        include     /path/to/your/mysite/uwsgi_params; # the uwsgi_params file you installed
    }
}

这个配置文件告诉nginx提供来自文件系统的媒体和静态文件,以及处理那些需要Django干预的请求。设置的 static 目录和 media 目录将由 Nginx进行代理。

将这个文件链接到/etc/nginx/sites-enabled,这样nginx就可以看到它了:

sudo ln -s ~/path/to/your/mysite/projectname_nginx.conf /etc/nginx/sites-enabled/

部署静态文件,必须先编辑 setting.py,添加如下内容

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

 然后运行

python manage.py collectstatic

重启Nginx

sudo service nginx restart

10.连接Nginx和uWSGI 

配置uwsgi.ini

[uwsgi]

# Django-related settings
# the base directory (full path)
chdir           = /home/ubuntu/smallservice
# Django's wsgi file
module          = smallservice.wsgi
# the virtualenv (full path)
home            = /home/ubuntu/.virutalenvs/django
daemonize       = /home/ubuntu/log/test.log
# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 10
# the socket (use the full path to be safe
socket          = :8001
# ... with appropriate permissions - may be needed
chmod-socket    = 666
# clear environment on exit
vacuum          = true

使用此文件运行uwgi:

uwsgi --ini mysite_uwsgi.ini # the --ini option is used to specify a file

 再次测试Django是否可以运行

11.系统运行时运行 uWSGI

这一步是让这一切在系统启动的时候自动执行,修改 /etc/rc.loacl 文件,然后在 “exit 0” 行前面加上:

uwsgi --ini /path/to/mysite_uwsgi.ini

另附:升级Python版本

sudo add-apt-repository ppa:jonathonf/python-3.6
sudo apt-get update
sudo apt-get install python3.6
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 2
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150

 找不到PIP,解决:

wget https://bootstrap.pypa.io/get-pip.py  --no-check-certificate
sudo python get-pip.py

参考资料:https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/tutorials/Django_and_nginx.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值