# 自宅サーバー構築! Nextcloud で NAS クラウドストレージ
10年くらい落ちの 2 コア4 GB メモリの DELL Inspiron 530 使って自宅 NAS 兼クラウドストレージを構築します。
# Why 自宅サーバー構築するか?
GooglePhoto 使って写真データ保存していましたが、無償が終わったため、データ保存をローカル PC に保存するようにしています。GooglePhoto がいっぱいになったため、同じアカウントの GoogleDrive や Gmail が使えなくなってしまって、そろそろデータ移行しないといけません。
移行先の選択肢として
- ローカル PC
- 外付けハードディスク
- 既製品 NAS
の3択と当初考えていました。
ローカル PC なら数年に一回買い替えがあるので、その時に溜まったデータ移行するのは手間がかかります。そして、PC 容量は大体 1TB 程度で、大容量データ保存に向きません。
外付けハードディスクも悪くないですが、家以外からのアクセスはできないデメリットがあります。
既製品の NAS が Amazon で 3 万円程度で買えます。大容量でたくさんのデータを保存できるかつ QuickConnect 機能使って家でなくても外部からアクセスできます。要件の大容量、外からアクセスに満たせていますが、どうせ仕事でサーバー構築しているなら、やってしまえという考えで既製品 NAS レベルの自作 NAS に挑戦します。
# 要件
- 大容量で増設に対応できる
- 自動ダウンロード機能付き
- Chromecast できる
- 外出先からアクセスできる
環境
ハードウェア
DELL Inspiron 530s
| CPU 種類 | Core 2 Duo E6550 |
| CPU 周波数 | 2.33GHz |
| コア数 | 2 コア |
| 二次キャッシュ容量 | 4MB |
| メモリ容量 | 4GB |
| メモリ種類 | DDR2 |
2008 年に発売されたモデルで今でも WEB サーフィンなら問題なく動きます。重たい作業はさすがに難しいけど、WEB サーバーとしては全く問題ないレベルです。
OS&ソフトウェア
- Ubuntu 22.x
- Nextcloud 24.x
- Apache 2.x
- PHP 8.x
# Nextcloud Install
snap 使うなら簡単にインストールできます。
apt update
snap install nextcloud
snap とはパッケージ管理システム
Snap パッケージ(Snappy)は、Canonical が主に開発を支援しているパッケージ管理システムで、Ubuntu など多くの Linux ディストリビューションで使用されている。これまでのパッケージ管理システムが Linux ディストリビューションに強く依存しているのと比べ、Snap パッケージは Linux ディストリビューションに依存しない、パッケージのアップデートを自動的に行ってくれるという特徴がある。
ブラウザ開いてローカルサーバーの IP 入力してアクセス http://192.168.1.7
# システムモニタリングインストール
sudo snap connect nextcloud:network-observe
# Nextcloud config
パス /var/snap/nextcloud/current/nextcloud/config/config.php
Nextcloud のログパスなどの情報確認できます。
<?php
$CONFIG = array (
'apps_paths' =>
array (
0 =>
array (
'path' => '/snap/nextcloud/current/htdocs/apps',
'url' => '/apps',
'writable' => false,
),
1 =>
array (
'path' => '/var/snap/nextcloud/current/nextcloud/extra-apps',
'url' => '/extra-apps',
'writable' => true,
),
),
'supportedDatabases' =>
array (
0 => 'mysql',
),
'memcache.locking' => '\\OC\\Memcache\\Redis',
'memcache.local' => '\\OC\\Memcache\\Redis',
'redis' =>
array (
'host' => '/tmp/sockets/redis.sock',
'port' => 0,
),
'log_type' => 'file',
'logfile' => '/var/snap/nextcloud/current/logs/nextcloud.log',
'logfilemode' => 416,
'instanceid' => 'oc4rcdx66hur',
'passwordsalt' => 'sej+1m6MRErjzIY5SRXXXXXXY5+',
'secret' => 'Oynfpc9Gvs5moC2g3z4k18XXXXXXXXXndnWoQdOHP/0vQWwUeU',
'trusted_domains' =>
array (
0 => '192.168.1.7',
),
'datadirectory' => '/var/snap/nextcloud/common/nextcloud/data',
'dbtype' => 'mysql',
'version' => '24.0.6.1',
'overwrite.cli.url' => 'http://192.168.1.7',
'dbname' => 'nextcloud',
'dbhost' => 'localhost:/tmp/sockets/mysql.sock',
'dbport' => '',
'dbtableprefix' => 'oc_',
'mysql.utf8mb4' => true,
'dbuser' => 'nextcloud',
'dbpassword' => 'Zv2E9jCIhoYM27kKLq1PpzEGGo1bPkpY_xJnLSKvuaMTl7vQ36usDHp6V-eVD8c5',
'installed' => true,
);
# snaq set nextcloud コマンドで設定
snaq set 使って nextcloud 設定変更できます。
# httpのデフォルトport変更
sudo snap set nextcloud ports.http=80
# httpsのデフォルトport変更
sudo snap set nextcloud ports.https=443
# http https port 一括変更
sudo snap set nextcloud ports.http=80 ports.https=443
# host設定
sudo nextcloud.occ config:system:set overwritehost --value="example.com:80"
# php memory limit 2GB
sudo snap set nextcloud php.memory-limit=2048M
# php memory 制限なしにする
sudo snap set nextcloud php.memory-limit=-1
# Cron実行時間制限 10分
sudo snap set nextcloud nextcloud.cron-interval=10m
# Cron実行時間制限なし
sudo snap set nextcloud nextcloud.cron-interval=-1
# HTTP 圧縮無効化
sudo snap set nextcloud http.compression=false
# Debugモード
sudo snap set nextcloud mode=debug
# Letsencrypt SSL認証
sudo nextcloud.enable-https lets-encrypt
現在の Nextcloud 設定確認
sudo snap get -d nextcloud
# {
# "http": {
# "compression": false
# },
# "mode": "production",
# "nextcloud": {
# "cron-interval": "5m"
# },
# "php": {
# "memory-limit": -1
# },
# "ports": {
# "http": 80,
# "https": 443
# },
# "private": {
# "http": {
# "compression": false
# },
# "mode": "production",
# "nextcloud": {
# "cron-interval": "5m"
# },
# "php": {
# "memory-limit": -1
# },
# "ports": {
# "http": 80,
# "https": 443
# },
# "snap": {
# "version": "24.0.6snap1"
# }
# }
# }
# パッケージ内で使えるユーティリティ
nextcloud.occnextcloud 設定
変更内容は/var/snap/nextcloud/current/nextcloud/config/config.phpに反映nextcloud.mysql-clientnextcloud mysql のクライアントnextcloud.mysqldumpmysqldumpnextcloud.enable-httpsnextcloud.disable-httpsnextcloud.manual-installnextcloud.exportnextcloud.import
# Nextcloud データとログのデフォルト保存場所
$SNAP_DATA /var/snap/nextcloud/current/
- Logs (Apache, PHP, MySQL, Redis, and Nextcloud logs)
- Keys and certificates
- MySQL database
- Redis database
- Nextcloud config
- Any Nextcloud apps installed by the user
$SNAP_COMMON /var/snap/nextcloud/common/
- Nextcloud data
参考 nextcloud-snap/nextcloud-snap (opens new window)
# snap Nextcloud バージョン自動更新の注意点
バージョンによってディレクトリ内容が書き換えられることがあるので、要注意です。
| ディレクトリ名 | 内容 | 書き換わるか |
|---|---|---|
/snap/nextcloud/ | 本体 config 各種ユーティリティ | 書き換わる |
/var/snap/nextcloud/current/ | データや設定ファイルやログファイル | 維持される |
/var/snap/nextcloud/common/ | ユーザーファイル アプリ テーマ プレビュー サムネールファイル | 書き換わらない |
Apache を再起動
# Snap パッケージの特徴
- パッケージひとつひとつに高い独立性
- パッケージごとにバージョンを差し戻せる
- Linux ディストリビューションに依存しない
- ライブラリの依存関係管理できる
- メタデータのアップデートもパッケージのアップデートも自動的に行う
- 複数の Linux ディストリビューションに対応
Snap CentOS Ubuntu の install remove search コマンド比較
| Snap | CentOS | Ubuntu |
|---|---|---|
| snap install {packagename} | yum install {packagename} | apt install {packagename} |
| snap remove {packagename} | yum remove {packagename} | apt remove {packagename} |
| snap find {packagename} | yum search {packagename} | apt search {packagename} |
パッケージのインストールと削除は Linux ディストリビューション間で大きな違いがありませんが、Snap の特徴として update は自動で行うことが便利になります。
# Nextcloud index.php を削除
Nginx ならnextcloud.occ maintenance:update:htaccessで変更できるそうですが、Apache ならパーミッションエラーでうまく index.php 消せません。
nextcloud config/config.phpに下記追加
'htaccess.RewriteBase' => '/',
'htaccess.IgnoreFrontController' => true,
コマンド実行時にエラー発生
nextcloud.occ maintenance:update:htaccess
# Error updating .htaccess file, not enough permissions or "overwrite.cli.url" set to an invalid URL?
Apache の場合うまくいきません。とりあえずこれで稼働問題ないので、また時間があったら対応します。