Debian8でBooktypeを使用して本を公開する方法
Sourcefabricからの記事
序章
Booktype は、手に持つことができる本物の見栄えの良い本を含む、本の制作に特化したコンテンツ管理システムです。
書店やオープンウェブですぐに使えるPDF、EPUB、MOBI、XML、HTML形式のBooktype出力を作成できます。 著者は、既存の原稿をWordの.docx形式またはEPUBとしてインポートできます。これらは、Alohaで編集するためにBooktypeのネイティブHTMLチャプター形式に変換されます。
Booktypeは、著者が本を作成しながらチャットしたりメモを共有したり、他の人に支援を求めたり、貢献するプロジェクトを探したりできる社会環境でもあります。 BooktypeはPythonで記述されたDjangoアプリケーションであり、 GNU Affero GPL の下でライセンスされているフリーソフトウェアです。つまり、自由にダウンロード、再利用、カスタマイズできます。
Booktypeは、適切なGNU/LinuxまたはAppleOSXサーバーにインストールでき、原則としてWindowsでも実行できますが、このチュートリアルでは、Debian安定バージョン8.2(Jessie)の推奨プラットフォームに焦点を当てています。 書籍の執筆および編集中、作成者はMozillaFirefoxやGoogleChromeなどの最新のWebブラウザを備えた任意のデバイスを使用できます。
このチュートリアルでは、Booktypeのインストールについて説明します。これにより、あなたと同僚は、印刷と画面用のPDFブック、デジタルデバイス用のEPUB、およびWebサイト用のXHTMLをすべて単一のソースから作成できます。 Booktypeの可能性を深く知りたい場合は、ここから始めるのがよいでしょう。 このチュートリアルでは、Booktype2.0について説明します。
前提条件
このチュートリアルに従うには、次のものが必要です。
- 新しいDebian8.2ドロップレット(512 MB / 1 CPUドロップレットは機能しますが、パフォーマンスを向上させるために1 GB / 1 CPUドロップレットをお勧めします)
- Debian 8を使用した初期サーバーセットアップに示されているように、Droplet上のroot以外のsudoユーザー
- 登録ドメイン名
- booktype。yourdomainname.comをドロップレットにポイントします( DigitalOcean でホスト名を設定する方法では、これを設定する方法について説明しています)。
ステップ1—依存関係を設定する
Booktypeをインストールする前に、まず開発パッケージをインストールする必要があります。RabbitMQサーバー、Redisサーバー、PostgreSQLデータベース管理システム、整頓された構文チェッカー、およびWSGIモジュールを備えたApacheWebサーバーです。
sudo apt-get install git-core python-dev python-pip libjpeg-dev libpq-dev libxml2-dev libxslt-dev rabbitmq-server redis-server postgresql tidy apache2-mpm-prefork libapache2-mod-wsgi
Booktypeが作成者に電子メール通知を送信できるようにする場合は、SMTPメールサーバーも利用可能である必要があります。 最も簡単な送信メールサーバーのセットアップは、チュートリアル Ubuntu14.04でPostfixを送信専用SMTPサーバーとしてインストールおよび構成する方法に示されています。 Debian 8.2(Ubuntu 14.04ではなく)の唯一の違いは、ステップ1で次のコマンドを入力する必要があることです。
sudo apt-get install postfix mailutils
それよりも:
sudo apt-get install mailutils
それ以外の場合は、Postfixの代わりにDebianのデフォルトのメールサーバーであるEximがインストールされます。 Eximは構成がより複雑であり、Booktypeから通知を送信するために必要ではありません。
ステップ2— PDFレンダラーのインストール(オプション)
印刷された本を作成する場合は、BooktypeのHTMLチャプターを単一のPDFファイルに変換するレンダラーが必要になります。 プリプレス機能を幅広くサポートしているPHPアプリケーションmPDF6.0をお勧めします。 mPDFをインストールする前に、PHP用のコマンドラインインタープリターとunzipユーティリティを次のコマンドでインストールする必要があります。
sudo apt-get install php5-cli unzip
次に、mPDFをダウンロードし、ディレクトリ/var/www/
に抽出します。
sudo wget http://mpdf1.com/repos/MPDF60.zip sudo unzip MPDF60.zip -d /var/www/
ファイルが非常に大きいため、ダウンロードに時間がかかる場合があります。
最後に、mPDFの一時ディレクトリの所有者をApacheWebサーバーユーザーwww-data
に変更します。
cd /var/www/mpdf60/ sudo chown www-data.www-data graph_cache/ tmp/ ttfontdata/
ステップ3—データベースのセットアップ
次に必要なのは、利用できるデータベースです。 次のコマンドを入力して、PostgreSQLユーザーbooktype-user
を作成します。
sudo -u postgres createuser -SDRP booktype-user
プロンプトが表示されたら、データベースに設定するパスワードを入力します。 確認のために再入力する必要があります。
注:パスワードを安全な場所に書き留めてください。 ステップ5—ブックタイプインスタンスの作成で再度必要になります。
次に、booktype-db
という名前のデータベースを作成し、booktype-user
を所有者として設定します。 -E
オプションで示されているように、エンコーディングは国際UTF-8文字セットである必要があります。
sudo -u postgres createdb -E utf8 -O booktype-user booktype-db
注: PostgreSQLユーザーを作成するためのコマンドラインオプションは、数字のゼロではなく、文字O(-O
)です。
注:別のデータベース名または所有者を使用している場合は、それを書き留めてください。 後でステップ5—dev.py
を編集するときにブックタイプインスタンスを作成するときに必要になります。
nano
エディターでPostgreSQL構成ファイルをチェックして、データベースbooktype-db
への接続が許可されていることを確認します。
sudo nano /etc/postgresql/9.4/main/pg_hba.conf
ファイルの終わり近くに、クライアント認証ルールのセクションがあります。 次のようになります。
/etc/postgresql/9.4/main/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5
上記の例のセクションは、IPv4とIPv6の両方を介したPostgreSQLへのすべてのローカル接続がこのサーバーで許可されていることを示しているので、準備は完了です。 Ctrl+X
でnanoを終了します。
ステップ4—Gitを使用したBooktypeのインストール
.deb
パッケージはSourcefabricapt server から入手できますが、GitHubには入手可能な最新バージョンのBooktypeが含まれています。 Gitを使用すると、リリース間のバグ修正を追跡したり、Booktypeプロジェクトにプルリクエストを提供したりすることも簡単になります。 Booktype2.0のコピーをgitリポジトリから/usr/local/src/booktype/
ディレクトリにダウンロードします。
sudo mkdir /usr/local/src/booktype/ sudo git clone https://github.com/sourcefabric/Booktype.git --branch 2.0 --depth 1 /usr/local/src/booktype/
次に、開発インストールと本番インストールの両方の要件をインストールして、次のいずれかを使用できるようにします。
sudo pip install -r /usr/local/src/booktype/requirements/dev.txt sudo pip install -r /usr/local/src/booktype/requirements/prod.txt
ステップ5—ブックタイプインスタンスを作成する
1つのBooktypeサーバーで、複数のインスタンスをホストできます。各インスタンスには、著者、グループ、および書籍の独自のコミュニティがあります。 これにより、関係のない作成者を投げたり、汎用プラットフォームでプロジェクトをまとめたりするのではなく、特定の関心事のために個別の環境を作成できます。
/var/www/booktype/
などのBooktypeインスタンス用のディレクトリを作成します。
sudo mkdir /var/www/booktype/
Webサーバーを実行するwww-data
ユーザーが所有していることを確認してください。
sudo chown www-data:www-data /var/www/booktype/
デフォルトでは、Debian8.2はユーザーwww-data
がコマンドを入力することを許可していません。 続行するには、/etc/passwd
ファイルのwww-data
の行を編集する必要があります。
sudo nano /etc/passwd
次のように、www-data
ユーザーの/usr/sbin/nologin
を/bin/bash
に置き換えます。
www-data:x:33:33:www-data:/var/www:/bin/bash
Ctrl+X
でnanoを終了し、プロンプトが表示されたらファイルを保存します。
次に、www-data
に切り替えて、Booktypeインスタンスの作成を開始します。
sudo su www-data
/var/www/booktype/instance1
ディレクトリにdev
プロファイルとpostgresql
データベースを使用して最初のBooktypeインスタンスを作成します。
cd /usr/local/src/booktype/scripts/ ./createbooktype -p dev --check-versions --database postgresql /var/www/booktype/instance1
作成したばかりのインスタンスディレクトリに移動し、インスタンスの基本設定を含むbase.py
ファイルを編集します。
cd /var/www/booktype/instance1/ nano instance1_site/settings/base.py
このファイルには、インストールに合わせて編集する必要のあるセクションがいくつかあります。 まず、システム管理者の名前とメールアドレスを設定します。
base.py
ADMINS = ( # ('Your Name', '[email protected]'), )
とりあえず、開発のためにアクティブなプロファイルを'dev'
に設定します。
base.py
PROFILE_ACTIVE = 'dev'
Booktypeインスタンスのサイト名を入力します。
base.py
BOOKTYPE_SITE_NAME = 'Your Booktype Site'
通知とレポートを送信するときに使用する電子メールアドレスと、送信メールサーバーの詳細を入力します。 ドロップレットにPostfixをインストールしている場合は、メールサーバーのデフォルト値localhost
とポート25
を使用できます。
base.py
DEFAULT_FROM_EMAIL = '[email protected]' REPORT_EMAIL_USER = '[email protected]' EMAIL_HOST = 'localhost' EMAIL_PORT = 25
mPDFのインストールを選択した場合は、インストールディレクトリの場所を入力します。
base.py
MPDF_DIR = '/var/www/mpdf60/'
作成者が指定していない場合に使用するデフォルトの発行元の名前を入力します。
base.py
DEFAULT_PUBLISHER = "Your Publishing Company"
Redisをインストールしたばかりで、他の用途に使用しない場合は、REDIS STUFF
のデフォルトをそのままにしておくことができます。 ローカルRedisサーバーを使用するアプリケーションが複数ある場合は、REDIS_DB
の値をゼロ以外の数値に変更する必要があります。 REDIS_PASSWORD
のデフォルトはNoneですが、Redisサーバーでパスワードが必要な場合は、一重引用符または二重引用符で囲む必要があります。
base.py
# REDIS STUFF REDIS_HOST = 'localhost' REDIS_PORT = 6379 REDIS_DB = 0 REDIS_PASSWORD = None
インスタンスのタイムゾーンとデフォルトのインターフェース言語コードを設定します。
base.py
TIME_ZONE = 'Europe/Berlin' LANGUAGE_CODE = 'en-us'
著者は、フランス語やスペイン語など、インストールされているBooktypeローカリゼーションから独自のインターフェイス言語を選択できます。
ファイルを保存して終了します。
次に、/var/www/booktype/instance1/
ディレクトリにいる間に、Booktypeインスタンスの開発設定を含むdev.py
ファイルを編集します。
nano instance1_site/settings/dev.py
Booktype開発サーバーのドメイン名とURLを入力します。
dev.py
THIS_BOOKTYPE_SERVER = 'booktype.example.com' BOOKTYPE_URL='http://booktype.example.com'
データベース接続の名前、ユーザー、およびパスワードを設定します。 ユーザー名booktype-user
とPostgreSQLデータベース名booktype-db
は、ステップ3 —データベースのセットアップで使用したものと同じである必要があります。
次の例のようになります。
dev.py
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'booktype-db', 'USER': 'booktype-user', 'PASSWORD': 'booktype-password', 'HOST': 'localhost', 'PORT': '' } }
Ctrl+O
を押してファイルを保存し、Ctrl+X
を押してnano
エディターを終了します。
注: Booktypeインスタンスをデプロイする準備ができたら、開発プロファイルをテストに使用できるようにしながら、別のドメイン名とデータベースを持つprod
プロファイルに切り替えることができます。
環境変数をロードします。
. ./booktype.env
データベースを初期化します。
./manage.py syncdb
プロセスの最後に、次のように表示されます。 yes と答えて、スーパーユーザーを作成します。
You have installed Django's auth system, and don't have any superusers defined. Would you like to create one now? (yes/no): yes
プロンプトに従って必要な情報を入力します。
Username (leave blank to use 'www-data'): admin E-mail address: `[email protected]` Password: Password (again): Superuser created successfully.
Booktypeコンポーネントアプリケーションから静的ファイルを単一のディレクトリに収集します。
./manage.py collectstatic
サーバーは次のように応答します。
You have requested to collect static files at the destination location as specified in your settings: /var/www/booktype/instance1/static This will overwrite existing files! Are you sure you want to do this? Type 'yes' to continue, or 'no' to cancel:
yes
と入力し、ENTER
キーを押した後、次のコマンドを入力して、インストールされているすべてのDjangoアプリケーションを取得し、それらの権限を更新してから、登録済みおよび匿名ユーザーのデフォルトの役割を更新します。
./manage.py update_permissions ./manage.py update_default_roles
これでインストールは完了です。 次のコマンドを使用して、ターミナルで通常の非rootsudoユーザープロンプトに戻ります。
exit
www-data
ユーザーとしてコマンドを入力しなくなりました。
ステップ6—Apacheの構成
インスタンスの作成中に生成されたwsgi.apache
ファイルを仮想ホストのApache構成ディレクトリにコピーします。
sudo cp /var/www/booktype/instance1/conf/wsgi.apache /etc/apache2/sites-available/booktype-instance1.conf
インスタンスの仮想ホスト構成ファイルを編集します。
sudo nano /etc/apache2/sites-available/booktype-instance1.conf
少なくともServerName
とSetEnv HTTP_HOST
の値をサーバー用に構成されたドメイン名に変更し、ServerAdmin
の値を管理者の電子メールアドレスに変更する必要があります。
/etc/apache2/sites-available/booktype-instance1.conf
<VirtualHost *:80> # Change the following three lines for your server ServerName booktype.example.com SetEnv HTTP_HOST "booktype.example.com" ServerAdmin [email protected]
Debian8.2はApache2.4を備えているため、すべてのLocation
およびDirectory
スタンザのRequire all granted
のコメントを解除する必要があります。 Require all granted
行のコメントを解除するには、各行の先頭にある#文字を削除します。
/etc/apache2/sites-available/booktype-instance1.conf
<Location "/"> #Require all granted Options FollowSymLinks </Location> Alias /static/ "/var/www/booktype/instance1/static/" <Directory "/var/www/booktype/instance1/static/"> #Require all granted Options -Indexes </Directory> Alias /data/ "/var/www/booktype/instance1/data/" <Directory "/var/www/booktype/instance1/data/"> #Require all granted Options -Indexes </Directory>
Ctrl+O
を押してファイルを保存し、Ctrl+X
を押してnano
エディターを終了します。
次に、デフォルトのApache構成を無効にし、次のコマンドを使用してインスタンスのBooktype仮想ホストを有効にします。
sudo a2dissite 000-default.conf sudo a2ensite booktype-instance1.conf
次のコマンドで変更を有効にするには、ApacheWebサーバーを再起動します。
sudo service apache2 restart
これで、booktype.example.comなどのVirtualHost構成で定義されたServerName
のURLでBooktypeインスタンスを参照できるようになります。 Djangoデバッグツールバーの上部をクリックして非表示にします(prod
プロファイルを使用している場合、このツールバーは表示されません)。
注:ブラウザウィンドウの右上隅にあるドロップダウンメニューからインターフェイス言語を選択できます。
以前に作成したスーパーユーザーアカウントの詳細(この例ではadmin
)を使用してBooktypeにサインインします。
サインインすると、スーパーユーザーのメールアドレスに関連付けられているGravatarがPeopleボックスとMyProfileボックスに表示されます。
ステップ7—スーパーバイザーと一緒にCeleryを実行する
Celery は、Booktypeサーバーによって使用されるタスクキューです。 Booktypeをインストールしたら、クラッシュや再起動が発生した場合にCeleryワーカーを実行し続けるためのプロセスモニターが必要になる可能性があります。 次のコマンドでsupervisord
をインストールできます。
sudo apt-get install supervisor
supervisord
プログラムは、インストール後に自動的に起動し、サーバーの次回の再起動時に自動的に起動するように構成されています。
次に、次のコマンドを使用してBooktypeとCeleryで使用する構成ファイルを作成する必要があります。
sudo nano /etc/supervisor/conf.d/booktype-instance1.conf
10人のワーカーを持つ/var/www/booktype/instance1
の最初のBooktypeインスタンスの場合、ファイルbooktype-instance1.conf
の内容は次のようになります。
/etc/supervisor/conf.d/booktype-instance1.conf
[program:celeryd] command=/var/www/booktype/instance1/manage.py celery worker --concurrency=10 -l info autostart=true autorestart=true startretries=3 stderr_logfile=/var/www/booktype/instance1/logs/booktype-celery.error.log stdout_logfile=/var/www/booktype/instance1/logs/booktype-celery.output.log user=www-data
booktype-instance1.conf
ファイルをCtrl+O
で保存し、nano
をCtrl+X
で終了した後、次のコマンドを使用してsupervisord
構成の更新を有効にします。
sudo supervisorctl reread sudo supervisorctl update
supervisorctl
プログラムを使用して、supervisord
がceleryd
を実行していることを確認することもできます。
sudo supervisorctl
このコマンドの出力は次のようになります。
Output of sudo supervisorctlceleryd RUNNING pid 24182, uptime 0:13:19
次のプロンプトも表示されます。
supervisor>
次のコマンドを入力して、supervisorctl
を終了します。
quit
結論
これで、あなたとあなたのチームは、一緒に本を書き、出版し始めるために必要なすべてを手に入れました! 使用方法の詳細については、公式ブックタイプマニュアルをお読みください。