laradockでpuppeteer


puphpeteerというライブラリがあるが、ちょっとハマったのでメモする。
puphpeteerを使う前にそもそもpuppeteerが動くようにする必要があると思われる。
puppeteerとpuphpeteerってほとんど同じ名前でややこしい。

jsで動かすのがpuppeteer
phpで動かすのがpuphpeteer

いろんな記事みたが、ここが一番役にたった。


[<mark>Laradock</mark>でnodeとsockets_extが動かない, 初心者が<mark>Laradock</mark>でLaravel開発する準備](https://7414.tk/search/laradock/%241)

# 結論

何個かの対応がいる。
phpのsockets拡張がない。
php-fpm, workspaceにnode, chrome, puppeteerを入れる。

# 作業

## 1.sockets拡張

sockets拡張をONにするには
php-fpmのDockerfileとlaradockの.envを変更する。
AMQPぽいところをtrueにしていく。

```.env
ここをtrueにする。
ARG INSTALL_AMQP=true
```
## 2.dockerにnode, chrome, puppeteerを入れる

これらのdockerは完全ではない。バージョンが入ってないところがあるので、時間が経つと取得されるモジュールが変わる。んでエラーになることが想定される。
2019/12/26現在は動いてる。


workspaceのDockerfileに追加する。

```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に追加する。


```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"]
```

再度ビルドする。

```sh
docker-compose build --no-cache php-fpm workspace
```

こんな感じでdocker upし直せば動いた。

```sh
docker-compose down
docker-compose up -d nginx mysql phpmyadmin redis workspace
```


# その他メモ

## php.iniの場所を探したいとき


```sh
php -i | grep php.ini
```

phpのバージョンによって少しphp.iniの場所が違ったりもする。

[Laradockでphpのバージョンを変更する](https://www.suzu6.net/posts/139-laradock-switch-php-version/)

## AF_INETとかいうエラーも出てた。

socketsの拡張をtrueにしてdocker-composeをビルドした。

[Notice: Use of undefined constant AF_INET - assumed 'AF_INET'](https://github.com/uri2x/php-cassandra/issues/3)


## font系のエラーも出てた

[No package ` ttf-freefont` in Ubuntu 18.04](https://github.com/wechaty/wechaty/issues/1238)

# 参考

[Laradock環境でnodeにアクセスできない](https://ja.stackoverflow.com/questions/48784/laradock%E7%92%B0%E5%A2%83%E3%81%A7node%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84)
[add php sockets support](https://github.com/laradock/laradock/issues/1235)
[php-ext-enable imagick ;fi' returned a non-zero code: 100](https://github.com/laradock/php-fpm/issues/26)
[PHP で使用されている php.ini ファイルを特定する方法](https://gotohayato.com/content/105/)

[Better php PDF generation — with Puppeteer in Laradock](https://medium.com/@sam_ngu/better-php-pdf-generation-with-puppeteer-in-laradock-3357317f39ef)