前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Debian 8上发布Booktype书籍

如何在Debian 8上发布Booktype书籍

原创
作者头像
楠宝宝
修改2018-10-22 11:36:33
1K0
修改2018-10-22 11:36:33
举报

介绍

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服务器:

代码语言:javascript
复制
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中你应该输入命令:

代码语言:javascript
复制
sudo apt-get install postfix mailutils

而不是:

代码语言:javascript
复制
sudo apt-get install mailutils

否则将安装Debian的默认邮件服务器Exim,代替Postfix。Exim配置起来比较复杂,不需要从Booktype发送通知。

第2步 - 安装PDF渲染器(可选)

如果要生成印刷书籍,则需要渲染器将Booktype的HTML章节转换为单个PDF文件。建议使用PHP应用程序mPDF 6.0,因为它广泛支持印前功能。在安装mPDF之前,需要使用以下命令安装PHP的命令行解释器和解压缩实用程序:

代码语言:javascript
复制
sudo apt-get install php5-cli unzip

接下来,下载mPDF,将其解压缩到/var/www/目录中:

代码语言:javascript
复制
sudo wget http://mpdf1.com/repos/MPDF60.zip
sudo unzip MPDF60.zip -d /var/www/

该文件非常大,因此下载可能需要一些时间。

最后,将mPDF的临时目录的所有者更改为Apache Web服务器用户www-data

代码语言:javascript
复制
cd /var/www/mpdf60/
sudo chown www-data.www-data graph_cache/ tmp/ ttfontdata/

第3步 - 设置数据库

您需要的下一件事是可用的数据库。输入以下命令以创建PostgreSQL用户booktype-user

代码语言:javascript
复制
sudo -u postgres createuser -SDRP booktype-user

出现提示时,输入要在数据库中设置的密码。您需要重新输入以进行确认。

注意:在安全的地方记下密码。您将在步骤5 - 创建书型实例中再次使用它。

然后创建一个名为booktype-db的数据库,设置booktype-user为所有者。编码应该是国际UTF-8字符集,如-E选项所示。

代码语言:javascript
复制
sudo -u postgres createdb -E utf8 -O booktype-user booktype-db

注意:创建PostgreSQL用户的命令行选项是字母O(-O),而不是数字零。

注意:如果使用其他数据库名称或所有者,请将其写下来。稍后您将在步骤5 -编辑dev.py创建书型实例时使用它。

通过使用nano编辑器检查PostgreSQL配置文件,确认允许与数据库booktype-db的连接:

代码语言:javascript
复制
sudo nano /etc/postgresql/9.4/main/pg_hba.conf

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

代码语言:javascript
复制
# 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/目录:

代码语言:javascript
复制
sudo mkdir /usr/local/src/booktype/
sudo git clone https://github.com/sourcefabric/Booktype.git --branch 2.0 --depth 1 /usr/local/src/booktype/

接下来,安装开发和生产安装的要求,以便您可以使用以下任一项:

代码语言:javascript
复制
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/

代码语言:javascript
复制
sudo mkdir /var/www/booktype/

确保它由运行Web服务器的www-data用户拥有:

代码语言:javascript
复制
sudo chown www-data:www-data /var/www/booktype/

默认情况下,Debian 8.2不允许用户www-data输入命令。您将需要编辑/etc/passwd的文件中的行www-data以继续:

代码语言:javascript
复制
sudo nano /etc/passwd

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

代码语言:javascript
复制
www-data:x:33:33:www-data:/var/www:/bin/bash

使用Ctrl+X退出nano,在提示时保存文件。

现在切换到www-data开始创建Booktype实例:

代码语言:javascript
复制
sudo su www-data

使用dev配置文件和/var/www/booktype/instance1目录中的postgresql数据库创建第一个Booktype实例:

代码语言:javascript
复制
cd /usr/local/src/booktype/scripts/
./createbooktype -p dev --check-versions --database postgresql /var/www/booktype/instance1

切换到刚刚创建的实例目录,并编辑包含实例基本设置的base.py文件:

代码语言:javascript
复制
cd /var/www/booktype/instance1/
nano instance1_site/settings/base.py

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

代码语言:javascript
复制
ADMINS = (
    # ('Your Name', 'sammy@example.com'),
)

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

代码语言:javascript
复制
PROFILE_ACTIVE = 'dev'

输入Booktype实例的站点名称:

代码语言:javascript
复制
BOOKTYPE_SITE_NAME = 'Your Booktype Site'

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

代码语言:javascript
复制
DEFAULT_FROM_EMAIL = 'robot@example.com'
REPORT_EMAIL_USER = 'sammy@example.com'
​
EMAIL_HOST = 'localhost'
EMAIL_PORT = 25

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

代码语言:javascript
复制
MPDF_DIR = '/var/www/mpdf60/'

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

代码语言:javascript
复制
DEFAULT_PUBLISHER = "Your Publishing Company"

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

代码语言:javascript
复制
# REDIS STUFF
REDIS_HOST = 'localhost'
REDIS_PORT = 6379
REDIS_DB = 0
REDIS_PASSWORD = None

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

代码语言:javascript
复制
TIME_ZONE = 'Europe/Berlin'
​
LANGUAGE_CODE = 'en-us'

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

保存并退出该文件。

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

代码语言:javascript
复制
nano instance1_site/settings/dev.py

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

代码语言:javascript
复制
THIS_BOOKTYPE_SERVER = 'booktype.example.com'
BOOKTYPE_URL='http://booktype.example.com'

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

它应该类似于以下示例:

代码语言:javascript
复制
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具有不同域名和数据库的配置文件,同时保持您的开发配置文件可用于测试。

加载环境变量:

代码语言:javascript
复制
. ./booktype.env

初始化数据库:

代码语言:javascript
复制
./manage.py syncdb

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

代码语言:javascript
复制
You have installed Django's auth system, and don't have any superusers defined.
Would you like to create one now? (yes/no): yes

根据提示输入所需信息:

代码语言:javascript
复制
Username (leave blank to use 'www-data'): admin
E-mail address: `sammy@example.com`
Password:
Password (again):
Superuser created successfully.

将Booktype组件应用程序中的静态文件收集到一个目录中。

代码语言:javascript
复制
./manage.py collectstatic

服务器将响应:

代码语言:javascript
复制
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应用程序并更新其权限,然后更新已注册和匿名用户的默认角色:

代码语言:javascript
复制
./manage.py update_permissions
./manage.py update_default_roles

安装现已完成。使用以下命令返回终端中正常的非root sudo用户提示符:

代码语言:javascript
复制
exit

您不再以www-data用户身份输入命令。

第6步 - 配置Apache

将创建实例期间生成的wsgi.apache文件复制到虚拟主机的Apache配置目录:

代码语言:javascript
复制
sudo cp /var/www/booktype/instance1/conf/wsgi.apache /etc/apache2/sites-available/booktype-instance1.conf

编辑实例的虚拟主机配置文件:

代码语言:javascript
复制
sudo nano /etc/apache2/sites-available/booktype-instance1.conf

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

代码语言:javascript
复制
<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行,请删除每行开头的#字符:

代码语言:javascript
复制
     <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虚拟主机:

代码语言:javascript
复制
sudo a2dissite 000-default.conf
sudo a2ensite booktype-instance1.conf

重新启动Apache Web服务器以使用以下命令启用更改:

代码语言:javascript
复制
sudo service apache2 restart

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

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

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

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

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

Celery是Booktype服务器使用的任务队列。安装Booktype后,您可能需要一个进程监视器来保持Celery工作程序在崩溃或重新启动时运行。您可以使用以下命令安装supervisord

代码语言:javascript
复制
sudo apt-get install supervisor

supervisord程序在安装后自动启动,并配置为在服务器下次重新启动时自动启动。

现在,我们必须使用以下命令创建一个配置文件以与Booktype和Celery一起使用:

代码语言:javascript
复制
sudo nano /etc/supervisor/conf.d/booktype-instance1.conf

对于/var/www/booktype/instance1包含10个worker 的第一个Booktype实例,该文件的内容booktype-instance1.conf应类似于:

代码语言:javascript
复制
[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与命令配置:

代码语言:javascript
复制
sudo supervisorctl reread
sudo supervisorctl update

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

代码语言:javascript
复制
sudo supervisorctl

此命令的输出应类似于:

代码语言:javascript
复制
celeryd                          RUNNING    pid 24182, uptime 0:13:19

您还应该看到以下提示:

代码语言:javascript
复制
supervisor>

键入以下命令以退出supervisorctl

代码语言:javascript
复制
quit

结论

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

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


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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
    • 准备
      • 第1步 - 设置依赖关系
        • 第2步 - 安装PDF渲染器(可选)
          • 第3步 - 设置数据库
            • 第4步 - 使用Git安装Booktype
              • 第5步 - 创建Booktype实例
                • 第6步 - 配置Apache
                  • 第7步 - 与主管一起运行芹菜
                    • 结论
                    相关产品与服务
                    云数据库 Redis
                    腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档