
Pendahuluan
Seiring berkembangnya aplikasi dan website anda, anda mungkin sampai pada titik di mana Anda telah melampaui pengaturan server anda saat ini. Jika Anda melakukan hosting server web dan database pada mesin yang sama, mungkin ada baiknya memisahkan dua fungsi ini sehingga masing-masing dapat beroperasi dengan perangkat kerasnya sendiri dan berbagi beban menanggapi permintaan klien anda.
Pada tutorial ini, kita akan membahas bagaimana mengkonfigurasi remote server database MySQL yang bisa dihubungkan pada aplikasi web anda. Kami akan menggunakan WordPress sebagai contoh sehingga kami memiliki sesuatu untuk dikerjakan, namun teknik ini banyak digunakan untuk aplikasi yang didukung MySQL.
Yang dibutuhkan :
Dua server Ubuntu 16.04 server, dengan pengguna non-root sudo-enabled, dan firewall UFW diaktifkan, seperti yang dijelaskan pada (Initial Server Setup with Ubuntu 16.04.)On one of the servers you’ll need the LEMP (Linux, Nginx, MySQL, PHP) stack installed. Our tutorial How To Install Linux, Nginx, MySQL, PHP (LEMP stack) in Ubuntu 16.04 will guide you through the process. You should skip Step 2, which is about installing MySQL. We’ll install MySQL in this tutorial instead.Di salah satu server Anda memerlukan tumpukan LEMP (Linux, Nginx, MySQL, PHP) yang terpasang. Tutorial (How To Install Linux, Nginx, MySQL, PHP (LEMP stack) in Ubuntu 16.04) akan memandu Anda melalui prosesnya. Anda harus melewati Langkah 2, yaitu tentang cara menginstal MySQL. Kami akan menginstal MySQL di tutorial ini.Optionally (but strongly recommended), you can secure your LEMP web server with SSL certificates. You’ll need a domain name, but the certificates are free. Our guide How To Secure Nginx with Let’s Encrypt on Ubuntu 16.04 will show you how.Opsional (tapi sangat disarankan), Anda dapat mengamankan server web LEMP Anda dengan sertifikat SSL. Anda memerlukan nama domain, namun sertifikatnya gratis. Panduan (How To Secure Nginx with Let’s Encrypt on Ubuntu 16.04) akan menunjukkan caranya.Step 1 — Instal MySQL pada Server DatabaseMenyimpan data di server terpisah adalah cara yang baik untuk memperluas kinerja dari konfigurasi satu mesin. Ini juga dapat menyediakan struktur dasar yang diperlukan untuk memuat keseimbangan dan memperluas infrastruktur kita bahkan lebih banyak lagi di lain waktu.
Untuk memulainya, kita akan menginstal MySQL di server kita tidak menginstal LEMP stack on. Masuk kedalam server, Lalu perbarui paket cache anda dan instal server MySQL:
$ sudo apt-get update $ sudo apt-get install mysql-serverAnda akan diminta untuk mengatur dan mengkonfirmasi password root untuk MySQL selama prosedur instalasi. Pilih kata sandi yang kuat dan catat, kita akan butuhkan nanti.
MySQL harus diinstal dan berjalan sekarang. Mari kita periksa menggunakan systemctl:
$ systemctl status mysqlOutput mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2017-05-23 14:54:04 UTC; 12s ago Main PID: 27179 (mysqld) CGroup: /system.slice/mysql.service └─27179 /usr/sbin/mysqld
Baris Active: active (running) berarti MySQL terinstal dan berjalan. Sekarang kita akan membuat instalasi sedikit lebih aman. MySQL dilengkapi dengan naskah yang menuntun Anda melalui penguncian sistem:
$ mysql_secure_installationIni akan menanyakan password root MySQL yang baru kita set. Ketik dan tekan ENTER. Sekarang kita akan menjawab serangkaian pertanyaan ya atau tidak. Mari kita melalui mereka:
Pertama, kami ditanya tentang plugin kata sandi yang valid, sebuah plugin yang secara otomatis dapat menerapkan aturan kekuatan kata kunci tertentu untuk pengguna MySQL Anda. Mengaktifkan ini adalah keputusan yang harus Anda buat berdasarkan kebutuhan keamanan individual Anda. Ketik y dan ENTER untuk mengaktifkannya, atau tekan ENTER untuk melewatinya. Jika diaktifkan, Anda juga akan diminta untuk memilih level dari 0-2 untuk mengetahui seberapa ketat validasi kata sandi. Pilih nomor dan tekan ENTER untuk melanjutkan.
Selanjutnya Anda akan ditanya apakah ingin mengganti password root. Karena kita baru saja membuat password saat kita menginstall MySQL, kita bisa dengan aman melewatkan ini. Tekan ENTER untuk melanjutkan tanpa memperbarui kata sandinya.
Sisa dari prompt bisa dijawab ya. Anda akan ditanya tentang menghapus pengguna MySQL anonim, tidak mengizinkan login root jarak jauh, menghapus database uji, dan memuat ulang tabel hak istimewa untuk memastikan perubahan sebelumnya dapat diterapkan dengan benar. Ini semua adalah ide bagus. Ketik y dan tekan ENTER untuk masing-masing.
Script akan keluar setelah semua prompt dijawab. Sekarang instalasi MySQL kami cukup aman. Pada langkah selanjutnya, kita akan mengkonfigurasi MySQL untuk memungkinkan akses dari koneksi jarak jauh.
Step 2 — Mengkonfigurasi MySQL untuk Dengarkan Remote ConnectionsSetelah database Anda berjalan dan berjalan, kita perlu mengubah beberapa nilai konfigurasi untuk memungkinkan koneksi dari komputer lain.
Buka file konfigurasi mysqld dengan hak istimewa root di editor Anda:
$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnfFile ini dibagi menjadi beberapa bagian yang dilambangkan dengan kata-kata dalam tanda kurung ([and]). Temukan bagian berlabel mysqld:
mysqld.cnf
. . .
[mysqld]
Dalam bagian ini Anda harus menemukan parameter yang disebut bind-address. Ini memberitahu perangkat lunak database yang alamat jaringannya untuk mendengarkan koneksi.
Saat ini, MySQL dikonfigurasi untuk hanya mencari koneksi lokal. Kita perlu mengubahnya untuk merujuk alamat IP eksternal yang bisa dijangkau server Anda.
Keuda F server Anda berada dalam datacenter dengan kemampuan jaringan pribadi, gunakan IP jaringan pribadi server Anda. Jika tidak, Anda bisa menggunakan alamat IP publik:
/etc/mysql/my.cnf
[mysqld]
. . .
bind-address = db_server_ip
Karena kita akan terhubung ke database melalui internet, kita memerlukan koneksi terenkripsi agar data kita tetap aman. Jika Anda tidak mengenkripsi koneksi MySQL Anda, siapa pun di jaringan bisa mengendus informasi sensitif antara server web dan database Anda. Tambahkan baris berikut setelah baris alamat-mengikat yang baru saja kami perbarui:
/etc/mysql/my.cnf
. . .
require_secure_transport = on
Save dan Close Jika asudah selesai.
Agar koneksi SSL berfungsi, kami perlu membuat beberapa tombol dan sertifikat. MySQL hadir dengan perintah yang secara otomatis mengatur semua yang kita butuhkan:
$ sudo mysql_ssl_rsa_setup --uid=mysqlIni akan membuat file yang diperlukan dan membuatnya mudah dibaca oleh server MySQL (–uid = mysql).
Untuk memaksa MySQL mengupdate konfigurasinya dan membaca informasi SSL yang baru, restart database:
$ sudo systemctl restart mysqlUntuk mengkonfirmasi bahwa server sekarang mendengarkan pada antarmuka eksternal, periksalah dengan netstat:
$ sudo netstat -plunt | grep mysqldOutput tcp 0 0 db_server_ip:3306 0.0.0.0:* LISTEN 27328/mysqld
Netstat mencetak statistik tentang sistem jaringan server kami. Output ini menunjukkan kepada kita bahwa sebuah proses yang disebut mysqld terpasang pada db_server_ip pada port 3306, port standar MySQL.
Sekarang buka port di firewall untuk mengizinkan lalu lintas melalui:
$ sudo ufw allow mysqlSelanjutnya kita akan mengatur pengguna dan database kita perlu mengakses server dari jarak jauh.
Step 3 — Menyiapkan Database WordPress dan Remote KredensialMeskipun MySQL sendiri sekarang mendengarkan pada alamat IP eksternal, saat ini tidak ada pengguna atau basis data dengan dukungan jarak jauh yang dikonfigurasi. Mari buat database untuk WordPress, dan pengguna yang bisa mengaksesnya.
Mulailah dengan menghubungkan ke MySQL menggunakan akun root MySQL:
$ mysql -u root -pAnda akan diminta untuk mendapatkan password root MySQL Anda dan kemudian Anda akan diberi prompt mysql baru.
Sekarang kita bisa membuat database yang akan digunakan WordPress. Kami hanya akan memanggil wordpress ini sehingga kami dapat dengan mudah mengidentifikasinya nanti:
mysql> CREATE DATABASE wordpress;
Catatan: Semua pernyataan SQL harus berakhir dalam titik koma (;). Jika Anda menekan ENTER pada perintah MySQL dan hanya melihat baris baru dengan prompt>>, Anda mungkin lupa titik koma. Ketikkan saja pada baris baru dan tekan ENTER lagi untuk melanjutkan.
Sekarang kita punya database, kita perlu membuat user kita. Satu sentuhan dalam menciptakan pengguna adalah bahwa kita perlu mendefinisikan dua profil yang berbeda berdasarkan dari mana pengguna menghubungkannya. Kami akan membuat pengguna lokal saja, dan pengguna jarak jauh terikat pada alamat IP server web kami.
Pertama, kami membuat userpressuser pengguna lokal kami dan membuat akun ini hanya cocok dengan upaya koneksi lokal dengan menggunakan localhost dalam deklarasi ini:
mysql> CREATE USER 'wordpressuser'@'localhost' IDENTIFIED BY 'password';Mari kita lanjutkan dan berikan akun ini akses penuh ke database kami:
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpressuser'@'localhost';Pengguna ini sekarang dapat melakukan operasi apapun pada database untuk WordPress, namun akun ini tidak dapat digunakan dari jarak jauh, karena hanya cocok dengan koneksi dari mesin lokal.
Sekarang buat akun pendamping yang akan cocok dengan koneksi secara eksklusif dari server web kami. Untuk ini, Anda memerlukan alamat IP server web Anda. Kami bisa memberi nama akun ini, tapi untuk pengalaman yang lebih konsisten, kami akan menggunakan nama pengguna yang sama persis seperti yang kami lakukan di atas, hanya dengan porsi host yang dimodifikasi.
Ingatlah bahwa Anda harus menggunakan alamat IP yang menggunakan jaringan yang sama dengan yang Anda konfigurasikan di file mysqld.cnf Anda. Ini berarti bahwa jika Anda menggunakan IP jaringan pribadi, Anda ingin membuat aturan di bawah ini untuk menggunakan IP pribadi server web Anda. Jika Anda mengonfigurasi MySQL untuk menggunakan internet publik, Anda harus mencocokkannya dengan alamat IP publik server web.
mysql> CREATE USER 'wordpressuser'@'web-server_ip' IDENTIFIED BY 'password';Sekarang setelah akun kami jauh, kami dapat memberikan hak istimewa yang sama seperti pengguna lokal:
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpressuser'@'web_server_ip';Flush hak istimewa untuk menuliskannya ke disk dan mulai menggunakannya:
mysql> FLUSH PRIVILEGES;Kemudian keluar dari prompt MySQL dengan mengetikkan:
mysql> exitSekarang kita telah membuat database baru dan pengguna dengan jarak jauh, mari kita uji database dan koneksi.
Step 4 — Menguji Remote dan Koneksi LokalSebelum melanjutkan, sebaiknya verifikasi bahwa Anda dapat terhubung ke database Anda dari mesin lokal dan dari server web Anda menggunakan akun wordpressuser.
Pertama, uji koneksi lokal dari mesin database Anda dengan mencoba masuk dengan akun baru kami:
mysql -u wordpressuser -pKetik kata sandi yang Anda siapkan untuk akun ini saat diminta.
Jika Anda diberi prompt MySQL, maka koneksi lokal pun berhasil. Anda bisa keluar lagi dengan mengetik:
mysql> exitMasuklah ke server web Anda untuk menguji koneksi jarak jauh.
Di server web Anda, Anda perlu menginstal beberapa alat klien untuk MySQL untuk mengakses basis data jauh. Perbarui cache paket lokal Anda, dan kemudian instal utilitas klien:
$ sudo apt-get update $ sudo apt-get install mysql-clientSekarang, kita bisa terhubung ke server database kita dengan menggunakan sintaks berikut:
$ mysql -u wordpressuser -h db_server_ip -pSekali lagi, Anda harus memastikan bahwa Anda menggunakan alamat IP yang benar untuk server database. Jika Anda mengonfigurasi MySQL untuk mendengarkan di jaringan pribadi, masukkan IP jaringan pribadi database Anda, jika tidak masukkan alamat IP publik server database Anda.
Anda akan dimintai kata sandi untuk akun wordpressuser Anda, dan jika semuanya berjalan dengan baik, Anda akan diberi prompt MySQL. Kami dapat memverifikasi bahwa koneksi menggunakan SSL dengan perintah berikut:
mysql> statusOutput -------------- mysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper Connection id: 52 Current database: Current user: wordpressuser@203.0.113.111 SSL: Cipher in use is DHE-RSA-AES256-SHA Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.7.18-0ubuntu0.16.04.1 (Ubuntu) Protocol version: 10 Connection: 203.0.113.111 via TCP/IP Server characterset: latin1 Db characterset: latin1 Client characterset: utf8 Conn. characterset: utf8 TCP port: 3306 Uptime: 3 hours 43 min 40 sec Threads: 1 Questions: 1858 Slow queries: 0 Opens: 276 Flush tables: 1 Open tables: 184 Queries per second avg: 0.138 --------------
Baris SSL: akan menunjukkan apakah sebuah cipher SSL sedang digunakan. Anda bisa maju dan keluar dari prompt sekarang, karena Anda telah memverifikasi bahwa Anda dapat terhubung dari jarak jauh:
mysql> exitUntuk cek tambahan, Anda dapat mencoba melakukan hal yang sama dari server ketiga untuk memastikan server lain ini tidak diberi akses. Anda telah memverifikasi akses lokal dan akses dari server web, namun Anda belum memverifikasi bahwa koneksi lain akan ditolak.
Silakan coba prosedur yang sama di server yang tidak Anda konfigurasikan akun pengguna tertentu. Anda mungkin harus menginstal utilitas klien seperti yang Anda lakukan di atas:
$ mysql -u wordpressuser -h db_server_ip -pIni seharusnya tidak berhasil diselesaikan. Ini harus membuang kembali kesalahan yang terlihat seperti:
Output ERROR 1130 (HY000): Host '203.0.113.12' is not allowed to connect to this MySQL serverInilah yang kita harapkan dan yang kita inginkan.
Kami telah berhasil menguji koneksi jarak jauh kami, dan sekarang dapat melanjutkan instalasi WordPress kami.
Step 5 — Instal WordPressUntuk mendemonstrasikan kemampuan server MySQL jarak jauh yang baru, kami akan menginstal dan mengkonfigurasi WordPress – platform blogging yang populer – di server web kami. Ini akan meminta kita untuk mendownload dan mengekstrak perangkat lunak, mengkonfigurasi informasi koneksi kita, dan kemudian menjalankan instalasi berbasis web WordPress.
Di server web Anda, download rilis terbaru WordPress ke direktori home Anda:
$ cd ~ $ curl -O https://wordpress.org/latest.tar.gzEkstrak file, yang akan membuat sebuah direktori bernama wordpress di direktori home anda:
$ tar xzvf latest.tar.gzWordPress menyertakan contoh file konfigurasi yang akan kita gunakan sebagai titik awal. Kami membuat salinan dari file ini, menghapus – sample dari nama file sehingga akan dimuat oleh WordPress:
$ cp ~/wordpress/wp-config-sample.php ~/wordpress/wp-config.phpWhen we open the file, our first order of business will be to adjust some secret keys to provide security to our installation. WordPress provides a secure generator for these values so that you do not have to try to come up with good values on your own. These are only used internally, so it won’t hurt usability to have complex, secure values here.
Untuk mendapatkan nilai aman dari generator kunci rahasia WordPress, ketik:
$ curl -s https://api.wordpress.org/secret-key/1.1/salt/Ini akan mencetak beberapa konfigurasi yang bisa kita copy dan paste ke file wp-config.php kita.
PERINGATAN! Penting agar Anda meminta nilai unik setiap saat. Jangan menyalin nilai yang ditunjukkan.
Output
define('AUTH_KEY', '1jl/vqfs<XhdXoAPz9 DO NOT COPY THESE VALUES c_j{iwqD^<+c9.k<J@4H'); define('SECURE_AUTH_KEY', 'E2N-h2]Dcvp+aS/p7X DO NOT COPY THESE VALUES {Ka(f;rv?Pxf})CgLi-3'); define('LOGGED_IN_KEY', 'W(50,{W^,OPB%PB<JF DO NOT COPY THESE VALUES 2;y&,2m%3]R6DUth[;88'); define('NONCE_KEY', 'll,4UC)7ua+8<!4VM+ DO NOT COPY THESE VALUES #`DXF+[$atzM7 o^-C7g'); define('AUTH_SALT', 'koMrurzOA+|L_lG}kf DO NOT COPY THESE VALUES 07VC*Lj*lD&?3w!BT#-'); define('SECURE_AUTH_SALT', 'p32*p,]z%LZ+pAu:VY DO NOT COPY THESE VALUES C-?y+K0DK_+F|0h{!_xY'); define('LOGGED_IN_SALT', 'i^/G2W7!-1H2OQ+t$3 DO NOT COPY THESE VALUES t6**bRVFSD[Hi])-qS`|'); define('NONCE_SALT', 'Q6]U:K?j4L%Z]}h^q7 DO NOT COPY THESE VALUES 1% ^qUswWgn+6&xqHN&%');Salin output yang Anda terima ke clipboard Anda, kemudian, buka file konfigurasi di editor teks Anda:
$ nano ~/wordpress/wp-config.phpTemukan bagian yang berisi nilai dummy untuk pengaturan tersebut. Ini akan terlihat seperti ini:
wp-config.php. . . define('AUTH_KEY', 'put your unique phrase here'); define('SECURE_AUTH_KEY', 'put your unique phrase here'); define('LOGGED_IN_KEY', 'put your unique phrase here'); define('NONCE_KEY', 'put your unique phrase here'); define('AUTH_SALT', 'put your unique phrase here'); define('SECURE_AUTH_SALT', 'put your unique phrase here'); define('LOGGED_IN_SALT', 'put your unique phrase here'); define('NONCE_SALT', 'put your unique phrase here'); . . .Hapus baris dan tempelkan pada nilai yang Anda salin dari baris perintah.
Selanjutnya, kita perlu memasukkan info koneksi untuk database jauh kita. Baris konfigurasi ini ada di bagian atas file, tepat di atas tempat kami menempelkan kunci kami. Ingatlah untuk menggunakan alamat IP yang sama dengan yang Anda gunakan dalam pengujian basis data jauh sebelumnya:
wp-config.php. . . /** The name of the database for WordPress */ define('DB_NAME', 'wordpress'); /** MySQL database username */ define('DB_USER', 'wordpressuser'); /** MySQL database password */ define('DB_PASSWORD', 'password'); /** MySQL hostname */ define('DB_HOST', 'db_server_ip'); . . .Dan akhirnya, dimanapun di file tersebut, tempelkan baris berikut yang memberi tahu WordPress untuk menggunakan koneksi SSL ke database MySQL kami:
wp-config.phpdefine('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);Simpan dan tutup file.
Next, we’ll need to copy the files and directories found in our ~/wordpress directory to Nginx’s document root. We use the -a flag to make sure our permissions are maintained:
$ sudo cp -a ~/wordpress/* /var/www/htmlSekarang semua file kita ada di tempat. Satu-satunya yang tersisa untuk dilakukan adalah memodifikasi kepemilikan file. Kita akan mengatur semua file di root dokumen untuk dimiliki oleh pengguna server web kita, www-data:
$ sudo chown -R www-data:www-data /var/www/htmlWordPress sekarang harus diinstal dan siap dijalankan melalui rutinitas setup berbasis web. Kita akan melakukannya di langkah selanjutnya.
Step 6 — Menyiapkan WordPress Melalui Interface WebsiteWordPress memiliki rutinitas setup berbasis web yang akan mengajukan beberapa pertanyaan dan menginstal tabel yang dibutuhkan di database kami. Mari kita mulai itu sekarang.
Arahkan ke nama domain (atau alamat IP publik) yang terkait dengan server web Anda:
http://example.comAnda akan melihat layar pilihan bahasa untuk installer WordPress. Pilih bahasa yang sesuai dan klik ke layar instalasi utama:
Setelah Anda mengirimkan informasi Anda, Anda perlu masuk ke antarmuka admin WordPress menggunakan akun yang baru Anda buat. Anda kemudian akan dibawa ke dasbor tempat Anda dapat menyesuaikan dan mengoperasikan situs Anda.
KesimpulanDalam tutorial ini, kami telah menyiapkan database MySQL untuk menerima koneksi yang dilindungi SSL dari instalasi WordPress jarak jauh. Perintah dan teknik yang kami gunakan berlaku untuk aplikasi web yang ditulis dalam bahasa pemrograman apa pun, namun detail pelaksanaan spesifiknya akan berbeda. Lihat dokumentasi aplikasi atau database bahasa Anda untuk informasi lebih lanjut.