求群晖 Docker 部署思源,PC 端 Drive 无法同步解决方案

本贴最后更新于 830 天前,其中的信息可能已经水流花落

用户权限

镜像中是使用默认创建的普通用户 siyuan(uid 1000/gid 1000)来启动内核进程的,所以在宿主机创建工作空间文件夹时请注意设置该文件夹所属用户组:chown -R 1000:1000 /siyuan/workspace,在启动容器时需要带参数 -u 1000:1000

Docker 部署脚本

docker run -itd \
-u 1000:1000 \
-e TZ=Asia/Shanghai \
-e LANG=zh_CN.UTF-8 \
-e LC_ALL=zh_CN.UTF-8 \
-v <PATH_DIR>:/SiYuan/ \
--restart=always \
--network=host \
--name siyuan \
b3log/siyuan:latest -resident -workspace /SiYuan -accessAuthCode <YOUR_PASSWORD> -servePath <domain:port> -ssl
  • <PATH_DIR>:是在 Synology Drive 下建的文件夹,用来同步 PC 端的思源

问题

由于用户权限需要为 -u 1000:1000,故需要用 chown -r 1000:1000 设置 PATH_DIR 所属用户与用户组。这将导致 Synology Drive 识别该文件夹所属用户为 未知用户 且无法同步。

使用 Synology Drive 同步数据原由

Web 端缺少部分功能,如:导出 WordPDF...。PC 端软件为生产主力,移动端使用 Web 查看,避开安卓 data 权限不好获取问题(不要说 Folder Sync,需要 WebDav,群晖套件也没法添加额外目录,除非再 docker 部署一个)。

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    18608 引用 • 69253 回帖 • 1 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    6518 引用 • 29299 回帖 • 248 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 一、修改容器用户 UID 和 GID

    docker 容器内的用户也算是千奇百怪了……一般情况下是没有什么影响的,但是有时我们想通过 volume 把内容挂在出来的时候,就会出现权限的问题了。如果都改成 777 明显是不合适的。如 LinuxServer 提供的容器一般都会提供通过环境变量的方式来修改 UIDGID。当然如果你千年不变的用 root 那么当我什么也没说了……

    通过给 TiddlyWiki 制作 docker 镜像的时候,实现了一个动态修改 UIDGID 的方案。通过启动 entrypoint.sh 来修改容器内用户的信息达到和容器外用户一致的 UIDGID

    dockerfile

    FROM node:lts-alpine3.13
    MAINTAINER liuwentao@gmail.com
    
    RUN \
    echo "https://mirrors.cloud.tencent.com/alpine/v3.11/main/" > /etc/apk/repositories && \
    echo "https://mirrors.cloud.tencent.com/alpine/v3.13/community/" >> /etc/apk/repositories && \
    apk add shadow && \
    useradd -u 666 -U -d /config -s /bin/false abc && \
    usermod -G users abc && \
    npm install -g tiddlywiki@5.1.23 --registry=https://registry.npm.taobao.org
    
     
    EXPOSE 8080
    VOLUME [ "/app" ]
    WORKDIR /app
    COPY entrypoint.sh /entrypoint.sh
    
    RUN chmod +x /entrypoint.sh
    CMD [ "/entrypoint.sh" ]
    

    #!/usr/bin/env sh
    PUID=${PUID:-911}
    PGID=${PGID:-911}
    groupmod -o -g "$PGID" abc
    usermod -o -u "$PUID" abc
    
    groupmod -o -g "$PGID" abc
    usermod -o -u "$PUID" abc
    
    chown abc:abc /app
    
    if [ ! -f "/app/tiddlywiki.info" ]; then
        tiddlywiki /app --init server
    fi
    
    tiddlywiki /app --listen host=0.0.0.0
    

    核心是通过 groupmodusermod 修改用户 abcUIDGID。这两个软件在 alpine 中对应的软件包是 shadow

  • 其他回帖
  • 三、参考 Gitea Dockerfile

    环境变量

    您可以通过环境变量配置 Gitea 的一些设置:

    ###################################
    #Build stage
    FROM golang:1.17-alpine3.13 AS build-env
    
    ARG GOPROXY
    ENV GOPROXY ${GOPROXY:-direct}
    
    ARG GITEA_VERSION
    ARG TAGS="sqlite sqlite_unlock_notify"
    ENV TAGS "bindata timetzdata $TAGS"
    ARG CGO_EXTRA_CFLAGS
    
    #Build deps
    RUN apk --no-cache add build-base git nodejs npm
    
    #Setup repo
    COPY . ${GOPATH}/src/code.gitea.io/gitea
    WORKDIR ${GOPATH}/src/code.gitea.io/gitea
    
    #Checkout version if set
    RUN if [ -n "${GITEA_VERSION}" ]; then git checkout "${GITEA_VERSION}"; fi \
     && make clean-all build
    
    # Begin env-to-ini build
    RUN go build contrib/environment-to-ini/environment-to-ini.go
    
    FROM alpine:3.13
    LABEL maintainer="maintainers@gitea.io"
    
    EXPOSE 22 3000
    
    RUN apk --no-cache add \
        bash \
        ca-certificates \
        curl \
        gettext \
        git \
        linux-pam \
        openssh \
        s6 \
        sqlite \
        su-exec \
        gnupg
    
    RUN addgroup \
        -S -g 1000 \
        git && \
      adduser \
        -S -H -D \
        -h /data/git \
        -s /bin/bash \
        -u 1000 \
        -G git \
        git && \
      echo "git:*" | chpasswd -e
    
    ENV USER git
    ENV GITEA_CUSTOM /data/gitea
    
    VOLUME ["/data"]
    
    ENTRYPOINT ["/usr/bin/entrypoint"]
    CMD ["/bin/s6-svscan", "/etc/s6"]
    
    COPY docker/root /
    COPY --from=build-env /go/src/code.gitea.io/gitea/gitea /app/gitea/gitea
    COPY --from=build-env /go/src/code.gitea.io/gitea/environment-to-ini /usr/local/bin/environment-to-ini
    RUN ln -s /app/gitea/gitea /usr/local/bin/gitea
    

    entrypoint:

    #!/bin/sh
    
    if [ "${USER}" != "git" ]; then
        # rename user
        sed -i -e "s/^git\:/${USER}\:/g" /etc/passwd
    fi
    
    if [ -z "${USER_GID}" ]; then
      USER_GID="`id -g ${USER}`"
    fi
    
    if [ -z "${USER_UID}" ]; then
      USER_UID="`id -u ${USER}`"
    fi
    
    ## Change GID for USER?
    if [ -n "${USER_GID}" ] && [ "${USER_GID}" != "`id -g ${USER}`" ]; then
        sed -i -e "s/^${USER}:\([^:]*\):[0-9]*/${USER}:\1:${USER_GID}/" /etc/group
        sed -i -e "s/^${USER}:\([^:]*\):\([0-9]*\):[0-9]*/${USER}:\1:\2:${USER_GID}/" /etc/passwd
    fi
    
    ## Change UID for USER?
    if [ -n "${USER_UID}" ] && [ "${USER_UID}" != "`id -u ${USER}`" ]; then
        sed -i -e "s/^${USER}:\([^:]*\):[0-9]*:\([0-9]*\)/${USER}:\1:${USER_UID}:\2/" /etc/passwd
    fi
    
    for FOLDER in /data/gitea/conf /data/gitea/log /data/git /data/ssh; do
        mkdir -p ${FOLDER}
    done
    
    if [ $# -gt 0 ]; then
        exec "$@"
    else
        exec /bin/s6-svscan /etc/s6
    fi
    
  • Dockerfile 是基于源码的,现在思源这部分没有开源,所以无法给出。但是可以试着基于桌面端发布包来自己制作镜像,只需包含桌面端安装后 resources 文件夹下面的这几个部分:

    • appearance
    • guide
    • stage
    • kernel

    其中 kernel 文件夹下面是内核可执行文件,启动传参可参考帮助文档。

    1 回复
  • 那能说下 Dockerfile 里的 Linux 系统时基于哪个 image 镜像么?
    比如 FROME centos:latest

    1 回复
  • 查看全部回帖

推荐标签 标签

  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    27 引用 • 66 回帖
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    25 引用 • 191 回帖 • 19 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖 • 1 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    89 引用 • 113 回帖
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    84 引用 • 139 回帖 • 1 关注
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    139 引用 • 441 回帖
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    180 引用 • 400 回帖
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 628 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 601 关注
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖 • 3 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 634 关注
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖
  • JSON

    JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。

    51 引用 • 190 回帖 • 2 关注
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    85 引用 • 1201 回帖 • 454 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    103 引用 • 294 回帖 • 3 关注
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 392 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    675 引用 • 535 回帖
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 250 关注
  • CodeMirror
    1 引用 • 2 回帖 • 114 关注
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 6 关注
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    491 引用 • 1383 回帖 • 373 关注
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 243 关注
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    3 引用 • 80 回帖 • 1 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    41 引用 • 130 回帖 • 297 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    1 引用 • 11 回帖 • 1 关注