Framework PHP merupakan kerangka kerja PHP dengan menggunakan konsep MVC (Model-View-Conteller). Sebagai langkah pertama kita akan mencoba membuat projek baru dengan menggunakan laravel terbaru, termaksud juga composer pengelola paket untuk PHP.
Silahkan instal docker engine dan docker compose terlebih dahulu
Pertama masuk ke directori home menggunakan terminal dan salin perintah di bawah ini.
$ cd ~
$ git clone https://github.com/laravel/laravel.git laravel-app
Pindah ke laravel-app directori.
$ cd ~/laravel-app
Selanjutnya gunakan docker compose untuk memasang directori yang kamu butuhkan untuk project laravel.
$ docker run --rm -v $(pwd):/app composer install
Degan menggunakan flag -v dan --rm dengan docker run akan membuat container ephemeral yang akan di-bind-mount ke direktori Anda saat ini sebelum dihapus. Ini akan menyalin konten direktori ~/laravel-app Anda ke wadah dan juga memastikan bahwa folder vendor yang dibuat Composer di dalam wadah disalin ke direktori Anda saat ini.
Sebagai langkah terakhir, tetapkan izin pada direktori proyek agar dimiliki oleh pengguna non-root Anda.
$ sudo chown -R $USER:$USER ~/laravel-app
Dengan menggunakan perintah proses di atas, kamu bisa menjalankannya tanpa perlu menggunakan user root. Gunakan teks editor dan buat file bernama docker-compose.yml di dalam direktori larevel-app.
version: '3'
services:
#PHP Service
app:
build:
context: .
dockerfile: Dockerfile
image: digitalocean.com/php
container_name: app
restart: unless-stopped
tty: true
environment:
SERVICE_NAME: app
SERVICE_TAGS: dev
working_dir: /var/www
networks:
- app-network
#Nginx Service
webserver:
image: nginx:alpine
container_name: webserver
restart: unless-stopped
tty: true
ports:
- "80:80"
- "443:443"
networks:
- app-network
#MySQL Service
db:
image: mysql:5.7.22
container_name: db
restart: unless-stopped
tty: true
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: laravel
MYSQL_ROOT_PASSWORD: your_mysql_root_password
SERVICE_TAGS: dev
SERVICE_NAME: mysql
networks:
- app-network
#Docker Networks
networks:
app-network:
driver: bridge
- app: Definisi layanan ini berisi aplikasi Laravel dan menjalankan image Docker kustom, digitalocean.com/php, yang akan Anda tentukan di Langkah 4. Ini juga menyetel working_dir di container ke /var/www. server
- web: Definisi layanan ini menarik gambar nginx:alpine dari Docker dan memperlihatkan port 80 dan 443.
- db: Definisi layanan ini menarik gambar mysql:5.7.22 dari Docker dan menentukan beberapa variabel lingkungan, termasuk database bernama laravel untuk aplikasi Anda dan kata sandi root untuk database. Anda bebas memberi nama database apa pun yang Anda inginkan, dan Anda harus mengganti your_mysql_root_password dengan kata sandi kuat Anda sendiri. Definisi layanan ini juga memetakan port 3306 di host ke port 3306 di container.
container_name
properti akan menentukan nama container yang sesuai dengan nama layanan. Jika kamu tidak menentukannya maka docker akan menetapkan nama untuk setiap container dan menggabungkannya.docker_compose
file tersebut masukan reseourch di bawah ini ke dalamnya....
#MySQL Service
db:
...
volumes:
- dbdata:/var/lib/mysql
networks:
- app-network
...
dbdata
...
#Volumes
volumes:
dbdata:
driver: local
docker_compose
version: '3'
services:
#PHP Service
app:
build:
context: .
dockerfile: Dockerfile
image: digitalocean.com/php
container_name: app
restart: unless-stopped
tty: true
environment:
SERVICE_NAME: app
SERVICE_TAGS: dev
working_dir: /var/www
volumes:
- ./:/var/www
- ./php/local.ini:/usr/local/etc/php/conf.d/local.ini
networks:
- app-network
#Nginx Service
webserver:
image: nginx:alpine
container_name: webserver
restart: unless-stopped
tty: true
ports:
- "80:80"
- "443:443"
volumes:
- ./:/var/www
- ./nginx/conf.d/:/etc/nginx/conf.d/
networks:
- app-network
#MySQL Service
db:
image: mysql:5.7.22
container_name: db
restart: unless-stopped
tty: true
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: laravel
MYSQL_ROOT_PASSWORD: your_mysql_root_password
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- dbdata:/var/lib/mysql/
- ./mysql/my.cnf:/etc/mysql/my.cnf
networks:
- app-network
#Docker Networks
networks:
app-network:
driver: bridge
#Volumes
volumes:
dbdata:
driver: local
~/laravel-app
buatlah file dengan nama dockerfile
.$ nano ~/laravel-app/Dockerfile
dockerfile
akan mengatur image dasar dan menentukan perintah dan instruksi yang diperlukan untuk membangun image aplikasi Laravel. Tambahkan kode berikut ke file:FROM php:7.2-fpm
# Copy composer.lock and composer.json
COPY composer.lock composer.json /var/www/
# Set working directory
WORKDIR /var/www
# Install dependencies
RUN apt-get update && apt-get install -y \
build-essential \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
zip \
jpegoptim optipng pngquant gifsicle \
vim \
unzip \
git \
curl
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Install extensions
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/
RUN docker-php-ext-install gd
# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Add user for laravel application
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www
# Copy existing application directory contents
COPY . /var/www
# Copy existing application directory permissions
COPY --chown=www:www . /var/www
# Change current user to www
USER www
# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm"]
$ mkdir ~/laravel-app/php
local.ini
dengan perintah berikut.$ nano ~/laravel-app/php/local.ini
local.ini
.upload_max_filesize=40M
post_max_size=40M
app.conf
di dalam file $ ~/laravel-app/nginx/conf.d/
.nginx/conf.d/
.$ mkdir -p ~/laravel-app/nginx/conf.d
app.conf
file configurasi.$ nano ~/laravel-app/nginx/conf.d/app.conf
server {
listen 80;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/public;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
}
mysql
.$ mkdir ~/laravel-app/mysql
my.cnf
ke dalam directori mysql.$ nano ~/laravel-app/mysql/my.cnf
[mysqld]
general_log = 1
general_log_file = /var/lib/mysql/general.log
.env.example
file yang disertakan Laravel secara default dan menamai copy .env
, yang merupakan file yang diharapkan Laravel untuk mendefinisikan lingkungannya:$ cp .env.example .env
.env
file pada app
penampung untuk memasukkan detail spesifik penyiapan.$ nano .env
DB_CONNECTION
dan perbarui.DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laraveluser
DB_PASSWORD=your_laravel_db_password
$ docker-compose up -d
$ docker ps
Output
CONTAINER ID NAMES IMAGE STATUS PORTS
c31b7b3251e0 db mysql:5.7.22 Up 2 seconds 0.0.0.0:3306->3306/tcp
ed5a69704580 app digitalocean.com/php Up 2 seconds 9000/tcp
5ce4ee31d7c0 webserver nginx:alpine Up 2 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp
docker-compose exec
untuk mengatur kunci aplikasi untuk aplikasi Laravel. Perintah docker-compose exec
memungkinkan Anda untuk menjalankan perintah tertentu dalam wadah..env
file Anda, memastikan bahwa sesi pengguna dan data terenkripsi Anda tetap aman:$ docker-compose exec app php artisan key:generate
$ docker-compose exec app php artisan config:cache
http://your_server_ip
db
wadah dengan docker-compose exec
:$ docker-compose exec db bash
$ mysql -u root -p
docker-compose
MySQL selama instalasi di file Anda. Untuk melihat data MySQL gunakan perintah berikut.s$ show databases;
laravel
database yang tercantum dalam output:Output
+--------------------+
| Database |
+--------------------+
| information_schema |
| laravel |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
pintaurusnet
, meskipun Anda dapat mengganti ini dengan nama lain jika Anda mau. Pastikan nama pengguna dan kata sandi Anda di sini cocok dengan detail yang Anda atur di .env
file Anda pada langkah sebelumnya:mysql > GRANT ALL ON laravel.* TO 'pintaurusnet'@'%' IDENTIFIED BY 'your_laravel_db_password';
mysql > FLUSH PRIVILEGES;
mysql > exit