如何在Debian8上使用Booktype出版书籍
Sourcefabric的一篇文章
介绍
Booktype是一个专门的图书制作内容管理系统,包括可以拿在手里的真实好看的图书。
您可以生成 PDF、EPUB、MOBI、XML 和 HTML 格式的 Booktype 输出,以供书店或开放网络使用。 作者可以以 Word 的 .docx 格式或作为 EPUB 导入现有手稿,这些手稿将转换为 Booktype 的原生 HTML 章节格式,以便使用 Aloha 进行编辑。
Booktype 也是一个社交环境,作者可以在其中聊天和分享笔记,同时制作书籍、寻求他人的帮助或寻找可以贡献的项目。 Booktype 是一个用 Python 编写的 Django 应用程序,是根据 GNU Affero GPL 许可的自由软件,这意味着它可以免费下载、重用和定制。
Booktype 可以安装在任何合适的 GNU/Linux 或 Apple OS X 服务器上,原则上也可以在 Windows 上运行,但本教程重点介绍推荐的 Debian stable 8.2 版(Jessie)平台。 在编写和编辑书籍时,作者可以使用任何带有现代网络浏览器的设备,例如 Mozilla Firefox 或 Google Chrome。
在本教程中,我们将完成 Booktype 的安装,这将使您和您的同事能够制作用于印刷和屏幕的 PDF 书籍、用于数字设备的 EPUB 以及用于您的网站的 XHTML——所有这些都来自单一来源。 如果您想更深入地了解 Booktype 的可能性,这是一个很好的起点。 本教程涵盖 Booktype 2.0。
先决条件
要学习本教程,您将需要:
- 一个新的 Debian 8.2 Droplet(一个 512 MB/1 CPU Droplet 可以工作,但建议使用 1 GB/1 CPU Droplet 以获得更好的性能)
- Droplet 上的非 root sudo 用户,如 Initial Server Setup with Debian 8 中所示
- 注册域名
- 将 booktype.yourdomainname.com 指向您的 Droplet(How To Set Up a Host Name with DigitalOcean 说明了如何设置。)
第 1 步 - 设置依赖项
在安装 Booktype 之前,您首先需要安装开发包:RabbitMQ 服务器、Redis 服务器、PostgreSQL 数据库管理系统、tidy 语法检查器以及带有 WSGI 模块的 Apache Web 服务器:
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 邮件服务器。 教程 How To Install and Configure Postfix as a Send-Only SMTP Server on Ubuntu 14.04 中展示了最简单的外发邮件服务器设置。 Debian 8.2(而不是 Ubuntu 14.04)的唯一区别是在 Step 1 中您应该输入命令:
sudo apt-get install postfix mailutils
而不是:
sudo apt-get install mailutils
否则,将安装 Debian 的默认邮件服务器 Exim 来代替 Postfix。 Exim 的配置更复杂,并且不需要从 Booktype 发送通知。
第 2 步 — 安装 PDF 渲染器(可选)
如果您想制作印刷书籍,您将需要一个渲染器将 Booktype 的 HTML 章节转换为单个 PDF 文件。 推荐使用 PHP 应用程序 mPDF 6.0,因为它广泛支持印前功能。 在安装 mPDF 之前,您需要安装 PHP 的命令行解释器和使用以下命令的解压缩实用程序:
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 的临时目录的所有者更改为 Apache Web 服务器用户 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 实例 中再次需要它。
然后创建一个名为 booktype-db
的数据库,将 booktype-user
设置为所有者。 编码应该是国际 UTF-8 字符集,如 -E
选项所示。
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
包可从 Sourcefabric apt 服务器 获得,但 GitHub 包含可用的最新版本的 Booktype。 使用 Git 还可以更轻松地跟踪版本之间的错误修复或向 Booktype 项目贡献拉取请求。 从 git 存储库下载 Booktype 2.0 的副本到 /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 步 — 创建 Booktype 实例
单个 Booktype 服务器可以托管多个 实例 ,每个实例都有自己的作者、组和书籍社区。 这使您能够为特定兴趣创建单独的环境,而不是将不相关的作者和书籍项目放在一个通用平台上。
为 Booktype 实例创建一个目录,例如 /var/www/booktype/
:
sudo mkdir /var/www/booktype/
确保它归运行 Web 服务器的 www-data
用户所有:
sudo chown www-data:www-data /var/www/booktype/
默认情况下,Debian 8.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
使用 dev
配置文件和 /var/www/booktype/instance1
目录中的 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
该文件有几个部分需要编辑以适合您的安装。 首先,设置系统管理员的姓名和邮箱:
基础.py
ADMINS = ( # ('Your Name', 'sammy@example.com'), )
将活动配置文件设置为'dev'
进行开发,暂时:
基础.py
PROFILE_ACTIVE = 'dev'
输入您的 Booktype 实例的站点名称:
基础.py
BOOKTYPE_SITE_NAME = 'Your Booktype Site'
输入发送通知和报告时使用的电子邮件地址以及外发邮件服务器详细信息。 如果你已经在 Droplet 上安装了 Postfix,你可以为邮件服务器使用默认值 localhost
和端口 25
:
基础.py
DEFAULT_FROM_EMAIL = 'robot@example.com' REPORT_EMAIL_USER = 'sammy@example.com' EMAIL_HOST = 'localhost' EMAIL_PORT = 25
如果您选择安装 mPDF,请输入安装目录的位置:
基础.py
MPDF_DIR = '/var/www/mpdf60/'
如果作者未指定,请输入要使用的默认发布者的名称:
基础.py
DEFAULT_PUBLISHER = "Your Publishing Company"
如果您刚刚安装了 Redis 并且没有将其用于其他任何用途,您可以保留 REDIS STUFF
的默认值。 如果您有多个应用程序使用本地 Redis 服务器,则需要将 REDIS_DB
的值更改为非零的数字。 REDIS_PASSWORD
的默认值为 None,但如果您的 Redis 服务器需要密码,则必须用单引号或双引号括起来。
基础.py
# REDIS STUFF REDIS_HOST = 'localhost' REDIS_PORT = 6379 REDIS_DB = 0 REDIS_PASSWORD = None
设置实例时区和默认界面语言代码:
基础.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:
开发者.py
THIS_BOOKTYPE_SERVER = 'booktype.example.com' BOOKTYPE_URL='http://booktype.example.com'
设置数据库连接的名称、用户和密码。 用户名 booktype-user
和 PostgreSQL 数据库名称 booktype-db
应该与您在 步骤 3 — 设置数据库 中使用的相同。
它应该类似于以下示例:
开发者.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: `sammy@example.com` 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
安装现已完成。 使用以下命令返回终端中的正常非 root sudo 用户提示:
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 sammy@example.com
因为 Debian 8.2 具有 Apache 2.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
使用以下命令重新启动 Apache 网络服务器以启用更改:
sudo service apache2 restart
您现在应该能够在 VirtualHost 配置中定义的 ServerName
的 URL 浏览您的 Booktype 实例,例如 booktype.example.com。 单击 Django 调试工具栏的顶部将其隐藏(使用 prod
配置文件时,此工具栏将不存在)。
注意: 您可以从浏览器窗口右上角的下拉菜单中选择界面语言。
使用您之前创建的超级用户帐户详细信息(在我们的示例中为 admin
)登录到 Booktype。
登录后,在人物和我的个人资料框中显示与超级用户电子邮件地址关联的头像,如果有的话。
第 7 步 — 与主管一起运行 Celery
Celery 是 Booktype 服务器使用的任务队列。 一旦你安装了 Booktype,你可能需要一个进程监视器来保持 Celery 工作人员在任何崩溃或重启的情况下运行。 您可以使用以下命令安装 supervisord
:
sudo apt-get install supervisor
supervisord
程序在安装后自动启动,并配置为在服务器下次重新启动时自动启动。
现在,我们必须使用以下命令创建一个用于 Booktype 和 Celery 的配置文件:
sudo nano /etc/supervisor/conf.d/booktype-instance1.conf
对于 /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
使用 Ctrl+O
保存 booktype-instance1.conf
文件并使用 Ctrl+X
退出 nano
后,使用以下命令启用对 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
结论
现在,您和您的团队拥有开始共同写作和出版书籍所需的一切! 详细使用请阅读【X16X】官方Booktype手册【X44X】。