记一次在 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 的学习来讲意义不大,能够当作另一个主题去研究了。

相关文章
相关标签/搜索