環境
- Raspberry Pi 4 Model B
- Raspbian Bullseye 64bit
2023年12月追加
以下の解説はRaspberry Piを対象にしていますがさすがにRAM 2GBでは重かったので最近安い小型PCに移行しました
しかし手順としてはUbuntu 22.04でも変わらないことを確認しました
また、手順を大幅に簡略化しました
Raspberry Pi 4のほかのRAMのモデルや、Raspberry Pi 5での動作報告などお待ちしております!
2023年5月追記
DNS周りの問題を解決するのにDnsmasqを使うのは結局あんまりうまく動かなかったので推奨しない
その代わりにTailscaleというVPNサービスを使う
VPN内のアクセスだけではなく、VPN外への公開もTailscaleの機能を使う
概要
- Raspberry Pi4にsnapを使ってNextcloudの簡単インストールをします
- Ubuntuなどと違い少しだけ手順が増えるためつまづきました
- Tailscaleの導入
- https対応
- 外部公開
- iOSのホームアプリとの連携(おまけ)
ここまでやります
Nextcloudのセットアップ
USBストレージの準備
外付けHDDなどは/media
にマウントする必要があるようです
適宜
sudo vi /etc/fstab
で変更しましょう
環境によってそれぞれ対応してください
snapのインストール
canonicalが作ったsnap経由で入れるのが一番楽そうなのでまずはこちらをインストールします
sudo apt update
sudo apt install snapd
これでsnapのインストールができました
snapコマンドが使えるようになるはずなので
sudo snap install core
coreを導入したらこれでsnapのインストールが完了です
おそらくUbuntu以外のディストリビューションを使う場合はcoreのインストールが必須です
Nextcloudのインストール
このステップはsnapのおかげで簡単です
sudo snap install nextcloud
Nextcloud installedと出れば成功です.
とりあえず起動するか確認.
初回起動時に色々な設定ファイルが作られるのでしばし待ちましょう
sudo snap start nextcloud
外付けHDDの有効化
データを外部に保存する場合次のステップが必要です
接続
sudo snap connect nextcloud:removable-media
データのコピー,ターゲット先に気をつけてください
sudo cp -r /var/snap/nextcloud/common/nextcloud/data /media/<Target HDD>/nextcloud_data
設定ファイルの編集
sudo vi /var/snap/nextcloud/current/nextcloud/config/config.php
36行目のdatadirectory
を移動先のものへ
再起動
snap restart nextcloud
もしうまくいかない場合はpiごと
sudo reboot now
初回セットアップ
既にこの時点でブラウザからRaspberryPiのローカルIPをひらけば
下に示したログイン画面のように管理者アカウントを作るよう指示されます.
指示通りやれば無事ローカル内で動作するNextcloudの完成です.
外部公開とHTTPS
ローカル運用、つまり家の中からしかアクセスを行わない運用のみの方はもう読まなくて大丈夫です
お酒飲みながら作業してお酒飲みながらこの記事書いておりましたが外部公開となると気を引き締めていかなければなりません
2023年になって書き直している今ももちろんお酒を飲んでいます
最初に書いたときもお酒を飲んでいました
Tailscaleの導入
TailscaleとはVPNのサービスである
詳細とインストール方法については以下の記事を参考にされたい、非常に多機能で便利で素敵
そしてこれを利用してVPNの外までの公開ができる、非常に多機能で便利で素敵
100台まで無料のVPNサービス「tailscale」、リンクだけでマシンのシェアも可能!?【イニシャルB】 - INTERNET Watch
WireguardフルメッシュVPNを「ゼロコンフィグ」で作れるクラウド型の最新VPNサービス
といっても導入はびっくりするほど簡単なので大丈夫だと思われるため、Nextcloudと一緒に使うべき時に必要な手順だけ示す
sudo tailscale up
これだけできてればなんとかなる
HTTPS対応
VPNを使うならhttpsを使う意味なんてないじゃないかと思うが、なんかブラウザで開いた時にカッコ悪いのと、後述するTailscaleの便利機能が使えるようになるのでオススメです
ほぼ以下の記事の簡単な日本語訳となる
Enabling HTTPS · Tailscale
まずはTailscaleの設定のページから次のことを確認する
1.管理コンソールの DNS ページに移動します。
2. MagicDNSを有効にします。
3. HTTPS Certificatesの下にある、Enable HTTPSをクリックします。
DeepLで翻訳しました (https://www.deepl.com/app/?utm_source=ios&utm_medium=app&utm_campaign=share-translation
翻訳しました
そしてNextcloudを動かしているマシンで以下のコマンドを実行する
sudo tailscale serve --bg --https=443 80
そしてTailscaleのリバースプロキシ下でNextcloudを動かすため次のように設定する必要がある
sudo nextcloud.occ config:system:set overwriteprotocol --value 'https'
これでどのようにアクセスできるのか次のように確認できる
tailscale serve status
すると、
https://<hostname>.tail<乱数>.ts.net (tailnet only)
|-- / proxy http://127.0.0.1:80
とあるので、適宜
sudo nextcloud.occ config:system:set trusted_domains 1 --value=<hostname>.tail<乱数>.ts.net
とする。
以上、終わり。https対応終わり!
これによって、先ほどの、https://<hostname>.tail<乱数>.ts.net
のURLを開くと4G/5Gなど外部からのVPNを介した通信、およびおうちのWiFiなどでの内部からの通信、どちらもできるはずである
この時点で、Tailscaleによって発行されたhttps://<hostname>.tail<乱数>.ts.net
のアドレスでのアクセスは、VPN内からのアクセスであれば100.
から始まるVPNのIPアドレスに、おうち内からのアクセスであれば192.168.
のようなローカルアドレスに自動的に名前解決・ルーティングされる。
うれしい
しかも安定している
なんならNGN網内折り返しも勝手にやってくれるらしい
フレッツ網内折り返し通信での快適VPN。Wireguardのパフォーマンスを引き出す - Qiita
うれしい
外部公開
大体の人はこの時点でNextcloudにアクセスしたいすべての端末にTailscaleを導入すればそれでいい気もするが、Tailscaleの凄さはこれだけにとどまらないため、このNextcloudをTailscale VPNの外に公開する方法を示す
これによるメリットは以下のようなものがある
- すべての端末にTailscaleを入れなくてもいい
- 普段はVPN内のみ、たまに外部公開がみたいなことが簡単にできる
- そのおかげで、誰かとファイルの受送信をしたいときだけ外部公開、みたいな使い方ができるようになり、安心
ということで、手順です
まずさっきのserve
をoffにする
sudo tailscale serve --https=443 off
そして外部公開は次のコマンドでできる。DNSの反映までちょっと時間がかかるかもしれない
sudo tailscale funnel -bg --https=443 80
これでhttps://<hostname>.tail<乱数>.ts.net
は外部公開される
どれどれ様子を見てみよう
tailscale serve status
すると、
https://<hostname>.tail<乱数>.ts.net (Funnel on)
|-- / proxy http://127.0.0.1:80
Funnel on
えっまじか、とりあえずセキュリティチェックしてみよう
Nextcloudが外部からセキュリティ設定が正しいかどうか簡易的に確認してくれる機能が用意されている
外部からのアクセスとセキュリティチェックが無事できるはずだ
えっじゃあもしかして...?
sudo tailscale funnel --https=443 off
するとhttps://<hostname>.tail<乱数>.ts.net
は外部からアクセスできなくなる
常に外部公開していてもNextcloudのログイン画面やセキュリティの機能があるため問題はない。しかし不必要に公開する意味もないため、場合に応じてserve
とfunnel
の切り替えができるのはとても嬉しい。
これで完成!!!!!!!!!!!!!!!!!!!以上!!!!!!!!!!!!!!!!!!!!
おまけ
意味もなくhomebridgeを使ってon/offを切り替える
nakano57/tailscale-funnel_homebridge-cmd4
以前(2023年版)の手順からの移行
証明書の更新が不要になるのでこっちの方がおすすめです
sudo nextcloud.disable-https
sudo snap set nextcloud ports.http=80
sudo nextcloud.occ config:system:set overwriteprotocol --value 'https'
以下外部公開へと続く