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サーバーです。

  1. 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で次のコマンドを入力する必要があることです。

  1. sudo apt-get install postfix mailutils

それよりも:

  1. sudo apt-get install mailutils

それ以外の場合は、Postfixの代わりにDebianのデフォルトのメールサーバーであるEximがインストールされます。 Eximは構成がより複雑であり、Booktypeから通知を送信するために必要ではありません。

ステップ2— PDFレンダラーのインストール(オプション)

印刷された本を作成する場合は、BooktypeのHTMLチャプターを単一のPDFファイルに変換するレンダラーが必要になります。 プリプレス機能を幅広くサポートしているPHPアプリケーションmPDF6.0をお勧めします。 mPDFをインストールする前に、PHP用のコマンドラインインタープリターとunzipユーティリティを次のコマンドでインストールする必要があります。

  1. sudo apt-get install php5-cli unzip

次に、mPDFをダウンロードし、ディレクトリ/var/www/に解凍します。

  1. sudo wget http://mpdf1.com/repos/MPDF60.zip
  2. sudo unzip MPDF60.zip -d /var/www/

ファイルが非常に大きいため、ダウンロードに時間がかかる場合があります。

最後に、mPDFの一時ディレクトリの所有者をApacheWebサーバーユーザーwww-dataに変更します。

  1. cd /var/www/mpdf60/
  2. sudo chown www-data.www-data graph_cache/ tmp/ ttfontdata/

ステップ3—データベースのセットアップ

次に必要なのは、利用できるデータベースです。 次のコマンドを入力して、PostgreSQLユーザーbooktype-userを作成します。

  1. sudo -u postgres createuser -SDRP booktype-user

プロンプトが表示されたら、データベースに設定するパスワードを入力します。 確認のために再入力する必要があります。

注:パスワードを安全な場所に書き留めてください。 ステップ5—ブックタイプインスタンスの作成で再度必要になります。

次に、booktype-dbという名前のデータベースを作成し、booktype-userを所有者として設定します。 -Eオプションで示されているように、エンコーディングは国際UTF-8文字セットである必要があります。

  1. sudo -u postgres createdb -E utf8 -O booktype-user booktype-db

注: PostgreSQLユーザーを作成するためのコマンドラインオプションは、数字のゼロではなく、文字O(-O)です。

注:別のデータベース名または所有者を使用している場合は、それを書き留めてください。 後でステップ5—dev.pyを編集するときにブックタイプインスタンスを作成するときに必要になります。

nanoエディターでPostgreSQL構成ファイルをチェックして、データベースbooktype-dbへの接続が許可されていることを確認します。

  1. 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/ディレクトリにダウンロードします。

  1. sudo mkdir /usr/local/src/booktype/
  2. sudo git clone https://github.com/sourcefabric/Booktype.git --branch 2.0 --depth 1 /usr/local/src/booktype/

次に、開発インストールと本番インストールの両方の要件をインストールして、次のいずれかを使用できるようにします。

  1. sudo pip install -r /usr/local/src/booktype/requirements/dev.txt
  2. sudo pip install -r /usr/local/src/booktype/requirements/prod.txt

ステップ5—ブックタイプインスタンスを作成する

1つのBooktypeサーバーで、複数のインスタンスをホストできます。各インスタンスには、著者、グループ、および書籍の独自のコミュニティがあります。 これにより、関係のない作成者を投げたり、汎用プラットフォームでプロジェクトをまとめたりするのではなく、特定の関心事のために個別の環境を作成できます。

/var/www/booktype/などのBooktypeインスタンス用のディレクトリを作成します。

  1. sudo mkdir /var/www/booktype/

Webサーバーを実行するwww-dataユーザーが所有していることを確認してください。

  1. sudo chown www-data:www-data /var/www/booktype/

デフォルトでは、Debian8.2はユーザーwww-dataがコマンドを入力することを許可していません。 続行するには、/etc/passwdファイルのwww-dataの行を編集する必要があります。

  1. 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インスタンスの作成を開始します。

  1. sudo su www-data

/var/www/booktype/instance1ディレクトリにdevプロファイルとpostgresqlデータベースを使用して最初のBooktypeインスタンスを作成します。

  1. cd /usr/local/src/booktype/scripts/
  2. ./createbooktype -p dev --check-versions --database postgresql /var/www/booktype/instance1

作成したばかりのインスタンスディレクトリに移動し、インスタンスの基本設定を含むbase.pyファイルを編集します。

  1. cd /var/www/booktype/instance1/
  2. 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ファイルを編集します。

  1. 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プロファイルに切り替えることができます。

環境変数をロードします。

  1. . ./booktype.env

データベースを初期化します。

  1. ./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コンポーネントアプリケーションから静的ファイルを単一のディレクトリに収集します。

  1. ./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アプリケーションを取得し、それらの権限を更新してから、登録済みおよび匿名ユーザーのデフォルトの役割を更新します。

  1. ./manage.py update_permissions
  2. ./manage.py update_default_roles

これでインストールは完了です。 次のコマンドを使用して、ターミナルで通常の非rootsudoユーザープロンプトに戻ります。

  1. exit

www-dataユーザーとしてコマンドを入力しなくなりました。

ステップ6—Apacheの構成

インスタンスの作成中に生成されたwsgi.apacheファイルを仮想ホストのApache構成ディレクトリにコピーします。

  1. sudo cp /var/www/booktype/instance1/conf/wsgi.apache /etc/apache2/sites-available/booktype-instance1.conf

インスタンスの仮想ホスト構成ファイルを編集します。

  1. sudo nano /etc/apache2/sites-available/booktype-instance1.conf

少なくともServerNameSetEnv 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仮想ホストを有効にします。

  1. sudo a2dissite 000-default.conf
  2. sudo a2ensite booktype-instance1.conf

次のコマンドで変更を有効にするには、ApacheWebサーバーを再起動します。

  1. sudo service apache2 restart

これで、booktype.example.comなどのVirtualHost構成で定義されたServerNameのURLでBooktypeインスタンスを参照できるようになります。 Djangoデバッグツールバーの上部をクリックして非表示にします(prodプロファイルを使用している場合、このツールバーは表示されません)。

The Django debug toolbar can be hidden from view by clicking on it

注:ブラウザウィンドウの右上隅にあるドロップダウンメニューからインターフェイス言語を選択できます。

以前に作成したスーパーユーザーアカウントの詳細(この例ではadmin)を使用してBooktypeにサインインします。

Booktype login dialog

サインインすると、スーパーユーザーのメールアドレスに関連付けられているGravatarがPeopleおよびMyProfileボックスに表示されます。

Booktype homepage

ステップ7—スーパーバイザーと一緒にCeleryを実行する

Celery は、Booktypeサーバーによって使用されるタスクキューです。 Booktypeをインストールしたら、クラッシュや再起動が発生した場合にCeleryワーカーを実行し続けるために、プロセスモニターが必要になる可能性があります。 次のコマンドでsupervisordをインストールできます。

  1. sudo apt-get install supervisor

supervisordプログラムは、インストール後に自動的に起動し、サーバーの次回の再起動時に自動的に起動するように構成されています。

次に、次のコマンドを使用してBooktypeとCeleryで使用する構成ファイルを作成する必要があります。

  1. sudo nano /etc/supervisor/conf.d/booktype-instance1.conf

/var/www/booktype/instance1に10個のワーカーがある最初の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で保存し、nanoCtrl+Xで終了した後、次のコマンドを使用してsupervisord構成の更新を有効にします。

  1. sudo supervisorctl reread
  2. sudo supervisorctl update

supervisorctlプログラムを使用して、supervisordcelerydを実行していることを確認することもできます。

  1. sudo supervisorctl

このコマンドの出力は次のようになります。

Output of sudo supervisorctl
celeryd RUNNING pid 24182, uptime 0:13:19

次のプロンプトも表示されます。

supervisor>

次のコマンドを入力して、supervisorctlを終了します。

  1. quit

結論

これで、あなたとあなたのチームは、一緒に本を書き、出版し始めるために必要なすべてを手に入れました! 使用方法の詳細については、公式ブックタイプマニュアルをお読みください。