クラウド上に無料でオンラインストレージを作る
この記事ではクラウド上にオンラインストレージ「Nextcloud」を構築してみます。
構築するクラウドとしてはOracle Cloud Infrastructure(OCI)を使用します。OCIは無償枠(Always Free)が他ベンダーと比べ広く開放されており、無償リソースだけでオンラインストレージを作ることができるためです。
📝はじめに
本記事で作成する構成イメージは以下のようになります。HeatWave(旧MySQL HeatWave)を利用するため、ストレージ容量は最大50GB となります。
また、OCI(Oracle Cloud Infrastructure) で無償提供されているリソースについては、以下の記事も参考にしてください。
📌 Oracle Cloudに無償で構築できるリソース
インスタンスに閉じたスタンドアロン構成では無償枠で最大200GBまでのストレージが使用可能です。スタンドアロンでの構築手順については、以下の記事が丁寧に説明されていると思います。そこまで凝った作りにしないよって方はこちらの方を参考にしてみてください。
- Install NextCloud On Ubuntu 22.04 LTS - Complete Guide
- How to Run Nextcloud On Ubuntu - Pi My Life Up
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