すっかり書くの忘れてた・・・
結局、実運用では使わなかったのですが、備忘録として書いておきます。
前提条件
- MacOS ElCapitan 10.11.6
- homebrew
- iTerm2
- Docker for Mac
今回の作業
- Yii2をインストール
手順
Yii2のインストール手順は本家の情報を参照。
よく見たらphp-fpm使うって書いてあるしw
composer入れたら簡単そうなので、Dockerfileを変更
$ vim docker/php/Dockerfile
FROM php:7.1-fpm
# composer
RUN curl -sS https://getcomposer.org/installer | php \
&& mv composer.phar /usr/local/bin/composer
もう一度buildしてupする
$ docker ps
134b263e1290 docker_nginx "nginx -g 'daemon ..." 7 minutes ago Up About a minute 80/tcp, 443/tcp nginx
31f12a55c2af docker_php "docker-php-entryp..." 7 minutes ago Up About a minute 9000/tcp php
472f8a3774a4 docker_mysql "docker-entrypoint..." 7 minutes ago Up About a minute 0.0.0.0:3306->3306/tcp mysql
出てきたPHPのCONTAINER IDを使って
$ docker exec -it 31f12a55c2af bash
すると今立ち上げたPHPのコンテナに入ってる(はず)
root@31f12a55c2af:/var/www/html# cd ../
root@31f12a55c2af:/var/www# composer global require "fxp/composer-asset-plugin:~1.3.1"
Changed current directory to /root/.composer
Do not run Composer as root/super user! See https://getcomposer.org/root for details
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
Failed to download fxp/composer-asset-plugin from dist: The zip extension and unzip command are both missing, skipping.
A php.ini file does not exist. You will have to create one.
Now trying to download from source
- Installing fxp/composer-asset-plugin (v1.3.1): Cloning 0bfdd307d2
Installation failed, deleting ./composer.json.
[RuntimeException]
Failed to clone https://github.com/fxpio/composer-asset-plugin.git, git was not found, check that it is installed and in your PATH env.
sh: 1: git: not found
怒られた・・・
1つはcomposerをrootで実行するなよーってことですが、まぁできないって言われているわけではない。
そのあとが問題。
zip extensionがないからunzipできない。で、代わりにソースをダウンロードしようとする。が、gitコマンドがないからそれも無理。
と言うわけで、zipとgitは入れておいた方が良さげですね。
ついでにpdoとか必要そうなものも追記(mcryptを入れるのにlibmcrypt-devが必要になります)
RUN apt-get update && apt-get install -y \
git \
zlib1g-dev \
libmcrypt-dev \
&& docker-php-ext-install zip pdo_mysql mysqli mbstring mcrypt \
で、buildしてupする
buildし直すとコンテナのIDが変わってる場合があるのでもう一度調べてから入りましょう。
root@a5b45a615b40:/var/www# composer global require "fxp/composer-asset-plugin:~1.3.1"
Changed current directory to /root/.composer
Do not run Composer as root/super user! See https://getcomposer.org/root for details
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing fxp/composer-asset-plugin (v1.3.1): Downloading (100%)
Writing lock file
Generating autoload files
今度はいけましたね。
root@a5b45a615b40:/var/www# composer create-project --prefer-dist yiisoft/yii2-app-basic basic
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Installing yiisoft/yii2-app-basic (2.0.12)
・・・
Could not fetch https://api.github.com/repos/jquery/jquery-dist/commits/1472290917f17af05e98007136096784f9051fab, please create a GitHub OAuth token to go over the API rate limit
Head to https://github.com/settings/tokens/new?scopes=repo&description=XXXXXXX
to retrieve a token. It will be stored in "/root/.composer/auth.json" for future use by Composer.
Token (hidden):
Tokenってなんやねん・・・と思って前を読むと、APIのリミットだから、github行ってtoken取得しなさいよって言われてる模様。書かれているパスに追記しておくと今後のcomposerで使えるっぽいけど、とりあえず後回し。
出てきたURL(Xは念のため伏せてますが、日付とか入ってるっぽい)にアクセスすると下の方にgenerate tokenのボタンが出ているのでポチり。
tokenが出てくるので、コピペすれば先に進みます。
Writing lock file
Generating autoload files
> yii\composer\Installer::postCreateProject
chmod('runtime', 0777)...done.
chmod('web/assets', 0777)...done.
chmod('yii', 0755)...done.
これで/var/wwwの下にbasicディレクトリが作られて・・・
と、ここまでやって気がついた。phpのvolumesに/var/wwwを追加していなかったことに・・・
そして色々エラー吐かれた後に最終的にはこんな感じに。
docker/docker-compose.yml
version: '2'
services:
# DB
mysql:
container_name: "mysql"
build: ./mysql
ports:
- '3306:3306'
environment:
MYSQL_ROOT_PASSWORD: root
# nginx
nginx:
container_name: "nginx"
build: ./nginx
ports:
- "8080:80"
volumes:
- ./src/:/var/www/
links:
- php
- mysql
# php
php:
container_name: "php"
build: ./php
links:
- mysql
volumes:
- ./src/:/var/www/
environment:
TZ: "Asia/Tokyo"
ports:
- "9001:9001"
depends_on:
- mysql
docker/nginx/Dockerfile
FROM nginx:1.11
ADD ./server.conf /etc/nginx/conf.d/default.conf
docker/nginx/server.conf
nginxのserver.confでcontainer_nameに指定した名前をfastcgi_passに指定する
server {
charset utf-8;
client_max_body_size 128M;
listen 80; ## listen for ipv4
#listen [::]:80 default_server ipv6only=on; ## listen for ipv6
server_name localhost;
root /var/www/basic/web;
index index.php;
access_log /var/www/basic/log/access.log;
error_log /var/www/basic/log/error.log;
location / {
# 本当のファイルでないものは全て index.php にリダイレクト
try_files $uri $uri/ /index.php$is_args$args;
}
# 存在しない静的ファイルの呼び出しを Yii に処理させたくない場合はコメントを外す
#location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
# try_files $uri =404;
#}
#error_page 404 /404.html;
# /assets ディレクトリの php ファイルへのアクセスを拒否する
location ~ ^/assets/.*\.php$ {
deny all;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass php:9000;
#fastcgi_pass unix:/var/run/php5-fpm.sock;
try_files $uri =404;
}
location ~* /\. {
deny all;
}
}
docker/php/Dockerfile
FROM php:7.1-fpm
# composer
RUN curl -sS https://getcomposer.org/installer | php \
&& mv composer.phar /usr/local/bin/composer
RUN apt-get update && apt-get install -y \
git \
zlib1g-dev \
libmcrypt-dev \
&& docker-php-ext-install zip pdo_mysql mysqli mbstring mcrypt \
docker/mysql/Dockerfile
FROM mysql:5.6
これでbuildしてupした後で、ブラウザから
http://localhost:8080/index.php
にアクセスするとYii2のインストールページにあるCongratulations!と同じようなページが出るはず。
途中でこの構成ではやらないことになったので、自分で確認してるのはここまでです。
Yii2のページにあるrequirements.phpを実行するとgdとか足りないよってwarningが出ていたので、その辺をphpのDockerfileに書いてあげるといいと思います。
(このままでブラウザから「Contact」をクリックすると早速gdがーって叱られるはず)
この設定で書くとdocker/src/basicにcomposerで入れたYii2が入ってると。
basicディレクトリの下にlogディレクトリを作らないと、server.confのログ吐く場所がないのでエラーが出ます。