在Debian 8上设置Django

・7 分钟阅读

本教程介绍如何在Debian8 Jessie上设置Django,我会演示如何同时使用python 2和3以及nginx和PostgreSQL 。

本教程中完成的一切都以root完成。

安装软件包

首先,我们需要安装一些软件包。

对于python 2:


apt-get install python-pip python-dev virtualenv nginx postgresql postgresql-contrib libpq-dev sudo gcc

对于python 3:


apt-get install python3-pip python3-dev virtualenv nginx postgresql postgresql-contrib libpq-dev sudo gcc

安装数据库

首先,我们登录到用户postgres


sudo -u postgres -s

接下来,我们创建一个新数据库,数据库名称可以是你希望它成为(这里使用了dbname )的任何内容,但是你必须与设置的其余部分一致。

 
createdb dbname

 

为新数据库创建用户,同样,这可以是你想要的,但是,我使用了dbuser ,这也将要求你设置密码。

 
createuser -P dbuser

 

用户现在必须被授予对数据库的访问权限,请确保使用正确的数据库名称和用户名。


psql
postgres=# GRANT ALL PRIVILEGES ON DATABASE dbname TO dbuser;
postgres=# q

退出root 。

 
exit

 

启用并启动PostgreSQL :


systemctl enable postgresql
systemctl start postgresql

设置虚拟环境

我们不只是使用全局python文件,而是使用虚拟环境,我们首先创建一个目录来保存它。


mkdir -p /opt/project

我们现在创建环境。 这对于python 2和3用户是不同

对于python 2:


virtualenv . -p python

对于python 3:


virtualenv . -p python3

输入虚拟环境。

 
source bin/activate

 

安装Django Gunicorn和PSycopg2


pip install django
pip install gunicorn
pip install psycopg2

如果需要Django的特定版本,请更改安装命令以匹配下面的格式,本例子安装1.7.8.


pip install django==1.7.8

现在我们已经完成了这个任务,所以,我们可以停用虚拟环境。

 
deactivate

 

项目上载和配置

现在是我们将项目上传到服务器的时间,我们确保所有设置都正确。你可以使用任何方法来执行这个操作,FTP,SFTP,git等等都可以的,如果使用git跟踪项目代码,则可以将它克隆到服务器,这个git命令将项目克隆到服务器并将它放入/opt/project/project/


git clone http://example.com:project.git

在任何文本浏览器中打开settings.py文件。

首先,调试模式需要关闭,查找DEBUG =True行并将True更改为False ,之后,确保你已经将ALLOWED_HOSTS设置为某个值。


ALLOWED_HOSTS = ['*']

查找DATABASES字典,它应该如下所示:


DATABASES = {
 'default': {
 'ENGINE': 'django.db.backends.postgresql_psycopg2',
 'NAME': 'dbname',
 'USER': 'dbuser',
 'PASSWORD': 'password you set',
 'HOST': 'localhost',
 'PORT': ''
 }
}

这里的最后一步是设置静态root ,将以下内容直接放在STATIC_URL下面。


STATIC_ROOT = '/opt/project/static/'

退出文件并创建静态root目录。


mkdir -p /opt/project/static

现在迁移数据库,创建超级用户,并收集所有静态文件。


cd /opt/project/project
../bin/python manage.py makemigrations
../bin/python manage.py migrate
../bin/python manage.py createsuperuser
../bin/python manage.py collectstatic

配置Gunicorn

Gunicorn是我们将要使用的WSGI服务器,由于Debian 8带有systemd我们会利用systemd来启动和停止服务器。

创建文件/etc/systemd/system/django.service,并且添加以下内容。


[Unit]
Description=Django with Gunicorn
After=network.target

[Service]
User=root
Group=root
WorkingDirectory=/opt/project
ExecStart=/opt/project/bin/gunicorn --workers 3 --bind 127.0.0.1:8000 project.wsgi

[Install]
WantedBy=multi-user.target

启用并启动我们创建的服务。


systemctl enable django.service
systemctl start django.service

Nginx

你可能已经注意到我们将Gunicorn服务器绑定到127.0.0.1.,现在我们需要一种从服务器外部访问它的方法,这就是Nginx进来的地方。

创建新文件/etc/nginx/sites-available/django,并且添加以下内容,可以将domain.example.com部件设置为你需要的任何内容。


server {
 listen 80;
 server_name domain.example.com;
 access_log off;

 location /static/ {
 alias /opt/project/static/;
 }

 location / {
 proxy_pass http://127.0.0.1:8000;
 }
}

创建一个符号链接以启用此站点。


ln -s /etc/nginx/sites-available/django /etc/nginx/sites-enabled/django

启用和启动Nginx 。


systemctl enable nginx
systemctl start nginx

结束语

恭喜,在你的Debian VPS上,现在有一个运行的Django站点。

杨和超 profile image