轻松搭建在线文档管理系统:BookStack的Docker部署与远程访问指南

 前言

本文将介绍如何在Linux系统上利用Docker本地部署在线文档管理系统BookStack,并通过cpolar内网穿透工具实现异地远程访问,无需公网IP或复杂的路由器设置。

BookStack是一个开源的知识管理平台,基于`Laravel + Vue.js`构建。它提供了一个简单而强大的所见即所得编辑器,同时也支持Markdown编辑,方便个人或团队轻松创建和管理文档。管理员可以轻松导入Markdown文件,并有效处理文档之间的链接和图片。通过集成calibre工具,用户还可以将书籍导出为PDF、ePub、Mobi等多种格式的离线文档。

BookStack支持多种部署方式,包括手动安装和Docker部署。本教程将以Docker Compose的形式进行快速本地部署,并结合内网穿透技术将本地服务发布到公网,以实现远程访问。

目录

 1. 安装Docker

2. Docker镜像源添加方法

 3. 创建并启动BookStack容器

4. 登录与简单使用

5. 公网远程访问本地BookStack


 1. 安装Docker

本教程操作环境为Linux Ubuntu系统,在开始之前,我们需要先安装Docker。

在终端中执行下方命令安装docker:

```shell

sudo curl -fsSL https://github.com/tech-shrimp/docker_installer/releases/download/latest/linux.sh| bash -s docker --mirror Aliyun

```

如果上边命令中访问不了Github,可以使用Gitee的链接安装:

```shell

sudo curl -fsSL https://gitee.com/tech-shrimp/docker_installer/releases/download/latest/linux.sh| bash -s docker --mirror Aliyun

```

然后启动Docker即可

```shell

sudo systemctl start docker

```

> PS:执行此命令安装Docker后,无需再次安装docker-compose

2. Docker镜像源添加方法

目前docker镜像拉取已恢复正常,如仍因网络问题拉取不到镜像,可尝试在终端执行

```shell

sudo nano /etc/docker/daemon.json

```

输入:

```json

{

"registry-mirrors": [

"https://docker.m.daocloud.io",

"https://docker.1panel.live"

]

}

```

保存退出

重启Docker:

```shell

sudo systemctl restart docker

```

 3. 创建并启动BookStack容器

接下来创建BookStack项目文件夹并编辑docker-compose.yml,内容如下:

```shell

mkdir bookstack

```

```shell

nano docker-compose.yml

```

在编辑器中输入下方代码保存退出:

```yml

services:

  bookstack:

    image: ghcr.io/linuxserver/bookstack:latest

    container_name: bookstack

    environment:

      - PUID=1000

      - PGID=1000

      - APP_URL=http://localhost:8282

      - DB_HOST=db

      - DB_USER=bookstack

      - DB_PASS=secret

      - DB_DATABASE=bookstack

    volumes:

      - ./bookstack-data:/config

    ports:

      - 8282:80

    depends_on:

      - db

  db:

    image: mysql:5.7

    container_name: bookstack_db

    environment:

      MYSQL_ROOT_PASSWORD: rootpassword

      MYSQL_DATABASE: bookstack

      MYSQL_USER: bookstack

      MYSQL_PASSWORD: secret

    volumes:

      - ./mysql-data:/var/lib/mysql

volumes:

  bookstack-data:

  mysql-data:

```

然后执行下方命令启动容器运行:

```shell

sudo docker compose up -d

```

如需停止可以执行:

```shell

sudo docker-compose down

```

OK,经过以上过程,Docker部署 BookStack 相册 就完成了,现在我们可以通过任意浏览器进行访问测试。

在浏览器输入 http://localhost:8282 即可,显示下图即为访问成功!

4. 登录与简单使用

在登录界面,默认Email地址为 `admin@admin.com`,密码为 `password`

成功登录后的主界面如下图所示:

点击右上角用户名admin,在下拉框里面点击编辑用户资料链接,进入编辑页面对用户信息进行修改,比如用户名、密码、头像、首选语言等。

修改完中文显示后点击LOGO返回首页

点击右上角图书按钮,即可创建图书:

添加相关书籍信息后,点击保存图书

然后可以点击创建页面或添加章节进入编辑界面:

以此类推,可以添加更多的书籍到你的书架中:

5. 公网远程访问本地BookStack

不过我们目前只能在本地访问刚刚使用docker部署的BookStack书库,如果身在异地,想要远程访问在家中部署的BookStack并上传与管理书籍,应该怎么办呢?我们可以使用cpolar内网穿透工具来实现无公网ip环境下的远程访问需求。

### 5.1 内网穿透工具安装

下面是安装cpolar步骤:

> Cpolar官网地址: [https://www.cpolar.com](https://www.cpolar.com/)

使用一键脚本安装命令

```shell

curl https://get.cpolar.sh | sudo sh

```

安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)

```shell

sudo systemctl status cpolar

```

Cpolar安装和成功启动服务后,在浏览器上输入ubuntu主机IP加9200端口即:【http://localhost:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可:

### 5.2 创建远程连接公网地址

登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理——创建隧道:

- 隧道名称:可自定义,本例使用了:BookStack 注意不要与已有的隧道名称重复

- 协议:http

- 本地地址:8282

- 域名类型:随机域名

- 地区:选择China VIP

创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了两个公网地址:

接下来,需要将书库的docker-compose文件中的地址 http://localhost:8282 替换为这个http协议的公网地址:

```shell

nano docker-compose.yml

```

然后保存退出,先停止容器在启动容器

```shell

sudo docker compose down

```

```shell

sudo docker compose up -d

```

然后就可以在其他电脑或手机平板(异地)上,使用这个http公网地址在浏览器中访问即可。

如下图所示,成功实现使用公网地址异地远程访问本地部署的 BookStack 书库!

**小结**

为了方便演示,我们在上边的操作过程中使用了cpolar生成的HTTP公网地址隧道,其公网地址是随机生成的。

这种随机地址的优势在于建立速度快,可以立即使用。然而,它的缺点是网址是随机生成,这个地址在24小时内会发生随机变化,更适合于临时使用。

如果有长期远程访问本地 BookStack 书库或者其他本地部署的服务的需求,但又不想每天重新配置公网地址,还想地址好看又好记并体验更多功能与更快的带宽,那我推荐大家选择使用固定的二级子域名方式来远程访问。

### 5.3 使用固定公网地址远程访问

[登录cpolar官网](https://dashboard.cpolar.com/?_gl=1*w8xa1v*_ga*NDYxMDM0Nzc1LjE2ODk5Mjg0MTI.*_ga_WF16DPKZZ1*MTcyNTYxMTgyMy41MTEuMS4xNzI1NjExODQyLjQxLjAuMA..),点击左侧的预留,选择保留二级子域名,地区选择China VIP,设置一个二级子域名名称,点击保留,保留成功后复制保留的二级子域名名称,这里我填写的是mybooksk,大家也可以自定义喜欢的名称。

保留成功后复制保留成功的二级子域名的名称:mybooksk,返回登录Cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道 BookStack,点击右侧的编辑:

修改隧道信息,将保留成功的二级子域名配置到隧道中

- 域名类型:选择二级子域名

- Sub Domain:填写保留成功的二级子域名:mybooksk

- 地区:选择China VIP

点击`更新`(注意,点击一次更新即可,不需要重复提交)

更新完成后,打开在线隧道列表,此时可以看到公网地址已经发生变化,地址名称也变成了固定的二级子域名名称的域名:

接下来,再次回到终端中将书库的docker-compose文件中的随机公网地址替换为这个固定不变的公网地址并重启docker容器即可:

然后使用这个固定公网地址在浏览器访问,可以看到访问成功,这样即使出门在外也可以随时随地使用这个网址来远程访问本地部署的 BookStack 书库来管理本地图书了!

以上就是如何在Linux Ubuntu系统使用Docker部署BookStack 书库,并结合cpolar内网穿透工具配置固定公网地址,实现随时随地远程访问本地搭建的书库站点的全部流程,感谢您的观看,如果你也有远程访问本地部署服务的需求,不妨下载cpolar体验一下!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/11843.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【代码及应用】10个最常用的Python包!

世界上有超过200,000个Python程序包(这只是基于官方的Python程序包索引PyPI托管的程序包)这就引出了一个问题:拥有这么多的软件包,每个Python程序员都需要学习哪些软件包是最重要的? 包含编程资料、学习路线图、源代码…

Java面试要点01- 基本数据类型与包装类详解

本文目录 一、引言二、基本数据类型详解2.1 数值类型2.2 代码示例 三、包装类详解3.1 包装类介绍3.2 包装类的主要用途3.3 代码示例 四、注意事项和最佳实践4.1 数值计算注意事项4.2 包装类使用建议 五、面试重点详解5.1 基本类型和包装类的区别5.2 自动装箱和拆箱的原理5.3 In…

铠侠代理商 | KIOXIA SLC闪存选型和应用

一、铠侠(KIOXIA)的SLC闪存系列 铠侠SLC NAND可以高速写入大量数据,具有高的擦写次数耐久性和可靠性的1位/单元非易失性存储器。铠侠SLC NAND闪存产品系列具有多种容量和封装形式的选择,可满足嵌入式市场的不同需求。 铠侠的SLC…

ts定义接口返回写法

接口&#xff08;未进行ts定义&#xff09; export async function UserList(params: {// keyword?: string;current?: number;pageSize?: number;},// options?: { [key: string]: any }, ) {return request<API1.UserList>(http://geek.itheima.net/v1_0/mp/artic…

#多语言爬取京东价格信息 python 比价api接入指南

以下是使用 Python 接入京东价格信息比价 API 的一般指南&#xff1a; 寻找合适的比价 API 服务&#xff1a; 市面上有一些第三方数据服务提供商提供京东比价 API。这些服务通常需要你注册账号并申请 API Key 和 API Secret 等凭证&#xff0c;以便进行接口调用。你可以根据自己…

超详细:三大范式和反范式设计详解

目录 1、三大范式 第一范式&#xff1a; 列不可再分 。 第二范式&#xff1a; 行可以唯一区分 第三范式&#xff1a;确保数据的完整性、减少数据冗余和避免更新异常。 反方式模式 实验数据&#xff1a;模拟两张百万量级的数据表 反范式优化实验对比 反范式存在的问题 &am…

新标准大学英语综合教程1课后习题答案PDF第三版

《新标准大学英语&#xff08;第三版&#xff09;综合教程1 》是“新标准大学英语&#xff08;第三版&#xff09;”系列教材之一。本书共包含6个单元&#xff0c;从难度和话题上贴近大一上学生的认知和语言水平&#xff0c;包括与学生个人生活领域和社会文化等相关内容&#x…

Llama 3.2-Vision 多模态大语言模型

1. 引言 Llama 3.2-Vision多模态大型语言模型(文本 图像)是一个图像推理生成模型&#xff0c;按照官方的说法&#xff0c;在常见行业基准测试上&#xff0c;其性能优于许多可用的开源和闭源多模态模型。Llama 3.2-Vision有两个版本&#xff0c;一个是11B (7.9G)&#xff0c;另…

OpenObserve云原生平台指南:在Ubuntu上快速部署与远程观测

文章目录 前言1. 安装Docker2. Docker镜像源添加方法3. 创建并启动OpenObserve容器4. 本地访问测试5. 公网访问本地部署的OpenObserve5.1 内网穿透工具安装5.2 创建公网地址 6. 配置固定公网地址 前言 本文主要介绍如何在Linux系统使用Docker快速本地化部署OpenObserve云原生可…

隧道论文阅读2-采用无人融合扫描数据的基于深度学习的垂直型隧道三维数字损伤图

目前存在的问题&#xff1a; 需要开发新的无人测量系统测量垂直隧道图像数据量巨大&#xff0c;基于深度学习完成损伤评估跟踪获取图像位置的困难&#xff0c;对大型基础设施感兴趣区域(roi)的2d和3d地图建立进行了研究&#xff0c;对整个目标结构的损伤定位仍然具有挑战性。为…

【从VAE到LDM】Variational Auto Encoder原理以及关于Latent Diffusion的思考

论文链接&#xff1a;High-Resolution Image Synthesis with Latent Diffusion Models 官方实现&#xff1a;CompVis/latent-diffusion、CompVis/stable-diffusion 视频讲解&#xff1a;一个视频看懂VAE的原理以及关于latent diffusion的思考 前言 目前的扩散模型范式基本上都…

1111fxh,MYSQL加锁规则

怎么查看一个事务中对索引的加锁情况 -- 这条语句可以看到事务执行过程中加了哪些锁 select * from performance_schema.data_locks X是next-key lock 混合锁 X,REC_NOT_GAP就是行锁 X,GAP是间隙锁 可重复读下的加锁规则 2原则2优化 1.加锁的基本单位是next-key lock,即行…

mysql中数据不存在却查询到记录?

前言 首先看下面的查询语种 select * from AudioKnowledgeChatInfo where AudioId297795550566600706; 查询结果如下 看到上面的查询结果&#xff0c;是不是一脸懵&#xff1f;这audioId明显不对啊&#xff0c;怎么查询到了&#xff1f; 原因剖析 首先我们来看看数据库表…

拿不下总统之位,那就用热加载拿下验证码识别与爆破好了!

大家好&#xff0c;这里是在总统选举中惜败的超级牛 虽然没能拿下阿美利卡总统之位 但是牛牛的热加载功能&#xff0c;却能轻松拿下验证码的识别与爆破 验证码一般会在注册、登录等功能&#xff0c;用来防止自动化工具的攻击。一般的验证码生成过程如下图所示&#xff1a; …

闯关leetcode——202. Happy Number

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/happy-number/description/ 内容 Write an algorithm to determine if a number n is happy. A happy number is a number defined by the following process: Starting with any positive inte…

如何使用 Web Scraper API 高效采集 Facebook 用户帖子信息

目录 前言一、什么是Web Scraper API二、Web Scraper API 的优势&#xff1a;三、Web Scraper API 适用场景四、实践案例目标需求视频讲解1、选择Web Scraper API2、登录注册3、进入用户控制面板4、选择API5、触发数据收集 API6、获取爬虫结果7、分析爬虫结果&#xff08;1&…

json转excel,读取json文件写入到excel中【rust语言】

一、rust代码 将json文件写入到 excel中。&#xff08;保持json &#xff1a;key原始顺序&#xff09; use indexmap::IndexMap; use serde::Deserialize; use serde_json::{Value, from_str}; use std::error::Error; use std::io::{self, Write}; use std::path::{Path}; u…

2024年下半年系统规划与管理师论文真题

试题一、论IT服务规划设计 IT服务规划设计处于整个IT服务生命周期中的前端&#xff0c;可以帮助IT服务供方了解客户的需求并对其进行全面的需求分析&#xff0c;规划设计的范围不仅包括新的服务&#xff0c;还包括服务连续性保障服务水平的满足和对标准、规则的遵从&#xff0…

无人机动力测试台如何快速外接第三方传感器

前言 动力测试台对于测试动力系统的拉力、扭矩、RPM 和效率至关重要。将传感器集成到您的测试中增加了另一层优化&#xff0c;可以将您的性能提升到一个新的水平。 在无人驾驶行业中&#xff0c;有充分的证据表明&#xff0c;从外部传感器收集数据可能具有挑战性。为了解决这…

金蝶云星空与旺店通数据集成解决方案实例

金蝶云星空与旺店通旗舰奇门的数据集成案例分享 在企业日常运营中&#xff0c;数据的高效流转和准确对接是确保业务顺畅运行的关键。本文将聚焦于一个具体的系统对接集成案例&#xff1a;如何将金蝶云星空中的直接调拨单数据无缝集成到旺店通旗舰奇门平台。 本次集成方案命名…