Cloudreveを使ってみる

こんにちは。もちもちずきんです。今回はOSSのクラウドストレージアプリケーションであるCloudreveを使ってみたいと思います。

Cloudreveとは?

Cloudreve公式ページ(2022年2月20日現在)

Cloudreve(公式ホームページ,Github)はGo言語のフレームワークであるGinを使用して作られた「最小限のコストでパブリックとプライベートの両方のオンラインシステムを迅速に構築することができる」ことを売りにしているOSSのクラウドストレージアプリケーションです。

機能の特徴として

  • ローカルマシン、スレーブマシン、Qiniu、Aliyun OSS、Tencent Cloud COS、Youpaiyun、OneDriveをストレージ端末としてサポートしている
  • アップロード/ダウンロードでクライアントからの直接転送をサポート、ダウンロード速度制限をサポートしている
  • オンライン圧縮・解凍、マルチファイルパッケージダウンロードのサポート
  • WebDAVプロトコルのサポート
  • ファイルのパスワードや期間を設定したURL共有
  • ドラッグアンドドロップでの操作
  • 動画、画像、音声、テキスト、Officeドキュメントをオンラインでプレビュー可能

を謳っています。

UIもMDUIを採用しており、Googleドライブライクで非常に使いやすそうなアプリケーションになっています。残念ながらi18n/l10nはまだ行われておらず、対応している言語は中国語のみになっています。

CloudreveをUbuntu20.04にインストール

それでは公式ガイドを参考にCloudreveサーバーを構築していきます。

とりあえず動かしてみる

動かすだけであれば非常に簡単です。
ダウンロード→解凍→実行権限付与→実行とするだけで動きます。

まず、Cloudreveのリリースページにアクセスします。

リリースページ

記事を書いている時点で最新のバージョンは3.4.2です。Assetsの中から自分のマシンのアーキテクチャにあったバイナリファイルをダウンロードします。ここではamd64のLinuxを扱います。

$ wget https://github.com/cloudreve/Cloudreve/releases/download/3.4.2/cloudreve_3.4.2_linux_amd64.tar.gz

解凍します。

$ tar -zxvf cloudreve_3.4.2_linux_amd64.tar.gz

解凍すると「cloudreve」というファイルが出てきます。これに実行権限を与えて実行するとlocalhost:5212からCloudreveにアクセスすることができます。

$ chmod +x ./cloudreve
$ ./cloudreve

実行するとサーバーが立ち上がり、ログが出力されます。初回起動時にはAdminの初期ログインメールアドレスとパスワードが表示されます。

$ ./cloudreve

   ___ _                 _
  / __\ | ___  _   _  __| |_ __ _____   _____
 / /  | |/ _ \| | | |/ _  | '__/ _ \ \ / / _ \
/ /___| | (_) | |_| | (_| | | |  __/\ V /  __/
\____/|_|\___/ \__,_|\__,_|_|  \___| \_/ \___|

   V3.4.2  Commit #c31c77a  Pro=false
================================================

[Info]    2022-02-19 17:28:40 初始化数据库连接
[Info]    2022-02-19 17:28:40 开始进行数据库初始化...
[Info]    2022-02-19 17:28:40 初始管理员账号:admin@cloudreve.org
[Info]    2022-02-19 17:28:40 初始管理员密码:XXXXXXXX
[Info]    2022-02-19 17:28:41 开始执行数据库脚本 [UpgradeTo3.4.0]
[Info]    2022-02-19 17:28:41 数据库初始化结束
[Info]    2022-02-19 17:28:41 初始化任务队列,WorkerNum = 10
[Info]    2022-02-19 17:28:41 初始化定时任务...
[Info]    2022-02-19 17:28:41 当前运行模式:Master
[Info]    2022-02-19 17:28:41 开始监听 :5212

この場合

[Info]    2022-02-19 17:28:40 初始管理员账号:admin@cloudreve.org
[Info]    2022-02-19 17:28:40 初始管理员密码:XXXXXXXX

と出力されているようにメールアドレスが「admin@cloudreve.org」でパスワードが「XXXXXXXX」です。
設定ファイルなどを書かずにそのまま実行すると実行しているディレクトリにDBのファイルcloudreve.dbとアップロードしたファイルが保存されるuploadsというディレクトリが生成されます。

設定を書いて動かしてみる

このまま動かしても良いのですが、今回はWebサーバーとしてNginx、DBにMySQL、システム管理にSystemdを使って動かして見たいと思います。
手順としては

  1. ダウンロード・解凍・実行権限付与
  2. 実行ユーザー作成
  3. バイナリファイルを移動
  4. DBを作る
  5. Configファイルを作る
  6. 実行してみる
  7. Nginxの設定を書く
  8. Systemdの設定を書く・有効化・起動する

という手順で行っていこうと思います。

ダウンロード・解凍・実行権限付与

「とりあえず動かしてみる」でも行った、ダウンロード・解凍・実行権限付与を行います。
詳しい手順は「とりあえず動かしてみる」の途中までと全く同じなので省略します。

$ wget https://github.com/cloudreve/Cloudreve/releases/download/3.4.2/cloudreve_3.4.2_linux_amd64.tar.gz
$ tar -zxvf cloudreve_3.4.2_linux_amd64.tar.gz
$ chmod +x ./cloudreve

実行ユーザー作成

# adduser --disabled-login cloudreve

バイナリファイルを移動

作成したバイナリファイルを移動します。今回は/home/cloudreve/で稼働させたいと思います。

$ sudo mv cloudreve /home/cloudreve/

DBを作る

MySQLがインストールされいてる前提で進みます。インストールしていない人は# apt install mysql-server mysql-clientなどの操作を適宜行ってインストールを済ませてください。

Mysqlのコンソールに入ります。

# mysql -u root -p

データベースとDBのユーザーを作成します。今回はDB名を「cloudreve_db」ユーザーを「cloudreve_user」パスワードは「cloudreve_pass」として設定します。それぞれ適宜変更してください。(パスワードなどは特に安全なものを設定してください)

MySQL [(none)]> CREATE DATABASE cloudreve_db;
Query OK, 1 row affected (0.002 sec)

MySQL [(none)]> CREATE USER 'cloudreve_user'@'localhost' IDENTIFIED BY 'cloudreve_pass';
Query OK, 0 rows affected (0.017 sec)

MySQL [(none)]> GRANT ALL PRIVILEGES ON cloudreve_db. * TO 'cloudreve_user'@'localhost';
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]>\q
Bye

Configファイルを作る

今回は/home/cloudreve/conf.iniにConfigファイルを作成していきたいと思います。場所を変える場合は適宜変更してください。
ユーザーcloudreveconf.iniを作成します。

# sudo -u cloudreve touch /home/cloudreve/conf.ini

編集します。

# vi /home/cloudreve/conf.ini

公式ガイドを参考にConfigを記入していきます。今回書き換える設定はDBの設定など一部のみ。

[System]
; 動作モード
Mode = master
; リスニングポート
Listen = :5212
; Debugの有効化/無効化
Debug = false

; データベース設定。デフォルト設定でSQLiteを使う場合は削除
[Database]
; sqlite/mysql/mssql/postgresの中からデータベースを選択
Type = mysql
; データベースのポート
Port = 3306
; ユーザー名
User = cloudreve_user
; パスワード
Password = cloudreve_pass
; データベースのホスト
Host = 127.0.0.1
; データベース名
Name = cloudreve_db
; テーブルの接頭辞
TablePrefix = cd_
; 文字コード
Charset = utf8

; CORSの設定
[CORS]
AllowOrigins = *
AllowMethods = OPTIONS,GET,POST
AllowHeaders = *
AllowCredentials = false

; サムネイルの設定
[Thumbnail]
MaxWidth = 400
MaxHeight = 300
FileSuffix = ._thumb
; 並行して作成するサムネイル数。-1でCPUコアに合わせて自動設定
MaxTaskCount = -1
; jpg / pngの選択(多分エンコード後のサムネイル形式)
EncodeMethod = jpg
; サムネイルが生成されたらゴミ箱に移動するかどうか(ここはよくわからなかった)
GCAfterGen = false
; サムネイル生成の圧縮クオリティ
EncodeQuality = 85

動かしてみる

一旦この状態で動くかどうか確認します。

# sudo su - cloudreve
$ ./cloudreve -c /home/cloudreve/conf.ini

動いていたらAdminのメールアドレスと初期パスワードを控えておきます。

$ ./cloudreve -c conf.ini

   ___ _                 _
  / __\ | ___  _   _  __| |_ __ _____   _____
 / /  | |/ _ \| | | |/ _  | '__/ _ \ \ / / _ \
/ /___| | (_) | |_| | (_| | | |  __/\ V /  __/
\____/|_|\___/ \__,_|\__,_|_|  \___| \_/ \___|

   V3.4.2  Commit #c31c77a  Pro=false
================================================

[Info]    2022-02-20 13:27:49 初始化数据库连接
[Info]    2022-02-20 13:27:49 开始进行数据库初始化...
[Info]    2022-02-20 13:27:49 初始管理员账号:admin@cloudreve.org
[Info]    2022-02-20 13:27:49 初始管理员密码:XXXXXX
[Info]    2022-02-20 13:27:49 开始执行数据库脚本 [UpgradeTo3.4.0]
[Info]    2022-02-20 13:27:49 数据库初始化结束
[Info]    2022-02-20 13:27:49 初始化任务队列,WorkerNum = 10
[Info]    2022-02-20 13:27:49 初始化定时任务...
[Info]    2022-02-20 13:27:50 当前运行模式:Master
[Info]    2022-02-20 13:27:50 开始监听 :5212

SSHトンネリングなどでlocalhost:5212をみて正常に起動したことを確認し、Ctrl+Cで終了します。
Cloudreveユーザーをexitで抜けます。

Nginxの設定を書く

次にNginxの設定を書いていきます。Nginxがはいっていない場合は# apt install nginxなどでインストールしてください。
ここではSSLの設定をLet'sEncryptを使用する前提で書いています。証明書は各自で適宜取得してください。
まずsites-availableに設定を書き込んでいきます。

# vi /etc/nginx/sites-available/cloudreve.conf

example.comを適宜自分のドメインに書き換えてください。

server {
    listen 80;
    listen [::]:80;
    server_name example.com;

    location / { return 301 https://$server_name$request_uri; }
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com;
    
    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;

    # プロキシを設定
location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://127.0.0.1:5212;
    }
}

sites-enabledにシンボリックリンクを設定します。

# ln -s /etc/nginx/sites-available/cloudreve.conf /etc/nginx/sites-enabled/cloudreve.conf

#nginx -tを行ってエラーが出なければOKです。
Nginxをリロードします。

# systemctl reload nginx

systemdファイルを作成・記入

/etc/systemd/system/cloudreve.serviceを作成します。

# vi /etc/systemd/system/cloudreve.service

[Unit]
Description=Cloudreve
Documentation=https://docs.cloudreve.org
After=network.target
After=mysqld.service
Wants=network.target

[Service]
User=cloudreve
Group=cloudreve
WorkingDirectory=/home/cloudreve/
ExecStart=/home/cloudreve/cloudreve -c /home/cloudreve/conf.ini
Restart=on-abnormal
RestartSec=5s
KillMode=mixed

StandardOutput=null
StandardError=syslog

[Install]
WantedBy=multi-user.target

デーモンの読み直し、自動起動オン、立ち上げを行います。

# systemctl daemon-reload
# systemctl enable cloudreve.service
# systemctl start cloudreve.service

これでURLを入力するとCloudreveが使えます。
控えておいたAdminのメールアドレスとパスワードでログインができるはずです。
ログインしたら、パスワードの変更などを適宜行ってください。

このようなログイン画面が表示されたら成功です

ここの上の欄にメールアドレス、下の欄にパスワードが入力できます。