「NextCloud ちょっと本気環境 1」で環境設計をし、
「NextCloud ちょっと本気環境 2」で MySQLサーバーを作りました。
ここでは NextCloudをインストールする、いわゆるアプリケーションサーバーを作ります。
構成図ではここです。
それではスタートです。
1.OSインストール
VMware Workstation PlayerのゲストOSとして、Ubuntu Server 22.04.2 を1つ作ります。
インストールについては、以下に書いている通りに作りました。
「Ubuntu Linux Serverをインストール」
「Ubuntu Serverの初期設定」
私の家のLANに作りますので IPアドレスは以下にし、他のネットワーク設定は上のページに書いてあるものに準じています。
マシン名: nextcloud
IP: 192.168.1.109
2.IPv6無効化
IPv4での運用にしたいと思います。
「Ubuntu 22.04の IPv6無効化」に書いておりますので、それに従ってやっておきました。
3.マシン名解決
我が家には家庭内LAN用の DNSがありませんので、[/etc/hosts]ファイルでマシン名解決(マシン名からIPアドレスに変換)をしています。
[nextcloud]サーバーは、[nginx]サーバー・[mysql]サーバーと通信しますので、IPv4の記載部分を以下のように変更しています。
[/etc/hosts]
127.0.0.1 localhost
192.168.1.109 nextcloud ← IPアドレス変更
192.168.1.108 nginx ← この行を追加
192.168.1.110 mysql ← この行を追加
4.NFSクライアント設定
[mysql]サーバーが NFSで提供してくれるディスク領域を使うため、NFSクライアントのパッケージをインストールします。
subro@nextcloud:~$ sudo apt install -y nfs-common
〜〜〜 省略 〜〜〜
インストールできました。
マウントポイント [/files]ディレクトリを作ります。
subro@nextcloud:~$ sudo mkdir /files
できました。
OS起動時にマウントするよう [/etc/fstab]ファイルを以下のように変更します。
[/etc/fstab]
mysql:/ /files nfs4 auto,nofail,noatime,nolock,intr,tcp,actimeo=1800,port=60002 0 0 ← 追記
書き換えたら、一度再起動してみます。
subro@nextcloud:~$ sudo reboot
再起動した後に確認した結果がこちら。
subro@nextcloud:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 398320 1476 396844 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 18631360 8570988 9088596 49% /
tmpfs 1991584 0 1991584 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
/dev/sda2 1790136 132860 1548016 8% /boot
mysql:/ 5066752 0 4788736 0% /files
tmpfs 398316 4 398312 1% /run/user/1000
NFSマウントできています。
[/files]ディレクトリに NextCloudがファイルを書き込めるよう ディレクトリのオーナー・グループ・パーミッションを OSの[www-data」ユーザー・[www-data]グループのものに変えておきます。
subro@nextclooud:~$ sudo chown www-data:www-data /files
セキュリティのため、[www-data」ユーザー・[www-data]グループ以外にはファイルを読ませないように、ディレクトリパーミッションを [770]にします。
subro@nextclooud:~$ sudo chmod 770 /files
設定できました。
結果こうなりました。
subro@nextclooud:~$ sudo ls -la /files
合計 44
drwxrwx--- 6 www-data www-data 4096 4月 25 17:07 .
drwxr-xr-x 20 root root 4096 4月 25 11:04 ..
drwx------ 2 root root 16384 4月 24 15:11 lost+found
5.Apache2(WEBサーバー)・PHPのパッケージをインストール
インストールマニュアル Example installation on Ubuntu 22.04 LTS に沿って進めます。
マニュアルに載ってるパッケージから MySQLサーバーを抜いた残りの作業をします。
subro@nextcloud:~$ sudo apt install apache2 libapache2-mod-php php-gd php-mysql \
php-curl php-mbstring php-intl php-gmp php-bcmath php-xml php-imagick php-zip
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
apache2-bin apache2-data apache2-utils bzip2 fontconfig-config fonts-dejavu-core fonts-droid-fallback fonts-noto-mono fonts-urw-base35 ghostscript gsfonts imagemagick-6-common libaom3
libapache2-mod-php8.1 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libavahi-client3 libavahi-common-data libavahi-common3 libcups2 libdav1d5 libde265-0 libdeflate0
libfftw3-double3 libfontconfig1 libgd3 libgomp1 libgs9 libgs9-common libheif1 libidn12 libijs-0.35 libjbig0 libjbig2dec0 libjpeg-turbo8 libjpeg8 liblcms2-2 liblqr-1-0 libltdl7 liblua5.3-0
libmagickcore-6.q16-6 libmagickwand-6.q16-6 libonig5 libopenjp2-7 libpaper-utils libpaper1 libtiff5 libwebp7 libwebpdemux2 libwebpmux3 libx265-199 libxpm4 libzip4 mailcap mime-support
php-common php8.1-bcmath php8.1-cli php8.1-common php8.1-curl php8.1-gd php8.1-gmp php8.1-imagick php8.1-intl php8.1-mbstring php8.1-mysql php8.1-opcache php8.1-readline php8.1-xml php8.1-zip
poppler-data ssl-cert
提案パッケージ:
apache2-doc apache2-suexec-pristine | apache2-suexec-custom www-browser bzip2-doc fonts-noto fonts-freefont-otf | fonts-freefont-ttf fonts-texgyre ghostscript-x php-pear cups-common
libfftw3-bin libfftw3-dev libgd-tools liblcms2-utils libmagickcore-6.q16-6-extra poppler-utils fonts-japanese-mincho | fonts-ipafont-mincho fonts-japanese-gothic | fonts-ipafont-gothic
fonts-arphic-ukai fonts-arphic-uming fonts-nanum
推奨パッケージ:
ttf-dejavu-core
以下のパッケージが新たにインストールされます:
apache2 apache2-bin apache2-data apache2-utils bzip2 fontconfig-config fonts-dejavu-core fonts-droid-fallback fonts-noto-mono fonts-urw-base35 ghostscript gsfonts imagemagick-6-common libaom3
libapache2-mod-php libapache2-mod-php8.1 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libavahi-client3 libavahi-common-data libavahi-common3 libcups2 libdav1d5 libde265-0
libdeflate0 libfftw3-double3 libfontconfig1 libgd3 libgomp1 libgs9 libgs9-common libheif1 libidn12 libijs-0.35 libjbig0 libjbig2dec0 libjpeg-turbo8 libjpeg8 liblcms2-2 liblqr-1-0 libltdl7
liblua5.3-0 libmagickcore-6.q16-6 libmagickwand-6.q16-6 libonig5 libopenjp2-7 libpaper-utils libpaper1 libtiff5 libwebp7 libwebpdemux2 libwebpmux3 libx265-199 libxpm4 libzip4 mailcap
mime-support php-bcmath php-common php-curl php-gd php-gmp php-imagick php-intl php-mbstring php-mysql php-xml php-zip php8.1-bcmath php8.1-cli php8.1-common php8.1-curl php8.1-gd php8.1-gmp
php8.1-imagick php8.1-intl php8.1-mbstring php8.1-mysql php8.1-opcache php8.1-readline php8.1-xml php8.1-zip poppler-data ssl-cert
アップグレード: 0 個、新規インストール: 86 個、削除: 0 個、保留: 3 個。
38.1 MB のアーカイブを取得する必要があります。
この操作後に追加で 146 MB のディスク容量が消費されます。
続行しますか? [Y/n] Y
取得:1 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libapr1 amd64 1.7.0-8ubuntu0.22.04.1 [108 kB]
取得:2 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libaprutil1 amd64 1.6.1-5ubuntu4.22.04.1 [92.6 kB]
〜〜〜 途中省略 〜〜〜
No VM guests are running outdated hypervisor (qemu) binaries on this host.
インストールできました。
6.NextCloudのプログラム部分のインストール
インストールマニュアルには Nextcloud Download Page でダウンロードしてこいとありますので、ダウンロードページに行きます。
マニュアルには Download Nextcloud Server → Download → Archive file for server owners と辿れと書いてあるんですが、2023年4月22日時点でダウンロードページを見るに、
DOWNLOAD SERVER → COMMUNITY PROJECTS → Archive
だと思います。
Get ZIP Fileを押すとダウンロードが始まります。
ボタンを押すとダウンロードが始まるんですが、[nextcloud]には Firefox等の WEBブラウザがありませんので、curlコマンドでダウンロードします。
subro@nextcloud:~$ curl -O https://download.nextcloud.com/server/releases/latest.zip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 176M 100 176M 0 0 3390k 0 0:00:53 0:00:53 --:--:-- 3426k
subro@nextcloud:~$ ls -l latest.zip
-rw-rw-r-- 1 subro subro 184987285 4月 26 07:25 latest.zip
[latest.zip]というファイルがダウンロードされました。
ダウンロードページの手順にある通り、正当なファイルであることを確認します。
どの方法を使うかは好みですが SHA256を使ってみますので、赤枠のリンクが対象です。
サーバーで curlコマンドで直接取ることにします。
subro@nextcloud:~$ curl -O https://download.nextcloud.com/server/releases/latest.zip.sha256
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 77 100 77 0 0 72 0 0:00:01 0:00:01 --:--:-- 72
subro@nextcloud:~$ ls -l latest*
-rw-rw-r-- 1 subro subro 184987285 4月 26 07:25 latest.zip
-rw-rw-r-- 1 subro subro 77 4月 26 07:26 latest.zip.sha256
必要なファイルが揃いましたので、ファイルを検証します。
subro@nextcloud:~$ sha256sum -c latest.zip.sha256 < latest.zip
latest.zip: OK
検証は OKでした。
unzipをインストールして、[latest.zip]ファイルを解凍します。
subro@nextclooud:~$ sudo apt -y install unzip
〜〜〜 以下略 〜〜〜
subro@mysql:~$ unzip latest.zip
〜〜〜 途中略 〜〜〜
extracting: nextcloud/config/CAN_INSTALL
inflating: nextcloud/config/config.sample.php
inflating: nextcloud/config/.htaccess
解凍できました。
できあがったディレクトリをコピーします。
移動でも良いと思いますけど、コピーするのは何故だろう。
subro@nextclooud:~$ sudo cp -r nextcloud /var/www/
subro@nextclooud:~$ ls -la /var/www
合計 16
drwxr-xr-x 4 root root 4096 4月 26 07:28 .
drwxr-xr-x 14 root root 4096 4月 22 10:09 ..
drwxr-xr-x 2 root root 4096 4月 26 07:20 html
drwxr-xr-x 14 root root 4096 4月 26 07:28 nextcloud
[/var/www/nextcloud]ディレクトリができます。
[/var/www/nextcloud] ディレクトリ以下を全て [www-data] ユーザー・ [www-data] グループに変更します。
subro@nextclooud:~$ sudo chown -R www-data:www-data /var/www/nextcloud
subro@nextcloud:~$ ls -l /var/www
合計 8
drwxr-xr-x 2 root root 4096 4月 26 07:20 html
drwxr-xr-x 14 www-data www-data 4096 4月 26 07:28 nextcloud
変更できました。
7.Apache2の設定
Next Steps という段落に書いてある通り、Apacheの設定に移ります。
こちらの段落です。
Apache Web server configuration
Apacheの設定ファイルとして、NextCloud用の [/etc/apache2/sites-available/nextcloud.conf]ファイルを以下の内容で作成します。
Alias /nextcloud "/var/www/nextcloud/"
<Directory /var/www/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
<IfModule mod_dav.c>
Dav off
</IfModule>
</Directory>
ファイルができました。
ファイルのオーナー・グループ・パーミッションは既存の他ファイルと同じなので良いようです。
subro@nextclooud:~$ ls -l /etc/apache2/sites-available
total 16
-rw-r--r-- 1 root root 1332 Sep 8 2022 000-default.conf
-rw-r--r-- 1 root root 6338 Sep 30 2022 default-ssl.conf
-rw-r--r-- 1 root root 214 Apr 26 07:38 nextcloud.conf
設定を有効にします。
subro@nextclooud:~$ sudo a2ensite nextcloud.conf
Enabling site nextcloud.
To activate the new configuration, you need to run:
systemctl reload apache2
設定が有効になって、Apacheの再起動を促されますが、次の作業の後にします。
マニュアルには Apacheへのモジュール追加設定がありました。
必須と推奨がありましたので、全部やっておきます。
subro@nextclooud:~$ sudo a2enmod rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
systemctl restart apache2
subro@nextcloud:~$ sudo a2enmod headers
Enabling module headers.
To activate the new configuration, you need to run:
systemctl restart apache2
subro@nextcloud:~$ sudo a2enmod env
Module env already enabled
subro@nextcloud:~$ sudo a2enmod dir
Module dir already enabled
subro@nextcloud:~$ sudo a2enmod mime
Module mime already enabled
設定しました。
いくつかは既に有効になっていたようです。
Apacheの 80/tcpは知られてしまっているので変更します。
[/etc/apache2/port.conf]ファイルを以下の通り変更します。
[/etc/apache2/port.conf]
Listen 80
↓
Listen 60004
変更したら、Apacheを再起動します。
subro@nextclooud:~$ sudo service apache2 restart
8.sshd ポート変更
[22/tcp]から変えてしまいます。
[/etc/ssh/sshd_config]ファイルを以下の通り変更します。
[/etc/ssh/sshd_config]
#Port 22
↓
Port 60003 ← コメントアウト(#)を消して番号を変更します 60003は適当です
設定の反映を確認するため再起動しました。
subro@mysql:~$ sudo reboot
なお、ポート番号を変更された sshサーバーには [-p]オプションを使ってログインします。
subro@Lubuntu2204:~$ ssh subro@nextcloud -p 60003
リブート後の待受ポート状態です。
subro@mysql:~$ ss -atl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 0.0.0.0:sunrpc 0.0.0.0:*
LISTEN 0 4096 127.0.0.53%lo:domain 0.0.0.0:*
LISTEN 0 128 0.0.0.0:60003 0.0.0.0:*
LISTEN 0 511 0.0.0.0:60004 0.0.0.0:*
良さげです。
9.NextCloud初期化
NextCloudに初回ログインすると初期化が行われます。
ここで作った環境では、[http://nextcloud:60004/nextcloud]に WEBブラウザでアクセスします。
初回ログイン画面では、管理者ユーザーを設定します。
管理者ユーザーは[subro]としています。
(これは NextCloudのユーザーで OSの[subro]ユーザーとは別物です)
パスワードも併せて登録します。
下の枠は NextCloudがアップロードされたデータファイルを格納する場所で、上で NFSマウントした [/files]ディレクトリになります。
こちらはデータベースへのアクセス情報の設定です。
「NextCloud ちょっと本気環境 1」で作った MySQLが対象になりますので、以下の設定になります。
パスワードは「Abcd1234#」ですね。
インストールを押すと、初期化が始まって暫くかかります。
初期化が終わると「http://nextcloud:60004/index.php/core/apps/recommended」にリダイレクトされましたが、File not found のエラーになってしまいました。
途中の作業で何か欠けているのかと思いましたが、よく分かりませんでした。
バグレポートにも上がってはいるようです。
改めて[http://nextcloud:60004/nextcloud]にアクセスしますとこちらの画面に。
NextCloudとしてちゃんと稼働しているようです。
10.ファイアウォール有効化
ufw(program for managing a netfilter firewall)で、Apache2へのアクセスを [nginx]サーバーからのみ可能になるよう締め付けます。
この手順は一部「Ubuntuでもファイアウォール」に書いていますので、良かったら見てやって下さい。
現在の状態を確認します。
subro@nextcloud:~$ sudo ufw status
状態: 非アクティブ
ファイアウォールのロギングを有効にします。
subro@nextcloud:~$ sudo ufw logging on
ログ取得を有効にしました
入ってくる方は全閉じの設定です。
デフォルトではこうなっているので、やらなくても良いです。
subro@nextcloud:~$ sudo ufw default deny
デフォルトの incoming ポリシーは 'deny' に変更しました
(適用したい内容に基づいて必ずルールを更新してください)
先に sshdの [60003/tcp] を作業用の PCがあるネットワークにだけ許可しておきます。
この実験環境で [192.168.1.0/24]に許可してしまうと、他のサーバーからでも sshでアクセスできてしまいます。
自分の環境に適宜置き換えて下さい。
subro@nextcloud:~$ sudo ufw allow from 192.168.1.0/24 to any port 60003 proto tcp
ルールをアップデートしました
Apache2の[60004/tcp]を [nginx]サーバーの IPのみに許可します。
subro@nextcloud:~$ sudo ufw allow from 192.168.1.108 to any port 60004 proto tcp
ルールをアップデートしました
セッティングが済みましたので、ファイアウォールを有効化します。
subro@nextcloud:~$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
ファイアウォールはアクティブかつシステムの起動時に有効化されます。
リブート後も有効になっているか確認するため、一旦リブートします。
subro@nextcloud:~$ sudo reboot
リブート後に改めてログインしました。
sshコマンドの [-p 60003]オプションを忘れずに。
状態確認です。
subro@nextcloud:~$ sudo ufw status numbered
状態: アクティブ
To Action From
-- ------ ----
[ 1] 60003/tcp ALLOW IN 192.168.1.0/24
[ 2] 60004/tcp ALLOW IN 192.168.1.108
良さげです。
せっかく NextCloudが動くようになったのに、[nginx]サーバーからしかアクセスできなくしてしまいました。
早く[nginx]サーバーを作りましょう。
「NextCloud ちょっと本気環境 4」に続きます。