VPSxDockerxNginxのLet's encryptによる無料SSL化|自動更新化

VPS x Docker x NginxのSSL化

Nginxのコンテナに入ったうえで、通常のNginxを同じようにコマンドを叩いて設定してあげることがポイント。

自分の環境だとコンテナに入るコマンドは、docker-compose exec web /bin/shとなっている。

前提条件として、yamlファイルやnginxの設定ファイルをいい感じにカスタマイズしなければいけない。

今回の環境

  • Larave8
  • php8
  • Conoha VPS(Dockerプリインストール)
  • Docker
  • Nginx
  • ドメイン取得済み
  • DNS設定済み

ローカル環境でファイルの設定

docker-compose.yml

version: "3.9"
services:
  app:
    build: ./infra/php
    volumes:
      - ./backend:/work
  web:
    image: nginx:latest #latestじゃないと使えないコマンドがある
    ports:
      - 80:80
      - 443:443 #+
    volumes:
      - ./backend:/work
      - ./infra/nginx/default.conf:/etc/nginx/conf.d/default.conf
      - /etc/letsencrypt:/etc/letsencrypt #+
    working_dir: /work

  db:
    build: ./infra/mysql
    volumes:
      - db-store:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      - PMA_ARBITRARY=1

    links:
      - db #mysqlではなくdbと書く
    ports:
      - 8081:80 #URL末尾にポート番号をつけなくてよくしたければ80にする
    volumes:
      - /sessions

volumes:
  db-store:

infra\nginx\default.conf

server {
    listen 80;
    listen [::]:80; +
    server_name portfolio.ketukara.com;
    root /work/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass app:9000;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

3行目の listen [::]:80; を追加する。

この2つの作業が完了したら、データをVPSサーバーにアップロードする。

gitを使ってもいいし、やり方は任せる。

VPSサーバー(クラウド)での操作

ここからはローカルのテスト環境ではなく本番のクラウドサーバーでコマンドを叩く。

まずは443番ポートの許可。

もともと許可になっているかもしれないが一応。

まだコンテナには入らなくていい。

どこにいる状態でもいいので、

ufw allow 443

を叩く。

ufw status

を叩いて許可できたか確認。

許可できていれば、


こんな風になる。


ここからはnginxのコンテナに入って設定する。

/root/プロジェクトディレクトリ

に移動して、

docker-compose exec web /bin/sh

を叩いて、nginxのコンテナに入る

ほかの人の記事では全くこの説明がされていなくて困った。

apt update

apt install certbot python3-certbot-nginx

certbot --nginx -d ドメイン

certbot --nginx -d hogehoge.com

みたいな感じ。

↑最終的にこんな画面になれば成功。

さらに、let’s encryptの証明書は3か月で有効期限が切れるので、

更新作業を自動化するコマンドを入力する(これも同じくnginxのコンテナ内{)

certbot renew --dry-run

https://ドメインでアクセスできるようになっているはず

ちなみにこの状態でgit pullしてみたら、既に最新だよ!ってメッセージが出てきたから、

ローカル環境と差分が生まれてコンフリクトを起こすなんてことはなさそう。

参考にした記事

【Ubuntu+Nginx】Let's EncryptでSSL証明書を発行してhttps通信を行う - Qiita

Conoha Wing

爆速で表示されるこのブログのサーバーはConoha Wingです。
詳細は下記!!

おすすめの記事