# 自宅サーバー構築!  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.occ nextcloud 設定
    変更内容は/var/snap/nextcloud/current/nextcloud/config/config.phpに反映
  • nextcloud.mysql-client nextcloud mysql のクライアント
  • nextcloud.mysqldump mysqldump
  • nextcloud.enable-https
  • nextcloud.disable-https
  • nextcloud.manual-install
  • nextcloud.export
  • nextcloud.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 の場合うまくいきません。とりあえずこれで稼働問題ないので、また時間があったら対応します。

2022-11-11
  • server

関連記事

積水ハウス 個人情報流出 SQL インジェクション攻撃か
ZeroSSL で無料 SSL できるけど Let's Encrypt と比較
ジェネレーティブ AI と大規模言語モデル(LLM)を学ぶためのリソース
XZ Utils 事件対応
Ubuntu で Web サーバーを構築する手順
メールサーバー移行と POP & IMAP 設定
Docker Supervisor 使ってバッチ処理
よく使う WSL コマンド
no such file or directory: /usr/share/zsh/vendor-completions/_docker
oh my zsh 使うべし
AWS CloudWatch ログ監視で Lambda 処理
AWS SES メール開封確認  DB に集計
Vim 操作とショートカット
DDNS 無料ダイナミック DNS サービス 4 つ
Nginx 基本設定
SPF メール送信なりすまし対策
Windows Mac Linux hosts ファイル場所
AWS Unresolved resource dependencies [AWSEBV2LoadBalancer] エラー
ディスク容量を確認する df コマンド
Laravel Address already in use の原因
content-security-policy 設定
AWS Elastic Beanstalk php.ini 設定変更
AWS Elastic Beanstalk 環境設定
AWS のタイムゾーンを UTC 協定世界時から JST 日本標準時に変更
Docker の基本的な使い方
Amazon DynamoDB 制限調査
AWS 504 Gateway Timeout エラー対応
Shell と Bash のいろいろ
Mac ターミナル SSH 接続設定
Elastic Beanstalk \$\SERVER['REMOTEADDR'] 取得できない
crontab 設定いろいろ
AWS EC2 の amazon-linux-extras の話
デプロイツール Capistrano
解決! xserver php バージョンアップした時に ssh 環境に反映されない
youtube 見れるように vpn サーバー建ててみた
xserver に vim インストール
xserver に nodejs インストール
レンタルサーバーなら xserver おすすめ理由
Docker command でドッカー練習する時のメモ
Windows10 Home に Docker 入れた時のメモ
Centos7 Webserver 構築の時のメモ