dozono 30分クッキング -Webサービス編その③- 

3月 17日 @ 0:00 ~ 1:00 講演者:dozono

資料

お題

  • NextCloud というサービスを Clean な CentOS に入れる

NextCloud とは

  • ownCloud を fork したもの
  • OneDrive, Google Drive のようなクラウドストレージをつくるソフト
    • 自前の HDD があればいくらでもファイルを入れられる
  • 活発に開発が続けられており、最新バージョンはv13
    • yum で入れるとやや古い v11 が入る
    • 今回は yum 版ではなく latest 版を入れる
  • https://docs.nextcloud.com/  にインストール方法の記載あり

インストール手順

  • 関連パッケージのインストール
    • パッケージバージョンに注意
# Apache-httpd、MariaDBのインストール yum install -y httpd mariadb-server # PHPのインストール(推奨v7.x) yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm yum install -y --enablerepo=remi php72 php72-php php72-php-mysqlnd php72-php-gd php72-php-json php72-php-mbstring php72-php-intl php72-php-pecl-mcrypt php72-php-pecl-imagick php72-php-xml php72-php-pecl-zip php-pear-Net-Curl php72-php-pecl-imagick unzip

Apacheの設定 ①か②のどちらかを実施

Apache の設定を変更し /nextcloud 以下の設定を上書きできるようにする。

  • ①Nextcloud用の設定ファイル(/etc/httpd/conf.d/nextcloud.conf)を新規作成する
    • ヒアドキュメントを流し込む。
    • teeコマンドは、出力先を標準出力とその他の2箇所に、同時に出力するコマンド。
cat << 'EOF' | tee -a /etc/httpd/conf.d/nextcloud.conf # nextcloud <Directory /nextcloud/> AllowOverride All Require all denied </Directory> EOF
  • ②Apacheの設定ファイル(httpd.conf)を変更する。
    • ファイルをバックアップしつつ Apache の設定を変更する
cp /etc/httpd/conf/httpd.conf{,.org} cat << 'EOF' | tee -a /etc/httpd/conf/httpd.conf # nextcloud <Directory /nextcloud/> AllowOverride All Require all denied </Directory> EOF diff /etc/httpd/conf/httpd.conf{.org,}

apache を起動する。

  • この時点で Apache が動いており、.htaccess も読み込み、php7 で実行してくれる環境が整っている。
systemctl start httpd systemctl enable httpd
# ポートの開放 firewall-cmd --add-service=http --permanent # 明示的に permanent 設定を反映する firewall-cmd --reload

MariaDB の設定

cp /etc/my.cnf.d/server.cnf{,.org} sed -i "s/\[mysqld\]/[mysqld]\ninnodb_large_prefix=on\ninnodb_file_format=barracuda\ninnodb_file_per_table=true/" "/etc/my.cnf.d/server.cnf" diff /etc/my.cnf.d/server.cnf{.org,} systemctl start mariadb systemctl enable mariadb

ここは手動操作入るので注意!!

# 手動操作 mysql_secure_installation # Mysqlログイン mysql -uroot -p CREATE DATABASE <任意のデータベース名> CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; GRANT ALL PRIVILEGES ON <任意のデータベース名>.* TO <任意のデータベース接続ユーザ名>@'localhost' IDENTIFIED BY '<データベース接続ユーザ用のパスワード>'; # サンプル ## CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; ## GRANT ALL PRIVILEGES ON nextcloud.* TO dbuser@'localhost' IDENTIFIED BY 'password'; exit

最新版 nextCloud をダウンロード

curl -L -O https://download.nextcloud.com/server/releases/latest.zip

nextCloud を解凍

yum install -y unzip unzip latest.zip
  • nextCloud の展開作業
# nextcloud appをApache HTTP Serverの公開ディレクトリに配置 cp -R nextcloud /var/www/html/ # data フォルダの作成(このフォルダ内にユーザがアップロードしたファイルが格納される) mkdir -p /var/www/html/nextcloud/data # ファイルのオーナー変更 chown -R apache.apache /var/www/html/nextcloud
  • SELinux の設定。
    • SELinux をきちんと設定するのをおすすめします
      • もしバッファオーバーフロー等でサーバープロセスが乗っ取られたとしても SELinux をきちんと設定していたら乗っ取られ対象はそのプロセスに閉じられる
      • SELinux を解除していたら他の daemon も影響を受ける可能性があるので注意
    • Docker などでプロセスが適度に閉じ込められていたらまぁ無効化も視野に入れても良いけど…
# SELinuxの設定変更 chcon -R -t httpd_sys_rw_content_t /var/www/html/nextcloud/data chcon -R -t httpd_sys_rw_content_t /var/www/html/nextcloud/config chcon -R -t httpd_sys_rw_content_t /var/www/html/nextcloud/apps chcon -R -t httpd_sys_rw_content_t /var/www/html/nextcloud/.htaccess chcon -R -t httpd_sys_rw_content_t /var/www/html/nextcloud/.user.ini setsebool -P httpd_unified off

手元の環境からブラウザでつなぐ

http://<IP>/nextcloud/

  • 管理者のユーザー名,パスワードいれる

  • DB 変える : Sqlite から MySQL へ

  • DBのユーザー・パスワード・データベース 名設定

  • 起動完了

注意事項

  • 外部公開の際には安全のため https 化すること。
  • nextCloud / ownCloud フォルダ数増えるとすごく重くなるので注意
    • フォルダごとに差分更新チェックするため

聴講者の声

  • わたしが禊皇帝です。
  • owncloudの開発者がいややーっていって出ていって作ったのがnextcloud、nextcloud と owncloud は分かれて、今は互いに協力しながらやってる。
  • GCP に 1TB 置いても $16/月 。クラウドに owncloud/nextcloud 立てたら幸せだなーと思う。データ一生消えないし。
  • ポイント : Yum で ownCloud 入れるとバージョンが古い
  • firewall 開放時、明示的に permanent をつけないと再起動等でもとに戻る

Q & A

  • Q. php 5.4 入ってて困っているのですが
    • A. 依存関係でそうなっている? 一旦 yum で php を消してから yum install -y --enablerepo=remi ... で入れてみたください