Cài đặt Magento trên docker

Magento là một ứng dụng mã nguồi mở để xây dựng các website thương mãi điện tử, sử dụng ngôn ngữ chính là PHP và mô hình MVC làm nền tảng. Với một nền tảng tương đối lớn như Magento, việc cài đặt để nó chạy thôi cũng mất khá nhiều thời gian cùng với một đống config liên quan. Chính vì vậy, bạn sẽ tự đặt ra cho mình một câu hỏi
Hmm. Có mỗi cài đặt thôi mà mất thời gian quá. Có cách nào nhanh hơn không ta?
Tada...và docker
sinh ra để giúp chúng ta làm những công việc đấy. Chỉ mất thời gian config lúc ban đầu, sau đó mọi người trong team hay kể cả member mới sau này việc cài đặt project cũng dễ dàng hơn. Hơn hết, nó đảm bảo cho môi trường làm việc giữa các thành viên, giữa development và production cũng không quá khác biệt.
Download magento 2 source code
Theo documention của Magento có 3 cách để các bạn có thể có được mã nguồn của Magento 2 ở đây là bản Magento Commercer version đó là thông qua composer
, git
, archive
Sử dụng
composer
để tạo project:composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition <install-directory-name>
Sử dụng
git
hoặc download trực tiếp từ trang chủ về tại github hoặc magento.com
Vì trong source code lấy về đã có sẵn file .gitignore
nên bạn không phải lo git add cả những file thừa
Những yêu cầu cần thiết khi cài đặt Magento 2
Về hệ điều hành, tất nhiên nó sẽ là Linux (Ubuntu, Debian, CentOs,...) theo như Docs của Magento họ không đảm bảo việc chạy Magento trên các hệ điều hành Windows hay MacOS. Thực tế trải nghiệm của mình mặc dù cài đặt được trên các hệ điều hành này nhưng tốc độ load của nó khá chậm, Linux vẫn là best choice. Hệ điều hành yêu cầu bạn phải cài đặt:
- PHP >= 7.3 (Tốt nhất vẫn là PHP 7.4)
- Webserver có thể là Apache hoặc Nginx. Magento recommend sử dụng Nginx và PHP-FPM để được hiệu năng tốt hơn. Nên chúng ta cũng sẽ dùng Nginx
- Database sẽ là MySQL >= 5.7
- Elasticsearch (>= 7.6) Từ phiên bản Magento 2.4 không còn sử dụng MySQL để thực hiện tìm kiếm nữa. Thay vào đó Magento sử dụng Elasticsearch
Xây dựng docker
Yêu cầu bài toán đã có bây giờ chúng ta bắt tay vào làm thôi.
Sử dụng docker-compose
, mỗi container sẽ tương ứng với 1 phần mềm bạn phải cài đặt
version: '3.5'
services:
nginx:
#
php:
#
mysql:
#
phpmyadmin:
#
elasticsearch:
#
PHP FPM
Đầu tiên là container cho PHP-FPM. Do yêu cầu cần nhiều Extension nên sẽ không có image có sẵn nên chúng ta sẽ tạo mới image bằng php.Dockerfile
. Ngoài việc cài các PHP Extensions, chúng ta cũng sẽ cần phải cài thêm mỗi số tools để có thể tương tác được với hệ thống Magento như bin/magento
, git
, vim
, cron
, composer
FROM php:7.4-fpm
WORKDIR /var/www/html
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libicu-dev \
libsodium-dev \
libxml2-dev \
libxslt-dev \
libzip-dev \
libmcrypt-dev \
git vim unzip cron \
--no-install-recommends \
&& rm -r /var/lib/apt/lists/*
RUN docker-php-ext-configure gd --with-jpeg=/usr/include \
--with-freetype=/usr/include/freetype2 \
&& docker-php-ext-install -j$(nproc) gd
RUN docker-php-ext-configure intl \
&& docker-php-ext-install -j$(nproc) intl
RUN docker-php-ext-install -j$(nproc) \
opcache \
bcmath \
mysqli \
pdo_mysql \
soap \
xsl \
zip \
sockets \
sodium
RUN pecl install -o xdebug-2.9.8
RUN pecl install mcrypt-1.0.4 && docker-php-ext-enable mcrypt
# Install Composer
RUN curl https://getcomposer.org/composer-2.phar -o composer \
&& mv composer /usr/local/bin/composer && chmod 750 /usr/local/bin/composer
CMD ["php-fpm"]
Ta có server đầu tiên
php:
build:
context: ./docker/build
dockerfile: php.Dockerfile
volumes:
- "./docker/config/php/:/usr/local/etc/php/conf.d/"
- "./:/var/www/html"
File docker-php.ini
trong folder ./config/php
memory_limit=-1
max_execution_time=360
max_file_uploads=1000
max_input_time=3600
post_max_size=1024M
max_input_vars=100000
upload_max_filesize = 1024M
Nginx
Tiếp theo là container cho web server Nginx, có nhiệm vụ giao tiếp với PHP-FPM
và trả về response cho client. Với service này, để tận dụng khả năng dùng lại các image có sẵn và giảm bớt việc phải build image, nên chúng ta không cần sử dụng custom Dockerfile, ở đây chỉ cần sử dụng image nginx và thực hiện mount file config:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- "./docker/config/nginx/:/etc/nginx/conf.d/"
- "./docker/logs/nginx/:/var/log/nginx/"
- "./:/var/www/html"
File default.conf
cho Nginx
upstream fastcgi_backend {
server php:9000;
}
server {
listen 80;
server_name _;
set $MAGE_ROOT /var/www/html;
set $MAGE_DEBUG_SHOW_ARGS 1;
include /var/www/html/nginx.conf.sample;
}
MySQL
Tương tự, chúng ta cũng có thể dùng image mysql trực tiếp và tạo user, db qua init SQL file mà không cần custom image:
mysql:
image: mysql:8.0
restart: always
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "false"
MYSQL_ROOT_PASSWORD: "root"
MYSQL_DATABASE: magento
volumes:
- "./docker/data/mysql/:/var/lib/mysql/"
Bạn có thể publish port 3306
để kết nối với MySQL ở host machine hoặc bạn cũng có thể sử dụng phpmyadmin
phpmyadmin:
image: phpmyadmin/phpmyadmin
restart: always
ports:
- '8080:80'
environment:
PMA_HOST: mysql
Bây giờ bạn đã có thể truy cập vào phpmyadmin với đường dẫn http://localhost:8080
user: root
password: root
Elasticsearch
elasticsearch:
image: elasticsearch:7.9.3
restart: always
environment:
- discovery.type=single-node
volumes:
- "./docker/data/elasticsearch/:/usr/share/elasticsearch/data/"
Lệnh cài đặt cho lần đầu
# Chạy lệnh trong container php fpm
docker-compose up -d
docker-compose exec -it php bash
# Cài đặt magento
php bin/magento setup:install \
--base-url=http://magento.local \
--db-host=mysql \
--db-name=magento \
--db-user=root \
--db-password=root \
--backend-frontname=admin \
--admin-firstname=admin \
--admin-lastname=admin \
--admin-email=admin@example.com \
--admin-user=admin \
--admin-password=admin123 \
--language=en_US \
--currency=USD \
--timezone=America/Chicago \
--use-rewrites=1 \
--elasticsearch-host=elasticsearch \
--elasticsearch-port=9200
chmod 777 -R .
Tiếp theo, các bạn tạo một tên miền magento.local
chạy trên IP 127.0.0.1
trong /etc/hosts
Vậy là xong. Bây giờ vào đường đẫn magento.local
để xem kết quả.
Khắc phục lỗi xác thực khi đăng nhập trong admin
Để khắc phục sự cố này, bạn cần tắt module Magento_TwoFactorAuth
bằng cách chạy lệnh
bin/magento module:disable Magento_TwoFactorAuth
Vậy là đã xong. Hy vọng các bạn sẽ cài đặt thành công. Nếu có bất kỳ thắc mắc hoặc lỗi nào liên quan vui lòng để lại bình luận nhé. Hẹn các bạn trong các bài tiếp theo của Series.
Đăng nhận xét