【Docker】Linux系统以及威联通QNAP部署思源笔记的通用教程

news2024/11/15 8:41:56

本文首发于 ❄️慕雪的寒舍

本文测试的是旧版本v2.11.4的部署方式,实测当前(2024.08.15)最新的v3.1.3版本也可以用相同的方式部署。本文的部署方式共写了三种,非qnap的linux系统也可以参考本文部署思源笔记。

阅读本文之前,先明确两个名词:

  • “宿主机”指的是部署docker服务的主机,本文所述是qnap的nas本体;
  • “容器内”是思源docker容器内部的路径或端口;

这是部署docker服务时最常遇到的两个描述,写在这里避免大家对基本概念不了解而导致的误操作。另外,强烈建议您在学习了docker容器化的基本配置逻辑和docker的基本技术概念之后,再去使用docker。这会对您理解和配置所有docker容器服务都会有很大的帮助!您可以阅读本站的编程学习/docker学习专栏,有任何问题都可评论区提出。

思源的论坛中隔三岔五就会有人因为不理解docker的配置几何导致出现种种问题,其中因为宿主机路径映射失败导致所有笔记文件丢失还不做备份的也不在少数!

1. 部署容器

1.1. 在威联通container-station3上部署

这个版本是我从2024年年初一直用到现在的版本,没遇到过任何问题,个人感觉没有必要升级。如果你想部署其他版本,可以修改冒号右侧的版本号。

b3log/siyuan:v2.11.4

拉取镜像后,创建容器。这里我使用的是最新的container station 3

image

先配置容器的端口,主机端口设置为一个未被使用的端口即可,重启策略改成始终重启。

image

添加存储映射,在nas上新建一个文件夹来存放思源笔记的数据。冒号左侧是你的qnap上的共享文件夹路径,必须新建一个文件夹作为宿主机路径进行映射。

/Public/docker/data/synote/data:/home/siyuan/sy

image

然后是修改启动命令,在命令中选择覆盖,然后键入如下内容。如果你的docker需要外网访问,则一定要把accessAuthCode密码设置的复杂一些!

--workspace=/home/siyuan/sy --lang=zh_CN --accessAuthCode=你的密码

image

然后创建容器就可以了。

创建完毕容器一定要去检查日志,看工作空间有没有问题。如下所示,日志的路径中提到了/home/siyuan/sy,即代表当前使用的就是我们设置好的路径,那就是没有问题的。

image

包括检查本地的映射路径中是否有对应的文件,如果没有下面的这些文件,一定要去确认你的docker路径映射有没有问题

image

最终访问本地IP:端口,显示下面的内容,就是部署成功了。

image

1.2. 使用docker-cli命令部署

使用docker命令部署参考如下设置,最新版本3.1.0也是一样的命令,我已经测试过了,修改镜像的tag就可以了。其中你可以修改的是-v选项冒号左侧的宿主机目录,以及-p选项后冒号左侧的宿主机端口号。

sudo docker run -d \
    --name siyuan \
    -v 你需要绑定的宿主机目录:/home/siyuan/sy \
    -p 你需要绑定的宿主机端口:6806 \
    --restart=always \
    b3log/siyuan:v2.11.4 \
    --workspace=/home/siyuan/sy \
    --lang=zh_CN \
    --accessAuthCode=123456

部署完毕后,一定要检查你绑定的宿主机目录下是否有文件!没有文件是有问题的!比如我使用-v /home/wsl/synote/data:/home/siyuan/sy命令创建了思源容器,此时ls -l查看宿主机该路径下会有如下文件,这才是正常情况。

❯ ls -l /home/wsl/synote/data
total 12K
drwxr-xr-x  3 wsl wsl 4.0K May 25 18:23 conf
drwxr-xr-x 11 wsl wsl 4.0K May 25 18:23 data
drwxr-xr-x  4 wsl wsl 4.0K May 25 18:21 temp

1.3. 使用docker-compose部署

在威联通container-station-3中支持docker-compose,就是界面中的应用程序这一栏。真的得吐槽一下qnap的国内翻译组,一股机翻的味道,你还不如不翻译,直接用stack或者docker-compose还更好让人理解一些,最开始我都不知道应用程序是嘛玩意,还以为container-station从2变成3后不支持docker-compose了。

这里给出qnap可以使用的docker-compose.yml,其实也是所有Linux通用的。

该yml文件的注意事项在注释里面提到了。其中volumes的配置一定要注意,我们在container-station-3里面可以选择我们的文件夹,但是这些我们创建的共享文件夹的绝对路径都是在/share下的,比如我的共享文件夹名称为Public,那么最终需要在docker-compose里面写的绝对路径就是/share/Public。如果你不注意这一点,直接从/Public开始写,就会发现无论如何配置,思源容器都无法启动,会提示权限不够。说白了还是宿主机目录映射错位置了。

version: '3'
services:
  siyuan_compose:
    image: b3log/siyuan:v2.11.4
    container_name: siyuan-compose
    restart: unless-stopped
    environment:
      PGID: 1000
      PUID: 1000
      TZ: "Asia/Shanghai"
    ports:
      # 本地端口改冒号左边的。
      - "20000:6806"
    volumes:
	  # 本地映射路径改冒号左边的。
      # 注意qnap的docker-compose采用绝对路径,需要在前面加上/share才是共享文件夹!
      - /share/Public/docker/data/synote/data:/home/siyuan/sy 
    # 登录密码改最后一个accessAuthCode命令等号之后的,其他的别改。
    command: ["--workspace=/home/siyuan/sy","--lang=zh_CN","--accessAuthCode=123456"]
    stdin_open: true  ## 相当于 -i
    tty: true         ## 相当于 -t

写进去后点击创建,即可创建思源容器。

请进入容器日志检查是否成功启动,以及进入本地映射的目录检查是否有文件!一定要检查一定要检查,不要等你到时候容器出问题了发现本地目录没有文件!

image.png

比如日志中不应该出现报错,工作空间路径和我们配置的一致,以及/share/Public/docker/data/synote/data路径下应该出现conf、data、temp等文件夹。

image.png

如果是其他Linux主机,将上述内容修改成你的配置之后,在你的linux主机上将上述内容写入一个docker-compose.yml文件,然后使用如下方式启动思源容器

sudo docker-compose up -d

如果提示docker-compose命令不存在,可以试试docker compose命令,如果还是提示不存在,则需要去安装docker-compose,本站有相关博客。

2. 如何设置镜像源?

PS: 因为一些原因,各大服务商提供的公开docker镜像源都下架了,您可以尝试自建镜像源或百度一下目前仍然可用的免费公开镜像源。注意,目前可用的公开镜像源大多是互联网用户主动提供的,可能会存在安全风险!

2.1. contianer station3如何添加镜像源?

默认情况下dockerhub的连通性并不是很好,可能没有办法pull镜像,所以需要设置docker的镜像源。

设置方法如下。

image

点击添加存储库,提供商选择其他,然后URL是填镜像源的名称。

推荐使用南京大学的镜像https://docker.nju.edu.cn,速度不错。

image

填好了之后点击测试链接,成功就OK了,点击应用。

image

设置了之后,在映像中就可以使用这个镜像源来pull容器了。

image

image

不过没有办法通过镜像源来搜容器,自带的搜索只能使用dockerhub来pull镜像。每次需要镜像的时候,都得去找容器的镜像名字是什么,还是有点不方便。

2.2. docker命令行如何添加镜像源?

docker的命令行需要修改系统的配置来设置镜像源,对应的文件是/etc/docker/daemon.json。修改这个文件之前,建议先备份一份(如果原本有这个文件的话)

sudo cp /etc/docker/daemon.json ./docker-daemon.json.bak

然后使用nano或vim编辑器修改这个文件

sudo vim /etc/docker/daemon.json

往文件中复制粘贴如下内容

{
 	"registry-mirrors": ["https://docker.nju.edu.cn"]
}

随后重启docker服务就可以了,如果无法重启docker服务,也可以直接重启整个主机。

sudo systemctl restart docker

3. 部署思源后可能遇到的问题

3.1. 工作空间不一致问题

在下面的这个命令中,我们将使用-v命令映射的容器内的目录(冒号右侧)和--workspace的选项都设置为了/home/siyuan/sy。在部署的时候一定要确认二者的设置是一致的,否则思源会因为找不到容器内的目录,而采用默认的工作空间。相当于路径映射失败

docker run -d \
    --name siyuan \
    -v 你需要绑定的宿主机目录:/home/siyuan/sy \
    -p 你需要绑定的宿主机端口:6806 \
    --restart=always \
    b3log/siyuan:v2.11.4 \
    --workspace=/home/siyuan/sy \
    --lang=zh_CN \
    --accessAuthCode=123456

对于不太了解docker机制的用户而言,此时删除了该容器,你的数据就很难找回来了!!这也是为什么前文一直强调,创建了容器后,要去检查自己的本地路径中是否有对应的文件。

比如你使用了如下映射,那么在创建容器后,一定、一定、一定要去宿主机本地的/home/mu/synote路径下检查是否多出了思源创建的文件!!!!验证方法很简单,你可以给思源单独创建一个新的文件夹,当思源容器启动后,这个文件夹里面多出了repo、data、temp等目录,那么就是映射成功了。

-v /home/mu/synote:/home/siyuan/sy

如果没有出现新的目录,那就需要去检查思源容器日志,看看工作空间是否正常,以及宿主机目录是否有权限问题导致容器内无法访问。

3.2. 权限问题

思源容器是使用1000用户来创建和访问文件的,所以如果你映射的宿主机路径无法被1000用户或用户组访问,此时日志中就会出现Permission Deny字眼,代表思源缺少权限,没有办法在你映射的工作空间中创建和访问文件。

你可以通过docker logs命令查看容器的日志。

docker logs 思源容器名字

下面是一个思源的日志,来源于社区帖子。在这个日志中出现了[lstat /root/document/fllsynote: permission denied]的输出,代表当前思源没有办法访问/root/document/fllsynote这个路径,因为它是一个root用户的路径,权限组不是1000,无法被思源容器的1000用户组访问。

然后日志中的第二行输出的意思是,思源发现你提供的工作路径/root/document/fllsynote压根没有办法访问,不是个路径(因为思源没有权限访问),所以它会去使用默认的工作路径/home/siyuan/SiYuan。这个时候问题就来了,如果你没有去检查容器日志和本地文件,你会发现思源是正常启动且可以使用的,但它把你的笔记都写入了容器内部,如果后续你的docker出现问题或者你想升级思源镜像版本的时候,把当前容器删除了,数据就丢了

fllsiyuan | W 2024/07/24 19:23:09 file.go:210: determines whether [/root/document/fllsynote] is a directory failed: [lstat /root/document/fllsynote: permission denied]
fllsiyuan | W 2024/07/24 19:23:09 working.go:258: use the default workspace [/home/siyuan/SiYuan] since the specified workspace [/root/document/fllsynote] is not a dir

考虑到真的有很多很多很多人压根没有备份的习惯(即便思源提供了非常方便的导出DATA备份方式),本文再三强调了检查本地映射路径是否有文件的重要性。

解决这个权限问题的办法有几种:

  1. 不要使用root用户来操作docker命令,而是使用一个子用户+sudo的方式操作docker命令,因为子用户创建出来的文件夹权限是ok的。
  2. 手动使用chown和chgrp命令将创建出来的宿主机文件夹用户组改成1000(推荐)。
  3. 对于qnap来说,第一个注册的非admin用户就是1000用户,你可以用第一个注册的用户来配置这里的docker容器,并设置映射到qnap的文件夹目录的可读可写权限。理论上也只有第一个注册的用户是默认的管理员,能使用container-station;

针对第二点做个说明,chown命令是修改文件夹的所属用户,chgrp命令是修改文件夹的所属组。-R选项代表同时修改这个文件夹内部的子文件夹权限。

sudo chown -R 1000 文件夹
sudo chgrp -R 1000 文件夹

比如我使用了-v /root/siyuan:/home/siyuan/sy进行映射,此时我映射的宿主机目录是在root用户下,大概率是没有办法被容器内直接访问的。此时思源日志中就会出现Permission Deny错误

这样操作了之后,这个文件夹就可以被容器内访问了,不过你还是需要去检查日志或该文件夹判断是否成功。

还是那句话,创建了容器后,一定要去检查自己的本地路径中是否有对应的文件!

4. 写在最后

不管你采用什么方式部署的容器,请一定要确认你映射的本地路径中有对应的文件!数据无价哦!

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

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

相关文章

SpringBoot 集成积木报表

SpringBoot 集成积 前言 积木报表是jeecg的一款开源但代码不开源的一款自定义报表,可以基于网页灵活 调整报表的布局、样式等内容,无需编程,专为企业数据分析、报表制作而设计; 降低管理人员汇总制作报表的门槛,解决…

在表格上,按照单元格数值显示单元格背景进度条

想要实现的效果如下: 单元格背景进度条的大小取决于当前单元格里的数值 TreeList和GridControl的设置方法都是相同的:都是通过给列设置FormatRule来实现的。 相关代码及设置如下: 1、给控件绑定数据源,我的数据源是一个DataTab…

25届网安秋招,信息泄露常问之配置信息泄露

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?…

基于STM32开发的智能花园灌溉系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化土壤湿度监测与处理灌溉控制与状态指示Wi-Fi通信与远程监控应用场景 家庭花园智能灌溉农业田地的智能灌溉管理常见问题及解决方案 常见问题解决方案结论 1. 引言 随着智能家居技术…

录屏神器!一键搞定视频录制,小白也能轻松上手

在工作当中录制会议内容或者看电影录制精彩瞬间、学习时录制网课的重点部分等等都是需要借助可以实现屏幕录制的工具,让我们的日常更加精彩并且有回忆的记录,今天就来给大家整理了四款好用的录屏工具,实现保存高清、流畅的电脑屏幕的精彩记录…

重定向

重定向原理 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> int main() { close(1); int fd open("myfile", O_WRONLY|O_CREAT, 00644); if(fd < 0){ perror("o…

V-ASSISTANT软件无法设置V90伺服软限位

使用V-ASSISTANT软件配置V90伺服参数时&#xff0c;软限位功能是灰色且未勾选&#xff0c;无法设置软限位&#xff0c;如下图所示&#xff1a; 原因&#xff1a;设置零点位置之后需要在PLC中激活软限位&#xff08;如FB284中ConfigEPOS管脚的Bit2&#xff09; FB284中的Confi…

python学习之路 - pyecharts快速入门

目录 一、pyecharts入门1、pyecharts模块介绍a、概况 2、pyecharts基础入门&#xff08;以折线图为例&#xff09;a、安装依赖b、创建折线图c、常用配置项 3、pyecharts创建柱状图a、创建基本柱状图b、创建反转柱状图c、创建含有时间线的柱状图 4、pyecharts地图可视化a、生成中…

WSL-ubuntu下载安装配置cudnn

下载 安装cuDnn的话需要和CUDA版本对应&#xff0c;可参考官网&#xff1a; cuDNN Archive | NVIDIA Developer 我的cuda是11.8 这个cuDNN8.9.7_Linux直接下载&#xff1a; https://developer.nvidia.com/downloads/compute/cudnn/secure/8.9.7/local_installers/11.x/cudn…

无人机技术的最新进展及未来趋势

一、飞行控制技术的提升 复杂环境下的稳定性&#xff1a;现代无人机在飞行控制系统方面的升级&#xff0c;使其能在复杂环境中稳定飞行&#xff0c;例如强风条件下或狭窄空间内。 智能避障系统&#xff1a;新型无人机配备有高精度的传感器和先进的算法&#xff0c;能够实现自…

vue3快速入门(一)新建项目与安装插件

步骤很详细&#xff0c;直接上教程 在对应路径下&#xff0c;cmd输入npm create vuelatest,然后按图所示进行选择&#xff08;仅供新手参考&#xff09; 安装以下插件 3.重启vscode&#xff08;为了确保插件生效&#xff09; 4.在vscode启动内置终端 输入npm i或pnpm i安装依赖…

浅谈 mysql 单、双引号的3种用法

mysql 单引号和双引号的使用&#xff0c;主要有以下3种情形 1、在引用字符型或日期类型的值时使用。 2、使用 as 创建别名时使用&#xff0c;别名如含特殊字符&#xff0c;则必须使用单引号或双引号。 3、解决数据原文中存在的单双引号问题。 注&#xff1a;本文所指的单、…

【Docker】Docker学习01 | 什么是docker?

本文首发于 ❄️慕雪的寒舍 因为本人没有学习过docker&#xff0c;虽然部署过很多镜像&#xff0c;但是对于docker底层的实现一概不知。趁学习一个新项目的契机&#xff0c;将docker的相关概念了解清楚。 安装docker的教程请查看 Linux主机安装docker。 如果你想和我一起学习do…

内存管理篇-02内存硬件电路和接口

1. 内存硬件实现机制 通过D触发器构建寄存器和内存的结构对比,这里主要先表达sram复杂&#xff0c;dram简单。 2. sram和ddr sdram结构图对比 主要是想对比sram和dram在和CPU连接过程的差异。sram需要的地址线较多&#xff0c;dram需要的较少&#xff0c;但是需要多次发送&…

如何用Python进行民宿数据分析?可视化工具应用教程

&#x1f393; 作者&#xff1a;计算机毕设小月哥 | 软件开发专家 &#x1f5a5;️ 简介&#xff1a;8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 &#x1f6e0;️ 专业服务 &#x1f6e0;️ 需求定制化开发源码提…

微信小游戏授权问题

微信小程序获取用户相关信息的接口&#xff0c;如wx.getUserCloudStorage&#xff0c;报错&#xff1a;please go to mp to announce your privacy usage。 需要在微信公众平台设置用户隐私保护。

CentoOS 7下配置并部署 DataX 3.0与DataX-web

数据同步框架 DataX DataX本身作为离线数据同步框架,采用 Framework plugin架构构建。将数据源读取和写入抽象成为Reader/ Writer插件,纳入到整个同步框架中。 Reader: Reader为数据采集模块,负责采集数据源的数据,将数据发送给 Framework。 Writer: Writer为数据写入模块,负责…

一种间距可调式在线测宽仪!

关键词&#xff1a;在线测宽仪,测宽仪,板材测宽仪,板材 我们都知道&#xff0c;在板材生产线中&#xff0c;为了应对多方市场需求&#xff0c;生产的板材规格众多&#xff0c;甚至宽度范围相差甚大。而现在应用于产线的在线测宽仪多为光学测量方式&#xff0c;这也就意味着&…

Nginx: 配置项之access模块、auth_basic模块、auth_request模块

access模块 用于限定特定IP或者是网段进行访问的&#xff0c;从而实现Nginx的一个访问权限控制这个模块&#xff0c;它仅能够针对IP或者网段的一个访问 1 &#xff09;指令集 1.1 allow 语法结构: allow address | CIDR | UNIX | all all 是放行所有address 可以是 ip 地址…

TCP的连接建立及报文段首部格式

粘包问题&#xff1a; 原因&#xff1a;TCP流式套接字&#xff1b;数据与数据之间没有边界&#xff1b;导致可能多次的数据粘到一起。 解决办法&#xff1a; 规定一些数据与数据之间的间隔符&#xff0c;如&#xff1a;"\aa\", "\r\n"。指定要发送的数据…