插件实现思路:从插件中导出html文件并上传到web服务器,web服务器同时生成对应的index.html作为首页。
服务器实现思路:请求特定的链接时,从mysql中查询app_id和doc_id,并重定向到nginx中。
注意:docker的部署目前尚且还比较稳定,请有动手能力的小伙伴依然小心尝试!但不具有升级的能力,有可能应用升级后,出现未知问题!不适用于生产环境哦~
- spss表示siyuan-publig-share-system
- spss_nginx表示nginx容器,spss_mysql表示mysql容器,spss_engine表示应用容器
- 容器所需参数和细节说明参考docker-compose.yml
示例:分享地址为share.tengfei-xy.com:6780
-
修改docker-compose.yml的nginx的映射容器端口,比如修改为443,表示通过外部主机的6780端口访问nginx容器内部的的443端口
spss_nginx: image: "nginx:1.25.4" container_name: spss_nginx ports: - "0.0.0.0:6780:443"
-
修改docker-compose.yml的spss_engine容器参数,
注:v1.1.1及以前的SHARE_BASE_LINK和nginx映射的主机端口共同组成分享地址
注:v1.2.0及之后的SHARE_BASE_LINK作为完整的分享地址,SHARE_BASE_LINK的端口要与nginx容器映射的宿主端口保持一致,80和443可以忽略
spss_engine: environment: SHARE_BASE_LINK: "https://share.tengfei-xy.com:6780"
-
上传(共2个)证书文件到docker/nginx/ssl/(如果ssl文件夹不存在,需手动创建),并修改docker/nginx/nginx.conf,添加或修改server块
http{ ... server { listen 443 ssl; # 域名分享,需修改, 例如:example.com server_name example.com; # ssl 公钥证书文件,如果使用域名分享,修改此行的文件名,路径勿修改 ssl_certificate /etc/nginx/ssl/xxx; # ssl 私钥文件,如果使用域名分享,修改此行的文件名,路径勿修改 ssl_certificate_key /etc/nginx/ssl/xxx; ssl_session_timeout 5m; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; location / { proxy_set_header X-Real-IP $remote_addr; if (!-f $request_filename) { proxy_pass http://spss_engine_server/api/url$uri; break; } root /etc/nginx/html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /etc/nginx/html; } location /api { proxy_pass http://spss_engine_server; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; client_max_body_size 100m; } } }
-
如果你在切换http和https,仅仅需要修改docker-compose.yml的nginx的映射容器端口即可,比如80换成443或443换成80。此处的修改无关上传了多少链接或页面,数据库本身不存储链接,仅仅存储分享地址中的随机字符串。由于nginx.conf同时存储了80和443的server块,因此他们是可以随意切换的。
-
下载并解压适合你的系统版本的压缩包
-
修改docker-compose.yml,其他参数可以默认,
SHARE_BASE_LINK
不能默认, -
docker-compose启动所有容器
cd docker/ sudo docker-compose up -d
-
运行以上命令后,spss_mysql将执行初始化,spss_engine由于无法连接到数据库而自动重启,重启直到数据库初始化完成
-
spss_engine启动后,运行如下命令,仅支持linux和mac,WSL未测试
./init.sh
-
修改思源笔记的分享笔记插件的服务器地址并保存,每打开设置窗口,本插件就会获取链接,当控制台(切换为所有消息级别)输出
{"err":3,"msg":"此页面没有共享","data":""}
表示服务已正常启动。
nginx容器日志
sudo docker exec -it spss_nginx cat /var/log/nginx/access.log
sudo docker exec -it spss_nginx cat /var/log/nginx/error.log
应用容器日志
sudo dcoker logs spsse_engine
当应用容器需要变更时,仅仅运行sudo docker-compose up -d
是无法让新的应用容器运行,因为已经存在旧的镜像,因此需要先删除旧的容器,再执行sudo docker-compose up -d
。
其他指令参考
sudo docker run -d \
--name spss_engine \
-e SPSS_STARTUP_ENV=docker \
-e SHARE_BASE_LINK=http://127.0.0.1 \
-e SAVE_PATH=/data \
-e LISTEN_PORT=25934 \
-e GIN_MODE=release \
-v $(pwd):/data \
--restart always \
spss_engine
首先从最新版的压缩包中提取spss_engine
二进制程序文件到docker/
文件夹下,并修改docker-compose.yaml
的spss_engine
的镜像tag名,注:新版的docker-compose.yml
中的spss_engine容器配置可能也有变化,而不仅仅是应用容器的tag名
-
手动执行
-
停止容器
sudo docker-compose down spss_engine
-
可选的步骤,删除所有现存的应用镜像
sudo docker images | grep spss_engine | awk '{print $3}' | xargs -n1 sudo docker rmi
-
最后,构建镜像并后台运行
sudo docker-compose up -d spss_engine
-
-
自动执行
cd docker ./update_spss_engine.sh
设置配置文件,文件名config.yaml
mysql:
ip: "127.0.0.1"
port: "3306"
# 写死于程序代码中
username: "share_system"
# 可自定义
password: "password"
# 写死于程序代码中
database: "share_system"
basic:
# 监听的这个端口需要和nginx转发的地址相互吻合
listen: "127.0.0.1:25934"
# 插件上传的保存位置
savePath: "/usr/local/services/nginx-1.25.4/html"
# 生成的短链接,将以此参数作为开头
shareBaseLink: "http://124.223.15.220"
权限说明
由插件上传的文件,均以755权限模式放置于basic.savePath
路径。但要注意nginx用户的启动程序的用户的两者权限是否冲突。
nginx
作为主要的web服务器,版本无特别要求,作者使用1.25.4
参考配置
location / {
proxy_set_header X-Real-IP $remote_addr;
if (!-f $request_filename) {
proxy_pass http://127.0.0.1:25934/api/url$uri;
break;
}
root html;
}
location /api {
proxy_pass http://127.0.0.1:25934;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 100m;
}
mysql
作为链接和数据的存储,版本无特别要求,作者使用5.7.43
参考:建库文件