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

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

用户权限

镜像中是使用默认创建的普通用户 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 部署一个)。

  • 思源笔记

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

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

    20156 引用 • 77723 回帖
  • Q&A

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

    7018 引用 • 31717 回帖 • 219 关注

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • Dockerfile 是基于源码的,现在思源这部分没有开源,所以无法给出。但是可以试着基于桌面端发布包来自己制作镜像,只需包含桌面端安装后 resources 文件夹下面的这几个部分:

    • appearance
    • guide
    • stage
    • kernel

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

    1 回复
  • 其他回帖
  • 三、参考 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 里的 Linux 系统时基于哪个 image 镜像么?
    比如 FROME centos:latest

    1 回复
  • 你好,我不清楚通过环境变量要如何实现,麻烦指导一下。

    4 回复
  • 查看全部回帖

推荐标签 标签

  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖 • 1 关注
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 94 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 5 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 615 关注
  • flomo

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

    4 引用 • 91 回帖
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 2 关注
  • webpack

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

    41 引用 • 130 回帖 • 283 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    16 引用 • 7 回帖 • 2 关注
  • Q&A

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

    7018 引用 • 31717 回帖 • 219 关注
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 1 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    106 引用 • 152 回帖
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 321 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    70 引用 • 533 回帖 • 734 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 239 关注
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 404 关注
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 110 关注
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    165 引用 • 1474 回帖
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1427 引用 • 10046 回帖 • 473 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 196 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    186 引用 • 318 回帖 • 330 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    35 引用 • 35 回帖
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    86 引用 • 897 回帖 • 1 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    124 引用 • 580 回帖
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 141 关注
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖 • 3 关注