如何在FreeBSD 10.2上使用Gunicorn和Nginx安装Django

时间:2020-03-05 15:27:52  来源:igfitidea点击:

Django是基于python的Web框架,由Django Software Foundation维护。
它是一个免费的开源python框架,用于构建宏Web应用程序。
Django功能强大,使开发过程如此之快,使应用程序简单实用。
使开发人员易于维护和部署项目。
Django是具有MVC(模型-视图-控制器)概念的高级python框架,被mozilla,pinterest,disquss,instagram,bitbucket等大使用。
在本教程中,我们将指导有关django的安装。
我们将安装带有gunicorn,supervisor和nginx的django 1.9作为Web服务器。
Nginx在端口80上运行,而django框架在带有gunicorn sock文件的gunicorn下运行。

第1步-更新FreeBSD存储库

登录到freebsd服务器并使用'freebsd-update'命令更新存储库:

freebsd-update fetch
freebsd-update install

第2步-安装Python,SQLite3和Pip

在这一步中,我们将使用pip安装python 2.7.
如果要使用python3,请使用MySQL或者PostgreSQL作为django数据库。
我们将使用以下命令从freebsd存储库安装python和pip:

pkg install python
pkg install py27-pip

并使用以下命令将pip更新到最新版本:

pip install --upgrade pip

接下来,使用pkg命令安装sqlite3 databse和python模块py27-sqlite3:

pkg install sqlite3
pkg install py27-sqlite3

在freebsd服务器上安装了Python,pip和SQLite3.

第3步-在虚拟环境中安装Django

我们将使用名为“ vagrant”的普通用户(而不是root用户)安装和部署django。
我们将在virtualenv下安装django,它是虚拟python环境构建器,用于创建隔离的python环境的工具。
Virtualenv在PyPI存储库上可用,我们可以使用pip命令安装它:

pip install virtualenv

接下来切换到用户“ vagrant”:

su - vagrant

使用python2.7作为版本创建名为“ myenv”的新虚拟环境。
我们可以使用virtualenv命令创建它:

mkvirtualenv --python=python2.7 myenv

它将创建一个名为“ myenv”的新目录,进入该目录并激活之前创建的虚拟环境:

cd myenv
source bin/activate

这是我们安装django 1.9和gunicorn的时候,在virtualenv下使用pip命令安装所有工具:

pip install django==1.9
pip install gunicorn

Django和Gunicorn已安装,我们可以使用pip命令进行检查:

pip list
Django (1.9)
gunicorn (19.4.1)

接下来,使用django创建新的示例项目。
我们将使用django-admin命令创建名为“ myproject”的新项目:

django-admin startproject myproject

该命令将创建新目录“ myproject”,转到该目录并通过运行manage.py文件测试django的安装:

cd myproject/
python manage.py runserver

runserver =使用端口8000启动django项目。

如果没有错误,请编辑django项目目录中的setting.py文件,继续进行下一步:

nano -c myproject/settings.py

在该行的末尾添加以下配置:

STATIC_ROOT = '/home/vagrant/myenv/myproject/static/'
STATIC_URL = '/static/'
MEDIA_ROOT = '/home/vagrant/myenv/myproject/media/'
MEDIA_URL = '/media/'

保存并退出。

并通过运行以下命令生成静态文件:

python manage.py collectstatic

collectstatic用于管理静态文件,它将django静态文件复制到myproject目录上的目录“ static”。

Django已配置,最后我们需要配置gunicorn。
转到“ myenv”目录并激活环境,然后在bin目录中创建新文件:

cd /home/vagrant/myenv/
source bin/activate
nano -c bin/gunicorn_start

粘贴配置如下:

#!/bin/bash
NAME="myproject"                                             # Django Project Name
DJANGODIR=/home/vagrant/myenv/myproject                        # Django Project Directory
SOCKFILE=/home/vagrant/myenv/myproject/run/gunicorn.sock     # Gunicorn Sock File
USER=vagrant                                                # Django Project Running under user vagrant
GROUP=vagrant                                                # Django Project Running under group vagrant
NUM_WORKERS=3
DJANGO_SETTINGS_MODULE=myproject.settings                     # change 'myproject' with your project name
DJANGO_WSGI_MODULE=myproject.wsgi                             # change 'myproject' with your project name
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 u+x bin/gunicorn_start

Django配置了gunicorn,django将在gunicorn sock文件下运行。

注意:如果要退出virtualenv,可以使用命令“ deactivate”。

步骤4-安装Supervisord

Supervisor是Linux和Unix操作系统上的进程控件,允许用户监视和控制进程数。
在本教程中,我们需要一个py-supervisor来控制与django项目一起运行的gunicorn。

使用pkg命令从freebsd存储库安装py-supervisor:

pkg install py-supervisor

如果完成,请使用sysrc命令将超级用户添加到启动时间,然后启动它:

sysrc supervisord_enable=yes
service supervisord start

Supervisor已启动,但是我们需要向其中添加应用程序。
我们可以通过编辑超级用户配置文件,转到目录并使用nano编辑文件'supervisord.conf'来实现:

cd /usr/local/etc/
nano -c supervisord.conf

在该行的末尾,在下面添加我们的应用程序配置:

[program:myproject]
command = sh /home/vagrant/myenv/bin/gunicorn_start
user = vagrant
stdout_logfile = /home/vagrant/myenv/logs/gunicorn_supervisor.log
redirect_stderr = true
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8

保存并退出。

现在,我们必须使用用户vagrant为gunicorn日志文件创建新目录:

mkdir -p /home/vagrant/myenv/logs/
touch /home/vagrant/myenv/logs/gunicorn_supervisor.log

重新启动主管并检查我们的应用程序正在运行:

service supervisord restart
supervisorctl status

第5步-安装Nginx

我们将使用nginx作为服务器的前端,并在端口80上运行。
如果有人从浏览器进行访问,则该连接将传递到与sock文件一起运行的gunicorn。

使用pkg命令从freebsd存储库中安装nginx:

pkg install nginx

接下来,为我们的django项目配置virtualhost。
转到nginx配置目录并其中创建名为vhost的新目录:

cd /usr/local/etc/nginx/
mkdir -p vhost/

转到vhost目录并创建新的文件配置“ mydjango.conf”:

cd vhost/
nano -c mydjango.conf

在下面粘贴virtualhost配置:

upstream myproject_server {
server unix:/home/vagrant/myenv/myproject/run/gunicorn.sock fail_timeout=0;
}
server {
listen   80;
server_name www.djangofreebsd.com;
client_max_body_size 4G;
access_log /home/vagrant/myenv/logs/nginx-access.log;
error_log /home/vagrant/myenv/logs/nginx-error.log;
location /static/{
alias   /home/vagrant/myenv/myproject/static/;
}
location /media/{
alias   /home/vagrant/myenv/myproject/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://myproject_server;
break;
}
}
# Error pages
error_page 500 502 503 504 /500.html;
location = /500.html {
root /home/vagrant/myenv/myproject/static/;
}
}

保存并退出。

现在,我们必须将virtualhost配置添加到nginx.conf中。
返回nginx目录,使用nano编辑文件nginx.conf:

cd /usr/local/etc/nginx/
nano -c nginx.conf

在行末之前,在下面添加行:

include vhost/*.conf;

保存并退出。

测试nginx配置,如果没有错误,则将nginx添加到启动时间:

nginx -t
sysrc nginx_enable=yes

最后,重新启动超级用户并启动nginx:

service supervisord restart
service nginx start

现在,我们可以使用浏览器访问django应用程序,在本教程中,我们使用域www.mydjango.co。