Bagaimana Cara Mentransfer Situs Magento 2 dari Localhost ke Server?
Diterbitkan: 2019-06-06Proses mentransfer situs berbasis Magento 2 dari satu host lokal ke host lokal lainnya bukanlah proses yang memakan waktu. Namun, ia memiliki sejumlah detail seluk beluk & aspek khusus yang harus dipertimbangkan sebelum terjun ke dalam proses.
Dalam posting blog ini, kami akan mentransfer situs Magento 2 dari localhost ke server semudah Lego. Mari kita memiliki wawasan.
Daftar isi
- Langkah Utama
- Semudah Lego: Panduan Langkah-demi-Langkah
- 1. Pemeriksaan kewarasan situs Magento 2 pada host saat ini
- 2. Menyiapkan host jarak jauh (B)
- 3. Pemeriksaan host jarak jauh (B)
- 4. Menyiapkan data untuk transfer
- 4.1. Tempat pembuangan file
- 4.2. Tempat pembuangan database
- 5. Transfer data
- 6. Pembongkaran data
- 6.1. Pembukaan file
- 6.2. Impor database
- 7. Mengakses koreksi data pada remote host (B)
- 8. Koreksi izin akses ke file dan direktori
- 10. Pemecahan masalah: masalah yang sering terjadi
- Masalah 1
- Masalah #2
- Edisi #3
- Edisi #4
- Edisi #5
- Intinya
Langkah Utama
Untuk memulainya, mari kita lihat langkah-langkah utama mentransfer:
- Pemeriksaan kewarasan situs Magento 2 pada host saat ini (A);
- Menyiapkan host jarak jauh (B);
- Pemeriksaan host jarak jauh (B);
- Menyiapkan data untuk ditransfer; 4.1. Tempat pembuangan file; 4.2. Tempat pembuangan basis data;
- Transfer data;
- Pembongkaran data; 6.1. Pembukaan file; 6.2. Impor database;
- Akses koreksi data pada remote host (B);
- Koreksi izin akses ke file dan direktori;
- Prosedur standar sebelum meluncurkan Magento;
- Pemeriksaan kinerja Magento pada host jarak jauh (B);
- Solusi dari masalah yang sering terjadi.
Semudah Lego: Panduan Langkah-demi-Langkah
1. Pemeriksaan kewarasan situs Magento 2 pada host saat ini
Semuanya mudah di sini: jalankan dan periksa. Biasanya, pesanan (siklus penuh) harus dibuat untuk tujuan tersebut. Kemudian periksa:
- Cari;
- halaman produk,
- kategori,
- rekening pelanggan.
Ini adalah tahap penting karena memungkinkan Anda menghindari bergulat dengan pertanyaan tentang kapan tepatnya sesuatu berhenti beroperasi setelah pindah ke host baru. Juga, ini akan menyelamatkan Anda dari keharusan untuk menangani masalah host dasar yang dapat diselesaikan terlebih dahulu (A).
Saya mendorong Anda untuk TIDAK mentransfer setengah operasi Magento tanpa kebutuhan mendesak. Jauh lebih mudah untuk menangani semua masalah pada host saat ini (A) sebelum memulai proses transfer. Terbukti dan teruji ini akan menghemat waktu dan rasa sakit di leher.
2. Menyiapkan host jarak jauh (B)
Server, tempat salinan Magento disebarkan, harus memenuhi persyaratan minimum untuk versi Magento Anda.
Pelajari dokumentasi resmi untuk mengetahui lebih lanjut tentang persyaratan tersebut: https://devdocs.magento.com/guides/v2.3/install-gde/system-requirements-tech.html
Lingkungan harus diatur sebelum melanjutkan ke langkah selanjutnya dari proses transfer (server web dengan host virtual, PHP, database).
Sayangnya, konfigurasi setiap bagian yang terpisah berada di luar batas artikel ini. Namun, Anda dapat dengan mudah menemukan informasi tambahan yang diperlukan di web. Jadi, seharusnya tidak ada kesulitan.
Saya sarankan untuk memberi perhatian khusus pada keberadaan ekstensi PHP yang diperlukan.
Jika Anda memiliki pertanyaan tentang setiap langkah dari tutorial ini, silakan tinggalkan komentar. Saya akan melakukan yang terbaik untuk menjawab semuanya.
3. Pemeriksaan host jarak jauh (B)
Sebelum mentransfer Magento, pastikan itu berfungsi di host baru dan host itu sendiri beroperasi dengan benar. Pertama, periksa apakah server web merespons di alamat yang disebutkan (kami berasumsi bahwa host telah dikonfigurasi).
Dalam contoh saya, saya menggunakan jalur standar yang tersedia tepat setelah Apache2 di server Linux diinstal:
> /var/www/html
sudo -u apache echo "<?php phpinfo();?>" > /var/www/html/index.php
*Di sini dan selanjutnya, perintah akan dijalankan dari pengguna terkait jika diperlukan. Jika perintah dijalankan tanpa nama pengguna, maka eksekusi perintah harus berarti dari pengguna saat ini dan ketersediaan izin terkait.
Jika tidak ada kesalahan yang muncul setelah menjalankan perintah ini, maka semuanya berjalan dengan baik dan file `index.php` Anda harus tersedia di alamat berikut: {host}/index.php. Hasilnya di browser Anda akan terlihat seperti ini (walaupun masih banyak tergantung pada versi PHP Anda):
Jika ada yang tidak beres dan Anda tidak melihat info tentang versi PHP Anda, harap baca panduan yang sesuai tentang konfigurasi server web yang Anda butuhkan.
Juga, saya sarankan mempelajari log terlebih dahulu ini akan menghemat banyak waktu Anda.
Selanjutnya, periksa apakah layanan database telah diluncurkan dan beroperasi dengan benar:
mysql -u root -p
Akibatnya, Anda harus berhasil terhubung ke MySQL. Gunakan perintah `exit` untuk keluar.
* Masukkan login dan kata sandi yang Anda gunakan saat mengatur MySQL.
Selanjutnya, setelah berhasil terhubung ke MySQL, Anda perlu memeriksa database yang ada.
SHOW databases;
Nama database yang akan Anda transfer tidak boleh sama dengan yang sudah ada di server baru. Jika ada database serupa, masalah ini harus diselesaikan secara manual dengan menghapus database yang sudah ada tetapi tidak digunakan, misalnya, atau dengan mengganti nama database Magento yang ingin Anda transfer. Perhatikan bahwa Anda harus memasukkan nama yang diubah dalam file konfigurasi lingkungan Magento `app/etc/env.php`.
Hasil Anda akan terlihat sebagai berikut:
Selain itu, Anda perlu memeriksa apakah layanan itu sendiri telah diluncurkan dan mendengarkan port standar menggunakan utilitas netstat :
netstat -vulntp | grep -i mysql
Hasil Anda akan terlihat seperti berikut:
> tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 3366/mysqld
4. Menyiapkan data untuk transfer
4.1. Tempat pembuangan file
Sebelum membuat file dump, saya sangat menganjurkan Anda untuk mengambil semua file yang tidak perlu dari direktori Magento, jika ada, misalnya dump lama, cache, log, dll.
rm -rf var/cache/* var/page_cache/* var/generation/* var/composer_home/cache/* var/log/* pub/static/*
Ini akan memungkinkan Anda untuk mempersingkat proses. Selain menyelamatkan Anda dari mentransfer file yang tidak perlu, Anda akan menghindari penggunaan ruang server tanpa kebutuhan khusus.
*JANGAN menghapus `.htaccess` dan file tersembunyi lainnya secara paksa, jika Anda menggunakan server web Apache2 (perintah `rf` tidak menghapusnya secara default). File-file ini diperlukan untuk operasi Magento yang benar.
Sekarang, masuk ke direktori tempat Magento kita berada di server lokal (A). Dalam contoh saya, itu adalah:
> /Users/sergei/PhpstormProjects
Direktori dengan Magento diberi nama di bawah aws-botapi
.
Mari buat arsip untuk transfer lebih lanjut ke host jarak jauh (B):
tar -zcf aws-botapi.tar.gz aws-botapi
Anda harus memeriksa bahwa arsip telah dibuat:
ls -la aws-botapi.tar.gz
4.2. Tempat pembuangan database
Jika ada beberapa database terpisah yang diatur secara lokal di situs Magento Anda, maka semuanya harus ditransfer. Dalam contoh saya, dua database digunakan. Anda dapat menemukannya di konfigurasi lingkungan Magento `app/etc/env.php` di bagian `db => connection => `.
Sekarang, buang semua database:
mysqldump -u root -p db1 | gzip > ./db1.sql.gz mysqldump -u root -p db2 | gzip > ./db2.sql.gz
* Gunakan info seperti nama pengguna basis data dan nama basis data.
5. Transfer data
Transfer dump file Magento menggunakan utilitas `scp` (menyalin melalui ssh) atau menggunakan cara lain sesuai keinginan Anda (misalnya, menyalin melalui `ftp`):
scp -i ~/.ssh/myprivatekey.pem aws-botapi.tar.gz [email protected]:/home/ec2-user
Di mana,
a) -i ~/.ssh/myprivatekey.pem adalah jalur ke kunci pribadi untuk koneksi (abaikan ini jika Anda hanya menggunakan kata sandi);
b) ec2-user adalah nama pengguna untuk koneksi;
c) 52.12.187.98 adalah alamat server;
d) /home/ec2-user adalah path absolut di server, tempat kita menyalin file.
*Jika Anda menggunakan port yang berbeda dari port standar, jangan lupa untuk mengidentifikasinya menggunakan parameter terpisah (misalnya, `-P 6000` untuk 6000 port).
Setelah penyalinan selesai, Anda akan melihat baris seperti ini:
> aws-botapi.tar.gz 100% 312MB 4.3MB/s 01:11
Ulangi tindakan yang sama untuk file dump:
scp -i ~/.ssh/myprivatekey.pem db1.sql.gz [email protected]:/home/ec2-user scp -i ~/.ssh/myprivatekey.pem db2.sql.gz [email protected]:/home/ec2-user
6. Pembongkaran data
6.1. Pembukaan file
Di server (B), mari arahkan ke direktori, tempat kita menyalin arsip. Mari kita membongkar file Magento ke direktori host lokal:
> tar -zxf aws-botapi.tar.gz -C /var/www/html/
Pastikan untuk memeriksa bahwa file telah dibongkar dengan benar:
ls -la /var/www/html
Jika file Magento telah dibongkar ke sub-direktori, transfer file tersebut menggunakan perintah `mv` atau `cp`.
6.2. Impor database
Terhubung ke MySQL di server (B):
mysql -u root -p
Sekarang, mari kita buat database baru:
CREATE DATABASE IF NOT EXISTS db1 CHARACTER SET utf8 COLLATE utf8_general_ci;
*Hasilnya akan terlihat seperti ini:
> Query OK, 1 row affected (0.01 sec)
Lakukan tindakan serupa jika Anda memiliki database lain.
Kemudian, impor database dari dump:
gunzip < /home/ec2-user/db1.sql.gz | mysql -u root -p db1 gunzip < /home/ec2-user/db2.sql.gz | mysql -u root -p db2
Hubungkan ke MySQL:
mysql -u root -p
dan periksa apakah semua database ada:
SHOW databases;
Daftar semua database harus tersedia, termasuk milik kita:
+--------------------+ | Database | +--------------------+ | db1 | | db2 | | information_schema | | mysql | | performance_schema | +--------------------+ 5 rows in set (0.00 sec)
Pilih database yang baru saja kita impor:
USE db1;
dan periksa keberadaan tabel:
SHOW tables;
Jika tabel belum dibuat atau kosong, periksa file dump itu sendiri dan ulangi seluruh proses sekali lagi kecuali untuk langkah ketika database baru dibuat (seperti yang sudah ada).
7. Mengakses koreksi data pada remote host (B)
Data utama yang harus diubah di Magento setelah ditransfer adalah 1) URL dasar dan 2) kunci akses ke MySQL:
Mengubah URL dasar
Anda perlu mengubah semua jalur lama di tabel `core_config_data`. Untuk memulainya, mari kita lokalkan bidang ini menggunakan kueri 'nilai' yang menyertakan alamat lama. Misalkan alamat website yang lama adalah '1001101010.com', maka akan muncul perintah pencarian sebagai berikut:
SELECT * FROM core_config_data WHERE `value` LIKE '%1001101010.com%' \G
*`\G` di akhir kueri alih-alih `;` akan membuat catatan lebih mudah dibaca.
** Jangan lupa untuk menggunakan `table_prefix` sebelum nama tabel jika sudah diinstal.
Hasilnya akan terlihat seperti itu:
mysql> SELECT * FROM core_config_data WHERE `value` LIKE '%1001101010.com%' \G *************************** 1. row *************************** config_id: 2 scope: default scope_id: 0 path: web/unsecure/base_url value: http://1001101010.com/
*************************** 12. row *************************** config_id: 2401 scope: default scope_id: 0 path: web/secure/base_url value: https://1001101010.com/ *************************** 13. row *************************** config_id: 2402 scope: default scope_id: 0 path: web/secure/base_link_url value: https://1001101010.com/ 13 rows in set (0.00 sec)
Pada titik ini, tujuan kami adalah mengubah alamat lama ke yang baru. Untuk tujuan ini, mari kita pastikan bahwa itu memang harus diubah di semua baris (biasanya begitu kecuali untuk beberapa kasus langka yang melibatkan konfigurasi modul pihak ke-3) dan jalankan kueri berikut:
UPDATE `core_config_data` SET `value` = replace(value, '1001101010.com', 'mynewdomain.com') WHERE `value` LIKE '%1001101010.com%';
Ini akan menggantikan semua kemunculan baris `1001101010.com` di bidang `value` ke baris `mynewdomain.com`.
Hasilnya harus sekitar sebagai berikut (jumlah baris harus sama):
> Query OK, 13 rows affected (0.00 sec) > Rows matched: 13 Changed: 13 Warnings: 0
Permintaan berikut:
SELECT * FROM core_config_data WHERE `value` LIKE '%1001101010.com%' \G
Sekarang, saatnya untuk melanjutkan mengedit file lingkungan `app/etc/env.php` (dari root Magento; dalam contoh, adalah `/var/www/html/`).
Mari kita buka dalam program pengeditan teks (saya menggunakan Nano meskipun itu pasti pertanyaan preferensi pribadi).
nano /var/www/html/app/etc/env.php
Kemudian edit data di `'db' => 'connection'` dengan menentukan data akurat dari server baru di kolom 'username' dan 'password'.
* PENTING! Jika database Anda terletak di server jauh, tidak perlu mengubah data. Satu-satunya hal yang perlu Anda lakukan adalah memastikan ada akses dari server saat ini ke basis data jarak jauh itu. (Misalnya, telah ditambahkan ke daftar putih firewall di server database).
Gunakan nilai 'localhost' di bidang 'host' untuk memahami apakah koneksi lokal atau tidak.
Selanjutnya, simpan file.
8. Koreksi izin akses ke file dan direktori
Untuk mengatur izin akses secara akurat, Anda perlu mengetahui dari pengguna mana dan dengan grup mana server web Anda berjalan.
Paling sering, ini adalah `apache` untuk CentOS atau `www-data` di Ubuntu. Sebagai aturan, nama pengguna sama dengan nama grup. Namun, pada server yang berbeda, ini mungkin berbeda.
Perintah berikut akan membantu Anda mengetahuinya:
ps aux | egrep '(apache|httpd)'
Akibatnya, di kolom pertama, Anda akan melihat nama pengguna (nama grup kemungkinan akan sama. Namun, jika Anda tidak yakin, gunakan perintah `groups apache`, di mana `apache` adalah nama pengguna untuk saksikan berikut ini).
Hal pertama setelah ini, kita perlu mentransfer semua file dan direktori di dalam Magento ke pengguna server web (dalam contoh ini adalah `apache`. Untuk pengguna `www-data` cukup ganti `apache:apache` menjadi ` www-data:www-data`, dan juga untuk yang lain):
sudo chown -R apache:apache /var/www/html
Selanjutnya, periksa apakah perubahan telah diterapkan atau belum:
ls -la /var/www/html
Semua file dan direktori (kecuali untuk induk yang ditandai sebagai `..` harus memiliki pengguna dan grup `apache` (jika `www-data` adalah pengguna server web di sistem Anda, maka harus ditandai sebagai pemilik):
Sekarang, diperlukan untuk secara akurat mengatur izin akses ke file dan direktori Magento. Menurut dokumentasi, pengaturan berikut sangat disarankan:
*Semua perintah harus dijalankan dari root Magento!, secara konsisten 1 setelah 1. Dalam contoh, root Magento di server adalah `/var/www/html`.
Gunakan perintah `pwd` untuk memeriksa lokasi saat ini.
find var generated vendor pub/static pub/media app/etc -type f -exec chmod u+w {} + find var generated vendor pub/static pub/media app/etc -type d -exec chmod u+w {} + chmod u+x bin/magento
*Jika pengguna saat ini tidak memiliki izin untuk menjalankan perintah ini, gunakan `root ` ( perintah `sudo` pengguna, seperti `sudo find ...`)
9. Prosedur standar sebelum meluncurkan Magento
Saatnya untuk memeriksa apakah Magento diluncurkan dari baris perintah. Untuk memulainya, mari kita uji output standar dari perintah yang Anda akses:
*Sekarang, setelah mengatur izin, akses apa pun ke Magento akan dibuat dari pengguna server web yang sama yang menghasilkan file, file cache, statika, dll. Jika Anda mengabaikannya, Magento dapat berhenti berjalan dan Anda akan dipaksa untuk memulihkan izin sekali lagi (langkah sebelumnya dalam pedoman ini).
**Untuk operasi yang akurat, Anda harus menemukan juru bahasa php
yang tepat di server Anda. Biasanya, `php` alias mengacu pada versi terbaru. Namun, Anda sering harus menunjukkan path lengkap, seperti `/usr/bin/php72` misalnya.
*** Di sini dan selanjutnya, semua perintah Magento akan dijalankan dari direktori root Magento di server (B).
sudo -u apache php bin/magento list
Ini akan membuat daftar dengan perintah tersedia di baris perintah:
Jika semuanya berhasil, Anda dapat melanjutkan ke perintah lebih lanjut:
*Jika sebelum transfer Anda tidak menghapus direktori dengan cache dan file yang dihasilkan, ini adalah waktu yang tepat untuk melakukannya dengan menggunakan perintah berikut:
sudo rm -rf var/cache/* var/page_cache/* var/generation/*
sudo -u apache php bin/magento setup:upgrade
Anda dapat menghindari menjalankan perintah ini, tetapi saya tetap menyarankan untuk memastikan bahwa semua modul ditulis dan tidak ada kesalahan yang terjadi. Akibatnya, Anda akan melihat daftar dengan modul, yang diproses, tanpa melihat kesalahan apa pun dalam prosesnya.
Lakukan kompilasi untuk menghasilkan file Magento yang diperlukan:
sudo -u apache php bin/magento setup:di:compile
*Pada titik ini, sangat penting untuk mendeteksi semua kesalahan yang telah terjadi. Jika tidak, Magento akan berjalan tidak semestinya. Jika tidak ada kesalahan yang ditemukan, maka semuanya sempurna. ?
Kemudian, buat statika ( jika mode produksi diaktifkan. Untuk memeriksa mode Anda saat ini, gunakan perintah berikut:
sudo -u apache php bin/magento deploy:mode:show
sudo -u apache php bin/magento setup:static-content:deploy
*Untuk menghasilkan statika untuk lokal tertentu, tentukan sebagai parameter setelah perintah. Misalnya, `sudo -u apache php bin/magento setup:static-content:deploy ru_RU` akan digunakan untuk lokal Rusia.
Selamat! Anda telah berhasil mentransfer toko Magento2 Anda dari localhost untuk beroperasi dengan benar di server baru. Sekarang, buka di browser dengan memasukkan alamat baru!
10. Pemecahan masalah: masalah yang sering terjadi
Masalah 1
Masalah:
Jika saat menyalin arsip, Anda menerima pesan seperti ini:
scp: /var/www/html/aws-botapi.tar.gz: Permission denied
Maka Anda harus memeriksa di mana Anda telah menyalin arsip di server pada contoh pertama. Kemungkinan besar pengguna yang ingin terhubung tidak memiliki izin untuk membuat catatan di direktori ini (`/var/www/html` dalam contoh).
Larutan:
Ini dapat diselesaikan dengan mengubah direktori tempat Anda mencoba menyalin saat menjalankan perintah `scp` atau menghubungkan ke server dan menyesuaikan izin akses ke direktori ini untuk pengguna saat ini:
`sudo chown -R ec2-user /var/www/html` (menjadikan pengguna sebagai pemilik direktori `/var/www/html` dan semua file dan direktori yang disertakan), atau
`sudo chmod -R o+w /var/www/html` (mengizinkan semua (`o-ther`) membuat catatan (`w-rite`) di direktori `/var/www/html`).
Gunakan perintah ini dengan hati-hati karena mereka secara langsung mempengaruhi keamanan sistem Anda.
Masalah #2
Masalah:
Jika saat mengimpor database, terjadi kesalahan berikut`ERROR 1049 (42000): Database tidak dikenal 'db1'` (di mana `db1` adalah nama database), maka database Anda belum dibuat.
Larutan:
Coba akses`mysql` dan buat ulang database ini sekali lagi.
Edisi #3
Masalah:
Jika saat mengubah pemilik file dan direktori, Anda melihat perintah `chown: invalid user: … `, maka kemungkinan besar Anda salah menentukan pengguna server web di server Anda.
Larutan:
Lihat panduan terkait tentang konfigurasi server di sistem Anda atau gunakan utilitas `ps aux` untuk menentukan pengguna yang tepat.
Edisi #4
Masalah:
Jika ada kesalahan PHP saat memulai Magento di server baru (sebagai aturan, itu berarti tidak adanya beberapa ekstensi PHP)…
Larutan:
Ini dapat diselesaikan dengan menginstal ekstensi yang hilang.
a) `Ekstensi json PHP diperlukan untuk menggunakan NormalizerFormatter` Monolog
*php-json* ekstensi tidak ada;
b) `PHP Fatal error: Uncaught Error: Kelas 'DOMDocument' tidak ditemukan di …`
*php-xml* ekstensi tidak ada;
c) `Kesalahan fatal PHP: Kelas 'IntlDateFormatter' tidak ditemukan di …`
*php-intl* extebnsion tidak ada.
Edisi #5
Masalah:
Jika ekstensi PHP tidak ada saat menjalankan perintah `composer update`, Anda akan melihat kesalahan berikut:
Sebagai contoh,
`phpunit/phpunit 6.5.14 memerlukan ext-mbstring * -> mbstring ekstensi PHP yang diminta tidak ada di sistem Anda.`
Larutan:
Untuk mengatasi kesalahan seperti itu, Anda hanya perlu menginstal ekstensi PHP yang dirujuk oleh komposer. Misalnya, `yum install php-mbstring`.
Daftar lengkap ekstensi yang diperlukan untuk versi Magento 2 Anda dapat ditemukan di dokumentasi resmi.
Intinya
Anda sudah siap! Pada artikel ini, saya melakukan yang terbaik untuk menyajikan langkah-langkah yang mudah diikuti dalam mentransfer situs Magento 2 Anda dari localhost ke server.
Jika Anda masih memiliki pertanyaan atau ingin membagikan pendapat Anda, silakan gunakan bagian komentar di bawah. Saya akan melakukan yang terbaik untuk menjawab semua pertanyaan dan kekhawatiran!