如何安装Django与PostgreSQL和Nginx在Ubuntu 16.04

Django是一个基于Python的免费开源Web框架。 它是一个具有MVT(模型 - 视图 - 模板)架构模式的高级python Web框架。 Django由Django Software Foundation(DSF)维护。 Django Web框架很快,它可以帮助开发人员快速构建应用程序(RAD)。

在本教程中,我将向您展示如何安装Django Web框架并将其配置为使用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 root@192.168.1.115
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

登录夏新用户:

su - natsume

使用python3作为默认的python版本,在Django项目的目录'myproject'中创建一个新的虚拟环境。

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配置行来配置静态网址:

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

打开您的网络浏览器,并访问端口8080上的服务器IP地址,我的情况http://192.168.1.115:8080。 您将看到Django默认页面。

按Ctrl + c退出。

第4步 - 使用Gunicorn配置Django项目

Gunicorn或Green Unicorn是从RubyUnicorn项目分叉的一个python WSGI HTTP服务器。 它支持各种Web框架,易于配置。

转到'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步 - 安装和配置主管

主管是Linux操作系统的过程控制系统。 它允许您在Linux上配置,监视和控制多个进程。 主管基于python,我们可以使用pip命令从python存储库pypi安装它,或者通过apt从ubuntu存储库安装它。

我将使用此apt命令安装主管:

sudo apt-get install supervisor

Supervisor在'/ ect / supervisor /'目录中有一个默认配置文件。 转到该目录并为我们的Django项目创建一个新配置,以便我们可以用主管来控制它。

cd /etc/supervisor/conf.d/
vim hello-django.conf

粘贴Supervisor配置如下:

[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

使用“退出”返回root用户并启动主管:

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,port和sock文件。

Ubuntu 16.04上的PostgreSQL和Nginx的Django安装和配置已经成功。

链接

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏