FROM python:3.10 # 1. システム依存関係のインストール USER root RUN apt-get update && apt-get install -y --no-install-recommends \ cmake build-essential libasound2-dev libsndfile1 git \ mecab libmecab-dev mecab-ipadic-utf8 \ && rm -rf /var/lib/apt/lists/* # ユーザー設定 RUN useradd -m -u 1000 user USER user ENV HOME=/home/user \ PATH=/home/user/.local/bin:$PATH WORKDIR $HOME/app # 2. ビルド用ツールの固定と NumPy 1.x 系のインストール RUN pip install --no-cache-dir --upgrade pip RUN pip install --no-cache-dir "setuptools<70.0.0" "Cython<3.0" wheel "numpy<2.0" huggingface_hub # 3. pyopenjtalk のインストール RUN pip install --no-cache-dir pyopenjtalk==0.3.0 --no-build-isolation # 4. ソースコードをコピー COPY --chown=user . $HOME/app # 5. 各種パッチ処理 # 接続エラー回避 127.0.0.1 RUN find style_bert_vits2 -name "*.py" -exec sed -i 's/socket.gethostname()/"127.0.0.1"/g' {} + || true # モデルが無くても終了しないように server_editor.py を修正 (sys.exit(1) を無効化) RUN sed -i 's/sys.exit(1)/pass/g' server_editor.py || true # 6. モデル用フォルダをあらかじめ作成 RUN mkdir -p model_assets # 7. 残りの依存関係をインストール RUN pip install --no-cache-dir "numpy<2.0" && \ pip install --no-cache-dir -r requirements.txt && \ pip install --no-cache-dir "numpy<2.0" # 8. 実行設定 EXPOSE 7860 # 起動コマンド CMD python -c "import pyopenjtalk; pyopenjtalk._extract_dic()" && \ python -c 'import os; from huggingface_hub import hf_hub_download; \ bert_dir = "bert/deberta-v2-large-japanese-char-wwm"; \ os.makedirs(bert_dir, exist_ok=True); \ files = ["config.json", "pytorch_model.bin", "tokenizer_config.json", "vocab.txt"]; \ [hf_hub_download(repo_id="ku-nlp/deberta-v2-large-japanese-char-wwm", filename=f, local_dir=bert_dir, local_dir_use_symlinks=False) for f in files if not os.path.exists(os.path.join(bert_dir, f))]' && \ python server_editor.py --line_length 50 --line_count 3 --skip_static_files --skip_default_models --port 7860