Menjalankan Aplikasi Laravel di Google Cloud Shell
Google Cloud Shell ini bisa dijadikan playground menjalankan aplikasi kalian di sebuah lingkungan cloud. Apa berbagai macam bahasa pemrograman yang didukung oleh platform ini, seperti nodejs
, python
, php
, dan bahkan flutter
.
Sayangnya, versi PHP yang terpasang di Cloud Shell ini adalah versi yang sudah usang. Ini membuat project Laravel kalian seringnya mengalami error yang membuat hari kalian terbuang sia-sia. Melakukan downgrade juga bukan solusi yang bijak.
Untungnya, Cloud Shell ini juga sudah terpasang Docker yang membuat aplikasi apapun tidak terbatas dari bawaan bahasa yang sudah tersedia. Berikut contoh Dockerfile
khusus untuk project Laravel.
FROM ubuntu:latest
WORKDIR /var/www
ARG DEBIAN_FRONTEND noninteractive
RUN apt update
RUN apt install -y software-properties-common \
curl \
zip \
unzip
RUN apt install -y php-cli \
php-fpm \
php-sqlite3 \
php-gd \
php-curl \
php-imap \
php-mbstring \
php-xml \
php-zip \
php-bcmath \
php-soap \
php-intl \
php-readline \
php-ldap \
php-msgpack \
php-igbinary \
php-redis \
php-memcached \
php-pcov \
php-imagick \
php-xdebug
RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash -
RUN apt update && apt install -y nodejs
RUN apt clean && rm -rf /var/lib/apt/lists/*
RUN curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer
COPY . .
RUN cp .env.example .env
RUN composer install --optimize-autoloader
RUN php artisan key:generate
RUN php artisan migrate --seed --force
RUN npm install
RUN npm run build
EXPOSE 8000
CMD ["php", "artisan", "serve", "--host=0.0.0.0", "--port=8000"]
Untuk sekedar mencoba, kalian bisa melakukan cloning aplikasi yang kubuat:
git clone https://github.com/ronsen/laravel-svelte-starter.git
cd laravel-svelte-starter
docker build -t laravel-svelte-starter .
docker run -p 8000:8000 -d laravel-svelte-starter
Buka tautan berikut di peramban web untuk mengakses aplikasi tersebut:
https://shell.cloud.google.com/devshell/proxy?authuser=0&port=8000&environment_id=default