在裸機centos7系統中部署django項目的過程

概要

本文用一臺安裝了centos7.5系統的裸奔Linux機器(固然是虛擬機)詳細講解從無到有部署django項目的過程。html

安裝必要的工具

配置yum源

至於什麼是yum源你們請自行百度,本人用的是阿里雲的yum源,所以須要在裸機上配置一下:python

進入yum源的目錄

cd /etc/yum.repos.d/

查看yum源文件

ls -l

 

配置阿里雲yum源

1.好習慣,備份yum源mysql

mkdir repo_bak
mv *.repo repo_bak/
2.下載阿里雲repo文件
wget http://mirrors.aliyun.com/repo/Centos-7.repo
3.清空yum緩存而且生成新的yum緩存
yum clean all
yum makecache
4.安裝軟件擴展源
yum install -y epel-release

安裝pthon3

推薦利用編譯的方式安裝Python3。linux

安裝依賴環境——很是重要

yum install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y

下載解壓源碼包

須要注意的是,Linux系統的第三方軟件都約定俗成的安裝在/opt目錄下~所以咱們須要把這個包下載到/opt目錄下nginx

cd /opt
wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz

解壓sql

tar -zxvf Python-3.6.5.tgz

開始編譯安裝

configure數據庫

進入解壓出出來的Python-3.6.5目錄,裏面有一個綠色的可執行文件configure~django

這一步通常用來生成 Makefile,爲下一步的編譯作準備,你能夠經過在 configure 後加上參數來對安裝進行控制,好比代碼:vim

./configure --prefix=/opt/py365

上面的意思是將該軟件安裝在 /opt/py365 下面,執行文件就會安裝在 /opt/py365/bin (而不是默認的 /usr/local/bin),資源文件就會安裝在 /usr/share(而不是默認的/usr/local/share)。windows

同時一些軟件的配置文件你能夠經過指定 --sys-config= 參數進行設定。有一些軟件還能夠加上 --with、--enable、--without、--disable 等等參數對編譯加以控制,你能夠經過容許 ./configure --help 察看詳細的說明幫助。

——我這裏沒有加後面的參數,直接執行 ./configure,默認安裝在了/usr/local/bin中~

make

這一步就是編譯,大多數的源代碼包都通過這一步進行編譯(固然有些perl或python編寫的軟件須要調用perl或python來進行編譯)。

若是 在 make 過程當中出現 error ,你就要記下錯誤代碼(注意不只僅是最後一行),而後你能夠向開發者提交 bugreport(通常在 INSTALL 裏有提交地址),或者你的系統少了一些依賴庫等,這些須要本身仔細研究錯誤代碼。

make 的做用是開始進行源代碼編譯,以及一些功能的提供,這些功能由他的 Makefile 設置文件提供相關的功能,好比 make install 通常表示進行安裝,make uninstall 是卸載,不加參數就是默認的進行源代碼編譯。

make 是 Linux 開發套件裏面自動化編譯的一個控制程序,他經過藉助 Makefile 裏面編寫的編譯規範進行自動化的調用 gcc 、ld 以及運行某些須要的程序進行編譯的程序。通常狀況下,他所使用的 Makefile 控制代碼,由 configure 這個設置腳本根據給定的參數和系統環境生成。

make install

這條命令來進行安裝(固然有些軟件須要先運行 make check 或 make test來進行一些測試),這一步通常須要你有 root 權限(由於要向系統寫入文件)

安裝虛擬環境包virtualenv及管理工具virtualenvwrapper

我本身以前總結過兩篇相關的博客(原創哦~23333):

linux下虛擬環境模塊virtualenv及管理工具virtualenvwrapper的使用

windows與mac下virtualenv與Pycharm的結合使用

安裝nginx

提示

nginx的安裝也推薦編譯安裝!

因爲本文用的是一個裸機,若是你們以前用yum安裝了nginx,請卸載yum安裝的nginx!!!

yum remove nginx -y

解決軟件包依賴——特別重要

yum install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y

下載nginx的源碼包並解壓

我這裏用的是淘寶的Tengine——在原始nginx上擴展了許多功能~很強大~

須要注意的是,Linux系統的第三方軟件都約定俗成的安裝在/opt目錄下~所以咱們須要把這個包下載到/opt目錄下

cd /opt
wget http://tengine.taobao.org/download/tengine-2.3.1.tar.gz

解壓tengine包:

tar -zxvf tengine-2.3.1.tar.gz

安裝tengine

進入源碼目錄:

cd tengine-2.3.1/

裏面有一個綠色的可執行文件configure

這裏咱們指定將tengine安裝在/opt/tngx231這個目錄下:

./configure --prefix=/opt/tngx231/

而後進行編譯安裝:

make && make install

結束後~咱們能夠看到新生成了一個/opt/tngx321目錄~

安裝好的nginx放在了 /opt/tngx231/sbin/ 這個目錄下了~

修改環境變量讓nginx命令生效

安裝完成後須要每次用/opt/tngx231/sbin/ 這個目錄加上nginx才能操做,很煩躁,咱們能夠經過修改環境變量,之後只須要執行nginx就能夠啓用nginx的操做了~

<1>首先確認下當前的環境變量有哪些目錄:         
echo $PATH   
#/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
<2> 編輯/etc/profile文件
vim /etc/profile 
<3>在文件的最後一行輸入 :
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/tngx231/sbin"
並 :wq  保存退出~~
<4>最後必定要記得source一下 /etc/profile 文件!
source /etc/profile

nginx的啓停命令

在沒有修改環境變量以前,咱們須要進入nginx的安裝目錄(本文是在 /opt/tngx231/sbin/ )這樣執行:

./nginx #啓動
./nginx -s stop #關閉
./nginx -s reload #從新加載

修改了環境變量後能夠直接這樣執行:

nginx #啓動
nginx -t #查看nginx狀態
nginx -s stop #關閉
nginx -s reload #從新加載

測試nginx的服務

安裝完成後別忘了檢測一下nginx的服務

netstat -tunlp |grep 80
curl -I 127.0.0.1

結果以下:

若是訪問不了,檢查selinux,iptables
#關防火牆
systemctl disable firewalled
setenforce 0

項目部署過程

建立虛擬環境並在虛擬環境中安裝必要的包

利用virtualenvwrapper工具建立虛擬環境

mkvirtualenv whw_dj1

建立完虛擬環境後直接會進入這個虛擬環境。

在這個環境中安裝項目須要的包,安裝過程略(直接用pip安裝便可),結果以下:

這裏須要記錄一下uwsgi的執行路徑以及虛擬環境的目錄,後面要用:

uwsgi的執行路徑

特別注意:若是在虛擬環境中運行的話,後面執行uwsgi命令須要用絕對路徑的時候必定是虛擬環境中的這個絕對路徑!

(補充說明一點:若是虛擬環境中沒有安裝uwsgi模塊的話會顯示外部環境中的位置,所以必定要記得在虛擬環境中安裝uwsgi模塊!)

(whw_di1) [root@bogon opt]# which uwsgi /root/Envs/whw_di1/bin/uwsgi

虛擬環境的目錄

特別注意:若是在虛擬環境中運行的話,後面uwsgi的配置文件必定要寫當前虛擬環境下的uwsgi的絕對路徑!

(whw_di1) [root@bogon opt]# cdvirtualenv 
(whw_di1) [root@bogon whw_di1]# pwd
/root/Envs/whw_di1

項目文件settings與靜態文件相關的配置

將項目傳到服務器的/opt目錄~進入項目的二級目錄,配置一下里面的settings文件,這裏只寫與部署相關的配置

 
 

  # 線上部署必定要記得把DEBUG改爲False
  DEBUG = False

# 94這個ip是個人云服務器的Ip,通常狀況下是這樣配置
# ALLOWED_HOSTS = ['localhost','94.191.41.167','0.0.0.0:8000','127.0.0.1' ]
# 本身測試的話直接allow全部的ip就行了
ALLOWED_HOSTS = ['*' ]

# sqllit數據庫的配置
DATABASES = {
     'default': {
         'ENGINE': 'django.db.backends.sqlite3',
         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
     }
 }

# 靜態文件配置
# 第一個參數是將靜態文件copy到服務器的目錄的位置
STATIC_ROOT='/opt/whw_static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'staticfiles'),
]


## mysql的配置——本文用的是sqllit,所以這個配置註釋掉
#DATABASES = {
#    'default': {
#        'ENGINE': 'django.db.backends.mysql',#引擎,選mysql
#        'NAME':'whw1',#要鏈接的數據庫,鏈接前須要建立好
#        'USER':'root',#鏈接數據庫的用戶名
#        'PASSWORD':'123',#鏈接數據庫的密碼
#        'HOST':'127.0.0.1',#鏈接主機,默認本本機
#        'PORT':3306,#端口 默認3306
#        #Django中設置數據庫的嚴格模式
#       'OPTIONS':{
#           'init_command':"set sql_mode='STRICT_TRANS_TABLES' ",
#           }
#       }
#   }

因爲uwsgi不能處理項目的靜態文件,咱們須要用nginx來處理,所以須要將項目的靜態文件copy到STATIC_ROOT參數對應的位置:

python3  /opt/whw/manage.py  collectstatic

whw是個人項目的第一層目錄,就是個人項目的名字。

uwsgi的配置

提醒一點:須要提早在虛擬環境中安裝好uwsgi包~~

uwsgi.ini文件的配置

配置uwsgi以前須要新建一個uwsgi.ini文件。

因爲每一個項目對應一個uwsgi.ini文件,這裏建議你們將這個文件建立在本身項目的第一層目錄中

cd /opt/whw/
touch uwsgi.ini

而後編輯這個文件

vim uwsgi.ini

文件中的配置以下:

[uwsgi]
# Django-related settings
# the base directory (full path)
#項目的絕對路徑,定位到項目的第一層
chdir = /opt/whw
# Django's wsgi file
# 找到項目第二層的wsgi文件
module = whw.wsgi
# the virtualenv (full path)
# 找到虛擬環境的絕對路徑~注意最後不要加/
home = /root/Envs/whw_di1
# process-related settings
# master
# 主進程
master = true
# maximum number of worker processes
# 開啓uwsgi的多進程數,根據cpu核數來定義
processes = 16
# the socket (use the full path to be safe
# 基於socket連接運行項目,只有與nginx結合的時候,才使用socket形式
socket = 0.0.0.0:8000
# 當你沒用nginx,調試項目的時候,使用http形式 
#http =  0.0.0.0:8000
# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum = true
# 記錄pid與日誌的文件 pidfile
=uwsgi.pid daemonize=uwsgi.log

啓動uwsgi

進入項目的第一層目錄,這裏有寫好的uwsgi.ini文件,執行這個文件:

uwsgi --ini  uwsgi.ini

特別注意,這裏用的都是相對路徑~真正的執行命令實際上是這樣的:

/root/Envs/whw_di1/bin/uwsgi --ini /opt/whw/uwsgi.ini

——這樣的執行結果是在前臺運行的,咱們的終端會夯住,若是關掉這個終端uwsgi的進行也會關掉,須要咱們再打開一個終端進行下一步的操做~

——讓uwsgi後臺執行的話~只須要在命令裏面加上-d參數就行了:

uwsgi -d --ini uwsgi.ini

nginx的配置

nginx的配置文件是 /opt/tngx231/conf/nginx.conf 。

# 這裏須要說明一下: 若是安裝的是nginx不是tengine,且沒有指定安裝目錄,那麼它的配置文件默認是 /etc/nginx目錄中的nginx.conf文件

編輯這個文件

vim /opt/tngx231/conf/nginx.conf 

咱們只配置第一個server裏面的參數:

server {
      listen 80; server_name localhost; location / {
# 支持uwsgi的配置 include uwsgi_params;
# ip與端口是uwsgi服務器的ip與端口~本例兩者在一個機器裏所以用環回地址 uwsgi_pass
127.0.0.1:8000; #root html; #index index.html index.htm;
}

# 存放靜態文件的配置
location
/static{ alias /opt/whw_static; }     # xxxxxxxxxxxxxxx }

nginx配置完後啓動nginx服務:

nginx

若是中途修改了nginx.conf的參數的話,保存完後須要重啓nginx服務,記得在重啓前-t一下查看nginx的狀態:

(whw_di1) [root@bogon whw]# nginx -t
nginx: the configuration file /opt/tngx231//conf/nginx.conf syntax is ok
nginx: configuration file /opt/tngx231//conf/nginx.conf test is successful
(whw_di1) [root@bogon whw]# 
(whw_di1) [root@bogon whw]# nginx -s reload

至此,項目部署的配置就這麼多了。

寫在最後

請求流程簡介

(1)用戶發起請求
(2)訪問IP(或者訪問域名www.whw.com) 請求走到nginx這一層代理
(3)nginx直接轉發(uwsgi_pass)給後端django的地址
(4)django處理完畢
(5)響應給nginx
(6)nginx返回結果給瀏覽器界面

關於數據庫的配置說明

看到最後,聰明的你確定看出端倪來了:數據庫用的是sqllit!爲何不用實際生產環境中經常使用的MySQL呢?

這是由於Red Hat Enterprise Linux/CentOS 7.0發行版已將默認的數據庫從 MySQL 切換到 MariaDB,實際中,咱們既能夠進行配置,讓數據庫在MySQL與MariaDB之間切換,也能夠將默認的MariaDB卸載掉安裝純淨版的MySQL。關於二者有什麼差異我還沒怎麼學習。

關於數據庫的相關配置會在另一篇文章中具體寫一下~

相關文章
相關標籤/搜索