Jan 31, 2021

バックアップ用に360円サーバにブログコンテンツを移植してみた。

自宅サーバを再構築するときに備忘録をみたいので、バックアップ用に 360 円サーバ Web Arena にコンテンツを移植してみました。

格安 VPS クラウドの選定

Web サーバが動けば良いのでワンコイン(500 円)位のサーバを探そうと思います。今回は、VPS 比較表をみながら国内で Linux が使える VPS を選択したいと思います。ちょうど良さそうな VPS サービスWeb Arena があったので、こちらを選択することにしました。

「今すぐ申し込む」をクリックして在庫数をみながら最低スペックのゾーン 2 の新 1G-SSD タイプ(KVM)を選択しました。オンラインで申し込むと直ぐにメールが届きました。手続き後メールのリンクからコンパネに接続したのですが、何度やってもログインできません。老眼鏡をかけてメールをよーくみるとゾーン 1 とゾーン 2 のリンクが 記載されていました。何も考えず上のリンクからログインしていました。ゾーン 2 だから下のリンクから入れということなのね。 若い人には何事もないことでもこの歳になるとこんなところでつまずいてしまいます。(笑い)

AWS などのクラウドに慣れているとこの Web ARENA のコンパネはあまりにもシンプルすぎて年寄りでも迷うことなく行けそうです。

サーバを立ち上げ準備

SSH 接続のためのキーペアを作成して、セキュリティグルーブを作成します。設定は、このルールの下のテキスト欄にいれるらしいです。いくら 360 円とはいえ、なんだこれ、今時こんな テキストで入れるのかと驚きです。 書き方はルールの?をクリックするとヘルプが出てきます。いやーこれもなんか懐かしい。 ssh は自宅 IP のみ許可の設定をして http,https はどの IP からもアクセスできるように設定しました。

Web ARENA コンバネ!

サーバの立ち上げと ssh 接続

マシーンイメージから CentOS7.4 を選んで、インスタンス起動ボタンを押すと設定の画面が表示されます。先ほど作成した SSH キーペアとセキュリティグループを選んで起動ボタンを押すとサーバが立ち上がります。ssh は先ほど作成した SSH キーをダウンロードして使うことになりますが、私は最初コンパネからコンソール画面で root ログインして~/.ssh/authorized_keys にクライアントの公開鍵を登録してアクセスしてます。root の初期パスワードは、マニュアルに記載されています。単純、パスワードがログイン画面の近くに書かれているではないか。(笑い)、セキュリティグループの ssh は ip 指定で他からアクセスできないように最低限はしておかないとまずいと感じました。

360 円だとポイントが 10 ポイント、1 台しか使えません。バックアップもついていないので、イメージをバックアップして任意のバックアップイメージからリストアすることもできなそうです。一度サーバを消して再度イメージから作成するしかなさそうです。

SSL 設定

OS は CentOS7.4 なのでそのまま使ってもよかったのですが、CentOS8 の方がベンチマークいいかなぁと思ったので、CentOS8 に upgrade して、その後 CentOS Stream release 8 にしました。最初 podman をインストールして nginx のコンテナをたてて利用してましたが、他にコンテナを立てる予定もないので、podman はアンインストールして、サーバに直接 nginx のみ立ち上げることにしました。

最初に 360 円サーバにまだ使っていないドメイン(akiboi.info)を割り当てます。管理 DNS に 360 円サーバの IP を登録します。残念ながら 360 円サーバは、IPv4 しか対応していませんので IPv6 の AAAA レコードの作成は必要ありません。ドメインに合わせて Let’s Encrypt で SSL 証明書を作成して SSL に対応します。SSL 証明書はサーバに cerbot をインストールして standalone で今回は証明書を取得しました。そのあとで nginx をインストールして SSL の設定をしました。

sudo dnf install cerbot
:
sudo certbot certonly --standalone --preferred-challenges -d www.akiboi.info -d akiboi.info --email xxx@xxx.xxx
:

証明書は、/etc/letsencrypt/live/www.akiboi.info に作成されました。私の nginx.conf ファイルは以下のように設定しており、ssl 設定は/etc/nginx/conf.d/ssl に記載しています。

/etc/nginx/nginx.conf
user  nginx;
worker_processes  auto;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    :
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/vhost.d/*.conf;
}
/etc/nginx/conf.d/ssl
    ssl_certificate /etc/letsencrypt/live/www.akiboi.info/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.akiboi.info/privkey.pem;
    :

Web コンテンツの転送

ブログの記事を追加したら自宅サーバと同じように 360 円サーバにもコンテンツを転送するようにしたいと思います。

mac(VSC ブログ記事作成)--git-->gitLab-->gitLab-runner--scp
-->unit1(akiboi.duckdns.org IPv6)
-->unit2(akiboi.duckdns.org IPv4)
-->unit3(akiboi.info IPv4)

こんなイメージです。

以前作成した要領で設定します。ブログの記事を更新したら自宅サーバ IPv6 用の unit1、IPv4 用の unit2、そして 360 円サーバ用の unit3 を作成するように設定します。

nuxt ブログの各設定

package.json
:
 "scripts": {
    "dev": "nuxt",
    "build": "nuxt build",
    "generate": "nuxt generate",
    "start": "nuxt start",
    "export": "nuxt export",
    "unit1": "nuxt generate -c nuxt.config.unit1.js --dotenv env/unit1.env",
    "unit2": "nuxt generate -c nuxt.config.unit2.js --dotenv env/unit2.env",
    "unit3": "nuxt generate -c nuxt.config.unit3.js --dotenv env/unit3.env", ←追加
    "start1": "nuxt start -c nuxt.config.unit1.js",
    "start2": "nuxt start -c nuxt.config.unit2.js"
    "start3": "nuxt start -c nuxt.config.unit3.js", ←追加
  },
  :
env/unit3.env
#UNIT 3 360円サーバ用env
UNIT=3
IPV6=False
GAID=G-xxxxxxx
COPYRIGHT="© 2021 "
TITLE="akibo.I Blog "
VERSION="v1.3.7"

unit3 用の nuxt.config ファイルにコンテンツ出力先と sitemap.xml を設定します。

nuxt.config.unit3.js
sitemap: {
    path: '/sitemap.xml',
    hostname: 'https://www.akiboi.info',←変更
  :
generate: {
    dir: 'unit3',←変更
  :

こんな感じで 360 円サーバ用のコンテンツを作成できるようにしました。最後に.gitlab-ci.yml に unit3 に転送する shell を組み込んで終わりです。

.gitlab-ci.yml
:
nginx-unit3:
  stage: preparation
  only:
    changes:
      - unit3/**/*
  script:
    - HOST=root@<360円サー>
    - FROM=unit3/*
    - TO=/usr/share/nginx
    - scp -rp $FROM $HOST:$TO

これで、記事を作成したら nuxt generate コマンドで静的コンテンツを unit1,2,3 とそれぞれ作成し、git で gitLab サーバに転送すると、CI/CD 機能で gitLab-runner が shell を動かして各サーバにブログコンテンツを転送するようになりました。

バックアップ用に 360 円サーバにブログコンテンツを移植するダイジェスト

  • 格安 VPS 購入 Web Arenaから新 1G-SSD タイプ(KVM)を選択して必要事項を記入して購入
  • サーバ立ち上げ準備 コンパネから SSH キー、セキュリティグループを作成する。セキュリティグループは、利用する port 番号、許可 IP を設定
  • サーバ立ち上げ コンパネからマシーンイメージ CentOS7.4 を選んで、SSH キー、セキュリティグループを選択してサーバを立ち上げ
  • SSH で接続 コンパネから root でログイン、ユーザを作成し~/.ssh/authorized_keys にクライアントの公開鍵を登録しクライアントから ssh 接続
  • 360 円サーバに ssl 設定 DNS に 360 円サーバ用ドメインを登録、サーバに certbot をインストールして Let’s Encrypt(standalone)で SSL 証明書を取得 サーバに nginx をインストール、SSL を設定
  • Web コンテンツ転送の設定 Nuxt ブログの pakcage.json に 360 円サーバ用 unit3 を追加、unit3 用の env/unit3.env、nuxt.config.unit3.js を作成 nuxt.config.unit3.js には sitemap のドメインをhttps://www.akiboi.infoを設定

これで、自宅サーバを再構築する時に 360 円サーバの備忘録をみながら作業できるようになりました。

以上で終了です。