مقدمه
همانطور که برنامه یا وب سایت شما رشد می کند، ممکن است به نقطه ای برسد که از تنظیمات سرور فعلی خود پیشی بگیرید. اگر سرور وب و پایگاه داده خود را روی یک دستگاه میزبانی می کنید، ممکن است ایده خوبی باشد که این دو عملکرد را از هم جدا کنید تا هر کدام بتوانند بر روی سخت افزار خود کار کنند و بار پاسخگویی به درخواست های بازدیدکنندگان شما را به اشتراک بگذارند.
در این راهنما، نحوه پیکربندی یک سرور پایگاه داده MySQL از راه دور که برنامه وب شما می تواند به آن متصل شود را بررسی خواهیم کرد. ما از وردپرس به عنوان مثال استفاده می کنیم تا بتوانیم با آن کار کنیم، اما این تکنیک به طور گسترده برای هر برنامه ای که توسط MySQL پشتیبانی می شود قابل استفاده است.
پیش نیازها
- دو سرور اوبونتو 18.04. همانطور که در آموزش Initial Server Setup with Ubuntu 18.04 توضیح داده شد، هر کدام باید یک کاربر غیر ریشه با امتیازات sudo و فایروال UFW فعال داشته باشند. یکی از این سرورها میزبان باطن MySQL شما خواهد بود و در سراسر این راهنما به آن به عنوان سرور پایگاه داده اشاره خواهیم کرد. دیگری از راه دور به سرور پایگاه داده شما متصل می شود و به عنوان وب سرور شما عمل می کند. به همین ترتیب، در طول این راهنما به آن به عنوان وب سرور اشاره خواهیم کرد.
- Nginx و PHP روی وب سرور شما نصب شده است. آموزش ما نحوه نصب لینوکس، Nginx، MySQL، PHP (پشته LEMP) در اوبونتو 18.04 شما را در این فرآیند راهنمایی می کند، اما توجه داشته باشید که باید مرحله 2 این آموزش را که بر نصب MySQL تمرکز دارد، نادیده بگیرید، زیرا MySQL را بر روی آن نصب خواهید کرد. سرور پایگاه داده شما
- MySQL روی سرور پایگاه داده شما نصب شده است. نحوه نصب MySQL در اوبونتو 18.04 را برای تنظیم آن دنبال کنید.
- به صورت اختیاری (اما به شدت توصیه می شود)، گواهی های TLS/SSL از Let’s Encrypt روی سرور وب شما نصب شده است. شما باید یک نام دامنه بخرید و سوابق DNS را برای سرور خود تنظیم کنید، اما خود گواهی ها رایگان هستند. راهنمای ما نحوه ایمن کردن Nginx با Let’s Encrypt در اوبونتو 18.04 به شما نشان می دهد که چگونه این گواهی ها را دریافت کنید.
مرحله 1 – پیکربندی MySQL برای گوش دادن به اتصالات از راه دور
پس از رسیدن به سقف عملکرد یک پیکربندی یک ماشین، ذخیره دادههای شخص در یک سرور جداگانه، راه خوبی برای گسترش دلپذیر است. همچنین ساختار اساسی لازم برای تعادل بار و گسترش زیرساخت شما را در زمان بعدی فراهم می کند. پس از نصب MySQL با دنبال کردن آموزش پیش نیاز، باید برخی از مقادیر پیکربندی را تغییر دهید تا امکان اتصال از رایانههای دیگر فراهم شود.
بیشتر تغییرات پیکربندی سرور MySQL را می توان در فایل mysqld.cnf انجام داد که به طور پیش فرض در فهرست /etc/mysql/mysql.conf.d/ ذخیره می شود. این فایل را روی سرور پایگاه داده خود با امتیازات ریشه در ویرایشگر دلخواه خود باز کنید. در اینجا از نانو استفاده خواهیم کرد:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
این فایل به بخش هایی تقسیم می شود که با برچسب هایی در کروشه های مربع ([ و ]) مشخص می شوند. بخش با عنوان mysqld را پیدا کنید:
. . .
[mysqld]
. . .
در این بخش به دنبال پارامتری به نام bind-address بگردید. این به نرم افزار پایگاه داده می گوید که در کدام آدرس شبکه برای اتصالات گوش دهد.
به طور پیش فرض، این روی 127.0.0.1 تنظیم شده است، به این معنی که MySQL به گونه ای پیکربندی شده است که فقط به دنبال اتصالات محلی باشد. شما باید این را تغییر دهید تا به یک آدرس IP خارجی که در آن می توان به سرور شما دسترسی داشت اشاره کرد.
اگر هر دو سرور شما در یک مرکز داده با قابلیت شبکه خصوصی هستند، از IP شبکه خصوصی سرور پایگاه داده خود استفاده کنید. در غیر این صورت، می توانید از آدرس IP عمومی آن استفاده کنید:
[mysqld]
. . .
bind-address = db_server_ip
از آنجایی که از طریق اینترنت به پایگاه داده خود متصل خواهید شد، توصیه می شود برای ایمن نگه داشتن داده های خود به اتصالات رمزگذاری شده نیاز داشته باشید. اگر اتصال MySQL خود را رمزگذاری نکنید، هر کسی در شبکه میتواند اطلاعات حساس را بین وب و سرورهای پایگاه داده شما شناسایی کند. برای رمزگذاری اتصالات MySQL، خط زیر را بعد از خط bind-address که بهروزرسانی کردهاید اضافه کنید:
[mysqld]
. . .
require_secure_transport = on
. . .
پس از اتمام کار فایل را ذخیره کرده و ببندید. اگر از نانو استفاده می کنید، این کار را با فشار دادن CTRL+X، Y و سپس ENTER انجام دهید.
برای اینکه اتصالات SSL کار کنند، باید چند کلید و گواهی ایجاد کنید. MySQL با دستوری همراه است که به طور خودکار اینها را تنظیم می کند. دستور زیر را اجرا کنید که فایل های لازم را ایجاد می کند. همچنین با تعیین UID کاربر mysql آنها را توسط سرور MySQL قابل خواندن می کند:
sudo mysql_ssl_rsa_setup --uid=mysql
برای وادار کردن MySQL به به روز رسانی پیکربندی و خواندن اطلاعات SSL جدید، پایگاه داده را مجددا راه اندازی کنید:
sudo systemctl restart mysql
برای تأیید اینکه سرور اکنون به رابط خارجی گوش می دهد، دستور netstat زیر را اجرا کنید:
sudo netstat -plunt | grep mysqld
Output
tcp 0 0 db_server_ip:3306 0.0.0.0:* LISTEN 27328/mysqld
netstat آمار مربوط به سیستم شبکه سرور شما را چاپ می کند. این خروجی به ما نشان می دهد که فرآیندی به نام mysqld به db_server_ip در پورت 3306، پورت استاندارد MySQL متصل شده است و تأیید می کند که سرور در حال گوش دادن به رابط مناسب است.
در مرحله بعد، آن پورت را روی فایروال باز کنید تا ترافیک از طریق:
sudo ufw allow mysql
اینها همه تغییرات پیکربندی هستند که باید در MySQL ایجاد کنید. در مرحله بعد، نحوه راه اندازی پایگاه داده و برخی از پروفایل های کاربر را بررسی خواهیم کرد که از یکی از آنها برای دسترسی از راه دور به سرور استفاده خواهید کرد.
مرحله 2 – راه اندازی یک پایگاه داده وردپرس و اعتبارنامه از راه دور
حتی اگر MySQL در حال حاضر به یک آدرس IP خارجی گوش می دهد، در حال حاضر هیچ کاربر یا پایگاه داده ای که از راه دور فعال شده باشد پیکربندی نشده است. بیایید یک پایگاه داده برای وردپرس ایجاد کنیم، و یک جفت کاربر که می توانند به آن دسترسی داشته باشند.
با اتصال به MySQL به عنوان کاربر ریشه MySQL شروع کنید:
sudo mysql
از اعلان MySQL، یک پایگاه داده ایجاد کنید که وردپرس از آن استفاده کند. دادن یک نام قابل تشخیص به این پایگاه داده ممکن است مفید باشد تا بتوانید بعداً به راحتی آن را شناسایی کنید. در اینجا نام آن را وردپرس می گذاریم:
اکنون که پایگاه داده خود را ایجاد کرده اید، در مرحله بعد باید یک جفت کاربر ایجاد کنید. ما یک کاربر فقط محلی و همچنین یک کاربر راه دور مرتبط با آدرس IP سرور وب ایجاد خواهیم کرد.
ابتدا، کاربر محلی خود، wpuser را ایجاد کنید و این حساب را با استفاده از لوکال هاست در اعلان، تنها با تلاش های اتصال محلی مطابقت دهید:
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'password';
سپس به این حساب دسترسی کامل به پایگاه داده وردپرس بدهید:
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
این کاربر اکنون می تواند هر عملیاتی را بر روی پایگاه داده برای وردپرس انجام دهد، اما این حساب نمی تواند از راه دور استفاده شود، زیرا فقط با اتصالات دستگاه محلی مطابقت دارد. با در نظر گرفتن این موضوع، یک حساب همراه ایجاد کنید که اتصالات منحصراً از سرور وب شما مطابقت داشته باشد. برای این کار به آدرس IP سرور وب خود نیاز دارید.
لطفاً توجه داشته باشید که باید از یک آدرس IP استفاده کنید که از همان شبکه ای استفاده می کند که در فایل mysqld.cnf پیکربندی کرده اید. این بدان معنی است که اگر یک IP شبکه خصوصی در فایل mysqld.cnf مشخص کرده اید، باید IP خصوصی وب سرور خود را در دو دستور زیر وارد کنید. اگر MySQL را برای استفاده از اینترنت عمومی پیکربندی کرده اید، باید آن را با آدرس IP عمومی وب سرور مطابقت دهید.
CREATE USER 'remotewpuser'@'web_server_ip' IDENTIFIED BY 'password';
پس از ایجاد حساب راه دور خود، همان امتیازات کاربر محلی خود را به آن بدهید:
GRANT ALL PRIVILEGES ON wordpress.* TO 'remotewpuser'@'web_server_ip';
در نهایت، امتیازات را پاک کنید تا MySQL بداند شروع به استفاده از آنها کند:
FLUSH PRIVILEGES;
سپس با تایپ کردن از دستور MySQL خارج شوید:
exit
اکنون که یک پایگاه داده جدید و یک کاربر فعال از راه دور راهاندازی کردهاید، میتوانید آزمایش کنید که آیا میتوانید از سرور وب خود به پایگاه داده متصل شوید یا خیر.
مرحله 3 – تست اتصالات از راه دور و محلی
قبل از ادامه، بهتر است بررسی کنید که می توانید هم از دستگاه محلی – سرور پایگاه داده خود – و هم از وب سرور خود به پایگاه داده خود متصل شوید.
ابتدا، اتصال محلی را از سرور پایگاه داده خود با تلاش برای ورود به حساب جدید خود آزمایش کنید:
mysql -u wpuser -p
وقتی از شما خواسته شد، رمز عبوری را که برای این حساب تنظیم کرده اید وارد کنید.
اگر به شما درخواست MySQL داده شود، اتصال محلی موفقیت آمیز بوده است. می توانید با تایپ کردن دوباره از خارج شوید:
exit
سپس برای آزمایش اتصالات راه دور وارد سرور وب خود شوید:
ssh sammy@web_server_ip
برای دسترسی به پایگاه داده راه دور، باید برخی از ابزارهای سرویس گیرنده MySQL را روی سرور وب خود نصب کنید. ابتدا، اگر اخیراً این کار را نکرده اید، کش بسته محلی خود را به روز کنید:
sudo apt update
سپس ابزارهای سرویس گیرنده MySQL را نصب کنید:
sudo apt install mysql-client
پس از این، با استفاده از دستور زیر به سرور پایگاه داده خود متصل شوید:
mysql -u remotewpuser -h db_server_ip -p
مجدداً، باید مطمئن شوید که از آدرس IP صحیح برای سرور پایگاه داده استفاده می کنید. اگر MySQL را برای گوش دادن در شبکه خصوصی پیکربندی کرده اید، IP شبکه خصوصی پایگاه داده خود را وارد کنید. در غیر این صورت، آدرس IP عمومی سرور پایگاه داده خود را وارد کنید.
رمز عبور حساب remotewpuser از شما خواسته می شود. پس از وارد کردن آن، و اگر همه چیز مطابق انتظار کار کند، اعلان MySQL را مشاهده خواهید کرد. با دستور زیر بررسی کنید که اتصال از SSL استفاده می کند:
status
اگر اتصال واقعاً از SSL استفاده می کند، خط SSL: این را نشان می دهد، همانطور که در اینجا نشان داده شده است:
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
--------------
پس از تأیید اینکه می توانید از راه دور متصل شوید، ادامه دهید و از دستور خارج شوید:
exit
با آن، شما دسترسی محلی و دسترسی از سرور وب را تأیید کرده اید، اما تأیید نکرده اید که سایر اتصالات رد می شوند. برای بررسی بیشتر، همین کار را از سرور سومی که حساب کاربری خاصی را برای آن پیکربندی نکردهاید انجام دهید تا مطمئن شوید که به سرور دیگر اجازه دسترسی داده نشده است.
توجه داشته باشید که قبل از اجرای دستور زیر برای تلاش برای اتصال، ممکن است مجبور شوید برنامه های سرویس گیرنده MySQL را همانطور که در بالا انجام دادید نصب کنید:
mysql -u wordpressuser -h db_server_ip -p
این نباید با موفقیت کامل شود، و باید خطای شبیه به این را برگرداند:
Output
ERROR 1130 (HY000): Host '203.0.113.12' is not allowed to connect to this MySQL server
این مورد انتظار است، زیرا شما یک کاربر MySQL ایجاد نکرده اید که مجاز به اتصال از این سرور باشد، و همچنین مورد نظر است، زیرا می خواهید مطمئن باشید که سرور پایگاه داده شما دسترسی کاربران غیرمجاز به سرور MySQL شما را ممنوع می کند.
پس از آزمایش موفقیت آمیز اتصال از راه دور خود، می توانید به نصب وردپرس روی وب سرور خود ادامه دهید.
مرحله 4 – نصب وردپرس
برای نشان دادن قابلیتهای سرور MySQL جدید شما با قابلیت کنترل از راه دور، مراحل نصب و پیکربندی WordPress – سیستم مدیریت محتوای محبوب – را در سرور وب شما انجام میدهیم. برای این کار باید نرم افزار را دانلود و استخراج کنید، اطلاعات اتصال خود را پیکربندی کنید و سپس از طریق نصب مبتنی بر وب وردپرس اجرا کنید.
در وب سرور خود، آخرین نسخه وردپرس را در فهرست اصلی خود دانلود کنید:
cd ~
curl -O https://wordpress.org/latest.tar.gz
فایل ها را استخراج کنید، که یک دایرکتوری به نام wordpress در فهرست اصلی شما ایجاد می کند:
tar xzvf latest.tar.gz
وردپرس شامل یک فایل پیکربندی نمونه است که ما از آن به عنوان نقطه شروع استفاده خواهیم کرد. یک کپی از این فایل تهیه کنید، نمونه – را از نام فایل حذف کنید تا توسط وردپرس بارگذاری شود:
cp ~/wordpress/wp-config-sample.php ~/wordpress/wp-config.php
هنگامی که فایل را باز می کنید، اولین کار شما تنظیم برخی از کلیدهای مخفی برای ایجاد امنیت بیشتر برای نصب شما خواهد بود. وردپرس یک مولد امن برای این مقادیر فراهم می کند تا مجبور نباشید به تنهایی به ارزش های خوب دست پیدا کنید. اینها فقط به صورت داخلی استفاده می شوند، بنابراین داشتن مقادیر پیچیده و امن در اینجا به قابلیت استفاده آسیبی نمی رساند.
برای گرفتن مقادیر ایمن از مولد کلید مخفی وردپرس، تایپ کنید:
curl -s https://api.wordpress.org/secret-key/1.1/salt/
با این کار تعدادی کلید در خروجی شما چاپ می شود. شما این موارد را به صورت لحظه ای به فایل wp-config.php خود اضافه خواهید کرد:
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');
خروجی دریافتی را در کلیپ بورد خود کپی کنید، سپس فایل پیکربندی را در ویرایشگر متن خود باز کنید:
nano ~/wordpress/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');
. . .
آن خطوط را حذف کنید و مقادیری را که از خط فرمان کپی کرده اید، قرار دهید.
در مرحله بعد، اطلاعات اتصال را برای پایگاه داده راه دور خود وارد کنید. این خطوط پیکربندی در بالای فایل قرار دارند، درست بالای جایی که کلیدهای خود را چسبانده اید. به یاد داشته باشید که از همان آدرس IP استفاده کنید که قبلاً در آزمایش پایگاه داده راه دور خود استفاده کرده بودید:
. . .
/** 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');
. . .
و در نهایت، در هر جایی از فایل، خط زیر را اضافه کنید که به وردپرس میگوید از اتصال SSL به پایگاه داده MySQL ما استفاده کند:
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
ذخیره کنید و فایل را ببندید.
سپس، فایلها و دایرکتوریهای موجود در فهرست ~/wordpress خود را در ریشه سند Nginx کپی کنید. توجه داشته باشید که این دستور شامل پرچم -a است تا اطمینان حاصل شود که تمام مجوزهای موجود منتقل می شوند:
sudo cp -a ~/wordpress/* /var/www/html
پس از این، تنها کاری که باید انجام دهید این است که مالکیت فایل را تغییر دهید. مالکیت همه فایلهای موجود در ریشه سند را به www-data، کاربر پیشفرض وب سرور اوبونتو تغییر دهید:
sudo chown -R www-data:www-data /var/www/html
با آن، وردپرس نصب شده است و شما آماده هستید تا از طریق روال راه اندازی مبتنی بر وب آن را اجرا کنید.
مرحله 5 – راه اندازی وردپرس از طریق رابط وب
وردپرس یک فرآیند راه اندازی مبتنی بر وب دارد. همانطور که آن را مرور می کنید، چند سوال می پرسد و تمام جداول مورد نیاز خود را در پایگاه داده شما نصب می کند. در اینجا، ما مراحل اولیه راه اندازی وردپرس را مرور می کنیم، که می توانید از آن به عنوان نقطه شروع برای ساخت وب سایت سفارشی خود که از یک پایگاه داده از راه دور استفاده می کند، استفاده کنید.
به نام دامنه (یا آدرس IP عمومی) مرتبط با وب سرور خود بروید:
http://example.com
یک صفحه انتخاب زبان برای نصب کننده وردپرس خواهید دید. زبان مناسب را انتخاب کنید و روی صفحه نصب اصلی کلیک کنید:
هنگامی که اطلاعات خود را ارسال کردید، باید با استفاده از حساب کاربری که ایجاد کرده اید وارد رابط مدیریت وردپرس شوید. سپس به داشبوردی هدایت خواهید شد که در آن می توانید سایت جدید وردپرس خود را سفارشی کنید.
نتیجه
با دنبال کردن این آموزش، شما یک پایگاه داده MySQL را برای پذیرش اتصالات محافظت شده با SSL از نصب وردپرس راه دور راه اندازی کرده اید. دستورات و تکنیک های استفاده شده در این راهنما برای هر برنامه وب که به هر زبان برنامه نویسی نوشته شده است قابل اجرا است، اما جزئیات پیاده سازی خاص متفاوت خواهد بود. برای اطلاعات بیشتر به مستندات پایگاه داده برنامه یا زبان خود مراجعه کنید.