ubuntu下部署

    宝塔官网:

    安装命令:

    安装完宝塔控制面板之后,登录面板,安装”lnmp”(Linux、Nginx、MySQL、PHP)

    安装宝塔面板,主要是为了方便管理站点,如反向代理、SSL等

    安装中文字体(非必须,但是建议安装)

    有的Linux服务器并没有支持中文字体,需要手动安装。 地址:http://www.hc-cms.com/thread-41-1-1.html

    安装命令:

    1. sudo apt install fonts-wqy-microhei

    安装中文字体支持,主要是为了避免Linux系统不支持中文的时候,导致导出文档的时候出现乱码。

    安装Chrome

    直接使用命令一键安装:

    1. sudo apt install chromium-browser

    执行以下命令,如果能打印百度页面代码,则表示安装成功。

    1. chromium-browser --headless --disable-gpu --dump-dom --no-sandbox https://www.baidu.com

    这个主要用于在发布文档的时候,渲染未被渲染的markdown文档,以及强力模式下的网页采集。 安装chrome,是为了兼容以前的问题,并且自动安装puppeteer的一些chrome浏览器依赖。

    这个主要用于在发布文档的时候,渲染未被渲染的markdown文档、渲染自定义封面、以及强力模式下的网页采集。

    1. sudo apt install nodejs-legacy npm
    2. sudo npm install -g n
    3. sudo n stable
    4. sudo npm install -g cnpm
    5. sudo cnpm install puppeteer

    安装calibre

    calibre官网:

    1. sudo -v && wget -nv -O- https://download.calibre-ebook.com/linux-installer.py | sudo python -c "import sys; main=lambda:sys.stderr.write('Download failed\n'); exec(sys.stdin.read()); main()"

    执行下面命令,能看到版本号,表示安装成功。

    1. ebook-convert --version

    注意:

    • 这里要安装最新版的calibre,执行上述命令,安装的就是最新版的了。
    • 如果出现warning的提示,直接不用理会即可;error级别的提示,网上搜下看下如何解决

    calibre主要用于将文档导出生成pdf、epub、mobi文档。

    本人已经使用Go语言对calibre导出pdf、epub、mobi文档进行了一层封装,欢迎大家给个star ==》https://github.com/TruthHun/converter

    随便创建一个txt文件

    1. echo "Hello BookStack。你好,书栈。" > test.txt

    转成pdf

    查看测试的转化效果,主要看下转化的过程中有没有报错,以及转化后的文档有没有出现中文乱码。

    安装Git

    使用 git clone 的方式导入项目的时候需要使用git

    1. sudo apt install git

    安装命令:

    1. sudo apt install supervisor

    判断是否安装成功:

    1. supervisord --version

    显示版本号,即表示安装成功。

    supervisor主要用于将程序加入到系统守护进程

    Supervisord 安装完成后有两个可用的命令行 supervisord 和 supervisorctl,命令使用解释如下:

    • supervisord,初始启动 Supervisord,启动、管理配置中设置的进程。
    • supervisorctl stop programxxx,停止某一个进程(programxxx),programxxx 为 [program:beepkg] 里配置的值,这个示例就是 beepkg。
    • supervisorctl start programxxx,启动某个进程
    • supervisorctl restart programxxx,重启某个进程
    • supervisorctl stop groupworker: ,重启所有属于名为 groupworker 这个分组的进程(start,restart 同理)
    • supervisorctl stop all,停止全部进程,注:start、restart、stop 都不会载入最新的配置文件。
    • supervisorctl reload,载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
    • supervisorctl update,根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。

    部署程序

    配置文件在conf目录。

    配置数据库和文档导出项

    app.conf.example命名为app.conf,并根据提示,修改配置。这里主要修改MySQL数据库的配置以及生成下载文档的配置。其他项能不改就不改。

    1. # 程序名称
    2. appname = BookStack
    3. # 微信小程序 appid
    4. appId=""
    5. # 微信小程序appSecret
    6. appSecret=""
    7. # 是否限制API请求,也就是如果不是上述配置的微信小程序的appId请求的接口,则直接拒绝
    8. limitReferer=false
    9. # API 路由前缀,默认为 bookchat。API访问形式:https://您的域名/bookchat/api/v1/xxx
    10. # 比如您把api前缀改为了 hello,则您在 BookChat 或者 BookChatApp 中,需要把 config.js 中的 host 常量配置为 https://您的域名/hello
    11. apiPrefix=bookchat
    12. # 是否显示小程序阅读码(需要配置了appScecret才会生效)
    13. showWechatCode = false
    14. # 比如你将static目录下的所有静态资源都放到了专门的服务器上,那么这个域名就行用来访问你的静态资源的域名。否则建议填写web网站的域名
    15. # 如果您部署了微信小程序,则该值一定要填写。
    16. static_domain=
    17. # 监听端口
    18. httpport = 8181
    19. # 运行模式。开发时,请设置为开发模式"dev",即development;部署时,请设置为产品模式"prod",即product。dev模式下,会打印各种调试信息
    20. runmode = dev
    21. # 是否开启session,这个必须开启,否则没法玩了。
    22. sessionon = true
    23. # session名称,这个你自己定。
    24. sessionname = bookstack
    25. copyrequestbody = true
    26. # 启动gzip压缩,则设置为true,否则设置为false。建议启动
    27. EnableGzip=true
    28. # 要压缩的静态文件扩展名,其中.xml是sitemap站点地图压缩。建议按照这个来就行了
    29. StaticExtensionsToGzip = .css, .js, .xml
    30. #站点地图host(主要用于使用CDN的时候,host与实际host不一样,导致生成的sitemap不一样)
    31. sitemap_host=www.bookstack.cn
    32. # 默认Session生成Key的秘钥
    33. beegoserversessionkey=bookstack
    34. ########Session储存方式##############
    35. #以文件方式储存
    36. sessionprovider=file
    37. sessionproviderconfig=store/session
    38. # 静态目录。这个是站点地图的静态目录
    39. StaticDir = sitemap:sitemap
    40. # 站点可直接访问的静态文件【注意,这里千万不能配置.conf文件扩展名,否则会把.conf文件当做静态文件而被外部访问,导致数据库账号密码等泄露。按照默认的来即可】
    41. StaticExt=.txt,.xml,.ico,.png,.jpg,.jpeg,.gif,.html
    42. #评论时间间隔,每次发表评论,限定间隔秒数,避免被恶意刷评论
    43. CommentInterval=10
    44. # 生成下载文档时导出pdf文档的配置,这里建议把关于bookstack.cn的信息替换成你自己的就行,其他的建议不要动
    45. exportHeader=<p style='color:#8E8E8E;font-size:12px;'>_SECTION_</p>
    46. exportFooter=<p style='color:#8E8E8E;font-size:12px;'>本文档使用 <a href='http://www.bookstack.cn' style='text-decoration:none;color:#1abc9c;font-weight:bold;'>书栈(BookStack.CN)</a> 构建 <span style='float:right'>- _PAGENUM_ -</span></p>
    47. exportFontSize=13
    48. exportPaperSize=a4
    49. exportCreator=书栈(BookStack.CN)
    50. exportMarginLeft=36
    51. exportMarginRight=36
    52. exportMarginTop=36
    53. exportMarginBottom=36
    54. exportCustomCover=true
    55. ####################MySQL 数据库配置###########################
    56. db_adapter=mysql
    57. # 您的数据库host
    58. db_host=
    59. #您的数据库端口
    60. db_port=3306
    61. #您的数据库用户名
    62. db_username=
    63. # 您的数据库密码
    64. # utf8或者utf8mb4数据库。如果数据库还没创建,并且账号有创建权限,将自动创建。
    65. db_database=bookstack
    66. # 谷歌浏览器,用于发布内容的时候渲染未被渲染的markdown。建议安装最新版的Chrome浏览器,并把Chrome浏览器加入系统环境变量。
    67. # 使用Chrome的headless去处理。之前考虑使用phantomjs的,但是phantomjs有些小问题,不如Chrome强大。
    68. # chrome=chromium-browser
    69. chrome=/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome
    70. # 如果使用 puppeteer,则忽略chrome
    71. puppeteer = false
    72. #项目默认封面
    73. cover=/static/images/book.png
    74. #默认头像
    75. avatar=/static/images/avatar.png
    76. #默认阅读令牌长度
    77. token_size=12
    78. #上传文件的后缀
    79. upload_file_ext=txt|doc|docx|xls|xlsx|ppt|pptx|pdf|7z|rar|jpg|jpeg|png|gif
    80. ####################邮件配置######################
    81. #是否启用邮件
    82. enable_mail=true
    83. #每小时限制指定邮箱邮件发送次数
    84. mail_number=5
    85. #smtp服务用户名
    86. smtp_user_name=
    87. #smtp服务器地址
    88. smtp_host=
    89. #smtp密码
    90. smtp_password=
    91. #端口号
    92. smtp_port=25
    93. #发送邮件的显示名称
    94. form_user_name=
    95. #接收回件的邮箱。留空则表示使用发送邮件的邮箱作为接收回件邮箱
    96. reply_user_name=bookstack@qq.com
    97. #邮件有效期30分钟
    98. mail_expired=30
    99. # 存储类型,后续扩展成本地存储(local)、阿里云OSS存储(oss)、七牛云存储(qiniu)、腾讯云存储(cos)、百度云存储(bos)和又拍云存储(upyun)
    100. # 目前可选项:local、oss
    101. store_type=local
    102. # 不要修改
    103. include "oss.conf"
    104. include "oauth.conf"

    配置OSS

    1、登录你的阿里云,进入OSS,创建一个只读Bucket。 2、在本地随便创建一个txt文档,将下面两行粘贴进去:

    1. styleName:cover,styleBody:image/resize,m_fill,w_175,h_230,limit_0/auto-orient,1/quality,q_100
    2. styleName:avatar,styleBody:image/resize,m_fill,w_100,h_100,limit_0/auto-orient,1/quality,q_90

    3、在OSS的图片处理-导入样式中,将该txt文档导入

    4、将oss.conf.example修改成oss.conf,并根据您的阿里云OSS,配置该文件。

    1. # 阿里云OSS配置
    2. [oss]
    3. # 是否是内网,如果您的阿里云服务器和OSS是同一内网,请设置为true,这样能更快地将文件移到oss上,否则设置为false。
    4. # 一般情况下,在开发阶段,设置为false
    5. IsInternal=false
    6. # 内网Endpoint,如:oss-cn-hongkong-internal.aliyuncs.com
    7. EndpointInternal=
    8. # 外网Endpoint,如:oss-cn-hongkong.aliyuncs.com
    9. EndpointOuter=
    10. # 您的阿里云AccessKeyId
    11. AccessKeyId=
    12. # 您的阿里云AccessKeySecret
    13. AccessKeySecret=
    14. # 只读状态的Bucket,不要私有的,也不要公共读写的
    15. Bucket=
    16. # oss中绑定的域名,如果您没有绑定域名,则使用阿里云oss的自带域名也行
    17. Domain=

    配置第三方登录

    oauth.conf.example重命名成oauth.conf,并根据提示修改配置。

    1. # 第三方登录配置
    2. [oauth]
    3. ##### Gitee(码云) ####
    4. # 申请地址(需要先登录):https://gitee.com/oauth/applications
    5. # 您的ClientId
    6. giteeClientId=
    7. # 您的ClientSecret
    8. giteeClientSecret=
    9. # 回调地址,把下面的bookstack.cn的域名换成你的即可
    10. giteeCallback=http://www.bookstack.cn/login/gitee
    11. # 下面这两项不要动
    12. giteeAccesstoken=https://gitee.com/oauth/token
    13. ######## GitHub ########
    14. # 申请地址(需要先登录你的GitHub):https://github.com/settings/developers
    15. # 您的ClientId
    16. githubClientId=
    17. # 您的ClientSecret
    18. githubClientSecret=
    19. # 回调地址,把下面的bookstack.cn的域名换成你的即可
    20. githubCallback=http://www.bookstack.cn/login/github
    21. # 下面这两项不要动
    22. githubAccesstoken=https://github.com/login/oauth/access_token
    23. githubUserInfo=https://api.github.com/user
    24. #### QQ ####
    25. # 申请地址(需要先登录你的QQ):https://connect.qq.com/manage.html
    26. #ClientId,即 APP ID
    27. qqClientId=
    28. #ClientSecret,即 APP Key
    29. qqClientSecret=
    30. # 回调地址,把下面的bookstack.cn的域名换成你的即可
    31. qqCallback=http://www.bookstack.cn/login/qq
    32. # 下面这三项不要动
    33. qqAccesstoken=https://graph.qq.com/oauth2.0/token
    34. qqOpenId=https://graph.qq.com/oauth2.0/me
    35. qqUserInfo=https://graph.qq.com/user/get_user_info
    36. ### TODO 微信和微博登录,主要是我这边忘记了以前注册的个人开发者信息,当前没开发,后续会开发出来 ####

    1、将修改和配置好了的程序压缩,上传到站点根目录下,解压。 2、执行数据库安装。程序安装一些站点配置项、SEO项等。命令:

    3、配置反向代理 宝塔面板用户,直接在站点的设置里面配置反向代理,但是需要注意的是,需要修改缓存,如把下面两句注释掉:

    1. add_header X-Cache $upstream_cache_status;
    2. expires 12h;

    Nginx反向代理配置参考(宝塔的配置):

    1. server
    2. {
    3. listen 80;
    4. server_name demo.bookstack.cn;
    5. index index.php index.html index.htm default.php default.htm default.html;
    6. root /www/wwwroot/demo.bookstack.cn;
    7. location /
    8. {
    9. proxy_pass http://localhost:8181;
    10. proxy_set_header Host $host;
    11. proxy_set_header X-Real-IP $remote_addr;
    12. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    13. proxy_set_header REMOTE-HOST $remote_addr;
    14. #缓存相关配置
    15. #proxy_cache cache_one;
    16. #proxy_cache_key $host$request_uri$is_args$args;
    17. #proxy_cache_valid 200 304 301 302 1h;
    18. #持久化连接相关配置
    19. #proxy_connect_timeout 30s;
    20. #proxy_read_timeout 86400s;
    21. #proxy_send_timeout 30s;
    22. #proxy_http_version 1.1;
    23. #proxy_set_header Upgrade $http_upgrade;
    24. #proxy_set_header Connection "upgrade";
    25. }
    26. location ~ .*\.(php|jsp|cgi|asp|aspx|flv|swf|xml)?$
    27. {
    28. proxy_set_header Host $host;
    29. proxy_set_header X-Real-IP $remote_addr;
    30. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    31. proxy_set_header REMOTE-HOST $remote_addr;
    32. proxy_pass http://localhost:8181;
    33. }
    34. #PROXY-END
    35. include enable-php-54.conf;
    36. #PHP-INFO-END
    37. #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    38. include /www/server/panel/vhost/rewrite/demo.bookstack.cn.conf;
    39. #REWRITE-END
    40. #禁止访问的文件或目录
    41. location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    42. {
    43. return 404;
    44. }
    45. access_log off;
    46. }

    加入系统守护进行

    1、进入supervisor的配置目录

    1. cd /etc/supervisor/conf.d/

    2、配置守护进程 创建bookstack.conf文件,并配置。

    1. [program:BookStack]
    2. directory = 你的程序目录
    3. command =你的程序执行命令
    4. autostart = true
    5. autorestart=true
    6. user = 启动该程序的用户
    7. redirect_stderr = true
    8. stdout_logfile = 日志地址

    配置示例:

    1. [program:BookStack]
    2. directory = /www/wwwroot/demo.bookstack.cn
    3. command =/www/wwwroot/demo.bookstack.cn/BookStack
    4. autostart = true
    5. autorestart=true
    6. user = root
    7. redirect_stderr = true
    8. stdout_logfile = /var/log/supervisor/BookStack.log

    配置完成之后,重启supervisor

    1. supervisorctl reload

    v2.0 正式版开始,默认管理员账号密码调整为:

    1. admin888

    总结

    安装BookStack,需要先配置环境,安装依赖:NginxMySQLcalibrechorme(chromium-browser)、,然后修改配置文件,配置MySQL数据库、OSS和第三方登录,然后上传部署和配置反向代理以及加入守护进程。