無料で自分だけのオンラインストレージを建てる(Oracle Cloud)
はじめに
Googleフォトの容量無制限サービスが終わり、新しいデータ保存先を探している方もいると思います。
今回の記事は、「Google Driveの15GBだと足りないけれど100GBまでは不要、かつ費用は節約したい方」向けです。
保存するデータ量が100GBを超えている、または超える可能性がある場合は、Google OneやOneDrive等を契約するか、自宅にNASを買って設置しましょう。
使うもの
Oracle CloudのAlways Free枠では、Armベースの仮想マシン(A1インスタンス)や200GBのブロックボリューム(ブートボリューム含む)が無料で利用できます。
これに無料のオンラインストレージソフト NextCloudを組み合わせて、自分専用のオンラインストレージを構築します。
事前準備
- Oracle Cloudのアカウントを作ります。作り方は省略します。
https://www.oracle.com/jp/cloud/free/
A1インスタンスの作成
下記設定でA1インスタンスを作成します。東京リージョンは混んでいますが、なんとか隙間を狙って作りましょう。
- イメージ:Canonical Ubuntu 20.04 (minimalじゃない方)
- シェイプ:VM.Standard.A1.Flex 1 OCPU、6GB
- SSHキーは自分のPCで作った公開キーを登録しておくと楽
- パブリックIPv4アドレスの割当て:はい
ブロックボリュームの作成
- 「ストレージ」→「ブロックボリューム」→「ブロックボリュームの作成」
- 名前は適当に決め、「カスタム」を選んで容量を100GBにし、ブロックボリュームを作成します。
- 「コンピュート」→「インスタンス」と進み、A1インスタンスのページに移動します。
- 「アタッチされたブロックボリューム」→「ブロックボリュームのアタッチ」を選びます。
- 「アタッチメントタイプ」はiSCSI、「ボリューム」は先程作ったブロックボリューム名、「デバイス・パス」は選択しない、「アクセス」は「読み取り/書き込み」を選んで「アタッチ」を実行します。
- 少し待つとアタッチが完了します。完了したら右側の「︙」を選んで「iSCSIコマンドおよび情報」を選びます。
- 接続のためのコマンドがありますので、クリップボードにコピーし、メモ帳などに貼っておきます。
A1インスタンスのセットアップ
- SSHでA1インスタンスに接続します。
ssh -l ubuntu A1インスタンスのグローバルIPアドレス
- アップデートを実行します
sudo apt-get update && sudo apt-get upgrade -y
- 先程メモ帳に貼っておいたiSCSIのアタッチコマンドを実行します
sudo iscsiadm -m node -o new -T iqn.2015~:3260
sudo iscsiadm -m node -o update -T iqn.2015~ -n node.startup -v automatic
sudo iscsiadm -m node -T iqn.20152015~ -p 169.254.2.2:3260 -l
- アタッチできているか確認します
ubuntu@test2:~$ sudo fdisk -l
Disk /dev/loop0: 48.93 MiB, 51286016 bytes, 100168 sectors
: 中略
Disk /dev/sdb: 100 GiB, 107374182400 bytes, 209715200 sectors
Disk model: BlockVolume
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 1048576 bytes
100GBのディスクが無事アタッチできていますね。
- ディスクにパーティションとファイルシステムを作成します。今回はext4にしました。
ubuntu@test2:~$ sudo fdisk /dev/sdb
Welcome to fdisk (util-linux 2.34).
Command (m for help): n
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-209715199, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-209715199, default 209715199):
Created a new partition 1 of type 'Linux' and of size 100 GiB.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
ubuntu@test2:~$ sudo mkfs.ext4 /dev/sdb1
#メッセージが出たらそのままEnterを押して少し待ちます
mke2fs 1.45.5 (07-Jan-2020)
Creating filesystem with 26214144 4k blocks and 6553600 inodes
Filesystem UUID: 66177d3d-eedd-48cb-8ee2-2b26ada095f5
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
Allocating group tables: done
Writing inode tables: done
Creating journal (131072 blocks):
done
Writing superblocks and filesystem accounting information: done
- A1インスタンスの再起動時に、ブロックボリュームが自動的にマウントされるように設定します。
ディスクのUUIDを確認します。
ubuntu@test:~$ ls /dev/disk/by-uuid/ -l
total 0
lrwxrwxrwx 1 root root 11 Jun 4 02:05 4980-D6AC -> ../../sda15
lrwxrwxrwx 1 root root 10 Jun 4 02:06 5d62377d-2434-4e24-ac1c-1bbb53315428 -> ../../sda1
lrwxrwxrwx 1 root root 10 Jun 4 02:19 7cae9f4d-9dba-4a56-9bec-a01f216f45d1 -> ../../sdb1
今回は7cae9f4d-9dba-4a56-9bec-a01f216f45d1ですね。
毎回マウントされるようにfstabを編集します。
sudo vi /etc/fstab
fstabの最後の行に、以下のように追加します。UUIDはディスクごとに異なります。
UUID=7cae9f4d-9dba-4a56-9bec-a01f216f45d1 /mnt/vol1 ext4 defaults,_netdev,noatime 0 2
マウント先を作ります。今回は /mnt/vol1にブロックボリュームを割り当てることにしました。
ubuntu@test:/mnt$ sudo mkdir /mnt/vol1
再起動して自動的にマウントされているかを確認します。
ubuntu@test:~$ sudo reboot
ubuntu@test:~$ Connection to 123.111.111.111 closed by remote host.
Connection to 123.111.111.111 closed.
再起動後確認します。
ubuntu@test:~$ sudo df -lh
Filesystem Size Used Avail Use% Mounted on
udev 2.8G 0 2.8G 0% /dev
tmpfs 581M 1.3M 580M 1% /run
/dev/sda1 45G 1.8G 44G 4% /
~中略~
/dev/sdb1 98G 61M 93G 1% /mnt/vol1
大丈夫ですね。
参考ページ:
-
[ブロックボリュームマウント方法]
(https://docs.oracle.com/ja-jp/iaas/Content/Block/References/fstaboptionsconsistentdevicepaths.htm)
- Nextcloudのインストール
NextcloudはOneDrive,Boxなどのオンラインストレージを自分のサーバーで構築できるオープンソースのソフトです。
snapパッケージというものを利用すると、楽に導入ができます。
ubuntu@test:~$sudo snap install nextcloud
nextcloud 21.0.1snap2 from Nextcloud installed
#/mntなどを利用するために必要なモジュール
ubuntu@test:~$sudo snap connect nextcloud:removable-media
#SSL有効。自己署名で済ませる。ドメインを持っているのであればLet's encryptも選べる
ubuntu@test:sudo nextcloud.enable-https self-signed
- ポートの開放(インスタンス)
ubuntu@test:~$sudo vi /etc/iptables/rules.v4
#15行目ぐらいにポート22を開放するルールがあるので、その行付近に下記1行を追加して上書き保存します。
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
#ルールを適用します。
ubuntu@test:~$sudo iptables-restore < /etc/iptables/rules.v4
これでA1インスタンス的にはポートを開放していますが、まだ他にも開放するところがあります。
- ポートの開放(VCN)
- OCIコンソールの「ネットワーク」→「仮想クラウドネットワーク」を選びます。
- VCNを選びます。
- セキュリティリストを選びます。
- 「イングレスルールの追加」を選びます。
- 下記のような設定でポートを開放します(画像にはポート80が入っていますが、入れなくてOKです)自宅のグローバルIPアドレスが分かれば、CIDRを変更しておくとIPアドレス制限が可能です。
- Nextcloudセットアップ
ようやくここまで来ましたね。ブラウザでA1インスタンスにアクセスします。
https://インスタンスのIPアドレス
SSLの証明書が自己署名のため、ブラウザが警告を出してきますが気にせずアクセスします。
ユーザ名とパスワードを決めて、インストールを続けます。
インストールまで5分ほどかかります。
- データ保存先を移動
デフォルトの設定ではブートボリュームにデータ保存先が設定されます。ブロックボリュームに保存されるよう変更します。
ubuntu@test:/mnt$sudo snap stop nextcloud
ubuntu@test:/mnt$sudo mkdir /mnt/vol1/nextcloud
ubuntu@test:/mnt$sudo chmod 0770 /mnt/vol1/nextcloud
ubuntu@test:/mnt$sudo mv /var/snap/nextcloud/common/nextcloud/data /mnt/vol1/nextcloud/
#設定ファイルを変更
ubuntu@test2:/mnt/vol1$ sudo vi /var/snap/nextcloud/current/nextcloud/config/config.php
// ...
'datadirectory' => '/mnt/vol1/nextcloud/data',
// ...
#nextcloud再起動
ubuntu@test2:/mnt/vol1$ sudo snap start nextcloud
これでNextcloudにアクセスすると、ブロックボリュームが保存先に切り替わっているはずです。
参考:
Change data directory to use another disk partition
※Autosetup.phpだとうまく保存先が設定できなかったため、インストール後に保存先を変更する方法をとっています。
Discussion
大変勉強になりました。
またお邪魔します。