Sinatra on Heroku (LetsEncrypt)
Let's Encrypt の仕組み - Let's Encrypt 総合ポータル : https://letsencrypt.jp/technology/
Sinatra アプリつくる
Gemfile
source "https://rubygems.org"
ruby '2.3.3'
gem 'sinatra'
#! /usr/bin/env ruby
require 'bundler'
Bundler.require
class App < Sinatra::Base
get '/' do
"Hello World"
end
end
Heroku に デプロイする
require './app'
run App
$ git init
$ git add .
$ git commit -m 'first commit'
$ heroku create <アプリ名>
$ git push heroku master
heroku open して 確認できる。
LetsEncrypt を追加する
gem 'rake'
gem 'platform-api', git: 'https://github.com/jalada/platform-api', branch: 'master'
gem 'letsencrypt-rails-heroku'
-
rake
は、証明書発行、更新用の Task を起動するため -
platform-api
は、Heroku の API を使うため(バージョンアップしたらいらなくなるかも)
のために追加
Rakefile 追加
require 'letsencrypt-rails-heroku'
Letsencrypt.configure
spec = Gem::Specification.find_by_name 'letsencrypt-rails-heroku'
load "#{spec.gem_dir}/lib/tasks/letsencrypt.rake"
これで、Heroku 上で Rake の Task を実行できるようになる。
アプリの方にもミドルウェアを追加する
#! /usr/bin/env ruby
require 'bundler'
Bundler.require
class App < Sinatra::Base
Letsencrypt.configure
use Letsencrypt::Middleware
get '/' do
"Hello World"
end
end
もっかい、Heroku に デプロイ。
証明書の設定
適当なドメインを買っておく。
(今回は、b-dayz.date
っていうダサいドメインをお名前.com で買った)
$ heroku domains:add b-dayz.date
※ .herokuapp.com
のドメインに CNAME
で設定しておく
環境変数に色々設定する
$ heroku config:add ACME_DOMAIN=b-dayz.date
$ heroku config:add ACME_EMAIL=<メールアドレス>
$ heroku config:add HEROKU_APP=<Heorkuで作ったアプリ名>
$ heroku plugins:install heroku-cli-oauth
$ heroku authorizations:create -d "LetsEncrypt"
$ heroku config:add HEROKU_TOKEN=<前のコマンドで表示されたTOKEN>
Heroku のプラン変更
free の dyno では、証明書の登録がサポートされていないので、hobby($7/month)にあげる。
$ heroku dyno:type hobby
これで準備が整いました。
$ heroku run rake letsencrypt:renew
https
で確認できるはず。
http 対応
http でもリクエストは受け付けているので、https に矯正させる。
gem 'rack-ssl-enforcer'
use Rack::SslEnforcer if production?
.herokuapp
ドメイン対応
.herokuapp
のドメインの方でもリクエストを受けているので、301 かけておく。
class App < Sinatra::Base
before do
ensure_domain if production?
end
# def hoge end
# def fuga end
private
def production?
ENV['RACK_ENV'] == 'production'
end
def ensure_domain
return unless /\.herokuapp.com/ =~ request.env['HTTP_HOST']
redirect "https://#{ENV['FQDN']}#{request.env['REQUEST_PATH']}", 301
end
end
$ heroku config:add FQDN=b-dayz.date
証明書の自動更新
$ heroku addons:create scheduler:standard
$ heroku addons:open scheduler
Job を追加して完了
if [ "$(date +%d)" = 01 ]; then rake letsencrypt:renew; fi
REF
- pixielabs/letsencrypt-rails-heroku: Automatic LetsEncrypt SSL certificates in your Rails app on Heroku : https://github.com/pixielabs/letsencrypt-rails-heroku
追記
Free and automated #SSL certs for all paid Heroku dynos are now generally available, issued by @letsencrypt: https://t.co/WhMrrH8ZkV pic.twitter.com/yYLJ48cWXb
— Heroku (@heroku) 2017年3月21日
Author And Source
この問題について(Sinatra on Heroku (LetsEncrypt)), 我々は、より多くの情報をここで見つけました https://qiita.com/7kaji/items/596fe5db24ec31bea5ce著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .