WEBスクレイピング(Selenium)で取得した画像をWEB上に表示して管理したいことがあり、オンラインストレージを使うことにしました。オンラインストレージであるネクストクラウドは、VPSで稼働することができ、PHPとLinuxの知識があれば簡単に構築出来るのでお勧めです。

環境

今回ネクストクラウドを導入する際に、実際に使用した環境は以下のとおりです。

  • CentOS 7.6
  • Apache 2.4
  • mysql 5.7
  • PHP 7.1

PHPのバージョンに注意

作業を行う前にPHPのバージョンを確認してください。私の場合、最初にPHP7.2を入れて作業をしていましたが、ネクストクラウドはPHP7.2は対応していないようでエラーになりました。

そのため、以下の記事を参考にPHPを入れ直して、バージョンを7.1に変更しました。

ネクストクラウドを導入するまでの手順

手順は、まずはネクストクラウドを使うためにMySQLの設定を行います。その後、ネクストクラウドをダウンロードしてhttpdを再起動します。

MySQLにログインします。

mysql -u root -p

データベース「nextcloud」を作成します。

create database nextcloud default character set utf8;

ユーザーを作成します。

grant all privileges on nextcloud.* to root@localhost identified by 'パスワード';

設定を反映します。

flush privileges;

PHPモジュールをインストールします。

yum install --enablerepo=remi,remi-php71 php php-gd php-json php-mysql php-curl php-mbstring
yum install --enablerepo=remi,remi-php71 php-intl php-mcrypt php-imagick php-xml php-zip php-process php-apcu

Apacheモジュールをインストールします。

yum install mod_ssl

libmcrypt、libraqmをインストールします。

yum --enablerepo=epel install libmcrypt
yum --enablerepo=epel install libraqm

wgetコマンドでnextcloudをダウンロードします。

wget https://download.nextcloud.com/server/releases/nextcloud-12.0.3.zip
wget https://download.nextcloud.com/server/releases/nextcloud-12.0.3.zip.asc
wget https://nextcloud.com/nextcloud.asc
gpg --import nextcloud.asc
gpg --verify nextcloud-12.0.3.zip.asc nextcloud-12.0.3.zip

nextcloud-12.0.3.zipを展開します。

unzip nextcloud-12.0.3.zip

※unzipがないとエラーが出たときは上記のunzipをインストールします。

yum install unzip

ルートディレクトリ配下に、先ほど解凍したファイルを移動します。

mv nextcloud /var/www/html

nextcloudディレクトリ配下をapacheユーザーに変更します。

chown -R apache:apache /var/www/html/nextcloud

httpdを再起動します。

systemctl restart httpd.service

ネクストクラウドにアクセスします。
http://xxx.xxx.xx.xx/nextcloud/

これで以下のような画面が出ればOKです。
Nextcloud

以上です。

他に作業したこと

gitのignoreコマンドを実行して管理対象外にする

サーバー内のファイルをgitで管理していたので、nextcloudのディレクトリはgitの管理対象外にしました。

git rm --cached -r --ignore-unmatch /var/www/html/nextcloud/

Seleniumとpyhtonで取得した画像をアップロード

Seleniumで取得した画像を、ネクストクラウドにアップロードするコードをpythonで書きました。

nextcloudディレクトリ配下は自動で権限が書き換わるので、書き込みを行う前に毎回chmodコマンドを実行して権限を変更する必要があります。

os.system('sudo chmod -R 777 /var/www/html/nextcloud/*')

Seleniumで取得した、画像ファイルをnextcloudのディレクトリに書き込みます。

with open('/var/www/html/nextcloud/data/ユーザー名/files/Photos/' + 'test.png', mode='wb') as f:
  f.write(image_src)
except urllib.error.URLError as e:
  print(e)

このままだとサーバーのディレクトリ内に画像が保存されただけで、ネクストクラウドにはまだ画像は反映されていません。反映させるには、サーバー内にある画像のスキャンを行う必要があります。

os.system('cd /var/www/html/nextcloud && sudo -u apache php occ files:scan ユーザー名')

参考

既存のLAMP環境(モチロンPHP7)にNextcloudをインストール