Tạp Hóa MMO4ME.SHOP - Sàn thương mại điện tử sản phẩm số phục vụ Kiếm tiền online. Chotheme.com là chợ trung gian giữa người mua và người bán, không có trách nhiệm bản quyền và can thiệp vào việc mua bán của hai bên. Mọi giao dịch trên trang đều hoàn toàn tự động và được giữ tiền 3 ngày, thay thế cho hình thức trung gian, các bạn yên tâm giao dịch nhé. (2) Cảnh báo gian hàng không uy tín: Nếu chủ shop bán cho bạn sản phẩm không đúng định dạng: tài-khoản|mật-khẩu..., mà là 1 chuỗi không liên quan ở đầu, có nghĩa là hàng đó đang cố pass hệ thống check trùng của sàn, hãy nhanh chóng khiếu nại đơn hàng và báo cho bên mình nhé, vì sản phẩm bạn mua có thể đã từng bán cho người khác trên sàn.
#

Create A Application Laravel 8 + Docker

Hôm nay mình sẽ chia sẻ với mọi người cách Setup Laravel 8 + Docker(mysql, adminer, nginx). Thông thường ta hay cài PHP  mà Laravel yêu cầu. Như vậy thì mỗi Project Laravel khác nhau ta phải cài thêm php version khác, đúng là ta phải cài, nhưng như vậy nó quá mệt mỏi khi cài thêm nửa.

Docker sẽ giúp ta xử lý chúng một cách dễ dàng hơn nhiều, Mình nghĩ mọi người cũng biết sơ qua Docker là gì? rồi, nên mình sẽ không nói thêm nhiều nửa, với lại trên mạng search từ khóa thôi cũng rất rất là nhiều rồi, nói thêm nửa cũng làm cho bài viết khá dài và mệt thêm ::)

# Tạo Project Laravel 

$ git clone -b 8.x https://github.com/laravel/laravel.git laravel-8.x
$ cd laravel-8
$ docker run --rm -v $(pwd):/app composer install

Câu lệnh trên, đầu tiên chúng ta git clone version của laravel về máy tính, sau đó trỏ tới thư mục vừa download về, tiếp tục chạy lệnh composer install , để cài thư viện laravel cho chúng ta, nó sẽ sinh ra thư mục vendor trong project

$ cp .env.example   .env

Hãy mờ thư mục project lên và tìm file .env cập nhật lại các thông số sau:

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel8x
DB_USERNAME=thanhhoa
DB_PASSWORD=12345678

Chú ý ở DB_HOST hãy đặt = db

DB_USERNAME , bạn đừng để root nhé, hãy đặt 1 username nào đó, để tí ta gọi nó trong file docker-compose.yml, phía sau ta sẽ tạo file này và gọi chúng

Sau khi có được một project Laravel , tiếp tục ta cần cài một số thư quan trọng như:

+ PHP Version (7.3 - 8.1) : php của chúng ta cần cài phải nằm trong khoảng này nhé

+ Mysql : Cài mysql để quản lý cơ sở dữ liệu

+ Nginx  : Cấu hình domain của chúng ta thông qua nginx

+ Adminer : Cấu hình giao diện quản lý cơ sở dữ liệu

Các vấn đề trên chúng ta cần làm việc trong Docker nhé

# Tạo file Dockerfile trong thư mục project

File Dockerfile này chúng ta cấu hình phiên bản cài đặt version PHP phải phù hợp với Laravel đang sử dụng. Đồng thời Dockerfile này sử dụng PHP-FPM Alpine, chúng ta có thể cài đặt các tiện ích mở rộng cần thiết, đặt thư mục làm việc, sao chép các tệp dự án Laravel và đặt lệnh để chạy Laravel.

FROM php:8.1-fpm
 
# Arguments defined in docker-compose.yml
ARG user
ARG uid
 
# Install system dependencies
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip
RUN apt-get update; \
# Imagick extension
apt-get install -y libmagickwand-dev; \
pecl install imagick; \
docker-php-ext-install gd; \
docker-php-ext-enable imagick; \
# Success
true
 
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
 
# Install PHP extensions
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
 
# Install Postgre PDO
RUN apt-get update && apt-get install -y libpq-dev && docker-php-ext-install pdo pdo_pgsql
 
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
 
# Create system user to run Composer and Artisan Commands
RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && \
chown -R $user:$user /home/$user
 
# Setup working directory
WORKDIR /var/www/
 
CMD ["php-fpm"]

# Tạo Docker Composer

Chúng ta tạo một file docker-compose.yml để cấu hình(application, mysql, adminer, nginx), để chạy hệ thống của chúng ta

version: "3.8"
services:
app:
build:
args:
user: thanhhoa
uid: 1000
context: ./
dockerfile: Dockerfile
image: skp
container_name: skp-app
restart: unless-stopped
working_dir: /var/www/
volumes:
- ./:/var/www
networks:
- skp
 
db:
image: mysql:5.7
container_name: skp-db
restart: unless-stopped
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_USER: ${DB_USERNAME}
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- ./docker-compose/sql:/docker-entrypoint-initdb.d
networks:
- skp
adminer:
image: adminer
restart: always
ports:
- 8080:8080
networks:
- skp
 
nginx:
image: nginx:alpine
container_name: skp-nginx
restart: unless-stopped
ports:
- 8000:80
volumes:
- ./:/var/www
- ./docker-compose/nginx:/etc/nginx/conf.d/
networks:
- skp
networks:
skp:
driver: bridge

OKay, các bạn xem file bên trên ta có gọi tới file Dockerfile để chạy cho ứng dụng app laravel của chúng ta. Nó sẽ đọc file Dockerfile và cài đặt php version và các tiện ích cần để chạy được laravel

Bạn sẽ thấy thư mục docker-compose/sql nó là chứa đựng file sql, bạn hãy tạo thư mục docker-compose/sql và copy file database của bạn vào thư mục đó. Chương trình sẽ tự import database

Tiếp tục tại phần nginx, mình có tạo đường dẫn thư mục docker-compose/nginx để cài đặt file cấu hình server.conf trong thư mục đó

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;
}
}

Cấu nhình nginx thì đã xong rồi, mình muốn chia sẻ thêm mọi người là bên trong file docker-compose.yml mình có sử dụng adminer để quản lý database , giúp cho chúng ta dễ dàng thao tác hơn,  bạn nào không thích thì bỏ nó ra cũng không sao, hoặc muốn sử dụng nó hay dùng phpmyadmin thay thế nó cũng được nhé, để lần sao mình chia sẻ cách sử dụng phpmyadmin trong docker nhé, nó hơi lu bu xíu

Okay vậy mọi thứ ok rồi, chúng ta thử chạy xem, thành quả nảy giờ chúng ta làm nhé

$ cd laravel-8.x
$ docker-compose up --build

Hoặc 

$ docker-compose up -d
// close
$ docker-composer down -v

Sau khi build thành công bạn có thể gõ trên trình duyệt : 

http://localhost:8000   -> web laravel

http://localhost:8080   -> vào quản lý adminer

Nếu bạn muốn trỏ vào app laravel sau khi chạy docker xong, bạn chạy câu lệnh sau

$ docker-compose exec app composer install
$ docker-compose exec app php artisan key:generate
$ docker-compose exec app php artisan migrate

Còn nếu bạn cần xem database trong mysql của bạn thì chạy lệnh bash sao docker exec -it [container name] bash

$ docker exec -it skp-db bash
$ mysql -u root -p

Sau đó bạn sữ dựng lệnh mysql bình thường: Chú ý:  password password trong file .env bạn vừa cấu hình bên trên "12345678"

hoặc bạn chạy lệnh :  docker-compose exec db bash

Okay trường hợp xấu là sau khi bạn chạy ok hết mà lên website rõ  http://localhost:8000 bị lỗi như sau: thì xin chúc mừng bạn đã chạy thành công, còn lỗi phía dưới chỉ là bị quyền giới hạn thôi, không sau

UnexpectedValueException The stream or file "/var/www/storage/logs/laravel.log" could not be opened in append mode: failed to open stream: Permission denied

Các xử lý như sau:

hoacode@DESKTOP-H6JD1PA:~$ cd laravel-8.x/
hoacode@DESKTOP-H6JD1PA:~/laravel-8.x$ docker-compose exec app bash
root@f2b00f085346:/var/www# chown -R $USER:www-data storage/
root@f2b00f085346:/var/www# chmod -R 777 storage/

Bây giờ bạn thử quay lại website của mình , xem hết lỗi chưa

Bình luận (0)

Để lại bình luận

Vui lòng đăng nhập để bình luận