1. 程式人生 > >ubuntu 14.04 部署Django項目

ubuntu 14.04 部署Django項目

manage lis shu 腳本文件 led art 收集 unicorn 步驟

一、購買服務器

  推薦 vultr的服務器,還可以搭梯子,鏈接:傳送門

  操作系統建議選 ubuntu 14.04 64位

二、購買域名

  詳細見百度

三、安裝相關軟件

# 創建一個叫mu的用戶
root@localhost:~# useradd -m -s /bin/bash mu

# 把新創建的用戶加入超級權限組
root@localhost:~# usermod -a -G sudo mu

# 為新用戶設置密碼
# 註意在輸密碼的時候不會有字符顯示,接著敲即可
root@localhost:~# passwd mu

# 切換到創建的新用戶
root@localhost:~#
su - mu # 切換成功 mu@localhost:~$

  更新系統

mu@localhost:~$ sudo apt-get update
mu@localhost:~$ sudo apt-get upgrade

  安裝Nginx、pip、virtualenv

mu@localhost:~$ sudo apt-get install nginx
mu@localhost:~$ sudo apt-get install git python3 python3-pip
mu@localhost:~$ sudo pip3 install virtualenv

  啟動Nginx

mu@localhost:~$ 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以下的兩個也是類似的創建方法。

mu@localhost:~$ mkdir -p ~/sites/tianbaoo.fun
mu@localhost:~$ cd ~/sites/tianbaoo.fun
mu@localhost:~/sites/tianbaoo.fun$ virtualenv --python=python3 env

# 拉取項目文件
mu@localhost:~/sites/tianbaoo.fun$ git clone https://github.com/tianbaoo/blog-sky.git

# 激活虛擬環境並安裝依賴
mu@localhost:~/sites/tianbaoo.fun$ source env/bin/activate
(env) mu@localhost:~/sites/tianbaoo.fun$ cd blog-sky/
(env) mu@localhost:~/sites/tianbaoo.fun/blog-sky$ pip install -r requirements.txt

# 收集靜態文件
(env) mu@localhost:~/sites/tianbaoo.fun/blog-sky$ python manage.py collectstatic

# 生成數據庫
(env) mu@localhost:~/sites/tianbaoo.fun/blog-sky$ python manage.py migrate

# 創建超級用戶
(env) mu@localhost:~/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) mu@localhost:~/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) mu@localhost:~/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) mu@localhost:~/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項目

mu@localhost:~$ mkdir -p ~/sites/ackblog
mu@localhost:~$ cd ~/sites/ackblog
mu@localhost:~/sites/ackblog$ virtualenv --python=python3 env

# 拉取項目文件
mu@localhost:~/sites/ackblog$ git clone https://github.com/tianbaoo/ackblog.git

# 激活虛擬環境並安裝依賴
mu@localhost:~/sites/ackblog$ source env/bin/activate
(env) mu@localhost:~/sites/ackblog$ cd blog-sky/
(env) mu@localhost:~/sites/ackblog/ackblog$ pip install -r requirements.txt

# 收集靜態文件
(env) mu@localhost:~/sites/ackblog/ackblog$ python manage.py collectstatic

# 生成數據庫
(env) mu@localhost:~/sites/ackblog/ackblog$ python manage.py migrate

# 創建超級用戶
(env) mu@localhost:~/sites/ackblog/ackblog$ python manage.py createsuperuser

  在 /etc/nginx/sites-available/tianbaoo.fun文件裏我們寫了第一個項目blog-sky的server

  現在我們同樣在裏面寫入第二個項目ackblog的server信息

技術分享圖片
# 這個文件裏包含了三個項目的server
server {
    charset utf-8;
    listen 80;
    server_name 207.246.124.116;

    location /static {
    }

    location / {
        proxy_set_header Host $host;
        proxy_pass http://unix:/tmp/tianbaoo.fun.socket;
    }
}
server {
    charset utf-8;
    listen 6060;
    server_name 207.246.124.116;

    location /static {
        alias /home/mu/sites/awmonline/AwmOnline/static;
    }

    location / {
        proxy_set_header Host $host;
        proxy_pass http://unix:/tmp/awmonline.socket;
    }
}
server {
    charset utf-8;
    listen 5050;
    server_name 207.246.124.116;

    location /static {
        alias /home/mu/sites/ackblog/ackblog/static;
    }

    location / {
        proxy_set_header Host $host;
        proxy_pass http://unix:/tmp/ackblog.socket;
    }
}
View Code

  添加完server之後要在ackblog的虛擬環境中安裝gunicorn

(env) mu@localhost:~/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) mu@localhost:~/sites/ackblog/ackblog$ sudo start gunicorn-ackblog

  以後如果更新了代碼,只要運行下面的命令重啟一下 Nginx 和 Gunicorn 就可以使新的代碼生效了:

sudo service nginx reload
sudo restart gunicorn-ackblog

  

  第三個項目awmonlin過程步驟和第二個的步驟是一樣的,就是有些參數不同

mu@localhost:~$ mkdir -p ~/sites/awmonline
mu@localhost:~$ cd ~/sites/awmonline
mu@localhost:~/sites/awmonline$ virtualenv --python=python3 env

# 拉取項目文件
mu@localhost:~/sites/awmonline$ git clone https://github.com/tianbaoo/AwmOnline.git

# 激活虛擬環境並安裝依賴
mu@localhost:~/sites/awmonline$ source env/bin/activate
(env) mu@localhost:~/sites/awmonline$ cd AwmOnline/
(env) mu@localhost:~/sites/awmonline/AwmOnline$ pip install -r requirements.txt

# 收集靜態文件
(env) mu@localhost:~/sites/awmonline/AwmOnline$ python manage.py collectstatic

# 生成數據庫
(env) mu@localhost:~/sites/awmonline/AwmOnline$ python manage.py migrate

# 創建超級用戶
(env) mu@localhost:~/sites/awmonline/AwmOnline$ python manage.py createsuperuser

  在 /etc/nginx/sites-available/tianbaoo.fun文件裏我們寫了第一個項目blog-sky的server和第二個項目ackblog的server

  現在我們同樣在裏面寫入第三個項目AwmOnline的server信息

技術分享圖片
server {
    charset utf-8;
    listen 80;
    server_name 207.246.124.116;

    location /static {
    }

    location / {
        proxy_set_header Host $host;
        proxy_pass http://unix:/tmp/tianbaoo.fun.socket;
    }
}
server {
    charset utf-8;
    listen 6060;
    server_name 207.246.124.116;

    location /static {
        alias /home/mu/sites/awmonline/AwmOnline/static;
    }

    location / {
        proxy_set_header Host $host;
        proxy_pass http://unix:/tmp/awmonline.socket;
    }
}
server {
    charset utf-8;
    listen 5050;
    server_name 207.246.124.116;

    location /static {
        alias /home/mu/sites/ackblog/ackblog/static;
    }

    location / {
        proxy_set_header Host $host;
        proxy_pass http://unix:/tmp/ackblog.socket;
    }
}
View Code

  添加完server之後要在awmonline的虛擬環境中安裝gunicorn

(env) mu@localhost:~/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) mu@localhost:~/sites/awmonline/AwmOnlin$ sudo start gunicorn-awmonline

  以後如果更新了代碼,只要運行下面的命令重啟一下 Nginx 和 Gunicorn 就可以使新的代碼生效了:

sudo service nginx reload
sudo restart gunicorn-awmonline

ubuntu 14.04 部署Django項目