为孩子们部署-Django和Python 3

许多人在部署时遇到问题的原因是他们对细节没有足够的重视。 当您熟悉所有涉及的部分时,部署很容易。 您必须知道如何通过ssh进行身份验证,用于命令行和Linux,了解如何配置和设置您的项目,了解什么是静态文件服务,什么是Gunicorn……好吧,这不是那么简单。 这就是为什么有很多部署工具,工具包和教程的原因。 目前,使用Ansible,Docker和这些孩子们正在使用的东西,它更易于部署,但是在幕后发生的事情变得更加抽象。

也许再过几年,如果还没有无服务器以及其他所有功能,那么这篇文章将被淘汰。 无论如何,只有少数人想学习如何部署Django,正如我将在此处显示的那样,但是如果它对至少一个人有帮助,我会感到满意。

享受这份旧式指南!

服务器

我想您没有服务器或AWS帐户, DigitalOceanLinode …没什么! 您必须在其中一个帐户中创建一个帐户,然后使用所需的发行版启动服务器。 如果这是您的第一次,请不要使用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

遇到问题,请在这里看看:

安装操作系统要求
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值