许多人在部署时遇到问题的原因是他们对细节没有足够的重视。 当您熟悉所有涉及的部分时,部署很容易。 您必须知道如何通过ssh进行身份验证,用于命令行和Linux,了解如何配置和设置您的项目,了解什么是静态文件服务,什么是Gunicorn……好吧,这不是那么简单。 这就是为什么有很多部署工具,工具包和教程的原因。 目前,使用Ansible,Docker和这些孩子们正在使用的东西,它更易于部署,但是在幕后发生的事情变得更加抽象。
也许再过几年,如果还没有无服务器以及其他所有功能,那么这篇文章将被淘汰。 无论如何,只有少数人想学习如何部署Django,正如我将在此处显示的那样,但是如果它对至少一个人有帮助,我会感到满意。
享受这份旧式指南!
服务器
我想您没有服务器或AWS帐户, DigitalOcean , Linode …没什么! 您必须在其中一个帐户中创建一个帐户,然后使用所需的发行版启动服务器。 如果这是您的第一次,请不要使用AWS,因为它比其他方法更复杂。
在本教程中,我使用的是Ubuntu 16.04,这是您将看到的最常见的发行版。 如果愿意,您还可以选择Debian。
最初设定
配置服务器时区
sudo locale-gen --no-purge --lang pt_BR # I'm using pt_BR, because HUE HUE BR BR
sudo dpkg-reconfigure tzdata
更新和升级操作系统软件包:
sudo apt-get update
sudo apt-get -y upgrade
通过Python 3.5安装Python 3.6
将我们发行版中的默认Python 3.5替换为Python 3.6。
sudo apt-get update
sudo add-apt-repository ppa:jonathonf/python-3.6
sudo apt-get install python3.6
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 2
您可以选择在键入python3时操作系统将调用的Python版本。
sudo update-alternatives --config python3
遇到问题,请在这里看看:
本快速教程将向您展示如何通过PPA在Ubuntu 16.04 LTS中安装最新的Python 3.6.1。 Ubuntu 16… ubuntuhandbook.org
安装操作系统要求
sudo apt-get install python3-pip nginx supervisor git git-core libpq-dev python-dev
python-virtualenv
如果您的项目对OS有更多要求,请也安装它们。
适用于Python3的VirtualEnvWrapper
我是VirtualEnvWrapper的粉丝。 这非常容易,并且可以在同一位置创建所有虚拟环境。 这是个人选择,如果您不喜欢它,请使用您知道的用法。
首先,安装virtualenvwrapper ,然后定义将virtualenvs放在何处。 (WORKON_HOME)。
如果需要与多个Python版本一起使用,则必须定义VIRTUALENVWRAPPER_PYTHON。 在这里,我总是使用python3。 这不是问题,因为您可以创建一个virtualenv来指向env将使用的Python。
sudo pip3 install virtualenvwrapper
echo 'export WORKON_HOME=~/Envs' >> ~/.bashrc
echo ‘export VIRTUALENVWRAPPER_PYTHON=`which python3`’ >> ~/.bashrc
echo 'source /usr/local/bin/virtualenvwrapper.sh' >> ~/.bashrc
source ~/.bashrc
现在,创建您的virtualenv并定义将要使用的Python。
mkvirtualenv name_venv --python=python3
VirtualEnvWrapper非常易于使用。 如果要激活虚拟环境,可以使用workon 。
workon name_venv
要停用此virtualenv,请执行以下操作:
deactivate
删除 virtualenv:
rmvirtualenv name_venv
生成SSH以进行GitHub身份验证
您不想(也不应该)输入密码来在服务器上git pull您的项目。
生成SSH密钥:
cd ~/.ssh
ssh-keygen -t rsa -b 4096 -C "dev@email.com"
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
查看并复制您的公共密钥( id_rsa.pub )的内容
cat ~/.ssh/id_rsa.pub
然后登录您的GitHub帐户并转到设置> SSH和GPG密钥 。 单击“新建SSH密钥”,为其命名,例如(“测试服务器密钥”),然后在“密钥”中粘贴id_rsa.pub的内容。
克隆您的Django项目
从GitHub复制SSH链接以克隆您的项目。 在这种情况下,我将使用一个刚刚找到的项目作为示例。
git clone git@github.com:kirpit/django-sample-app.git
在项目文件夹中,安装项目要求。
请记住,您必须处于虚拟环境中
cd django-sample-app/
pip install -r requirements.txt
现在,为您的部署进行必要的更改,例如创建settings_local.py文件,更改数据库设置或特定于项目的任何内容。
完成后,运行迁移并收集静态文件(如果正在使用)。
python manage.py migrate
python manage.py collectstatic
配置NGINX
Nginx和Apache一样,是一个完全独立的世界。 现在,您只需要基本知识。
/ etc / nginx / sites-available /是一个目录,您必须在其中放置可用站点的配置文件。 还有另一个目录/ etc / nginx / sites-enabled / ,显示了启用了哪些站点。 它们是同一回事,但是Nginx将提供启用的服务。
通常在可用站点上创建配置文件,并仅创建指向启用站点的符号链接。
首先,我将从Nginx中删除默认站点。
sudo rm /etc/nginx/sites-enabled/default
现在,为您的站点创建配置文件。 (如果您不知道如何使用VIM,请使用nano而不是vi)
sudo vi /etc/nginx/sites-available/mysite
将其粘贴到文件上,更改必要的路径:
server {
listen 80;
access_log /home/username/logs/access.log;
error_log /home/username/logs/error.log;
server_name nome-site.com.br;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_pass_header Server;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
location /static {
alias /home/username/project_path/static/;
}
并创建一个符号链接到启用站点的:
sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/mysite
重新启动Nginx:
sudo service nginx restart
好的,如果您到这里为止都没有问题,如果您访问自己的网站,您将看到Nginx的502错误网关。 那是因为这里什么都不是: http : //127.0.0.1 : 8000
现在,将网站配置为在8000端口上运行。
配置独角兽
你们还活着吗? 不要放弃,我们快到了。
在您的virtualenv中(还记得workon name_env吗?)安装Gunicorn
pip install gunicorn
在您的项目目录中,创建一个gunicorn_conf文件:
bind = "127.0.0.1:8000"
logfile = "/home/username/logs/gunicorn.log"
workers = 3
现在,如果您运行Gunicorn,您将看到您的网站正在运行!
/home/username/Envs/name_venv/bin/gunicorn project.wsgi:application -c gunicorn_conf
但是你要怎么办? 在屏幕上运行此命令,然后走开吗? 当然不是! 您将使用Supervisord来控制Gunicorn。
配置主管
现在创建一个gunicorn.conf:
sudo vi /etc/supervisor/conf.d/gunicorn.conf
那是内容:
[program:gunicorn]
command=/home/username/Envs/name_venv/bin/gunicorn project.wsgi:application -c /home/username/project/project_django/gunicorn_conf
directory=/home/username/project/project-django
user=username
autostart=true
autorestart=true
redirect_stderr=true
现在,您只是告诉Supervisor,镇上有一个新流程,Supervisord会照顾它:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl restart gunicorn
瞧! 您将拥有一个新的跑步机会。
结论
部署过程涉及很多事情。 您必须配置防火墙,可能您必须提供多个静态文件夹,等等,等等……但是您必须从某个地方开始。
我不敢相信我不使用任何GIF就能撰写整篇文章。 因此,最后,请注意我在这里使用的所有路径。
哎呀..
最初在 费尔南多·阿尔维斯 ( Fernando Alves) 发表 。
From: https://hackernoon.com/deploy-for-kids-django-python-3-74261cae076c