💾

クラウド上に無料でオンラインストレージを作る

2025/03/02に公開

この記事ではクラウド上にオンラインストレージ「Nextcloud」を構築してみます。

構築するクラウドとしてはOracle Cloud Infrastructure(OCI)を使用します。OCIは無償枠(Always Free)が他ベンダーと比べ広く開放されており、無償リソースだけでオンラインストレージを作ることができるためです。

📝はじめに

本記事で作成する構成イメージは以下のようになります。HeatWave(旧MySQL HeatWave)を利用するため、ストレージ容量は最大50GB となります。

また、OCI(Oracle Cloud Infrastructure) で無償提供されているリソースについては、以下の記事も参考にしてください。
📌 Oracle Cloudに無償で構築できるリソース

インスタンスに閉じたスタンドアロン構成では無償枠で最大200GBまでのストレージが使用可能です。スタンドアロンでの構築手順については、以下の記事が丁寧に説明されていると思います。そこまで凝った作りにしないよって方はこちらの方を参考にしてみてください。

Nextcloudとは

Nextcloudは自分専用のオンラインストレージを構築できるオープンソースのソフトウェアです。
自宅やクラウドサーバーにセットアップすれば、 DropboxやOneDriveのようにファイルを管理・共有 できます。スマホアプリもリリースされていますので、普段使いにも不自由しないかと思います。

Heatwaveとは

OCIで提供されるフルマネージド型のMySQLデータベースで、標準MySQLよりもクエリの処理速度が高速化されています。詳しい説明は引用に任せます。

MySQL HeatWaveとはMySQL Database Serviceの拡張機能で、検索処理を高速化できるクエリーアクセラレーターです。HeatWaveノードはデータ分析/集計に向いたカラムナー(列指向)データベースとして実装されており、インメモリで超並列処理を実現し、分析系のSQLも高速に実行できます。MySQL 8.0ベースのサービスとなっていますので、今までMySQLで実行していたSQLをそのまま使えます。また、レプリケーションを構成してオンプレミス環境や他社クラウド環境にあるMySQL 5.7、8.0からETLを使わずにMySQL HeatWaveにデータを連携し、最新のデータを分析するリアルタイムデータ分析環境を構築することもできます。
https://oracle-japan.github.io/ocitutorials/beginners/creating-HeatWave/#anchor1)

Always Free枠では50GB使用することができ、勝手にDBを調整してくれるので嬉しいね、ということで今回採用しました。バージョン管理やメトリクス監視もOCIのコンソールから行えるので、個人で使うにはちょうどいいのではと思います。

引用:MySQL HeatWave:サービス概要のご紹介 - Speaker Deck

また、DBMSとして今回はMySQLを採用しましたが、Oracle Databaseもサポートされているみたいですので、同じく無償枠が提供されているDBaaSのOracle Autonomous Databaseを使ってもいいかと思います。こちらも勝手にチューニングしてくれるOracle Databaseのサービスになります。ただ、無償枠使える量が20GBになりますのでご注意ください。

🚀 環境を構築する

普段使いするためにはHTTPS対応は必要だと思いますが、HTTPSの設定まではこの記事では扱いません。

0. OCIアカウントを用意する

はい、これがないと始まりません。用意してください。

新規作成するとAlways Freeアカウントという課金されないアカウント形態になるかと思いますが、このアカウントでは無償のA1インスタンスのリソースが逼迫しておりインスタンスの作成が難しい状況です。

抵抗がなければアカウントをアップグレードして一般アカウントにしてしまいましょう。アップグレードしてもAlways Freeとして開放されているリソースは変わりなく無償で使用できます。ただ、課金されるリソースも作成できてしまうので、リソース管理にはくれぐれもご注意ください。

1. OCIリソースの作成

1-1. VCNの作成&設定

VCNを作成します。どう設定するかはその人の好みなので、作成手順はここには書きませんが、私の環境では以下のように作成しています。

以下インスタンスを作成するサブネットを「Appサブネット」、Databaseを配置するサブネットを「Dataサブネット」と記載します。

AppサブネットとDataサブネットにてそれぞれセキュリティ・リストを作成し、上記のルールを設定。
ルート表は[0.0.0.0/0]の通信がインターネット・ゲートウェイに向くように設定し、Appサブネットに適用しています。

ここらあたりの設定でOCIを始めて触るという方は、OCIチュートリアルという日本オラクルが公式で案内しているサイトがありますので、こちらを参考にしてみてください。
📌 クラウドに仮想ネットワーク(VCN)を作る

1-2. コンピュート・インスタンスの作成

Nextcloudを動作させるコンピュート・インスタンスをAppサブネットに作成します。
この記事では以下の設定で作成しています。シェイプはAlways Free枠のVM.Standard.A1.Flexを選択してください。

設定項目
Image Canonical Ubuntu 24.04 Minimal aarch64
Shape VM.Standard.A1.Flex(1 core OCPU, 6 GB memory, 1 Gbps network bandwidth)
Private IP 192.168.10.10

1-3. MySQL(Heatwave)の作成

左上のメニューバーから[データベース]→[HeatWave MySQL]→[DBシステム]と移動し、データベースを Dataサブネットに作成します。
一番上の項目で、[Always Free]を選択し、各項目を入力します。Always Freeだと制限があるようで、項目がかなりグレーアウトされており少ないので、比較的入力に迷うことはないかと思います。
この記事では以下の設定で作成しています。

設定項目
Private IP 192.168.130.10

作成には十数分くらいかかったように記憶しています。その間に先ほど作成したA1インスタンスの設定を行います。

2. Nextcloud環境のセットアップ

2-1. ApacheとPHPの準備

パッケージをまずは更新

sudo apt update
sudo apt upgrade -y

後で必要になるので、以下のツールをインストール

sudo apt install zip unzip wget -y

Apacheをインストール

sudo apt install apache2 -y

PHPとモジュールをインストール

sudo apt install -y php \
  libapache2-mod-php php-curl php-gd php-mbstring php-xml php-zip \
  php-mysql \
  php-intl \
  php-ldap php-smbclient php-imap php-bcmath php-gmp

なお、必要なPHPのモジュールの詳細は以下に記載があります。

2-2. Databaseの準備

MySQLクライアントツール「default-mysql-client」を入れます

sudo apt install default-mysql-client -y

データベースの作成後、以下コマンドでHeatwaveに接続します

mysql -h <DBのホスト名またはIP> -u <ユーザー名> -p
実行例
$ mysql -h hwdb.datasbnt.vcnprod.oraclevcn.com -u ADMIN -p
Enter password: <passwordを入力>
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 480
Server version: 9.2.1-cloud MySQL Enterprise - Cloud

Copyright (c) 2000, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

以下、mysqlプロンプトにて実行します。

Nextcloud用のDBユーザー「NEXTCLOUD」を作成します

create user 'NEXTCLOUD'@'<コンピュート・インスタンスのホスト名またはIP>' identified by '<Password>';

Nextcloud用のデータベースを作成します

create database NEXTCLOUD character set utf8mb4 COLLATE utf8mb4_general_ci;

ユーザーに権限を付与します

grant all privileges on NEXTCLOUD.* to 'NEXTCLOUD'@'<コンピュート・インスタンスのホスト名またはIP>';

権限を反映させます

flush privileges;

MySQLから抜ける

quit;

2-3. Nextcloudの準備

Nextcloudをダウンロードします。

cd /var/www/html/
sudo wget https://download.nextcloud.com/server/releases/latest.zip

ダウンロードされたlatest.zipを解凍し、解凍し終わったら不要なので削除します。

sudo unzip latest.zip
sudo rm -rf latest.zip

権限を変更します。

sudo chown -R www-data:www-data /var/www/html/nextcloud/

2-4. Nextcloudのインストール

Nextcloudのディレクトリに移動します。

cd /var/www/html/nextcloud/

初期設定をします。

sudo -u www-data php occ  maintenance:install \
--database "mysql" \
--database-name "NEXTCLOUD" \
--database-host "<DBのホスト名またはIP>" \
--database-user "NEXTCLOUD" \
--database-pass "<DBユーザー(NEXTCLOUD)のパスワード>" \
--admin-user "<Nextcloudの管理アカウント名>" \
--admin-pass "<Nextcloudの管理アカウント名のパスワード>"

OCCコマンドの詳細:Using the occ command — Nextcloud latest Administration Manual latest documentation

無事インストールされたことを確認します。

2-5. ネットワーク設定

OCIのUbuntuインスタンスは iptables を使用してファイアウォールを管理しています。Nextcloudにアクセスするため、HTTP(80)と HTTPS(443)を許可します

sudo iptables -I INPUT 5 -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT 5 -p tcp --dport 443 -j ACCEPT

設定を永続化させます。

sudo /etc/init.d/netfilter-persistent save
sudo /etc/init.d/netfilter-persistent reload

ここまでの設定が完了したらブラウザで以下のURLにアクセスし、Nextcloudの画面が表示されることを確認してください。

http://<コンピュート・インスタンスのPublic IP>

画像にもあるとおり信頼できるドメインを登録するため、設定ファイルを設定する必要があります。
参考:Installation wizard — Nextcloud latest Administration Manual latest documentation

設定ファイルを編集し、trusted_domainsにコンピュート・インスタンスのPublic IPを追加します

sudo vi /var/www/html/nextcloud/config/config.php
 <?php
$CONFIG = array (
  'passwordsalt' => 'xxxxxxxxxxxxxxxxxxxxxxxx',
  'secret' => 'yyyyyyyyyyyyyyyyyyyy',
  'trusted_domains' =>
  array (
     0 => 'localhost',
+    1 => '<インスタンスのPublic IP>'      
  ),
...

リロードすると以下のような画面になりアクセスできているかと思います。

あとは設定した管理アカウントでログインし、普段使いのユーザーを作成するなりしてください。

Discussion