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に切り替えます
sudo su
- アップデートを実施します
apt-get -y update apt-get -y upgrade
- 必要なパッケージをインストールします。
今回はwebサーバーにはApacheを利用します。apt 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の設定をします
nano /etc/apache2/sites-available/nextcloud.conf
nextcloud.confファイルに以下の設定を記載します。
Alias /nextcloud "/var/www/nextcloud/" <Directory /var/www/nextcloud/> Options +FollowSymlinks AllowOverride All <IfModule mod_dav.c> Dav off </IfModule> SetEnv HOME /var/www/nextcloud SetEnv HTTP_HOME /var/www/nextcloud </Directory>
モジュールを有効にします。SSLも有効にしておきます
a2ensite nextcloud.conf a2enmod rewrite a2enmod headers systemctl restart apache2
- データベースを作成します。
username,passwordは、NextCloudデータベースの管理者権限を持つことになるDBユーザーのユーザー名、パスワードを指定します。mysql -u root -p CREATE DATABASE IF NOT EXISTS NextCloud; GRANT ALL PRIVILEGES ON NextCloud.* TO 'username'@'localhost' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; quit
- NextCloudをインストールします
cd /var/www curl https://download.nextcloud.com/server/releases/nextcloud-14.0.1.tar.bz2 | sudo tar -jxv
時間がかかりますが、インストールが終了したら引き続きフォルダーを作成して権限を修正します。
cd /var/www/nextcloud mkdir -p ./data chown www-data:www-data ./data chmod 750 ./data chown www-data:www-data config apps chown -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を呼び出す設定をします。
# crontab -u www-data -e */15 * * * * php -f /var/www/nextcloud/cron.php
Memory Cachingの設定
あらかじめ、php-apcuをインストールしていますので、config.phpに設定を行います。
- NextCloudのconfig.phpファイルを開きます。
sudo nano /var/www/NextCloud/config/config.php
- 以下の一行を加えます。
'memcache.local' => '\OC\Memcache\APCu',
- 保存して、apacheを再起動します。
PHP OPcacheの設定
php.iniを編集して、OPcacheの設定をします。
- php.iniを開きます。
sudo nano /etc/php/7.0/apache2/php.ini
- [opcache]セクションで、以下の設定を有効にします。コメントアウトされている設定はコメントアウトを外し、設定値の異なるものは値を編集します。
opcache.enable=1 opcache.enable_cli=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.revalidate_freq=1 opcache.save_comments=1
参考:
まずは今やり始めたことをインストールの手順から書いてみましたが、次回はさらに詳細編を書きたいと思います。
面白そうだけれどインストールは難しそうという方には
OSにNextCloudやその他の必要な設定をすべて組込済のNextCloudPiも公開されています。ダウンロードしてSDカードに書き込み、RasPiを起動するだけであとはWebブラウザーから設定が可能です。
ダウンロードはこちらから可能です。