certbotでexpressをhttps化する

デプロイ先のサーバーはUbuntu 16.04です。

certbotのインストール

まずは公式サイトに従ってパッケージを入れます。

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot 

証明書の作成

次に証明書を作成しましょう。

慣れてないうちは対話形式の方がわかりやすいと感じました。
次のコマンドで作成していきます。

注意:この時に80番ポートを占有しているサービスを止めましょう。(Apache, Nginxなど)

sudo certbot certonly

1、メールアドレス、ドメインと入力していきます。

終わった後に

Conguraturation!

がの文字が見えたらOKです。

作成された証明書を確認します。

ls /etc/letsencrypt/live/your.domain.com

証明書の更新(テスト)

dry-runで更新のテストをしてみましょう。

certbot renew --dry-run

ここでもConguraturationを見て判断すれば楽です。

expressの設定

こちらの記事が大変参考になりました。

https://qiita.com/MahoTakara/items/71977be2d18405fe7339

ポイントは2つだけ。

  • httpsで証明書のオプションを指定してサーバーを作成
  • 作成したサーバーでリッスン
const fs = require('fs')
const https = require('https')
const options = {
  key: fs.readFileSync('/etc/letsencrypt/live/api.moji-count.online/privkey.pem'),
  cert: fs.readFileSync('/etc/letsencrypt/live/api.moji-count.online/fullchain.pem'),
}

const server = https.createServer(options, app)

server.listen(3000)

3000番ですが、問題なくhttpsでつなぐことができるようになりました。

expressで指定したURLのデータを取得するサンプル

expressで指定したURLのデータを取得するサンプル

let express = require('express')
let app = express()
let bodyParser = require('body-parser')
const http = require('http')

app.use(bodyParser.urlencoded({ extended: true }))
app.use(bodyParser.json())

var port = process.env.PORT || 4000 // port番号を指定


app.get('/', (req, res) => {
  let options = {
    host: 'www.yahoo.co.jp'
  }
  http.get(options, (res) => {
    let rawData = ''
    res.on('data', (chunk) => {
      rawData += chunk
      console.log(rawData)
    })
  })
})

app.listen(port)

MacでCamanJSを入れる

nodeのモジュールで入れるなら簡単です。

yarn add caman

エラーが出たので必要なライブラリをインストール

brew install cairo