玩转 surrealDB

SurrealDB+Docker

玩转 surrealDB

虽然知道 SurrealDB 有一段时间了,但由于它还处在测试阶段,所以并没有进一步使用它。

直到宁浩网surrealDB 入门课程 的出现,让我正式的开始使用它,并开发了一个商业项目。

今天主要讨论的是如何使用 docker 将 surrealDB 安装在你的电脑或服务器上面。

使用 Docker

由于我并不想在我的笔记本电脑直接安装 Surreal,因为我不喜欢安装那么多的开发软件进来,并且我的服务器都是基于 docker 管理的,所以我决定使用官方提供的 docker image

按照官方指南虽然很容易,但当使用 HTTP 请求时却无法工作,因为指南中没有明确说明如何设置启动 docker image 的 username / password。

docker run --rm -p 8000:8000 surrealdb/surrealdb:latest start --user root --pass root

使用此命令就可以正确启动 docker 了。

使用 docker-compose

docker 方式很容易,但更主要的是我想把它用在一个 Nuxt3 项目上,并且需要支持 traefik 的配置,所以我制作了一个 docker-compose.yaml 文件。

version: '3.8'

services:

  surrealdb:
    image: surrealdb/surrealdb:latest
    container_name: surrealdb
    ports:
      - "8000:8000"
    stdin_open: true
    tty: true
    command:
      - start
      - --user=root
      - --pass=root
    restart: always

这是一个完整的基础版本的 docker-compose,然后我还需要把 traefik 的配置加进来:

version: '3.8'

services:

  surrealdb:
    image: surrealdb/surrealdb:latest
    container_name: surrealdb
    ports:
      - "8000:8000"
    stdin_open: true
    tty: true
    command:
      - start
      - --user=root
      - --pass=root
    restart: always
    networks:
      - traefik
    labels:
      - "traefik.enable=true"
      - "traefik.http.services.surreal.loadbalancer.server.port=8000"
      - "traefik.http.routers.surreal0.entrypoints=http"
      - "traefik.http.routers.surreal0.middlewares=https-redirect@file"
      - "traefik.http.routers.surreal0.entrypoints=https"
      - "traefik.http.routers.surreal0.rule=Host(`surreal.$DOMAIN`)"
      - "traefik.http.routers.surreal.entrypoints=https"
      - "traefik.http.routers.surreal.rule=Host(`surreal.$DOMAIN`)"
      - "traefik.http.routers.surreal.tls=true"

networks:
  traefik:
    external: true

现在来看虽然是比较完备的,但是如果在实际应用中我们还需要让这个数据库拥有备份功能,下面我将重新制作一个 Dockerfile 来支持数据库备份的 CLI。

Dockerfile

FROM busybox:1.35.0-uclibc as busybox

FROM surrealdb/surrealdb:latest
COPY --from=busybox /bin/sh /bin/sh
COPY --from=busybox /bin/mkdir /bin/mkdir
COPY --from=busybox /bin/cat /bin/cat
COPY --from=busybox /bin/chmod /bin/chmod
ENTRYPOINT /surreal start --log debug --user $DB_USER --pass $DB_PASSWORD file://database.db

docker-compose.yaml 最终版

version: '3.8'

services:
  db:
    env_file:
      - ./.env
    build:
      args:
        - DB_USER=${DB_USER}
        - DB_PASSWORD=${DB_PASSWORD}
      context: ./
      dockerfile: Dockerfile
    image: db
    ports:
      - 8000:8000
    volumes:
      - ./data/database.db:/database.dbservices:
  db:
    env_file:
      - ./.env
    build:
      args:
        - DB_USER=${DB_USER}
        - DB_PASSWORD=${DB_PASSWORD}
      context: ./
      dockerfile: Dockerfile
    image: db
    ports:
      - 8000:8000
    restart: always
    networks:
      - traefik
    volumes:
      - ./data/database.db:/database.db
    labels:
      - "traefik.enable=true"
      - "traefik.http.services.surreal.loadbalancer.server.port=8000"
      - "traefik.http.routers.surreal0.entrypoints=http"
      - "traefik.http.routers.surreal0.middlewares=https-redirect@file"
      - "traefik.http.routers.surreal0.entrypoints=https"
      - "traefik.http.routers.surreal0.rule=Host(`surreal.$DOMAIN`)"
      - "traefik.http.routers.surreal.entrypoints=https"
      - "traefik.http.routers.surreal.rule=Host(`surreal.$DOMAIN`)"
      - "traefik.http.routers.surreal.tls=true"
networks:
  traefik:
    external: true

.env 文件

DB_USER=root
DB_PASSWORD=root

有了这 3 个文件,就可以运行 surrealdb,并连接到 image:

docker ps
docker exec -it <DOCKER IMAGE ID> /bin/sh`

使用实例执行 backup up 命令:

/surreal export --conn http://localhost:8000 --user root --pass root --ns test --db test export.sql

命令必须以 Dockerfile 中描述的 '/surreal' 开头。

现在我们已经可以使用 docker-compose 运行 surrealDB 了,这样应该没有问题应用在 Nuxt 3 项目中了吧?

下次我们再具体聊聊。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容