• [原创]Heroku简单部署指南


    该部署笔记以部署 PHP 应用为例.

    官方文档

    1. 设置

    1.1 环境依赖

    以部署 PHP 应用为例, 本地环境依赖:

    • php

    • composer

      Heroku 使用 Composer 管理PHP应用的依赖, composer.json 用于表明项目是 php语言.

    • git

    分别执行以下命令查看当前版本

    php -v
    composer -v
    git --version
    

    1.2 Heroku 客户端安装

    下载安装 Heroku Cli

    顺便官网注册一个 heroku 账号

    1.3 登录

    heroku login	# 输入 heroku 账号密码
    heroku keys:add # 添加ssh公钥到 Heroku 上
    

    2. 应用

    2.1 创建

    heroku create	# 远程创建新的 heroku app, 并在本地 git 添加对应的远程 git 仓库
    
    # git init
    
    git push heroku master	# git 推送到远程仓库
    
    heroku ps		# 查看当前应用有几个实例
    heroku ps:scale	web:1 # 应用实例伸缩, "web" 是在 Procfile 中定义的对应应用
    
    heroku open		# 在浏览器中打开实例
    

    免费账号只能有一个实例

    2.2 查看日志

    heroku logs --tail
    

    此处的日志是由应用输出到 stdoutstderr 中的内容.

    2.3 附加组件

    为防止滥用, 添加附加组件需要账号认证

    ...信用卡的意思

    heroku addons				# 查看已安装的附加组件
    heroku addons:create xxxx	# 安装附加组件
    heroku addons:open xxxx		# 打开附加组件的web管理页面(如果有的话...)
    

    2.4 交互式 Shell

    可运行 PHP 的交互式 shell

    heroku run "php -a"

    heroku 的交互式 shell

    heroku run bash

    2.5 定义 配置变量

    config vars(配置变量) 在应用运行时是以 环境变量 形式暴露给应用.

    heroku config	# 查看当前配置变量
    heroku config:set XXX=XXXX	# 定义配置变量
    

    $_SERVER 的输出, 若执行 heroku config:set TEST_VAR=20, 则会在下面输出出来(Line: 10)

    array (
      'COMPOSER_BIN_DIR' => 'vendor/bin',
      'DOCUMENT_ROOT' => '/app/web',
      'HEROKU_PHP_HTTPD_CONFIG_INCLUDE' => '/app/vendor/heroku/heroku-buildpack-php/conf/apache2/default_include.conf',
      'DYNO' => 'web.1',
      'PATH' => '/app/.heroku/php/bin:/app/.heroku/php/sbin:/app/.heroku/php/bin:/app/.heroku/php/sbin:/app/.heroku/php/bin:/app/.heroku/php/sbin:/app/.heroku/php/bin:/usr/local/bin:/usr/bin:/bin:/app/vendor/bin',
      'WEB_CONCURRENCY' => '4',
      'PWD' => '/app',
      'COMPOSER_VENDOR_DIR' => 'vendor',
      'TEST_VAR' => '20',
      'HOME' => '/app',
      'SHLVL' => '2',
      'PORT' => '11636',
      'HEROKU_APP_DIR' => '/app',
      '_' => '/app/.heroku/php/sbin/php-fpm',
      'USER' => 'u24320',
      'SCRIPT_NAME' => '/index.php',
      'REQUEST_URI' => '/_server',
      'QUERY_STRING' => '',
      'REQUEST_METHOD' => 'GET',
      'SERVER_PROTOCOL' => 'HTTP/1.1',
      'GATEWAY_INTERFACE' => 'CGI/1.1',
      'REDIRECT_URL' => '/_server',
      'REMOTE_PORT' => '12702',
      'SCRIPT_FILENAME' => '/app/web/index.php',
      'SERVER_ADMIN' => 'you@example.com',
      'CONTEXT_DOCUMENT_ROOT' => '/app/web',
      'CONTEXT_PREFIX' => '',
      'REQUEST_SCHEME' => 'http',
      'REMOTE_ADDR' => '10.43.233.16',
      'SERVER_PORT' => '80',
      'SERVER_ADDR' => '172.17.77.62',
      'SERVER_NAME' => 'polar-oasis-94232.herokuapp.com',
      'SERVER_SOFTWARE' => 'Apache',
      'SERVER_SIGNATURE' => '',
      'HTTP_TOTAL_ROUTE_TIME' => '0',
      'HTTP_X_REQUEST_START' => '1529897835941',
      'HTTP_CONNECT_TIME' => '1',
      'HTTP_VIA' => '1.1 vegur',
      'HTTP_X_FORWARDED_PORT' => '443',
      'HTTP_X_FORWARDED_PROTO' => 'https',
      'HTTP_X_FORWARDED_FOR' => '218.66.157.218',
      'HTTP_X_REQUEST_ID' => '775b1b7c-c679-44d6-9cf0-2280f2930b15',
      'HTTP_ACCEPT_LANGUAGE' => 'zh-CN,zh;q=0.9',
      'HTTP_ACCEPT_ENCODING' => 'gzip, deflate, br',
      'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
      'HTTP_USER_AGENT' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
      'HTTP_UPGRADE_INSECURE_REQUESTS' => '1',
      'HTTP_CONNECTION' => 'close',
      'HTTP_HOST' => 'polar-oasis-94232.herokuapp.com',
      'REDIRECT_STATUS' => '200',
      'FCGI_ROLE' => 'RESPONDER',
      'PHP_SELF' => '/index.php',
      'REQUEST_TIME_FLOAT' => 1529897835.9442799,
      'REQUEST_TIME' => 1529897835,
    )
    

    2.6 配置数据库

    附加组件市场 有大量免费的数据存储附加组件.

    免费的基本都是限制存储量, eg. postgresql 免费的限制存储 10000 行

    heroku addons:create heroku-postgresql:hobby-dev	# 添加 postgresql 的免费版
    

    添加上述数据库组件后, 会往变量配置中添加如下数据库url地址:

    使用: $dbopts = parse_url(getenv('DATABASE_URL'));

    远程连接 postgressql

    heroku pg:psql
    

    2.7 Procfile

    Procfile 文件用于定义进程类型并确定应用如何启动.

    # apache
    web: vendor/bin/heroku-php-apache2 web/		# web/ 是指定应用的根目录
    
    # nginx
    web: vendor/bin/heroku-php-nginx web/		
    
  • 相关阅读:
    四大组件之BroadcastReceiver基础
    SQLiteOpenHelper与SQLiteDatabase的使用
    SharedPreferences实现保存用户名功能
    Fragment加载方式与数据通信
    ProgressBar、ProgessDialog用法解析
    GridView添加事件监听和常用属性解析
    ListView添加item的事件监听
    ArrayAdapter、SimpleAdapter简单用法
    MySQL入门笔记(二)
    MySQL入门笔记(一)
  • 原文地址:https://www.cnblogs.com/youjiaxing/p/10310591.html
Copyright © 2020-2023  润新知