vaultwarden 从 sqlite 切换到 mysql
-
目录树结构
. ├── vaultwarden.env ├── data ├── db └── docker-compose.yml
一、修改 docker-compose.yml
和 bitwarden.env
-
docker-compose.yml
version: "3.4" services: # 数据库配置 vaultwarden_db: image: mariadb:latest container_name: vaultwarden_db hostname: "mariadb" env_file: vaultwarden.env volumes: - "./db:/var/lib/mysql" - "/etc/localtime:/etc/localtime:ro" vaultwarden: image: vaultwarden/server:latest container_name: vaultwarden env_file: vaultwarden.env ports: - 8080:80 volumes: - './data:/data/'
-
vaultwarden.env
TZ=Asia/Shanghai # MySQL数据库连接 MYSQL_ROOT_PASSWORD="vaultwarden" MYSQL_PASSWORD="vaultwarden" MYSQL_DATABASE="vaultwarden" MYSQL_USER="vaultwarden" DATABASE_URL="mysql://vaultwarden:vaultwarden@mariadb/vaultwarden" RUST_BACKTRACE=1 # 用户注册=否 SIGNUPS_ALLOWED=false # 启用管理页面,且为加密token ADMIN_TOKEN='$argon2id$v=19$m=65540,t=3,p=4$ewb7tCYqD/htz0xxxxxxxxxxxxxxxxxx6Y8$uKxxxxxxxxxxuixxxxYRZgvk' # 启用推送 us地区 PUSH_ENABLED=true PUSH_INSTALLATION_ID='xxxxxx' PUSH_INSTALLATION_KEY='xxx' # 邮件配置 SMTP_HOST='mail.narutos.top' SMTP_FROM='[email protected]' SMTP_USERNAME='[email protected]' SMTP_PASSWORD='xxxxxxxxx' SMTP_PORT=465 SMTP_SECURITY=force_tls
二、准备一个空的mariadb
数据库
-
运行一个数据库容器
docker run --rm --detach \ --name mariadb \ --env MARIADB_ROOT_PASSWORD=vaultwarden \ -v ./db:/var/lib/mysql \ mariadb:latest
-
进入 MariaDB 容器内部,并连接到 MariaDB 数据库
docker exec -it mariadb bash # 在容器内部连接到 MariaDB,密码为 vaultwarden mariadb -u root -p
-
为Vaultwarden创建一个新的(空)数据库(确保字符集和整理正确!):
CREATE DATABASE vaultwarden CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-
创建一个新的数据库用户并授予数据库权限(MariaDB、v8之前的MySQL版本):
'vaultwarden'@'localhost'
:表示vaultwarden
用户只能从本地主机(localhost)连接到数据库。'vaultwarden'@'192.168.0.2'
:表示vaultwarden
用户只能从指定的 IP 地址(例如192.168.0.2
)连接到数据库。'vaultwarden'@'%'
:表示vaultwarden
用户可以从任何主机连接到数据库。
CREATE USER 'vaultwarden'@'%' IDENTIFIED BY 'vaultwarden'; GRANT ALL ON `vaultwarden`.* TO 'vaultwarden'@'%'; FLUSH PRIVILEGES;
-
停止
mariadb
容器,尝试运行vaultwarden
📌 如果正常运行(能进网页,日志不报错),证明配置没问题,就可以按 `Ctrl+C` 停掉容器否则就要重试之前的步骤# 两次exit退出容器 docker stop mariadb #停止数据库容器,要不然会显示文件被锁定 docker compose up #启动vaultwarden
三、处理旧数据库,得到mysqldump.sql
-
在
db.sqlite3
目录下运行一个数据库容器docker run -it --rm -v "$PWD":/code esolang/sqlite3 sh cd /code
-
使用以下命令转储现有的 SQLite 数据库。仔细检查您的 sqlite 数据库名称,默认应为
📌 我们需要从 sqlite 转储的输出中移除一些查询,如创建表等,我们将在这里进行。db.sqlite3
。/usr/bin/sqlite3 db.sqlite3 .dump | grep "^INSERT INTO" | grep -v "__diesel_schema_migrations" > sqlitedump.sql echo "SET FOREIGN_KEY_CHECKS=0;" > mysqldump.sql cat sqlitedump.sql >> mysqldump.sql
-
退出容器,复制
mysqldump.sql
到mariadb
数据库里面exit cp mysqldump.sql /docker/vaultwarden/db/
四、导入数据到mariadb
数据库
-
运行一个数据库容器
docker run --rm --detach \ --name mariadb \ --env MARIADB_ROOT_PASSWORD=vaultwarden \ -v ./db:/var/lib/mysql \ mariadb:latest
-
加载 MySQL 转储:
docker exec -it mariadb bash cd /var/lib/mysql # 加载,密码为 vaultwarden mariadb --force --password --user=vaultwarden --database=vaultwarden < mysqldump.sql
-
退出容器
exit docker stop mariadb
五、正常启动
-
修改
docker-compose.yml
(可选)version: "3.4" services: # 数据库配置 vaultwarden_db: image: mariadb:latest restart: always container_name: vaultwarden_db hostname: "mariadb" env_file: vaultwarden.env volumes: - "./db:/var/lib/mysql" - "/etc/localtime:/etc/localtime:ro" vaultwarden: image: vaultwarden/server:latest restart: always container_name: vaultwarden env_file: vaultwarden.env ports: - 127.0.0.1:8080:80 volumes: - './data:/data/'
docker compose up -d
评论区