著者は、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つのコンポーネントは次のとおりです。
-
Seahub:DjangoWebフレームワークを使用してPythonで記述されたSeafileのWebフロントエンド。 Seahubから、Webブラウザを使用してファイルにアクセス、管理、共有できます。
-
Seafile server:rawファイルのアップロード、ダウンロード、および同期を管理するデータサービスデーモン。 サーバーと直接対話するのではなく、クライアントプログラムの1つまたはSeahub Webインターフェイスを使用します。
-
Ccnet server:Seafileのさまざまなコンポーネント間の内部通信を有効にするRPCサービスデーモン。 たとえば、Seahubを使用すると、Ccnet RPCサービスを使用してSeafileサーバーのデータにアクセスできます。
これらの各コンポーネントは、独自のデータベースにデータを個別に保存します。 このステップでは、サーバーのセットアップに進む前に、3つのMySQLデータベースとユーザーを作成します。
まず、ユーザー名とIPアドレスを使用してSSHを使用してサーバーにログインします。
ssh sammy@your_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-setuptools
とpython-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-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 | 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を実行するため、ファイアウォールでポート8082
と8000
を開く必要はないため、出力のこの部分は無視してかまいません。
サーバーの初期構成が完了しました。 次のステップでは、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インターフェイスおよびファイルサーバーに転送します。それぞれ8000
と8082
をポートします。 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管理者の電子メールアドレスとパスワードを使用してログインします。
正常にログインしたら、管理インターフェイスにアクセスするか、新しいユーザーを作成できます。
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サービスを開始および停止するために実行されるコマンドを示しています。 サービスは、sammy
をUser
および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をクリックします。 コンピューターまたはデバイスの場所のデフォルト値を受け入れます。
ドキュメントや写真などのファイルをMy Libraryフォルダーに追加します。 しばらくすると、ファイルがサーバーにアップロードされます。 次のスクリーンショットは、マイライブラリフォルダーにコピーされたファイルphoto.jpgを示しています。
次に、https://example.com
でWebインターフェイスにログインし、ファイルがサーバーに存在することを確認します。
ファイルの横にあるShareをクリックして、共有できるこのファイルのダウンロードリンクを生成します。
ファイルの同期が正しく機能していること、およびSeafileを使用して複数のデバイスのファイルとフォルダーを同期および共有できることを確認しました。
結論
このチュートリアルでは、Seafileサーバーのプライベートインスタンスを設定します。 これで、外部サービスに依存することなく、サーバーの使用を開始して、ファイルの同期、ユーザーとグループの追加、ファイルの共有または一般との共有を行うことができます。
サーバーの新しいリリースが利用可能になったら、アップグレードを実行する手順について、マニュアルのupgradeセクションを参照してください。