如何部署Django应用程序:

向大家问好,这是我在 <» FromLinux 中的第一篇文章(我的草稿中有几篇文章 xD),我希望它对你有用 

好吧,在我当前的新工作中,目前正在执行将多个系统迁移到Django的工作(多么奇怪eh ?? xD),除了开发,我的任务之一就是将这些系统投入生产,然后好徒弟,因为这是我第一次在真实服务器上将应用程序投入生产:$我开始阅读堆栈中每个必需软件包(Gunicorn和Supervisord的更多信息)的正式文档,并看到了教程在西班牙语中,它们在某些方面对我不太清楚,我决定根据Django,Gunicorn,Supervisord,Nginx和Postgresql堆栈创建一个迷你指南,其中包含按照步骤将应用程序投入生产的步骤。

在我工作的情况下,服务器仍在运行Debian Squeeze,但是该指南对于其他发行版应该完全有效...所以让我们直接开始吧:

我将以超级用户身份工作。 首先,需要以下软件包:

画中画 ->安装和管理Python软件包的工具
aptitude install python-pip

Nginx的 -> Web服务器(我们将其用作反向代理并缓存静态文件'img,js,css'),我们使用以下命令进行安装:
aptitude install nginx

主管 ->用于管理和监视我们的应用程序的应用程序,尽管它用于更多用途。 我们通过以下方式安装它:
aptitude install supervisor

虚拟环境 ->它可以帮助我们为应用程序创建自定义的虚拟执行环境。 我们通过以下方式安装它:
aptitude install python-virtualenv

Gunicorn ->适用于python的网络服务器(我们尚未安装)

我认为他们应该已经安装和配置了postgresql

心理咨询师2 ->用于python的Postgresql连接器(我们也不会安装它)

使用virtualenv创建虚拟环境:

首先,我们将移至将用于生产的工作目录:
cd /var/www/

然后,在此目录中,我们将创建虚拟环境:
virtualenv ENV-nombreApp

我们移到我刚刚创建的virtualenv目录
cd ENV-nombreAPP

我们将应用程序复制到此目录中,现在我们使用以下方法激活环境:
source bin/activate

提示现在应该看起来像 (ENV)usuario@host:

现在这将使我们所做的一切都存储在目录中 / var / www / ENV-appname / 不影响系统软件包

现在我们转到应用程序目录:
cd nombreApp

我们继续安装应用程序依赖项列表(如果需要),在文件中指定依赖项列表 requirements.txt:
pip install -r requirements.txt

我们还可以单独安装软件包,例如,安装 PostgreSQL的:
pip install psycopg2

GUnicorn安装和配置:

要安装它,我们以相同的方式进行:
pip install gunicorn

现在我们将对其进行配置,为此,我们将创建一个名为 Gunicorn-deploy.py 在我们应用程序的根目录中(尽管名称可以是任何东西),其内容如下:

bind = "127.0.0.1:8001" # dirección a donde accederá Nginx
logfile = "/var/www/logs/nombreApp/gunicorn.log" # dirección donde estarán los logs de la aplicación
workers = 1 # dependerá en medida de la carga de trabajo que tenga la aplicación, también depende del hardware con que se cuente
loglevel = 'info' # tipo de logging

Supervisord配置:

现在让我们设置 主管,为此,我们使用

echo_supervisord_conf > /etc/supervisord.conf

现在,我们编辑配置文件:
vim /etc/supervisord.conf

我们通过删除来取消注释以下几行: (分号):

[unix_http_server]文件= /tmp/supervisor.sock [supervisord]日志文件= / var / log / supervisord.log logfile_maxbytes = 50MB logfile_backups = 10 loglevel =调试pidfile = / var / run / supervisord.pid nodaemon = false minfds = 1024 minprocs = 200 [rpcinterface:主管] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl = unix:[program:appname]命令= / var / www / ENV-appname / bin / django_unicorn -c / var / www / ENV -appname / appname / gunicorn-deploy.py目录= / var / www / ENV-appname / appname / autostart = true autorestart = true用户=用户名redirect_stderr = true stdout_logfile = / var / www /日志/ appname / supervisord.log

现在,我们将为supervisor创建脚本以从系统开始,为此我们将创建文件:
vim /etc/init.d/supervisord

我们添加以下内容:

 #Supervisord自动启动##描述:自动启动超级用户#进程名:超级用户#pidfile:/var/run/supervisord.pid SUPERVISORD = / usr / local / bin /超级用户SUPERVISORCTL = / usr / local / bin /超级用户案例$ 1在开始)echo -n“正在启动监督:” $ SUPERVISORD echo ;; 停止)echo -n“停止监视:” $ SUPERVISORCTL shutdown echo ;; 重新启动)echo -n“正在停止监视:” $ SUPERVISORCTL关闭echo echo -n“正在开始监视:” $ SUPERVISORD echo ;; 那C

现在,我们授予文件执行权限,以便它可以从系统启动:
sudo chmod +x /etc/init.d/supervisord

我们更新链接以启动服务:
sudo update-rc.d supervisord defaults

我们启动服务:
sudo /etc/init.d/supervisord start

设置nginx:

这一步也很简单,我们将创建以下配置文件 nginx的 对于我们的应用程序:

vim /etc/nginx/sites-enabled/nombreApp

我们将为您添加以下内容

服务器{听9001; #他们希望nginx server_name监听www.domain.com的端口; #或192.168.0.100,我们将访问的地址access_log /var/log/nginx/Appname.access.log; #我们将在其中找到应用程序日志的位置/ {#访问www.dominio.com/ proxy_pass http://127.0.0.1:8001时,nginx将在其中调用; proxy_set_header主机$ http_host; } location / static / {#当我们输入www.domain.com/static/ alias / var / www / ENV-appname / appname / staticfiles /时,nginx将在其中访问; }}

然后我们重新启动nginx:
service nginx restart

设置Django:

让我们修改django配置文件:
vim nombreApp/settings.py

我们寻找的行说 调试=正确 我们改变价值,剩余 调试=假

我们添加数据库参数:

DATABASES = {'default':{'ENGINE':'django.db.backends.postgresql_psycopg2',#或mysql,或任何使用'NAME':'DBName','USER':'DBUser','PASSWORD' :“密码数据库”,“主机”:“本地主机”,#或他们需要的端口“:”,#或他们正在使用的那个}}

我们寻找线 ALLOWED_HOSTS = [] 然后添加要访问的域或地址,留下类似 ALLOWED_HOSTS = ['www.domain.com']

我们为静态文件配置目录,我们寻找显示以下内容的行 STATIC_ROOT = ' ' 然后我们更改该值,将绝对路径放置在我们希望我们的静态文件所在的位置,在我的情况下,我或多或少地将其保留为 STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

差不多完成了,我们执行以下命令:
./manage.py collectstatic

这将创建一个名为“静力学 在我们在 settings.py ,这就是我们所有的静态文件所在的位置。

最后,我们重新启动主管以进行新的更改:
supervisorctl restart nombreApp

就这样吧,最终也没什么大不了的,对吧?对我来说这似乎很简单 

希望对您有用,问候

GUnicorn文档

主管文档


在 Google 中将其添加为首选来源