feketerigo

技術の話だったりオタク話だったり日常話だったりできたらいいなぁ

CentOS7にNextCloud15を立てる

この記事はmohikanz Advent Calendar 2018 21日目の記事です。
20日目 | 22日目 >

CentOS7にNextCloudを立てる

目的

ローカル内で完結できる共有ストレージが欲しかった。
NASサーバーを買うのも検討したがPCが1セット余ってるので使いまわしできないかなということで、NextCloudを検討。

但書

・普段はMS系のSIやっててLinuxとかとはほぼ無縁の人間です。
たぶんあまりよろしくないことしてると思うけど許して。
・いわゆるやってみた系の記事です悪しからず。
・忙しくてあんま触れる時間なくて仕事合間にやってたので雑。

とりあえずNextCloudを建てる

■環境の用意
どんなものかを見たいだけなので、Hyper-VにCentOS7が入ったVMを立てました。
クライアントとVMがうまく疎通できなくてここですでに疲れた

基本は公式のドキュメント見つつ立てます。わかんないとことはググって解決。

SSHVMにつなぐ。
Windows 10 Fall Creator UpdateからSSHクライアントが内蔵されるようになったのでそれでつなぎます。
PowerShell立ち上げてsshコマンド打つだけです。便利な世の中だ。

ssh feke@10.0.0.2

ここからはめんどうなのでsuでrootユーザーになって作業します。

・EPELリポジトリを追加
NginxとPHPをインストールするのに必要なので最初に追加します。

[root@localhost feke]# yum install -y epel-release

・nginxをインストール
Apacheでも良いみたいですが、折角なので触ったことないnginxを入れてみます。
ついでに自動起動設定もしておきます。

[root@localhost feke]# yum install nginx

#自動起動設定
[root@localhost feke]# systemctl enable nginx
#nginx起動
[root@localhost feke]# systemctl start nginx

PHPを入れる
nginxからphpが使えるようにPHP-FPMをインストールする
そのためにremiリポジトリが必要なので追加

#remiリポジトリ
[root@localhost feke]# rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm
#PHP-FPMをインストール
[root@localhost feke]# yum -y install yum-utils
[root@localhost feke]# yum-config-manager enable remi-php70
[root@localhost feke]# yum install --enablerepo=remi,remi-php70 php php-mysql php-pecl-zip php-xml php-mbstring php-gd php-fpm php-intl

PHPのConfigを弄る
vim使うマン。というかvimしか使い方が分からない(

[root@localhost feke]# vim /etc/php-fpm.d/www.conf

25行目辺りのuserとgroup[apache]から[nginx]に変更

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apache

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx

ディレクトリの所有権を変更

[root@localhost feke]# chown -R root:nginx /var/lib/php/session/

・設定反映のためPHP再起動

#再起動
[root@localhost feke]# systemctl restart php-fpm
#自動起動設定
[root@localhost feke]# systemctl enable php-fpm

MariaDBのインストール
SQLLiteでも良いみたいだけどパフォーマンスに不安があるのでちゃんとDBを用意します。

#リポジトリ
[root@localhost feke]# curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash
#インストール
[root@localhost feke]# yum install MariaDB-server MariaDB-client

MariaDB起動
自動起動も設定

#起動
[root@localhost feke]# systemctl start mariadb
#自動起動設定
[root@localhost feke]# systemctl enable mariadb

セットアップの実行

[root@localhost feke]# mysql_secure_installation

流れに沿って設定を行っていく。
基本全部[Y]でよさそう。

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

#初回なので何も入力しない
Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

#ルートパスワード設定
Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

#匿名ユーザーは削除
Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

#リモートでルートログインはダメ
Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

#テストデータベースは不要
Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

#設定の即時反映
Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

一応ログインできるかチェックしておく。

[root@localhost feke]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 17
Server version: 10.3.11-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

NextCloudで使うデータベースとユーザーを作成。
ここで作成したテーブルとユーザーは後で使うのでメモっておく。

#データベース作成
[root@localhost feke]# mysql -uroot -p -e "CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci"
#ユーザー作成
[root@localhost feke]# mysql -uroot -p -e "GRANT ALL on nextcloud.* to nextcloud@localhost identified by 'Password'"
#権限の変更をデータベースに反映
[root@localhost feke]# mysql -uroot -p -e "FLUSH privileges"

・nginxの設定ファイル作成

[root@localhost feke]# vim /etc/nginx/conf.d/nextcloud.conf

設定内容はこんな感じ。
検証目的なのでHTTPSをOffにしてるけど、普通はOnにすべきだと思う。

upstream php {
    server 127.0.0.1:9000;
    }

server {
    server_name 10.0.0.2;

    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;

    # Path to the root of your installation
    root /var/www/nextcloud/;

        location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location = /.well-known/carddav {
        return 301 $scheme://$host/remote.php/dav;
    }

    location = /.well-known/caldav {
        return 301 $scheme://$host/remote.php/dav;
    }

    # set max upload size
    client_max_body_size 512M;
    fastcgi_buffers 64 4K;

    # Enable gzip but do not remove ETag headers
    gzip on;
    gzip_vary on;
    gzip_comp_level 4;
    gzip_min_length 256;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
    gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

    location / {
        rewrite ^ /index.php$request_uri;
    }

    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
        deny all;
    }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
        deny all;
    }

    location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\.php(?:$|/) {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        #HTTPSはOff
        fastcgi_param HTTPS off;
        #Avoid sending the security headers twice
        fastcgi_param modHeadersAvailable true;
        fastcgi_param front_controller_active true;
        fastcgi_pass php;

        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }

    location ~ ^/(?:updater|ocs-provider)(?:$|/) {
        try_files $uri/ =404;
        index index.php;
    }

    # Adding the cache control header for js and css files
    # Make sure it is BELOW the PHP block
    location ~ \.(?:css|js|woff|svg|gif)$ {
        try_files $uri /index.php$request_uri;
        add_header Cache-Control "public, max-age=15778463";

        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;
        # Optional: Don’t log access to assets
        access_log off;
    }

    location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
        try_files $uri /index.php$request_uri;
        # Optional: Don’t log access to other assets
        access_log off;
    }
}

正しく設定できているかチェック

[root@localhost feke]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

サービス再起動

[root@localhost feke]# systemctl restart nginx

・NextCloud本体の準備
最初に調べてた頃バージョン14だったのにいつの間にか15になってた
せっかくなのでバージョン15を用意する

[root@localhost feke]# curl -O https://download.nextcloud.com/server/releases/nextcloud-15.0.0.zip

ダウンロードしたzipを/var/www/に解凍する。

[root@localhost feke]# unzip nextcloud-15.0.0.zip -d /var/www/

データディレクトリの作成

[root@localhost feke]# mkdir /var/www/nextcloud/data

nextcloudのディレクトリに権限付与

[root@localhost feke]# chown -R nginx: /var/www/nextcloud

 
これでNextCloudの利用準備完了。

ブラウザでアクセスしてみる。
この画面が出たらOK。
f:id:feketerigo725:20181220181301p:plain

管理者アカウントは任意のものを設定。
データフォルダーは
/var/www/nextcloud/data

データベースはMySQL/MariaDBを選択。
上のほうで作ったデータベースとユーザーを設定。

無事NextCloudが利用できるようになりました。
f:id:feketerigo725:20181220181319p:plain  
まだあまり使えてないのですが、ローカルフォルダと同期したりWebDAVも使えるし
プラグインでいろいろ拡張もできそうなので十分実用に耐えれそうな感じでよさそうでした。  
 

おまけ

NextCloud立てたもののなぜかアクセスできずこのあたり確認した。
・ポート開放の確認
いわゆる初歩ミス

[root@localhost feke]# firewall-cmd --info-zone public
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: ssh dhcpv6-client
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

HTTP(80番ポート)を開ける。

[root@localhost feke]# firewall-cmd --zone=public --add-service=http --permanent
[root@localhost feke]# firewall-cmd --reload

httpのポート開いてるの確認。

[root@localhost feke]# firewall-cmd --info-zone public
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: ssh dhcpv6-client http
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

 
 
SELinux
これが原因でずっとエラー画面が出てた。

[root@localhost feke]# vim /etc/selinux/config

SELinuxの無効化

SELINUX=enforcing

SELINUX=disabled

この2点設定したら無事アクセスできるようになりました。

PCスペック&デバイス (2018/06/25時点)

■PCスペック 

【CPU】
AMD - Ryzen 7 2700X

【CPUクーラー】
Cooler Master - MasterLiquid ML240L RGB

マザーボード
Asrock - Fatal1ty X470 Gaming K4

【メモリ】
G.SKILL - SniperX DDR4-3400 8GB x2

GPU
MSI - GeForce GTX1070Ti ARMOR 8G

【ケース】
Fractal Design - Define R4

【NVMe】
Samsung - 970 EVO 500GB

SSD
Crucial - MX200 250GB
Colorful - SL500 480GB

【HDD】
Western Digital - Blue 2TB
HGST - 1TB x2

■デバイス

【キーボード】
HyperX - Alloy FPS Pro

【マウス】
Logicool - G703 + POWERPLAY

【マウスパッド】
HyperX - FURY S Speed Edition

【ディスプレイ】
BenQ - ZOWIE XL2411

【ヘッドホン】
SteelSeries - Arctis7
AKG - K712 PRO

【イヤホン】
Shure - SE215 SpecialEditin

foltia ANIME LOCKERを導入した話

この記事はmohikanz Advent Calendar 2017 16日目の記事です。
15日目 | 17日目

◆mohikanzとは?

IT系技術情報収集用Slackチームから派生した雑談用Slackチャンネルです。
技術の話からガジェット、漫画、飯テロまで様々な雑談をして日々生産性を下げてます。 詳しくは1日目の記事をご覧くださいませ。

foltia ANIME LOCKERを導入した話

何を書こうかなーって考えてたらそういや先日録画鯖を組んだことを思い出したのでそれについて書こうかなと。

なんで録画鯖組もうと思ったかというと、メインマシンにチューナー積んでTVTestとか導入してアニメの録画してたのですが
・録画始まると思ったよりリソース喰う
・録画ソフトが古いからか安定せず割と落ちる
・そもそもメインマシンを録画鯖兼用にするのはどうなのか
などなどいろいろ問題があったため録画鯖組むことにしました。

◆ハードウェア構成

だいたいこんな感じで組みました

CPU:Core-i5 4570S
メモリ:4GB
ストレージ:SSD128GB、HDD:2TB
電源:玄人志向の120W ACアダプター電源
チューナー:PLEX PX-W3PE4
カードリーダー:NEC CK1506-02

ほぼ部屋に転がってるパーツで済んだんですが、LGA1150マザーがなかったので日本橋に探しに行ったらほぼ中古が見つからなくて苦戦した・・・
結局新品買うのが一番安かった。(新品がまだ普通に売ってることにびっくりしたけども)

ケース付属の電源動かしたらえらいうるさかったので玄人志向のAC電源に載せ替えたらとても静かになったので大変おすすめです。
www.kuroutoshikou.com

あと、ずっと自分の持ってるICカードリーダーNTTComのSCR3310だと思ってたんですがどうやらOEM元のNECのやつを持っていたらしい。
後々これが問題に・・・

◆録画ソフト選び

録画鯖組むにあたっておそらく一番大事そうなところ。

今回はfoltia ANIME LOCKERを導入することにしました。
foltia.com

ちなみにこの3つが候補に上がりました。
foltia ANIME LOCKER
・Chinachu
・epgrec UNA

どれもLinux入れて運用が前提で、Linuxあんまり触ったことない自分には割とハードル高いなぁと思いつつ・・・
とりあえず調べた感じLinux初心者でも簡単にインストールできそうなことと、ちょうどPLEX製のチューナーにも対応したというニュースを見かけたのでfoltia ANIME LOCKERを選びました。
まぁわかんなかったらググればどうにかなるでしょうなノリ。

foltia導入

マニュアルに書いてある通りにウィザード進めていけばインストールは完了します。とっても簡単Linuxの知識なくても全然どうにかなる。
個別に変えた設定は起動ディスクがSSDなので [起動ディスクをLVMに組み入れない] にチェック入れたくらい・・・?

細かい手順は公式のマニュアルかGIGAZINEに分かりやすい記事が最近出てたんでそれ見れば十分だと思います。 gigazine.net

B-CAS認識しない問題

管理画面もうまく見れることを確認したのでさあ録画テストしようとしてみるもののなぜかうまくいかず。普通に視聴するのもできず困惑

どうもログとか読んでるとB-CAS認識してなさそうということが判明。
pcsc_scan実行してしてみたら確かに認識してなさそうだった。
更に調べるとpcscdがチェックしてるカードリーダーのデバイスIDが登録されていないとうまくカードリーダーが機能しないのが原因の模様。

この記事を参考にデバイスの登録を実施。 irukano.blogspot.jp

まずはlsusbでデバイス情報を取得。
一番下のNECのやつがICカードリーダーぽいのでメモしておく。
IDの前半[0490]がベンダーID、後半の[018b]がプロダクトIDらしい。

#lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
・
・
Bus 003 Device 002: ID 0409:018b NEC Corp.

/usr/lib64/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist をエディタで開き
ベンダーIDとプロダクトID、デバイス名を登録

/usr/lib64/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist

<key>ifdVendorID</key>
    <array>
        <string>0x08E6</string>
        <string>0x08E6</string>
        ・
        ・
        <string>0xA625</string>
        <string>0x0409</string>  #ベンダーIDを追加
    </array>

<key>ifdProductID</key>
    <array>
        <string>0x2202</string>
        <string>0x3437</string>
        ・
        ・
        <string>0x0810</string>
        <string>0x018b</string>  #プロダクトIDを追加
    </array>

<key>ifdFriendlyName</key>
    <array>
        <string>Gemplus Gem e-Seal Pro</string>
        <string>Gemplus GemPC Twin</string>
        ・
        ・
        <string>Tianyu Smart Card Reader</string>
        <string>NEC CK1506-02</string>  #デバイス名を追加。ここは何でもOKぽい
</array>

再起動してpcsc_scan実行してみたら無事B-CASを認識してることを確認。
今回の導入で唯一ぶち当たった問題でした。

録画も視聴も問題なくできたので導入は終わり!
1日かからず導入できたのでほんと簡単でした。

◆使用感

かれこれ導入してから2か月くらいたってるので使用感も少しだけ。

・録画
アニメ録画に特化してるだけあってアニメの予約管理はすごい簡単でお手軽でたいへん重宝してます。
ただし、しょぼいカレンダーで放送予定を取得するため人力な以上どうしても抜けがある模様。(東京ならほぼ大丈夫そう。大阪はちょこちょこ抜けありました。)

抜け分とか通常番組はキーワード録画かEPGから録画する機能があるので十分かなと思います。
ただ一つだけ難点があって、番組の途中から録画する方法がないため思い付きで録画できないのが地味に困る。

あと、ラジオ録音機能が何気に強い。

・視聴
リアルタイム視聴に関しては一回トランスコード挟んでからになるので滅茶苦茶遅延出ます。
正直使えないのでトランスコード挟まず見れるようにしてほしい・・・

・機能面
MP4に自動変換超便利!
tsファイルたまりがちで容量めっちゃ喰ってること多かったんでほんと便利です。

◆終わりに

もともとどこかに書き起こすつもりがなかったのでスクショとか全く取っておらず、メモも適当に書いたのしか残ってなかったのでちゃんと残しとけばよかったなと今更後悔。

とりあえず、とても快適なアニメ録画ライフが送れるようになりましたっ! 有償ソフトなので若干値は張りますがその分払った価値はあったかなと思います。

samba設定とか導入後に調べて触ったところとかもあるのでその辺りも後日記事にできればいいなぁ

おしまい

ブログ始めた

 せっかくなのでいろいろ記録していければなぁと。

 

普段はSIerぽいところで働いてて.NETアプリ作ったりAzureでごにょごにょしたりしてる気がする。

 

アイマスとか美少女ゲームが好きなただのオタク。