X

Windows Server Essentialsエクスペリエンスが無くなるのに備え、OSSの「NextCloud」でリモートWebアクセスの代替を考える

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」を利用して、以下を実現することを目指します。

  1. オンプレミスにNextCloud環境を構築し、外出先からPC/スマホ/タブレットでアクセスできるプライベートクラウドを作成する
  2. NextCloudから、Windows Server Essentials(2019含む)に作成した共有フォルダーにアクセス可能にする
  3. Windows Server Essentials(2019含む)のActive Directoryに作成したユーザーアカウントで、NextCloudへのログインを可能にする
  4. NextCloudの豊富なアプリを活用して、多要素認証などWindows Server Essentialsでは難しかったことを手軽に実現する

Windows Server 2016 EssentialsまでのWindows Server Essentialsエクスペリエンスの稼働するサーバーでも、Essentialsエクスぺリンスで利用するポート(TCP 80/443)との競合を回避するなど、一部解決すべき課題がありますが、ここで紹介することは実現可能です。

NextCloudのインストール手順

今回、NextCloudはRasberry Pi上に作成します。本当は、Docker for Windowsで利用したいので、Windowsサーバー上に構成する形態も別途試してみたいと思います。

あらかじめRaspbianのインストールは済んでいる状態から進めます。

  1. rootに切り替えます
    sudo su
  2. アップデートを実施します
    apt-get -y update
    apt-get -y upgrade
  3. 必要なパッケージをインストールします。
    今回は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
  4. 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
  5. データベースを作成します。
    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
  6. 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
  7. http://IPアドレス/nextcloud にアクセスします。
    NextCloudの管理者アカウントを新規作成し、5で作成したデータベースのユーザー名、パスワードを指定して[セットアップを完了します]を押下します。今回の構成では、データは別途存在するWindows Serverの共有フォルダーに保存する想定のためデフォルトのままとしますが、外付HDD等を利用する場合はHDDのマウントポイントに変更します。

    セットアップにはしばらく時間がかかります。

    後述するActive DirectoryとのLDAP連携を利用する場合、管理者アカウントはAD上のユーザーと重複しないよう留意します。

  8. インストールが完了すると、ログイン画面が表示されますので、8で作成した管理者のアカウントでログインします。
    ログインすると、下の画面が表示されます。

Server Essentials上のActive Directoryでの認証を設定する

Windows Server 2019 Essentialsでも、Active Directoryは必須となります。せっかくですのでユーザー管理はActive Directoryで一元管理させることとし、NextCloud上でLDAP認証をさせたいと思います。

  1. NextCloudの画面で、右上の歯車アイコンから、アプリを押下します。

    [LDAP user and group backend]を有効にします。パスワードの入力が求められますので、ログインしている管理者のパスワードを入力します。
    また、後で利用しますので[External Storage support]も有効にしておきます。

  2.  [LDAP user and group backend]がインストールされたら、右上の歯車アイコンを押下し、[設定]を押下します。
  3. [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]と表示されたら[続ける]を押下します。

  4. [ユーザー]タブに遷移します。オブジェクトクラスは[person]、これらのグループのみで[Domain Users]を選択し、[設定を検証し、ユーザーを数える]を押下します。正しくユーザー数が表示されればOKです。[続ける]を押下します。

    ここでは[Domain Users]グループに権限を与えましたが、あらかじめNextCloudにアクセスを許可するグループを別に作成したり、Windows Server 2016 Essentialsまでのサーバーの場合、[WseRemoteaccessUsers]グループを指定すると、リモートWebアクセスにアクセスできるようダッシュボードから指定したユーザーにのみアクセスを許可することができます。

  5. [ログイン属性]タブに遷移します。左下の入力欄にドメインユーザーのユーザー名を入力して[設定のチェック]を押下します。画面上部に[ユーザーが見つかり、設定が検証できました。]と表示されればOKです。[続ける]を押下します。
    [その他の属性]で、sAMAccountNameを選択します。

  6. [エキスパート設定]を開き、[内部ユーザー名属性]にも[sAMAccountName]を指定します。

    右上の[ユーザー]を押下すると、Active Directoryから連携したユーザーの一覧が表示されます。ADから連動したユーザーに管理者権限を付与する場合は、[ユーザー]からadmin権限を付与しておきます。

    ADとの連携の設定を間違って、不要なユーザーが登録された場合は、[エキスパート設定]タブの下にある[ユーザー名とLDAPユーザーのマッピングをクリアする]を押下すると最新の情報で連動しなおすことができます。

    以上で、Windows ServerのActive Directory上に存在するユーザーアカウントでNextCloudにログインできるようになります。

初回のユーザーログオン時には、やや時間がかかりますので注意して下さい。

NextCloudから、Windows Server上の共有フォルダーへのアクセス

NextCloudからCIFSを経由してWindows Server上の共有フォルダーにアクセスできるようにします。

  1. 設定>外部ストレージを開き、[ストレージを追加]から[SMB/CIFS]を選択します。正しく設定できれば、下の図のように緑の✔マークがつきます。
  2. NextCloudから、Windows Server上の共有フォルダーにアクセスするための情報を入力します。
    フォルダー名 任意で名前を付けます
    認証 LDAPを使ってログインしているActive Directoryのユーザーアカウントで認証する場合、[ログイン認証情報はセッションに保存されます]を選択します。

    実際に使ってみたところ、セッション情報を利用したSMB/CIFSのアクセスはパフォーマンスの問題を引き起こすことが多そうなため、ユーザー情報を入力し、アクセスできるユーザーは[利用可能]欄で個別に設定するのがよさそうです。

    ホスト Windows Serverのコンピューター名またはIPアドレスを入力します
    共有 Windows Server上の共有フォルダーの名称を入力します。
  3. 登録したフォルダーは、NextCloudからアクセスできるようになります。

  4. あとは、DDNSを使って外部からアクセスできるようにし、SSLの設定などを行えば、外部からオンプレミスのWindows Server上の共有フォルダーにアクセスできるフロントエンドの完成です。
  5. Windows PC、iOSやAndroid向けアプリもあります。アプリからはNextCloud上のフォルダーと同期させることもできますので、スマホで撮影した写真を自動的に自宅のストレージに同期させるといったことも簡単にできます。

パフォーマンス関連の設定

バックグラウンドジョブの設定

  1. 設定>基本設定>バックグラウンドジョブから、[Cron]を選択します。

  2. SSHやコンソールから、一定周期でcron.phpを呼び出す設定をします。
    # crontab -u www-data -e
    */15  *  *  *  * php -f /var/www/nextcloud/cron.php

Memory Cachingの設定

あらかじめ、php-apcuをインストールしていますので、config.phpに設定を行います。

  1. NextCloudのconfig.phpファイルを開きます。
    sudo nano /var/www/NextCloud/config/config.php
  2. 以下の一行を加えます。
    'memcache.local' => '\OC\Memcache\APCu',
  3. 保存して、apacheを再起動します。

PHP OPcacheの設定

php.iniを編集して、OPcacheの設定をします。

  1. php.iniを開きます。
    sudo nano /etc/php/7.0/apache2/php.ini
  2. [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

参考:

Server tuning — Nextcloud 14 Administration Manual 14 documentation

まずは今やり始めたことをインストールの手順から書いてみましたが、次回はさらに詳細編を書きたいと思います。

面白そうだけれどインストールは難しそうという方には

OSにNextCloudやその他の必要な設定をすべて組込済のNextCloudPiも公開されています。ダウンロードしてSDカードに書き込み、RasPiを起動するだけであとはWebブラウザーから設定が可能です。

ダウンロードはこちらから可能です。

こちらも参考に

ださっち: