ubuntu 14.04 部署Django项目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ubuntu 14.04 部署Django项目相关的知识,希望对你有一定的参考价值。

一、购买服务器

  推荐 Vultr 的服务器,还可以搭梯子,链接:传送门

  操作系统建议选 ubuntu 14.04 64位

二、购买域名

  详细见百度

三、安装相关软件

#创建一个叫mu的用户
[email protected]:~# useradd -m -s /bin/bash mu

####把新创建的用户加入超级权限组
[email protected]:~# usermod -a -G sudo mu

###为新用户设置密码
##注意在输密码的时候不会有字符显示,接着敲即可
[email protected]:~# passwd mu

#切换到创建的新用户
[email protected]:~# su - mu

#切换成功
[email protected]:~$

更新系统

[email protected]:~$ sudo apt-get update
[email protected]:~$ sudo apt-get upgrade
  

安装nginx、pip、virtualenv

[email protected]:~$ sudo apt-get install nginx
[email protected]:~$ sudo apt-get install git python3 python3-pip
[email protected]:~$ sudo pip3 install virtualenv

  启动Nginx

[email protected]:~$ sudo service nginx start

  在项目的配置文件中修改成如下:

DEBUG = False
ALLOWED_HOSTS = [‘*‘]
STATIC_URL = ‘/static/‘
#STATICFILES_DIRS = (
#os.path.join(BASE_DIR,‘static‘),
#)
#加入下面的配置
STATIC_ROOT = os.path.join(BASE_DIR, ‘static‘)

生成安装依赖文件,在manage.py目录下打开cmd运行以下命令

pip freeze > requirements.txt

将项目推送到github上

  一台服务器可能部署多个网站,所有网站代码都放在 sites/ 目录下。

home/mu/
sites/
tianbaoo.fun/
env
blog-sky
ackblog/
env
ackblog
awmonline/
env
AwmOnlin

上面是三个网站的文件,各自有各自的env和项目

  举例如何创建tianbaoo.fun以下的两个也是类似的创建方法。

[email protected]:~$ mkdir -p ~/sites/tianbaoo.fun
[email protected]:~$ cd ~/sites/tianbaoo.fun
[email protected]:~/sites/tianbaoo.fun$ virtualenv --python=python3 env

#拉取项目文件
[email protected]alhost:~/sites/tianbaoo.fun$ git clone https://github.com/tianbaoo/blog-sky.git

#激活虚拟环境并安装依赖
[email protected]:~/sites/tianbaoo.fun$ source env/bin/activate
(env) [email protected]:~/sites/tianbaoo.fun$ cd blog-sky/
(env) [email protected]:~/sites/tianbaoo.fun/blog-sky$ pip install -r requirements.txt

#收集静态文件
(env) [email protected]:~/sites/tianbaoo.fun/blog-sky$ python manage.py collectstatic

#生成数据库
(env) [email protected]:~/sites/tianbaoo.fun/blog-sky$ python manage.py migrate

#创建超级用户
(env) [email protected]:~/sites/tianbaoo.fun/blog-sky$ python manage.py createsuperuser

四、配置Nginx

  先在服务器的 /etc/nginx/sites-available/ 目录下新建一个配置文件,文件名我一般就设置为域名

/etc/nginx/sites-available/tianbaoo.fun

server {
charset utf-8;
listen 80;
server_name tianbaoo.fun;

location /static {
alias /home/mu/sites/tianbaoo.fun/blog-sky/static;
}

location / {
proxy_set_header Host $host;
#/tmp/tianbaoo.fun中的 tianbaoo.fun是sites目录下的文件夹名
proxy_pass http://unix:/tmp/tianbaoo.fun.socket;
}
}

 多个网站项目时,在上面的文件里边多写几个server监听不同的端口即可,下面会有介绍。

  建立软连接

(env) [email protected]:~/sites/tianbaoo.fun/blog-sky$ sudo ln -s /etc/nginx/sites-available/tianbaoo.fun /etc/nginx/sites-enabled/tianbaoo.fun

  只能看到 Nginx 欢迎页面的问题:

    sites-enabled文件夹里默认的default文件中的配置覆盖了自己写的配置,导致配置不生效,把default文件删掉就可以正常

  

  安装gunicorn

(env) [email protected]:~/sites/tianbaoo.fun/blog-sky$ pip install gunicorn

  自动启动 Gunicorn

  写一个启动脚本,这样当服务器重启后能自动引导 Gunicorn 的启动。脚本位于 /etc/init/ 目录下,且脚本文件名必须以 .conf 结尾:

#/etc/init/gunicorn-tianbaoo.fun.conf

start on net-device-up
stop on shutdown

respawn

setuid mu
chdir /home/mu/sites/tianbaoo.fun/blog-sky

exec ../env/bin/gunicorn --bind unix:/tmp/tianbaoo.fun.socket blog-sky.wsgi:application

用 start 命令启动 Gunicorn

(env) [email protected]:~/sites/tianbaoo.fun/blog-sky$ sudo start gunicorn-tianbaoo.fun

#以后如果更新了代码,只要运行下面的命令重启一下 Nginx 和 Gunicorn 就可以使新的代码生效了:
sudo service nginx reload
sudo restart gunicorn-tianbaoo.fun

五、一个服务器部署多个网站
  我们现在有三个网站项目文件夹:tianbaoo.fun、ackblog、awmonline,文件夹里对应着它们自己的虚拟环境和实际项目文件

home/mu/
sites/
tianbaoo.fun/
env
blog-sky
ackblog/
env
ackblog
awmonline/
env
AwmOnlin

我们现在已经成功运行了tianbaoo.fun文件夹里的blog-sky项目,现在要来多添加ackblog和AwmOnline项目。

  下面先加ackblog项目

[email protected]:~$ mkdir -p ~/sites/ackblog
[email protected]:~$ cd ~/sites/ackblog
[email protected]:~/sites/ackblog$ virtualenv --python=python3 env

#拉取项目文件
[email protected]:~/sites/ackblog$ git clone https://github.com/tianbaoo/ackblog.git

#激活虚拟环境并安装依赖
[email protected]:~/sites/ackblog$ source env/bin/activate
(env) [email protected]:~/sites/ackblog$ cd blog-sky/
(env) [email protected]:~/sites/ackblog/ackblog$ pip install -r requirements.txt

#收集静态文件
(env) [email protected]:~/sites/ackblog/ackblog$ python manage.py collectstatic

#生成数据库
(env) [email protected]:~/sites/ackblog/ackblog$ python manage.py migrate

#创建超级用户
(env) [email protected]:~/sites/ackblog/ackblog$ python manage.py createsuperuser

 在 /etc/nginx/sites-available/tianbaoo.fun文件里我们写了第一个项目blog-sky的server

  现在我们同样在里面写入第二个项目ackblog的server信息

View Code

  添加完server之后要在ackblog的虚拟环境中安装gunicorn

(env) [email protected]:~/sites/ackblog/ackblog$ pip install gunicorn

设置ackblog的自启动gunicorn脚本

#/etc/init/gunicorn-ackblog.conf

start on net-device-up
stop on shutdown

respawn

setuid mu
chdir /home/mu/sites/ackblog/ackblog

exec ../env/bin/gunicorn --bind unix:/tmp/ackblog.socket ackblog.wsgi:application

(env) [email protected]:~/sites/ackblog/ackblog$ sudo start gunicorn-ackblog

 以后如果更新了代码,只要运行下面的命令重启一下 Nginx 和 Gunicorn 就可以使新的代码生效了:

sudo service nginx reload
sudo restart gunicorn-ackblog
  

  第三个项目awmonlin过程步骤和第二个的步骤是一样的,就是有些参数不同

[email protected]:~$ mkdir -p ~/sites/awmonline
[email protected]:~$ cd ~/sites/awmonline
[email protected]:~/sites/awmonline$ virtualenv --python=python3 env

#拉取项目文件
[email protected]:~/sites/awmonline$ git clone https://github.com/tianbaoo/AwmOnline.git

#激活虚拟环境并安装依赖
[email protected]:~/sites/awmonline$ source env/bin/activate
(env) [email protected]:~/sites/awmonline$ cd AwmOnline/
(env) [email protected]:~/sites/awmonline/AwmOnline$ pip install -r requirements.txt

#收集静态文件
(env) [email protected]:~/sites/awmonline/AwmOnline$ python manage.py collectstatic

#生成数据库
(env) [email protected]:~/sites/awmonline/AwmOnline$ python manage.py migrate

#创建超级用户
(env) [email protected]:~/sites/awmonline/AwmOnline$ python manage.py createsuperuser

在 /etc/nginx/sites-available/tianbaoo.fun文件里我们写了第一个项目blog-sky的server和第二个项目ackblog的server

  现在我们同样在里面写入第三个项目AwmOnline的server信息

View Code

  添加完server之后要在awmonline的虚拟环境中安装gunicorn

(env) [email protected]:~/sites/awmonline/AwmOnline$ pip install gunicorn

  设置awmonline的自启动gunicorn脚本

#/etc/init/gunicorn-awmonline.conf

start on net-device-up
stop on shutdown

respawn

setuid mu
chdir /home/mu/sites/awmonline/AwmOnlin

exec ../env/bin/gunicorn --bind unix:/tmp/awmonline.socket AwmOnlin.wsgi:application

(env) [email protected]:~/sites/awmonline/AwmOnlin$ sudo start gunicorn-awmonline

以后如果更新了代码,只要运行下面的命令重启一下 Nginx 和 Gunicorn 就可以使新的代码生效了:

sudo service nginx reload
sudo restart gunicorn-awmonline

以上是关于ubuntu 14.04 部署Django项目的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ubuntu 14.04 上使用 nginx 和 gunicorn 部署 django 1.8 应用程序

ubuntu部署django

在云服务部署个人的Django项目

ubuntu+apache+python+django部署

Nginx, django, gunicorn, ubuntu 14.04 (13: Permission denied) 同时连接到上游

使用openshit在ubuntu14.04下一键部署openstack(juno版本)