Django项目在ubuntu14.04下的部署:Nginx+uwsgi

此文用于项目开发完成后,向服务器迁移部署用,
仅供参考,生产环境请根据情况更改

1.安装Nginx

edward@machine:~$ sudo apt-get install nginx
edward@machine:~$ ps aux | grep nginx

详情请参考Uwsgi文档


2.安装配置Mysql

安装过程中需要输入管理mysql用的root密码

edward@machine:~$ sudo apt-get install mysql-server
edward@machine:~$ ps aux | grep mysql

更改mysql的配置文件,并重启mysql服务

edward@machine:~$ sudo vim /etc/mysql/my.cnf
bind-address            = 0.0.0.0
edward@machine:~$ sudo service mysql restart

添加mysql访问权限

edward@machine:~$ mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Abc,123.' WITH GRANT OPTION;
FLUSH PRIVILEGES;

将数据导入数据库
可利用Navicat建立与数据库的连接,右键点击新建链接,选择数据传输

Django项目在ubuntu14.04下的部署:Nginx+uwsgi_第1张图片
Paste_Image.png

3.virualenv的安装与部署

以下步骤尽量在一个终端下完成,切换终端有可能失败

edward@machine:~$ sudo pip install virtualenv
edward@machine:~$ sudo pip install virtualenvwrapper
edward@machine:~$ vim .bashrc
(在最后一行追加)
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

立即让修改后的文件生效

edward@machine:~$ source .bashrc

以上步骤执行完成后,可在任意目录下使用workon命令,
mkvirtualenv命令创建的虚拟环境在$HOME/.virtualenvs下

为项目创建虚拟目录

edward@machine:~$ mkvirtualenv 虚拟目录名
进入虚拟目录
edward@machine:~$ workon 虚拟目录名
退出虚拟目录
(虚拟目录) edward@machine:~$ deactivate
edward@machine:~$

4.安装开发包

4.1首先在开发环境中将开发包导出

可在开发环境中导出已安装的项目用开发包列表,方式有二:
(以下例子的开发环境为windows)
(1)在开发环境下,利用pip freeze命令导出项目安装的所有开发包

查看项目安装的所有开发包
(虚拟目录) C:\Users\Administrator> pip list 
导出开发包
(虚拟目录) C:\Users\Administrator> pip freeze> packages.txt

(2)在开发环境下,利用开发工具找到项目所用的开发包
以pycharm为例,打开工具,在上方导航栏中 file>settings,在弹出的窗口中选择project Interpreter,会列出所有的开发包

Django项目在ubuntu14.04下的部署:Nginx+uwsgi_第2张图片
Paste_Image.png
4.2在服务器中安装开发包

将导出的packages.txt文件传入服务器内

根据**packages.txt**文件为服务器安装开发包,构建项目环境
(虚拟目录) edward@machine:~/$ pip install -r packages.txt
4.3可能遇到的问题

例1

EnvironmentError: mysql_config not found
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-gXwqlz/MySQL-python/

解决方法

(虚拟目录) edward@machine:~/$ sudo apt-get install libmysqlclient-dev

例2

error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

解决方法

(虚拟目录) edward@machine:~/$ sudo apt-get install python-dev
4.4 安装后查看
(虚拟目录) edward@machine:~/$ pip list

5.Uwsgi安装

(虚拟目录) edward@machine:~/$ pip install uwsgi

测试uwsgi

(虚拟目录) edward@machine:~/项目根目录$ uwsgi --http :8000 --module 项目名.wsgi

在浏览器中查看网站是否可以运行


6.配置Nginx

edward@machine:~/项目根目录$ mkdir conf
edward@machine:~/项目根目录$ vim uc_nginx.conf

server 127.0.0.1:8000; # for a web port socket (we'll use this first)
}
# configuration of the server

server {
# the port your site will be served on
listen      80;
# the domain name it will serve for
server_name 192.168.52.142 (可继续添加网站的域名) ; # 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 项目的根目录/media;  # 指向django的media目录
}

location /static {
    alias 项目的根目录/static; # 指向django的static目录
}

# Finally, send all non-media requests to the Django server.
location / {
    uwsgi_pass  django;
    include     uwsgi_params; # the uwsgi_params file you installe /home/edward/mnt
}
}

将编辑好的配置文件拷贝或创建软连接至/etc/nginx/conf.d/目录下
edward@machine:项目的根目录$ sudo ln -s uc_nginx.conf /etc/nginx/conf.d/
[sudo] password for edward:
edward@machine:项目的根目录$ ll -a /etc/nginx/conf.d/
总用量 8
drwxr-xr-x 2 root root 4096 2月 26 11:37 ./
drwxr-xr-x 5 root root 4096 2月 23 11:23 ../
lrwxrwxrwx 1 root root 13 2月 26 11:37 uc_nginx.conf -> uc_nginx.conf


7.拉取Django所有需要的静态文件到同一个目录

在Django的setting文件中,添加下面一行内容:

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

记得将setting文件中STATICFILES_DIRS注释掉

运行下方命令,会自动拷贝静态文件至配置好的路径下

 (虚拟目录)edward@machine:~$ python manage.py collectstatic

8.利用配置文件开启Uwsgi

edward@machine:项目的根目录$mkdir conf

新建并编辑Uwsgi配置文件

edward@machine:项目的根目录/conf$ vim uwsgi.ini

# mysite_uwsgi.ini file
[uwsgi]

# Django-related settings
# the base directory (full path)
chdir           =项目的根目录
# Django's wsgi file
module          = 项目名.wsgi
# the virtualenv (full path)

# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 10
# the socket (use the full path to be safe
socket          = 127.0.0.1:8000
# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true
virtualenv = /home/edward/.virtualenvs/虚拟目录名

利用配置文件启动Uwsgi

(虚拟目录) edward@machine:项目根目录/conf$ uwsgi -i uwsgi.ini

启动浏览器访问测试

提示
后台启动uwsgi

(虚拟目录) edward@machine:项目根目录/conf$ uwsgi -i uwsgi.ini &

重启uwsgi

(虚拟目录) edward@machine:项目根目录/conf$ pkill -f uwsgi

将调试模式改为上线模式
在Django的setting文件中变更如下代码

DEBUG = True  => DEBUG = False

重启后再测试

edward@machine:项目根目录$ pkill -f uwsgi

关闭后台执行的uwsgi

edward@machine:项目根目录$ fg

再用Ctrl+c即可关闭uwsgi

可能会遇到的问题1:

bad request (400)

当django的settings.py变量DEBUG=False后,访问网站报错bad request (400)
原因:

ALLOWED_HOSTS=[]

可能会遇到的问题2:

internal server error

当django的settings.py变量DEBUG=False后,访问网站报错internal
server error
原因:

ALLOWED_HOSTS=[*]

正确设置方法:

ALLOWED_HOSTS=["*"]

我是参考链接

你可能感兴趣的:(Django项目在ubuntu14.04下的部署:Nginx+uwsgi)