[Web小説を管理するアプリ] No. 02 : 環境構築

アプリを開発・運用するDockerコンテナを作っていきます。

私はVS CodeのDev-Containerを利用していますが、ただのDocker環境でも問題ないと思います。

devcontainer環境は次の記事を参考にしてください

逆に、Docker環境じゃない場合は、複数のサービスを立ち上げて、維持する必要があるので面倒だと思います。Dockerを入れてください。

また、開発をしながら修正・更新していくので、Dockerfileやdocker-compose.ymlは記事の更新に合わせて見直してください。

ディレクトリ構成

環境構築時のディレクトリ構成は次のとおりです。

novel_management_service
├── .devcontainer
│   ├── Dockerfile
│   ├── devcontainer.json
│   ├── docker-compose.yml
│   └── requirements.txt
...

.devcontainer以下のファイルを作成して、コンテナをビルドしてください

Dockerfile

ベースはnvcr.io/nvidia/pytorch:22.04-py3にしました。これは競馬の予測をしたときと同じです。

pytorchを使って機械学習で分析をするかどうかは、まだ確定ではありませんが、できるようにしておきます。

また、FlaskのENVを設定しておきます

FROM nvcr.io/nvidia/pytorch:22.04-py3

ARG USERNAME=vscode
ARG USER_UID=1000
ARG USER_GID=$USER_UID

ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm

RUN apt-get update \
    && groupadd --gid $USER_GID $USERNAME \
    && useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME \
    && apt-get install -y sudo \
    && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
    && chmod 0440 /etc/sudoers.d/$USERNAME \
    && apt-get -y install locales \
    && localedef -f UTF-8 -i ja_JP ja_JP.UTF-8

RUN apt-get -y install git

RUN pip install --upgrade pip
RUN pip install --upgrade setuptools

COPY ./requirements.txt .
RUN pip install -r requirements.txt

ENV FLASK_APP=flask_app.py
ENV FLASK_ENV=develop
ENV FLASK_DEBUG=1

devcontainer.json

名前とサービス名を設定してください。私は、面倒なので同じものを設定しています。拡張機能好きなものを入れてください。

{
    "name": "novel_management_service",
    "service": "novel_management_service",
    "dockerComposeFile": "docker-compose.yml",
    "remoteUser": "vscode",
    "workspaceFolder": "/work",
    "customizations": {
      "vscode": {
        "extensions": [
          "ms-python.python",
          "ms-toolsai.jupyter"
        ]
      }
    }
}

docker-compose.yml

サービス名を先ほど設定したものと同一にしてください。

とりあえず、Seleniumを使うのでサービスにchome(seleniarm/standalone-chromium)を追加しておきます。

services:
  novel_management_service:
    container_name: 'novel_management_service-container'
    hostname: 'novel_management_service-container'
    build: .
    restart: always
    working_dir: '/work' 
    tty: true
    volumes:
      - type: bind
        source: ..
        target: /work
    ports:
      - 8888:8888

  chrome:
    image: seleniarm/standalone-chromium
    shm_size: 2gb
    ports:
      - "4444:4444"
      - "7900:7900"

requirements.txt

ここには、pythonで使う追加モジュールを書いておきます。また、プログラムを書きながら、必要に応じて追記していきます。

requests
numpy
pandas
matplotlib
bs4
scikit-learn
optuna
lightgbm
tqdm
timeout-decorator
requests-html

seaborn
pyarrow
selenium
schedule

flask
flask-sqlalchemy

Seleniumの確認

3つのファイルを作成したら、dev-containerで開いてください。

selenium-hubが起動できていることを

http://{ip address}:4444/ui/

等から確認してください。リモート環境の場合はリモートのip addressを、ローカル環境ならlocalhostで入れます。

これで環境構築はOKです。


タイトルとURLをコピーしました