edo1z blog

プログラミングなどに関するブログです

DockerでPM2とAdonis.jsとApache2でWebsocketを動かすときのメモ

docker-composeのメモ

  • Dockerfileの編集等が反映されない場合は、ビルドする。
    • $ docker-compose build [service name]
  • それでも反映されない場合は、キャッシュ無効にしてビルドする。
    • $ docker-compose build --no-cache
  • ビルドしてから一回donwしてupしたら反映したやつが動いてる状態になる。(めんどくさい)
    • $ docker-compose down && docker-compose up -d

apacheのメモ

  • httpd:2.4という本家のイメージを使った。
  • WORKDIRが/usr/local/apache2 で、この配下にconfとかhtdocsとか全部ある。extraにconfファイルを入れる。

Websocketのメモ

  • apacheの設定ファイルは、下記のような感じにした。
  • LoadModuleが不足してると、Websocket Client側で、原因不明の500エラーみたいのでていて、Adonis(Websocket Server)側で、下記エラーが出ていた。
    • エラーメッセージを保存していなかったので忘れてしまった。(最後にLoadModuleって書いてあった)
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

ProxyPreserveHost On
ProxyPass /realtime ws://api:3000/realtime/socket.io
ProxyPassReverse /realtime ws://api:3000/realtime/socket.io
ProxyPass / http://api:3333/ connectiontimeout=5
ProxyPassReverse / http://api:3333/

PM2のメモ

  • ここに書いてあった。
  • 下記のような感じにした。
FROM node:12.18.3
RUN apt-get update && apt-get -y install vim
COPY ./.bashrc /root/.bashrc
RUN npm i -g pm2@3
RUN npm i -g @adonisjs/cli
WORKDIR /usr/src/app
COPY ./test /usr/src/test
RUN cd /usr/src/test && npm i
COPY ./pm2.config.js  /usr/src
CMD [ "pm2-runtime", "start", "../pm2.config.js"]
  • PM2に関しては、上記の一番下の行のCMDの部分で、pm2.config.jsの内容に基づいてstartしている。pm2-runtimeにしないといけなかった。
  • Adonis.jsのMigrationを使うときに、一回pm2 stopするのですが、そうするとコンテナが終わってしまうので、testプログラムも同時にpm2 startしておくことで、終わらないようにしてみた。
  • pm2.config.jsは下記のような感じにした。
module.exports = [{
  script: '/usr/src/app/server.js',
  name: 'server',
}, {
  script: '/usr/src/test/client.js',
  name: 'test'
}]

Adonis.jsのメモ

  • .envファイルのHOSTは、127.0.0.1ではなく、0.0.0.0にしたら動いた。(外部からアクセスできるようになった)

docker-compose.yml

  • 現状は下記のような感じ
version: "3.7"
services:
  db:
    build: ./db
    ports:
      - 3307:3306
    volumes:
      - ./data/db:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: hoge
  redis:
    image: redis:latest
    ports:
      - 6379:6379
    volumes:
      - ./data/redis:/data
  front:
    build: ./front/php-apache
    ports:
      - 8007:80
    volumes:
      - ./src/front/html:/var/www
  api:
    build: ./api/node
    volumes:
      - ./src/api/adonis:/usr/src/app
    depends_on:
      - db
      - redis
    ports:
      - 3334:3333
      - 3001:3000
  api-apache:
    build: ./api/apache
    ports:
      - 8008:80
    depends_on:
      - api
  mailhog:
    image: mailhog/mailhog
    ports:
      - 8027:8025
      - 1027:1025

あとやること

  • CRONの動作テストを簡単にする
  • LOG出力の整理