从 Memos 迁移到 Blinko
蛇年新春,大地回春。关注 Blinko 有一段时间了,最近有时间能将数据迁移到 Blinko 进行一些体验。
部署
我使用 Docker Compose 进行部署,已有 Traefik 和 Authelia 做反向代理和 SSO。下面是 docker-compose.yml 文件示例:
networks:
blinko:
driver: bridge
traefik:
external: true
volumes:
blinko-postgres-data:
blinko-data:
services:
blinko:
image: blinkospace/blinko:latest
container_name: blinko
environment:
NODE_ENV: production
NEXTAUTH_URL: https://blinko.example.com
NEXT_PUBLIC_BASE_URL: https://blinko.example.com
NEXTAUTH_SECRET: your-nextauth-secret
DATABASE_URL: postgresql://postgres:your-postgres-password@postgres:5432/postgresnetworks:
blinko:
driver: bridge
traefik:
external: true
volumes:
blinko-postgres-data:
blinko-data:
services:
blinko:
image: blinkospace/blinko:latest
container_name: blinko
environment:
NODE_ENV: production
NEXTAUTH_URL: https://blinko.example.com
NEXT_PUBLIC_BASE_URL: https://blinko.example.com
NEXTAUTH_SECRET: your-nextauth-secret
DATABASE_URL: postgresql://postgres:your-postgres-password@postgres:5432/postgres
HOSTNAME: 0.0.0.0
depends_on:
postgres:
condition: service_healthy
volumes:
- blinko-data:/app/.blinko
restart: unless-stopped
expose:
- "1111"
healthcheck:
test: [ "CMD", "curl", "-f", "http://blinko:1111/" ]
interval: 30s
timeout: 10s
retries: 5
start_period: 30s
networks:
- traefik
- blinko
labels:
- reverse-proxy=traefik
- traefik.http.routers.blinko.rule=Host(`blinko.example.com`)
- traefik.http.routers.blinko.tls=true
- traefik.http.routers.blinko.tls.certresolver=zero
- homepage.group=Brain
- homepage.name=Blinko
- homepage.icon=sh-blinko.svg
- homepage.href=https://blinko.example.com
- homepage.description=Your personal knowledge base
postgres:
image: postgres:16
container_name: blinko-postgres
restart: unless-stopped
environment:
POSTGRES_DB: postgres
POSTGRES_USER: postgres
POSTGRES_PASSWORD: your-postgres-password
TZ: Asia/Shanghai
volumes:
- blinko-postgres-data:/var/lib/postgresql/data
healthcheck:
test: [ "CMD", "pg_isready", "-U", "postgres", "-d", "postgres" ]
interval: 5s
timeout: 10s
retries: 5
networks:
- blinko
上面的配置中,值得注意的是 blinko 容器中使用了 HOSTNAME=0.0.0.0 的环境变量,这确保 Blinko 能监听所有网络的对应端口,解决 Traefik 可能访问不到的问题。
迁移数据
我是单用户使用 Memos,所以数据迁移比较简单,使用 Blinko 内置的迁移工具就能实现。不过迁移工具有一些小问题,正好有时间也改了改。

导入完成后,我做了两个步骤,一是从 Memos 的目录中将之前存在于文件存储的文件复制到 Blinko 中,二是将所有闪念全部转成了笔记:
1. 复制资源
docker cp ~/.memos/assets/. blinko:/app/.blinko/./assets/
2. 闪念转笔记
docker compose exec --user postgres postgres psql -c "update notes set type = 1 where type = 0;"
#Self-Hosted/Blinko