青石使用文档

部署至Linux

大部分Markdown编辑器都是单机的,但是单机模式在多端同步中有诸多不便,需要借助第三方工具来实现,同时也不利于移动端的编辑(开发中),如果您有自己的服务器,建议将青石编辑器部署至您的服务器上,在线版青石拥有更方便的共享文档能力。

青石在线版借助chrome文件系统可以无缝将本机Markdown文档批量导入编辑器,也可以一键将在线文档以标准的Markdown格式导出至本机,所以也建议您使用chromeedge浏览器(chrome文件系统仅在https下有效)。

在线版青石将文档与图片缓存至浏览器的indexddb中,这样使得青石在线版的响应速度与单机软件基本一致,在操作中感受不到任何延迟。服务器端仅用来备份数据,因为当您手动清除浏览器缓存时,indexddb会被清除。

在chrome 或 edge浏览器中 indexddb的存储空间接近于主机硬盘,所以您无需担心缓存空间不足。

存储与indexddb还带来了另一个好处,那就是在极端情况下,您的服务器发生了故障且无法恢复时,浏览器缓存中的文档仍然可以导出至本机以保留您的文档数据。只需要再次安装青石程序,使用原有的域名打开主页,在登录页中可以看到导出按钮,点击他即可导出您的文档数据。如下图所示:

image

每个部署版还支持5个子账号,账号间的数据互相隔离。

现代浏览器都支持PWA技术,将在线版青石安装至桌面,他的使用体验将无限接近于桌面编辑器。

开始部署

青石的部署过程非常简单,支持直接部署与使用docker部署,青石加入了无缝的升级能力,当有新版本发布时,您仅需在界面中点击升级即可。

建议您使用以下版本的Linux。

直接部署

sh
# 需要unzip解压程序 or yum install unzip
apt install unzip
# 安装nodejs管理工具
curl -fsSL https://fnm.vercel.app/install | bash
source $HOME/.bashrc
# 安装nodejs 20
fnm install 20
# 下载并安装青石在线版
curl -fsSL https://www.inkdown.me/latest | bash
cd inkdown
pnpm i
pnpm i pm2 --global
# 启动网络服务
pm2 start ecosystem.config.cjs

青石默认监听3006端口,您可以在项目根目录下的package.json改变他。

json
{
  "scripts": {
    // 在此修改端口
    "start": "node scripts/start.js && PORT=3006 remix-serve ./build/server/index.js"
  }
}

至此青石已经部署完成,通过浏览器打开它直接使用吧~。

请注意,启动inkdown后再package.json -> inkdown字段中将生成随机的secret字段,这个字段不可删除,也建议保存,当您备份数据库文件时,如果secret改变,原有账号仍然不可用,需要将secret回填至 package.json -> indkown中。

使用Docker部署

sh
apt install unzip
# 下载并安装青石在线版
curl -fsSL https://www.inkdown.me/latest | bash
cd inkdown
## 构建镜像
docker build -t inkdown-image .
## 启动容器
docker run -d --name inkdown -p 3006:3006 inkdown-image

我们将青石端口暴露给主机的3006端口,你可以按照你的需要来变更他。

大多数情况下,我们会使用nginx来代理,以下nginx配置可做为参考:

nginx
server {
    listen      80;
    # listen      443 ssl;
    # ssl_certificate path.pem;
    # ssl_certificate_key path.key;
    # ssl_session_timeout 5m;
    # ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    # ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    # ssl_prefer_server_ciphers on;
    server_name  inkdown.yourdomain.com;
    gzip on;
    gzip_comp_level 6;
    gzip_min_length 1k;
    gzip_static on;
    gzip_types
    application/javascript
    text/javascript
    text/css
    application/json
    application/manifest+json
    image/svg+xml;
    client_max_body_size 100M;
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host  $http_host;
        proxy_set_header X-Nginx-Proxy true;
        proxy_http_version 1.1;
        proxy_pass    http://localhost:3006; # 端口
    }
}