序章

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

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

前提条件

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

  • このDebian10 の初期サーバーセットアップのチュートリアルに従って、2GB以上のRAMをセットアップした1台のDebian 10サーバー(sudo非rootユーザーとファイアウォールを含む)。

  • Debian 10にApacheWebサーバーをインストールする方法に従って、登録済みドメイン用に仮想ホストが構成されたApacheWebサーバー。 このガイドに従うときは、必ずドメイン名を指す仮想ホストを設定してください。

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

  • このDebian10チュートリアルでLet’sEncryptを使用してApacheを保護する方法に従ってサーバーにインストールされたSSL証明書。

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

  • 次の両方のDNSレコードがサーバー用に設定されています。 それらを追加する方法の詳細については、この DigitalOceanDNSの紹介に従ってください。

    • サーバーのパブリックIPアドレスを指すyour_domainのAレコード。
    • サーバーのパブリックIPアドレスを指すwww.your_domainのAレコード。

ステップ1—Seafileコンポーネントのデータベースを作成する

Seafileが正しく機能するには、次の3つのコンポーネントが必要です。

  • Seahub DjangoWebフレームワークを使用してPythonで記述されたSeafileのWebフロントエンド。 Seahubから、Webブラウザーを使用してファイルにアクセス、管理、および共有できます。
  • Seafileサーバー:rawファイルのアップロード、ダウンロード、および同期を管理するデータサービスデーモン。 サーバーと直接対話するのではなく、クライアントプログラムまたはSeahubWebインターフェイスを使用します。
  • Ccnetサーバー:Seafileのさまざまなコンポーネント間の内部通信を可能にするRPCサービスデーモン。 たとえば、Seahubを使用すると、CcnetRPCサービスを使用してSeafileサーバーからデータにアクセスできます。

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

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

ssh sammy@your_server_ip

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

  1. sudo mysql

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

  1. CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

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

  • Ccnetサーバーの場合はccnet-db
  • SeahubWebフロントエンドのseahub-db
  • Seafileファイルサーバーの場合はseafile-db

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

  1. CREATE DATABASE 'ccnet-db' CHARACTER SET = 'utf8';
  2. CREATE DATABASE 'seafile-db' CHARACTER SET = 'utf8';
  3. CREATE DATABASE 'seahub-db' CHARACTER SET = 'utf8';

次に、データベースユーザーにすべての権限を付与して、これらのデータベースにアクセスして変更を加えます。

  1. GRANT ALL PRIVILEGES ON 'ccnet-db'.* to 'sammy'@localhost;
  2. GRANT ALL PRIVILEGES ON 'seafile-db'.* to 'sammy'@localhost;
  3. GRANT ALL PRIVILEGES ON 'seahub-db'.* to 'sammy'@localhost;

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

  1. exit

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

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

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

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

  1. 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を使用してインストールしてください。

  1. sudo pip install Pillow moviepy

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

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

  1. mkdir seafile
  2. cd seafile

次のコマンドを実行して、プロジェクトのWebサイトからSeafileサーバーの最新バージョン(この記事の執筆時点では7.0.4)をダウンロードできるようになりました。

  1. wget https://download.seadrive.org/seafile-server_7.0.4_x86-64.tar.gz

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

  1. tar -zxvf seafile-server_7.0.4_x86-64.tar.gz

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

  1. cd seafile-server-7.0.4

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

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

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

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

  1. 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

Question 2には、この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 ] your_domain

ENTERを押して、Question 3のデフォルト値を受け入れます。 たとえば、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を押すと、hostportのデフォルト値を受け入れることができます。


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-dbseafile-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 "sammyFor this tutorial you have" access to database seahub-db ...  done

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

    server name:            Seafile
    server ip/domain:       your_domain

    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を押して確認します。

Output
Generating 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サービスを開始する前にApacheWebサーバーを構成します。

ステップ4—ApacheWebサーバーの構成

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

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

  1. sudo a2enmod proxy_http

注: Apache rewriteおよびsslモジュールもこのセットアップに必要です。 前提条件のセクションにリストされている2番目のApacheチュートリアルで、Let’s Encryptを構成する一環として、これらのモジュールをすでに有効にしています。

次に、your_domainの仮想ホスト構成を更新して、リクエストをSeafileファイルサーバーとSeahubWebインターフェイスに転送します。

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

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

ServerAdminからSSLCertificateKeyFileまでの行は、前提条件のチュートリアルで設定したApacheおよびLet’sEncryptの初期構成の一部です。 Aliasで始まり、ProxyPassReverseディレクティブで終わる、強調表示されたコンテンツを追加します。

/etc/apache2/sites-enabled/your_domain-le-ssl.conf

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

	Include /etc/letsencrypt/options-ssl-apache.conf
	SSLCertificateFile /etc/letsencrypt/live/your_domain/fullchain.pem
	SSLCertificateKeyFile /etc/letsencrypt/live/your_domain/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パスyour_domain/mediaをSeafileが使用するファイルシステムのローカルパスにマップします。 次のLocationディレクティブは、このディレクトリのコンテンツへのアクセスを有効にします。 ProxyPassおよびProxyPassReverseディレクティブにより、Apacheはこのホストのリバースプロキシとして機能し、/および/seafhttpへのリクエストをSeafileWebインターフェイスおよびファイルサーバーに転送します。ローカルホストポート8000および8082でそれぞれ実行されます。 RewriteRuleディレクティブは、すべての要求を変更せずに/seafhttpに渡し、それ以降のルール([QSA,L])の処理を停止します。

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

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

  1. sudo apache2ctl configtest

Syntax OKと報告されている場合は、構成に問題はありません。 変更を有効にするには、Apacheを再起動します。

  1. sudo systemctl restart apache2

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

ステップ5—Seafileの構成を更新してサービスを開始する

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

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

  1. nano /home/sammy/seafile/conf/ccnet.conf

ファイルの先頭近くの[General]ブロック内には、SERVICE_URLディレクティブがあります。 次のようになります。

/home/sammy/seafile/conf/ccnet.confを更新します
. . .
SERVICE_URL=http://www.example.com:8000
. . .

ドメインを指すようにこの設定を変更します。 指定するURLがHTTPSプロトコルを使用していること、およびポート番号が含まれていないことを確認してください。

/home/sammy/seafile/conf/ccnet.confを更新します
. . .
SERVICE_URL = https://your_domain
. . .

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

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

  1. 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://your_domain/seafhttp'
# ...

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

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

  1. cd /home/sammy/seafile/seafile-server-7.0.4
  2. ./seafile.sh start
  3. ./seahub.sh start

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

Output
What is the email for the admin account? [ admin email ] admin@your_email_domain 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://your_domainを開き、Seafile管理者の電子メールアドレスとパスワードを使用してログインします。

Login screen of the Seafile web interface

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

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

ステップ6—Seafileサーバーがシステム起動時に起動できるようにする

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

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

  1. 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サービスを開始および停止するために実行されるコマンドを示しています。 このサービスは、sammyUserおよびGroupとして実行します。 After行は、ネットワークとMariaDBサービスが開始された後にSeafileサービスが開始されることを指定します。

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

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

  1. 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サービスの両方を起動時に自動的に開始できるようにするには、次のコマンドを実行します。

  1. sudo systemctl enable seafile.service
  2. 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フォルダーのデフォルトの場所を受け入れて、次へをクリックします。

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

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

Seafile client — Sync the default library

マイライブラリフォルダにドキュメントや写真などのファイルを追加します。 しばらくすると、ファイルがサーバーにアップロードされます。 次のスクリーンショットは、[X43X]マイライブラリ