DockerをつかってXAMPP、Laravel環境の構築 | IT技術者のIT技術者によるIT技術者のためのブログ

IT技術者のIT技術者によるIT技術者のためのブログ

IT技術者向けのブログです。

PHPやJavascript、HTMLやCSS、iPhoneやAndroidなど

Web関係の技術情報を発信します。

先日、AWSクラウドプラクティショナーの試験に合格し、

そこで知ったAWSのサービスでECRとECSがあります。

 

Elastic Container RegisryとElastic Container Serviceでどちらも

Dockerのコンテナに関するサービスです。

 

今更ながらDockerを使っていなかったこともあり、

この際サービスを理解するためにもDockerで開発環境を作ってみたので

その時の手順を記録します。

 

使用環境は

OS:amazon linux

ミドルウェア:XAMPP

フレームワーク:Laravel

 

■はローカル側、■はサーバー側のコマンドです。

 

前提条件として、DockerはPCにインストール済みであることです。

Dockerのインストールについてはたくさん情報が他のサイトでありますので

そちらを参考にしてください。

 

※以下sampe_appの記述は各環境やお好みに合わせて適時変更してください

 

1、Amazon Linux2のイメージのダウンロードと起動
パワーシェル(windowns)またはターミナル(MacOS)を起動する
dockerイメージに何があるかを確認する
docker images
 
Amazon Linux2のイメージがなければダウンロードする
docker pull amazonlinux:2
 
dockerイメージにダウンロードされたことを確認する
docker images
 
イメージからコンテナを立ち上げる。
docker run -it -d --privileged --name sample-app -p 8080:80 amazonlinux:2 /bin/bash
 
コンテナが起動していることを確認する。
docker ps
 
コンテナにログイン
docker exec -it sample-app /bin/bash

 
2、コンテナ初期設定
AmazonLinuxにログインできたら、システムアップデートと必要なツールのインストールを行う。
yum update -y
yum -y install hostname passwd vim systemd yum-utils unzip wget sudo git net-tools procps
 
ユーザーの作成と権限設定
useradd app-user
passwd app-user
※パスワードを入力する
usermod -aG wheel app-user
visudo
=>%wheelの行のコメントを有効化=>「行の先頭の#を削除」
(viのちょっとした操作 「/wheel」で検索、「x」 で一文字削除、[ESC]&「:wq」で保存終了)
 
作成した「app-user」にスイッチ
su app-user
 
「app-user」のホームディレクトリに移動
cd

 
3、XAMPPのインストールとPATH設定
最新版のXAMPPをダウンロードとインストール(2019年11月現在)
wget https://sourceforge.net/projects/xampp/files/XAMPP%20Linux/7.3.11/xampp-linux-x64-7.3.11-0-installer.run
chmod 755 xampp-linux-x64-7.3.11-0-installer.run
sudo ./xampp-linux-x64-7.3.11-0-installer.run
すべて「Y」でインストールし、インストールが完了したらダウンロードしたファイルを削除する
rm -r xampp-linux-x64-7.3.11-0-installer.run
 
xamppは/opt/lamppにインストールされるので、そこにPATHを通す
/home/app-user/.bash_profileを編集
vi .bash_profile
 
PATHの行を以下に変更
PATH=$PATH:$HOME/.local/bin:$HOME/bin:/opt/lampp/bin:/opt/lampp/sbin
 
PATHを有効化
source  ~/.bash_profile
 
PATHの確認
echo  $PATH
 
rootでもPATHを通す
exit
cd
 
rootになったことを確認して、.bash_profileを編集
vi .bash_profile
 
PATHの行に以下を記述
PATH=$PATH:$HOME/.local/bin:$HOME/bin:/opt/lampp/bin:/opt/lampp/sbin
export PATH
 
PATHを有効化
source  ~/.bash_profile
 
PATHの確認
echo  $PATH
 
作成した「app-user」にスイッチ
su app-user
cd 
 
ショートカット作成
sudo ln -s /opt/lampp/lampp /usr/sbin/lampp
sudo ln -s /opt/lampp/bin/php /usr/sbin/php
sudo ln -s /opt/lampp/bin/mysql /usr/sbin/mysql

 
4、ミドルウェアのアプリケーション設定
各ミドルウェアのアプリケーション設定ファイルを編集する
・phpiniの設定
sudo vi /opt/lampp/etc/php.ini
date.timezone=Asia/Tokyo
expose_php = Off
 
・Apacheの設定
sudo vi /opt/lampp/etc/httpd.conf
※<IfModule unixd_module>内の変更
<IfModule unixd_module>
User app-user
Group app-user
</IfModule>
 
※DocumentRoot変更
DocumentRoot "/opt/lampp/htdocs/sample_app/public"
<Directory "/opt/lampp/htdocs/sample_app/public">
 
・PhpMyAdminの設定
sudo vi /opt/lampp/etc/extra/httpd-xampp.conf
<Directory "/opt/lampp/phpmyadmin">
    AllowOverride AuthConfig Limit
    Order allow,deny
    Allow from all
    Require all granted
    ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
</Directory>
 
・Composerのインストール
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/sbin/composer
 
・laravelのインストール
composer global require laravel/installer
composer require --dev "orangehill/iseed"
※iseedを有効にするにはconfig/app.php
providersOrangehill\Iseed\IseedServiceProvider::classを追加する必要がある
 
mysql を起動
sudo lampp startmysql
 
mysqlにデータベースとユーザーを作成
mysql -u root 
create database sample-db;
create user 'sample-user'@'localhost' identified by 'sample-password';
grant all on *.* to 'sample-user'@'localhost' identified by 'sample-password';
quit
 
・終了する
exit
exit
 
5、sampleシステムの設置
システムのモジュールをローカルドライブ内に保存もしくはGitなどから取得
(自身の管理が行いやすい場所)
例:/Users/user/htdocs/sample-app
 
コンテナを停止する
docker stop sample-app
 
CONTAINER IDを確認
docker ps -a
 
表示されたCONTAINER IDを使用し、Dockerイメージを作成(ここまでの状態をイメージ化する)
docker commit [CONTAINER ID] sample-app/amazonlinux2:2
 
イメージ化されていることを確認
docker images
 
プログラムファイルをマウントしたコンテナを起動するため、
使用したコンテナを削除し新しくコンテナを起動する。
docker rm -f  [CONTAINER ID]
docker run -it -d -u app-user --privileged --name sample-app -p 8080:80 -v [ローカルに保存したシステムモジュールの絶対パス]:/opt/lampp/htdocs/sample-app sample-app/amazonlinux2:2 /sbin/init
※windowsの場合は、ドライブの指定は/c/から始める。区切りはスラッシュ。
また、DockerのセッテイングでCドライブが共有されていること、
マウント元のディレクトリのセキュリティ設定で「users」グループをフルアクセス可としておくこと。
 
コンテナにログイン
docker exec -it sample-app /bin/bash
 
マウントの確認
ls /opt/lampp/htdocs/sample-app
 
.envの確認
ls -al
.envがない場合は.env.exampleをコピーして必要な情報を編集する
sudo cp -p .env.example .env
 
パーミッションの設定
sudo chmod -R 777 /opt/lampp/htdocs/sample-app/public
sudo chmod -R 777 /opt/lampp/htdocs/sample-app/storage
sudo chmod -R 777 /opt/lampp/htdocs/sample-app/bootstrap/cache
cd /opt/lampp/htdocs/sample-app
 
laravelキャッシュのクリア
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

lamppの起動
sudo lampp start
※パーミッションエラーが発生する場合はローカル側OSでもパーミッションの確認を行う

以下、Laravbelのマイグレーションなど
データベース定義、データ定義がされている場合に実行 

テーブルの作成
php artisan migrate
 
マスターデータ登録
php artisan db:seed

 
6、Web画面表示
・sample-appシステムへブラウザでアクセス
http://localhost:8080/
 
・PhyMyAdminへブラウザでアクセス
http://localhost:8080/phpmyadmin/

 

 

 

以上で、サクッと環境はできました。

もちろん、用意したシステムのモジュールで

データベース定義・データ用意がしてあれば

すぎに動かせるという条件付きにはなります。

 

さて、このDockerでできあがったコンテナ環境を

イメージ化することにより、他のローカル環境でも

全く同じ環境をすぐに作成できるようになります。

 

AWS ECRを使ってリポジトリ管理していますが

とても便利で簡単です。

 

この説明はまた別の機会に行いたいと思いますが、

このリポジトリをMacで作ってECRにpushして

DockerのインストールされたWindowsでECRからpullして

Dockerで起動したら全く同じ環境が

異なるPCで一瞬でできてしまいました。

 

Dockerの機能は頭では理解していたのですが、

実際に使って体験してみると、びっくりするくらい簡単で

無駄に時間のかかる開発環境構築が一瞬でできたのは

本当に感動ものでした!