Debian 9でSeafileとファイルを同期および共有する方法

著者はhttps://www.brightfunds.org/organizations/electronic-frontier-foundation-inc[Electronic Frontier Foundation Inc]を選択して、https://do.co/w4do-cta [Write forの一部として寄付を受け取るDOnations]プログラム。

前書き

Seafileは、オープンソースの自己ホスト型のファイル同期および共有プラットフォームです。 ユーザーは、ストレージスペースを唯一の制限として、独自のサーバーにデータを保存し、オプションで暗号化できます。 Seafileでは、クロスプラットフォーム同期を使用してファイルとフォルダーを共有し、有効期限のあるファイルへのパスワードで保護されたリンクを共有できます。 ファイルのバージョン管理機能は、ユーザーが削除および変更されたファイルまたはフォルダーを復元できることを意味します。

このチュートリアルでは、Debian 9サーバーにSeafileをインストールして設定します。 MariaDB(Debian 9のデフォルトのMySQLバリアント)を使用してSeafileのさまざまなコンポーネントのデータを保存し、Apacheをプロキシサーバーとして使用してWebトラフィックを処理します。 このチュートリアルを完了すると、Webインターフェースを使用してデスクトップクライアントまたはモバイルクライアントからSeafileにアクセスできるようになり、サーバー上の他のユーザーまたはグループまたは一般のユーザーとファイルを同期および共有できるようになります。

前提条件

このガイドを始める前に、次のものが必要です。

  • このhttps://www.digitalocean.com/community/tutorials/initial-server-setup-with-debian-9[Debian 9での初期サーバー設定]チュートリアルに従ってセットアップされた、最小2GBのRAMを備えた1台のDebian 9サーバー、sudoの非ルートユーザーとファイアウォールを含みます。

  • How Debian Web ServerをDebian 9にインストールするには

  • このhttps://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-debian-9[Apacheを保護する方法]に従ってサーバーにインストールされたSSL証明書Debian 9で暗号化しましょう]チュートリアル。

  • 完全に登録されたドメイン名。 このチュートリアルでは、全体で「++」を使用します。

  • 次の両方のDNSレコードがサーバーに設定されています。 追加方法の詳細については、このhttps://www.digitalocean.com/docs/networking/dns/[DigitalOcean DNSの紹介]を参照してください。

  • サーバーのパブリックIPアドレスを指す「++」を持つAレコード。

  • サーバーのパブリックIPアドレスを指す「++」を持つAレコード。

  • MariaDBデータベースサーバーがインストールおよび構成されています。 Debian 9にMariaDBをインストールする方法チュートリアルの手順に従ってください。 このチュートリアルのステップ3-「(オプション)ユーザー認証と特権の調整」をスキップします。 データベースサーバーへのローカル接続のみを行うため、rootユーザーの認証方法を変更する必要はありません。

手順1-Seafileコンポーネントのデータベースの作成

Seafileが適切に機能するには、3つのコンポーネントが必要です。 これらの3つのコンポーネントは次のとおりです。

  • * Seahub *:https://www.djangoproject.com/[Django] Webフレームワークを使用してPythonで記述されたSeafileのWebフロントエンド。 Seahubから、Webブラウザを使用してファイルにアクセス、管理、共有できます。

  • * Seafileサーバー*:生ファイルのアップロード、ダウンロード、および同期を管理するデータサービスデーモン。 サーバーと直接対話するのではなく、クライアントプログラムの1つまたはSeahub Webインターフェイスを使用します。

  • * Ccnetサーバー*:Seafileの異なるコンポーネント間の内部通信を可能にするRPCサービスデーモン。 たとえば、Seahubを使用すると、Ccnet RPCサービスを使用してSeafileサーバーからデータにアクセスできます。

これらの各コンポーネントは、独自のデータベースにデータを個別に保存します。 このステップでは、サーバーのセットアップに進む前に、3つのMariaDBデータベースとユーザーを作成します。

まず、ユーザー名とIPアドレスを使用してSSHを使用してサーバーにログインします。

ssh @

MariaDBデータベースサーバーに管理者(ルート)として接続します。

sudo mysql

MariaDBプロンプトで、次のSQLコマンドを使用してデータベースユーザーを作成します。

CREATE USER ''@'localhost' IDENTIFIED BY '';

次に、次のデータベースを作成して、3つのSeafileコンポーネントのデータを保存します。

  • Ccnetサーバーの場合は「++」。

  • Seahub Webフロントエンド用の「++」。

  • Seafileファイルサーバーの場合は「++」。

MariaDBプロンプトで、データベースを作成します。

CREATE DATABASE `` CHARACTER SET = 'utf8';
CREATE DATABASE `` CHARACTER SET = 'utf8';
CREATE DATABASE `` CHARACTER SET = 'utf8';

次に、これらのデータベースにアクセスして変更を行うためのSeafileデータベースユーザーにすべての特権を付与します。

GRANT ALL PRIVILEGES ON ``.* to ``@localhost;
GRANT ALL PRIVILEGES ON ``.* to ``@localhost;
GRANT ALL PRIVILEGES ON ``.* to ``@localhost;

`+ exit +`と入力してMariaDBプロンプトを終了します。

exit

Seafileコンポーネントごとにデータを保存するために必要なユーザーとデータベースを作成したので、Seafileサーバーパッケージをダウンロードするために依存関係をインストールします。

ステップ2-依存関係のインストールとSeafileのダウンロード

Seafileの一部はPythonで記述されているため、動作するには追加のPythonモジュールとプログラムが必要です。 この手順では、Seafileサーバーパッケージをダウンロードおよび抽出する前に、これらの必要な依存関係をインストールします。

`+ apt +`を使用して依存関係をインストールするには、次のコマンドを実行します。

sudo apt install python-setuptools python-pip python-urllib3 python-requests python-mysqldb ffmpeg

`+ python-setuptools `および ` python-pip `依存関係は、Pythonパッケージのインストールと管理を監視します。 ` python-urllib3 `および ` python-requests `パッケージはWebサイトへのリクエストを作成します。 最後に、 ` python-mysqldb `はPythonのMariaDBを使用するためのライブラリで、 ` ffmpeg +`はマルチメディアファイルを処理します。

Seafileには、画像処理用のPythonライブラリである `+ Pillow `と、ムービーファイルのサムネイルを処理するための ` moviepy `が必要です。 これらのモジュールはDebianパッケージリポジトリでは利用できません。 ` pip +`を使用して手動でインストールします。

sudo pip install Pillow==4.3.0 moviepy

必要な依存関係をインストールしたら、Seafileサーバーパッケージをダウンロードできます。

Seafileはセットアップ中に追加のディレクトリを作成します。 それらをすべて整理しておくには、新しいディレクトリを作成して変更します。

mkdir seafile
cd seafile

次のコマンドを実行して、https://www.seafile.com/en/download [website]からSeafileサーバーの最新バージョン(この記事の執筆時点では ++)をダウンロードできるようになりました。

wget https://download.seadrive.org/seafile-server__x86-64.tar.gz

Seafileは、ダウンロードしたファイルを圧縮されたtarアーカイブとして配布します。つまり、続行する前に解凍する必要があります。 `+ tar`を使用してアーカイブを抽出します。

tar -zxvf seafile-server__x86-64.tar.gz

次に、抽出されたディレクトリに移動します。

cd seafile-server-

この段階で、Seafileサーバーパッケージをダウンロードして展開し、必要な依存関係もインストールしました。 これで、Seafileサーバーを構成する準備ができました。

ステップ3-Seafileサーバーの構成

Seafileでは、サービスを初めて開始する前に、セットアップに関する情報が必要です。 これには、ドメイン名、データベース構成、データを保存するパスなどの詳細が含まれます。 この情報を提供する一連の質問プロンプトを開始するには、前の手順で抽出したアーカイブに含まれているスクリプト `+ setup_seafile_mysql.sh +`を実行できます。

`+ bash`を使用してスクリプトを実行します。

bash setup-seafile-mysql.sh

続行するには、「+ ENTER」を押します。

スクリプトにより、一連の質問が表示されます。 デフォルトが言及されている場合は常に、「+ ENTER +」キーを押すとその値が使用されます。

このチュートリアルでは、サーバー名として「++」を使用していますが、必要に応じて変更できます。

Question 1

What is the name of the server?
It will be displayed on the client. 3 - 15 letters or digits
[ server name ]

このSeafileインスタンスのドメイン名を入力します。

Question 2

What is the ip or domain of the server?.
For example: www.mycompany.com, 192.168.1.101
[ This server's ip or domain ]

`+ Question 3 `の場合、 ` ENTER +`を押してデフォルト値を受け入れます。 たとえば、NFSまたはブロックストレージを使用して外部ストレージをセットアップした場合、代わりにその場所へのパスをここで指定する必要があります。

Question 3

Where do you want to put your seafile data?
Please use a volume with enough free space
[ default "/home//seafile/seafile-data" ]

「質問4」の場合は、「+ ENTER +」を押してデフォルト値を受け入れます。

Question 4

Which port do you want to use for the seafile fileserver?
[ default "8082" ]

次のプロンプトでは、データベース構成を確認できます。 新しいデータベースを作成するか、既存のデータベースをセットアップに使用できます。 このチュートリアルでは、ステップ1で必要なデータベースを作成しているため、ここでオプション「2」を選択します。

-------------------------------------------------------
Please choose a way to initialize seafile databases:
-------------------------------------------------------

[1] Create new ccnet/seafile/seahub databases
[2] Use existing ccnet/seafile/seahub databases

[ 1 or 2 ]

質問6〜9は、MariaDBデータベースサーバーに関するものです。 手順1で作成した* mysql *ユーザーのユーザー名とパスワードのみを入力する必要があります。 + host`と + port + のデフォルト値を受け入れるには、 + ENTER`を押します。

What is the host of mysql server?

[ default "localhost" ]

What is the port of mysql server?

[ default "3306" ]

Which mysql user to use for seafile?

[ mysql user for seafile ]

What is the password for mysql user "seafile"?

[ password for seafile ]

パスワードを入力すると、スクリプトはSeafileデータベースの名前を要求します。 このチュートリアルでは、「」、「」、および「++」を使用します。 スクリプトは、初期構成の概要を表示する前に、データベースへの接続が成功したかどうかを確認します。

Enter the existing database name for ccnet:
[ ccnet database ]

verifying user "sammy" access to database  ...  done

Enter the existing database name for seafile:
[ seafile database ]

verifying user "sammy" access to database  ...  done

Enter the existing database name for seahub:
[ seahub database ]

verifying user "sammy" access to database  ...  done

---------------------------------
This is your configuration
---------------------------------

   server name:            Seafile
   server ip/domain:

   seafile data dir:       /home//seafile/seafile-data
   fileserver port:        8082

   database:               use existing
   ccnet database:
   seafile database:
   seahub database:
   database user:

--------------------------------
Press ENTER to continue, or Ctrl-C to abort
---------------------------------

「+ ENTER」を押して確認します。

OutputGenerating ccnet configuration ...
done
Successly create configuration dir /home/sammy/seafile/ccnet.

Generating seafile configuration ...
done

Generating seahub configuration ...
----------------------------------------
Now creating seahub database tables ...
----------------------------------------
creating seafile-server-latest symbolic link ...  done

-----------------------------------------------------------------
Your seafile server configuration has been finished successfully.
-----------------------------------------------------------------
run seafile server:     ./seafile.sh { start | stop | restart }
run seahub  server:     ./seahub.sh  { start <port> | stop | restart <port> }
-----------------------------------------------------------------
If you are behind a firewall, remember to allow input/output of these tcp ports:
-----------------------------------------------------------------
port of seafile fileserver:   8082
port of seahub:               8000

When problems occur, Refer to
       https://github.com/haiwen/seafile/wiki
for information.

Apacheの背後でSeafileを実行するため、ファイアウォールでポート `+ 8082 `および ` 8000 +`を開く必要はないため、出力のこの部分は無視できます。

サーバーの初期構成が完了しました。 次のステップでは、Seafileサービスを開始する前にApache Webサーバーを構成します。

ステップ4-Apache Webサーバーの構成

この手順では、すべての要求をSeafileに転送するようにApache Webサーバーを構成します。 この方法でApacheを使用すると、ポート番号なしでURLを使用し、SeafileへのHTTPS接続を有効にし、Apacheが提供するキャッシュ機能を使用してパフォーマンスを向上させることができます。

リクエストの転送を開始するには、Apache設定で `+ proxy_http +`モジュールを有効にする必要があります。 このモジュールは、HTTPおよびHTTPSリクエストをプロキシする機能を提供します。 次のコマンドはモジュールを有効にします:

sudo a2enmod proxy_http

次に、リクエストをSeafileファイルサーバーとSeahub Webインターフェースに転送するために、 `++`の仮想ホスト設定を更新します。

テキストエディターで構成ファイルを開きます。

sudo nano /etc/apache2/sites-enabled/-le-ssl.conf

`+ ServerAdmin `から ` SSLCertificateKeyFile `の行は、前提条件の一部として設定した初期ApacheおよびLet's Encrypt構成の一部です。 ` Alias `で始まり、 ` ProxyPassReverse +`ディレクティブで終わる強調表示されたコンテンツを追加します。

/etc/apache2/sites-enabled/example.com-le-ssl.conf

<IfModule mod_ssl.c>
<VirtualHost *:443>
   ServerAdmin
   ServerName
   ServerAlias www.
   DocumentRoot /var/www//html
   ErrorLog ${APACHE_LOG_DIR}/-error.log
   CustomLog ${APACHE_LOG_DIR}/-access.log combined

   Include /etc/letsencrypt/options-ssl-apache.conf
   SSLCertificateFile /etc/letsencrypt/live//fullchain.pem
   SSLCertificateKeyFile /etc/letsencrypt/live//privkey.pem

   sammy














</VirtualHost>
</IfModule>

Aliasディレクティブは、URLパス + / media +`をSeafileが使用するファイルシステムのローカルパスにマップします。 次の `+ Location +`ディレクティブは、このディレクトリのコンテンツへのアクセスを有効にします。 `+ ProxyPass +`および `+ ProxyPassReverse +`ディレクティブは、Apacheをこのホストのリバースプロキシとして機能させ、 `+ / +`および `+ / seafhttp +`へのリクエストをローカルホストポートで実行されているSeafile Webインターフェースおよびファイルサーバーに転送します `それぞれ+ 8000 + `と + 8082 + 。 `+ RewriteRule +`ディレクティブは、すべてのリクエストを変更せずに `+ / seafhttp +`に渡し、さらなるルールの処理を停止します( `+ [QSA、L] +)。

ファイルを保存して終了します。

仮想ホスト構成に構文エラーがあるかどうかをテストします。

sudo apache2ctl configtest

「+ Syntax OK +」と報告された場合、設定に問題はありません。 変更を有効にするためにApacheを再起動します。

sudo systemctl restart apache2

これで、SeafileファイルサーバーとSeahubのリバースプロキシとして機能するようにApacheが構成されました。 次に、サービスを開始する前にSeafileの構成でURLを更新します。

ステップ5-Seafileの構成の更新とサービスの開始

Apacheを使用してSeafileへのすべてのリクエストをプロキシしているため、Seafileサービスを開始する前に、テキストエディターを使用して、 `+ conf +`ディレクトリ内のSeafileの設定ファイルのURLを更新する必要があります。

テキストエディタで `+ ccnet.conf +`を開きます:

nano /home//seafile/conf/ccnet.conf

ファイルの「+ SERVICE_URL +」設定を変更して、ポート番号なしで新しいHTTPS URLを指すようにします。次に例を示します。

/home/sammy/seafile/conf/ccnet.confを更新します

SERVICE_URL = https://

コンテンツを追加したら、ファイルを保存して終了します。

次に、テキストエディタで `+ seahub_settings.py +`を開きます。

nano /home//seafile/conf/seahub_settings.py

ファイルに `+ FILE_SERVER_ROOT +`設定を追加して、ファイルサーバーがファイルのアップロードとダウンロードをリッスンするパスを指定できるようになりました。

/home/sammy/seafile/conf/seahub_settings.pyを更新します

# -*- coding: utf-8 -*-
SECRET_KEY = "..."
example.com
# ...

保存して `+ seahub_settings.py +`を終了します。

これで、SeafileサービスとSeahubインターフェースを開始できます。

cd /home//seafile/seafile-server-
./seafile.sh start
./seahub.sh start

Seahubサービスを開始するのはこれが初めてなので、管理者アカウントを作成するよう求められます。 この管理者ユーザーの有効なメールアドレスとパスワードを入力します。

OutputWhat is the email for the admin account?
[ admin email ]

What is the password for the admin account?
[ admin password ]

Enter the password again:
[ admin password again ]

----------------------------------------
Successfully created seafile admin
----------------------------------------
Seahub is started

Done.

Webブラウザーで「+ https:// +」を開き、Seafile管理者のメールアドレスとパスワードを使用してログインします。

image:https://assets.digitalocean.com/articles/seafile_1804/step5a.png [Seafile Webインターフェースのログイン画面]

正常にログインしたら、管理インターフェイスにアクセスするか、新しいユーザーを作成できます。

Webインターフェイスが正常に機能していることを確認したので、次のステップでシステム起動時にこれらのサービスを自動的に開始できるようにします。

手順6-システムの起動時にSeafileサーバーを起動できるようにする

起動時にファイルサーバーとWebインターフェースが自動的に起動するようにするには、それぞれの `+ systemd +`サービスファイルを作成してアクティブ化します。

Seafileファイルサーバー用の `+ systemd +`サービスファイルを作成します。

sudo nano /etc/systemd/system/seafile.service

次のコンテンツをファイルに追加します。

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

[Unit]
Description=Seafile
After=network.target mysql.service

[Service]
Type=forking
ExecStart=/home//seafile/seafile-server-latest/seafile.sh start
ExecStop=/home//seafile/seafile-server-latest/seafile.sh stop
User=
Group=

[Install]
WantedBy=multi-user.target

ここで、 `+ ExectStart `および ` ExecStop `行は、Seafileサービスを開始および停止するために実行されるコマンドを示しています。 サービスは、「 User」および「+ Group」として「+」で実行されます。 ` After +`行は、ネットワーキングとMariaDBサービスの開始後にSeafileサービスが開始することを指定します。

`+ seafile.service +`を保存して終了します。

Seahub Webインターフェース用の `+ systemd +`サービスファイルを作成します。

sudo nano /etc/systemd/system/seahub.service

これはSeafileサービスに似ています。 唯一の違いは、WebインターフェイスがSeafileサービスの後に開始されることです。 このファイルに次のコンテンツを追加します。

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

[Unit]
Description=Seafile hub
After=network.target seafile.service

[Service]
Type=forking
ExecStart=/home//seafile/seafile-server-latest/seahub.sh start
ExecStop=/home//seafile/seafile-server-latest/seahub.sh stop
User=
Group=

[Install]
WantedBy=multi-user.target

`+ seahub.service +`を保存して終了します。

systemdユニットファイルの詳細については、https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files [Systemdユニットとユニットファイルについて]チュートリアルをご覧ください。

最後に、起動時にSeafileサービスとSeahubサービスの両方を自動的に開始できるようにするには、次のコマンドを実行します。

sudo systemctl enable seafile.service
sudo systemctl enable seahub.service

サーバーを再起動すると、Seafileが自動的に起動します。

この時点で、サーバーのセットアップが完了し、各サービスをテストできるようになりました。

手順7-ファイルの同期と共有機能のテスト

この手順では、セットアップしたサーバーのファイル同期と共有機能をテストし、それらが正しく機能していることを確認します。 これを行うには、Seafileクライアントプログラムを別のコンピューターやモバイルデバイスにインストールする必要があります。

Seafile Webサイトのhttps://www.seafile.com/en/download/ [ダウンロード]ページにアクセスし、指示に従ってプログラムの最新バージョンをコンピューターにインストールします。 Seafileクライアントは、Linux(Ubuntu、Debian、Fedora、Centos / RHEL、Arch Linux)、MacOS、およびWindowsのさまざまなディストリビューションで使用できます。 モバイルクライアントは、それぞれのアプリストアからAndroidおよびiPhone / iPadデバイスで利用できます。

Seafileクライアントをインストールしたら、ファイルの同期と共有機能をテストできます。

コンピューターまたはデバイスでSeafileクライアントプログラムを開きます。 Seafileフォルダのデフォルトの場所を受け入れて、[次へ]をクリックします。

次のウィンドウで、サーバーのアドレス、ユーザー名、およびパスワードを入力し、[ログイン]をクリックします。

ホームページで、[マイライブラリ]を右クリックし、[このライブラリを同期]をクリックします。 コンピューターまたはデバイスの場所のデフォルト値を受け入れます。

image:https://assets.digitalocean.com/articles/seafile_1804/step7a.png [Seafileクライアント-デフォルトライブラリの同期]

文書や写真などのファイルを*マイライブラリ*フォルダーに追加します。 しばらくすると、ファイルがサーバーにアップロードされます。 次のスクリーンショットは、マイライブラリ*フォルダーにコピーされた photo.jpg *ファイルを示しています。

image:https://assets.digitalocean.com/articles/seafile_1804/step7b.png [コンピューターからデフォルトのライブラリにファイルを追加]

ここで、 `+ https:// +`でWebインターフェースにログインし、ファイルがサーバーに存在することを確認します。

image:https://assets.digitalocean.com/articles/seafile_1804/step7c.png [ファイルの同期を確認するためのマイライブラリページ]

ファイルの横にある[共有]をクリックして、共有できるこのファイルのダウンロードリンクを生成します。

ファイルの同期が正しく機能していること、およびSeafileを使用して複数のデバイスのファイルとフォルダーを同期および共有できることを確認しました。

結論

このチュートリアルでは、Seafileサーバーのプライベートインスタンスを設定します。 これで、サーバーの使用を開始して、外部サービスに依存することなく、ファイルの同期、ユーザーとグループの追加、ファイルの共有または一般との共有を行うことができます。

サーバーの新しいリリースが利用可能になったら、アップグレードの実行手順については、マニュアルのhttps://manual.seafile.com/deploy/upgrade.html[upgrade]セクションを参照してください。