在 Heroku 上安装和部署 Django 应用

mgP*_*ePe 2 git django postgresql heroku

我经常忘记步骤,希望有一个关于在 Heroku 上部署 django 项目的快速指导指南。

如何在 Heroku 上安装和部署 Django 应用程序?

我已经发布了对我有用的步骤的分步答案。

你会得到:

  • heroku 和您的计算机上的 Django 应用程序。
  • 两台机器上的 Postgres 数据库
  • 混帐/比特桶
  • 身份验证:登录、注销、注册、忘记密码、仅电子邮件身份验证(可选和默认)
  • 在两台机器上工作的静态文件
  • 包括 Bootstrap 3.0.3
  • 南迁(说明

要求

  • Heroku 帐户
  • github/bitbucket 账号
  • 带有 OSX 的 mac(在 10.9 上测试)

mgP*_*ePe 5

更新:

要快速安装,请查看其他答案。


文件夹结构

  • PROJECT_WRAPPER - 它将容纳一切,包括 PS
  • DJANGO_PROJECT - 它将保存代码
  • DJANGO_APP - 主应用程序将具有该名称

任何你看到的地方,用你的真实姓名替换!!!

虚拟环境

如果你没有virtualenv,你需要得到它。它将允许您为每个项目单独安装软件:

pip install virtualenv
Run Code Online (Sandbox Code Playgroud)

然后我们创建我们的项目:

cd ~
mkdir PROJECT_WRAPPER && cd PROJECT_WRAPPER
virtualenv venv
Run Code Online (Sandbox Code Playgroud)

现在您有一个专用文件夹,其中将包含独立安装和 python、django 等版本。

我们通过以下方式激活并开始项目工作:

source venv/bin/activate
Run Code Online (Sandbox Code Playgroud)

Postrges 应用程序

在我们继续之前,我们将安装 postgres.app。从以下网址获取:http : //postgresapp.com/

安装。

我们现在将使用它连接我们的环境:

PATH=/Applications/Postgres.app/Contents/MacOS/bin/:$PATH
Run Code Online (Sandbox Code Playgroud)

需求.txt

现在我们需要安装以下东西:

  • Python、Django - 无需解释
  • South - 数据库迁移(Django 的开发版本不需要它)
  • django-toolbelt - heroku 需要,包括 heroku 所需的一切
  • psycopg - postgres 数据库
  • simplejson, mixpanel - 这些是可选的,如果你不喜欢可以跳过

因此,要创建 requirements.txt 文件,我们将从我的 git 存储库中准备好它:

clone https://raw2.github.com/mgpepe/django-heroku-15/master/requirements.txt -o requirements.txt
Run Code Online (Sandbox Code Playgroud)

现在使用一个命令,我们将从我们的 requirements.txt 安装所有内容:

pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

太好了,现在我们可以通过以下方式验证我们是否拥有 django:

python -c "import django; print(django.get_version())"
Run Code Online (Sandbox Code Playgroud)

启动 Django 项目

让我们用这一行开始项目,不要忘记最后的点

django-admin.py startproject DJANGO_PROJECT .
Run Code Online (Sandbox Code Playgroud)

现在,如果您键入,ls您应该会看到一个包含您的项目名称的文件夹,其中包含您的 Django 项目。

要查看是否一切正常,请运行:

python manage.py runserver
Run Code Online (Sandbox Code Playgroud)

数据库

运行 Postgres 应用程序。

创建一个数据库(我使用了我的 osx 用户名):

createdb YOUR_DATABASE_NAME --owner=YOUR_OSX_USERNAME
Run Code Online (Sandbox Code Playgroud)

将其更改DATABASES为如下所示:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'YOUR_DATABASE_NAME',
        'USER': 'YOUR_OSX_USERNAME',
        'PASSWORD': 'YOUR_DATABASE_PASSWORD', #might be empty string ''
        'HOST': '127.0.0.1',
        # 'PORT': '5432',
    }
}
Run Code Online (Sandbox Code Playgroud)

并且让我们连接南迁移。你INSTALLED_APPS应该看起来像这样:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'south',
)
Run Code Online (Sandbox Code Playgroud)

SECRET_KEY变量更改为其他内容。

现在,如果一切正常,您应该能够创建第一个表:

python manage.py syncdb
Run Code Online (Sandbox Code Playgroud)

第一个应用程序

现在在你的项目中制作你的第一个应用程序

python manage.py startapp DJANGO_APP
Run Code Online (Sandbox Code Playgroud)

在文件中: ~/PROJECT_WRAPPER/DJANGO_PROJECT/settings.py

DJANGO_APP应用程序添加到变量中的列表中INSTALLED_APPS。应该是这样的:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'south',
    'DJANGO_APP',
)
Run Code Online (Sandbox Code Playgroud)

模板

在设置文件中添加以下行:

TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates')]
Run Code Online (Sandbox Code Playgroud)

为了使模板组织得井井有条,我们将把 base.html 复制到一个文件夹中,并将其余模板复制到应用程序本身中:

cd ~/PROJECT_WRAPPER/
mkdir templates
curl https://raw2.github.com/mgpepe/django-heroku-15/master/templates/base.html -o base.html
Run Code Online (Sandbox Code Playgroud)

现在剩下的模板:

cd ~/PROJECT_WRAPPER/DJANGO_APP/
mkdir templates && cd templates
mkdir DJANGO_APP
curl https://raw2.github.com/mgpepe/django-heroku-15/master/DjMainApp/templates/DjMainApp/changepass.html -o changepass.html
curl https://raw2.github.com/mgpepe/django-heroku-15/master/DjMainApp/templates/DjMainApp/forgot_pass.html -o forgot_pass.html
curl https://raw2.github.com/mgpepe/django-heroku-15/master/DjMainApp/templates/DjMainApp/home.html -o home.html
curl https://raw2.github.com/mgpepe/django-heroku-15/master/DjMainApp/templates/DjMainApp/login.html -o login.html
curl https://raw2.github.com/mgpepe/django-heroku-15/master/DjMainApp/templates/DjMainApp/logout.html -o logout.html
curl https://raw2.github.com/mgpepe/django-heroku-15/master/DjMainApp/templates/DjMainApp/registration.html -o registration.html
curl https://raw2.github.com/mgpepe/django-heroku-15/master/DjMainApp/templates/DjMainApp/splash.html -o splash.html
Run Code Online (Sandbox Code Playgroud)

带有电子邮件的身份验证系统

由于最近流行使用电子邮件而不是用户名,我们也将这样做。

*注意:如果您决定不使用它,您可以跳过这一步,但您必须编辑视图和模板以使用用户名而不是电子邮件。*

在设置中添加以下行:

AUTHENTICATION_BACKENDS = (DJANGO_PROJECT.backends.EmailAuthBackend’,)
Run Code Online (Sandbox Code Playgroud)

然后将文件 backends.py 复制到我们的项目目录中:

cd ~/PROJECT_WRAPPER/DJANGO_PROJECT/
clone https://raw2.github.com/mgpepe/django-heroku-15/master/DjangoHerokuIn15/backends.py -o backends.py
Run Code Online (Sandbox Code Playgroud)

当地的HEROKU

您可以使用 Foreman 模拟在您的计算机上运行的 heroku。让我们创建最简单的配置文件:

cd ~/PROJECT_WRAPPER
echo "web: gunicorn DJANGO_PROJECT.wsgi" > Procfile
foreman start
Run Code Online (Sandbox Code Playgroud)

现在你看到它没有错误地工作,停止它 CTRL+C

在底部的设置中添加:

# HEROKU
###########################
# Parse database configuration from $DATABASE_URL
if os.environ.has_key('DATABASE_URL'):
    import dj_database_url
    DATABASES['default'] =  dj_database_url.config()

# Honor the 'X-Forwarded-Proto' header for request.is_secure()
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

# Allow all host headers
ALLOWED_HOSTS = ['*']
Run Code Online (Sandbox Code Playgroud)

在您的DJANGO_PROJECT/wsgi.py文件中并将以下内容添加到底部:

from dj_static import Cling
application = Cling(get_wsgi_application())
Run Code Online (Sandbox Code Playgroud)

静态文件

理想情况下,您可以从 Amazon 或类似的地方提供静态文件。但是对于简单的站点,您可以使用 Django。设置它需要您将其附加到设置文件中:

# HEROKU STATIC ASSETS CONFIGURATION
################################
import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)
Run Code Online (Sandbox Code Playgroud)

并将所有静态文件放在特定文件夹中。首先转到您的项目文件夹,例如:

cd ~/PROJECT_WRAPPER/DJANGO_PROJECT/
Run Code Online (Sandbox Code Playgroud)

现在您可以复制/粘贴其余部分:

mkdir static && cd static
mkdir css && cd css
clone https://raw2.github.com/mgpepe/django-heroku-15/master/DjangoHerokuIn15/static/css/bootstrap.min.css -o bootstrap.min.css
clone https://raw2.github.com/mgpepe/django-heroku-15/master/DjangoHerokuIn15/static/css/styles.css -o styles.css
cd ..
mkdir js && cd js
clone https://raw2.github.com/mgpepe/django-heroku-15/master/DjangoHerokuIn15/static/js/bootstrap.min.js -o bootstrap.min.js
cd ..
mkdir img && cd img
Run Code Online (Sandbox Code Playgroud)

在最后一个文件夹中,您将放置所需的所有图像。

URL 设置和视图

在 urls.py 中,在 'example' 之前复制这些行:

url(r'^$', "pmfmain.views.splash", name="splash"),
url(r'^login$', "pmfmain.views.login_view", name="login"),
url(r'^signup$', "pmfmain.views.register", name="signup"),
url(r'^forgot$', "pmfmain.views.forgot_pass", name="forgotmypass"),
url(r'^logout$', "pmfmain.views.logout_user", name="logout"),
url(r'^dashboard$', "pmfmain.views.home", name="home”),
Run Code Online (Sandbox Code Playgroud)

然后将 views.py 从我的 github 存储库复制到您的 DJANGO_PROJECT 文件夹:

cd ~/PROJECT_WRAPPER/DJANGO_APP/
rm views.py
clone https://raw2.github.com/mgpepe/django-heroku-15/master/DjMainApp/views.py -o views.py
Run Code Online (Sandbox Code Playgroud)

在整个过程中查找并替换DjMainApp为您真实的 DJANGO_APP 名称views.py

克隆https://raw2.github.com/mgpepe/django-heroku-15/master/DjMainApp/forms.py -o forms.py

通用电气

有些文件不需要在 git 中,所以让我们为此设置配置:

echo -e "venv\n*.pyc\n*.log\n*.pot\nstaticfiles" > .gitignore
Run Code Online (Sandbox Code Playgroud)

现在让我们提交:

git init
git add . 
git commit -m ‘initial commit of django app’
Run Code Online (Sandbox Code Playgroud)

在 git 中创建一个存储库,然后复制 git url(以 .git 结尾的那个)。然后:

git remote add origin THE_URL
git pull origin master
Run Code Online (Sandbox Code Playgroud)

比特桶替代品

如果您不想为 github 付费并且希望您的存储库是私有的,则可以使用 bitbucket。

登录到您的帐户 创建一个新的存储库 单击添加现有项目

git remote add origin https://USERNAME@bitbucket.org/USERNAME/REPOSITORY_NAME.git
Run Code Online (Sandbox Code Playgroud)

多个 HEROKU 帐户和密钥

即使您永远不必拥有多个 heroku 帐户,它也是一种设置和使用它的简单方法,即使是一个帐户也是如此。所以我们继续:

cd ~
heroku plugins:install git://github.com/ddollar/heroku-accounts.git
Run Code Online (Sandbox Code Playgroud)

添加一个 heroku 帐户:

  • heroku accounts:add personal
  • 输入您的 Heroku 凭据。
  • 电子邮件:YOUR_HEROKU_EMAIL
  • 密码:YOUR_HEROKU_PASSWORD

它在控制台中说,你必须这样做:

将以下内容添加到您的 ~/.ssh/config

Host heroku.personal
  HostName heroku.com
  IdentityFile /PATH/TO/PRIVATE/KEY
  IdentitiesOnly yes
Run Code Online (Sandbox Code Playgroud)

使用以下内容转到您的项目文件夹:

cd ~/PROJECT_WRAPPER
Run Code Online (Sandbox Code Playgroud)

然后将新帐户设置为:

heroku accounts:set personal
Run Code Online (Sandbox Code Playgroud)

创建一个新的 ssh KEY:

ssh-keygen -t rsa
Run Code Online (Sandbox Code Playgroud)

当要求输入名称时,请写下完整路径和名称,如图所示。然后输入您的密码或留空

然后将密钥添加到您的 OSX 和 heroku:

heroku keys:add  ~/.ssh/YOUR_KEY_NAME.pub
ssh-add ~/.ssh/YOUR_KEY_NAME
Run Code Online (Sandbox Code Playgroud)

部署 HEROKU 文件

现在您已经按顺序拥有了密钥,您应该可以执行 heroku 应用程序

并看到没有应用程序。添加您的第一个应用程序:

heroku apps:create YOUR_APP_NAME
Run Code Online (Sandbox Code Playgroud)

现在上传到服务器:

git push heroku master
Run Code Online (Sandbox Code Playgroud)

现在去 YOUR_APP_NAME.herokuapp.com 看看你的网站!

域设置

如果有人想要,还有待解释,让我知道

笔记

深入文档位于: