LoginSignup
0

More than 3 years have passed since last update.

npm http-server とDockerで無料HTTPS化

Posted at

はじめに

無料でHTTPSを立てたかったので、立て方をここに残します。(備忘録)

やり方

用意するもの

下記のものがインストールされたlinuxサーバ
npm
<参考>Ubuntuに最新のNode.jsを難なくインストールする
docker and docker-compose
<参考>Ubuntu に docker と docker-compose を入れる
domain
<参考>freenomでドメインの取得

手順

1,domainの設定

用意したlinuxサーバのグローバルIPを設定してあげます。
私のはさくらインターネットで購入したので下記のようなイメージで設定しました。
スクリーンショット 2019-08-18 3.49.14.png

2,各種インストール

httpサーバソフト:http-server

下記のコマンドでインストールしてください。

$ sudo npm install -g http-server

ジョブ管理ソフト:cron

ubuntu等の場合は最初から入っているかと思いますが、centosなどでは入っていない場合もあるようなので、下記のようにインストールしてください。

centos
$ sudo yum -y install crontabs

ファイヤーウォール管理ソフト:ufw

下記のコマンドでインストールしてください。

ubuntu
$ sudo apt -y install ufw

*centos系はこちらを参照ください。<参考>ufwをcentosにインストール

2,crontabへの登録

これを実行する事により、サーバが再起動した場合も自動的に再実行されます。
下記のコマンドを実行してください。

$ sudo crontab -e

コマンドを実行すると編集画面が表示されますので、下記の行を追加し保存してください。

crontab
@reboot sudo ufw allow 80;sudo ufw allow 443
@reboot sudo http-server /{対象フォルダ} &

*{対象フォルダ}はhttpサーバで表示するindex.htmlなどが存在するフォルダを指定してください。

3,docker-compose.ymlの作成

下記のコマンドを実行し、ファイル編集を開始してください。(例ではEditorをnanoで利用しています)

$ sudo nano docker-compose.yml

新規ファイル内容は下記としてください

docker-compose.yml
version: "3"
services:
  https-portal:
    image: steveltn/https-portal:1
    ports:
      - 80:80
      - 443:443
    environment:
      DOMAINS: '{ドメイン名} -> http://dockerhost:8080'
      STAGE: production
    volumes:
      - ./org-chimata-ssl-certs:/var/lib/https-portal
    restart: always

*{ドメイン名}は用意されているドメイン名を利用ください。

4,docker-compose.ymlの実行

最初に念の為、ファイヤーウォールに穴を開けます。

$ sudo ufw allow 80;sudo ufw allow 443

http-serverを立ち上げます

$ sudo http-server /{対象フォルダ} &

下記のコマンドでhttps-portalを起動

$ sudo docker-compose up -d

これで、正常に立ち上がるはずです。

問題がある場合

まずもってログを確認していただいたほうが良いかと思います。

dockerのログの見方

1,下記のコマンドでdockerのコンテナIDを取得

$ sudo docker ps
> CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS              PORTS                                      NAMES
> {コンテナID}        steveltn/https-portal:1   "/init"             2 days ago          Up 2 days           0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   {user name}_https-portal_1

2,下記のコマンドでコンテナのログを取得

$ sudo docker logs {コンテナID}

そして、エラーっぽいところの行をコピーしてググる!!

他の可能性

可能性としては…
http-serverは2回目以降は別ポートで起動します。→多重起動していないか確認
http-serverが立ち上がっているか?→curlなどでgetして確認
・ネットワーク全体で80/443PORTは許可されているか?→外部からtelnetなどで確認
STAGE: productionで何度も作成していないか?→Let's Encryptに回数などの制限があるようです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0