Magento là một mã nguồn mở được xây dựng bằng PHP trên nền tảng Zend Framework giúp tạo lập và phát triển các website thương mại điện tử. Ra mắt ngày 31/3/2008, Magento được phát triển bởi Varien và thuộc quyền sở hữu của Magento Inc. Magento được xây dựng theo kiến trúc module đồng thời cơ sở dữ liệu dựa trên mô hình EAV (entity – attribute – value).


1. Tổng quát về Magento

Hiện nay, Magento phát hành 2 phiên bản song song:

  • MagentoCE Comunity Edition – Phiên bản Magento hoàn toàn miễn phí.
  • MagentoEE Enterprise Edition – Phiên bản Magento thương mại, chuyên nghiệp, tích hợp các tính năng mạnh mẽ nhất dành cho các website thương mại điện tử lớn.

Vượt qua giới hạn của một mã nguồn mở miễn phí, Magento có được hàng loạt những tính năng hữu ích như:

  • Quản lý sản phẩm với nhiều tùy chọn như hình ảnh, nhận xét/đánh giá sản phẩm, danh mục yêu thích…
  • Quản lý category dễ dàng với tìm kiếm và chọn lọc sản phẩm theo category.
  • Quản lý kho: dễ dàng quản lý sản phẩm còn lại trong kho, lượng nhập/xuất/tồn.
  • Quản lý khách hàng: tiện lợi và đầy đủ với tình trạng tài khoản, lịch sử giao dịch, danh mục ưu thích, địa chỉ, giỏ hàng. Ngoài ra còn có các tính năng, hình thức để liên hệ và chăm sóc khách hàng với phiếu giảm giá, khuyến mại…
  • Thanh toán: tích hợp nhiều phương thức như thẻ tín dụng, PayPal, Google Checkout, hỗ trợ các module thanh toán bên ngoài như CyberSource, ePay, eWAY và nhiều hơn thế.
  • Công nghệ tìm kiếm nhanh chóng, thân thiện. Hệ thống ngôn ngữ và đơn vị tiền tệ đa dạng, phục vụ nhiều quốc gia
  • Thống kê, phân tích và báo cáo: tích hợp với dịch vụ Google Analytics và nhiều công cụ thống kê/báo cáo khác.
  • Đồng bộ nhanh chóng dữ liệu phần mềm với một website hoàn toàn mới qua addon.

Bên cạnh đó, Magento có một cộng đồng cả người dùng và nhà phát triển lớn, đã góp phần rất nhiều vào sự phát triển chung. Magento Marketplace là một kho ứng dụng addon lớn, bao gồm cả miễn phí và thương mại, cho phép bạn nâng cấp website thương mại điện tử với rất nhiều dịch vụ của cả bên thứ 3 và cả từ nhà phát triển hệ thống.

2. Yêu cầu hệ thống

Để sử dụng Magento, hệ thống bạn cần đáp ứng những yêu cầu sau:

  • Hệ điều hành: Linux x86-64(RHEL, CentOS, Ubuntu, Debian…).
  • RAM: tối thiểu 2GB RAM. Bạn có thể sử dụng SWAP nếu hệ thống nhỏ hơn 2GB RAM.
  • Webserver: Apache 2.2/2.4 hoặc Nginx 1.8 trở lên.
  • Database: MySQL 5.6 trở lên. MariaDB hoặc Percona đều tương thích với Magento do có hỗ trợ MySQL 5.6 APIs.
  • PHP: chỉ hoạt động trên PHP 5.6.5–5.6.x, 7.0.2, 7.0.4, 7.0.6–7.0.x.
  • Các PHP extensions yêu cầu: curl, gd, ImageMagick (6.3.7 trở lên), intl, mbstring, mcrypt, mhash, openssl, PDO/MySQL, SimpleXML, soap, xml, xsl, zip. Nếu sử dụng MagentoEE thì cài thêm bc-math. Nếu dùng PHP 7 thì cài thêm json và iconv. Ngoài ra, nên cài đặt thêm PHP_Xdebug 2.2.0 và PHPUnit 4.1 trở lên.
  • Composer: phiên bản ổn định mới nhất 1.4.2.
  • Các kĩ thuật cache: sử dụng PHP OPcache. Bên cạnh đó, có thể sử dụng Redis 3.0 hoặc Varnish 3.5 trở lên để page caching. Sử dụng Redis hoặc Memcached để session storage.

Trong bài viết này, mình sẽ hướng dẫn cài đặt MagentoCE 2.1.7 trên VPS CentOS 6×64, 2GB RAM, cài đặt HocVPS Script (có sẵn Nginx 1.12.0, PHP 7.0.21 và MariaDB 10.0.31) với domain hocvps.com.

3. Cài đặt hệ thống

– Cập nhật hệ thống lên CentOS 6.9 (Final). Thiết lập SWAP nếu cần thiết.

# yum -y upgrade
# cat /etc/*-release
CentOS release 6.9 (Final)

– Cài đặt HocVPS Script phiên bản mới nhất với PHP 7.0 (port HocVPS Admin 2017)

# curl -sO https://hocvps.com/install && bash install

– Cài đặt các PHP extensions cần thiết.

# yum install ImageMagick ImageMagick-devel
# yum install php-intl php-soap php-xmlrpc php-xdebug php-devel php-imagick

– Chỉnh sửa cấu hình PHP-FPM bằng cách thêm đoạn sau vào cuối /etc/php-fpm.d/www.conf nếu chưa có

; Set data paths to directories owned by process user
php_value[session.save_handler] = files
php_value[session.save_path]    = /var/lib/php/session
php_value[soap.wsdl_cache_dir]  = /var/lib/php/wsdlcache

– Chỉnh sửa cấu hình PHP tại /etc/php.d/00-hocvps-custom.ini

memory_limit = 756M

– Cài đặt PHP Composer

# curl -sS https://getcomposer.org/installer | php
# mv composer.phar /usr/local/bin/composer

Kiểm tra lại

# composer -v
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.4.2 2017-05-17 08:17:52

– Cấu hình Nginx cho domain cài đặt Magento, thay toàn bộ nội dung bằng đoạn dưới:

# nano /etc/nginx/conf.d/hocvps.com.conf

upstream fastcgi_backend {
    server  127.0.0.1:9000;
}
server {
	listen 80;
	server_name www.hocvps.com;
	rewrite ^(.*) http://hocvps.com$1 permanent;
}
server {
	listen 80 default_server;
	server_name hocvps.com;
	set $MAGE_ROOT /home/hocvps.com/public_html;
	root $MAGE_ROOT/pub;
	index index.php index.html index.htm;
        autoindex off;
	charset UTF-8;	
	access_log /home/hocvps.com/logs/access.log;
   	error_log /home/hocvps.com/logs/error.log;
    	
		location / {
		try_files $uri $uri/ /index.php?$args;
	}
	# PHP entry point for setup application
	location ~* ^/setup($|/) {
    root $MAGE_ROOT;
    location ~ ^/setup/index.php {
        fastcgi_pass   fastcgi_backend;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
    location ~ ^/setup/(?!pub/). {
        deny all;
    }
    location ~ ^/setup/pub/ {
        add_header X-Frame-Options "SAMEORIGIN";
    }
}

	# PHP entry point for update application
	location ~* ^/update($|/) {
    root $MAGE_ROOT;
    location ~ ^/update/index.php {
        fastcgi_split_path_info ^(/update/index.php)(/.+)$;
        fastcgi_pass   fastcgi_backend;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  PATH_INFO        $fastcgi_path_info;
        include        fastcgi_params;
    }
        # Deny everything but index.php
    location ~ ^/update/(?!pub/). {
        deny all;
    }
    location ~ ^/update/pub/ {
        add_header X-Frame-Options "SAMEORIGIN";
    }
}

	# PHP for /pub
	location /pub/ {
    location ~ ^/pub/media/(downloadable|customer|import|theme_customization/.*\.xml) {
        deny all;
    }
    alias $MAGE_ROOT/pub/;
    add_header X-Frame-Options "SAMEORIGIN";
}

	# PHP for /static
	location /static/ {
    # Uncomment the following line in production mode
    #expires max;
    # Remove signature of the static files that is used to overcome the browser cache
    location ~ ^/static/version {
        rewrite ^/static/(version\d*/)?(.*)$ /static/$2 last;
    }
    location ~* \.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2)$ {
        add_header Cache-Control "public";
        add_header X-Frame-Options "SAMEORIGIN";
        expires +1y;

        if (!-f $request_filename) {
            rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last;
        }
    }
    location ~* \.(zip|gz|gzip|bz2|csv|xml)$ {
        add_header Cache-Control "no-store";
        add_header X-Frame-Options "SAMEORIGIN";
        expires    off;

        if (!-f $request_filename) {
           rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last;
        }
    }
    if (!-f $request_filename) {
        rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last;
    }
    add_header X-Frame-Options "SAMEORIGIN";
}

	# PHP for /media
	location /media/ {
    try_files $uri $uri/ /get.php?$args;
    location ~ ^/media/theme_customization/.*\.xml {
        deny all;
    }
    location ~* \.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2)$ {
        add_header Cache-Control "public";
        add_header X-Frame-Options "SAMEORIGIN";
        expires +1y;
        try_files $uri $uri/ /get.php?$args;
    }
    location ~* \.(zip|gz|gzip|bz2|csv|xml)$ {
        add_header Cache-Control "no-store";
        add_header X-Frame-Options "SAMEORIGIN";
        expires    off;
        try_files $uri $uri/ /get.php?$args;
    }
    add_header X-Frame-Options "SAMEORIGIN";
}

	location /media/customer/ {
    deny all;
}
	location /media/downloadable/ {
    deny all;
}
	location /media/import/ {
    deny all;
}
	
	# PHP entry point for main application
	location ~ (index|get|static|report|404|503)\.php$ {
    try_files $uri =404;
    fastcgi_pass   fastcgi_backend;
    fastcgi_buffers 1024 4k;
    fastcgi_param  PHP_FLAG  "session.auto_start=off \n suhosin.session.cryptua=off";
    fastcgi_param  PHP_VALUE "memory_limit=768M \n max_execution_time=600";
    fastcgi_read_timeout 600s;
    fastcgi_connect_timeout 600s;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

	# Banned locations (only reached if the earlier PHP entry point regexes don't match)
	location ~* (\.php$|\.htaccess$|\.git) {
    deny all;
}
	
	# Custom configuration
	include /home/hocvps.com/public_html/*.conf;
 
    location /nginx_status {
  		stub_status on;
  		access_log   off;
		allow 127.0.0.1;
		allow 45.77.34.137;
		deny all;
	}
	
	location /php_status {
		fastcgi_pass 127.0.0.1:9000;
		fastcgi_index index.php;
		fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
		include /etc/nginx/fastcgi_params;
		allow 127.0.0.1;
		allow 45.77.34.137;
		deny all;
    	}
    location = /favicon.ico {
                log_not_found off;
                access_log off;
        }
	
	location = /robots.txt {
		allow all;
		log_not_found off;
		access_log off;
	}
}
server {
	listen 2017;
	access_log off;
	log_not_found off;
 	error_log /home/hocvps.com/logs/nginx_error.log;
 	root /home/hocvps.com/private_html;
	index index.php index.html index.htm;
    	server_name hocvps.com;
 
	auth_basic "Restricted";
	auth_basic_user_file /home/hocvps.com/private_html/hocvps/.htpasswd;
	
	location / {
		autoindex on;
		try_files $uri $uri/ /index.php;
	}
	
    	location ~ \.php$ {
		fastcgi_split_path_info ^(.+\.php)(/.+)$;
        	include /etc/nginx/fastcgi_params;
        	fastcgi_pass 127.0.0.1:9000;
        	fastcgi_index index.php;
		fastcgi_connect_timeout 1000;
		fastcgi_send_timeout 1000;
		fastcgi_read_timeout 1000;
		fastcgi_buffer_size 256k;
		fastcgi_buffers 4 256k;
		fastcgi_busy_buffers_size 256k;
		fastcgi_temp_file_write_size 256k;
		fastcgi_intercept_errors on;
        	fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    	}
	
	location ~ /\. {
		deny all;
	}
}

Chú ý: Trong trường hợp này, Magento 2 cài đặt với domain hocvps.com, thư mục website lưu tại /home/hocvps.com/public_html/ và port HocVPS Admin là 2017. Phần bôi đỏ các bạn sửa cho phù hợp hệ thống của mình nhé. Có thể copy toàn bộ rồi thay hocvps.com bằng domain của bạn.

Nếu cài Magento trên site khác site chính HocVPS hoặc sử dụng hệ thống khác HocVPS thì bỏ block port HocVPS (block 2017 như ví dụ) và bỏ default_server.

Sau đó, bạn khởi động lại Nginx và PHP-FPM :

# service nginx restart
Stopping nginx:                                            [  OK  ]
Starting nginx:                                            [  OK  ]
# service php-fpm restart
Stopping php-fpm:                                          [  OK  ]
Starting php-fpm:                                          [  OK  ]

4. Cài đặt Magento

– Tải Magento 2 Community Edition phiên bản mới nhất 2.1.7. Bạn có thể tải từ Magento Tech Resources hoặc sao chép từ Magento 2 Github repository .

Trong trường hợp này, mình tải Magento 2 từ Magento Tech Resources với file nhận được là Magento-CE-2.1.7-2017-05-30-01-54-40.tar.gz

Lưu ý: Với Magento 2 Github repository, bạn chỉ có thể thể sử dụng dạng Developer Mode – dành cho nhà lập trình ứng dụng, không thể mở gian hàng, đặt hàng…

– Upload Magento 2 lên VPS, đặt tại thư mục website, ví dụ/home/hocvps.com/public_html. Có thể sử dụng sFTP qua Bitvise/FileZilla để upload.

– Giải nén toàn bộ nội dung. Như vậy, thư mục Magento 2 tại /home/hocvps.com/public_html/

# cd /home/hocvps.com/public_html
# tar -xzvf Magento-CE-2.1.7-2017-05-30-01-54-40.tar.gz

– Tạo database với lệnh hocvps menu 8)Tao Database.

– Phân Quyền Webserver cho Magento 2 với lệnh hocvps menu 14) Phan Quyen Webserver.

– Tiến hành cài đặt Magento 2 bằng dòng lệnh hoặc giao diện web. Mình sẽ hướng dẫn cài đặt bằng giao diện web. Truy cập đường dẫn domain.com/setup để cài đặt Magento 2 lần lượt từng bước:

Nhấn chọn Agree and Setup Magento

Bước 1: Readiness Check – Kiểm tra yêu cầu hệ thống. Đảm bảo yêu cầu bạn nhấn Next

Bước 2: Add A Databse – Điền thông tin Database đã tạo

Bước 3: Web Configuration – Cấu hình Magento Website. Bạn nhập Website URL và Admin URL. Hiện tại chưa cài đặt SSL nên các bạn không chọn HTTPS

Bước 4: Customize Your Store – Cấu hình gian hàng, bao gồm múi giờ, đơn vị tiền tệ và ngôn ngữ.

Bước 5: Create Admin Account – Tạo lập tài khoản Admin

Bước 6: Install – Cấu hình hoàn tất, bạn nhấn Install Now để cài đặt

Cài đặt hoàn thành, bạn lưu lại các thông tin đăng nhập cùng Enryption Key. Magento sử dụng Enryption Key để mã hóa các thông tin quan trọng như thẻ tín dụng, tài khoản đăng nhập trang quản lý, nội dung CAPTCHA…

– Xoá quyền ghi tại thư mục app/etc:

chmod ugo-w /home/hocvps.com/public_html/app/etc

– Thiết lập Magento Crontab

# EDITOR=nano crontab -u nginx -e

Điền đoạn dưới và lưu lại (nhớ sửa nội dung cho phù hợp hệ thống của bạn)

* * * * * /usr/bin/php /home/hocvps.com/public_html/bin/magento cron:run | grep -v "Ran jobs by schedule" >> /home/hocvps.com/public_html/var/log/magento.cron.log
* * * * * /usr/bin/php /home/hocvps.com/public_html/update/cron.php >> /home/hocvps.com/public_html/var/log/update.cron.log
* * * * * /usr/bin/php /home/hocvps.com/public_html/bin/magento setup:cron:run >> /home/hocvps.com/public_html/var/log/setup.cron.log

Như vậy, bạn đã cài đặt thành công Magento 2 trên hệ thống HocVPS Script. Bạn có thể truy cập hệ thống và sử dụng.

Giao diện Magento Storefront.

Giao diện Magento Admin

Chúc các bạn thành công.

Comment của bạn

Lưu ý: tất cả comment đều được kiểm duyệt cẩn thận! Nếu có code bạn hãy up lên pastebin.com rồi để lại link trong comment.

38 Comments

  1. Minh Thanh 56 comment

    Cái VPS đã cài web WordPress giờ cài thêm web chạy magento thì có xung đột gì hok nhỉ ?
    Với bản mới nhất là 2.3.x liệu cài có gì khác cái bản 2.1.x này không ?

  2. Phong Nguyễn 3 comment

    Anh cho em hỏi, làm cách nào để em có thể cài theme 1 git server và clone về để dev magento được không ạ?

      1. Phong Nguyễn 3 comment

        1 thôi ạ, nhưng em muốn pull code về local và mở bằng netbean để làm việc và sau đó push lên như git ấy ạ

      2. Phong Nguyễn 3 comment

        1 magento thôi ạ, nhưng em muốn pull code đó về và lập trình bằng netbean ấy ạ

  3. hongvi 48 comment

    A kiểm tra sớm giúp e với. e cài lại 3 4 lần rồi vẫn bị. cài xong bước 3 là vô web 404 not found. up magento 2.1.17 lên thì web không truy cập được luôn. web e laptopxachtaybmt[.]com
    Xin anh giúp giùm với

    1. Việt Phương Moderator

      Bạn đã chạy Phân Quyền Webserver chưa? Còn chưa cài đặt xong thì truy cập website có được đâu

      1. hongvi 48 comment

        Dạ em cảm ơn ad. ad cho hỏi. em cài theme sm market. chỉ cần xóa tất cả file trong public_html rồi upload theme sm market cài như bình thường thôi ạ. qua bên magento lắm lỗi quá e làm từ qua giờ chưa xong 🙁

          1. hongvi 48 comment

            a cho hỏi. e chạy php 7.1 thì bị thiếu mất file PHP Extension bcmath.
            khi cài đặt thì làm thế nào ạ

      2. hongvi 48 comment

        em đã nâng các giới hạn lên vẫn không được ạ 🙁
        max_execution_time = 18000
        short_open_tag = On
        realpath_cache_size = 384k
        realpath_cache_ttl = 28800
        memory_limit = 1024M
        upload_max_filesize = 160M
        post_max_size = 160M
        expose_php = Off
        mail.add_x_header = Off
        max_input_nesting_level = 128
        max_input_vars = 2000
        mysqlnd.net_cmd_buffer_size = 16384
        always_populate_raw_post_data=-1
        disable_functions=shell_exec

        1. Việt Phương Moderator

          Bạn sửa xong đã restart lại Nginx và PHP-FPM chưa? Bạn kiểm tra trong server info của HocVPS Admin là biết thông số hiện tại nhé ip:port/serverinfo/. Cụ thể : http://prntscr.com/n68qej

  4. 37 comment

    Nếu đã cài Cài đặt chứng chỉ Let’s Encrypt SSL trên server HocVPS Script thì phần Cấu hình Nginx Webserver cho Magento sửa như thế nào vậy ad?

    1. Việt Phương Moderator

      Bạn sửa như bình thường nhé, vì cấu hình SSL liên quan đến server_name với redirect thôi. Phần cần sửa thì bạn sửa, còn đâu giữ nguyên cấu hình Magento

  5. Nguyễn Hoàng Giang 26 comment

    Mình làm theo từng bước rồi nhưng vào Domain/setup/ thì nó lại báo lỗi 500

    This page isn’t working dotienich.life is currently unable to handle this request.
    HTTP ERROR 500

    http://dotienich.life/setup/

    1. Việt Phương Moderator

      HTTP ERROR 500 lỗi này nhiều nguyên nhân nên bạn check lại log PHP-FPM mới biết được nhé
      Còn nếu không biết check log thì rà lại từ đầu các bước cài đặt

      1. Nguyễn Hoàng Giang 26 comment

        Hình như em get 2.3 nên nó không chạy được với cái PHP 7.0

        Bác có thể update cách cài phiên bản mới nhất không ạ?

  6. Trung 24 comment

    Mình đang dùng hocvps script và chạy Magento 1.9.x

    Trong magento mình kết nối tới UPS để tính shipping cost. Nhưng bị lỗi như thế này.

    Unable to Connect to ssl://www.ups.com:443. Error #0: php_network_getaddresses: getaddrinfo failed: Name or service not known

    Không biết là có solution nào cho lỗi này ko bạn??

    Mình đọc trên mạng thì thấy là Enable cái SELinux lên, mà cái này hocvps mình disable mặc định.

    Admin có cao kiến gì ko nhỉ?

    Thanks

      1. Trung 24 comment

        Hi Phương,

        Port 80 vẫn ra thông báo lỗi như dưới.

        Unable to Connect to tcp://www.ups.com:80. Error #0: php_network_getaddresses: getaddrinfo failed: System error

        Thanks

  7. Nguyen Duy 1 comment

    Cảm ơn bạn về bài viết! nhưng mình có 1 chút vấn đề khi import data vào database. Mình bị lỗi Nginx 502 Bad Gateway khi check log thì có thông báo “[emerg] 1897#1897: a duplicate default server for 0.0.0.0:80 in /etc/nginx/conf.d/.com.conf:9” . Xin bạn cách hướng dẫn khắc phục :d.

    1. Việt Phương Moderator

      Như thông báo, có 2 defaul server trong /etc/nginx/conf.d. Có thể vấn đề ở việc bạn cài Magento lên website khác website chính, khi đó trong VPS sẽ có tận 2 default_server
      Bạn xem ở đâu thì xóa đi

  8. Mai Nam 11 comment

    Magento mới đúng nghĩa là code shop chuẩn nhưng triển khai nó khá tốn kém cả con người lẫn thời gian công sức và tài chính . Hix

  9. Văn 4 comment

    Trước giờ chỉ nghe Magento nhưng chưa có cơ hội trải nghiệm, nhìn hình install đỡ ghiền.