このサイトはVultr上にFreeBSD13.2+nginx1.24.0で構成されたWebサーバー上で動いています。
具体的にはVultrというサービスなのですが、スナップショットという機能を使って簡単にクローンを作ることができたり、APIを使って操作できたりと、結構便利なVPSです。
Vultrを使おう
そんなVultr.comは時間課金のVPSサービス。初期費用とか不要で、VPSが存在している時間(停止中を含む)あたりいくらで課金されます。あとは規定通信量を越えるとそれに対して従量課金。
アカウントを作ってクレジットカードから幾らかチャージしたら、すぐにVPSを作ることができます。このチャージ金額を切らすとVPSが無効になっちゃう。
チャージ金額があるうちはいくつでもVPSを立てられるので、OSをバージョンアップしたい時には一時的にふたつのVPSを立ててサイト移行なんてこともできる。
簡単VPSデプロイ
ログインしたらProductsのCompute画面右上にあるDeploy +ボタンからDeploy New Serverを選択。
Deploy New Instanceでお好みのサーバーを選択。ここでは最安のCloud Computeを選びます。
細かな仕様も選べます。以前はRegular Performanceを使っていましたが、最近はHigh Frequencyを使っています。別にXeonとかいらないんですが、+1USD/月でストレージが25GBから32GBに増えます。
Server LocationはTokyoかOsakaで。
Server ImageはFreeBSDのバージョン14を選択。別途用意したISOファイルのOSをインストールすることもできます。
続いてServer Sizeを選択。うっかりしてるとオススメサイズの12ドルプランで作られちゃう!
Add Auto BackupsやAdditional Featuresはお好みで。
Startup ScriptとかSSH Keysはあれば指定。Server Hostname & Labelを指定したら、Deploy Nowボタンを押します。
ここで指定したSSH Keysはそのままssh接続で使えるし、Hostnameは/etc/hostsファイルや/etc/rc.confファイルにちゃんと反映されます。
一瞬でサーバーが作られてOSインストール開始。その後IPアドレスが割り当てられて自動で立ち上がります。
VPSを選択すると詳細情報が表示されます。ここのUsernameとPasswordを使ってコンソールログインできる(マスクされているPasswordは目玉アイコンをクリックすると表示されます)し、先ほどのSSH Keysがちゃんと設定できていれば最初からssh接続できちゃいます。
タイムゾーンの問題
ここで問題がひとつ。海外製なのでタイムゾーンがUTC協定世界時になっているということ。
なのでこれをJST日本標準時に直しましょう。FreeBSDにおけるタイムゾーンの手動設定方法|シリコンバレー 24時にあるとおり、/etcに設定ファイルを置くだけの簡単作業。/etcにlocaltimeファイルがなければUTCとなります。
ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
Code language: Bash (bash)
ここではシンボリックリンクを張っておきましょう。
残りの設定はFreeBSD 13.1の初期設定にまとめてあるとおりです。
Startup Scriptで自動化
一部の設定はStartup Scriptに登録することで自動化できます。Nameに識別名を入れてTypeはBootのままで。
例えば下記のようにタイムゾーンの設定やスワップファイルの作成と登録、vimとbashのインストールにシェルの変更と各種ドットファイルの登録、カーネルセキュリティレベルの設定にfreebsd-updateの実行まで入れておくと便利です。
#! /bin/sh
test -r /etc/localtime && mv /etc/localtime /etc/localtime.org
ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
dd if=/dev/zero of=/usr/swap bs=1m count=1024 && chmod 600 /usr/swap && echo 'md99 none swap sw,file=/usr/swap,late 0 0' >> /etc/fstab
swapon -aL
pkg install -y bash vim
cat <<EOF >> /root/.vimrc
set number
set shiftwidth=2
set tabstop=2
set softtabstop=2
imap <C-j> <C-[>
set laststatus=2
set statusline=%F%m%r\ \[%{&fileencoding}\]\ \[%{&fileformat}\]%=%l\,%c
EOF
cat <<EOF >> /root/.bashrc
alias ll='ls -l'
alias lla='ls -la'
EOF
cat <<EOF >> /root/.bash_profile
export HISTCONTROL=ignoreboth:erasedups
export HISTIGNORE="fg*:bg*:history*:exit:rm *:rmdir *:cd*:ls*:ll*:ps:su*:htpasswd*"
export HISTSIZE=10000
export LC_CTYPE="en_US.UTF-8"
export LANG="en_US.UTF-8"
export EDITOR='vim'
export PAGER='less'
test -r ~/.bashrc && . ~/.bashrc
EOF
cat <<EOF >> /etc/rc.conf
kern_securelevel_enable="YES" # kernel security level (see security(7))
kern_securelevel="1" # range: -1..3 ; '-1' is the most insecure
# Note that setting securelevel to 0 will result
# in the system booting with securelevel set to 1, as
# init(8) will raise the level when rc(8) completes.
# To raise the level is to type "sysctl kern.securelevel=1".
EOF
chsh -s /usr/local/bin/bash
freebsd-update cron
Code language: Bash (bash)
サーバーデプロイ時にStartup Scriptのところでこのスクリプトを選んでやると手動設定をだいぶ端折ることができます。
もしもこの記事が気に入ったら、このリンク経由でVultr契約してみてね。100ドル分の使用権が貰えるよ。