Ubuntu 18.04'te MySQL ile site performansını optimize etmek için uzak bir veritabanı nasıl kurulur?

0 Hisse senetleri
0
0
0
0

giriiş

Uygulamanız veya web siteniz büyüdükçe, mevcut sunucu kurulumunuzun yetersiz kalacağı bir noktaya gelebilir. Web sunucunuzu ve veritabanınızı aynı makinede barındırıyorsanız, her birinin kendi donanımında çalışabilmesi ve ziyaretçilerinizin isteklerine yanıt verme yükünü paylaşabilmesi için iki işlevi ayırmak iyi bir fikir olabilir.

Bu kılavuzda, web uygulamanızın bağlanabileceği uzak bir MySQL veritabanı sunucusunun nasıl yapılandırılacağını inceleyeceğiz. Örnek olarak WordPress'i kullanacağız, böylece üzerinde çalışabiliriz, ancak bu teknik MySQL tarafından desteklenen tüm uygulamalar için genel olarak geçerlidir.

Ön koşullar
  • İki Ubuntu 18.04 sunucusu. Ubuntu 18.04 ile İlk Sunucu Kurulumu eğitiminde açıklandığı gibi, her birinde sudo ayrıcalıklarına sahip ve UFW güvenlik duvarı etkin, kök olmayan bir kullanıcı bulunmalıdır. Bu sunuculardan biri MySQL arka ucunuzu barındıracak ve bu kılavuz boyunca buna veritabanı sunucusu diyeceğiz. Diğeri ise veritabanı sunucunuza uzaktan bağlanacak ve web sunucunuz olarak işlev görecektir. Benzer şekilde, bu kılavuz boyunca buna web sunucusu diyeceğiz.
  • Web sunucunuza Nginx ve PHP yüklü. Ubuntu 18.04'e Linux, Nginx, MySQL ve PHP (LEMP yığını) kurulumuna dair eğitimimiz size süreç boyunca rehberlik edecektir. Ancak, veritabanı sunucunuza MySQL kuracağınız için MySQL kurulumuna odaklanan bu eğitimin 2. Adımını atlamanız gerektiğini unutmayın.
  • MySQL veritabanı sunucunuza yüklenmiştir. Kurulumunu yapmak için Ubuntu 18.04'e MySQL kurulumuyla ilgili kılavuzumuzu izleyin.
  • İsteğe bağlı olarak (ama şiddetle tavsiye edilir), Let's Encrypt'ın TLS/SSL sertifikaları web sunucunuza yüklenir. Sunucunuz için bir alan adı satın almanız ve DNS kayıtları oluşturmanız gerekir, ancak sertifikaların kendisi ücretsizdir. "Ubuntu 18.04'te Let's Encrypt ile Nginx Güvenliğini Nasıl Sağlarsınız?" başlıklı kılavuzumuz, bu sertifikaları nasıl edineceğinizi gösterir.

Adım 1 – MySQL'i uzak bağlantıları dinleyecek şekilde yapılandırın

Tek makine yapılandırmasının performans sınırına ulaştığınızda, verilerinizi ayrı bir sunucuda depolamak, sorunsuz bir şekilde ölçeklendirmenin iyi bir yoludur. Ayrıca, altyapınızı daha sonra yük dengelemek ve ölçeklendirmek için gereken temel yapıyı da sağlar. Ön koşul eğitimini izleyerek MySQL'i yükledikten sonra, diğer bilgisayarlardan bağlantılara izin vermek için bazı yapılandırma değerlerini değiştirmeniz gerekecektir.

MySQL sunucusu yapılandırma değişikliklerinin çoğu, varsayılan olarak /etc/mysql/mysql.conf.d/ dizininde bulunan mysqld.cnf dosyasında yapılabilir. Bu dosyayı veritabanı sunucunuzda, favori düzenleyicinizde root yetkileriyle açın. Burada nano kullanacağız:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Bu dosya, köşeli parantez ([ ve ]) içindeki etiketlerle işaretlenmiş bölümlere ayrılmıştır. mysqld başlıklı bölümü bulun:

. . .
[mysqld]
. . .

Bu bölümde, bind-address adlı bir parametre arayın. Bu parametre, veritabanı yazılımına bağlantılar için hangi ağ adresini dinleyeceğini söyler.

Varsayılan olarak bu değer 127.0.0.1 olarak ayarlanmıştır; bu da MySQL'in yalnızca yerel bağlantıları arayacak şekilde yapılandırıldığı anlamına gelir. Sunucunuza erişebileceğiniz harici bir IP adresini işaret edecek şekilde bunu değiştirmeniz gerekecektir.

Her iki sunucunuz da özel ağ özelliklerine sahip bir veri merkezinde bulunuyorsa, veritabanı sunucunuzun özel ağ IP adresini kullanın. Aksi takdirde, genel IP adresini kullanabilirsiniz:

[mysqld]
. . .
bind-address = db_server_ip

Veritabanınıza internet üzerinden bağlanacağınız için, verilerinizin güvenliğini sağlamak için şifreli bağlantılar kullanmanız önerilir. MySQL bağlantınızı şifrelemezseniz, ağdaki herhangi biri web ve veritabanı sunucularınız arasındaki hassas bilgileri ele geçirebilir. MySQL bağlantılarını şifrelemek için, güncellediğiniz bind-address satırından sonra aşağıdaki satırı ekleyin:

[mysqld]
. . .
require_secure_transport = on
. . .

İşiniz bittiğinde dosyayı kaydedip kapatın. Nano kullanıyorsanız, bunu CTRL+X, Y ve ardından ENTER tuşlarına basarak yapabilirsiniz.

SSL bağlantılarının çalışması için bazı anahtarlar ve sertifikalar oluşturmanız gerekir. MySQL, bunları otomatik olarak ayarlayan bir komutla birlikte gelir. Gerekli dosyaları oluşturan aşağıdaki komutu çalıştırın. Ayrıca, MySQL kullanıcı UID'sini belirterek bunları MySQL sunucusu tarafından okunabilir hale getirin:

sudo mysql_ssl_rsa_setup --uid=mysql

MySQL'in yapılandırmayı güncellemesini ve yeni SSL bilgilerini okumasını zorlamak için veritabanını yeniden başlatın:

sudo systemctl restart mysql

Sunucunun artık harici arayüzü dinlediğini doğrulamak için aşağıdaki netstat komutunu çalıştırın:

sudo netstat -plunt | grep mysqld
Output
tcp 0 0 db_server_ip:3306 0.0.0.0:* LISTEN 27328/mysqld

netstat, sunucunuzun ağ sistemi hakkında istatistikler yazdırır. Bu çıktı, mysqld adlı bir işlemin db_server_ip'ye standart MySQL portu olan 3306 numaralı porttan bağlı olduğunu ve sunucunun uygun arayüzü dinlediğini doğrular.

Sonra, güvenlik duvarında bu portu açarak trafiğe izin verin:

sudo ufw allow mysql

MySQL'de yapmanız gereken tüm yapılandırma değişiklikleri bunlar. Şimdi, veritabanını ve bazı kullanıcı profillerini nasıl kuracağınıza bakacağız; bunlardan birini sunucuya uzaktan erişmek için kullanacaksınız.

Adım 2 – WordPress veritabanını ve uzaktan kimlik bilgilerini ayarlama

MySQL şu anda harici bir IP adresini dinliyor olsa da, şu anda uzaktan etkinleştirilmiş kullanıcı veya veritabanı yapılandırılmamış. WordPress için bir veritabanı ve ona erişebilecek birkaç kullanıcı oluşturalım.

MySQL'e MySQL kök kullanıcısı olarak bağlanarak başlayın:

sudo mysql

MySQL komut isteminden, WordPress'in kullanacağı bir veritabanı oluşturun. Bu veritabanına, daha sonra kolayca tanıyabilmeniz için tanınabilir bir ad vermek faydalı olabilir. Burada WordPress adını vereceğiz:

CREATE DATABASE wordpress;

Veritabanınızı oluşturduğunuza göre, bir sonraki adım bir kullanıcı çifti oluşturmaktır. Yalnızca yerel bir kullanıcı ve web sunucusunun IP adresiyle ilişkili bir uzak kullanıcı oluşturacağız.

Öncelikle yerel kullanıcınızı, wpuser'ı oluşturun ve bu hesabı yalnızca yerel bağlantı girişimleriyle eşleştirin; bunu bildirimde localhost kullanarak yapın:

CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'password';

Daha sonra bu hesaba WordPress veritabanına tam erişim izni verin:

GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';

Bu kullanıcı artık WordPress veritabanında herhangi bir işlem gerçekleştirebilir, ancak bu hesap yalnızca yerel bilgisayardan gelen bağlantıları eşleştirdiği için uzaktan kullanılamaz. Bunu göz önünde bulundurarak, yalnızca web sunucunuzdan gelen bağlantıları eşleştiren bir yardımcı hesap oluşturun. Bunun için web sunucunuzun IP adresine ihtiyacınız olacak.

Lütfen mysqld.cnf dosyasında yapılandırdığınız ağ ile aynı ağı kullanan bir IP adresi kullanmanız gerektiğini unutmayın. Bu, mysqld.cnf dosyasında özel bir ağ IP'si belirttiyseniz, aşağıdaki iki komutta web sunucunuzun özel IP adresini girmeniz gerektiği anlamına gelir. MySQL'i genel interneti kullanacak şekilde yapılandırdıysanız, web sunucusunun genel IP adresiyle eşleştirmeniz gerekir.

CREATE USER 'remotewpuser'@'web_server_ip' IDENTIFIED BY 'password';

Uzak hesabınızı oluşturduktan sonra, ona yerel kullanıcınızla aynı ayrıcalıkları verin:

GRANT ALL PRIVILEGES ON wordpress.* TO 'remotewpuser'@'web_server_ip';

Son olarak, MySQL'in bunları kullanmaya başlamasını sağlamak için ayrıcalıkları temizleyin:

FLUSH PRIVILEGES;

Daha sonra MySQL komutundan çıkmak için şunu yazın:

exit

Artık yeni bir veritabanınız ve etkin bir uzak kullanıcı kurulumunuz olduğuna göre, web sunucunuzdan veritabanına bağlanıp bağlanamadığınızı test edebilirsiniz.

Adım 3 – Uzak ve yerel bağlantıları test edin

Devam etmeden önce, hem yerel makinenizden (veritabanı sunucunuz) hem de web sunucunuzdan veritabanınıza bağlanabildiğinizi kontrol etmeniz iyi bir fikirdir.

Öncelikle yeni hesabınıza giriş yapmayı deneyerek veritabanı sunucunuzdan yerel bağlantıyı test edin:

mysql -u wpuser -p

İstendiğinde bu hesap için belirlediğiniz parolayı girin.

MySQL istenirse, yerel bağlantı başarılı olmuştur. Şunu yazarak tekrar çıkabilirsiniz:

exit

Daha sonra uzak bağlantıları test etmek için web sunucunuza giriş yapın:

ssh sammy@web_server_ip

Uzak veritabanına erişmek için web sunucunuza bazı MySQL istemci araçları yüklemeniz gerekir. Öncelikle, yakın zamanda yapmadıysanız yerel paket önbelleğinizi güncelleyin:

sudo apt update

Daha sonra MySQL istemci araçlarını yükleyin:

sudo apt install mysql-client

Daha sonra aşağıdaki komutu kullanarak veritabanı sunucunuza bağlanın:

mysql -u remotewpuser -h db_server_ip -p

Tekrar ediyorum, veritabanı sunucunuz için doğru IP adresini kullandığınızdan emin olmalısınız. MySQL'i özel bir ağda dinleyecek şekilde yapılandırdıysanız, veritabanınızın özel ağ IP adresini girin. Aksi takdirde, veritabanı sunucunuzun genel IP adresini girin.

Remotewpuser hesabınızın şifresi istenecektir. Şifreyi girdikten sonra ve her şey yolunda giderse, MySQL komut istemini göreceksiniz. Bağlantının SSL kullandığını aşağıdaki komutla doğrulayın:

status

Bağlantı gerçekten SSL kullanıyorsa, SSL: satırı bunu burada gösterildiği gibi gösterecektir:

Output
--------------
mysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper
Connection id: 52
Current database:
Current user: [email protected]
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
--------------

Uzaktan bağlanabildiğinizi onayladıktan sonra komuttan çıkın:

exit

Böylece yerel erişimi ve web sunucusundan erişimi doğrulamış olursunuz, ancak diğer bağlantıların reddedildiğini doğrulamamış olursunuz. Daha fazla doğrulama yapmak için, belirli bir kullanıcı hesabı yapılandırmadığınız üçüncü bir sunucudan da aynı işlemi yaparak diğer sunucuya erişim izni verilmediğinden emin olun.

Aşağıdaki komutu çalıştırarak bağlanmayı denemeden önce, yukarıda yaptığınız gibi MySQL istemci uygulamalarını yüklemeniz gerekebileceğini unutmayın:

mysql -u wordpressuser -h db_server_ip -p

Bu işlem başarıyla tamamlanmamalı ve buna benzer bir hata döndürülmelidir:

Output
ERROR 1130 (HY000): Host '203.0.113.12' is not allowed to connect to this MySQL server

Bu beklenen bir durumdur, çünkü bu sunucudan bağlanmasına izin verilen bir MySQL kullanıcısı oluşturmadınız ve ayrıca veritabanı sunucunuzun yetkisiz kullanıcıların MySQL sunucunuza erişmesini engellediğinden emin olmak istediğiniz için de bu istenir.

Uzaktan bağlantınızı başarıyla test ettikten sonra WordPress'i web sunucunuza kurmaya başlayabilirsiniz.

Adım 4 – WordPress'i yükleyin

Yeni MySQL sunucunuzun uzaktan kontrolle sunduğu yetenekleri göstermek için, popüler içerik yönetim sistemi WordPress'i web sunucunuza yükleme ve yapılandırma adımlarını adım adım anlatacağız. Bunu yapmak için yazılımı indirip çıkarmanız, bağlantı bilgilerinizi yapılandırmanız ve ardından WordPress web tabanlı yükleyici aracılığıyla çalıştırmanız gerekecek.

Web sunucunuzda, WordPress'in en son sürümünü kök dizininize indirin:

cd ~
curl -O https://wordpress.org/latest.tar.gz

Dosyaları çıkarın, kök dizininizde wordpress adında bir dizin oluşacaktır:

tar xzvf latest.tar.gz

WordPress, başlangıç noktası olarak kullanacağımız örnek bir yapılandırma dosyası içerir. Bu dosyanın bir kopyasını oluşturun ve dosya adından örnek - ifadesini kaldırarak WordPress tarafından yüklenmesini sağlayın:

cp ~/wordpress/wp-config-sample.php ~/wordpress/wp-config.php

Dosyayı açtıktan sonra yapmanız gereken ilk şey, kurulumunuzu daha güvenli hale getirmek için bazı gizli anahtarlar belirlemektir. WordPress, bu değerler için güvenli bir oluşturucu sağlar, böylece kendiniz doğru değerleri bulmak zorunda kalmazsınız. Bunlar yalnızca dahili olarak kullanılır, bu nedenle karmaşık ve güvenli değerlerin olması kullanılabilirliği etkilemez.

WordPress gizli anahtar üretecinden güvenli değerler almak için şunu yazın:

curl -s https://api.wordpress.org/secret-key/1.1/salt/

Bu, çıktınızda bir dizi anahtar yazdıracaktır. Bunları anında wp-config.php dosyanıza ekleyeceksiniz:

Output
define('AUTH_KEY', 'L4|2Yh(giOtMLHg3#] DO NOT COPY THESE VALUES %G00o|te^5YG@)');
define('SECURE_AUTH_KEY', 'DCs-k+MwB90/-E(=!/ DO NOT COPY THESE VALUES +WBzDq:7U[#Wn9');
define('LOGGED_IN_KEY', '*0kP!|VS.K=;#fPMlO DO NOT COPY THESE VALUES +&[%8xF*,18c @');
define('NONCE_KEY', 'fmFPF?UJi&(j-{8=$- DO NOT COPY THESE VALUES CCZ?Q+_~1ZU~;G');
define('AUTH_SALT', '@qA7f}2utTEFNdnbEa DO NOT COPY THESE VALUES t}Vw+8=K%20s=a');
define('SECURE_AUTH_SALT', '%BW6s+d:7K?-`C%zw4 DO NOT COPY THESE VALUES 70U}PO1ejW+7|8');
define('LOGGED_IN_SALT', '-l>F:-dbcWof%4kKmj DO NOT COPY THESE VALUES 8Ypslin3~d|wLD');
define('NONCE_SALT', '4J(<`4&&F (WiK9K#] DO NOT COPY THESE VALUES ^ZikS`es#Fo:V6');

Alınan çıktıyı panonuza kopyalayın, ardından yapılandırma dosyasını metin düzenleyicinizde açın:

nano ~/wordpress/wp-config.php

Bu ayarlar için sahte değerlerin bulunduğu bölümü bulun. Aşağıdaki gibi görünecektir:

. . .
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');
. . .

Bu satırları silin ve komut satırından kopyaladığınız değerleri yapıştırın.

Ardından, uzak veritabanınızın bağlantı bilgilerini girin. Bu yapılandırma satırları dosyanın en üstünde, anahtarlarınızı yapıştırdığınız yerin hemen üzerindedir. Uzak veritabanı testinizde daha önce kullandığınız IP adresini kullanmayı unutmayın:

. . .
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');
/** MySQL database username */
define('DB_USER', 'remotewpuser');
/** MySQL database password */
define('DB_PASSWORD', 'password');
/** MySQL hostname */
define('DB_HOST', 'db_server_ip');
. . .

Ve son olarak, dosyanın herhangi bir yerine, WordPress'e MySQL veritabanımıza SSL bağlantısı kullanmasını söyleyen şu satırı ekleyin:

define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);

Dosyayı kaydedip kapatın.

Ardından, ~/wordpress dizininizdeki dosyaları ve dizinleri Nginx belge kök dizinine kopyalayın. Bu komutun, mevcut tüm izinlerin aktarılmasını sağlamak için -a işaretini içerdiğini unutmayın:

sudo cp -a ~/wordpress/* /var/www/html

Bundan sonra tek yapmanız gereken dosya sahipliğini değiştirmek. Belge kökündeki tüm dosyaların sahipliğini, varsayılan Ubuntu web sunucusu kullanıcısı olan www-data olarak değiştirin:

sudo chown -R www-data:www-data /var/www/html

Böylece WordPress kurulmuş olur ve web tabanlı kurulum prosedürünü çalıştırmaya hazır hale gelirsiniz.

Adım 5 – WordPress'i Web Arayüzü Üzerinden Kurma

WordPress'in web tabanlı bir kurulum süreci vardır. Kurulum sırasında size birkaç soru sorar ve veritabanınıza ihtiyaç duyduğu tüm tabloları yükler. Burada, uzak bir veritabanı kullanarak kendi özel web sitenizi oluşturmak için bir başlangıç noktası olarak kullanabileceğiniz WordPress kurulumunun temel adımlarını size anlatacağız.

Web sunucunuzla ilişkili alan adına (veya genel IP adresine) gidin:

http://example.com

WordPress yükleyicisi için bir dil seçim sayfası göreceksiniz. Uygun dili seçin ve ana kurulum sayfasına tıklayın:

Bilgilerinizi gönderdikten sonra, oluşturduğunuz hesapla WordPress yönetici arayüzüne giriş yapmanız gerekecektir. Ardından, yeni WordPress sitenizi özelleştirebileceğiniz bir kontrol paneline yönlendirileceksiniz.

Sonuç

Bu eğitimi izleyerek, uzak bir WordPress kurulumundan SSL güvenli bağlantıları kabul edecek bir MySQL veritabanı kurmuş oldunuz. Bu kılavuzda kullanılan komutlar ve teknikler, herhangi bir programlama dilinde yazılmış tüm web uygulamaları için geçerlidir, ancak belirli uygulama ayrıntıları değişiklik gösterebilir. Daha fazla bilgi için uygulamanızın veya dilinizin veritabanı belgelerine bakın.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Ayrıca Şunları da Beğenebilirsiniz