用DOCKER在本機建立MAGENTO (軟件安裝篇)

在之前的日誌的簡介,現在就開始講一下實際概念及操作:

第一步

MAGENTO需要甚麼服務才能建立並運行到, 資料可以在以下網站找得到

https://experienceleague.adobe.com/docs/commerce-operations/installation-guide/system-requirements.html

而最必須的服務則是以下數項

  1. Database (e.g. mysql, mariadb)
  2. NGINX或Apache
  3. Elasticsearch或Opensearch
  4. Composer
  5. PHP

Database

MAGENTO是一個ONLINE的ESHOP,以Database作存取商品大量的資料,所以會用到這個服務

Nginx或Apache

這兩個服務會把建立一個WEBSERVICE服務,當設定好了,當該服務運行後,一般可以在BROWSER鍵入 LOCALHOST或127.0.0.1時便可以看到DEFAULT 頁面,然後我們便可以開始放我們的內容到該服務的網頁文件夾,如果是LINUX,一般會是/var/www/html,WAMP的話會是www 文件夾等 。。

Elasticsearch或Opensearch

這個服務MAGENTO會用作搜尋時需要用到。

COMPOSER

這個服務是一個整合PHP在一個PROJECT上需要甚麼軟件時,裝好後只要把設定放在composer.json,然後執行 composer install, 服務便會自動把設定好的軟件下載好,程式便可以連上那些軟件的程式碼了。就好像DOCKER一樣,DOCKER則是用docker-compose,把各IMAGE下載並根據設定建立CONTAINER。

PHP

因為MAGENTO是由PHP所建立出來,所以是必須的啦,但留意的是新版的MAGENTO會用到PHP 8, 而PHP 8會在語法上比7更嚴謹,

第二步

明白了要用甚麼服務後,因為安裝服務需要DOCKER,所以先把DOCKER安裝好,

請到以下的連結 hhttps://www.docker.com/ 下載要用到的DOCKER

當下載好後如果是WINDOW或MAC,便要運行DOCKER,按兩下DOCKER DESKTOP後便會開始運行,然後便需要用到docker command,如在WINDOW的話請打開POWERSHELL或用COMMAND PROMPT,如果是用MAC則打開TERMINAL,然後執行COMMAND

docker –version

如果成功運行的話會見到以下畫面

Docker verision 23.0.5 <— version

有提到docker-compose這個軟件,是用來把設定好的服務映像檔下載並執行,所以這個軟件也要安裝啦 而連結是 https://docs.docker.com/desktop/

在安排安裝服務上大概完成

第三步

因為DOCKER安裝過後在那個地方執行都可以,開一個做測試的文件夾吧,因為我們要建立MAGENTO,所以這一步便是下載MAGENTO到這個FOLDER

https://github.com/magento/magento2/tree/2.4.6

下載後再UNZIP,就可以了,

第四步

開始說明一下docker-compose 這一部份,首先在剛剛下載好magento的文件夾內新增一個檔案 docker-compose.yaml

這個檔案名是預設作為執行docker-compose 時會載入的文件,如果有加入變數 -f 及其他檔名就會載入那個檔名

以下是我用來建立MAGENTO用的docker-compose.yaml

version: '3'
services:
  db:
    hostname: db.localhost
    container_name: magento-db
    image: 'mariadb:10.3'
    environment:
      - MYSQL_ROOT_PASSWORD=magento2
      - MYSQL_DATABASE=magento2
      - MYSQL_USER=magento2
      - MYSQL_PASSWORD=magento2
    ports:
      - 3306:3306
    volumes:
      - 'magento-project:/var/lib/mysql'
    networks:
      magento:
        aliases:
          - db.localhost
    healthcheck:
      test: 'mysqladmin ping -h localhost -pmagento2'
      interval: 30s
      timeout: 30s
      retries: 3           
  web: 
    hostname: web.localhost
    container_name: magento-nginx
    image: magento/magento-cloud-docker-nginx:1.19-1.3.5
    ports:
      - 80:80
      - 443:443
    environment:
      - VIRTUAL_HOST=magento.localhost
      - HTTPS_METHOD=noredirect
    volumes:
      - ".:/app"
    networks:
      magento:
        aliases:
          - web.localhost  
    depends_on:
      fpm:
        condition: service_started
  elasticsearch:
    hostname: es.localhost
    container_name: magento-elasticsearch
    image: magento/magento-cloud-docker-elasticsearch:7.11-1.3.5
    ports: 
      - '9200:9200'
      - '9300:9300'
    ulimits:
      memlock:
        soft: -1
        hard: -1
    healthcheck:
      test: curl -s http://elasticsearch:9200 >/dev/null || exit 1
      interval: 30s
      timeout: 10s
      retries: 50    
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true  
    networks:
      magento:
        aliases:
          - es.localhost  
  fpm:
    hostname: php.localhost
    container_name: magento-php
    image: magento/magento-cloud-docker-php:8.1-fpm-1.3.5
    volumes:
      - '.:/app'
    environment:
      - MAGENTO_RUN_MODE=developer
      - 'PHP_EXTENSIONS=bcmath bz2 calendar exif gd gettext intl mysqli pcntl pdo_mysql soap sockets sysvmsg sysvsem sysvshm opcache zip redis xsl blackfire sodium'
    depends_on:
      db:
        condition: service_healthy
    networks:
      magento:
        aliases:
          - php.localhost    
  
networks:
  magento:
    driver: bridge
volumes:
  magento-project: {}

因為docker-compose 比較複雜,所以安排到下一個POST解釋