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 项目中了吧?
下次我们再具体聊聊。