Heroku部署上线应用流程,(完全免费)

Heroku项目部署:
Heroku 的基本安装配置#
首先我们需要先 注册一个 Heroku 账号(https://signup.heroku.com/)。
无法顺畅打开 Heroku 网站的同学,可以使用vpn
打开安装教程(https://devcenter.heroku.com/articles/heroku-cli)进行安装,
1·安装完之后,使用命令登录Heroku账号:(本人在git bash中使用出现错误,所以只能用cmd)
$ heroku login

2·添加 SSH Key 到 Heroku 上:
$ heroku keys:add

3·要将应用部署到 Heroku 上,我们还需要在 Laravel 项目下新建一个 Procfile 文件,通过配置该文件来告诉 Heroku 应当使用什么命令来启动 Web 服务器。接着还需要将该文件纳入到 Git 版本控制中:


$ cd ~/Code/Laravel $ echo web: vendor/bin/heroku-php-apache2 public/ > Procfile $ git add -A $ git commit -m "Procfile for Heroku"

4·创建一个 Heroku App:
$ heroku create

如果你对生成的默认名称不满意,你可以使用 heroku rename 来对应用名称进行更改,但要保证更改的名称未被其它人占用。如:
$ heroku rename your-app-name

5·配置 Procfile 文件:

$ git push
$ heroku buildpacks:set heroku/php

6·生成 App Key:
$ php artisan key:generate
Application key [base64:MVTsBvo52CJl3Ud1/4gAsqnDzHVaw4EhgpE6oxxx4=] set successfully.

7·将生成的 App Key (如以上 base64:MVTsBvo52CJl3Ud1/4gAsqnDzHVaw4EhgpE6oxxx4= ) 替换掉下面命令的 并运行命令:
$ heroku config:set APP_KEY=<your_app_key>

8·配置基本完成,将代码推送到 Heroku 上:
$ git push heroku master

Heroku 为 Laravel 应用提供了数据存储的功能,我们可以在 Heroku 上使用 MySQL 或 PostgreSQL 来进行数据存储。由于 Heroku 对 PostgreSQL 的支持比 MySQL 更好,因此本教程中将在 Heroku 上使用 PostgreSQL 来作为我们应用的数据库。

要在 Heroku 上使用 PostgreSQL,我们需要先安装 PostgreSQL 扩展。
$ heroku addons:add heroku-postgresql:hobby-dev

安装完成之后,Heroku 将为我们生成一个唯一的数据库 URL – DATABASE_URL,我们可以通过下面命令查看 Heroku 的所有配置信息:
$ heroku config

在本地开发中,我们使用了 MySQL 来作为数据库储存,但在 Heroku 环境上我们要改为使用 PostgreSQL 来作为数据库储存。因此在进行数据库设置时,我们需要对当前环境进行判断。如果环境为本地环境,则使用 MySQL 数据库,若为 Heroku 环境,则使用 PostgreSQL 数据库。我们可以通过为 Heroku 新增一个 IS_IN_HEROKU 配置项来判断应用是否运行在 Heroku 上。
$ heroku config:set IS_IN_HEROKU=true

一般来说,应用的数据库都在 config/database.php 中进行配置,因此我们需要针对该配置文件,来为不同环境的数据库连接方式定义一个帮助方法,以便根据应用不同的运行环境来指定数据库配置信息,我们需要新建一个 helpers.php 文件并写入以下内容:

bootstrap/helpers.php

<?php

function get_db_config()
{
    if (getenv('IS_IN_HEROKU')) {
        $url = parse_url(getenv("DATABASE_URL"));

        return $db_config = [
            'connetion' => 'pgsql',
            'host' => $url["host"],
            'database'  => substr($url["path"], 1),
            'username'  => $url["user"],
            'password'  => $url["pass"],
        ];
    } else {
        return $db_config = [
            'connetion' => env('DB_CONNECTION', 'mysql'),
            'host' => env('DB_HOST', 'localhost'),
            'database'  => env('DB_DATABASE', 'forge'),
            'username'  => env('DB_USERNAME', 'forge'),
            'password'  => env('DB_PASSWORD', ''),
        ];
    }
}

可以看到,我们定义了 get_db_config 方法来根据数据库的不同运行环境获取不同的配置信息。通过 Heroku 生成的 DATABASE_URL 包含了一切与数据库相关的配置信息,如主机、用户名、密码、数据库等,因此我们需要使用 parse_url 方法对其进行解析,来获取到指定的值。当运行环境为 Heroku 时,我们使用 DATABASE_URL 提供的数据库配置信息,如果为其它环境,则使用默认的数据库配置信息。

在我们新增 helpers.php 文件之后,还需要在应用中对该文件进行配置,自动加载该文件。

bootstrap/app.php

<?php

require __DIR__.'/helpers.php';

.
.
.

现在,让我们使用刚刚定义好的 get_db_config 方法对数据库进行配置。

config/database.php

<?php

$db_config = get_db_config();

return [

    'default' => $db_config['connetion'],

    'connections' => [

        'sqlite' => [
            'driver' => 'sqlite',
            'database' => env('DB_DATABASE', database_path('database.sqlite')),
            'prefix' => '',
        ],

        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],

        'pgsql' => [
            'driver'   => 'pgsql',
            'host'     => $db_config['host'],
            'port'     => env('DB_PORT', '5432'),
            'database' => $db_config['database'],
            'username' => $db_config['username'],
            'password' => $db_config['password'],
            'charset'  => 'utf8',
            'prefix'   => '',
            'schema'   => 'public',
            'sslmode'  => 'prefer',
        ],

        'sqlsrv' => [
            'driver' => 'sqlsrv',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '1433'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | Migration Repository Table
    |--------------------------------------------------------------------------
    |
    | This table keeps track of all the migrations that have already run for
    | your application. Using this information, we can determine which of
    | the migrations on disk haven't actually been run in the database.
    |
    */

    'migrations' => 'migrations',

    /*
    |--------------------------------------------------------------------------
    | Redis Databases
    |--------------------------------------------------------------------------
    |
    | Redis is an open source, fast, and advanced key-value store that also
    | provides a richer set of commands than a typical key-value systems
    | such as APC or Memcached. Laravel makes it easy to dig right in.
    |
    */

    'redis' => [

        'client' => 'predis',

        'default' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => 0,
        ],

    ],

];

现在整个用户注册功能到此已开发完毕。让我们将改动的代码进行提交,并推送到 GitHub 和 Heroku 上。

$ git add -A
$ git commit -m "Updated database configuration"
$ git push
$ git push heroku master

我们可以使用 heroku run 在 Heroku 运行 Laravel 的指定命令。现在我们需要在 Heroku 上执行迁移,生成用户表,可通过下面命令来完成:
$ heroku run php artisan migrate

若提示是否要在生产环境上运行此命令,请输入 yes 或者 y。

数据库迁移执行完后,即可尝试注册一个新用户。

如果你要在 Heroku 上重置 PostgreSQL 数据库,可以使用以下命令(不需要执行):

$ heroku pg:reset DATABASE
$ heroku run php artisan migrate

以上步骤就将数据库配置好了。

代码推送成功之后,可以使用此命令来快速打开线上应用:
$ heroku open

使用以下命令查看 Heroku 站点地址:
heroku domains

使用 Heroku 过程中如果出现问题,则可以使用下面命令来输出生产环境上的日志进行排错:
$ heroku logs

如果后期修改了文件,可以通过以下命令进行更新推送:

$ git add -A
$ git commit -m "Add edit file"
$ git push heroku master

至此一个完整的项目就上线了,就是这么简单

0
如无特殊说明,文章均为本站原创,转载请注明出处

该文章由 发布

这货来去如风,什么鬼都没留下!!!
发表我的评论

Hi,请填写昵称和邮箱!

取消评论
代码 贴图 加粗 链接 删除线 签到