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

时间:2014-01-27 14:24:37

标签: django git postgresql heroku

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

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

我已经逐步找到了对我有用的步骤的答案。

你会得到:

  • Django在heroku和你的计算机上都有应用程序。
  • 两台机器上的Postgres数据库
  • 的git /到位桶
  • 身份验证:登录,注销,注册,忘记通过,仅限电子邮件身份验证(可选&默认)
  • 在两台计算机上运行的静态文件
  • 包含Bootstrap 3.0.3
  • South Migrations(instructions

要求

  • heroku account
  • github / bitbucket帐号
  • mac with OSX(在10.9上测试)

3 个答案:

答案 0 :(得分:4)

更新:

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


文件夹结构

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

你看到的那些地方,用你的真名取代!!!

虚拟环境

如果您没有virtualenv,则需要获取它。它允许您为每个项目单独安装软件:

pip install virtualenv

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

cd ~
mkdir PROJECT_WRAPPER && cd PROJECT_WRAPPER
virtualenv venv

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

我们激活并以下列方式开始处理项目:

source venv/bin/activate

Postrges app

在我们继续之前,我们将安装postgres.app。抓住它: http://postgresapp.com/

安装。

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

PATH=/Applications/Postgres.app/Contents/MacOS/bin/:$PATH

Requirements.txt

现在我们需要安装以下内容:

  • Python,Django - 无需解释
  • 南 - 数据库的迁移(Django的dev版本不需要它)
  • 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

现在有了一个命令,我们将安装来自requirements.txt的所有内容:

pip install -r requirements.txt

很好,现在我们可以验证我们有django:

python -c "import django; print(django.get_version())"

启动Django项目

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

django-admin.py startproject DJANGO_PROJECT .

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

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

python manage.py runserver

DATABASE

运行Postgres应用。

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

createdb YOUR_DATABASE_NAME --owner=YOUR_OSX_USERNAME

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',
    }
}

还让我们联系南方的迁移。您的INSTALLED_APPS应该是这样的:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'south',
)

SECRET_KEY变量更改为其他变量。

现在如果一切正常,你应该能够用:

创建第一个表
python manage.py syncdb

FIRST APP

现在在项目中制作第一个应用

python manage.py startapp DJANGO_APP
文件中的

~/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',
)

TEMPLATES

设置文件中的

添加以下行:

TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates')]

为了使模板组织良好和有效,我们将base.html复制到一个文件夹中,其余模板复制到应用程序中:

cd ~/PROJECT_WRAPPER/
mkdir templates
curl https://raw2.github.com/mgpepe/django-heroku-15/master/templates/base.html -o base.html

现在剩下的模板:

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

带有电子邮件的AUTH SYSTEM

由于最近使用电子邮件而不是用户名是时髦的,我们也会这样做。

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

在设置中添加以下行:

AUTHENTICATION_BACKENDS = (DJANGO_PROJECT.backends.EmailAuthBackend’,)

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

cd ~/PROJECT_WRAPPER/DJANGO_PROJECT/
clone https://raw2.github.com/mgpepe/django-heroku-15/master/DjangoHerokuIn15/backends.py -o backends.py

HEROKU LOCALLY

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

cd ~/PROJECT_WRAPPER
echo "web: gunicorn DJANGO_PROJECT.wsgi" > Procfile
foreman start

现在您看到它正常运行,请使用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 = ['*']

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

from dj_static import Cling
application = Cling(get_wsgi_application())

静态文件

理想情况下,您可以从亚马逊等服务器静态文件。但对于简单的网站,您可以使用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'),
)

并将所有静态文件放在特定文件夹中。首先使用以下内容转到项目文件夹:

cd ~/PROJECT_WRAPPER/DJANGO_PROJECT/

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

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

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

网址设置和视图

在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”),

然后将views.py从我的github repo复制到你的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

做一个发现&在整个DjMainApp

中使用您真实的DJANGO_APP名称替换views.py

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

GIT

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

echo -e "venv\n*.pyc\n*.log\n*.pot\nstaticfiles" > .gitignore

现在让我们提交:

git init
git add . 
git commit -m ‘initial commit of django app’

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

git remote add origin THE_URL
git pull origin master

BITBUCKET ALTERNATIVE

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

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

git remote add origin https://USERNAME@bitbucket.org/USERNAME/REPOSITORY_NAME.git

多个HEROKU账户& KEYS

即使您不必拥有多个heroku帐户,也可以轻松地设置和使用它,即使是一个帐户也是如此。所以我们走了:

cd ~
heroku plugins:install git://github.com/ddollar/heroku-accounts.git

添加一个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

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

cd ~/PROJECT_WRAPPER

然后将新帐户设置为:

heroku accounts:set personal

创建新的ssh KEY:

ssh-keygen -t rsa

当询问姓名时,请填写完整路径和名称,如图所示。然后输入密码或留空

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

heroku keys:add  ~/.ssh/YOUR_KEY_NAME.pub
ssh-add ~/.ssh/YOUR_KEY_NAME

部署HEROKU文件

现在您已经按顺序拥有了密钥,您应该能够做到 heroku应用程序

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

heroku apps:create YOUR_APP_NAME

现在要上传到服务器:

git push heroku master

现在转到YOUR_APP_NAME.herokuapp.com查看您的网站!

DOMAIN SETUP

如果有人想要,

还有待解释,请告诉我

注意

深入的文档:

答案 1 :(得分:1)

在我的另一个答案中,这个过程描述得很好,但需要时间。所以我做了一个准备好的安装,不到15分钟就可以了。

https://github.com/mgpepe/django-heroku-15

如果您更喜欢长路径的完整说明,请参阅下面的答案。

答案 2 :(得分:1)

  1. Dyno应该在heroku-> resources中添加/看到,并且如果没有在Heroku的资源中添加它,则意味着存在问题。 procfile
web: gunicorn django_project.wsgi --log-file -
  1. 记住要在settings.py文件中进行更改
DEBUG=True

ALLOWED_HOSTS = ["your-app.herokuapp.com","127.0.0.1"]

   
  1. 将此文件添加到settings.py文件中

    #->这应该在中间件中

'whitenoise.middleware.WhiteNoiseMiddleware', 
#->this at the bottom
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
   
  1. 将其放置在settings.py文件的顶部:

导入django_heroku

place this at the bottom of "settings.py" file:
django_heroku.settings(locals())
   
  1. Heroku仅适用于postgres,记住这一点
  DATABASES = {
        "default": {
            "ENGINE": "django.db.backends.postgresql",
            "NAME": "poll_app",  
            "USER": "postgres",
            "PASSWORD": "1234",
            "HOST": "127.0.0.1",
            "PORT": "5432",
        }
    }

在pgadmin中创建数据库,如果未运行,请在services.msc中启动“ postgres”。在我的情况下,它是“ poll_app”,然后运行命令

python manage.py migrate
  1. 在heroku中转到“您的应用”并转到“设置”,然后在设置中选择“添加buildpack”,然后选择“ python”

  2. “在您的目录中运行此命令”

heroku run bash
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
  1. 通过删除工作目录的git文件重新开始,删除heroku项目(设置->底部)