Nginx+uwsgi部署django

0. 登录远程服务器并准备

ssh 用户@IP -p 端口

回车后,要求输入服务器密码,再输入密码

 

更新软件源

sudo apt-get update
sudo apt-get upgrade

 

1. 安装nginx

sudo apt-get install nginx

 查看nginx是否启动:

ps aux|grep nginx

 

2. 查看IP地址:

在虚拟机运行的话,查看下内网IP

服务器的话,就不用,反正服务器IP你肯定知道的

ifconfig

- 注意虚拟机要的网络连接方式要设成桥接的

- 在浏览器中运行此ip,看是否是nginx欢迎界面

 

3. 安装并设置mysql:

3.1 安装mysql

sudo apt-get install mysql-server

 设置密码:root(默认用户),输入密码

 测试mysql是否安装成功

mysql -u root -p

 输入密码root

 退出

 

3.2 更改mysql的IP绑定0.0.0.0:

这里是deepin系统

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

这里是Ubuntu

sudo vim /etc/mysql/my.cnf

 

bind-address = 0.0.0.0

重启mysql:

sudo service mysql restart

3.3 权限分配:

进入mysql:mysql -u root -p,输入密码,运行代码

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

刷新权限:

FLUSH PRIVILEGES;

3.4  在windows中打开Navicat创建连接

如果是虚拟机:IP填内网IP

如果是服务器:填服务器IP

 

密码要注意是上面 IDENTIFIED BY 后面的密码 root(自行设定)

连接测试成功后,点确定

然后新建数据库myblog

然后如果有数据备份的,可以进行数据恢复(数据传输)

 

4. python环境和虚拟环境安装配置

Ubuntu14.04 为我们预装了Python2.7.6和Python3.4

如果是Ubuntu16.04 预装的是Python2.7.12和Python3.5.2

我们需要Python2也需要Python3,但是Python3.4有点老了,换成经典的Python3.5

4.1 安装Python3.5.2

安装依赖包

sudo apt-get install openssl
sudo apt-get install libssl-dev
(必须先安装这两个,再编译)

 

安装Python3.5.2

 

下载wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz

解压:tar zxvf Python-3.5.2.tgz
进入:cd Python-3.5.2
配置并安装到指定目录:./configure --prefix=/usr/local/python35

编译:make
安装:make install

 

出现错误:error: no acceptable C compiler found in $PATH

# for Ubuntu / Debian:

sudo apt-get install build-essential

 

创建软链接

sudo mv /usr/bin/python3 /usr/bin/python3-old
ln -s /usr/local/python35/bin/python3.5 /usr/bin/python3
ln -s /usr/local/python35/bin/pip3 /usr/bin/pip3

 

 

4.1 安装pip

sudo apt-get install python-pip

4.2 安装virtualenv

pip install virtualenv

4.3 安装virtualenvwrapper

pip install virtualenvwrapper

4.4 配置workon

vim ~/.bashrc
# 编辑bashrc文件

export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/workspace
export VIRTUALENVWRAPPER_SCRIPT=/usr/local/bin/virtualenvwrapper.sh #先find一下具体位置,替换
source /usr/local/bin/virtualenvwrapper.sh_lazy.sh #先find一下具体位置,替换

 配置完bashrc文件后,切记source一下,才能生效

source ~/.bashrc

 

然后尝试创建虚拟环境

mkvirtualenv mxonline

 

若出现:virtualenvwrapper could not find virtualenv in your path 错误

这是因为我们的virtualenv的路径不对,我需要创建一个软链接


先 find / -name virtualenv,看一下是哪个路径,我的是/usr/local/bin/virtualenv
然后创建软链接:sudo ln -s /usr/local/bin/virtualenv /usr/local/bin/virtualenv

然后再创建虚拟环境

mkvirtualenv mxonline

 

4.5 安装requirements.txt

 导出

在Windows导出requirements,复制内容到虚拟机新建的requirements.txt

Django==1.9.8
django-crispy-forms==1.6.1
django-formtools==2.0
django-pure-pagination==0.3.0
django-simple-captcha==0.4.6
DjangoUeditor==1.8.143
future==0.16.0
httplib2==0.9.2
MySQL-python==1.2.5
olefile==0.44
Pillow==4.1.1
PyMySQL==0.7.11
six==1.10.0
xlrd==1.0.0

 

 安装

pip install -i https://pypi.douban.com/simple/ -r requirements.txt

 

若遇到 EnvironmentError: mysql_config not found

解决方案

sudo apt-get install libmysqlclient-dev

 

解决问题后,再重新

pip install -i https://pypi.douban.com/simple/ -r requirements.txt

  

我在Ubuntu中安装MySQL-python时出现错误

failed building wheel for mysql-python ubuntu

解决方法,安装这两个

apt-get python-dev libmysqlclient-dev

原文参考:http://codeinthehole.com/tips/how-to-set-up-mysql-for-python-on-ubuntu/

 

5. 安装git

sudo apt-get install git

 clone项目到虚拟机

git clone git@github.com:BingmingWong/mxonline.git

 注意要检查下,settings.py文件的数据库名和密码是否和我们设置的一样

 

6. 测试项目是否可以正常运行

python manage.py runserver 0.0.0.0:8000

若出现django.db.migrations.exceptions.NodeNotFoundError

则把所有apps下的migration删除

rm -r migrations

然后再在Windows中输入192.168.0.101:8000看是否可以访问,所有静态文件也可以正常访问

--------

7. uwsgi的安装配置

 安装

pip install uwsgi

测试uwsgi是否可以拉起整个项目

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

执行完后,到Windows中输入192.168.0.101:8000看是否可以访问(正常可以访问了,但是没有css样式,因为我们没有配置nginx)

 

配置uwsgi

在项目根目录新建uwsgi.ini

# mysite_uwsgi.ini file
[uwsgi]

# Django-related settings
# the base directory (full path)
chdir           = /home/alon/mxonline# Django's wsgi file
module          = MxOline.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/alon/.virtualenvs/mxonline

 

 

8. 配置nginx

 配置

在项目根目录下,新建uc_nginx.conf

vim uc_nginx.conf

 

# the upstream component nginx needs to connect to
upstream django {
# server unix:///path/to/your/mysite/mysite.sock; # for a file socket
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.0.101; # 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 /home/alon/mxonline/media; # 指向django的media目录
}

location /static {
alias /home/alon/mxonline/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 installed
}
}

 创建完成后

拷贝或者创建软链接到nginx目录

#拷贝
cp uc_nginx.conf /etc/nginx/conf.d/

# 创建软链接
sudo ln -s uc_nginx.conf /etc/nginx/conf.d/

 

配置完成后,记得重启Nginx

sudo service nginx restart

  

9. 静态文件收集

先修改settings.py配置

添加下面一行内容:

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

 注释掉

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static")
]

 执行收集命令

python manage.py collectstatic

 

10. 测试uwsgi和nginx是否配置成功

cd到uwsgi.ini所在目录,运行如下命令

uwsgi -i uwsgi.ini

 

然后到虚拟机和Windows都输入ip:192.168.0.101

如果都可以正常访问我们的项目,就说明配置成功了。(样式,静态文件都可以访问)

 

11. uwsgi的重启

关闭uwsgi后(uwsgi在运行项目中),uwsgi会自动重启

关闭

pkill -f uwsgi

 

查询

ps aux|grep uwsgi

 

会发现,kill掉后又自动重启

 

12. 将debug关闭

在真正的生产环境当中,应该将debug关闭,否则一旦访问页面出错,会暴露我们网站的一些信息。

 

 

附:

以上是在deepin系统下进行部署。

如果是在centos下进行部署,要注意一个权限的问题。

在centos下nginx运行是以nginx用户运行的,对一些目录是没有权限的。

我们需要修改下nginx的配置,让其以root用户运行。

vim /etc/nginx/nginx.conf
# 在第一行,将www-data改成root

 

然后,kill掉nginx

pkill -f ginx

 

然后直接运行nginx,回车

nginx

 

 

还有可能,样式没有,我们只要修改下样式目录的访问权限即可

 

 

posted @ 2017-07-02 19:07  王一白  阅读(1218)  评论(0编辑  收藏  举报