仮想クラウドネットワークのポート開放
Nextcloudのインストールを前に、必要なポートを開放します。まずは仮想クラウドネットワークから。Nextcloudが使うのは https/443tcp だけですが、インストール後にLet’s EncryptがSSL証明書を生成する際、 http/80tcp も必要とするようなので、ここでまず両者共に開いておき、最後に http/80tcp は閉じるつもりです。
Oracle Cloud左上のメニューを【ネットワーキング→仮想クラウド・ネットワーク】と進みます。
デフォルトで現在使用中のネットワーク名をクリックして詳細へ進みます。
仮想クラウド・ネットワークの詳細ページ左下のリソースメニューのセキュリティ・リストをクリック。
デフォルトのセキュリティ・リスト右の「︙」を押して詳細を開きます。
セキュリティ・リストは、イングレス、エグレスの両ルールによって構成されており、今回開くのはイングレス・ルールです。「イングレス・ルールの追加」を押して新規ルールを追加しましょう。
プロトコルは TCP 、宛先ポートに 80,443 を入力してルールを追加します。
追加したルールはポート単位の2つのルールとして追加されました。
仮想クラウド・ネットワークのポート開放は以上です。
インスタンス内ファイアウォールのポート開放
続いてインスタンス内のUbuntuのファイアウォールであるiptablesでも、これらのポートを開放します。 /etc/iptables/rules.v4 を管理者権限で開き、ssh/22tcp用に既に存在しているエントリの直下へ、 80tcp , 443tcp の許可エントリを挿入します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# CLOUD_IMG: This file was created/modified by the Cloud Image build process # iptables configuration for Oracle Cloud Infrastructure # See the Oracle-Provided Images section in the Oracle Cloud Infrastructure # documentation for security impact of modifying or removing these rule *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [463:49013] :InstanceServices - [0:0] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p udp --sport 123 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited -A OUTPUT -d 169.254.0.0/16 -j InstanceServices |
以下のコマンドでiptablesへのルールを追加、反映します。
1 2 |
$ sudo nano /etc/iptables/rules.v4 $ sudo iptables-restore < /etc/iptables/rules.v4 |
これでポート開放は完了です。ネットワーク外の適当な端末から nmap を使い、当該ポートが適切に開いているか確認します。
1 2 3 4 5 6 7 8 9 |
$ nmap -Pn -p T:22,80,443 #####.##########.### Starting Nmap 7.60 ( https://nmap.org ) Nmap scan report for #####.##########.### (###.###.###.###) Host is up (0.095s latency). PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 443/tcp open https Nmap done: 1 IP address (1 host up) scanned in 7.45 seconds |
Nextcloudをインストール
いくつものサービスの複合で成り立つNextcloudですが、snapを使えばまとめてインストールすることが出来ます。snapは確かに便利なのですが、サンドボックス的な振る舞いから、ループデバイスが乱雑に増えるのが気持ち悪くて避けていました。今回がsnap初めです。
Nextcloudのインストールはたった一行、続くコマンドはSnap管理下にあるNextcloudが、システムストレージ以外の外部ストレージへアクセスするのを許可するのに必要なおまじないです。。
1 2 3 |
$ sudo snap install nextcloud nextcloud 21.0.1snap2 from Nextcloud✓ installed $ sudo snap connect nextcloud:removable-media |
簡単にsnapコマンドでNextcloudの情報を取得してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
$ df -h Filesystem Size Used Avail Use% Mounted on udev 2.9G 0 2.9G 0% /dev tmpfs 581M 1.3M 579M 1% /run /dev/sda1 45G 2.5G 43G 6% / tmpfs 2.9G 0 2.9G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 2.9G 0 2.9G 0% /sys/fs/cgroup /dev/loop0 60M 60M 0 100% /snap/lxd/20330 /dev/loop3 37M 37M 0 100% /snap/oracle-cloud-agent/15 /dev/loop1 49M 49M 0 100% /snap/core18/2068 /dev/loop5 29M 29M 0 100% /snap/snapd/12164 /dev/loop4 28M 28M 0 100% /snap/snapd/11843 /dev/sda15 98M 290K 98M 1% /boot/efi /dev/sdb1 98G 61M 93G 1% /media/volblk1 /dev/loop6 49M 49M 0 100% /snap/core18/2073 tmpfs 581M 0 581M 0% /run/user/1001 /dev/loop2 218M 218M 0 100% /snap/nextcloud/28096 $snap changes nextcloud ID Status Spawn Ready Summary 6 Done today at 13:29 HKT today at 13:30 HKT Install "nextcloud" snap 7 Done today at 13:32 HKT today at 13:32 HKT Connect nextcloud:removable-media to snapd:removable-media $snap connections nextcloud Interface Plug Slot Notes network nextcloud:network :network - network-bind nextcloud:network-bind :network-bind - network-observe nextcloud:network-observe - - removable-media nextcloud:removable-media :removable-media manual |
その他、本稿執筆時点でのパッケージ情報は次の通りでした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
$ snap info nextcloud name: nextcloud summary: Nextcloud Server - A safe home for all your data publisher: Nextcloud✓ store-url: https://snapcraft.io/nextcloud contact: https://github.com/nextcloud/nextcloud-snap license: unset description: | Where are your photos and documents? With Nextcloud you pick a server of your choice, at home, in a data center or at a provider. And that is where your files will be. Nextcloud runs on that server, protecting your data and giving you access from your desktop or mobile devices. Through Nextcloud you also access, sync and share your existing data on that FTP drive at school, a Dropbox or a NAS you have at home. commands: - nextcloud.disable-https - nextcloud.enable-https - nextcloud.export - nextcloud.import - nextcloud.manual-install - nextcloud.mysql-client - nextcloud.mysqldump - nextcloud.occ services: nextcloud.apache: simple, enabled, active nextcloud.logrotate: simple, enabled, inactive nextcloud.mdns-publisher: simple, enabled, active nextcloud.mysql: simple, enabled, active nextcloud.nextcloud-cron: simple, enabled, active nextcloud.nextcloud-fixer: simple, enabled, active nextcloud.php-fpm: simple, enabled, active nextcloud.redis-server: simple, enabled, active nextcloud.renew-certs: simple, enabled, active snap-id: njObIbGQEaVx1H4nyWxchk1i8opy4h54 tracking: latest/stable refresh-date: today at 13:30 HKT channels: latest/stable: 21.0.1snap2 2021-05-31 (28096) 227MB - latest/candidate: 21.0.1snap2 2021-05-30 (28096) 227MB - latest/beta: 21.0.1snap2+git6.ebca1ba 2021-06-14 (28349) 227MB - latest/edge: master-2021-06-15 2021-06-15 (28366) 232MB - 21/stable: 21.0.1snap2 2021-05-31 (28096) 227MB - 21/candidate: ↑ 21/beta: ↑ 21/edge: 21-2021-06-15 2021-06-15 (28368) 228MB - 20/stable: 20.0.9snap2 2021-05-14 (27703) 219MB - 20/candidate: ↑ 20/beta: 20.0.9snap2+git8.4b35005 2021-06-14 (28352) 219MB - 20/edge: 20-2021-06-15 2021-06-15 (28367) 220MB - 19/stable: 19.0.6snap1 2020-12-16 (25106) 259MB - 19/candidate: ↑ 19/beta: 19.0.6snap1+git4.eb35725 2021-06-09 (28263) 260MB - 19/edge: 19-2021-06-15 2021-06-15 (28370) 194MB - 18/stable: 18.0.12snap1 2020-12-16 (25110) 259MB - 18/candidate: ↑ 18/beta: ↑ 18/edge: 18-2021-05-15 2021-05-15 (27838) 190MB - 17/stable: 17.0.10snap1 2020-10-23 (23907) 244MB - 17/candidate: ↑ 17/beta: ↑ 17/edge: ↑ 16/stable: 16.0.11snap1 2020-06-08 (21460) 220MB - 16/candidate: ↑ 16/beta: ↑ 16/edge: ↑ 15/stable: 15.0.14snap1 2020-01-20 (18384) 210MB - 15/candidate: ↑ 15/beta: ↑ 15/edge: ↑ 14/stable: 14.0.10snap1 2019-05-04 (13210) 196MB - 14/candidate: ↑ 14/beta: ↑ 14/edge: ↑ 13/stable: 13.0.12snap1 2019-05-03 (13161) 187MB - 13/candidate: ↑ 13/beta: ↑ 13/edge: ↑ 12/stable: 12.0.13snap1 2019-01-07 (10634) 200MB - 12/candidate: ↑ 12/beta: ↑ 12/edge: ↑ 11/stable: 11.0.8snap1 2018-05-10 (6963) 197MB - 11/candidate: ↑ 11/beta: ↑ 11/edge: ↑ 10/stable: 10.0.2snap1 2020-06-26 (390) 141MB - 10/candidate: ↑ 10/beta: ↑ 10/edge: ↑ 9/stable: 9.0.53snap4 2020-06-26 (101) 134MB - 9/candidate: ↑ 9/beta: ↑ 9/edge: ↑ installed: 21.0.1snap2 (28096) 227MB - |
管理者ユーザとドメインの登録
最初に作る管理者ユーザをターミナルから、コマンドラインで作成します(WebUIから作成することも可能です)。
1 2 |
$ sudo nextcloud.manual-install #USERNAME# #PASSWORD# Nextcloud was successfully installed |
インスタンスに割当てられているパブリックIPを手持ちのドメインのネームレコードに紐づけておいたので、ここでそのドメイン名をNextcloudへ登録します(パブリックIPのみでアクセスする場合は不要)。
1 2 3 4 5 6 7 8 9 |
$ sudo nextcloud.occ config:system:get trusted_domains localhost $ sudo nextcloud.occ config:system:set trusted_domains 1 --value=#####.##########.### System config value trusted_domains => 1 set to string #####.##########.### $ sudo nextcloud.occ config:system:get trusted_domains localhost #####.##########.### |
SSL証明書を生成
Let’s EncryptでSSL証明書を生成するのも一行のコマンドで済みます。このとき、パブリックIPアドレスとドメインが正しく名前解決され、http/httpsポートが適切に開いていないと、生成エラーになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
$ sudo nextcloud.enable-https lets-encrypt In order for Let's Encrypt to verify that you actually own the domain(s) for which you're requesting a certificate, there are a number of requirements of which you need to be aware: 1. In order to register with the Let's Encrypt ACME server, you must agree to the currently-in-effect Subscriber Agreement located here: https://letsencrypt.org/repository/ By continuing to use this tool you agree to these terms. Please cancel now if otherwise. 2. You must have the domain name(s) for which you want certificates pointing at the external IP address of this machine. 3. Both ports 80 and 443 on the external IP address of this machine must point to this machine (e.g. port forwarding might need to be setup on your router). Have you met these requirements? (y/n) y Please enter an email address (for urgent notices or key recovery): #####@#######.### Please enter your domain name(s) (space-separated):#####.##########.### Attempting to obtain certificates... done Restarting apache... done |
Nextcloudストレージの変更
ブラウザからNextcloudを開いてみると、ログイン画面になるので、先ほどターミナルで作成した、管理者ユーザでログインします。
ログイン後、ファイルビューにしてみると、既に入っているサンプルファイルが見えました。
ページ右上のユーザアイコンのメニュー内にある「設定」をクリックします。
管理者ユーザなので、左の【管理メニュー→システム】を開くとこのように、NextCloudの使うストレージはまだデフォルトのシステムのストレージになっていることが判ります。
Nextcloudの使うストレージを変えるため再びコンソールに戻り、Nextcloudを止めてデフォルトストレージにあるファイルを、今回作ったブロック・ボリュームへ移動します。
1 2 3 4 5 6 7 8 9 |
$ sudo snap stop nextcloud Stopped. $ sudo mkdir /media/volblk1/nextcloud $ sudo chmod 0770 /media/volblk1/nextcloud $ sudo mv /var/snap/nextcloud/common/nextcloud/data /media/volblk1/nextcloud/ $ sudo ls -l /media/volblk1/nextcloud/ drwxrwx--- 4 root root 4096 Jun 22 14:05 data |
そして次のNextcloudの設定ファイルを直接書き換えます。
1 |
$ sudo nano /var/snap/nextcloud/current/nextcloud/config/config.php |
1 2 3 4 |
【変更前】 'datadirectory' => '/var/snap/nextcloud/common/nextcloud/data', 【変更後】 'datadirectory' => '/media/volblk1/nextcloud/data', |
編集後Nextcloudを再開させたら、ブラウザから再びシステム情報を開いて、ストレージがブロック・ボリュームを使っていることを確認します。
1 2 |
$ sudo snap start nextcloud Started. |
http/80tcpポートを閉鎖
最後に不要となったhttp/80tcpポートを閉じておきます。まずは、仮想ネットワークのセキュリティ・リストにあるイングレス・ルールから。
続いてインスタンス内のiptablesを閉じます。
1 2 |
$ sudo nano /etc/iptables/rules.v4 $ sudo iptables-restore < /etc/iptables/rules.v4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# CLOUD_IMG: This file was created/modified by the Cloud Image build process # iptables configuration for Oracle Cloud Infrastructure # See the Oracle-Provided Images section in the Oracle Cloud Infrastructure # documentation for security impact of modifying or removing these rule *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [463:49013] :InstanceServices - [0:0] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p udp --sport 123 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited -A OUTPUT -d 169.254.0.0/16 -j InstanceServices |
以上、既にネット上に豊富に公開されている資料のお陰で、NextcloudをOracle Cloudの仮想インスタンスへインストールすることが出来ました。オンライン上のまとまったストレージの使い道はいろいろ思い浮かびますが、基本的にブラウザベースで使うことは考えておらず、ネットワーク・ドライブとして様々なデバイスからアクセス出来るようにしたいので、次回はWebDAVの接続方法とファイル転送速度を測ってみるつもりです。
参考と鳴謝Great Tnx!!)