Debian9でファイルをSeafileと同期および共有する方法
著者は、[X10X] Write forDOnationsプログラムの一環として寄付を受け取るためにElectronicFrontier FoundationIncを選択しました。
序章
Seafile は、オープンソースの自己ホスト型ファイル同期および共有プラットフォームです。 ユーザーは、唯一の制限としてストレージスペースを使用して、データを自分のサーバーに保存し、オプションで暗号化できます。 Seafileを使用すると、クロスプラットフォームの同期と、有効期限のあるファイルへのパスワードで保護されたリンクを使用して、ファイルとフォルダーを共有できます。 ファイルバージョン管理機能は、ユーザーが削除および変更されたファイルまたはフォルダーを復元できることを意味します。
このチュートリアルでは、Debian9サーバーにSeafileをインストールして設定します。 MariaDB(Debian 9のデフォルトのMySQLバリアント)を使用してSeafileのさまざまなコンポーネントのデータを保存し、Apacheをプロキシサーバーとして使用してWebトラフィックを処理します。 このチュートリアルを完了すると、Webインターフェイスを使用してデスクトップまたはモバイルクライアントからSeafileにアクセスできるようになり、サーバー上の他のユーザーやグループ、または一般の人々とファイルを同期および共有できるようになります。
前提条件
このガイドを開始する前に、次のものが必要です。
- この初期サーバーセットアップwithDebian9 チュートリアルに従って、2GB以上のRAMをセットアップした1台のDebian 9サーバー(sudo非rootユーザーとファイアウォールを含む)。
- Debian9にApacheWebサーバーをインストールする方法に従って、登録済みドメイン用に仮想ホストが構成されたApacheWebサーバー。
- このDebian9で暗号化してApacheを保護する方法チュートリアルに従って、サーバーにインストールされたSSL証明書。
- 完全に登録されたドメイン名。 このチュートリアルでは、全体を通して
example.comを使用します。 - 次の両方のDNSレコードがサーバー用に設定されています。 それらを追加する方法の詳細については、この DigitalOceanDNSの紹介に従ってください。
- サーバーのパブリックIPアドレスを指す
example.comのAレコード。 - サーバーのパブリックIPアドレスを指す
www.example.comのAレコード。
- サーバーのパブリックIPアドレスを指す
- MariaDBデータベースサーバーがインストールおよび構成されています。 Debian9チュートリアルにMariaDBをインストールする方法の手順に従います。 このチュートリアルのステップ3—「(オプション)ユーザー認証と特権の調整」をスキップします。 データベースサーバーへのローカル接続のみを行うため、rootユーザーの認証方法を変更する必要はありません。
ステップ1—Seafileコンポーネントのデータベースを作成する
Seafileが正しく機能するには、3つのコンポーネントが必要です。 これらの3つのコンポーネントは次のとおりです。
- Seahub : DjangoWebフレームワークを使用してPythonで記述されたSeafileのWebフロントエンド。 Seahubから、Webブラウザーを使用してファイルにアクセス、管理、および共有できます。
- Seafileサーバー:rawファイルのアップロード、ダウンロード、および同期を管理するデータサービスデーモン。 サーバーと直接対話するのではなく、クライアントプログラムの1つまたはSeahubWebインターフェイスを使用します。
- Ccnetサーバー:Seafileのさまざまなコンポーネント間の内部通信を可能にするRPCサービスデーモン。 たとえば、Seahubを使用すると、CcnetRPCサービスを使用してSeafileサーバーからデータにアクセスできます。
これらの各コンポーネントは、データを独自のデータベースに個別に保存します。 このステップでは、サーバーのセットアップに進む前に、3つのMariaDBデータベースと1つのユーザーを作成します。
まず、ユーザー名とIPアドレスを使用してSSHを使用してサーバーにログインします。
ssh sammy@your_server_ip
管理者(ルート)としてMariaDBデータベースサーバーに接続します。
sudo mysql
MariaDBプロンプトで、次のSQLコマンドを使用してデータベースユーザーを作成します。
CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
次に、次のデータベースを作成して、3つのSeafileコンポーネントのデータを保存します。
- Ccnetサーバーの場合は
ccnet-db。 - SeahubWebフロントエンドの
seahub-db。 - Seafileファイルサーバーの場合は
seafile-db。
MariaDBプロンプトで、データベースを作成します。
CREATE DATABASE `ccnet-db` CHARACTER SET = 'utf8'; CREATE DATABASE `seafile-db` CHARACTER SET = 'utf8'; CREATE DATABASE `seahub-db` CHARACTER SET = 'utf8';
次に、Seafileデータベースユーザーにすべての権限を付与して、これらのデータベースにアクセスして変更を加えます。
GRANT ALL PRIVILEGES ON `ccnet-db`.* to `sammy`@localhost; GRANT ALL PRIVILEGES ON `seafile-db`.* to `sammy`@localhost; GRANT ALL PRIVILEGES ON `seahub-db`.* to `sammy`@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
次のコマンドを実行して、 WebサイトからSeafileサーバーの最新バージョン(この記事の執筆時点では6.3.4)をダウンロードできるようになりました。
wget https://download.seadrive.org/seafile-server_6.3.4_x86-64.tar.gz
Seafileは、ダウンロードを圧縮されたtarアーカイブとして配布します。つまり、続行する前にダウンロードを抽出する必要があります。 tarを使用してアーカイブを抽出します。
tar -zxvf seafile-server_6.3.4_x86-64.tar.gz
次に、抽出したディレクトリに移動します。
cd seafile-server-6.3.4
この段階で、Seafileサーバーパッケージをダウンロードして抽出し、必要な依存関係もインストールしました。 これで、Seafileサーバーを構成する準備が整いました。
ステップ3—Seafileサーバーの構成
Seafileは、サービスを初めて開始する前に、セットアップに関するいくつかの情報を必要とします。 これには、ドメイン名、データベース構成、データを保存するパスなどの詳細が含まれます。 この情報を提供する一連の質問プロンプトを開始するには、前の手順で抽出したアーカイブに含まれているスクリプトsetup_seafile_mysql.shを実行できます。
bashを使用してスクリプトを実行します。
bash setup-seafile-mysql.sh
ENTERを押して続行します。
スクリプトにより、一連の質問が表示されます。 デフォルトが記載されている場合は常に、ENTERキーを押すとその値が使用されます。
このチュートリアルでは、サーバー名としてSeafileを使用していますが、必要に応じて変更できます。
Question 1 What is the name of the server? It will be displayed on the client. 3 - 15 letters or digits [ server name ] Seafile
この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 ] example.com
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/sammy/seafile/seafile-data" ]
Question 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 ] 2
質問6〜9は、MariaDBデータベースサーバーに関するものです。 手順1で作成したmysqlユーザーのユーザー名とパスワードのみを入力する必要があります。 ENTERを押して、hostおよびportのデフォルト値を受け入れます。
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 ] sammy What is the password for mysql user "seafile"? [ password for seafile ] password
パスワードを入力した後、スクリプトはSeafileデータベースの名前を要求します。 このチュートリアルでは、ccnet-db、seafile-db、およびseahub-dbを使用します。 次に、スクリプトは、初期構成の要約を表示する前に、データベースへの接続が成功したかどうかを確認します。
Enter the existing database name for ccnet:
[ ccnet database ] ccnet-db
verifying user "sammy" access to database ccnet-db ... done
Enter the existing database name for seafile:
[ seafile database ] seafile-db
verifying user "sammy" access to database seafile-db ... done
Enter the existing database name for seahub:
[ seahub database ] seahub-db
verifying user "sammy" access to database seahub-db ... done
---------------------------------
This is your configuration
---------------------------------
server name: Seafile
server ip/domain: example.com
seafile data dir: /home/sammy/seafile/seafile-data
fileserver port: 8082
database: use existing
ccnet database: ccnet-db
seafile database: seafile-db
seahub database: seahub-db
database user: sammy
--------------------------------
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.
SeafileをApacheの背後で実行するため、ファイアウォールでポート8082および8000を開く必要はないため、出力のこの部分は無視してかまいません。
サーバーの初期構成が完了しました。 次のステップでは、Seafileサービスを開始する前にApacheWebサーバーを構成します。
ステップ4—ApacheWebサーバーの構成
このステップでは、すべてのリクエストをSeafileに転送するようにApacheWebサーバーを構成します。 この方法でApacheを使用すると、ポート番号なしでURLを使用し、SeafileへのHTTPS接続を有効にし、Apacheが提供するキャッシュ機能を利用してパフォーマンスを向上させることができます。
リクエストの転送を開始するには、Apache構成でproxy_httpモジュールを有効にする必要があります。 このモジュールは、HTTPおよびHTTPS要求をプロキシするための機能を提供します。 次のコマンドは、モジュールを有効にします。
sudo a2enmod proxy_http
注: Apache rewriteおよびsslモジュールもこのセットアップに必要です。 前提条件のセクションにリストされている2番目のApacheチュートリアルで、Let's Encryptを構成する一環として、これらのモジュールをすでに有効にしています。
次に、example.comの仮想ホスト構成を更新して、リクエストをSeafileファイルサーバーとSeahubWebインターフェイスに転送します。
テキストエディタで設定ファイルを開きます。
sudo nano /etc/apache2/sites-enabled/example.com-le-ssl.conf
ServerAdminからSSLCertificateKeyFileまでの行は、前提条件の一部として設定したApache andLet'sEncryptの初期構成の一部です。 Aliasで始まり、ProxyPassReverseディレクティブで終わる、強調表示されたコンテンツを追加します。
/etc/apache2/sites-enabled/example.com-le-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/html
ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Alias /media /home/sammy/seafile/seafile-server-latest/seahub/media
<Location /media>
Require all granted
</Location>
# seafile fileserver
ProxyPass /seafhttp http://127.0.0.1:8082
ProxyPassReverse /seafhttp http://127.0.0.1:8082
RewriteEngine On
RewriteRule ^/seafhttp - [QSA,L]
# seahub web interface
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
ProxyPass / http://127.0.0.1:8000/
ProxyPassReverse / http://127.0.0.1:8000/
</VirtualHost>
</IfModule>
Aliasディレクティブは、URLパスexample.com/mediaをSeafileが使用するファイルシステムのローカルパスにマップします。 次のLocationディレクティブは、このディレクトリのコンテンツへのアクセスを有効にします。 ProxyPassおよびProxyPassReverseディレクティブにより、Apacheはこのホストのリバースプロキシとして機能し、/および/seafhttpへのリクエストをSeafileWebインターフェイスおよびファイルサーバーに転送します。ローカルホストポート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/sammy/seafile/conf/ccnet.conf
ファイルのSERVICE_URL設定を変更して、ポート番号なしで新しいHTTPSURLを指すようにします。次に例を示します。
/home/sammy/seafile/conf/ccnet.confを更新します
SERVICE_URL = https://example.com
コンテンツを追加したら、ファイルを保存して終了します。
次に、テキストエディタでseahub_settings.pyを開きます。
nano /home/sammy/seafile/conf/seahub_settings.py
これで、ファイルにFILE_SERVER_ROOT設定を追加して、ファイルサーバーがファイルのアップロードとダウンロードをリッスンするパスを指定できます。
/home/sammy/seafile/conf/seahub_settings.pyを更新します
# -*- coding: utf-8 -*- SECRET_KEY = "..." FILE_SERVER_ROOT = 'https://example.com/seafhttp' # ...
seahub_settings.pyを保存して終了します。
これで、SeafileサービスとSeahubインターフェイスを開始できます。
cd /home/sammy/seafile/seafile-server-6.3.4 ./seafile.sh start ./seahub.sh start
Seahubサービスを開始するのはこれが初めてなので、管理者アカウントを作成するように求められます。 この管理者ユーザーの有効なメールアドレスとパスワードを入力してください。
OutputWhat is the email for the admin account? [ admin email ] [email protected] What is the password for the admin account? [ admin password ] password-here Enter the password again: [ admin password again ] password-here ---------------------------------------- Successfully created seafile admin ---------------------------------------- Seahub is started Done.
Webブラウザでhttps://example.comを開き、Seafile管理者の電子メールアドレスとパスワードを使用してログインします。
正常にログインすると、管理インターフェイスにアクセスしたり、新しいユーザーを作成したりできます。
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/sammy/seafile/seafile-server-latest/seafile.sh start ExecStop=/home/sammy/seafile/seafile-server-latest/seafile.sh stop User=sammy Group=sammy [Install] WantedBy=multi-user.target
ここで、ExectStartおよびExecStop行は、Seafileサービスを開始および停止するために実行されるコマンドを示しています。 このサービスは、sammyをUserおよびGroupとして実行します。 After行は、ネットワークとMariaDBサービスが開始された後にSeafileサービスが開始されることを指定します。
seafile.serviceを保存して終了します。
SeahubWebインターフェイス用の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/sammy/seafile/seafile-server-latest/seahub.sh start ExecStop=/home/sammy/seafile/seafile-server-latest/seahub.sh stop User=sammy Group=sammy [Install] WantedBy=multi-user.target
seahub.serviceを保存して終了します。
systemdユニットファイルの詳細については、Systemdユニットとユニットファイルについてチュートリアルをご覧ください。
最後に、SeafileサービスとSeahubサービスの両方を起動時に自動的に開始できるようにするには、次のコマンドを実行します。
sudo systemctl enable seafile.service sudo systemctl enable seahub.service
サーバーを再起動すると、Seafileが自動的に起動します。
この時点で、サーバーのセットアップが完了し、各サービスをテストできるようになりました。
ステップ7—ファイルの同期と共有機能のテスト
このステップでは、セットアップしたサーバーのファイル同期および共有機能をテストし、それらが正しく機能していることを確認します。 これを行うには、Seafileクライアントプログラムを別のコンピューターやモバイルデバイスにインストールする必要があります。
Seafile Webサイトのダウンロードページにアクセスし、指示に従って最新バージョンのプログラムをコンピューターにインストールします。 Seafileクライアントは、Linux(Ubuntu、Debian、Fedora、Centos / RHEL、Arch Linux)、MacOS、およびWindowsのさまざまなディストリビューションで利用できます。 モバイルクライアントは、それぞれのアプリストアからAndroidおよびiPhone/iPadデバイスで利用できます。
Seafileクライアントをインストールしたら、ファイルの同期および共有機能をテストできます。
コンピュータまたはデバイスでSeafileクライアントプログラムを開きます。 Seafileフォルダーのデフォルトの場所を受け入れて、次へをクリックします。
次のウィンドウで、サーバーアドレス、ユーザー名、パスワードを入力し、ログインをクリックします。
ホームページで、マイライブラリを右クリックし、このライブラリを同期をクリックします。 コンピューターまたはデバイス上の場所のデフォルト値を受け入れます。
マイライブラリフォルダにドキュメントや写真などのファイルを追加します。 しばらくすると、ファイルがサーバーにアップロードされます。 次のスクリーンショットは、[X43X]マイライブラリフォルダにコピーされたファイルphoto.jpgを示しています。
次に、https://example.comでWebインターフェイスにログインし、ファイルがサーバーに存在することを確認します。
ファイルの横にある共有をクリックして、共有できるこのファイルのダウンロードリンクを生成します。
ファイル同期が正しく機能していること、およびSeafileを使用して複数のデバイスからファイルとフォルダーを同期および共有できることを確認しました。
結論
このチュートリアルでは、Seafileサーバーのプライベートインスタンスを設定します。 これで、サーバーを使用してファイルを同期し、ユーザーとグループを追加し、外部サービスに依存することなく、それらの間またはパブリックとファイルを共有できます。
サーバーの新しいリリースが利用可能になったら、アップグレードを実行する手順について、マニュアルのupgradeセクションを参照してください。