Thứ tư, 12/08/2020 | 00:00 GMT+7

Cách phát triển trang web Drupal 9 trên máy cục bộ của bạn bằng Docker và DDEV

DDEV là một công cụ open-souce sử dụng Docker để xây dựng môi trường phát triển local cho nhiều khung PHP khác nhau. Sử dụng sức mạnh của quá trình chứa, DDEV có thể đơn giản hóa rất nhiều cách bạn làm việc trên nhiều dự án sử dụng nhiều ngăn xếp công nghệ và nhiều server cloud . DDEV bao gồm các mẫu cho WordPress , Laravel , Magento , TYPO3 , Drupal , v.v.

Drupal 9 được phát hành vào ngày 3 tháng 6 năm 2020 cho Drupal CMS. Được biết đến với tính dễ sử dụng và một thư viện lớn các module và chủ đề, Drupal là một khung công tác PHP phổ biến để xây dựng và duy trì các trang web và ứng dụng khác nhau ở mọi quy mô.

Trong hướng dẫn này, bạn sẽ bắt đầu phát triển trang web Drupal 9 trên máy local của bạn bằng DDEV. Điều này sẽ cho phép bạn xây dựng trang web của bạn trước và sau đó, khi đã sẵn sàng , hãy triển khai dự án của bạn tới một server production .

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần :

Lưu ý: Có thể phát triển Drupal 9 bằng DDEV trên server từ xa, nhưng bạn cần giải pháp để truy cập localhost trong trình duyệt web. Lệnh ddev share hoạt động với ngrok , tạo một tunnel an toàn vào server của bạn để bạn và các bên liên quan khác xem trang web phát triển của bạn. Đối với mục đích sử dụng cá nhân, bạn cũng có thể cài đặt GUI trên server từ xa và truy cập trang web phát triển của bạn thông qua trình duyệt web bên trong giao diện đó. Để thực hiện việc này, bạn có thể làm theo hướng dẫn của ta về cách cài đặt và cấu hình VNC trên Ubuntu 20.04 . Để có giải pháp GUI nhanh hơn nữa, bạn có thể làm theo hướng dẫn của ta về cách cài đặt máy tính từ xa với X2Go trên Ubuntu 20.04 .

Bước 1 - Cài đặt DDEV

Trong bước này, bạn sẽ cài đặt DDEV trên máy local của bạn .Tùy chọn 1 bao gồm hướng dẫn cho macOS trong khi tùy chọn 2 cung cấp hướng dẫn cho Linux. Hướng dẫn này đã được thử nghiệm trên DDEV version 1.15.0.

Tùy chọn 1 - Cài đặt DDEV trên macOS

DDEV khuyên user macOS nên cài đặt công cụ của họ bằng trình quản lý gói Homebrew . Sử dụng lệnh brew sau để cài đặt bản phát hành ổn định mới nhất:

  • brew tap drud/ddev && brew install drud/ddev/ddev

Nếu bạn thích version mới nhất tuyệt đối, bạn có thể sử dụng brew để cài đặt ddev-edge :

  • brew tap drud/ddev-edge && brew install drud/ddev-edge/ddev

Nếu bạn đã cài đặt version DDEV hoặc nếu bạn muốn cập nhật version của bạn , hãy tắt DDEV và sử dụng brew để cập nhật cài đặt của bạn:

  • ddev poweroff
  • brew upgrade ddev

Sau khi bạn đã cài đặt hoặc cập nhật DDEV, hãy chạy ddev version để xác minh phần mềm của bạn:

  • ddev version

Bạn sẽ thấy một kết quả như thế này:

Output
DDEV-Local version v1.15.0 commit v1.15.0 db drud/ddev-dbserver-mariadb-10.2:v1.15.0 dba phpmyadmin/phpmyadmin:5 ddev-ssh-agent drud/ddev-ssh-agent:v1.15.0 docker 19.03.8 docker-compose 1.25.5 os darwin router drud/ddev-router:v1.15.0 web drud/ddev-webserver:v1.15.0

DDEV bao gồm CLI hoặc giao diện dòng lệnh mạnh mẽ. Chạy ddev để tìm hiểu về một số lệnh phổ biến:

  • ddev

Bạn sẽ thấy kết quả sau:

Output
Create and maintain a local web development environment. Docs: https://ddev.readthedocs.io Support: https://ddev.readthedocs.io/en/stable/#support Usage: ddev [command] Available Commands: auth A collection of authentication commands composer Executes a composer command within the web container config Create or modify a ddev project configuration in the current directory debug A collection of debugging commands delete Remove all project information (including database) for an existing project describe Get a detailed description of a running ddev project. exec Execute a shell command in the container for a service. Uses the web service by default. export-db Dump a database to a file or to stdout help Help about any command hostname Manage your hostfile entries. import-db Import a sql file into the project. import-files Pull the uploaded files directory of an existing project to the default public upload directory of your project. list List projects logs Get the logs from your running services. pause uses 'docker stop' to pause/stop the containers belonging to a project. poweroff Completely stop all projects and containers pull Pull files and database using a configured provider plugin. restart Restart a project or several projects. restore-snapshot Restore a project's database to the provided snapshot version. sequelpro This command is not available since sequel pro.app is not installed share Share project on the internet via ngrok. snapshot Create a database snapshot for one or more projects. ssh Starts a shell session in the container for a service. Uses web service by default. start Start a ddev project. stop Stop and remove the containers of a project. Does not lose or harm anything unless you add --remove-data. version print ddev version and component versions Flags: -h, --help help for ddev -j, --json-output If true, user-oriented output will be in JSON format. -v, --version version for ddev Use "ddev [command] --help" for more information about a command.

Để biết thêm thông tin về cách sử dụng DDEV CLI, hãy truy cập tài liệu chính thức của DDEV .

Với DDEV được cài đặt trên máy local của bạn, bây giờ bạn đã sẵn sàng cài đặt Drupal 9 và bắt đầu phát triển một trang web.

Tùy chọn 2 - Cài đặt DDEV trên Linux

Trên hệ điều hành Linux, bạn có thể cài đặt DDEV bằng Homebrew cho Linux hoặc sử dụng lệnh cài đặt chính thức. Trên Ubuntu, hãy bắt đầu bằng cách cập nhật danh sách các gói của bạn trong trình quản lý gói apt (bạn có thể sử dụng apt trong Debian, nếu không, hãy sử dụng trình quản lý gói tương đương được liên kết với bản phân phối Linux của bạn):

  • sudo apt update

Bây giờ cài đặt một số gói yêu cầu từ repository chính thức của Ubuntu:

  • sudo apt install build-essential apt-transport-https ca-certificates software-properties-common curl

Các gói này sẽ cho phép bạn download lệnh cài đặt DDEV từ repository GitHub chính thức của chúng.

Bây giờ download tập lệnh:

  • curl -O https://raw.githubusercontent.com/drud/ddev/master/scripts/install_ddev.sh

Trước khi chạy tập lệnh, hãy mở nó trong nano hoặc editor bạn muốn và kiểm tra nội dung của nó:

nano install_ddev.sh 

Khi bạn đã xem xét nội dung của tập lệnh và bạn hài lòng, hãy lưu file . Đến đây bạn đã sẵn sàng để chạy lệnh cài đặt .

Sử dụng chmod để thực thi tập lệnh:

  • chmod +x install_ddev.sh

Bây giờ hãy chạy tập lệnh:

  • ./install_ddev.sh

Quá trình cài đặt có thể nhắc bạn xác nhận một số cài đặt hoặc nhập password sudo của bạn. Sau khi cài đặt hoàn tất, bạn sẽ có DDEV khả dụng trên hệ điều hành Linux của bạn .

Chạy ddev version để xác minh phần mềm của bạn:

  • ddev version

Bạn sẽ thấy một kết quả như thế này:

Output
DDEV-Local version v1.15.0 commit v1.15.0 db drud/ddev-dbserver-mariadb-10.2:v1.15.0 dba phpmyadmin/phpmyadmin:5 ddev-ssh-agent drud/ddev-ssh-agent:v1.15.0 docker 19.03.8 docker-compose 1.25.5 os linux router drud/ddev-router:v1.15.0 web drud/ddev-webserver:v1.15.0

DDEV là một CLI hay giao diện dòng lệnh mạnh mẽ. Chạy ddev mà không cần bất kỳ thứ gì khác để tìm hiểu về một số lệnh phổ biến:

  • ddev

Bạn sẽ thấy kết quả sau:

Output
Create and maintain a local web development environment. Docs: https://ddev.readthedocs.io Support: https://ddev.readthedocs.io/en/stable/#support Usage: ddev [command] Available Commands: auth A collection of authentication commands composer Executes a composer command within the web container config Create or modify a ddev project configuration in the current directory debug A collection of debugging commands delete Remove all project information (including database) for an existing project describe Get a detailed description of a running ddev project. exec Execute a shell command in the container for a service. Uses the web service by default. export-db Dump a database to a file or to stdout help Help about any command hostname Manage your hostfile entries. import-db Import a sql file into the project. import-files Pull the uploaded files directory of an existing project to the default public upload directory of your project. list List projects logs Get the logs from your running services. pause uses 'docker stop' to pause/stop the containers belonging to a project. poweroff Completely stop all projects and containers pull Pull files and database using a configured provider plugin. restart Restart a project or several projects. restore-snapshot Restore a project's database to the provided snapshot version. sequelpro This command is not available since sequel pro.app is not installed share Share project on the internet via ngrok. snapshot Create a database snapshot for one or more projects. ssh Starts a shell session in the container for a service. Uses web service by default. start Start a ddev project. stop Stop and remove the containers of a project. Does not lose or harm anything unless you add --remove-data. version print ddev version and component versions Flags: -h, --help help for ddev -j, --json-output If true, user-oriented output will be in JSON format. -v, --version version for ddev Use "ddev [command] --help" for more information about a command.

Để biết thêm thông tin về cách sử dụng DDEV CLI, bạn có thể truy cập tài liệu chính thức của DDEV .

Với DDEV được cài đặt trên máy local của bạn, bây giờ bạn đã sẵn sàng triển khai Drupal 9 và bắt đầu phát triển một trang web.

Bước 2 - Triển khai một trang web Drupal 9 mới bằng DDEV

Với DDEV đang chạy, bây giờ bạn sẽ sử dụng nó để tạo hệ thống file dành riêng cho Drupal, cài đặt Drupal 9 và sau đó bắt đầu một dự án trang web chuẩn.

Đầu tiên, bạn sẽ tạo một folder root của dự án và sau đó di chuyển vào bên trong nó. Bạn sẽ chạy tất cả các lệnh còn lại từ vị trí này. Hướng dẫn này sẽ sử dụng d9test , nhưng bạn có thể tự do đặt tên khác cho folder của bạn . Tuy nhiên, lưu ý DDEV không xử lý tốt các tên được gạch nối. Nó được coi là một phương pháp hay nhất để tránh các tên folder như my-project hoặc drupal-site-1 .

Tạo folder root dự án của bạn và chuyển bên trong:

  • mkdir d9test
  • cd d9test

DDEV vượt trội trong việc tạo cây folder phù hợp với các nền tảng CMS cụ thể . Sử dụng lệnh ddev config để tạo cấu trúc folder cụ thể cho Drupal 9:

  • ddev config --project-type=drupal9 --docroot=web --create-docroot

Bạn sẽ thấy một kết quả như thế này:

Output
Creating a new ddev project config in the current directory (/Users/sammy/d9test) Once completed, your configuration will be written to /Users/sammy/d9test/.ddev/config.yaml Created docroot at /Users/sammy/d9test/web You have specified a project type of drupal9 but no project of that type is found in /Users/sammy/d9test/web Ensuring write permissions for d9new No settings.php file exists, creating one Existing settings.php file includes settings.ddev.php Configuration complete. You may now run 'ddev start'.

Vì bạn đã chuyển --project-type= drupal9 vào lệnh ddev config của bạn , DDEV đã tạo một số folder con và file đại diện cho tổ chức mặc định cho trang web Drupal. Cây folder dự án của bạn bây giờ sẽ giống như sau:

Một cây folder Drupal 9
. ├── .ddev │   ├── .gitignore │   ├── config.yaml │   ├── db-build │   │   └── Dockerfile.example │   └── web-build │       └── Dockerfile.example └── web     └── sites         └── default             ├── .gitignore             ├── settings.ddev.php             └── settings.php  6 directories, 7 files 

.ddev/ sẽ là folder chính cho cấu hình ddev. web/ sẽ là docroot cho dự án mới của bạn; nó sẽ chứa một số settings. cụ thể settings. các file . Đến đây bạn đã có dàn giáo ban đầu cho dự án Drupal mới của bạn .

Bước tiếp theo của bạn là khởi tạo nền tảng của bạn, nền tảng này sẽ xây dựng các containers và cấu hình mạng cần thiết. DDEV liên kết với các cổng 80443 , vì vậy nếu bạn đang chạy một web server như Apache trên máy của bạn hoặc bất kỳ thứ gì khác sử dụng các cổng đó, hãy dừng các dịch vụ đó trước khi tiếp tục.

Sử dụng lệnh ddev start để khởi tạo nền tảng của bạn:

  • ddev start

Điều này sẽ xây dựng tất cả các containers dựa trên Docker cho dự án của bạn, bao gồm containers web, containers database và phpmyadmin . Khi quá trình khởi tạo hoàn tất, bạn sẽ thấy kết quả như thế này (số cổng của bạn có thể khác):

Output
... Successfully started d9test Project can be reached at http://d9test.ddev.site http://127.0.0.1:32773

Lưu ý: Lưu ý DDEV đang khởi động containers Docker phía sau mức thấp tại đây. Nếu bạn muốn xem các containers đó hoặc xác minh chúng đang chạy, bạn luôn có thể sử dụng lệnh docker ps :

  • docker ps

Bên cạnh bất kỳ containers nào khác mà bạn hiện đang chạy, bạn sẽ tìm thấy bốn containers mới, mỗi containers chạy một hình ảnh khác nhau: php-myadmin , ddev-webserver , ddev-routerddev-dbserver-mariadb .

ddev start đã tạo thành công containers của bạn và cung cấp cho bạn một kết quả có hai URL. Mặc dù kết quả này cho biết rằng "có thể truy cập dự án của bạn tại http:// d9test .ddev.sitehttp://127.0.0.1: 32773 ", nhưng việc truy cập các URL này ngay bây giờ sẽ gặp lỗi. Bắt đầu với Drupal 8, lõi Drupal và các module đóng góp hoạt động giống như các phụ thuộc. Do đó, trước tiên bạn cần hoàn tất cài đặt Drupal bằng Composer , trình quản lý gói cho các dự án PHP, trước khi tải bất kỳ thứ gì trong trình duyệt web .

Một trong những tính năng hữu ích và thanh lịch nhất của DDEV là bạn có thể chuyển các lệnh của Trình soạn thảo thông qua DDEV CLI và vào môi trường chứa đựng của bạn. Điều này nghĩa là bạn có thể tách cấu hình cụ thể của máy khỏi môi trường phát triển của bạn. Bạn không còn phải quản lý các vấn đề về đường dẫn file , dependencies và version khác nhau thường đi kèm với phát triển PHP local . Hơn nữa, bạn có thể nhanh chóng chuyển đổi ngữ cảnh giữa nhiều dự án bằng cách sử dụng các khuôn khổ và ngăn xếp công nghệ khác nhau với nỗ lực tối thiểu.

Sử dụng lệnh ddev composer để download drupal/recommended-project ddev composer drupal/recommended-project . Thao tác này sẽ download lõi Drupal, các thư viện của nó và các tài nguyên liên quan khác, sau đó tạo một dự án mặc định:

  • ddev composer create "drupal/recommended-project"

Bây giờ download một thành phần cuối cùng có tên là Drush , hoặc Drupal Shell. Hướng dẫn này sẽ chỉ sử dụng một lệnh drush và hướng dẫn này cung cấp một giải pháp thay thế, nhưng drush là một CLI mạnh mẽ để phát triển Drupal có thể cải thiện hiệu quả của bạn.

Sử dụng ddev composer để cài đặt drush :

  • ddev composer require "drush/drush"

Đến đây bạn đã xây dựng một dự án Drupal 9 mặc định và cài đặt drush . Đến đây bạn sẽ xem dự án của bạn trong trình duyệt và cấu hình cài đặt trang web .

Bước 3 - Cấu hình Dự án Drupal 9 của bạn

Đến đây bạn đã cài đặt Drupal 9, bạn có thể truy cập dự án mới trong trình duyệt của bạn . Để thực hiện việc này, bạn có thể chạy lại ddev start và sao chép một trong hai URL mà nó xuất ra hoặc bạn có thể sử dụng lệnh sau, lệnh này sẽ tự động chạy trang web trong một cửa sổ trình duyệt mới:

  • ddev launch

Bạn sẽ gặp trình hướng dẫn cài đặt Drupal tiêu chuẩn.

Trình cài đặt Drupal 9 từ trình duyệt

Ở đây bạn có hai lựa chọn. Bạn có thể sử dụng giao diện user này và làm theo các hướng dẫn thông qua cài đặt, hoặc bạn có thể quay trở lại terminal của bạn và vượt qua một drush lệnh qua ddev . Tùy chọn thứ hai sẽ tự động hóa quá trình cài đặt và đặt admin làm tên user và password của bạn.

Tùy chọn 1 - Sử dụng Trình hướng dẫn

Quay lại trình hướng dẫn trong trình duyệt của bạn. Trong Chọn ngôn ngữ, hãy chọn một ngôn ngữ từ menu thả xuống và nhấp vào Lưu và tiếp tục . Bây giờ chọn một cấu hình cài đặt. Bạn có thể chọn giữa Tiêu chuẩn , Tối thiểuDemo . Thực hiện lựa chọn của bạn và sau đó nhấp vào Lưu và tiếp tục . Drupal sẽ tự động xác minh các yêu cầu của bạn, cài đặt database và cài đặt trang web . Bước cuối cùng của bạn là tùy chỉnh một vài cấu hình. Thêm tên trang web và địa chỉ email trang web kết thúc bằng domain của bạn. Sau đó chọn tên user và password . Chọn một password mạnh và giữ thông tin đăng nhập của bạn ở nơi an toàn. Cuối cùng, thêm địa chỉ email cá nhân mà bạn thường xuyên kiểm tra, điền vào cài đặt khu vực và nhấn Lưu và tiếp tục .

Thông báo chào mừng Drupal 9 với cảnh báo về quyền

Trang web mới của bạn sẽ tải với một thông báo chào mừng.

Tùy chọn 2 - Sử dụng Dòng lệnh

Từ folder root của dự án của bạn, hãy chạy lệnh thực thi ddev exec này để cài đặt trang web Drupal mặc định bằng drush :

  • ddev exec drush site:install --account-name=admin --account-pass=admin

Điều này sẽ tạo trang web giống như trình hướng dẫn sẽ làm nhưng với một số cấu hình soạn sẵn. Tên user và password của bạn sẽ là admin .

Bây giờ chạy trang web để xem nó trong trình duyệt của bạn:

  • ddev launch

Đến đây bạn đã sẵn sàng để bắt đầu xây dựng trang web của bạn , nhưng cách tốt nhất được coi là kiểm tra xem các quyền của bạn có đúng với folder /sites/web/default . Trong khi bạn đang làm việc local , đây không phải là một mối quan tâm đáng kể, nhưng nếu bạn chuyển các quyền này đến server production , chúng sẽ gây ra rủi ro bảo mật.

Bước 4 - Kiểm tra quyền của bạn

Trong quá trình cài đặt thuật sĩ hoặc khi trang chào mừng của bạn tải lần đầu tiên, bạn có thể thấy cảnh báo về cài đặt quyền trên folder /sites/web/default và một file bên trong folder đó: settings.php .

Sau khi lệnh cài đặt chạy, Drupal sẽ cố gắng cài đặt quyền web/sites/default folder web/sites/default để readexecute cho tất cả các group : đây là cài đặt quyền 555 . Nó cũng sẽ cố gắng đặt quyền cho default/settings.php thành chỉ read-only hoặc 444 . Nếu bạn gặp cảnh báo này, hãy chạy hai chmod từ folder root của dự án của bạn. Không làm như vậy có nguy cơ bảo mật:

  • chmod 555 web/sites/default
  • chmod 444 web/sites/default/settings.php

Để xác minh bạn có quyền chính xác, hãy chạy ls này với các lựa chọn a , l , hd :

  • ls -alhd web/sites/default web/sites/default/settings.php

Kiểm tra xem các quyền của bạn có trùng với kết quả sau đây không:

Output
dr-xr-xr-x 8 sammy staff 256 Jul 21 12:56 web/sites/default -r--r--r-- 1 sammy staff 249 Jul 21 12:12 web/sites/default/settings.php

Đến đây bạn đã sẵn sàng phát triển trang web Drupal 9 trên máy local của bạn .

Bước 5 - Tạo bài đăng đầu tiên của bạn trong Drupal

Để kiểm tra một số chức năng của Drupal, bây giờ bạn sẽ tạo một bài đăng bằng giao diện user web.

Từ trang đầu tiên của trang web , hãy nhấp vào nút Nội dung ở cạnh bên trái của menu phía trên. Bây giờ hãy nhấp vào nút thêm nội dung màu xanh lam. Một trang mới sẽ xuất hiện. Nhấp vào Bài viết , và một trang khác sẽ xuất hiện.

Drupal 9 Tạo  dấu nhắc  bài viết

Thêm bất kỳ tiêu đề và nội dung nào bạn thích. Bạn cũng có thể thêm hình ảnh, chẳng hạn như một trong các hình nền của DigitalOcean . Khi đã sẵn sàng, hãy nhấp vào nút lưu màu xanh lam.

Bài viết đầu tiên của bạn sẽ xuất hiện trên trang web .

Drupal 9 Đã tạo bài đăng

Bạn hiện đang phát triển trang web Drupal 9 trên máy local của bạn mà không cần tương tác với server , nhờ Docker và DDEV. Trong bước sau, bạn sẽ quản lý containers DDEV để chứa quy trình làm việc của bạn .

Bước 6 - Quản lý Vùng chứa DDEV

Khi bạn đã phát triển xong dự án của bạn hoặc khi bạn muốn nghỉ ngơi, bạn có thể dừng containers DDEV của bạn mà không cần lo lắng về việc mất dữ liệu. DDEV có thể quản lý chuyển đổi ngữ cảnh nhanh chóng giữa nhiều dự án; đây là một trong những tính năng hữu ích nhất của nó. Mã và dữ liệu luôn được lưu giữ trong folder dự án của bạn, ngay cả sau khi bạn dừng hoặc xóa containers DDEV.

Để giải phóng tài nguyên, bạn có thể dừng DDEV bất kỳ lúc nào. Từ folder root của dự án, hãy chạy lệnh sau:

  • ddev stop

DDEV có sẵn trên phạm vi global , vì vậy bạn có thể chạy các lệnh ddev từ mọi nơi, miễn là bạn chỉ định dự án DDEV:

  • ddev stop d9test

Bạn cũng có thể xem tất cả các dự án của bạn cùng một lúc bằng ddev list :

  • ddev list

DDEV bao gồm nhiều lệnh hữu ích khác .

Bạn có thể khởi động lại DDEV và tiếp tục phát triển local bất kỳ lúc nào.

Kết luận

Trong hướng dẫn này, bạn đã sử dụng Docker và sức mạnh của container để phát triển một trang Drupal local , với sự trợ giúp của DDEV. DDEV cũng tích hợp tốt với nhiều IDE, và nó cung cấp tính năng gỡ lỗi PHP tích hợp cho Atom , PHPStormVisual Studio Code (vscode) . Từ đây, bạn cũng có thể tìm hiểu thêm về cách tạo môi trường phát triển cho Drupal bằng DDEV hoặc phát triển các framework PHP khác như Wordpress .


Tags:

Các tin trước

Cách truy cập từ xa các ứng dụng GUI bằng Docker và Caddy trên Ubuntu 18.04 2020-08-07
Cách truy cập từ xa các ứng dụng GUI bằng Docker và Caddy trên Debian 9 2020-08-07
Cách truy cập từ xa các ứng dụng GUI bằng Docker và Caddy trên Debian 10 2020-08-07
Cách loại bỏ image Docker, container và khối lượng 2020-08-06
Cách truy cập từ xa các ứng dụng GUI bằng Docker và Caddy trên Ubuntu 20.04 2020-08-04
Cách mở rộng và bảo mật một ứng dụng Django với Docker, Nginx và Let's Encrypt 2020-07-10
Cách tạo ứng dụng Node.js với Docker trên Ubuntu 20.04 2020-06-30
Cách cài đặt Docker Compose trên Ubuntu 20.04 [Quickstart] 2020-06-11
Cách cài đặt và thiết lập Laravel với Docker Compose trên Ubuntu 20.04 2020-06-09
Cách cài đặt và sử dụng Docker trên Ubuntu 20.04 2020-06-09