Oracle Cloud は気前よく高スペック(CPU:4 コア,Memory:24GB)の Arm のインスタンスを無料で提供しています。

Web 接続環境さえあれば、どこでも接続できる個人用のストレージと開発環境を構築する方法を説明します。

構成イメージは下図通り、外部公開する VM(バーチャルマシン)を作成し、docker を用いて Visual Studio Code をブラウザベースで動作する code-server とNextcloud を構築します。

本手順の実施にあたり必要なものは以下です。

インスタンス作成

下記の Oracle 公式の手順 (3.インターネット・アクセスの有効化まで) に従い、インスタンスを立ててください。

Free Tier: Ubuntu インスタンスへの WordPress のインストール

作成する VM タイプは最新の Ubuntu にし、CPU も ARM に変更してください。

  • OS イメージ : Ubuntu 22.04
  • CPU : Arm
  • ボリューム : 100GB
  • CPU コア数 : 4 コア以下
  • メモリ : 24GB 以下

また、Web と SSH 接続するため、VCNのイングレス・ルールの作成 の部分で 22, 80 ,443 解放しておいてください。

持っている独自ドメインを作成したインスタンスの IP と紐付けの DNS レコード登録を行います。 ここで CloudFlare の DNS 登録手順を掲載しておきます。

https://www.cloudflare.com/ja-jp/learning/dns/dns-records/

インスタンス設定

インスタンス作成完了後に、ローカルより ssh でアクセスして、OS の最新化にします。

sudo apt -y update && sudo apt -y upgrade && sudo apt -y autoremove 

Oracle Cloud の Ubuntu インスタンスは ufw を用いてポートを開放できない問題があるため、iptables を無効にしておきます。

iptables -F
netfilter-persistent save

docker を使ったコンテナ作成

code-server と nextcloud のコンテナを建てるため、公式ドキュメントに従い docker をインストールします。

sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
 
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
 
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
 
sudo apt-get update
 
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

コンテナのデータを格納するフォルダを作成し、そのフォルダに入ります。

mkdir mycloud
cd mycloud

docker-compose.yml のファイルを作成して、内容は以下です。

version: '3.8'
 
services:
  nextcloud:
    image: nextcloud:latest
    container_name: nextcloud
    volumes:
      - ./data:/var/www/html
    environment:
      - MYSQL_HOST=db
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=trongpassword
    depends_on:
      - db
    restart: always
 
  db:
    image: mariadb:latest
    container_name: nextcloud-db
    volumes:
      - ./db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=mystrongrootpassword
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=mystrongpassword
    restart: always
 
 
  caddy:
    image: caddy:latest
    container_name: nextcloud-caddy
    depends_on:
      - nextcloud
    volumes:
      - ./caddy/Caddyfile:/etc/caddy/Caddyfile
      - ./caddy/data:/data
      - ./caddy/config:/config
    ports:
      - "80:80"
      - "443:443"
    restart: always
 
 
  code-server:
    image: linuxserver/code-server
    container_name: code-server
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Tokyo
      - PASSWORD=pass #optional
      - SUDO_PASSWORD=pass #optional
      - PROXY_DOMAIN=your.domain.com
    volumes:
      - ./code-server:/config
      - ./project:/home/project
    ports:
      - 8443:8443
    restart: always

docker のコンテナを作成します。

sudo docker compose up -d

Web サーバーの SSL 暗号化通信を設定するcaddy/Caddyfileというファイルを編集します。

nextcloud.yourdomain.com {
  reverse_proxy nextcloud:80
  header Strict-Transport-Security max-age=31536000;
  encode gzip
  file_server
}

vscode.yourdomain.com {
  reverse_proxy code-server:8443
  header Strict-Transport-Security max-age=31536000;
  encode gzip
  file_server
}

また、nextcloud のコンテナの初期設定は http 通信のため、https に変更します。以下の一行を追加します。 編集するファイル:data/config/config.php

<?php
$CONFIG = array (
  ...
  'overwriteprotocol' => 'https',
  ...
);
 

そして、コンテナを再起動します。

sudo docker compose restart

nextcloud のメンテナンスジョブを定期的に動かせるように、cron ジョブを設定します。

sudo crontab -e

追加内容

*/15 * * * * docker exec -u www-data nextcloud php cron.php

まとめ

本記事の手順を全て無事に完了していれば、Web ブラウザーからドメインアクセスすることで code-server と nextcloud にアクセスできます。そこから初期設定して、自分独自の環境を楽しみましょう。

Written-By-Human-Not-By-AI-Badge-white