🐳

LaravelをRenderにデプロイしたい

2024/01/16に公開

個人学習で バックエンドをLaravel、フロントエンドをNext.jsでWebアプリを作っています。
当初、Herokuでデプロイしようと思っていましたが、今(2024/01/16)では無料プランがなくなっているみたいで、代わりにRenderを利用することにしました。
デプロイしようとしてもdocker-composeが使えないため、Dockerfile単体で動かすことができず、かなりハマっていました(インフラ構築には弱いです😭)
※データベースの無料での利用は期限がありました(数ヶ月ほど?)。無料で利用したい場合は注意してください。

結論

以下がRenderにデプロイするのに使ったDockerfileです。

Dockerfile
# ベースイメージを指定
FROM php:8.2.10-apache

RUN apt update \
        && apt install -y \
            g++ \
            libicu-dev \
            libpq-dev \
            libzip-dev \
            zip \
            zlib1g-dev \
            npm \
            nodejs \
            vim \
        && docker-php-ext-install \
            intl \
            opcache \
            pdo \
            pdo_pgsql \
            pgsql \
            pdo_mysql
# Composerのインストール
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
COPY --from=composer /usr/bin/composer /usr/bin/composer

WORKDIR /var/www/html

# PHP拡張機能の有効化
RUN docker-php-ext-install pdo_mysql zip

# ソースをルートディレクトリにコピー(パスは適宜変えてください。)
COPY ./docker/shop/src /var/www/html

# apacheの設定ファイルをコピー(パスは適宜変えてください。)
COPY ./docker/shop/apache/default.conf /etc/apache2/sites-enabled/000-default.conf

# その他コピー
COPY ./php.ini-development /usr/local/etc/php/php.ini-development
COPY --from=composer /usr/bin/composer /usr/bin/composer

RUN apt update  
RUN apt install sudo  

# Composerで依存関係をインストール
RUN sudo composer install

RUN echo ServerName localhost >> /etc/apache2/apache2.conf

# アプリケーションキーの生成と設定
RUN php artisan key:generate

# アクセス権限は適宜変えてください。
RUN chmod 777 -R ./

RUN php artisan migrate

# ポートのエクスポート
EXPOSE 80

RUN a2enmod rewrite

# コンテナ起動時にApacheを実行
CMD ["apache2-foreground"]

また、以下がapacheの設定ファイルです。

default.conf
<VirtualHost *:80>
  ServerName localhost
  DocumentRoot /var/www/html/public

  <Directory /var/www/html/>
      AllowOverride All
      Require all granted
  </Directory>
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

DockerfileはChat-GPTから返ってきたコードをベースにしていますが、RUN a2enmod rewriteが無かったり、他にも色々足りなくてハマっていました😅
php.ini-development/usr/local/etc/php/php.ini-developmentから取ってきて、
;extension=pdo_pgsqlのコメントアウトを解除して、
extension=pdo_pgsqlとしています!(RenderではPostgreSQLを使用するため)
記事投稿は初めてですが、参考になったら幸いです!(いいねもよろしくお願いします🙇‍♂️)

Discussion