記一次在 Linux 上建立 Django 應用的過程

0 環境與目標

0.1 環境

  • 服務器端
    • 操做系統: Ubuntu 14.04.2 LTS
    • 運行時: Python 3.4.0
  • 客戶機端
    • 瀏覽器: Firefox 37.0.1
    • 數據庫客戶端: Navicat Premium 11.1.10

0.2 目標

在服務器端開始一個 Django 工程,採用 PostgreSQL 數據庫。python

0.3 要點

  • Django 安裝
  • PostgreSQL 安裝
  • Django 初始化數據庫
  • 啓動Django 服務

1 實施

1.1 Django 準備

1.1.1 安裝 Django

這裏安裝最新的 Djangolinux

$sudo pip3 install django

若是是在原有基礎上升級安裝 Django,則輸入如下命令nginx

$sudo pip3 install django --upgrade

pip 會將舊版本的 Django 卸載後安裝最新版。 注意,這裏使用的命令是 sudo pip3 而不是簡單地使用 pip,是由於沒有在 virtualenv 環境下安裝,全部操做都是在操做系統實環境下完成的,而 Ubuntu 缺省的 Python 環境是 Python 2,不少系統基礎軟件都是基於這個版本的 Python 開發,強行改成缺省使用 Python 3 會遇到各類蛋疼的狀況(不要問我爲何知道)。之因此採用這種方式,是由於這裏只是我我的用來練習的項目,沒有生產意義,偷懶沒有嚴格作隔離控制。在生產上作開發部署,常常會有多版本並行使用的需求,須要根據實際狀況配置開發和生產環境,這裏不作詳細討論。git

1.1.2 建立 Django 工程

這裏先建立一個名爲 teamtea 的項目web

$cd workspace/django
$django-admin starproject teamtea

沒錯,如今能夠直接使用 Django 的工程管理命令 django-admin 了。 這裏將工程建立好以後先放在一邊,稍後進行配置。sql

1.2 PostgreSQL 準備

1.2.1 安裝 PostgreSQL

Ubuntu 官方源的 PostgreSQL 老是會慢一個小版本,版本控表示不愉快,因而按照官方網站上的說明安裝了最新版。 首先將 PostgreSQL 官方源添加到 apt 源列表。在 /etc/apt/source.list.d/ 目錄下建立 pgdg.list 文件,文件內容爲數據庫

deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main

這裏是針對 Ubuntu 14.04 的源,其餘版本的系統能夠在文檔中找到相關的源。 而後導入源的簽名。django

$wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

至此就將 PostgreSQL 的官方源添加到源列表中了。接下來更新包列表,安裝須要用到的 postgresql-9.4postgresql-server-dev-9.4 兩個包。ubuntu

$sudo apt-get update
$sudo apt-get install postgresql-9.4 postgresql-server-dev-9.4

至此完成了 PostgreSQL 9.4 的基本安裝。 一樣須要注意的是,這裏的數據庫版本選擇純粹由於我的喜愛,實際開發和生產過程當中應按需選擇版本。瀏覽器

1.2.2 配置訪問權限

安裝完 PostgreSQL 以後會自動在系統中建立名爲 postgres 的用戶,便是 PostgreSQL administrator 用戶,對 PostgreSQL 的操做最好都由這個用戶來進行,儘可能避免使用 root 用戶。爲了使用這個用戶,首先須要修改它的密碼。

$sudo passwd postgres

postgres用戶密碼和訪問

以上是操做系統中的 postgres 用戶的操做,而咱們知道數據庫管理系統也有用戶的概念,PostgreSQL 的管理員用戶也是 postgres,爲了可以使用它管理數據庫,一樣須要設置密碼。首先登陸到 postgres 用戶下,

$su postgres

而後進入 PostgreSQL 的管理程序 psql,此時是不須要密碼的,由於訪問控制項缺省爲 peer 即只容許本地操做系統上的 postgres 用戶訪問。

$psql

此時命令提示符變爲 postgres=#,說明進入了 psql 環境,設置密碼,

postgres=# \password

而後退出 psql 環境,

postgres=# \q

以後修改 postgres 用戶的訪問控制項,編輯 /etc/postgresql/9.4/main/pg_hba.conf 文件,將

local   all             postgres                                peer

修改成

local   all             postgres                                md5

從新載入配置文件使修改生效,

$pg_ctlcluster 9.4 main reload

注意 Debian 系的 Linux 採用的是 pg_ctlcluster 命令,而非 pg_ctl 命令。 此時再次嘗試使用 psql 就須要輸入密碼了。

爲了能使客戶機上的 Navicat 登陸管理 PostgreSQL,須要開啓對網絡端口的監聽,編輯 /etc/postgresql/9.4/main/postgresql.conf 文件,將

#listen_addresses = 'localhost'

修改成

listen_addresses = '*'

注意,這裏去掉了行首的註釋。一樣,從新載入配置文件使修改生效。

1.2.3 建立應用用戶和數據庫

如今能夠經過 Navicat 鏈接管理 PostgreSQL 數據庫了,在圖形化界面下很容易建立用戶和數據庫,這裏建立與應用同名的用戶和數據庫就行了,所有命名爲 teamtea

一樣須要添加訪問權限,編輯 /etc/postgresql/9.4/main/pg_hba.conf 文件,添加一行

local   teamtea             teamtea                                md5

這裏限制了用戶 teamtea 只能訪問名爲 teamtea 的數據庫,這對應用來講是足夠的,對整個數據庫系統來講也是安全的。 完成上述工做後,就能夠退出 postgres 用戶了。

1.3 配置 Django,啓動服務

1.3.1 配置 Django

Django 鏈接 PostgreSQL 依賴於 psycopg2 驅動,在初始化項目以前必須先安裝這個包,

$sudo pip3 install psycopg2

這中間涉及到編譯過程,依賴於 gcc, make 以及上面安裝的 postgresql-server-dev-9.4 等包,若是安裝失敗則須要根據提示先裝好依賴。

如今能夠開始配置咱們的 Django 工程 teamtea 了,進入工程目錄,編輯文件 /teamtea/settings.py 文件,將數據庫配置項修改成

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'teamtea',
        'USER': 'teamtea',
        'PASSWORD': 'teamtea',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

關於數據庫配置項能夠參考官方文檔

這裏同時將工程的時區設置爲 UTC+8 即北京時間,將時區配置項修改成

TIME_ZONE = 'Asia/Shanghai'

1.3.2 初始化項目

如今能夠對工程進行初始化了,須要說明的是,從 Django 1.7 開始已經將原有的數據庫同步命令 syncdb 標記爲 deprecated 了,並將在 1.9 中徹底刪除該命令,取代它的是 migrate 命令,

python3 manage.py migrate

這裏須要說明的是,由於 Django 是經過 pip3 安裝在 Python 3 的實環境下的,在執行 manage.py 腳本以前須要指定運行環境爲 Python 3,不然會找不到 Django,使用 virtualenv 會有所改善。

1.3.3 啓動服務

如今能夠啓動 Django 內置的簡單測試用 web 服務器來測試整個工程是否能夠運轉起來了,

python3 manage.py runserver 0.0.0.0:8000

這裏須要指定 IP 和端口號,不然只能在本地訪問。 如今打開用戶機的瀏覽器,訪問 http://IP:8000 就能夠看到調試用的頁面了,說明程序運行正常。 終止服務只須要 Ctrl-C 終止進程就好了。

2 總結

2.1 過程小結

整個過程仍是由於不熟悉走了很多彎路,尤爲是在個人短板數據庫這一塊,對 PostgreSQL 還須要增強學習啊。

2.2 還能夠作的工做

做爲學習用的工程搭建過程,這邊文章描寫的步驟勉強是夠用的,可是還顯得很簡陋,還有不少工做能夠作,例如使用 virtualenv 管理開發環境,避免直接在實環境下進行開發。還可使用 git 來進行版本控制,這即便在學習階段也是頗有必要的,它能幫助記下每次能夠正常運行的代碼,防止某次改動後程序沒法運行而又毫無頭緒的尷尬情形。 固然,部署 web 應用還可使用 uwsgi + nginx 的方式,不過這更復雜,對 Django 的學習來講意義不大,能夠當作另一個主題去研究了。

相關文章
相關標籤/搜索