1082 lines
27 KiB
HTML
1082 lines
27 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||
|
||
<link rel="apple-touch-icon" sizes="76x76" href="../../../assets/img/dashboard/free/apple-icon.png">
|
||
<link rel="icon" type="image/png" href="../../../assets/img/dashboard/free/favicon.png">
|
||
|
||
<title>
|
||
|
||
Black Dashboard Flask by Creative Tim
|
||
|
||
|
||
|
||
|
||
|
||
</title>
|
||
|
||
|
||
|
||
<!-- Fonts and icons -->
|
||
<link href="https://fonts.googleapis.com/css?family=Poppins:200,300,400,600,700,800" rel="stylesheet" />
|
||
<link href="https://use.fontawesome.com/releases/v5.0.6/css/all.css" rel="stylesheet">
|
||
|
||
<!-- Nucleo Icons -->
|
||
<link href="../../../assets/css/nucleo-icons.css" rel="stylesheet" />
|
||
<!-- CSS Files -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<link href="../../../assets/css/dashboard-free.css?v=1.0.0" rel="stylesheet" />
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Documentation extras -->
|
||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/2/docsearch.min.css" />
|
||
|
||
<link rel="stylesheet" href="../../../assets/demo/docs.min.css">
|
||
|
||
<style>
|
||
.navbar-absolute-logo{
|
||
padding-left: 45px;
|
||
}
|
||
.navbar-absolute-logo img{
|
||
position: absolute;
|
||
left: 15px;
|
||
margin-top: -6px;
|
||
}
|
||
body{
|
||
background: white;
|
||
}
|
||
</style>
|
||
|
||
|
||
<!-- CSS Just for demo purpose, don't include it in your project -->
|
||
<link href="../../../assets/demo/dashboard/free/demo.css" rel="stylesheet" />
|
||
|
||
|
||
|
||
</head>
|
||
<body class="bd-docs" data-spy="scroll" data-target=".bd-sidenav-active">
|
||
|
||
|
||
<a id="skippy" class="sr-only sr-only-focusable" href="#content">
|
||
<div class="container">
|
||
<span class="skiplink-text">Skip to main content</span>
|
||
</div>
|
||
</a>
|
||
|
||
<header class="navbar navbar-expand bg-primary flex-column flex-md-row bd-navbar">
|
||
<a class="navbar-brand mr-0 mr-md-2 navbar-absolute-logo" href="https://www.creative-tim.com/product/black-dashboard-flask" target="_blank">
|
||
Black Dashboard Flask
|
||
</a>
|
||
|
||
<ul class="navbar-nav flex-row d-none d-md-flex">
|
||
<li class="nav-item">
|
||
<a class="nav-link p-2" href="#version">
|
||
1.0.0
|
||
</a>
|
||
</li>
|
||
|
||
<!-- <li class="nav-item dropdown">
|
||
<a class="nav-item nav-link dropdown-toggle mr-md-2" href="#" id="bd-versions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||
v2.0.0
|
||
</a>
|
||
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="bd-versions">
|
||
<a class="dropdown-item active" href="/docs/1.0/">BS4 - 1.0.0</a>
|
||
<a class="dropdown-item" href="">BS3 - 1.2.1</a>
|
||
</div>
|
||
</li> -->
|
||
|
||
<li class="nav-item">
|
||
<a class="nav-link p-2" href="https://github.com/creativetimofficial/black-dashboard-flask" target="_blank" rel="noopener" aria-label="GitHub">
|
||
<svg class="navbar-nav-svg" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 499.36" focusable="false"><title>GitHub</title><path d="M256 0C114.64 0 0 114.61 0 256c0 113.09 73.34 209 175.08 242.9 12.8 2.35 17.47-5.56 17.47-12.34 0-6.08-.22-22.18-.35-43.54-71.2 15.49-86.2-34.34-86.2-34.34-11.64-29.57-28.42-37.45-28.42-37.45-23.27-15.84 1.73-15.55 1.73-15.55 25.69 1.81 39.21 26.38 39.21 26.38 22.84 39.12 59.92 27.82 74.5 21.27 2.33-16.54 8.94-27.82 16.25-34.22-56.84-6.43-116.6-28.43-116.6-126.49 0-27.95 10-50.8 26.35-68.69-2.63-6.48-11.42-32.5 2.51-67.75 0 0 21.49-6.88 70.4 26.24a242.65 242.65 0 0 1 128.18 0c48.87-33.13 70.33-26.24 70.33-26.24 14 35.25 5.18 61.27 2.55 67.75 16.41 17.9 26.31 40.75 26.31 68.69 0 98.35-59.85 120-116.88 126.32 9.19 7.9 17.38 23.53 17.38 47.41 0 34.22-.31 61.83-.31 70.23 0 6.85 4.61 14.81 17.6 12.31C438.72 464.97 512 369.08 512 256.02 512 114.62 397.37 0 256 0z" fill="currentColor" fill-rule="evenodd"/></svg>
|
||
|
||
</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a class="nav-link p-2" href="https://twitter.com/CreativeTim" target="_blank" rel="noopener" aria-label="Twitter">
|
||
<svg class="navbar-nav-svg" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 416.32" focusable="false"><title>Twitter</title><path d="M160.83 416.32c193.2 0 298.92-160.22 298.92-298.92 0-4.51 0-9-.2-13.52A214 214 0 0 0 512 49.38a212.93 212.93 0 0 1-60.44 16.6 105.7 105.7 0 0 0 46.3-58.19 209 209 0 0 1-66.79 25.37 105.09 105.09 0 0 0-181.73 71.91 116.12 116.12 0 0 0 2.66 24c-87.28-4.3-164.73-46.3-216.56-109.82A105.48 105.48 0 0 0 68 159.6a106.27 106.27 0 0 1-47.53-13.11v1.43a105.28 105.28 0 0 0 84.21 103.06 105.67 105.67 0 0 1-47.33 1.84 105.06 105.06 0 0 0 98.14 72.94A210.72 210.72 0 0 1 25 370.84a202.17 202.17 0 0 1-25-1.43 298.85 298.85 0 0 0 160.83 46.92" fill="currentColor"/></svg>
|
||
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
|
||
<div class="navbar-nav-scroll ml-md-auto ">
|
||
<ul class="navbar-nav bd-navbar-nav flex-row">
|
||
<li class="nav-item">
|
||
<a target="_blank" href="javascript:void(0)" rel="nofollow" class="btn btn-round btn-default disabled"><i class="tim-icons icon-send mr-2"></i>Upgrade to PRO</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a class="nav-link active" href="../../../docs/1.0/getting-started/introduction.html"><i class="tim-icons icon-app"></i> Documentation</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a class="nav-link" href="https://www.creative-tim.com/live/black-dashboard-flask"><i class="tim-icons icon-tv-2"></i> Live Preview</a>
|
||
</li>
|
||
|
||
<li class="nav-item">
|
||
<a class="nav-link" href="https://github.com/creativetimofficial/black-dashboard-flask" target="_blank" rel="noopener"><i class="tim-icons icon-shape-star"></i> Help with a star</a>
|
||
</li>
|
||
|
||
<li class="nav-item">
|
||
<a class="nav-link" href="" target="_blank" rel="noopener"></a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a class="nav-link" href="" target="_blank" rel="noopener"></a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<a href="https://github.com/creativetimofficial/black-dashboard-flask" class="github-corner" aria-label="View source on Github"><svg width="60" height="60" viewBox="0 0 250 250" style="fill:#fff; color:#9c27b0; position: absolute; top: 0; border: 0; right: 0;" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path></svg></a><style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}</style>
|
||
|
||
<!-- <a class="btn btn-white d-none d-lg-inline-block" href="">Download</a> -->
|
||
</header>
|
||
|
||
|
||
<div class="container-fluid">
|
||
<div class="row flex-xl-nowrap">
|
||
<div class="col-12 col-md-3 col-xl-2 bd-sidebar">
|
||
<nav class="collapse bd-links" id="bd-docs-nav">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="bd-toc-item active">
|
||
<a class="bd-toc-link" href="#docs">
|
||
Getting started
|
||
</a>
|
||
|
||
<ul class="nav bd-sidenav">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="">
|
||
|
||
<a href="../../../docs/1.0/getting-started/getting-started-flask.html">
|
||
Getting Started Flask
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="">
|
||
|
||
<a href="../../../docs/1.0/getting-started/license.html">
|
||
License
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="bd-toc-item active">
|
||
<a class="bd-toc-link" href="#docs">
|
||
Foundation
|
||
</a>
|
||
|
||
<ul class="nav bd-sidenav">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="">
|
||
|
||
<a href="../../../docs/1.0/foundation/colors.html">
|
||
Colors
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="bd-toc-item active">
|
||
<a class="bd-toc-link" href="#docs">
|
||
Components
|
||
</a>
|
||
|
||
<ul class="nav bd-sidenav">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="">
|
||
|
||
<a href="../../../docs/1.0/components/alerts.html">
|
||
Alerts
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="">
|
||
|
||
<a href="../../../docs/1.0/components/badge.html">
|
||
Badge
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="">
|
||
|
||
<a href="../../../docs/1.0/components/breadcrumb.html">
|
||
Breadcrumb
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="">
|
||
|
||
<a href="../../../docs/1.0/components/buttons.html">
|
||
Buttons
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="">
|
||
|
||
<a href="../../../docs/1.0/components/card.html">
|
||
Card
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="">
|
||
|
||
<a href="../../../docs/1.0/components/collapse.html">
|
||
Collapse
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="">
|
||
|
||
<a href="../../../docs/1.0/components/dropdowns.html">
|
||
Dropdowns
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="">
|
||
|
||
<a href="../../../docs/1.0/components/forms.html">
|
||
Forms
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="">
|
||
|
||
<a href="../../../docs/1.0/components/google-maps.html">
|
||
Google Maps
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="">
|
||
|
||
<a href="../../../docs/1.0/components/modal.html">
|
||
Modal
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="">
|
||
|
||
<a href="../../../docs/1.0/components/navs.html">
|
||
Navs
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="">
|
||
|
||
<a href="../../../docs/1.0/components/navbar.html">
|
||
Navbar
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="">
|
||
|
||
<a href="../../../docs/1.0/components/nucleo-icons.html">
|
||
Nucleo Icons
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="">
|
||
|
||
<a href="../../../docs/1.0/components/tables.html">
|
||
Tables
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="bd-toc-item active">
|
||
<a class="bd-toc-link" href="#docs">
|
||
Plugins
|
||
</a>
|
||
|
||
<ul class="nav bd-sidenav">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="">
|
||
|
||
<a href="../../../docs/1.0/plugins/perfect-scrollbar.html">
|
||
Perfect Scrollbar
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="">
|
||
|
||
<a href="../../../docs/1.0/plugins/chart-js.html">
|
||
Chart.js
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</div>
|
||
|
||
</nav>
|
||
|
||
</div>
|
||
|
||
|
||
<div class="d-none d-xl-block col-xl-2 bd-toc">
|
||
<ul class="section-nav">
|
||
<li class="toc-entry toc-h1"><a href="#flask-deploy-on-heroku">Flask Deploy on Heroku</a>
|
||
<ul>
|
||
<li class="toc-entry toc-h2"><a href="#prerequisites">Prerequisites</a></li>
|
||
<li class="toc-entry toc-h2"><a href="#what-is-flask">What is Flask</a></li>
|
||
<li class="toc-entry toc-h2"><a href="#what-is-heroku">What is Heroku</a></li>
|
||
<li class="toc-entry toc-h2"><a href="#sample-project---flask-boilerplate">Sample project - Flask Boilerplate</a>
|
||
<ul>
|
||
<li class="toc-entry toc-h3"><a href="#gunicorn-module">Gunicorn module</a></li>
|
||
<li class="toc-entry toc-h3"><a href="#file---runtimetxt">File - runtime.txt</a></li>
|
||
<li class="toc-entry toc-h3"><a href="#procfile">Procfile</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toc-entry toc-h2"><a href="#how-to-deploy-on-heroku">How to deploy on Heroku</a></li>
|
||
<li class="toc-entry toc-h2"><a href="#help--resources">Help & Resources</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
|
||
|
||
<main class="col-12 col-md-9 col-xl-8 py-md-3 pl-md-5 bd-content" role="main">
|
||
<h1 class="bd-title" id="content">How to deploy Flask on Heroku</h1>
|
||
|
||
<p class="bd-lead"></p>
|
||
<hr />
|
||
<p>This page explains how to deploy a <a href="https://www.palletsprojects.com/p/flask/">Flask</a> application on Heroku, the popular deployment platform.</p>
|
||
|
||
<p><br /></p>
|
||
|
||
<h2 id="prerequisites">Prerequisites</h2>
|
||
|
||
<ul>
|
||
<li>Basic programming knowledge in Python</li>
|
||
<li>Basic Flask knowledge and <strong>WSGI</strong> concept</li>
|
||
<li>Comfortable using a terminal</li>
|
||
<li>Already familiar with <a href="https://git-scm.com/">GIT</a></li>
|
||
</ul>
|
||
|
||
<p><br /></p>
|
||
|
||
<h2 id="what-is-flask">What is <a href="https://palletsprojects.com/p/flask/">Flask</a></h2>
|
||
<hr />
|
||
|
||
<p>Flask is a lightweight <a href="https://docs.appseed.us/what-is/wsgi/">WSGI</a> web application framework. It is designed to make getting started quick and easy, with the ability to scale up to complex applications.
|
||
Classified as a microframework, Flask is written in Python and it does not require particular tools or libraries. It has no database abstraction layer, form validation, or any other components where pre-existing third-party libraries provide common functions.</p>
|
||
|
||
<blockquote>
|
||
<p><strong>Flask Links</strong></p>
|
||
</blockquote>
|
||
|
||
<ul>
|
||
<li><a href="https://palletsprojects.com/p/flask/">Flask</a> - the official website</li>
|
||
<li><a href="https://flask.palletsprojects.com/">Flask Documentation</a></li>
|
||
</ul>
|
||
|
||
<p><br /></p>
|
||
|
||
<h2 id="what-is-heroku">What is <a href="https://www.heroku.com/">Heroku</a></h2>
|
||
<hr />
|
||
|
||
<p>Heroku’s a fully-managed platform that helps developers to deploy apps with ease.
|
||
Heroku is a cloud-based, fully-managed platform as a service (Paas) for building, running, and managing apps.</p>
|
||
|
||
<blockquote>
|
||
<p>A short-list with features:</p>
|
||
</blockquote>
|
||
|
||
<ul>
|
||
<li>Runtime - Heroku empowers developers to deliver products using a CLI, called <em>Heroku Toolbelt</em></li>
|
||
<li>PostgreSQL DBMS - a powerful database already configured to be production-ready</li>
|
||
<li>Automatic scaling - Heroku scales in an instant, both vertically and horizontally.</li>
|
||
<li>Github integration - trigger production builds directly from Github commits</li>
|
||
</ul>
|
||
|
||
<blockquote>
|
||
<p><strong>Heroku Links</strong></p>
|
||
</blockquote>
|
||
|
||
<ul>
|
||
<li><a href="https://www.heroku.com/">Heroku</a> - the official website</li>
|
||
<li><a href="https://devcenter.heroku.com/">Heroku Documentation</a></li>
|
||
</ul>
|
||
|
||
<p><br /></p>
|
||
|
||
<p>To explain the process, we will use a simple Flask Boilerplate already enhanced for a Heroku deployment.</p>
|
||
|
||
<h2 id="sample-project---flask-boilerplate">Sample project - <a href="https://github.com/app-generator/boilerplate-code-flask">Flask Boilerplate</a></h2>
|
||
<hr />
|
||
|
||
<p><em>Flask Boilerplate</em> is a template codebase used by the <strong>AppSeed</strong> platform to generate <a href="https://appseed.us/apps/flask-apps">Flask Apps</a> enhanced with a basic set of features:</p>
|
||
|
||
<ul>
|
||
<li>UI-Ready, Jinja2 templating</li>
|
||
<li>SQLite database, Flask-SQLAlchemy ORM</li>
|
||
<li>Session-Based auth flow (login, register) via Flask-Login</li>
|
||
<li>Deployment scripts: Docker, Gunicorn / Nginx, Heroku</li>
|
||
</ul>
|
||
|
||
<p>As mentioned, the project comes pre-configured for Heroku. The relevant files are listed below:</p>
|
||
|
||
<ul>
|
||
<li><a href="https://github.com/app-generator/boilerplate-code-flask/blob/master/runtime.txt">runtime.txt</a> - specify the Python version used by Heroku during the build and deploy</li>
|
||
<li><a href="https://github.com/app-generator/boilerplate-code-flask/blob/master/Procfile">Procfile</a> - configuration file that informs Heroku where to look for the <a href="https://docs.appseed.us/what-is/wsgi/">WSGI</a> interface</li>
|
||
<li><a href="https://github.com/app-generator/boilerplate-code-flask/blob/master/requirements.txt">requirements.txt</a> - must contain the <code class="highlighter-rouge">gunicorn</code> module</li>
|
||
</ul>
|
||
|
||
<p><br /></p>
|
||
|
||
<h3 id="gunicorn-module"><a href="https://docs.gunicorn.org/en/stable/">Gunicorn</a> module</h3>
|
||
<hr />
|
||
|
||
<p>Gunicorn <code class="highlighter-rouge">Green Unicorn</code> is a Python WSGI HTTP Server for UNIX. It’s a pre-fork worker model ported from Ruby’s Unicorn project. The Gunicorn server is broadly compatible with various web frameworks, simply implemented, light on server resources, and fairly speedy.</p>
|
||
|
||
<p>For basic usage please access the <a href="https://pypi.org/project/gunicorn/">PyPi</a> page or the official <a href="https://pypi.org/project/gunicorn/">docs</a>.</p>
|
||
|
||
<p><br /></p>
|
||
|
||
<h3 id="file---runtimetxt">File - <a href="https://github.com/app-generator/boilerplate-code-flask/blob/master/runtime.txt">runtime.txt</a></h3>
|
||
<hr />
|
||
|
||
<p>To build the deploy any python-based app, Heroku uses a default Python version <code class="highlighter-rouge">python-3.6.10</code> or the one specified in the runtime.txt file. Supported environment, as per Heroku official documentation - <a href="https://devcenter.heroku.com/articles/python-support#specifying-a-python-version">Specifying a Python version</a>:</p>
|
||
|
||
<ul>
|
||
<li>python-3.8.3</li>
|
||
<li>python-3.7.7</li>
|
||
<li>python-3.6.10 <– <strong>The Default Version</strong></li>
|
||
<li>python-2.7.18</li>
|
||
</ul>
|
||
|
||
<p><br /></p>
|
||
|
||
<h3 id="procfile">Procfile</h3>
|
||
<hr />
|
||
|
||
<p>Heroku apps include a Procfile that specifies the commands that are executed by the app on startup.
|
||
As specified in the <a href="https://devcenter.heroku.com/articles/procfile">official docs</a>, the <em>Procfile</em> is always a simple text file that is named Procfile without a file extension.</p>
|
||
|
||
<figure class="highlight"><pre><code class="language-html" data-lang="html">web: gunicorn run:app --log-file=-</code></pre></figure>
|
||
|
||
<p>For our sample, <code class="highlighter-rouge">gunicorn</code> is called with <code class="highlighter-rouge">run:app</code> argument.</p>
|
||
|
||
<p><br /></p>
|
||
|
||
<h2 id="how-to-deploy-on-heroku">How to deploy on Heroku</h2>
|
||
|
||
<ul>
|
||
<li><a href="https://signup.heroku.com/">Create a FREE account</a> on Heroku platform</li>
|
||
<li><a href="https://devcenter.heroku.com/articles/getting-started-with-python#set-up">Install the Heroku CLI</a> that match your OS: Mac, Unix or Windows</li>
|
||
<li>Open a terminal window and authenticate via <code class="highlighter-rouge">heroku login</code> command</li>
|
||
<li>Clone the sources and push the project for LIVE deployment</li>
|
||
</ul>
|
||
|
||
<p>The full command list, executed on our sample project.</p>
|
||
|
||
<figure class="highlight"><pre><code class="language-html" data-lang="html">$ # Clone the source code:
|
||
$ git clone https://github.com/app-generator/boilerplate-code-flask.git
|
||
$ cd boilerplate-code-flask
|
||
$
|
||
$ # Check Heroku CLI is installed
|
||
$ heroku -v
|
||
heroku/7.25.0 win32-x64 node-v12.13.0 # <span class="nt"><--</span> <span class="na">All</span> <span class="na">good</span>
|
||
<span class="err">$</span>
|
||
<span class="err">$</span> <span class="na">#</span> <span class="na">Check</span> <span class="na">Heroku</span> <span class="na">CLI</span> <span class="na">is</span> <span class="na">installed</span>
|
||
<span class="err">$</span> <span class="na">heroku</span> <span class="na">login</span>
|
||
<span class="err">$</span> <span class="na">#</span> <span class="na">this</span> <span class="na">command</span> <span class="na">will</span> <span class="na">open</span> <span class="na">a</span> <span class="na">browser</span> <span class="na">window</span> <span class="na">-</span> <span class="na">click</span> <span class="na">the</span> <span class="na">login</span> <span class="na">button</span> <span class="err">(</span><span class="na">in</span> <span class="na">browser</span><span class="err">)</span>
|
||
<span class="err">$</span>
|
||
<span class="err">$</span> <span class="na">#</span> <span class="na">Create</span> <span class="na">the</span> <span class="na">Heroku</span> <span class="na">project</span>
|
||
<span class="err">$</span> <span class="na">heroku</span> <span class="na">create</span>
|
||
<span class="err">$</span>
|
||
<span class="err">$</span> <span class="na">#</span> <span class="na">Trigger</span> <span class="na">the</span> <span class="na">LIVE</span> <span class="na">deploy</span>
|
||
<span class="err">$</span> <span class="na">git</span> <span class="na">push</span> <span class="na">heroku</span> <span class="na">master</span>
|
||
<span class="err">$</span>
|
||
<span class="err">$</span> <span class="na">#</span> <span class="na">Open</span> <span class="na">the</span> <span class="na">LIVE</span> <span class="na">app</span> <span class="na">in</span> <span class="na">browser</span>
|
||
<span class="err">$</span> <span class="na">heroku</span> <span class="na">open</span></code></pre></figure>
|
||
|
||
<p>At this point, you should be able to visit the app in the browser.</p>
|
||
|
||
<p><br /></p>
|
||
|
||
<h2 id="help--resources">Help & Resources</h2>
|
||
|
||
<ul>
|
||
<li>Read more about Heroku - <a href="https://devcenter.heroku.com/">official docs</a></li>
|
||
<li><a href="https://www.creative-tim.com/templates/flask">Flask Templates</a> - index provided by Creative-Tim</li>
|
||
</ul>
|
||
|
||
<p><br /></p>
|
||
|
||
</main>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Core JS Files -->
|
||
<script src="../../../assets/js/core/jquery.min.js" ></script>
|
||
<script src="../../../assets/js/core/popper.min.js" ></script>
|
||
<script src="../../../assets/js/core/bootstrap.min.js" ></script>
|
||
<script src="../../../assets/js/plugins/dashboard/free/perfect-scrollbar.jquery.min.js" ></script>
|
||
|
||
|
||
|
||
|
||
<!-- Google Maps Plugin -->
|
||
|
||
<!-- Place this tag in your head or just before your close body tag. -->
|
||
|
||
<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_KEY_HERE"></script>
|
||
|
||
|
||
<!-- Chart JS -->
|
||
<script src="../../../assets/js/plugins/dashboard/free/chartjs.min.js"></script>
|
||
|
||
<!-- Notifications Plugin -->
|
||
<script src="../../../assets/js/plugins/dashboard/free/bootstrap-notify.js"></script>
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Control Center for Black Dashboard: parallax effects, scripts for the example pages etc --><script src="../../../assets/js/dashboard-free.js?v=1.0.0"></script><!-- Black Dashboard DEMO methods, don't include it in your project! -->
|
||
<script src="../../../assets/demo/dashboard/free/demo.js"></script>
|
||
|
||
|
||
|
||
<script>
|
||
$(document).ready(function(){
|
||
$().ready(function(){
|
||
$sidebar = $('.sidebar');
|
||
$navbar = $('.navbar');
|
||
$main_panel = $('.main-panel');
|
||
|
||
$full_page = $('.full-page');
|
||
|
||
$sidebar_responsive = $('body > .navbar-collapse');
|
||
sidebar_mini_active = true;
|
||
white_color = false;
|
||
|
||
window_width = $(window).width();
|
||
|
||
fixed_plugin_open = $('.sidebar .sidebar-wrapper .nav li.active a p').html();
|
||
|
||
|
||
|
||
$('.fixed-plugin a').click(function(event){
|
||
if($(this).hasClass('switch-trigger')){
|
||
if(event.stopPropagation){
|
||
event.stopPropagation();
|
||
}
|
||
else if(window.event){
|
||
window.event.cancelBubble = true;
|
||
}
|
||
}
|
||
});
|
||
|
||
$('.fixed-plugin .background-color span').click(function(){
|
||
$(this).siblings().removeClass('active');
|
||
$(this).addClass('active');
|
||
|
||
var new_color = $(this).data('color');
|
||
|
||
if($sidebar.length != 0){
|
||
$sidebar.attr('data',new_color);
|
||
}
|
||
|
||
if($main_panel.length != 0){
|
||
$main_panel.attr('data',new_color);
|
||
}
|
||
|
||
if($full_page.length != 0){
|
||
$full_page.attr('filter-color',new_color);
|
||
}
|
||
|
||
if($sidebar_responsive.length != 0){
|
||
$sidebar_responsive.attr('data',new_color);
|
||
}
|
||
});
|
||
|
||
$('.switch-sidebar-mini input').on("switchChange.bootstrapSwitch", function(){
|
||
var $btn = $(this);
|
||
|
||
if(sidebar_mini_active == true){
|
||
$('body').removeClass('sidebar-mini');
|
||
sidebar_mini_active = false;
|
||
blackDashboard.showSidebarMessage('Sidebar mini deactivated...');
|
||
}else{
|
||
$('body').addClass('sidebar-mini');
|
||
sidebar_mini_active = true;
|
||
blackDashboard.showSidebarMessage('Sidebar mini activated...');
|
||
}
|
||
|
||
// we simulate the window Resize so the charts will get updated in realtime.
|
||
var simulateWindowResize = setInterval(function(){
|
||
window.dispatchEvent(new Event('resize'));
|
||
},180);
|
||
|
||
// we stop the simulation of Window Resize after the animations are completed
|
||
setTimeout(function(){
|
||
clearInterval(simulateWindowResize);
|
||
},1000);
|
||
});
|
||
|
||
$('.switch-change-color input').on("switchChange.bootstrapSwitch", function(){
|
||
var $btn = $(this);
|
||
|
||
if(white_color == true){
|
||
|
||
$('body').addClass('change-background');
|
||
setTimeout(function(){ $('body').removeClass('change-background');
|
||
$('body').removeClass('white-content'); }, 900);
|
||
white_color = false;
|
||
}else{
|
||
|
||
$('body').addClass('change-background');
|
||
setTimeout(function(){ $('body').removeClass('change-background');
|
||
$('body').addClass('white-content');}, 900);
|
||
|
||
white_color = true;
|
||
}
|
||
|
||
|
||
});
|
||
|
||
$('.light-badge').click(function(){
|
||
$('body').addClass('white-content');
|
||
});
|
||
|
||
$('.dark-badge').click(function(){
|
||
$('body').removeClass('white-content');
|
||
});
|
||
});
|
||
});
|
||
</script>
|
||
|
||
|
||
|
||
|
||
<script src="../../../assets/demo/docs.min.js"></script>
|
||
<script src="../../../assets/demo/vendor/anchor.min.js"></script>
|
||
<script src="../../../assets/demo/vendor/clipboard.min.js"></script>
|
||
<script src="../../../assets/demo/vendor/holder.min.js"></script>
|
||
<script src="../../../assets/demo/src/application.js"></script>
|
||
|
||
<script>
|
||
$(document).ready(function(){
|
||
if($('#lineChartExample').length != 0){
|
||
demo.initDocChart();
|
||
}
|
||
|
||
|
||
|
||
|
||
});
|
||
</script>
|
||
|
||
<script>
|
||
Holder.addTheme('gray', {
|
||
bg: '#777',
|
||
fg: 'rgba(255,255,255,.75)',
|
||
font: 'Helvetica',
|
||
fontweight: 'normal'
|
||
})
|
||
</script>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<script src="https://cdn.trackjs.com/agent/v3/latest/t.js"></script><script>
|
||
window.TrackJS &&
|
||
TrackJS.install({
|
||
token: "ee6fab19c5a04ac1a32a645abde4613a",
|
||
application: "black-dashboard-free"
|
||
});
|
||
</script>
|
||
|
||
|
||
</body>
|
||
</html>
|