watson-seiの技術ブログ

outputはinput以上に

Amazon Lightsail で docker-composeを使った立ち上げ + MySQL + PhpMyAdmin

はじめに

Amazon Lightsail で docker-composeを使っている記事がなかったのと、データベース専用のインスタンスを立ち上げる以外の方法も試してみたいなと思ったので今回は試した方法と結果を書きました。

環境

Mysqlの調整

Mysqlの初期化や再起動などでメモリ問題(mmap(137363456 bytes) failed; errno 12)などのエラーで起動しない場合があるので、Swap領域を確保します。これが一番てこずりましたw

swap領域を確保します

freeコマンドを実行すると設定していなければswapが0で出色されますので増やします。

// 空ファイル作成
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024

// 作成した空ファイルをswap領域に設定
sudo mkswap /swapfile

// スワップ領域を有効化
sudo swapon /swapfile

MySQが落ちる トラブルシューティング Cannot allocate memory for the buffer pool - 長生村本郷Engineers'Blog

PhpMyAdmin設定

1 インスタンスの「⁝」をクリックして管理を押します。 f:id:Autumn-leavestan:20201019100608p:plain 2 ネットワーキングをクリックして、ファイアーウォールのルールを追加で、以下の条件を設定!

Docker-Composeを作成

参考コードを少し書き換えただけですが以下のように書いてください。

version: '3.8'

services: 
    mysql:
        image: mysql
        environment: 
            - MYSQL_ROOT_PASSWORD=password <- amazon linux 2のroot@localhostのパスワード
    
    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        environment: 
            PMA_ARBITRARY: 1
            PMA_HOST: mysql
            PMA_USER: root 
            PMA_PASSWORD: password <- amazon linux 2のroot@localhostのパスワード
        restart: always
        links:
            - mysql:mysql
        ports: 
            - '8080:80'
        volumes: 
            - mysql-data:/path/to/data

volumes:
    mysql-data:
        driver: local

Mysql の root_passwordの調べ方

下記コマンドを実行してMySQLのlogファイルを開く

sudo less /var/log/mysqld.log

開いたファイル内で下記の様な一行を見つける。

YYYY-MM-DDTHH:MM:SS.260490Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: XXXXXXXXXXXX

ファイルに記載された行のXXXXXXXXXXXXの部分がrootユーザの初期パスワードとなる。

AWS EC2 AmazonLinux2 MySQL rootユーザの初期パスワードの確認方法 - Qiita

Docker-Compose実行

docker-compose up -d

phpmyadminへのアクセスは、インスタンスのパブリックipに8080ポートをつけるとアクセスができます。

public-ip:8080