All Products
Search
Document Center

Elastic Compute Service:Membangun website e-dagang Magento 2 pada instans Ubuntu

Last Updated:Aug 21, 2026

Deploy Magento 2, an open-source e-commerce platform, on an ECS instance running Ubuntu with NGINX, MySQL, OpenSearch, and Composer.

Catatan

Lihat situs resmi Adobe Commerce untuk informasi selengkapnya mengenai Magento 2.

Latar Belakang

Topik ini menggunakan instans ECS dengan konfigurasi berikut:

  • Tipe instans: ecs.c7.large

  • Sistem operasi: gambar publik Ubuntu 22.04 64-bit

  • CPU: 2 vCPU

  • Memori: 4 GiB

    Catatan

    Magento 2 memerlukan setidaknya 4 GiB memori.

Versi perangkat lunak berikut diperlukan sesuai dokumentasi resmi Magento 2:

  • Composer 2.7: Mengelola codebase Magento 2 dan dependensi pihak ketiga.

  • OpenSearch 2.12: Menyediakan pencarian produk, termasuk penyaringan dan pengurutan relevansi.

  • MySQL 8.0: Menyimpan data bisnis seperti produk, pesanan, dan catatan pelanggan.

  • PHP 8.3: Mengeksekusi logika aplikasi dan berkomunikasi dengan database serta layanan lainnya.

  • NGINX 1.24: Menyajikan file statis dan melakukan reverse-proxy permintaan dinamis ke PHP-FPM.

Prasyarat

  1. Dapatkan kunci pribadi Anda dari Adobe Commerce.

    Kunci pribadi mencakup Public Key dan Private Key, yang dapat dilihat dan dikelola di halaman Access Keys di Adobe Commerce Marketplace. Klik Create A New Access Key untuk membuat kunci baru, lalu gunakan Copy untuk menyalin nilai kuncinya.

  2. Alamat IP publik secara otomatis ditetapkan ke instans ECS. Atau, alamat IP elastis (EIP) dikaitkan dengan instans ECS. Untuk petunjuk cara mengaktifkan bandwidth publik, lihat Enable public bandwidth.

  3. Port 22 terbuka dalam aturan grup keamanan masuk. Lihat Add a security group rule.

  4. Docker diinstal pada instans ECS. Lihat Install Docker.

  5. Stack LNMP (Linux, NGINX, MySQL, dan PHP) telah dideploy. Lihat Deploy an LNMP stack.

    Catatan
    • Versi yang diperlukan: NGINX 1.24, MySQL 8.0, dan PHP 8.3.

    • Sesuaikan nomor versi pada langkah-langkah berikut ini.

Prosedur

Langkah 1: Instal ekstensi PHP

  1. Instal paket inti PHP dan ekstensinya.

    1. Instal paket inti PHP beserta ekstensi bawaannya.

      sudo apt-get install php8.3-cli php8.3-common php8.3-fpm php8.3-mysql php8.3-zip php8.3-gd php8.3-curl php8.3-intl php8.3-mbstring php8.3-soap php8.3-xml php8.3-bcmath php8.3-sqlite3 php8.3-opcache
    2. Instal ekstensi tambahan.

      sudo apt-get install php8.3-bcmath php8.3-curl php8.3-gd php8.3-intl php8.3-mbstring php8.3-soap php8.3-xml php8.3-zip php8.3-sqlite3
    3. Restart NGINX untuk menerapkan perubahan.

      sudo systemctl restart nginx  
  2. Konfigurasikan php.ini.

    1. Buka file php.ini.

      sudo vim /etc/php/8.3/fpm/php.ini
      sudo vim /etc/php/8.3/cli/php.ini
    2. Perbarui pengaturan berikut, lalu simpan dan tutup file tersebut.

      memory_limit = 2G
      max_execution_time = 1800
      zlib.output_compression = On
    3. Restart PHP-FPM.

      sudo systemctl restart php8.3-fpm

Langkah 2: Buat database Magento2

  1. Hubungkan ke MySQL.

    mysql -u root -p

    Masukkan kata sandi root MySQL saat diminta.

  2. Buat dan konfigurasikan database. Pada contoh ini, nama database dan username keduanya adalah magento.

    CREATE DATABASE magento;
    CREATE USER 'magento'@'localhost' IDENTIFIED BY 'magento';
    GRANT ALL PRIVILEGES ON magento.* TO 'magento'@'localhost';
    FLUSH PRIVILEGES;
    EXIT;
  3. Verifikasi database.

    mysql -u magento -p
    Catatan

    Jika monitor MySQL muncul, berarti database berhasil dibuat. Jika terjadi error, jalankan kembali pernyataan sebelumnya.

Langkah 3: Unduh dan instal OpenSearch

  1. Sebelum menginstal OpenSearch dengan Docker, selesaikan tugas-tugas berikut:

    1. Nonaktifkan memory paging dan swapping untuk meningkatkan performa.

      sudo swapoff -a
    2. Tingkatkan batas memory map untuk OpenSearch.

      1. Buka sysctl.conf.

        sudo vi /etc/sysctl.conf
      2. Tambahkan vm.max_map_count=262144

      3. Verifikasi konfigurasi.

        sudo sysctl -p
        cat /proc/sys/vm/max_map_count

        Setelah menjalankan perintah tersebut, output vm.max_map_count = 262144 menunjukkan bahwa parameter telah berhasil dimodifikasi.

        vm.swappiness = 0
        kernel.sysrq = 1
        vm.max_map_count = 262144
        net.ipv4.neigh.default.gc_stale_time = 120
        net.ipv4.conf.all.rp_filter = 0
        net.ipv4.conf.default.rp_filter = 0
        net.ipv4.conf.default.arp_announce = 2
        net.ipv4.conf.lo.arp_announce = 2
        net.ipv4.conf.all.arp_announce = 2
        net.ipv4.tcp_max_tw_buckets = 5000
        net.ipv4.tcp_syncookies = 1
        net.ipv4.tcp_max_syn_backlog = 1024
        net.ipv4.tcp_synack_retries = 2
        net.ipv4.tcp_slow_start_after_idle = 0
  2. Jalankan OpenSearch dalam kontainer Docker.

    1. Ambil image OpenSearch.

      sudo docker pull opensearchproject/opensearch:2
    2. Deploy OpenSearch dalam kontainer untuk memverifikasi Docker berfungsi dengan baik.

      sudo docker run -d \
       -p 9200:9200 \
       -p 9600:9600 \
       -e "discovery.type=single-node" \
       -e "OPENSEARCH_INITIAL_ADMIN_PASSWORD=admin" \
       -e "plugins.security.disabled=true" \
       opensearchproject/opensearch:latest
      Catatan

      Contoh ini menonaktifkan SSL pada layer HTTP dan Transport untuk pengujian dengan mengatur plugins.security.disabled ke true.

    3. Kirim permintaan ke port 9200. Kredensial default adalah admin/admin.

      sudo curl -k http://localhost:9200 -ku admin:admin

      Output yang diharapkan:

      {
        "name" : "a937e018****",
        "cluster_name" : "docker-cluster",
        "cluster_uuid" : "GLAjAG6bTeWE****_d-CLw",
        "version" : {
          "distribution" : "opensearch",
          "number" : <version>,
          "build_type" : <build-type>,
          "build_hash" : <build-hash>,
          "build_date" : <build-date>,
          "build_snapshot" : false,
          "lucene_version" : <lucene-version>,
          "minimum_wire_compatibility_version" : "7.10.0",
          "minimum_index_compatibility_version" : "7.0.0"
        },
        "tagline" : "The OpenSearch Project: https://opensearch.org/"
      }
  1. Daftar kontainer yang sedang berjalan dan salin ID kontainer OpenSearch.

    sudo docker container ls
  2. Konfigurasikan NGINX sebagai proxy untuk OpenSearch.

    1. Verifikasi bahwa /etc/nginx/nginx.conf berisi include /etc/nginx/conf.d/*.conf;.

      vi /etc/nginx/nginx.conf

      ##
          # Virtual Host Configs
          ##
      
          include /etc/nginx/conf.d/*.conf;
          include /etc/nginx/sites-enabled/*;
      }
      
      #mail {
      #       # See sample authentication script at:
      #       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
      #
      #       # auth_http localhost/auth.php;
      #       pop3_capabilities "TOP" "USER";
      #       # imap_capabilities "IMAP4rev1" "UIDPLUS";
    2. Buat konfigurasi proxy.

      1. Buat file konfigurasi berikut.

        sudo vim /etc/nginx/conf.d/magento_es_auth.conf
        server {
           listen 8080;
           location /_cluster/health {
              proxy_pass http://localhost:9200/_cluster/health;
           }
        }
      2. Restart NGINX.

        sudo service nginx restart
      3. Periksa apakah proxy berfungsi:

        sudo curl -u admin:admin -i http://localhost:8080/_cluster/health?pretty

        Output yang diharapkan:

        root@z1zzZ:/# curl -u admin:admin -i http://localhost:8080/_cluster/health?pretty
        HTTP/1.1 200 OK
        Server: nginx/1.18.0 (Ubuntu)
        Date: Tue, 14 Jan 2025 05:43:56 GMT
        Content-Type: application/json; charset=UTF-8
        Content-Length: 497
        Connection: keep-alive
        
        {
          "cluster_name" : "docker-cluster",
          "status" : "green",
          "timed_out" : false,
          "number_of_nodes" : 1,
          "number_of_data_nodes" : 1,
          "discovered_master" : true,
          "active_primary_shards" : 0,
          "active_shards" : 0,
          "relocating_shards" : 0,
          "initializing_shards" : 0,
          "unassigned_shards" : 0,
          "delayed_unassigned_shards" : 0,
          "number_of_pending_tasks" : 0,
          "number_of_in_flight_fetch" : 0,
          "task_max_waiting_in_queue_millis" : 0,
          "active_shards_percent_as_number" : 100.0
        }

Langkah 4: Unduh dan instal Composer

  1. Instal alat dekompresi.

    Composer memerlukan unzip atau p7zip untuk dekompresi.

    sudo apt-get install unzip
    sudo apt-get install p7zip-full
  2. Instal Composer:

    php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
    php -r "if (hash_file('sha384', 'composer-setup.php') === 'dac665fdc30fdd8ec78b38b9800061b4150413ff2e3b6f88543c636f7cd84f6db9189d43a81e5503cda447da73c7e5b6') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
    php composer-setup.php
    php -r "unlink('composer-setup.php');"
  3. Pindahkan composer.phar ke direktori PATH agar dapat diakses secara global.

    sudo mv composer.phar /usr/local/bin/composer
  4. Verifikasi versi Composer.

    composer --version

Langkah 5: Unduh dan instal Magento2

  1. Buat proyek Composer dengan pasangan kunci akses yang diperoleh dari Adobe Commerce. Nama proyek adalah magento.

    cd /var/www/html/
    sudo composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition magento
  2. Masukkan kunci autentikasi Anda saat diminta.

    Catatan
    • Kunci autentikasi adalah kunci privat yang diperoleh pada bagian Prasyarat.

    • Pengunduhan dapat memakan waktu 5 hingga 10 menit.

    ecs-user@xxx:/var/www/html$ sudo composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition magento
    Creating a "magento/project-community-edition" project at "./magento"
    Warning from repo.magento.com: You haven't provided your Magento authentication keys. For instructions, visit https://devdocs.magento.com/guides/v2.3/install-gde/prereq/connect-auth.html
        Authentication required (repo.magento.com):
          Username: 2732xxx14ff71b9
          Password:
    Do you want to store credentials for repo.magento.com in /root/.config/composer/auth.json ? [Yn] y
    Installing magento/project-community-edition (2.4.7-p3)
      - Downloading magento/project-community-edition (2.4.7-p3)
      - Installing magento/project-community-edition (2.4.7-p3): Extracting archive
    Created project in /var/www/html/magento
    Loading composer repositories with package information
  3. Tetapkan izin file.

    cd /var/www/html/magento
    find var generated vendor pub/static pub/media app/etc -type f -exec chmod g+w {} +
    find var generated vendor pub/static pub/media app/etc -type d -exec chmod g+ws {} +
    chown -R :www-data .
    chmod u+x bin/magento
  4. Instal Magento 2.

    Instal Adobe Commerce dari command line. Pada contoh ini, db-host adalah localhost, dan db-name, db-user, dan db-password semuanya adalah magento.

    sudo bin/magento setup:install \
      --base-url=http://196.****.*.1/ \ # Alamat IP publik instans ECS
      --db-host=localhost \ # Host database
      --db-name=magento \  # Nama database
      --db-user=magento \ # Username database
      --db-password=magento \ # Kata sandi database
      --admin-firstname=admin \ # Nama depan administrator backend
      --admin-lastname=admin \ 
      --admin-email=cy****sper@email.com \ # Alamat email administrator
      --admin-user=admin \ # Username login backend
      --admin-password=admin*** \ # Kata sandi login backend
      --language=en_US \ # Bahasa website
      --currency=USD \
      --timezone=America/Chicago \
      --use-rewrites=1 \
      --search-engine=opensearch \ 
      --opensearch-host=localhost \
      --opensearch-port=9200 \
      --opensearch-enable-auth=1 \
      --opensearch-username=admin \
      --opensearch-password=admin \
      --opensearch-index-prefix=magento2
  5. Setelah instalasi, output serupa berikut akan ditampilkan.

    [Progress: 1445 / 1448]
    Post installation file permissions check...
    For security, remove write permissions from these directories: '/home/wwwroot/magento2/app/etc'
    [Progress: 1446 / 1448]
    Write installation date...
    [Progress: 1447 / 1448]
    Enabling Update by Schedule Indexer Mode...
    14 indexer(s) are in "Update by Schedule" mode.
    [Progress: 1448 / 1448]
    [SUCCESS]: Magento installation complete.
    [SUCCESS]: Magento Admin URI: /admin_46i5yq2
    Nothing to import.

    Magento Admin URI adalah URL backend administrator, yang dapat diakses setelah NGINX dikonfigurasi. Contoh: http://47.****.**.72/admin_46i****.

  6. Konfigurasikan forwarding NGINX.

    1. Buat file konfigurasi Magento 2.

      sudo vim /etc/nginx/conf.d/magento.conf
    2. Tambahkan konten berikut, lalu simpan dan keluar.

      upstream fastcgi_backend {
        server  unix:/run/php/php8.3-fpm.sock;
      }
      server {
        listen 80;
        server_name ip;
        set $MAGE_ROOT /var/www/html/magento;
        include /var/www/html/magento/nginx.conf.sample;
      }
      
    3. Verifikasi sintaksis NGINX.

      nginx -t
    4. Restart NGINX.

      sudo systemctl restart nginx

Kunjungi website Magento 2

  1. Buka http://<Alamat IP publik instans ECS Anda> di browser untuk melihat halaman utama default.

    Halaman tersebut menampilkan halaman utama tema Luma Magento default dengan judul Home Page dan teks placeholder CMS homepage content goes here., yang menunjukkan bahwa Magento 2 berhasil diinstal.

  2. Buka http://<Alamat IP publik instans ECS>/admin_46i**** dan login dengan username admin dan password admin***.

FAQ

Q1: Apa yang harus saya lakukan jika tidak dapat mengunduh paket perangkat lunak Magento2?

Perbarui repository image untuk mengatasi masalah ini.

Warning from repo.magento.com: You haven't provided your Magento authentication keys. For instructions, visit https://devdocs.magento.com/guides/v2.3/install-gde/prereq/connect-auth.html
    Authentication required (repo.magento.com):
      Username: 27320b2f8d060eedc037e28144ff71b9
      Password:
Do you want to store credentials for repo.magento.com in /root/.config/composer/auth.json ? [Yn] y
    Installing magento/project-community-edition (2.4.7-p3)
      - Downloading magento/project-community-edition (2.4.7-p3)
      - Installing magento/project-community-edition (2.4.7-p3): Extracting archive
    Created project in /var/www/html/magento
Loading composer repositories with package information
https://repo.packagist.org could not be fully loaded (curl error 28 while downloading https://repo.packagist.org/p2/composer/composer.json: Operation timed out after 30003 milliseconds with 0 out of 14951 bytes received), package information was loaded from the local cache and may be out of date
  1. Lihat repository image saat ini.

    composer config -l -g
    $ composer config -l -g
    [repositories.packagist.org.type] composer
    [repositories.packagist.org.url] https://packagist.phpcomposer.com
    [process-timeout] 300
  2. Beralih ke mirror Alibaba Cloud.

    sudo composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

Q2: Operasi apa saja yang dapat saya lakukan pada nama domain?

Untuk menggunakan domain kustom pada website Anda, beli nama domain. Jika instans ECS Anda berada di Tiongkok daratan, ajukan pendaftaran ICP. Kemudian arahkan nama domain ke alamat IP publik instans tersebut.

  • Beli nama domain.

    Nama domain memberikan alamat yang mudah diingat bagi pengguna dibandingkan alamat IP.

    Anda dapat mendaftarkan nama domain di Alibaba Cloud.

  • Ajukan pendaftaran ICP untuk nama domain tersebut.

    Pendaftaran ICP wajib untuk setiap nama domain yang diarahkan ke server di wilayah Tiongkok daratan. Website tidak dapat diakses publik hingga mendapatkan nomor pendaftaran ICP.

  • Lakukan resolusi nama domain.

    Arahkan nama domain ke alamat IP instans ECS dengan DNS Alibaba Cloud agar pengguna dapat mengakses website Anda melalui nama domain. Lihat Get started.

Referensi