如何在Debian 8上发布Booktype书籍

介绍

Booktype是一个专门用于制作书籍的内容管理系统,包括您可以掌握的真实,美观的书籍。

您可以生成PDF,EPUB,MOBI,XML和HTML格式的Booktype输出,可用于书店或开放式Web。作者可以使用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)的推荐平台。在编写和编辑书籍时,作者可以使用任何带有现代Web浏览器的设备,如Mozilla Firefox或Google Chrome。

在本教程中,我们将完成Booktype的安装,这将使您和您的同事能够为您的网站生成用于打印和屏幕的PDF书籍,用于数字设备的EPUB以及用于您网站的XHTML - 所有这些都来自单一来源。如果您想深入了解Booktype的可能性,这是一个很好的起点。本教程涵盖Booktype 2.0。

准备

要学习本教程,您需要:

  • 一台已经设置好可以使用sudo命令的非root账号的Debian 8服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器
  • 注册域名,如果你没有域名,建议您先去这里注册一个域名,您需要将域名解析到您的服务器,您可以使用腾讯云云解析进行快速设置。
  • 点书类型。设置yourdomainname.com到您的CVM(设置主机名)

第1步 - 设置依赖关系

在安装Booktype之前,首先需要安装开发包:RabbitMQ服务器,Redis服务器,PostgreSQL数据库管理系统,整洁的语法检查程序以及带有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邮件服务器。Debian 8.2(而不是Ubuntu 14.04)的唯一区别是在步骤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-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

在文件末尾附近是具有客户端身份验证规则的部分。它应该如下所示:

# 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

虽然Sourcefabric apt服务器提供了一个.deb软件包,但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

/bin/bash更换/usr/sbin/nologinwww-data用户,如下所示:

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

此文件的几个部分需要进行编辑以适合您的安装。首先,设置系统管理员的名称和电子邮件地址:

ADMINS = (
    # ('Your Name', 'sammy@example.com'),
)

暂时将活动配置文件设置为'dev'来开发:

PROFILE_ACTIVE = 'dev'

输入Booktype实例的站点名称:

BOOKTYPE_SITE_NAME = 'Your Booktype Site'

输入发送通知和报告时使用的电子邮件地址以及发送邮件服务器详细信息。如果您已在Droplet上安装了Postfix,则可以使用电子邮件服务器的默认值localhost和端口25

DEFAULT_FROM_EMAIL = 'robot@example.com'
REPORT_EMAIL_USER = 'sammy@example.com'
​
EMAIL_HOST = 'localhost'
EMAIL_PORT = 25

如果选择安装mPDF,请输入安装目录的位置:

MPDF_DIR = '/var/www/mpdf60/'

如果作者未指定,则输入要使用的默认发布者的名称:

DEFAULT_PUBLISHER = "Your Publishing Company"

如果您刚刚安装了Redis并且不将其用于其他任何内容,则可以保留默认值REDIS STUFF。如果您有多个使用本地Redis服务器的应用程序,则需要将值更改REDIS_DB为零以外的数字。默认REDIS_PASSWORD值为None,但如果Redis服务器需要密码,则必须用单引号或双引号括起来。

# REDIS STUFF
REDIS_HOST = 'localhost'
REDIS_PORT = 6379
REDIS_DB = 0
REDIS_PASSWORD = None

设置实例时区和默认界面语言代码:

TIME_ZONE = 'Europe/Berlin'
​
LANGUAGE_CODE = 'en-us'

作者将能够从已安装的Booktype本地化(例如法语或西班牙语)中选择自己的界面语言。

保存并退出该文件。

接下来,在仍在/var/www/booktype/instance1/目录中的同时,编辑dev.py包含Booktype实例的开发设置的文件:

nano instance1_site/settings/dev.py

输入Booktype开发服务器的域名和URL:

THIS_BOOKTYPE_SERVER = 'booktype.example.com'
BOOKTYPE_URL='http://booktype.example.com'

设置数据库连接的名称,用户和密码。用户名booktype-user和PostgreSQL数据库名称booktype-db应与您在步骤3 - 设置数据库中使用的名称相同。

它应该类似于以下示例:

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

在该过程结束时,您将看到以下内容。回答是创建超级用户:

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:

键入yesENTER按下键后,输入以下命令以获取所有已安装的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

你应该对配置的服务器和域名ServerAdmin,以管理员的电子邮件地址改变值ServerNameSetEnv HTTP_HOST

<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,所以你需要取消注释所有LocationDirectory节的Require all granted。要取消注释Require all granted行,请删除每行开头的#字符:

     <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 Web服务器以使用以下命令启用更改:

sudo service apache2 restart

您现在应该能够浏览您在网址ServerName在虚拟主机配置如booktype.example.com中定义的BOOKTYPE实例。单击Django调试工具栏的顶部以隐藏它(使用配置prod文件时,此工具栏不会出现)。

注意:您可以从浏览器窗口右上角的下拉菜单中选择界面语言。

使用您之前创建的超级用户帐户详细信息登录Booktype(在我们的示例中是admin)。

登录后,与超级用户电子邮件地址关联的gravatar(如果有)将显示在“ 人员”和“ 我的个人资料”框中。

第7步 - 与主管一起运行芹菜

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包含10个worker 的第一个Booktype实例,该文件的内容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与命令配置:

sudo supervisorctl reread
sudo supervisorctl update

supervisorctl程序还可用于检查supervisord正在运行celeryd

sudo supervisorctl

此命令的输出应类似于:

celeryd                          RUNNING    pid 24182, uptime 0:13:19

您还应该看到以下提示:

supervisor>

键入以下命令以退出supervisorctl

quit

结论

现在,您和您的团队拥有开始书写和出版书籍所需的一切!有关使用详情,请阅读官方Booktype手册

更多Debian教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Publish Books with Booktype on Debian 8》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏分享达人秀

安装Android模拟器,准备开发

完成以上所有步骤(JDK、ADT Bundle、SDK),那么就可以开始进行Android开发了。 Android程序必须运行在Android系...

2.2K70
来自专栏思影科技

《大话脑成像》之十二:Linux基础命令

话说孔乙己时常混迹于磁共振基础班,处理功能数据算是得心应手了。虽然时常拖欠学费,但不出几月,定然还上,从粉板上拭去了孔乙己的名字。因此,DTI班第一天,当他悄悄...

51570
来自专栏.NET后端开发

ADO.NET入门教程(五) 细说数据库连接池

题外话 通过前几章的学习,不知道大家对ADO.NET有一定的了解了没有。撇开文章质量不讲,必须肯定的是,我是用心去写每一篇文章的。无论是是在排版上,还是在内容选...

44290
来自专栏文渊之博

数据库复制(一)--复制介绍

介绍: 在运行着的数据库驱动的应用程序中,SQL复制能解决许多问题。由于发送/订阅的模式不是十分容易理解,复杂的脚本语言和监视复制系统也是需要一定的思想在里面。...

19660
来自专栏乐沙弥的世界

Oracle 常见故障及日常规划

对任何数据库系统而言,对显而易见的故障,应当避免发生本文列出了Oracle常见的故障并给出了解决方案,同时列出了一些日常规划。

8220
来自专栏信安之路

这些命令你用过多少?

在拿到一个 webshell 之后,大家首先会想到去把自己的权限提升到最高,windows 我们会提升到 SYSTEM 权限,而 Linux 我们会提升到 ro...

8810
来自专栏云计算教程系列

如何将Ubuntu从16.04升级到18.04

Ubuntu 18.04是一个长期支持(LTS)版本,LTS 版本每两年发布一次,而 Ubuntu 18.04 是自 2016 年以来的第一个长期支持版本。Ub...

3.2K40
来自专栏伪君子的梦呓

在 VMware workstation 安装 CentOS 虚拟机

23830
来自专栏从流域到海域

在CentOS 7上安装Magento

在这篇教程中,您将学习如何在CentOS 7上安装Magent。Magento Community Edition(CE,即社区版)是一个免费的开源电子商务平台...

69060
来自专栏数据和云

深入内核:监听器的工作原理与故障诊断分析

熊军(老熊) 云和恩墨西区总经理 Oracle ACED,ACOUG核心会员 在Oracle的官方文档《Oracle Database PerformanceT...

47570

扫码关注云+社区

领取腾讯云代金券