Windows Server 2019 Essentials エディションは継続。だがかつてのEssentialsの面影はなく別ものにでも触れましたが、Windows Server 2019 Essentialsでは、Windows Server Essentialsエクスペリエンスが無くなり、
- ダッシュボード
- リモートWebアクセス
- クライアントコンピューターのバックアップ
などは利用できなくなります。
時代はクラウド全盛ですが、これまでWindows Home ServerやWindows Server Essentialsシリーズを利用してきたユーザーは、個人/SMBでも
- クラウドに自分のプライベート/会社のファイルを置くのは気持ちが悪い
- データ容量が大きく、クラウドに置くのは不向き
- クラウドストレージのサブスクリプション負担はいやだ
という方が多いと思います。Windows Serverを前提に引き続きオンプレミスのサーバーを利用しながら、Windows Server Essentialsエクスペリエンスの機能の代替策を探るシリーズとして、今回はリモートWebアクセスの代替策を考えてみたいと思います。
実現したいこと
Windows Server 2019 Essentialsを始めとしたWindows Server Essentialsエクスペリエンスのないサーバーで、フリーのプライベートクラウド構築用OSS「NextCloud」を利用して、以下を実現することを目指します。
- オンプレミスにNextCloud環境を構築し、外出先からPC/スマホ/タブレットでアクセスできるプライベートクラウドを作成する
- NextCloudから、Windows Server Essentials(2019含む)に作成した共有フォルダーにアクセス可能にする
- Windows Server Essentials(2019含む)のActive Directoryに作成したユーザーアカウントで、NextCloudへのログインを可能にする
- NextCloudの豊富なアプリを活用して、多要素認証などWindows Server Essentialsでは難しかったことを手軽に実現する
Windows Server 2016 EssentialsまでのWindows Server Essentialsエクスペリエンスの稼働するサーバーでも、Essentialsエクスぺリンスで利用するポート(TCP 80/443)との競合を回避するなど、一部解決すべき課題がありますが、ここで紹介することは実現可能です。
NextCloudのインストール手順
今回、NextCloudはRasberry Pi上に作成します。本当は、Docker for Windowsで利用したいので、Windowsサーバー上に構成する形態も別途試してみたいと思います。
あらかじめRaspbianのインストールは済んでいる状態から進めます。
- rootに切り替えます
1sudo su - アップデートを実施します
12apt-get -y updateapt-get -y upgrade - 必要なパッケージをインストールします。
今回はwebサーバーにはApacheを利用します。
1apt install -y apache2 php p7.0-cli php7.0-gd php7.0-pgsql php7.0-mysqlnd php7.0-mcrypt php7.0-dev php7.0-curl php7.0-zip php7.0-mbstring php-ldap mariadb-client mariadb-server smbclient php-smbclient php-gd php-intl php-mcrypt php-apcu - Apacheの設定をします
1nano /etc/apache2/sites-available/nextcloud.conf
nextcloud.confファイルに以下の設定を記載します。
123456789101112Alias /nextcloud "/var/www/nextcloud/"<Directory /var/www/nextcloud/>Options +FollowSymlinksAllowOverride All<IfModule mod_dav.c>Dav off</IfModule>SetEnv HOME /var/www/nextcloudSetEnv HTTP_HOME /var/www/nextcloud</Directory>
モジュールを有効にします。SSLも有効にしておきます
1234a2ensite nextcloud.confa2enmod rewritea2enmod headerssystemctl restart apache2 - データベースを作成します。
username,passwordは、NextCloudデータベースの管理者権限を持つことになるDBユーザーのユーザー名、パスワードを指定します。
12345mysql -u root -pCREATE DATABASE IF NOT EXISTS NextCloud;GRANT ALL PRIVILEGES ON NextCloud.* TO 'username'@'localhost' IDENTIFIED BY 'password';FLUSH PRIVILEGES;quit - NextCloudをインストールします
12cd /var/wwwcurl https://download.nextcloud.com/server/releases/nextcloud-14.0.1.tar.bz2 | sudo tar -jxv
時間がかかりますが、インストールが終了したら引き続きフォルダーを作成して権限を修正します。
123456cd /var/www/nextcloudmkdir -p ./datachown www-data:www-data ./datachmod 750 ./datachown www-data:www-data config appschown -R www-data:www-data /var/www/nextcloud - http://IPアドレス/nextcloud にアクセスします。
NextCloudの管理者アカウントを新規作成し、5で作成したデータベースのユーザー名、パスワードを指定して[セットアップを完了します]を押下します。今回の構成では、データは別途存在するWindows Serverの共有フォルダーに保存する想定のためデフォルトのままとしますが、外付HDD等を利用する場合はHDDのマウントポイントに変更します。セットアップにはしばらく時間がかかります。
後述するActive DirectoryとのLDAP連携を利用する場合、管理者アカウントはAD上のユーザーと重複しないよう留意します。
- インストールが完了すると、ログイン画面が表示されますので、8で作成した管理者のアカウントでログインします。
ログインすると、下の画面が表示されます。
Server Essentials上のActive Directoryでの認証を設定する
Windows Server 2019 Essentialsでも、Active Directoryは必須となります。せっかくですのでユーザー管理はActive Directoryで一元管理させることとし、NextCloud上でLDAP認証をさせたいと思います。
- NextCloudの画面で、右上の歯車アイコンから、アプリを押下します。
[LDAP user and group backend]を有効にします。パスワードの入力が求められますので、ログインしている管理者のパスワードを入力します。
また、後で利用しますので[External Storage support]も有効にしておきます。 - [LDAP user and group backend]がインストールされたら、右上の歯車アイコンを押下し、[設定]を押下します。
- [LDAP/AD統合]を押下します。
サーバータブに、LDAPクエリに必要な情報を入力します。
ここではドメイン名がhogehoge.localの場合を例にとります。1行目 IPアドレス/ポート Windows ServerのIPアドレスを入力します。ポートは通常は389ですが、わからない場合はIPアドレス入力後[ポートの検出]を押下すると自動検出されます。 2行目 管理権限のDN CN=[Windows Serverの管理者権限を持つアカウント],CN=Users,DC=hogehoge,DC=local 3行目 パスワード 管理者権限を持つアカウントのパスワード 4行目 ベースDN DC=hogehoge,DC=local 入力が完了したら、[ベースDNをテスト]を押下し、[設定OK]と表示されたら[続ける]を押下します。
- [ユーザー]タブに遷移します。オブジェクトクラスは[person]、これらのグループのみで[Domain Users]を選択し、[設定を検証し、ユーザーを数える]を押下します。正しくユーザー数が表示されればOKです。[続ける]を押下します。
ここでは[Domain Users]グループに権限を与えましたが、あらかじめNextCloudにアクセスを許可するグループを別に作成したり、Windows Server 2016 Essentialsまでのサーバーの場合、[WseRemoteaccessUsers]グループを指定すると、リモートWebアクセスにアクセスできるようダッシュボードから指定したユーザーにのみアクセスを許可することができます。
- [ログイン属性]タブに遷移します。左下の入力欄にドメインユーザーのユーザー名を入力して[設定のチェック]を押下します。画面上部に[ユーザーが見つかり、設定が検証できました。]と表示されればOKです。[続ける]を押下します。
[その他の属性]で、sAMAccountNameを選択します。 - [エキスパート設定]を開き、[内部ユーザー名属性]にも[sAMAccountName]を指定します。
右上の[ユーザー]を押下すると、Active Directoryから連携したユーザーの一覧が表示されます。ADから連動したユーザーに管理者権限を付与する場合は、[ユーザー]からadmin権限を付与しておきます。
ADとの連携の設定を間違って、不要なユーザーが登録された場合は、[エキスパート設定]タブの下にある[ユーザー名とLDAPユーザーのマッピングをクリアする]を押下すると最新の情報で連動しなおすことができます。
以上で、Windows ServerのActive Directory上に存在するユーザーアカウントでNextCloudにログインできるようになります。
初回のユーザーログオン時には、やや時間がかかりますので注意して下さい。
NextCloudから、Windows Server上の共有フォルダーへのアクセス
NextCloudからCIFSを経由してWindows Server上の共有フォルダーにアクセスできるようにします。
- 設定>外部ストレージを開き、[ストレージを追加]から[SMB/CIFS]を選択します。正しく設定できれば、下の図のように緑の✔マークがつきます。
- NextCloudから、Windows Server上の共有フォルダーにアクセスするための情報を入力します。
フォルダー名 任意で名前を付けます 認証 LDAPを使ってログインしているActive Directoryのユーザーアカウントで認証する場合、[ログイン認証情報はセッションに保存されます]を選択します。 実際に使ってみたところ、セッション情報を利用したSMB/CIFSのアクセスはパフォーマンスの問題を引き起こすことが多そうなため、ユーザー情報を入力し、アクセスできるユーザーは[利用可能]欄で個別に設定するのがよさそうです。
ホスト Windows Serverのコンピューター名またはIPアドレスを入力します 共有 Windows Server上の共有フォルダーの名称を入力します。 - 登録したフォルダーは、NextCloudからアクセスできるようになります。
- あとは、DDNSを使って外部からアクセスできるようにし、SSLの設定などを行えば、外部からオンプレミスのWindows Server上の共有フォルダーにアクセスできるフロントエンドの完成です。
- Windows PC、iOSやAndroid向けアプリもあります。アプリからはNextCloud上のフォルダーと同期させることもできますので、スマホで撮影した写真を自動的に自宅のストレージに同期させるといったことも簡単にできます。
パフォーマンス関連の設定
バックグラウンドジョブの設定
- 設定>基本設定>バックグラウンドジョブから、[Cron]を選択します。
- SSHやコンソールから、一定周期でcron.phpを呼び出す設定をします。
12# crontab -u www-data -e*/15 * * * * php -f /var/www/nextcloud/cron.php
PHP OPcacheの設定
php.iniを編集して、OPcacheの設定をします。
- php.iniを開きます。
1sudo nano /etc/php/7.0/apache2/php.ini - [opcache]セクションで、以下の設定を有効にします。コメントアウトされている設定はコメントアウトを外し、設定値の異なるものは値を編集します。
1234567opcache.enable=1opcache.enable_cli=1opcache.memory_consumption=128opcache.interned_strings_buffer=8opcache.max_accelerated_files=10000opcache.revalidate_freq=1opcache.save_comments=1
参考:
まずは今やり始めたことをインストールの手順から書いてみましたが、次回はさらに詳細編を書きたいと思います。
面白そうだけれどインストールは難しそうという方には
OSにNextCloudやその他の必要な設定をすべて組込済のNextCloudPiも公開されています。ダウンロードしてSDカードに書き込み、RasPiを起動するだけであとはWebブラウザーから設定が可能です。
ダウンロードはこちらから可能です。