Laravel+VueでTodoListアプリを作る -MySQL連携(2)
Laravel+VueでTodoListアプリを作る -MySQL連携(2)
前回の記事:
1
2
3
todo/
├── todo-api/ (Laravel API)
└── todo-app/ (Vue.js SPA)
Dockerを使用して、apiとfrontendを分けて作成します。
今回はmysqlを使用して、データベースを連携します。
1. .envファイル作成
1
2
3
4
todo/
├── todo-api/ (Laravel API)
├── todo-app/ (Vue.js SPA)
└── .env (データベース接続情報)
1
2
3
4
5
## MYSQL
MYSQL_ROOT_PASSWORD=8409
MYSQL_DATABASE=todo_db
MYSQL_USER=todo_user
MYSQL_PASSWORD=8409
プロジェクトディレクトリに.envファイルを作成します。
.ignoreにも.envを追加します。
2. docker-compose.yml修正
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
version: '3.8'
services:
todo-api:
build:
context: .
dockerfile: todo-api/Dockerfile
container_name: todo-api
ports:
- "9000:9000" # PHP-FPM
volumes:
- ./todo-api:/var/www
environment:
DB_HOST: todo-mysql
DB_DATABASE: ${MYSQL_DATABASE}
DB_USERNAME: ${MYSQL_USER}
DB_PASSWORD: ${MYSQL_PASSWORD}
depends_on:
- todo-mysql
networks:
- app-network
todo-api-nginx:
build:
context: .
dockerfile: todo-api-nginx/Dockerfile
container_name: todo-api-nginx
ports:
- "80:80" # Nginx 外部ポート
volumes:
- ./todo-api:/var/www/html
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- todo-api
networks:
- app-network
todo-front:
build:
context: ./todo-front
ports:
- "8080:80"
volumes:
- ./todo-front:/app
restart: always
networks:
- app-network
todo-mysql:
image: mysql:8.0
container_name: todo-mysql
restart: always
env_file:
- .env # ⬅️ .env から環境変数を読み込む
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
networks:
- app-network
networks:
app-network:
driver: bridge
volumes:
mysql_data:
docker-compose.ymlにDBコンテナを追加します。
3. データベース作成
3.1. コンテナ起動
1
docker-compose up -d
3.2. テーブル作成
1
2
docker exec -it todo-mysql bash
mysql -u root -p
パスワードは.envファイルで設定したものを使用します。
1
2
3
4
5
6
7
8
9
10
11
12
USE todo_db;
CREATE TABLE tasks (
id INT(11) AUTO_INCREMENT PRIMARY KEY,
user_id INT(11) NOT NULL,
task VARCHAR(255) NOT NULL,
content TEXT,
deadline DATETIME,
category VARCHAR(50),
flag TINYINT(1) DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
4. API設定
4.1. todo-api/.env修正
1
2
3
4
5
6
DB_CONNECTION=mysql
DB_HOST=todo-mysql
DB_PORT=3306
DB_DATABASE=${MYSQL_DATABASE}
DB_USERNAME=${MYSQL_USER}
DB_PASSWORD=${MYSQL_PASSWORD}
todo/.envのMYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORDを使用します。
4.2. todo-api/config/database.php修正
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST'),
'port' => env('DB_PORT'),
'database' => env('DB_DATABASE'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
'unix_socket' => env('DB_SOCKET'),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
mysqlの内容を修正します。
4.3. マイグレーション
1
php artisan migrate
This post is licensed under CC BY 4.0 by the author.