#HerokuのContainer Registryを利用してデプロイしたけど、エラーになった
デプロイ環境で安くできる環境探してたら、Herokuがコンテナを利用してデプロイできることを知ったので利用してみることに!
ローカル環境もdockerを利用していたので、めっちゃ便利と思いデプロイしたけどなんかエラーになった。。。。
いつかのためにメモしておきます。。。。
というかTeratailにも質問したけど知っている人がいなかったので、知っている方がいれば教えて欲しいです笑
##エラー内容
apacheが起動できないというエラーが出てしまう。。。
AH00543: httpd: bad user name apache
なんで???ローカルではapacheユーザー存在してたんだが、、、、
コンテナのメリットってdockerが利用できればどこでも利用できるポータビリティ性のはずでは???
同じイメージを利用しているのになんか、環境に差が出てしまっているだが、、、(愚痴っぽくなってしまいました。すみません。)
確かにhttpd.confに以下を記述しているのでapacheユーザがないとエラーになるのはわかる
User apache
Group apache
apacheユーザーがほんとにないのか確認
cat /etc/passwd | grep apache
確かになかった。。。
それではグループは?
cat /etc/group | grep apache
グループもない。
それじゃ作るかと思い、Dockerfile内を以下に変更
FROM alpine:3.10
## Packageインストール
RUN apk add --update --no-cache php7 php7-pdo_mysql php7-openssl php7-curl php7-json php7-mbstring \
php7-apache2 php7-pdo_odbc php7-pdo_mysql php7-gd php7-pecl-apcu php7-mysqli php7-fpm php7-intl php7-phar php7-dom php7-xml php7-simplexml php7-tokenizer php7-xmlwriter php7-session apache2
COPY ./docker/app/php.ini /usr/local/lib/php.ini
## composerをインストール
COPY --from=composer /usr/bin/composer /usr/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /usr/bin/composer
ENV PATH $PATH:/composer/vendor/bin
COPY ./sample /var/www/html/sample/
WORKDIR /var/www/html/sample/
RUN composer install --no-interaction
RUN chmod -R a+w ./logs/error.log
COPY ./docker/app/httpd.conf /etc/apache2/httpd.conf
## apacheユーザー作成コマンドを追記
CMD adduser -S apache
CMD ["httpd", "-D", "FOREGROUND"]
herokuにデプロイしてみた
State changed from crashed to starting
AH00543: httpd: bad user name apache
なんかエラー出ている
そしてまた、apacheユーザーが無いエラーも出ている
apacheユーザーは作成されていないらしい。。。。
なぜかというと、herokuではルートユーザーで実行されないのが原因らしい。
herokuではデプロイ先の環境にコマンドを実行できる画面があるが、そこで確認したらrootユーザーですか?的なエラーになった。
ちょっと他の方法でapacheを起動できないか模索中です。。。。
#追記1
##とりあえずの解決方法
問題点をまとめると
- apacheを起動できない問題
- apacheユーザーとapacheグループが存在しないかつユーザーを追加できない問題
- ポート番号がheroku側は指定することができない
上記3点の問題があった、上記の問題を解決するための方法が以下になります。
今回の問題点はapacheユーザーがapacheを実行するという設定にしていたが原因であることでした。
herokuの側にデプロイするとapacheユーザーがなかった。ローカルでは存在していたため、気づかなかったが。
そして、heroku側でユーザーを追加することができないようです。
adduser apache
をDockerfileに記述しても、実行されないため、apache実行するユーザーを変更しないかぎり実行できないという。。。。
セキュリティ的にできないようになっているのか
そのため、apacheの実行ユーザーをhttpd.confのデフォルトのdoemon
に変更することで、エラーを回避できた!
問題点3に関しては、解決してくださっていた先人がいたので、以下のリンク先の対応方法で解決できました!!
内容はランタイムの $PORT 環境変数をhttpd.confにsedコマンドで書き換えちゃうというもの。
Heroku で Apache HTTP Server コンテナをそのまま動かそうとすると crash するのを解決したメモ
##所感
herokuのdocker利用してデプロイはちょっと考慮しないといけないことが多いのが不便、、、
実際apacheの実行ユーザーがdoemonで良いのかかなり疑問笑
趣味のものなので、問題無いので気にしないですが。
エラーに対応しながら書いた記事なので、まとまってないですが誰かの助けになれば嬉しいです。