思源笔记 docker 部署及第三方同步

2023.11.17

思源社区的部署教程已经过时(2021 年发布),因此我们在实践中逐个解决问题,并重新撰写了部署教程,在此感谢 chatGPT 的大力支持

环境

Ubuntu22.04

在本地和阿里云服务器都进行了测试,本地部署相对简单,阿里云上需要注意一些细节(后面说)

docker & docker-compose

换源

老生常谈的问题了,直接上指令

cp /etc/apt/sources.list /etc/apt/sources.list.bk
vim /etc/apt/sources.list

把以下内容 copy 进去

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

然后更新

sudo apt-get update
sudo apt-get upgrade

安装 docker & docker-compose

docker

直接在 bash

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo docker run hello-world

执行完如果没问题的话,执行如下指令试试

docker ps -a

没提示没有“docker”这个命令就成功了

docker-compose

下载二进制文件,放进 <u>/usr/local/bin</u>​即可,指令如下

喜欢什么版本,把版本号**v2.2.2**换掉就行

sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

下载的时候经常因为网络、路径错误出问题,一定要仔细看下执行完的反馈

测试/dm

docker-compose

没提示没有“docker-compose”这个命令就成功了

至此总算是完成了大部分的准备工作

docker-compose.yml

找一个文件路径,作为之后你存放思源数据的地方,此处假设文件路径为/siyuan

在路径/siyuan 下新建 docker-compose.yml 文件,内容如下:

version: '3'

services:
  siyuan:
    image: b3log/siyuan:latest
    container_name: siyuan
    restart: always
    volumes:
      - /siyuan:/root/Documents/SiYuan
    command: [--workspace=/root/Documents/SiYuan,--lang=zh_CN,--accessAuthCode=授权码]
    network_mode: "host"

ps:路径一定要改,授权码一定要写

授权码指的是 最后访问思源时输入的密码,这个可以自己任意设置,比如一堆乱码:128398236rjsdafakdnfasdk

run

然后在/siyuan 路径下执行

docker compose up -d

执行完查看以下 log

docker-compose logs

应当显示跟下图差不多(不用怀疑,我肯定没有全部截图):

image

接下来直接用*http://ip:6806 访问测试一下,能成功访问就大功告成了*

补充(阿里云)

本地端这样部署就结束了,阿里云服务器还需要关闭防火墙和配置安全组

第三方同步

阿里云和腾讯云

阿里云和腾讯云已经有大佬写过教程,我这里不再赘述了,大家可以参看如下:

思源笔记同步指南 - 知乎 (zhihu.com)

第三方同步选择 - S3 服务商对比推荐 - 链滴 (ld246.com)

思源使用阿里云 OSS 同步详细教程 - 链滴 (ld246.com)

华为云

我个人都是已经首选华为云,我没有设置子帐号了,主要是主账号也没啥重要的东西

域名绑定

服务器/本地设备有公网 ip 的话非常简单,购买域名、ICP 备案,然后添加一条 dns 解析即可。

给大家说个滑稽的事情,我的域名是在华为云购买和备案的,然后 docker 的服务器是阿里云买的。我在华为云 dns 配置了解析,然后乐子来了,阿里云认为华为云这个域名没有备案,把访问拦截了,咱也没办法

域名:图解从域名到建站_域名注册服务 Domains_产品介绍_华为云 (huaweicloud.com)

备案:成长地图_ICP 备案_华为云 (huaweicloud.com)

DNS 解析:成长地图_云解析服务 DNS_华为云 (huaweicloud.com)

结束

放个捐赠思源开发者的,我已经捐了

靠爱发电 - 链滴 (ld246.com)

  • 思源笔记

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

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

    19545 引用 • 74329 回帖 • 2 关注
5 操作
Zhangshanshan 在 2024-01-10 11:01:30 更新了该帖
Zhangshanshan 在 2023-12-14 17:26:21 更新了该帖
Zhangshanshan 在 2023-12-14 17:19:13 更新了该帖
Zhangshanshan 在 2023-11-18 16:42:55 更新了该帖 Zhangshanshan 在 2023-11-17 20:33:17 更新了该帖

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • 建议发知乎

    1 回复
  • bkzy333

    请问 授权码 如何获取的啊?需要购买吗?

    4 回复
  • muxue

    这里说的授权码是你 web 端的登录密码,不写授权码别人知道你的地址就能直接看你思源笔记了

  • Mura

    可以用“预定设置好的密码”来理解 授权码 AccessAuthCode

  • Mura

    我也来补充一些,供参考。应用于固定 IP 访问思源笔记

    # 1.创建一个docker macvlan network。如果你想指定ip的话,subnet设置跟你局域网一样。这里192.168.1.0/24仅供参考
    docker network create -d macvlan \
        --subnet=192.168.1.0/24 \
        --gateway=192.168.1.1 \
        -o parent=ens192 docker-net
    

    docker-compose 文件

    version: '3.3'
    services:
        siyuan:
            stdin_open: true
            tty: true
            container_name: siyuan
            restart: always
            user: '1000:1000'
            ports: 
                - '6806:6806' # 用macvlan时,端口其实全部开放,不用设置,同样也不能用80:6806来转换。想用80端口只能配置nginx反向代理
            command: [--accessAuthCode=你自己预设置的密码]
            environment:
                - TZ=Asia/Shanghai
                - LANG=zh_CN.UTF-8
                - LC_ALL=zh_CN.UTF-8
            networks:
                docker-net:
                    ipv4_address: 192.168.1.16
            volumes:
                - 'data_volume:/home/siyuan/SiYuan'
            image: 'b3log/siyuan:latest'
    networks:
        docker-net:
            external:
                name: docker-net
    volumes:
        data_volume: {} # 我比较喜欢用volume。这样在/var/lib/docker/volumes可以找到对应的卷
    

    nginx 反向代理文件主要部分内容,请根据实际情况调整

    
    # 思源笔记
    upstream siyuan {
    	server 192.168.1.16:6806;  
    }
    server {
        listen       80;
        # listen       [::]:80;
        # server_name  localhost;
        # root         /usr/share/nginx/html;  
        # 思源笔记
        location / {
    	proxy_pass         http://siyuan/;
    	proxy_set_header   Host      $http_host;
    
    	proxy_set_header X-Real-IP $remote_addr;
    	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    	#proxy_http_version 1.1;
    
            # 缓冲设置。可以不用设置
    	proxy_buffering on;
    	proxy_buffer_size 512K;
    	proxy_buffers	64 512k;
    	proxy_busy_buffers_size 1m;
    
    	# websocket必须要设置
    	proxy_http_version 1.1;
    	proxy_connect_timeout 5s;
    	proxy_read_timeout 60s;
            proxy_send_timeout 30s;
    	proxy_set_header Upgrade $http_upgrade; 
    	proxy_set_header Connection "$connection_upgrade"; 
    
        }
    }
    
    

    这样假设 nginx 服务器的 ip 是 192.168.11.2,那么通过 http://192.168.11.2 或 http://192.168.1.16:6806 就能正常访问思源笔记了

    1 回复
  • 主要是思源笔记可以一键发布在思源社区,说白了就是懒哈哈

  • 这个是你自己设置的,就是你的登陆密码,不要轻易给别人哦

  • 非常感谢!!!

  • haiyanuser

    这里的授权码,名字取的比较让人混淆,其实就是访问页面时候会提示你输入的一个密码,这个密码是你自己自定义的,随便一个什么,只要你记得住的就好,比如:888888

    1 回复
  • 感谢!已经在文中添加了说明!非常感谢!

  • submartingale

    大佬,我今天参照你的教程在服务器部署了一下,但在公网使用 ip+ 端口访问不了。在服务器上看该容器的 port 是空的,我把 network_mode 这一行注释掉,加了 port 6806:6806 现在可以访问了。想咨询一下 network_mode 这个如果用 hosts 的话,为什么会出现这个情况呢?我查了我的入站规则肯定是没问题的(不然我修改之后应该也无法访问)

    1 回复
  • Alan2333

    感谢大佬,用软路由的 portainer 一键 docker-compose.yml 瞬间成功了,大佬牛皮,就是 S3 和 Webdav 同步好像要会员才能用,我是刚刚加入的小白,有个 iStoreOS 就想部署一下,这个以前的 S3 和 Webdav 同步是不是不用会员

    1 回复
  • s3 不需要会员的,自行设置即可

  • 我印象中不写 network_mode,也是默认 hosts(我朋友没写这个也能用)。可能有些玄学问题,不过能用就行

  • 怎么更新 docker 中的思源版本

请输入回帖内容 ...