如何将 Django 服务器单独部署到 heroku 上
文章目录
- Django server 单独部署 heroku
- 视频资源
- 部署步骤的 checklist
- 准备工作
- 创建账号
- 使用 pipenv / anaconda 创建python 和 Django 运行环境
- 安装 git
- 安装 heroku cli
- 安装 gunicorn
- 生成 requirements.txt 文件
- 手动创建 Procfile 文件
- 安装 django-heroku
- 手动创建 runtime.txt 文件规定 python 的部署版本
- 正式部署
- 在终端登录 heroku
- 终端创建 heroku 仓库
- init 本地项目文件夹并与远端创建的 heroku 关联
- 将本地项目 push 到 heroku 完成部署
Django server 单独部署 heroku
视频资源
- 参考视频:https://www.bilibili.com/video/BV1ta4y1i7aL/?spm_id_from=333.337.search-card.all.click&vd_source=e162db2199c43956dc501bc6c0725612
- 视频是个印度人讲的,没有中文字幕,但是有英文字母,大家可以去看原视频
部署步骤的 checklist
- 他进行的步骤我从视频中找到了他的 github 并把步骤清单列在这里:
- Copy the project seperately
- Go to 'Getting Started on Heroku with Python'
- Create an Heroku account
- install pipenv
- Install git ( check git --version)
- Install Heroku CLI
- Login heroku
- Create a virtual enviroment
- Run manage.py not gonna run - pip freeze nothing installing
- Check which version django,requests you have and install it
- Run manage.py and then stop it
- Go to django heroku
- Create a Procfile and
- Install django-heroku
- Add stuff to settings.py file
- Install guincorn
- pip freeze > requirements.txt
- heroku create attreyaweb (to create an app on heroku)
- git status git commands (git push heroku master)
- Open up the website
- Admin panel not working. heroku run bash. Migrations
准备工作
创建账号
- 要创建一个 heroku 账号,点此处 这是一个平台,类似于 github,也是通过 git 进行管理,所以要注册一个账号,最终也是通过 git 命令将服务器部署到 heroku 上
使用 pipenv / anaconda 创建python 和 Django 运行环境
- 他这里提到的
install pipenv
的原因是想通过pipenv
创建一个虚拟环境,这个虚拟环境也可以通过anaconda
来创建;虚拟环境的作用主要是保护你本地 python 环境,虚拟环境可以在不影响你本地所有东西的情况下创建一个隔离的环境,在这里面你可以创建任意的 Python 运行环境,也可以随时将这个虚拟环境删除- 我用的命令是
conda create -n server python=3.9
也就是创建了一个名为server
的 python 版本是3.9
的虚拟环境; - python 版本的选择一定要非常慎重,因为目前 heroku 最新的版本只支持几种 python 版本,所以如果你python 版本选错了后面部署的时候他无法在 heroku 那边完成部署,还会报版本错误。
- 至于它现在支持的版本,可以去这里查;注意你的 Heroku-20 还是 Heroku-22,我部署的时候是 Heroku-22 所以直接选择了 3.9 的 python
- 我用的命令是
安装 git
- 安装 git,这个主要是保证你的本地有 git 能够将代码 push 到远端仓库,这个只要是用过 github 或者 gitlab 的小伙伴应该都是ok 的
安装 heroku cli
- 创建一个 heroku 的脚手架 heroku cli,这个安装的方法 官网 也给了
- 我是苹果系统,所以采用第一种方式安装了 heroku 的脚手架
- 登录 heroku 这个步骤我们后面在进行,这里先不急
- 创建虚拟环境我们也已经做完了,就是用 anaconda 创建的;这一步其实应该是写代码之前的配环境环节,但如果你到了这里,很显然你已经代码写完,如果你不是用 heroku 支持的 python 版本开发的程序,你最好用 conda 重新配一个环境,然后把代码复制粘贴到新环境里调试一下看看能不能正常运行。
安装 gunicorn
- 注意: 一定在自己的环境中
pip install gunicorn
这个虽然在你本地的环境中用不到,你本地运行服务器也没有用,但是当你上传代码到 heroku,他会使用 gunicorn 来帮你部署,所以 gunicorn 必须要出现在你的环境中,这样才能随着下一步 freeze 操作生成的 requirements.txt 一起 push 到远端 heroku 仓库
生成 requirements.txt 文件
- 下一步的
pip freeze > requirements.txt
的作用主要是将你所有的 python 环境输出到 requirements.txt 这个文件里面,这个文件记录了你所有运行代码需要的 library 的列表,部署的时候会从这里面读取然后在远程给你配置部署环境,所以非常重要。这一步还有一点非常重要:如果你的 requirements.txt 中出现了这种问题,一定要注意,将后面的内容删掉,手动换成版本号,和其他的那些写法一样,你可以用
pip list
来检查当前环境下所有 library 的版本,唯一正确的写法就是package名称==版本号
手动创建 Procfile 文件
- 接下来需要创建一个
Procfile
文件,这个文件 没有后缀!没有后缀!没有后缀!(mac 容易将无后缀的文件默认是 txt 格式,一定要注意这个问题,这个文件是真正的无后缀的) Procfile
文件中写的内容是web: gunicorn myproject.wsgi
这里的myproject
替换成你的文件的名称,比如我这个服务器中,就应该写成web: gunicorn djangoServer.wsgi
这个文件对于heroku
的部署非常重要,否则部署一定会失败- 这个文件的位置如下:
安装 django-heroku
- 再接着就是安装
django-heroku
,安装命令pip install django-heroku
- 按照官网的指示对 setting.py 的内容进行设置,官网推荐你怎么写你就怎么写
- 根据官网推荐的这个文件去修改你 Django 中原本的
settings.py
文件, - 我把自己的
settings.py
也贴在这里,大家可以参考,尤其注意的是ALLOWED_HOSTS = ["*"]
这句话一定不要漏:
""" Django settings for djangoServer project.Generated by 'django-admin startproject' using Django 3.2.For more information on this file, see https://docs.djangoproject.com/en/3.2/topics/settings/For the full list of settings and their values, see https://docs.djangoproject.com/en/3.2/ref/settings/ """ import datetime from pathlib import Path import dj_database_url import os from django.test.runner import DiscoverRunner from pathlib import Path# Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent""" Heroku """ IS_HEROKU = "DYNO" in os.environ SECRET_KEY = "CHANGE_ME!!!! (P.S. the SECRET_KEY environment variable will be used, if set, instead)."if 'SECRET_KEY' in os.environ:SECRET_KEY = os.environ["SECRET_KEY"]# Generally avoid wildcards(*). However since Heroku router provides hostname validation it is ok if IS_HEROKU:ALLOWED_HOSTS = ["*",'re-echidna-django.herokuapp.com'] else:ALLOWED_HOSTS = ['*','re-echidna-django.herokuapp.com']# SECURITY WARNING: don't run with debug turned on in production! if not IS_HEROKU:DEBUG = True# Application definition# Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/# SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = 'django-insecure-pm42jjw)=bp1*8m3+vd=#kfnbe99213px8yb9*_7^%r6d$wlii'# SECURITY WARNING: don't run with debug turned on in production! DEBUG = TrueALLOWED_HOSTS = ["*"]# Application definitionINSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','RE_app.apps.AppConfig','corsheaders' ]MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware',# 'django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware','corsheaders.middleware.CorsMiddleware','django.middleware.common.CommonMiddleware' ]CORS_ORIGIN_ALLOW_ALL = True CORS_ALLOW_CREDENTIALS = TrueROOT_URLCONF = 'djangoServer.urls'TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'RE_app', 'templates')],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},}, ]WSGI_APPLICATION = 'djangoServer.wsgi.application'# Database # https://docs.djangoproject.com/en/3.2/ref/settings/#databasesDATABASES = {'default': {# 'ENGINE': 'django.db.backends.sqlite3',# 'ENGINE': None,# 'ENGINE': 'djongo',# 'NAME': BASE_DIR / 'db.sqlite3',# 'NAME': 'RE_ECHIDNA',# 'ENFORCE_SCHEMA': False,# 'CLIENT': {# 'host': 'mongodb+srv://<username>:<password>@<atlas cluster>/<myFirstDatabase>?retryWrites=true&w=majority'}# 'host': 'mongodb+srv://ZIYUQ:<password>@cluster0.366apt7.mongodb.net/?retryWrites=true&w=majority'}}}# Password validation # https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validatorsAUTH_PASSWORD_VALIDATORS = [{'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',},{'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',},{'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',},{'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',}, ]# Internationalization # https://docs.djangoproject.com/en/3.2/topics/i18n/LANGUAGE_CODE = 'en-us'TIME_ZONE = 'UTC'USE_I18N = TrueUSE_L10N = TrueUSE_TZ = True# Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/3.2/howto/static-files/STATIC_URL = '/static/'# Default primary key field type # https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-fieldDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'""" Heroku """ # Test Runner Config class HerokuDiscoverRunner(DiscoverRunner):"""Test Runner for Heroku CI, which provides a database for you.This requires you to set the TEST database (done for you by settings().)"""def setup_databases(self, **kwargs):self.keepdb = Truereturn super(HerokuDiscoverRunner, self).setup_databases(**kwargs)# Use HerokuDiscoverRunner on Heroku CI if "CI" in os.environ:TEST_RUNNER = "djangoServer.settings.HerokuDiscoverRunner"# Default primary key field type # https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-fieldDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'# print(os.path.join(BASE_DIR, 'RE_app', 'templates'))
- 根据官网推荐的这个文件去修改你 Django 中原本的
手动创建 runtime.txt 文件规定 python 的部署版本
- 部署前的最后一步,是在文件夹中创建一个 runtime.txt 的文本文件,里面写上你希望远端使用的 python 的版本:
- 说明一下,这里我本地其实 python 是 3.9.0 但是我大胆判断,远端的 3.9.15 应该和 3.9.0 是兼容的,而且远端只支持那么几种 python 版本,我只能选择 3.9.15 因此我这里可以告诉你,本地 3.9 的系列的 python 应该都不影响部署。
正式部署
- 前面是所有的准备工作,现在可以开始部署了:
- 进入你的项目文件夹,以我自己为例,我进入最外层的 djangoServer 文件夹即可:
- 进入你的项目文件夹,以我自己为例,我进入最外层的 djangoServer 文件夹即可:
在终端登录 heroku
heroku login
登录到你自己的 heroku 账号,他会弹出一个界面,登录即可。(如果你使用了 vpn ,执行这一步的时候尽量断掉,否则有可能说你 ip 地址不一致)
终端创建 heroku 仓库
- 这时候创建一个 heroku 仓库
heroku create xxxxx
任意名字,比如我heroku create re-echidna-dataportal
他就会在 heroku 你的账号下面创建一个库。
- 由于我们是直接在本地一个非空的文件夹中创建仓库,所以接下来我们要把这个本地文件夹
init
一下,然后关联上远端的仓库。具体操作也可以根据自己项目中的部署指导来操作(但是官网给出的操作步骤是从零构件一个远端库然后拉到本地,在这个库中你完成代码任务并 push 到远端,如果你是按照我的方法本地已经写完了代码,项目文件夹已经不为空了,就按我的方法执行):
init 本地项目文件夹并与远端创建的 heroku 关联
git init
heroku git:remote -a xxxx
xxx 是刚才 create 的名称- 到这里,我们已经将本地的文件和远端的仓库建立联系了
将本地项目 push 到 heroku 完成部署
git add .
将本地所有的文件提交到本地仓库git commit -am "随便说一句话"
git push heroku master
这句话一执行,远端会根据你的 requirements 准备运行环境,并通过 runtime 选择 python 版本并检查是否支持,最后通过 procfile 来部署
如何将 Django 服务器单独部署到 heroku 上相关推荐
- heroku服务器_如何在Heroku上使用Express服务器部署React应用
heroku服务器 by Ashish Nandan Singh 通过Ashish Nandan Singh 如何在Heroku上使用Express服务器部署React应用 (How to deplo ...
- ASP.NET Core 使用IIS作为Web服务器,部署在IIS上
1.修改项目代码Program.cs文件 替换为如下内容: public class Program { public static void Main(string[] ar ...
- django+boostrap项目部署在IIS上出现找不到woff2文件404错误
django+bootstrap项目正式部署到IIS服务器上后总是出现woff2文件找不到,查找相应文件也是存在的,但是一直报错,很无奈. 后来再查了度娘之后才发现这是IIS服务器的一个bug,它本身 ...
- 2019数据安装勾选_【安装部署】esweb服务器如何单独部署
推荐指数:☆☆☆☆☆ 背景:在勤哲Exce服务器软件的使用过程中,有的客户并发用户数多,可将esweb服务器单独部署. 具体安装步骤: 首先,在一台服务器上安装除填报网站外的应用程序. 双击安装包运行 ...
- flask程序部署到heroku平台的过程
一.准备app及开发环境 (若已经准备好可以跳过直接到后面的部署,下面我以原书作者源代码为示例) 1.在github上新建一个仓库(假设为myapp),然后克隆到本地(不要照抄下面的代码,只是个实例, ...
- ci/cd heroku_在Heroku上部署Dash或Flask Web应用程序。 简易CI / CD。
ci/cd heroku First, we'll transform the animated scatter map built in my previous article into a bas ...
- ci/cd heroku_在GitLab上设置CI / CD以在Heroku上部署Python Flask应用程序
ci/cd heroku Recently I came across a challenge to deploy a Python Flask web application to Heroku. ...
- heroku搭建mysql_在heroku上部署Flask应用程序并将其连接到颚数据库mysql数据库
heroku搭建mysql By: Edward Krueger Data Scientist and Instructor and Douglas Franklin Teaching Assista ...
- 在 Heroku 部署 PHP,heroku部署项目上线
1.首先我们去heroku官网注册一个账号,注册后,邮箱就是你的登录账号. 注意qq邮箱是不能使用的 2.然后我们查看安装教程文档安装.此处我写下mac的安装方式 brew install herok ...
最新文章
- Python入门之编程与编程语言
- 生活随笔[2005-06-06]
- 数据分析基于朴素贝叶斯的书籍评价信息分类
- 以太坊构建DApps系列教程(六):使用定制代币进行投票
- 【zookeeper】zookeeper znode 存储系统解密
- Gartner 2020年十大战略科技发展趋势:边缘赋能、区块链、超自动化、人工智能安全等...
- Java通过坐标点进行拟合函数
- JAVA大型OA协同办公系统源码【源码免费分享】
- 小米手机电池耗尽后进入fastboot死循环的退出方法
- 让·阿方索·德纳(Jean Alfonso decena)引领对话式人工智能创新并颠覆菲律宾金融科技...
- php12生肖是哪个,十二生肖对应的数字
- codeforces 250B Restoring IPv6
- 制作森林图-简单明了
- 管道鸟cortex-M4(TM4C1294)
- 多个ai文件合并成pdf_Ai保存为多页面pdf脚本 Ai(Illustrator)多图层保存
- android 文字动画显示,用粒子动画显示各种文字的 Android 自定义 View
- css将div变为块,css+div 浮动分块
- 文件在线压缩与解压|基于Springboot实现文件在线压缩与解压
- 服务可用性成险企智能运维关键破局能力,博睿数据APM下场助力
- 用二次型捞起一道自主招生题目