Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@hashito

npm http-server とDockerで無料HTTPS化

More than 1 year has passed since last update.

はじめに

無料で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に回数などの制限があるようです。

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
hashito
わたしです。 主に個人的なメモです。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?