デモ用サンプルデータの転送(SQLiteからMySQLへ)
デモ用バックエンド(Strapi)のデータベースはSQLite形式で提供されているため、MySQL(MariaDB)をデータベースとする場合には、そのままでは利用できません。
以下2つのバックエンドを用意します。
② config/database.js
const path = require('path');
module.exports = ({ env }) => {
const client = env('DATABASE_CLIENT', 'sqlite');
const connections = {
mysql: {
connection: {
connectionString: env('DATABASE_URL'),
host: env('DATABASE_HOST', 'localhost'),
port: env.int('DATABASE_PORT', 3306),
database: env('DATABASE_NAME', 'strapi'),
user: env('DATABASE_USERNAME', 'strapi'),
password: env('DATABASE_PASSWORD', 'strapi'),
ssl: env.bool('DATABASE_SSL', false) && {
key: env('DATABASE_SSL_KEY', undefined),
cert: env('DATABASE_SSL_CERT', undefined),
ca: env('DATABASE_SSL_CA', undefined),
capath: env('DATABASE_SSL_CAPATH', undefined),
cipher: env('DATABASE_SSL_CIPHER', undefined),
rejectUnauthorized: env.bool(
'DATABASE_SSL_REJECT_UNAUTHORIZED',
true
),
},
},
pool: { min: env.int('DATABASE_POOL_MIN', 2), max: env.int('DATABASE_POOL_MAX', 10) },
},
mysql2: {
connection: {
host: env('DATABASE_HOST', 'localhost'),
port: env.int('DATABASE_PORT', 3306),
database: env('DATABASE_NAME', 'strapi'),
user: env('DATABASE_USERNAME', 'strapi'),
password: env('DATABASE_PASSWORD', 'strapi'),
ssl: env.bool('DATABASE_SSL', false) && {
key: env('DATABASE_SSL_KEY', undefined),
cert: env('DATABASE_SSL_CERT', undefined),
ca: env('DATABASE_SSL_CA', undefined),
capath: env('DATABASE_SSL_CAPATH', undefined),
cipher: env('DATABASE_SSL_CIPHER', undefined),
rejectUnauthorized: env.bool(
'DATABASE_SSL_REJECT_UNAUTHORIZED',
true
),
},
},
pool: { min: env.int('DATABASE_POOL_MIN', 2), max: env.int('DATABASE_POOL_MAX', 10) },
},
postgres: {
connection: {
connectionString: env('DATABASE_URL'),
host: env('DATABASE_HOST', 'localhost'),
port: env.int('DATABASE_PORT', 5432),
database: env('DATABASE_NAME', 'strapi'),
user: env('DATABASE_USERNAME', 'strapi'),
password: env('DATABASE_PASSWORD', 'strapi'),
ssl: env.bool('DATABASE_SSL', false) && {
key: env('DATABASE_SSL_KEY', undefined),
cert: env('DATABASE_SSL_CERT', undefined),
ca: env('DATABASE_SSL_CA', undefined),
capath: env('DATABASE_SSL_CAPATH', undefined),
cipher: env('DATABASE_SSL_CIPHER', undefined),
rejectUnauthorized: env.bool(
'DATABASE_SSL_REJECT_UNAUTHORIZED',
true
),
},
schema: env('DATABASE_SCHEMA', 'public'),
},
pool: { min: env.int('DATABASE_POOL_MIN', 2), max: env.int('DATABASE_POOL_MAX', 10) },
},
sqlite: {
connection: {
filename: path.join(
__dirname,
'..',
env('DATABASE_FILENAME', '.tmp/data.db')
),
},
useNullAsDefault: true,
},
};
return {
connection: {
client,
...connections[client],
acquireConnectionTimeout: env.int('DATABASE_CONNECTION_TIMEOUT', 60000),
},
};
};
上記2つのバックエンドを同時に起動(docker-composeによるコンテナ起動)
docker-compose.yml
version: "3"
services:
strapi:
container_name: strapi
image: node:20
restart: always
env_file: .env
environment:
NODE_ENV: ${NODE_ENV}
user: "node"
working_dir: /home/node/app
# $ yarn create strapi-app project
volumes:
- ./backend:/home/node/app
ports:
- "1337:1337"
command: "yarn develop"
networks:
proxy-tier:
ipv4_address: 172.18.0.2
depends_on:
- mariadb
strapi1338:
container_name: strapi1338
image: node:20
restart: always
env_file: .env_1338
environment:
NODE_ENV: ${NODE_ENV}
user: "node"
working_dir: /home/node/app
# $ yarn create strapi-app project
volumes:
- ./backend_1338:/home/node/app
ports:
- "1338:1338"
command: "yarn develop"
networks:
proxy-tier:
ipv4_address: 172.18.0.3
mariadb:
container_name: mariadb
platform: linux/amd64 #for platform error on Apple M1 chips
restart: always
env_file: .env
image: mariadb:latest
environment:
MYSQL_USER: ${DATABASE_USERNAME}
MYSQL_ROOT_PASSWORD: ${DATABASE_PASSWORD}
MYSQL_PASSWORD: ${DATABASE_PASSWORD}
MYSQL_DATABASE: ${DATABASE_NAME}
volumes:
- ./db:/var/lib/mysql
ports:
- "3306:3306"
networks:
proxy-tier:
ipv4_address: 172.18.0.4
networks:
proxy-tier:
name: containers-network
external: true
.env
NODE_ENV=development
HOST=0.0.0.0
PORT=1337
APP_KEYS=xxxx
API_TOKEN_SALT=xxxxxx
ADMIN_JWT_SECRET=xxxxxxxxx
JWT_SECRET=xxxxxxxxxx
TRANSFER_TOKEN_SALT=xxxxxxxxxxxxxxxxxxxxxxxxxx
# Database default:sqlite
DATABASE_CLIENT=mysql
DATABASE_HOST=mariadb
DATABASE_PORT=3306
DATABASE_NAME=strapi
DATABASE_USERNAME=strapi
DATABASE_PASSWORD=xxxxxxxxxxxxxx
DATABASE_SSL=false
.env_1338
NODE_ENV=development
HOST=0.0.0.0
PORT=1338
APP_KEYS=xxxx
API_TOKEN_SALT=xxxxxx
ADMIN_JWT_SECRET=xxxxxxxxx
JWT_SECRET=xxxxxxxxxx
TRANSFER_TOKEN_SALT=xxxxxxxxxxxxxxxxxxxxxxxxxx
①コンテナ内で下記コマンドを実行しデータの移行を行います。
①から②へデータを移行。
# yarn strapi transfer --to http://192.168.xx.xx:1337/admin --to-token xxxxxxx.....
? The transfer will delete existing data from the remote Strapi! Are you sure you want to proceed? Yes
Starting transfer...
✔ entities: 67 transfered (size: 52.5 KB) (elapsed: 701 ms)
✔ assets: 70 transfered (size: 23.3 MB) (elapsed: 6312 ms)
✔ links: 60 transfered (size: 11.4 KB) (elapsed: 149 ms)
✔ configuration: 66 transfered (size: 138.3 KB) (elapsed: 353 ms)
┌───────────────────────────────────────────────────┬───────┬───────────────┐
│ Type │ Count │ Size │
├───────────────────────────────────────────────────┼───────┼───────────────┤
│ entities │ 67 │ 52.5 KB │
├───────────────────────────────────────────────────┼───────┼───────────────┤
│ -- api::article.article │ 7 │ ( 21.3 KB) │
├───────────────────────────────────────────────────┼───────┼───────────────┤
│ -- api::author.author │ 2 │ ( 333 B ) │
├───────────────────────────────────────────────────┼───────┼───────────────┤
│ -- api::category.category │ 3 │ ( 604 B ) │
├───────────────────────────────────────────────────┼───────┼───────────────┤
│ -- api::global.global │ 1 │ ( 1.4 KB) │
├───────────────────────────────────────────────────┼───────┼───────────────┤
│ -- api::lead-form-submission.lead-form-submission │ 6 │ ( 1.1 KB) │
├───────────────────────────────────────────────────┼───────┼───────────────┤
│ -- api::page.page │ 2 │ ( 3.3 KB) │
├───────────────────────────────────────────────────┼───────┼───────────────┤
│ -- api::product-feature.product-feature │ 5 │ ( 1 KB) │
├───────────────────────────────────────────────────┼───────┼───────────────┤
│ -- plugin::i18n.locale │ 1 │ ( 158 B ) │
├───────────────────────────────────────────────────┼───────┼───────────────┤
│ -- plugin::upload.file │ 21 │ ( 19.6 KB) │
├───────────────────────────────────────────────────┼───────┼───────────────┤
│ -- plugin::users-permissions.permission │ 16 │ ( 3 KB) │
├───────────────────────────────────────────────────┼───────┼───────────────┤
│ -- plugin::users-permissions.role │ 3 │ ( 677 B ) │
├───────────────────────────────────────────────────┼───────┼───────────────┤
│ assets │ 70 │ 23.3 MB │
├───────────────────────────────────────────────────┼───────┼───────────────┤
│ -- .ico │ 1 │ ( 15 KB) │
├───────────────────────────────────────────────────┼───────┼───────────────┤
│ -- .jpg │ 52 │ ( 23 MB) │
├───────────────────────────────────────────────────┼───────┼───────────────┤
│ -- .png │ 13 │ ( 243.6 KB) │
├───────────────────────────────────────────────────┼───────┼───────────────┤
│ -- .svg │ 4 │ ( 17.7 KB) │
├───────────────────────────────────────────────────┼───────┼───────────────┤
│ links │ 60 │ 11.4 KB │
├───────────────────────────────────────────────────┼───────┼───────────────┤
│ configuration │ 66 │ 138.3 KB │
├───────────────────────────────────────────────────┼───────┼───────────────┤
│ Total │ 263 │ 23.5 MB │
└───────────────────────────────────────────────────┴───────┴───────────────┘
Transfer process has been completed successfully!
Done in 14.03s.