puphpeteerというライブラリがあるが、ちょっとハマったのでメモする。
puphpeteerを使う前にそもそもpuppeteerが動くようにする必要があると思われる。
puppeteerとpuphpeteerってほとんど同じ名前でややこしい。
jsで動かすのがpuppeteer
phpで動かすのがpuphpeteer
いろんな記事みたが、ここが一番役にたった。
Laradockでnodeとsockets_extが動かない, 初心者がLaradockでLaravel開発する準備
結論
何個かの対応がいる。
phpのsockets拡張がない。
php-fpm, workspaceにnode, chrome, puppeteerを入れる。
作業
1.sockets拡張
sockets拡張をONにするには
php-fpmのDockerfileとlaradockの.envを変更する。
AMQPぽいところをtrueにしていく。
ここをtrueにする。
ARG INSTALL_AMQP=true
2.dockerにnode, chrome, puppeteerを入れる
これらのdockerは完全ではない。バージョンが入ってないところがあるので、時間が経つと取得されるモジュールが変わる。んでエラーになることが想定される。
2019/12/26現在は動いてる。
workspaceのDockerfileに追加する。
# Puppeteer
RUN apt-get update
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash -
RUN apt-get install -y nodejs
RUN apt-get install -y nodejs gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
RUN apt-get install -y gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
RUN npm install --global --unsafe-perm puppeteer
RUN chmod -R o+rx /home/laradock/.nvm/versions/node/v13.5.0/lib/node_modules/puppeteer/.local-chromium
php-fpmのDockerfileに追加する。
# install puppeteer
RUN rm -rf /var/lib/apt/lists/*
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash -
RUN apt-get install -y nodejs
RUN apt-get install -y nodejs gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
#RUN npm install --global --unsafe-perm puppeteer
#RUN chmod -R o+rx /usr/lib/node_modules/puppeteer/.local-chromium
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
&& sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
&& apt-get update \
&& apt-get install -y google-chrome-unstable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/*
RUN npm i puppeteer \
# Add user so we don't need --no-sandbox.
# same layer as npm install to keep re-chowned files from using up several hundred MBs more space
&& groupadd -r pptruser && useradd -r -g pptruser -G audio,video pptruser \
&& mkdir -p /home/pptruser/Downloads \
&& chown -R pptruser:pptruser /home/pptruser \
&& chown -R pptruser:pptruser /var/www/html/node_modules/
USER pptruser
CMD ["google-chrome-unstable"]
再度ビルドする。
docker-compose build --no-cache php-fpm workspace
こんな感じでdocker upし直せば動いた。
docker-compose down
docker-compose up -d nginx mysql phpmyadmin redis workspace
その他メモ
php.iniの場所を探したいとき
php -i | grep php.ini
phpのバージョンによって少しphp.iniの場所が違ったりもする。
AF_INETとかいうエラーも出てた。
socketsの拡張をtrueにしてdocker-composeをビルドした。
Notice: Use of undefined constant AF_INET - assumed 'AF_INET'
font系のエラーも出てた
No package ttf-freefont
in Ubuntu 18.04
参考
Laradock環境でnodeにアクセスできない
add php sockets support
php-ext-enable imagick ;fi' returned a non-zero code: 100
PHP で使用されている php.ini ファイルを特定する方法