いつもEC2を使っているエンジニアなのですが、GCPを最近使う機会が増え、今回はLaravelをGCEにデプロイすることとなりました。
色々と忘れてしまうので備忘録として残しておきたいと思います。
Compute Engineを作成する
コンソールからCompute Engineを作成しましょう。ここは特に細かく話さないのでスルーしようかと思います。
作成後はgcloudコマンドでSSH接続します。
gcloud compute ssh --project [プロジェクト名] --zone [ゾーン名] [インスタンス名]
時刻を日本時間に変更する。
timedatectl set-timezone Asia/Tokyo
date
PHPのインストール
Laravel10はPHP8.1以上が必要なのですが、ローカルでの開発ではphp8.2のDockerイメージを使っていたので、今回はPHP8.2をインストールしていきたいと思います。
# アップデート
sudo apt update
sudo apt -y upgrade
# PHPパッケージのaptリポジトリをDebianサーバに追加する
sudo apt install -y lsb-release ca-certificates apt-transport-https software-properties-common
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list
wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add -
sudo apt update
# インストール
sudo apt-get install php8.2 php-pear
sudo apt-get install libapache2-mod-php8.2 php8.2-xml php8.2-gd php8.2-opcache php8.2-mbstring php8.2-curl zip unzip php8.2-zip php8.2-mysql
# バージョン確認
php -v
composerの導入
公式サイトの指示通り導入する。
# ハッシュ値が変わるので詳細コマンドは公式サイトを確認ください
# 今回は2.5.7を導入
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
# /binに移動
sudo mv composer.phar /bin/composer
composer --version
Gitの導入
sudo apt-get -y install git
git --version
Apacheの導入
sudo apt-get -y install apache2
sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
sudo systemctl restart apache2
この状態でインスタンスの外部IPアドレスを叩いてApacheのデフォルトページが表示されるか確認しましょう。この時HTTPSではなくHTTP接続して確認してください。
ちなみにコンソールのVMインスタンスの一覧から外部IPのリンクを押すとHTTPSアクセスして「このサイトにアクセスできません」と表示されてしまう罠があるので気をつけましょう。
HTTPアクセスしても表示できない場合、VMインスタンスのVPCのファイアーウォール設定で0.0.0.0/0からの80番ポートを許可するルールがない可能性があるので、アクセスできない場合は確認してみてください。
Laravelの導入
# var/www/html内の所持者を変更
sudo chown -R ユーザー名 /var/www/html
# Gitからクローンする
cd /var/www/html
git clone https://github.com/ユーザー名/リポジトリ名.git
# 権限周り
sudo chgrp -R www-data /var/www/html/プロジェクト名
sudo chmod -R 775 /var/www/html/プロジェクト名/storage
# .envの作成
vi .env
# その他色々
php artisan key:generate
composer install
php artisan migrate
Apacheのドキュメントルート設定
cd /etc/apache2/sites-available
sudo vi 任意の名前.conf
新しく作成したconfファイルの中身は下記
任意の名前.conf
<VirtualHost *:80>
ServerName 使用するサーバー名(なければプロジェクト名).com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/プロジェクト名/public
<Directory /var/www/html/プロジェクト名>
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
適用
sudo a2dissite 000-default.conf
sudo a2ensite 任意の名前.conf
sudo a2enmod rewrite
sudo service apache2 restart
外部IPアドレスに接続して表示されれば完了です!!
追加の設定その① SSL化
Let's EncryptでSSL化します。
sudo apt install certbot python3-certbot-apache
sudo certbot --apache
参考記事