用DOCKER在本機建立MAGENTO (軟件安裝篇)
在之前的日誌的簡介,現在就開始講一下實際概念及操作:
第一步
MAGENTO需要甚麼服務才能建立並運行到, 資料可以在以下網站找得到
而最必須的服務則是以下數項
- Database (e.g. mysql, mariadb)
- NGINX或Apache
- Elasticsearch或Opensearch
- Composer
- 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解釋