📝

Oracle Cloud Infrastructure (OCI) で自分だけのストレージと開発環境を構築する方法

2024/04/04に公開

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

Discussion