在以前の記事で、私たちはサーバー用の NixOS をインストールしました。この記事では、その基盤の上に Nextcloud を構築します。
ブロガーは Nextcloud を構築する際に大きな困難に直面しました。主な理由は、メールを送信できないことと、NixOS の公式ドキュメントが不十分であることです。そのため、私はより良い Nextcloud NixOS Wikiを作成しました。Nextcloud + NixOS をいじった後、試しに提出して現在の Wiki を置き換えます。
実際には、ブログのやり方に従って一歩一歩進める必要はなく、私が設定したconfiguration.nix
を直接ダウンロードし、自分のニーズに合わせて変更することができます。
なぜ Nextcloud なのか#
Nextcloud はオープンソースのクラウドストレージサービスで、プライベートクラウドを構築するために使用できます。その機能は非常に強力で、ファイルストレージ、カレンダー、メモ、チャットなどに利用できます。Nextcloud は古い PHP を使用していますが、その機能が非常に強力で、良い代替品が見つからないため、Nextcloud を選択しました。
Nextcloudの他に、ブロガーは以下のオープンソースのクラウドストレージサービスも試しました:
- pydio:機能は同様に強力ですが、Nix パッケージがなく、NixOS のインストールがやや面倒です。
- Seafile:十分に強力な代替品で、Nix パッケージがありますが、ドキュメントが不足しており、デプロイが面倒です。
- ownCloud:Nextcloud の前身で、機能が不十分で、更新が不安定です。
- cloudreve:機能が不十分で、ファイルの保存のみ可能で、Nix パッケージがありません。
ローカルで Nextcloud を構築する基本プロセス#
Nextcloud パッケージのインストール#
Nextcloud のインストールは非常に簡単で、/etc/nixos/configuration.nix
ファイルを変更し、environment.systemPackages
にnextcloud
を追加するだけです。
environment.systemPackages = with pkgs; [
nextcloud26
];
注意:Nextcloud の Nix パッケージは
nextcloud
+ バージョン番号であり、nextcloud
ではありません。
急いでnixos-rebuild switch
を実行しないでください。まだ Nextcloud は設定されていません。
初期設定#
NixOS マニュアルには、次のような設定が示されています:
{
services.nextcloud = {
enable = true;
hostName = "nextcloud.tld";
config = {
dbtype = "pgsql";
dbuser = "nextcloud";
dbhost = "/run/postgresql"; # nextcloudは自動的に/.s.PGSQL.5432を追加します
dbname = "nextcloud";
adminpassFile = "/path/to/admin-pass-file";
adminuser = "root";
};
};
services.postgresql = {
enable = true;
ensureDatabases = [ "nextcloud" ];
ensureUsers = [
{ name = "nextcloud";
ensurePermissions."DATABASE nextcloud" = "ALL PRIVILEGES";
}
];
};
# セットアップを実行する前にpostgresが実行されていることを確認します
systemd.services."nextcloud-setup" = {
requires = ["postgresql.service"];
after = ["postgresql.service"];
};
networking.firewall.allowedTCPPorts = [ 80 443 ];
}
この設定の意味は:
- Nextcloud サービスを有効にする
- ドメイン名を
nextcloud.tld
に指定する - データベースを PostgreSQL に指定し、データベースの具体的な設定を提供する
- サービスの起動順序を指定する
- 80 および 443 ポートを開放する
- Nextcloud 管理者のパスワードファイルを
/path/to/admin-pass-file
に指定する
/path/to/admin-pass-file
は実際のパスではなく、プレースホルダーであり、自分で指定する必要があります。NixOS の要件に従い、このファイルはnextcloud
ユーザーがアクセスできる必要があります。しかし、ブロガーのテストによると、このファイルが存在するディレクトリもnextcloud
ユーザーがアクセスできる必要があります。したがって、このファイルを/nextcloud
ディレクトリに置き、/nextcloud
ディレクトリの権限を777
に設定する必要があります。
/path/to/admin-pass-file
を/nextcloud/nextcloud-admin-pass
に変更し、次に
# rootユーザーとして実行
cd /
mkdir nextcloud
chown nextcloud nextcloud/
chmod 777 nextcloud/
cd nextcloud
vim nextcloud-admin-pass
# パスワードを入力
nixos-rebuild switch
ローカルテスト環境のため、一時的にnextcloud.tld
をnextcloud.nixos
に変更します(ブロガーのローカルネットワークには自前の DNS サーバーがあるため、もしない場合はアドレスに変更することをお勧めします)。
構築が完了したら、http://nextcloud.nixos/
にアクセスすると、次のような Nextcloud のインストール画面が表示されます。
異なるバージョンの Nextcloud のインストール画面は異なる場合がありますが、大体は似ています。
service.nextcloud.config.adminuser
で指定されたユーザー名と/nextcloud/nextcloud-admin-pass
で指定されたパスワードを入力すると、インストールが完了します。
nix 設定ファイルで Nextcloud アプリをインストールする(簡易用法)#
上記の設定でデプロイされた Nextcloud は、わずか数個のアプリしかインストールされていませんが、Nextcloud は強力なプラットフォームであり、アプリをインストールすることで機能を大幅に拡張できます。Nextcloud のアプリストアでは、多くのアプリを見つけてインストールできますが、NixOS では Nix パッケージマネージャーを使用してアプリをインストールする方が良い選択です。
NixWikiには、アプリをインストールするための例が提供されています。例えば、
services.nextcloud = {
enable = true;
[...]
package = pkgs.nextcloud26;
extraApps = with pkgs.nextcloud26Packages.apps; {
inherit mail news contacts;
};
extraAppsEnable = true;
};
この設定では、mail、news、contacts の 3 つのアプリがインストールされます。しかし、これらのアプリの名前は Nextcloud のアプリストアでは見つかりませんが、NixWiki のSome apps
でこれらのアプリの名前を見つけることができます。
この記事が公開された時点で、これらのアプリの名前は次の通りです:
[
"bookmarks",
"calendar",
"contacts",
"deck",
"keeweb",
"mail",
"news",
"notes",
"onlyoffice",
"polls",
"tasks",
"twofactor_webauthn"
]
明らかにこれらのアプリは不十分ですが、他の方法でアプリをインストールすることもできます。
nix 設定ファイルで Nextcloud アプリストアのアプリをインストールする#
NixWiki では、nix 設定ファイルで Nextcloud アプリストアからアプリをインストールする方法も示されています。例えば、
services.nextcloud = {
enable = true;
[...]
extraApps = {
mail = pkgs.fetchNextcloudApp rec {
url = "https://github.com/nextcloud-releases/mail/releases/download/v1.14.1/mail-v1.14.1.tar.gz";
sha256 = "sha256-sQUsYC3cco6fj9pF2l1NrCEhA3KJoOvJRhXvBlVpNqo=";
};
contacts = pkgs.fetchNextcloudApp rec {
url = "https://github.com/nextcloud-releases/contacts/releases/download/v4.2.2/contacts-v4.2.2.tar.gz";
sha256 = "sha256-eTc51pkg3OdHJB7X4/hD39Ce+9vKzw1nlJ7BhPOzdy0=";
};
};
extraAppsEnable = true;
};
この設定では、mail と contacts の 2 つのアプリがインストールされます。アプリのダウンロードリンクはNexcloud アプリストアで見つけることができ、そのリンクを設定ファイルに追加します。
注意:この方法でインストールされたアプリは手動で更新する必要があります。バージョンが更新されると、新しいダウンロードリンクを手動で再度入力する必要があります。(もちろん、Nextcloud 内のアプリストアを使用して更新することもできます)
ブロガーは次のアプリをインストールしました。
services.nextcloud = {
enable = true;
package = pkgs.nextcloud26;
[...]
extraApps = {
contacts = pkgs.nextcloud26Packages.apps.contacts;
mail = pkgs.nextcloud26Packages.apps.mail;
calendar = pkgs.fetchNextcloudApp rec {
url = "https://github.com/nextcloud-releases/calendar/releases/download/v4.3.4/calendar-v4.3.4.tar.gz";
sha256 = "0pj1h86kdnckzfrn13hllgps4wa921z4s24pg5d2666fqx89rwrv";
};
notes = pkgs.fetchNextcloudApp rec {
url = "https://github.com/nextcloud-releases/notes/releases/download/v4.7.2/notes.tar.gz";
sha256 = "0klqf8dixrrb8yp8cc60ggnvhmqb3yh9f6y1281jn8ia5jml622v";
};
camerarawpreviews = pkgs.fetchNextcloudApp rec {
url = "https://github.com/ariselseng/camerarawpreviews/releases/download/v0.8.1/camerarawpreviews_nextcloud.tar.gz";
sha256 = "1n1395m81m81klxzxd03ww07m0xjp0blbmx23y457k62j3kkr0m2";
};
drawio = pkgs.fetchNextcloudApp rec {
url = "https://github.com/jgraph/drawio-nextcloud/releases/download/v2.1.1/drawio-v2.1.1.tar.gz";
sha256 = "0frizrgkbmc3mhhap7cq45z43l4whzkszx7v0v0q2ylmq8sbxszm";
};
registration = pkgs.fetchNextcloudApp rec {
url = "https://github.com/nextcloud-releases/registration/releases/download/v2.1.0/registration-v2.1.0.tar.gz";
sha256 = "07dqc670qmdb3c8jjnj7azxxspjhiv6m9nrj960y3rjabyzy25m9";
};
music = pkgs.fetchNextcloudApp rec {
url = "https://github.com/owncloud/music/releases/download/v1.8.3/music_1.8.3_for_nextcloud.tar.gz";
sha256 = "1kajm5ppp63g42xdvkmv0glw7snsc2fi7pcra1sg4kd005ffz42d";
};
bookmarks = pkgs.fetchNextcloudApp rec {
url = "https://github.com/nextcloud/bookmarks/releases/download/v13.0.1/bookmarks-13.0.1.tar.gz";
sha256 = "0xx331bgly91y8ncxk36ha3ncrr2xlivblfi7rix6ffkrdx73yb9";
};
};
}
nix-prefetch-url --unpack <url>
コマンドを使用して tar.gz パッケージの sha256 値を取得できます。
フォーマットや一部のドキュメントに違いがあっても、この方法は機能します。
注意:camerarawpreviews
などの名前は tar.gz パッケージの名前と一致する必要があります。そうでないと、インストールできません。
設定が正しければ、管理設定 -> 概要にエラーは表示されないはずです。
よくある質問の解決策#
Nix は Nextcloud をどこにインストールしたのか?#
ソースコードによれば、デフォルトのインストールパスは/var/lib/nextcloud
で、データディレクトリは/var/lib/nextcloud/data
です。
ログが見つからない#
デフォルトでは、NixOS は Nextcloud のログ出力モードを次のように変更します。
'log_type' => 'syslog',
'loglevel' => '2',
この場合、Nextcloud のログはデーモンのログに出力され、journalctl -t Nextcloud
で確認できます。
面白いことに、'loglevel' => '2'
は無効な設定のようです。Nextcloud 内部の Warning、Error、さらには Fatal も Debug 出力として扱われます。したがって、'loglevel' => '2'
を'loglevel' => '0'
に変更する必要があるかもしれません。
services.nextcloud = {
[...]
logLevel = 0;
};
必要に応じて、-f
オプションを追加してリアルタイムでログを確認できます。
アプリストアはどこにあるのか?#
デフォルトでは、NixOS にインストールされた Nextcloud にはアプリストアがありません。
appstoreEnable
をtrue
に設定することで、アプリストアを有効にできます。
services.nextcloud = {
[...]
appstoreEnable = true;
};
メールが送信できない#
設計上の欠陥により、Nix ファイルを介してメール送信を直接設定することはできず、extraConfig
を使用して設定する必要があります。
services.nextcloud = {
[...]
extraOptions = {
mail_smtpmode = "smtp";
smtpsecure = "ssl";
mail_sendmailmode = "smtp";
mail_from_address = "nextcloud";
mail_domain = "example.com";
mail_smtphost = "smtp.example.com";
mail_smtpport = "465";
mail_smtpauth = 1;
mail_smtpname = "[email protected]";
mail_smtppassword = "password";
};
};
上記の設定はconfig.php
ファイルに由来し、新しい Nextcloud インスタンスでこれらの設定を見つけることができます。
ローカルでテストサーバーを構築する際、どの設定を使用してもメールを送信できないようですが、クラウドサーバー(AWS など)では正常に送信できます。この問題はローカルネットワーク環境によるもので、解決策は見つかりませんでした。
Nix 設定ファイルの例#
ここにIPFS リンクを示します。
いくつかの設定にはプレースホルダーが使用されているため、この設定ファイルを直接使用しないでください。
主な変更点は次の通りです:
services.nextcloud = {
enable = true;
hostName = "nextcloud.nixos";
config = {
dbtype = "pgsql";
dbuser = "nextcloud";
dbhost = "/run/postgresql"; # nextcloudは自動的に/.s.PGSQL.5432を追加します
dbname = "nextcloud";
adminpassFile = "/path/to/your/nextcloud/adminpass.txt"; # 自分のパスに置き換えてください
adminuser = "root";
};
package = pkgs.nextcloud26;
extraApps = {
contacts = pkgs.nextcloud26Packages.apps.contacts;
mail = pkgs.nextcloud26Packages.apps.mail;
calendar = pkgs.fetchNextcloudApp rec {
url = "https://github.com/nextcloud-releases/calendar/releases/download/v4.3.4/calendar-v4.3.4.tar.gz";
sha256 = "0pj1h86kdnckzfrn13hllgps4wa921z4s24pg5d2666fqx89rwrv";
};
# さらなる設定は私のIPFS共有で見つけることができます
};
extraOptions = {
# 以下を自分のメールサーバーの設定に置き換えてください
mail_smtpmode = "smtp";
smtpsecure = "ssl";
mail_sendmailmode = "smtp";
mail_from_address = "system";
mail_dmoain = "example.com";
mail_smtphost = "smtp.example.com";
mail_smtpport = "465";
mail_smtpayth = 1;
mail_smtpname = "[email protected]";
mail_smtppassword = "password";
};
};
services.postgresql = {
enable = true;
ensureDatabases = [ "nextcloud" ];
ensureUsers = [
{ name = "nextcloud";
ensurePermissions."DATABASE nextcloud" = "ALL PRIVILEGES";
}
];
};
systemd.services."nextcloud-setup" = {
requires = ["postgresql.service"];
after = ["postgresql.service"];
};
networking.firewall.allowedTCPPorts = [ 80 443 465 587 ];
メンテナンス#
最近構築したばかりなので、まだメンテナンス上の問題には直面していません。問題が発生した場合は、ここで更新します。
大きな問題については、別の記事を書くかもしれません。その問題を解決する記事にこのブログのリンクを掲載し、ここに解決策へのリンクを掲載します。
最新の更新を受け取りたい場合は、ブロックチェーン上で私のブログをフォローしてください。