如何在 Ubuntu 16.04 上使用 PostgreSQL 和 Nginx 安装 Django
在此页
- 第 1 步 - 安装 Django、Virtualenv 和 Gunicorn
- 第 2 步 - 安装和配置 PostgreSQL
- 第 3 步 - 启动新的 Django 项目
- 创建新用户
- 创建新的 Virtualenv 并安装 Django
- 开始使用 PostgreSQL 的新项目
Django 是一个基于 Python 的免费开源 Web 框架。它是一个具有 MVT(模型-视图-模板)架构模式的高级 Python Web 框架。 Django 由 Django 软件基金会 (DSF) 维护。 Django 网络框架速度很快,它可以帮助开发人员快速构建应用程序(RAD)。
在本教程中,我将向您展示如何安装 Django 网络框架并将其配置为使用 PostgreSQL 数据库进行开发。出于速度和安全原因,我们将运行 Nginx 作为 Django Web 框架的反向代理。 Django将运行在python WSGI HTTP服务器Gunicorn下,我们将以Supervisor作为进程控制系统来管理和控制Gunicorn。
先决条件
- Ubuntu 16.04
- 根权限
第 1 步 - 安装 Django、Virtualenv 和 Gunicorn
我将使用 python3 作为系统的默认 Python 版本。我们将在 Ubuntu 16.04 上安装 python3 和 pip3。 Pip3 是一个包管理系统,用于安装和管理用 python 编写的软件包。
在终端上以 root 用户身份或通过 SSH(就像我在这里做的那样)连接到您的服务器并更新 Ubuntu 存储库:
ssh
sudo apt-get update使用以下 apt 命令安装 python3 和 pip3:
sudo apt-get install python3-pip python3-dev
为 pip3 命令创建一个新的符号链接,以便能够将其用作 \pip\ 而不是 \pip3\ 并升级它:
ln -s /usr/bin/pip3 /usr/bin/pip
pip install --upgrade pip接下来,使用 pip 命令安装所需的 python 包。我将在这里安装 Django、Virtualenv 和 Gunicorn:
pip install django virtualenv gunicorn
第 2 步 - 安装和配置 PostgreSQL
我们将使用 PostgreSQL 作为 Django 项目的数据库。使用此 apt 命令安装 PostgreSQL。
sudo apt-get install postgresql postgresql-contrib libpq-dev
安装完成后,使用 pip 安装名为 psycopg2 的新 python 包。它是 python-postgreSQL 数据库适配器。
pip install psycopg2
现在访问 postgres 用户并使用 psql 命令打开 PostgreSQL shell:
su - postgres
psql使用以下命令为 postgres 用户设置新密码:
\password postgres
Enter new password:接下来,在 PostgreSQL 中为 django 项目创建一个新数据库和一个新用户/角色。我将使用用户/角色 python_dev 创建名为 django_db 的新数据库。在 PostgreSQL shell 中键入以下命令。
CREATE USER python_dev WITH PASSWORD 'aqwe123';
CREATE DATABASE django_db OWNER python_dev;查看数据库列表和作用:
\list
第 3 步 - 启动新的 Django 项目
启动名为 hello_django 的第一个 Django 项目。我们不会为该项目使用 root 权限,我将为该项目使用普通的 Linux 用户 natsume。随意使用描述您的项目的不同用户名。
创建新用户
使用以下命令创建新的 Linux 用户:
useradd -m -s /bin/bash natsume
passwd natsume-m=自动创建主目录。
-s=为用户定义默认 shell。创建新的 Virtualenv 并安装 Django
登录到 natsume 用户:
su - natsume
在目录 myproject 中为我们的 Django 项目创建一个新的虚拟环境,默认 python 版本为 python3。
mkdir myproject
virtualenv --python=python3 myproject/转到 myproject 目录并激活 virtualenv。
cd myproject/
source bin/activate接下来,在该环境中使用 pip 命令安装 Django、gunicorn 和 psycopg2。
pip install django gunicorn psycopg2
使用 PostgreSQL 开始新项目
使用下面的 django-admin 命令启动 Django 项目 hello_django:
django-admin startproject hello_django
它将创建一个新目录 hello_django,进入该目录并使用 vim 编辑配置文件 setting.py。
cd hello_django/
vim hello_django/settings.py使用以下配置更改第 76 行的数据库设置:
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'django_db',
'USER': 'python_dev',
'PASSWORD': 'aqwe123',
'HOST': 'localhost',
'PORT': '',在文件末尾,通过在下面添加 STATIC_ROOT 配置行来配置静态 url:
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
保存并退出。
接下来,将数据库迁移到我们的 postgreSQL 数据库并创建一个新的管理员用户。然后将所有静态文件收集到我们执行命令时自动创建的静态目录中。
python manage.py migrate
python manage.py createsuperuser
python manage.py collectstatic确保没有错误,然后使用 runserver 命令测试运行 django 项目服务器。
python manage.py runserver 0.0.0.0:8080
打开您的 Web 浏览器并访问端口 8080 上的服务器 IP 地址,在我的示例中为 http://192.168.1.115:8080。您将看到 Django 默认页面。
按 Ctrl + c 退出。
第 4 步 - 使用 Gunicorn 配置 Django 项目
Gunicorn 或 Green Unicorn 是一个从 Ruby Unicorn 项目派生出来的 python WSGI HTTP 服务器。它支持各种网络框架,并且易于配置。
转到 myproject 目录并为 natsume 用户主目录激活虚拟环境。
cd ~/myproject/
source bin/activate使用 vim 在 bin 目录中创建一个新文件 gunicorn_start:
vim bin/gunicorn_start
下面粘贴配置:
#!/bin/bash
# Project Name
NAME="hello_django"
# Django Project Directory
DJANGODIR=/home/natsume/myproject/hello_django
# Run gunicorn on the socket file
SOCKFILE=/home/natsume/myproject/hello_django/run/gunicorn.sock
# Gunicorn running as user and group
USER=natsume
GROUP=natsume
# Workers
NUM_WORKERS=3
#Module Setting
#replace hello_django with your project name
DJANGO_SETTINGS_MODULE=hello_django.settings
DJANGO_WSGI_MODULE=hello_django.wsgi
echo "Starting $NAME as `whoami`"
# Activate the virtual environment
cd $DJANGODIR
source ../bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
# Start your Django Unicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec ../bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--bind=unix:$SOCKFILE \
--log-level=debug \
--log-file=-保存并退出。
使用 chmod 命令使文件可执行。
chmod u+x bin/gunicorn_start
第 5 步 - 安装和配置 Supervisor
Supervisor是Linux操作系统的进程控制系统。它允许您配置、监视和控制 Linux 上的许多进程。 Supervisor是基于python的,我们可以使用pip命令从python仓库pypi安装,也可以使用apt从ubuntu仓库安装。
我将使用这个 apt 命令安装 supervisor:
sudo apt-get install supervisor
Supervisor 在 /ect/supervisor/ 目录下有一个默认的配置文件。转到该目录并为我们的 Django 项目创建一个新配置,以便我们可以使用主管控制它。
cd /etc/supervisor/conf.d/
vim hello-django.conf粘贴下面的主管配置:
[program:hello_django]
command = sh /home/natsume/myproject/bin/gunicorn_start
user = natsume
stdout_logfile = /home/natsume/myproject/logs/gunicorn_supervisor.log
redirect_stderr = true
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8保存并退出。
接下来,登录到 natsume 用户并创建 gunicorn 套接字文件和主管日志文件所需的一些目录。
su - natsume
# Directory for gunicorn sock file
mkdir -p myproject/hello_django/run/
# Directory and file for supervisor log files
mkdir -p myproject/logs/
touch myproject/logs/gunicorn_supervisor.log使用 \exit\ 返回 root 用户并启动 Supervisor:
exit
systemctl start supervisor检查进程的状态和日志:
supervisorctl
tail -f hello_django第 6 步 - 为 Django 项目安装和配置 Nginx
在此步骤中,我们将安装 Nginx 并将其配置为我们的 Django 项目的反向代理。
从 Ubuntu 存储库安装 Nginx:
sudo apt-get install nginx
进入Nginx虚拟主机配置目录,创建一个hello_django虚拟主机文件:
cd /etc/nginx/sites-available/
vim hello_django下面粘贴配置:
# Django running with Gunicorn Sock file
upstream hello_django_project {
server unix:/home/natsume/myproject/hello_django/run/gunicorn.sock fail_timeout=0;
}
server {
listen 80;
server_name www.django-nginx.com;
client_max_body_size 4G;
access_log /home/natsume/myproject/logs/nginx-access.log;
error_log /home/natsume/myproject/logs/nginx-error.log;
location /static/ {
alias /home/natsume/myproject/hello_django/static/;
}
location /media/ {
alias /home/natsume/myproject/hello_django/media/;
}
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
# Try to serve static files from nginx, no point in making an
# *application* server like Unicorn/Rainbows! serve static files.
if (!-f $request_filename) {
proxy_pass http://hello_django_project;
break;
}
# Error pages
error_page 500 502 503 504 /500.html;
location = /500.html {
root /home/natsume/myproject/hello_django/static/;
}
}
}保存并退出。
激活虚拟主机并测试 Nginx 配置。
ln -s /etc/nginx/sites-available/hello_django /etc/nginx/sites-enabled/
nginx -t确保没有报错,然后重启Nginx:
systemctl restart nginx
第 7 步 - 测试 Django
在第 5 步中,我们为我们的 Django 项目创建了一个虚拟主机,域名为 www.django-nginx.com。打开浏览器并访问您为项目选择的域名。
www.django-nginx.com/admin/
您将被重定向到 Django 管理仪表板。
使用以下命令检查我们设置的所有服务是否正在运行:
netstat -pl
您将看到所有服务使用的 pid、端口和 sock 文件。
在 Ubuntu 16.04 上使用 PostgreSQL 和 Nginx 安装和配置 Django 已经成功。
链接
- <李> <李> <李>
- http://supervisord.org/