ubuntu 14.04 部署Django項目
一、購買服務器
推薦 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項目