今からお前んちこいよ

多摩川沿いにて細々とお勉強。

【 サクっと】Heroku で Basic認証 を設定する

Heroku は気軽にアプリケーションを動かせてとても便利。
プロトタイプ置き場などとしても利用する場面は多いが ”ちょっと認証つけておきたい" 時、候補にあがるのがベーシック認証なわけです。
今回やり方を少し調べたのでメモ。
要は、.htaccess.htpasswd も一緒にpushすればいいという話だった。

全体像

全体の階層はこんな感じ。

.
├── .git
├── .gitignore
├── .htpasswd
├── Procfile
├── composer.json
├── composer.lock
├── public/
│   ├── .htaccess
│   └── index.php
└── vendor/

各ファイル

  • .gitignore
vendor
  • .htpasswd はコマンドで生成
$ htpasswd -cb .htpasswd [username] [password]
  • Procfile
web: vendor/bin/heroku-php-apache2 public/
  • composer.json を適当に作っておく
{
  "require": {
    "php": "~5.6.0"
  }
}
  • composer.lock ファイルも生成
$ composer update
  • .htaccess
AuthUserFile /app/.htpasswd
AuthType Basic
AuthName "Restricted Access"
Require valid-user

Heroku push

$ git push heroku master
$ heroku open

できました。
f:id:hakopako03:20180314003155p:plain

Webの言語とは 〜Bashをwebの言語にする〜

ネタです。

身内でも話題になったので。
webの言語とはなにを指しているのだろうと考えたのだけれど、
ブラウザを介した通信で実行できる言語 のことを言っているのかなと解釈した。
 
 

> Bash も webの言語になれるかもしれない <

bashでjsonを返してみようと思う。

  • body.sh
#!/bin/bash
# body.sh

echo '{"message": "Hello World !!!"}'
  • header.sh
#!/bin/bash
# header.sh

echo 'HTTP/1.1 200 OK;'
echo 'Content-Type application/json;\r\n'
  • webサーバ起動
$ while true; do { sh header.sh; sh body.sh; } | nc -l 8080; done

 

webの言語になれました。

f:id:hakopako03:20180306234642p:plain

以上、bashでwebサーバを起動する方法 Bashをwebの言語にする方法でした。

Laravel5.5 + Heroku が httpsにならない件

表題の通り。httpsにならない。
セキュアでないだけでなく、CSSやjsの読み込みも失敗するので困る。
asset() や url() 、route() などLaravelには http/https を振り分ける機能があるはずなのに heroku ではそれがうまく機能してくれないようだった。

env の APP_ENV で強制的に振り分ける

production のとき、強制的にhttpsとしてアプリケーションを動かすようにルールを追記する。

参考) Deploy a Laravel 5 app to Heroku

  • App/Providers/AppServiceProvider.php
+ use Illuminate\Support\Facades\URL;

...

    public function boot()
    {
+       if ($this->app->environment() == 'production') {
+           URL::forceScheme('https');
+       }
    }

secure_asset() などもあるが、それだと route() や url() などは対応されない。 荒技だけど、これでひとまず解決はする。