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

著者は、Write for DOnationsプログラムの一部として寄付を受け取るためにWikimedia Foundation Inc.を選択しました。

前書き

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

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

前提条件

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

  • このInitial Server Setup for Ubuntu 18.04チュートリアルに従って、sudo非rootユーザーとファイアウォールを含む2GB以上のRAMをセットアップした1台のUbuntu18.04サーバー。

  • How To Install the Apache Web Server on Ubuntu 18.04に従って、登録済みドメイン用に構成された仮想ホストを備えたApacheWebサーバー。

  • このHow To Secure Apache with Let’s Encrypt on Ubuntu 18.04チュートリアルに従って、サーバーにインストールされたSSL証明書。

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

  • 次の両方のDNSレコードがサーバーに設定されています。 それらを追加する方法の詳細については、このintroduction to DigitalOcean DNSをたどることができます。

    • サーバーのパブリックIPアドレスを指すexample.comを含むAレコード。

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

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

[[step-1 -—- creating-databases-for-the-seafile-components]] ==ステップ1—Seafileコンポーネントのデータベースの作成

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

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

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

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

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

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

ssh [email protected]_server_ip

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

sudo mysql

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

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

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

  • Ccnetサーバーのccnet-db

  • Seahub Webフロントエンドのseahub-db

  • Seafileファイルサーバーのseafile-db

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

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と入力して、MySQLプロンプトを終了します。

exit

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

[[step-2 -—- installing-dependencies-and-downloading-seafile]] ==ステップ2—依存関係のインストールとSeafileのダウンロード

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

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

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

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

Seafileに必要なpillowおよびmoviepy Pythonモジュールは、Ubuntuパッケージリポジトリでは利用できません。 pipを使用して手動でインストールします。

sudo pip install pillow moviepy

Seafileには、画像処理用のPythonライブラリであるpillowと、ムービーファイルのサムネイルを処理するためのmoviepyが必要です。

[。注意]##

NOTE:新しいバージョンがリリースされたら、これらのパッケージを手動でアップグレードする必要もあります。 アップグレードするコマンドは次のとおりです。

sudo pip install --upgrade pillow moviepy

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

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

mkdir seafile
cd seafile

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

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サーバーを構成する準備ができました。

[[step-3 -—- configuring-the-seafile-server]] ==ステップ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は、MySQLデータベースサーバーに関するものです。 手順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-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 "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  | stop | restart  }
-----------------------------------------------------------------
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を実行するため、ファイアウォールでポート80828000を開く必要はないため、出力のこの部分は無視してかまいません。

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

[[step-4 -—- configuring-the-apache-web-server]] ==ステップ4— ApacheWebサーバーの構成

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

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

sudo a2enmod proxy_http

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

次に、example.comの仮想ホスト構成を更新して、要求をSeafileファイルサーバーとSeahubWebインターフェイスに転送します。

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

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

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

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



    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
    
        Require all granted
    

    # 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/

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

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

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

sudo apache2ctl configtest

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

sudo systemctl restart apache2

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

[[step-5 -—- updating-seafile-39-s-configuration-and-starting-services]] ==ステップ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管理者の電子メールアドレスとパスワードを使用してログインします。

Login screen of the Seafile web interface

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

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

[[step-6 -—- enable-the-seafile-server-to-start-at-system-boot]] ==ステップ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サービスを開始および停止するために実行されるコマンドを示しています。 サービスは、sammyUserおよびGroupとして実行されます。 After行は、ネットワークおよびMySQLサービスが開始された後に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/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ユニットファイルの詳細については、Understanding Systemd Units and Unit Filesチュートリアルをご覧ください。

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

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

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

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

[[step-7 -—- testing-file-syncing-and-sharing-functionality]] ==ステップ7—ファイルの同期と共有機能のテスト

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

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

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

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

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

ホームページで、My Libraryを右クリックし、Sync this libraryをクリックします。 コンピューターまたはデバイスの場所のデフォルト値を受け入れます。

Seafile client — Sync the default library

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

Add a file to the default library from the computer

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

My Library page to verify file sync

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

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

結論

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

サーバーの新しいリリースが利用可能になったら、アップグレードを実行する手順について、マニュアルのupgradeセクションを参照してください。

Related