vps

vps

راه اندازي سرور اوليه با اوبونتو 20.04

۶۷ بازديد

SSH يا همان پوسته ايمن، پروتكل رمزگذاري شده است كه براي اداره و برقراري ارتباط با سرور مجازي ها استفاده مي شود. هنگام كار با سرور مجازي Ubuntu ، احتمال دارد بيشتر وقت خود را در يك بخش ترمينال متصل به سرور مجازي خود از طريق SSH بگذرانيد.
در اين راهنما ، ما روي تنظيم كليدهاي SSH براي نصب Ubuntu 20.04 تمركز خواهيم كرد. كليدهاي SSH روشي آسان و مطمئن براي ورود به سرور مجازي شما فراهم كرده و براي همه كاربران توصيه مي شود.
مرحله 1 – ايجاد جفت كليد
اولين قدم ايجاد يك جفت كليد در دستگاه كلاينت (معمولاً رايانه شما) ميباشد:
$ ssh-keygen

به طور پيش فرض نسخه هاي اخير ssh-keygen يك جفت كليد RSA ، 3072 بيتي ايجاد مي كنند ، كه براي بيشتر موارد استفاده به اندازه كافي ايمن است (ميتوانيد به صورت اختياري از پرچم -b 4096 عبور كنيد تا يك كليد بزرگتر 4096 بيتي ايجاد نماييد).
پس از وارد كردن دستور ، بايد خروجي زير را مشاهده كنيد:
Output
Generating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):

Enter را فشار دهيد تا جفت كليد را در زيرديركتوري .ssh / در ديركتوري هوم خود ذخيره كنيد ، يا يك مسير جايگزين را مشخص كنيد.
اگر قبلاً يك جفت كليد SSH ايجاد كرده ايد ، ممكن است اعلان زير را مشاهده كنيد:
Output
/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?

اگر تصميم به بازنويسي كليد در ديسك داريد ، ديگر نمي توانيد با استفاده از كليد قبلي ، تأييد اعتبار كنيد. در انتخاب بله بسيار مراقب باشيد ، زيرا يك روند مخرب است كه قابل برگشت نخواهد بود.
سپس بايد اعلان زير را مشاهده كنيد:
Output
Enter passphrase (empty for no passphrase):

در اينجا ميتوانيد به صورت اختياري يك عبارت عبور مطمئن را وارد كنيد ، كه بسيار توصيه مي شود. عبارات عبور براي جلوگيري از ورود كاربران غيرمجاز ، يك لايه امنيتي ديگر اضافه مي كند. براي كسب اطلاعات بيشتر در مورد امنيت ، به آموزش ما در مورد چگونگي پيكربندي احراز هويت مبتني بر كليد SSH در سرور مجازي لينوكس مراجعه كنيد.
سپس بايد خروجي مشابه زير را مشاهده كنيد:
Output
Your identification has been saved in /your_home/.ssh/id_rsa
Your public key has been saved in /your_home/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:/hk7MJ5n5aiqdfTVUZr+2Qt+qCiS7BIm5Iv0dxrc3ks user@host
The key’s randomart image is:
+—[RSA 3072]—-+
| .|
| + |
| + |
| . o . |
|o S . o |
| + o. .oo. .. .o|
|o = oooooEo+ …o|
|.. o *o+=.*+o….|
| =+=ooB=o…. |
+—-[SHA256]—–+

اكنون يك كليد عمومي و خصوصي داريد كه مي توانيد از آن براي تأييد اعتبار استفاده كنيد. مرحله بعدي قرار دادن كليد عمومي روي سرور مجازي خود ميباشد تا بتوانيد براي ورود به سيستم از تأييد اعتبار مبتني بر SSH استفاده كنيد.
مرحله 2 – كپي كردن كليد عمومي روي سرور مجازي Ubuntu
سريع ترين راه براي كپي كردن كليد عمومي خود در هاست Ubuntu ، استفاده از ابزاري به نام ssh-copy-id است. به دليل سادگي ، اين روش در صورت وجود بسيار توصيه مي شود. اگر شناسه ssh-copy-id را در دستگاه كلاينت خود نداريد ، ميتوانيد از يكي از دو روش جايگزين ارائه شده در اين بخش استفاده كنيد (كپي كردن از طريق SSH مبتني بر رمز عبور ، يا كپي كردن كليد به صورت دستي).
كپي كردن كليد عمومي با استفاده از ssh-copy-id
ابزار ssh-copy-id بصورت پيش فرض در بسياري از سيستم عامل ها گنجانده شده است ، بنابراين احتمالا آن را در سيستم محلي خود در دسترس داشته باشيد. براي كار با اين روش ، بايد از قبل دسترسي SSH به سرور مجازي مبتني بر رمزعبور را داشته باشيد.
براي استفاده از اين ابزار ، هاست از راه دور را كه مي خواهيد به آن متصل شويد و حساب كاربري كه دسترسي SSH مبتني بر رمز عبور به آن داريد را تعيين مي كنيد. اين حسابي است كه كليد عمومي SSH شما كپي مي شود.
تركيب به اين صورت است:
$ ssh-copy-id username@remote_host

ممكن است پيام زير را مشاهده كنيد:
Output
The authenticity of host ‘203.0.113.1 (203.0.113.1)’ can’t be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

اين بدان معني است كه رايانه محلي شما هاست از راه دور را تشخيص نمي دهد. اگر اولين بار است كه به هاست جديد وصل مي شويد. “yes” را تايپ كنيد و ENTER را براي ادامه فشار دهيد.
در مرحله بعد ، ابزار، حساب محلي شما را براي كليد id_rsa.pub كه قبلاً ايجاد كرديم ، اسكن مي كند. وقتي كليد را پيدا كرد ، رمز ورود به حساب كاربري از راه دور را از شما ميخواهد:
Output
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed — if you are prompted now it is to install the new keys
username@203.0.113.1’s password:

گذرواژه را وارد كنيد (تايپ شما براي اهداف امنيتي نمايش داده نمي شود) و ENTER را فشار دهيد. اين ابزار با استفاده از گذرواژه اي كه ارائه داده ايد ، به هاست از راه دور متصل مي شود. سپس محتويات كليد ~ / .ssh / id_rsa.pub شما را در فايلي در ديركتوري ~/.ssh هوم حساب كاربري از راه دور به نام authorized_keys كپي مي كند.
بايد خروجي زير را مشاهده كنيد:
Output
Number of key(s) added: 1

Now try logging into the machine, with: “ssh ‘username@203.0.113.1′”
and check to make sure that only the key(s) you wanted were added.

در اين مرحله ، كليد id_rsa.pub شما در حساب راه دور بارگذاري شده است. مي توانيد به مرحله 3 برويد.
كپي كردن كليد عمومي با استفاده از SSH
اگر ssh-copy-id را در دسترس نداريد ، اما دسترسي SSH مبتني بر رمز عبور به يك حساب كاربري روي سرور مجازي خود داريد ، مي توانيد كليدهاي خود را با استفاده از يك روش معمولي SSH بارگذاري كنيد.
ما مي توانيم اين كار را با استفاده از دستور cat انجام دهيم تا محتواي كليد عمومي SSH را در رايانه محلي خود بخوانيم و از طريق اتصال SSH به سرور مجازي از راه دور اتصال برقرار كنيم.
از طرف ديگر ، مي توانيم اطمينان حاصل كنيم كه ديركتوري ~ / .ssh وجود دارد و داراي مجوزهاي صحيح تحت اكانتي است كه ما از آن استفاده مي كنيم.
سپس مي توانيم محتوياتي را كه به آن پيوند زده ايم را درون يك فايل به نام authorized_keys در اين ديركتوري وارد كنيم. ما از نماد >> تغيير مسير براي افزودن محتوا به جاي نوشتن آن استفاده خواهيم كرد. اين به ما امكان مي دهد بدون از بين بردن كليدهاي قبلي اضافه شده ، كليدهايي را اضافه كنيم.
فرمان كامل مانند اين است:
ممكن است پيام زير را مشاهده كنيد:
$ cat ~/.ssh/id_rsa.pub | ssh username@remote_host “mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys”

اين بدان معني است كه رايانه محلي شما هاست از راه دور را تشخيص نمي دهد. اگر اولين بار است كه به هاست جديد وصل مي شويد. yes را تايپ كنيد و ENTER را براي ادامه فشار دهيد.
پس از آن ، از شما خواسته مي شود رمزعبور حساب كاربري از راه دور را وارد كنيد:
Output
username@203.0.113.1’s password:

پس از وارد كردن گذرواژه ، محتواي كليد id_rsa.pub شما در انتهاي فايل authorized_keys حساب كاربري از راه دور كپي مي شود. اگر موفقيت آميز بود ، به مرحله 3 برويد.
كپي كردن كليد عمومي به صورت دستي
اگر دسترسي SSH مبتني بر رمز عبور به سرور مجازي خود را نداريد ، بايد مراحل فوق را به صورت دستي انجام دهيد.
ما به طور دستي محتواي فايل id_rsa.pub خود را به فايل ~/.ssh/authorized_keys روي دستگاه از راه دور شما اضافه خواهيم كرد.
براي نمايش محتواي كليد id_rsa.pub ، اين دستور را در رايانه محلي خود تايپ كنيد:
$ cat ~/.ssh/id_rsa.pub

محتواي كليد را مشاهده خواهيد كرد ، كه بايد چيزي شبيه به اين باشد:
Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test

با استفاده از روش ديگري كه در دسترس داريد ، به هاست راه دور خود دسترسي پيدا كنيد.
پس از دسترسي به حساب كاربري خود در سرور مجازي راه دور ، بايد اطمينان حاصل كنيد كه ديركتوري ~ / .ssh وجود دارد. اين دستور در صورت لزوم دايركتوري ايجاد مي كند يا در صورت وجود هيچ كاري انجام نمي دهد:
$ mkdir -p ~/.ssh

اكنون ، مي توانيد فايل authorized_keys را ايجاد كنيد و يا تغيير دهيد. مي توانيد مطالب مربوط به فايل id_rsa.pub خود را به انتهاي فايل authorized_keys اضافه كنيد و در صورت لزوم با استفاده از اين دستور آن را ايجاد كنيد:
$ echo public_key_string >> ~/.ssh/authorized_keys

در دستور فوق ، public_key_string را با خروجي دستور cat ~/.ssh/id_rsa.pub كه بر روي سيستم محلي خود اجرا كرده ايد ، جايگزين كنيد. بايد با ssh-rsa AAAA شروع شود …
سرانجام ، اطمينان خواهيم يافت كه ديركتوري ~ / .shsh و فايل authorized_keys مجموعه مجوزهاي مناسب را دارند:
$ chmod -R go= ~/.ssh

اين دستور به طور بازگشتي همه مجوزهاي “group” و “other” را براي ديركتوري ~ / .ssh / حذف مي كند.
اگر براي تنظيم كليدهاي يك حساب كاربري از كاربر ريشه استفاده مي كنيد ، مهم است كه ديركتوري ~ / .ssh متعلق به كاربر باشد و نه ريشه:
$ chown -R sammy:sammy ~/.ssh

در اين آموزش كاربر Sammy نامگذاري شده است اما بايد نام كاربري مناسب را در دستور فوق جايگزين كنيد.
اكنون مي توانيم با سرور مجازي Ubuntu ، احراز هويت بدون رمز عبور را امتحان كنيم.
مرحله 3 – تأييد اعتبار براي سرور مجازي Ubuntu با استفاده از كليدهاي SSH
اگر يكي از روشهاي فوق را با موفقيت انجام داده ايد ، بايد بتوانيد بدون ارائه رمز ورود به حساب راه دور ، وارد هاست راه دور شويد.
فرايند پايه يكسان است:
$ ssh username@remote_host

اگر اولين بار است كه به اين هاست متصل مي شويد (و در صورتي كه از آخرين روش در بالا استفاده كرديد) ، ممكن است چيزي شبيه به اين را مشاهده كنيد:
Output
The authenticity of host ‘203.0.113.1 (203.0.113.1)’ can’t be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

اين بدان معني است كه رايانه محلي شما هاست از راه دور را تشخيص نمي دهد. “yes” را تايپ كرده و ENTER را براي ادامه فشار دهيد.
اگر كلمه عبور براي كليد خصوصي خود ارائه نكرده ايد ، بلافاصله وارد سيستم مي شويد. اگر هنگام ايجاد كليد ، يك عبارت عبور را براي كليد خصوصي تهيه كرده باشيد ، از شما خواسته مي شود اكنون آن را وارد كنيد (توجه داشته باشيد كه كليدهايي گه فشار ميدهيد براي امنيت در بخش ترمينال نمايش داده نميشوند). پس از تأييد اعتبار ، بايد يك بخش پوسته جديد با حساب پيكربندي شده روي سرور مجازي Ubuntu باز شود.
اگر تأييد هويت مبتني بر كليد موفقيت آميز بود ، ادامه بدهيد تا ببينيد كه چگونه با غيرفعال كردن احراز هويت رمز عبور ، امنيت بيشتري در سيستم خود داشته باشيد.
مرحله 4 – غيرفعال كردن احراز هويت رمز عبور روي سرور مجازي خود
اگر توانستيد با استفاده از SSH بدون پسورد وارد حساب كاربري خود شويد ، تأييد هويت مبتني بر كليد SSH را با موفقيت پيكربندي كرده ايد. با اين حال ، مكانيسم تأييد اعتبار مبتني بر رمز عبور شما هنوز فعال است ، به اين معني كه سرور مجازي شما هنوز در معرض حملات خطرناك ميباشد.
قبل از انجام مراحل در اين بخش ، مطمئن شويد كه احراز هويت مبتني بر كليد SSH را براي حساب اصلي در اين سرور مجازي پيكربندي كرده ايد ، يا ترجيحاً احراز هويت مبتني بر كليد SSH را براي يك حساب غير ريشه با امتيازات sud در اين سرور مجازي پيكربندي كرده ايد. در اين مرحله ورود به سيستم هاي مبتني بر رمز عبور قفل خواهد شد ، بنابراين اطمينان از اينكه همچنان مي توانيد دسترسي ادمين داشته باشيد بسيار مهم است.
هنگامي كه تأييد كرديد كه حساب از راه دور شما داراي امتيازات ادمين است ، با كليدهاي SSH ، به صورت ريشه يا با يك حساب داراي امتيازات sudo وارد سرور مجازي راه دور خود شويد. سپس فايل پيكربندي Daemon SSH را باز كنيد:
$ sudo nano /etc/ssh/sshd_config

در داخل فايل ، يك دستورالعمل با نام PasswordAuthentication را جستجو كنيد. اين خط ممكن است در ابتدا با يك # شروع شود. خط را با حذف # باطل كرده ، و مقدار را بر روي no قرار دهيد. با اين كار توانايي ورود به سيستم از طريق SSH با استفاده از گذرواژه هاي حساب غيرفعال مي شود:
/etc/ssh/sshd_config
. . .
PasswordAuthentication no
. . .

پس از اتمام فايل را با فشار دادن CTRL + X ، سپس Y ذخيره كرده و آن را ببنديد تا تأييد كنيد كه فايل ذخيره شود و درنهايت ENTER را براي خروج از nano وارد كنيد. براي فعال كردن اين تغييرات ، بايد سرويس sshd را مجدداً راه اندازي كنيم:
$ sudo systemctl restart ssh

براي احتياط ، قبل از بستن بخش فعلي خود ، يك پنجره ترمينال جديد باز كنيد و آزمايش كنيد كه سرويس SSH به درستي كار مي كند:
$ ssh username@remote_host

پس از تأييد صحت عملكرد سرويس SSH ، مي توانيد با اطمينان تمام بخش هاي فعلي سرور مجازي را ببنديد.
اكنون SSH daemon در سرور مجازي Ubuntu شما فقط به احراز هويت مبتني بر كليد SSH پاسخ مي دهد. ورود به سيستم مبتني بر رمز عبور غيرفعال شده است.
نتيجه
اكنون بايد تأييد هويت مبتني بر كليد SSH را روي سرور مجازي خود پيكربندي كنيد كه به شما اجازه ميدهد بدون ارائه رمز ورود به حساب كاربري خود وارد شويد.
اگر مي خواهيد در مورد كار با SSH اطلاعات بيشتري كسب كنيد ، به راهنماي ضروريات SSH نگاهي بيندازيد.

 

برچسب‌ها:SSHUbuntu 20.04

نصب و استفاده از PostgreSQL در اوبونتو 20.0

۶۶ بازديد

سيستم هاي مديريت پايگاه داده رابطه اي ، عنصر اصلي بسياري از وب سايت ها و برنامه ها هستند. آنها روشي ساختاري براي ذخيره ، سازماندهي و دسترسي به اطلاعات را ارائه مي دهند.
PostgreSQL يا Postgres يك سيستم مديريت پايگاه داده رابطه اي است كه اجراي زبان جستجوي SQL را فراهم مي كند. سازگار با استانداردها ميباشد و داراي بسياري از ويژگي هاي پيشرفته مانند تراكنش هاي قابل اعتماد و همزماني بدون قفل خواندن است.
اين راهنما نحوه نصب Postgres را در يك سرور مجازي Ubuntu 20.04 نشان مي دهد. همچنين برخي از دستورالعمل ها براي مديريت عمومي پايگاه داده را ارائه مي نمايد.
پيش نيازها
براي دنبال كردن اين آموزش ، به يك سرور مجازي Ubuntu 20.04 نياز داريد كه با پيروي از راهنماي ستاپ اوليه سرور مجازي براي Ubuntu 20.04 ،پيكربندي شده باشد. بعد از مطالعه اين آموزش پيش نياز ، سرور شما بايد كاربر غير ريشه اي با امتيازات sudo و يك فايروال پايه داشته باشد.
مرحله 1 – نصب PostgreSQL
مخازن پيش فرض اوبونتو شامل بسته هاي Postgres است ، بنابراين مي توانيد با استفاده از سيستم بسته بندي apt آنها را نصب كنيد.
اگر اخيراً اين كار را نكرده ايد ، فهرست بسته محلي سرور مجازي خود را ريفرش كنيد:
$ sudo apt update

سپس ، بسته Postgres را به همراه يك بسته -contrib نصب كنيد كه برخي از امكانات و كاربردهاي ديگر را اضافه مي كند:
$ sudo apt install postgresql postgresql-contrib

اكنون كه نرم افزار نصب شده است ، مي توانيم به نحوه عملكرد آن و چگونگي تفاوت آن با ساير سيستم هاي مديريت پايگاه داده رابطه اي كه ممكن است از آنها استفاده كرده باشيد ، بپردازيم.
مرحله 2 – استفاده از نقشها (roles) و بانكهاي اطلاعاتي PostgreSQL
به طور پيش فرض ، Postgres از مفهومي به نام “role” براي مديريت احراز هويت و اعتباربخشي استفاده مي كند. اين رول ها به نوعي شبيه به اكانت هاي معمولي سبك يونيكس هستند ، اما Postgres بين كاربران و گروه ها فرق نمي گذارد و در عوض اصطلاح انعطاف پذيرتر “role” را ترجيح مي دهد.
پس از نصب ، Postgres براي استفاده از احراز هويت تنظيم ميشود ، به اين معني كه نقش هاي Postgres را با يك حساب كاربري سيستم Unix / Linux مرتبط مي كند. اگر نقشي در Postgres وجود داشته باشد ، يك نام كاربري يونيكس / لينوكس با همين نام قادر به ورود به عنوان آن نقش است.
فرآيند نصب يك حساب كاربري به نام postgres ايجاد كرده است كه با نقش پيش فرض Postgres همراه است. براي استفاده از Postgres مي توانيد وارد آن حساب شويد.
چند روش براي استفاده از اين حساب براي دسترسي به Postgres وجود دارد.
انتقال به حساب Postgres
با تايپ دستور زير به حساب Postgres در سرور مجازي خود سوييچ كنيد:
$ sudo -i -u postgres

اكنون مي توانيد با تايپ دستور زير به اعلان PostgreSQL دسترسي پيدا كنيد:
$ psql

از آنجا مي توانيد در صورت لزوم با سيستم مديريت بانك اطلاعاتي ارتباط برقرار كنيد.
با تايپ دستور زير از اعلان PostgreSQL خارج شويد:
Postgres=# q

اين دستور شما را به خط فرمان postgres Linux بازميگرداند.
دسترسي به يك اعلان Postgres بدون تعويض حساب
همچنين مي توانيد دستور مورد نظر خود را با حساب postgres مستقيماً با sudo اجرا كنيد.
به عنوان نمونه ، در مثال آخر ، به شما گفته شد كه ابتدا با سوييچ كردن به كاربر postgres و سپس اجراي psql به اعلان Postgres برسيد. شما مي توانيد اين كار را در يك مرحله با اجراي يك دستور psql منفرد به عنوان كاربر postgres با sudo انجام دهيد ، به اين شكل:
$ sudo -u postgres psql

با اين كار شما مستقيماً در Postgres وارد مي شويد بدون اينكه پوسته واسطه اي bash در بين آنها باشد.
دوباره مي توانيد با تايپ كردن اين دستور از بخش Postgres تعاملي خارج شويد:
Postgres=# q

بسياري از موارد به بيش از يك نقش Postgres نياز دارند. در ادامه ياد ميگيريد كه چگونه اين موارد را پيكربندي كنيد.
مرحله 3 – ايجاد نقش (رول) جديد
در حال حاضر ، شما فقط نقش Postgres را در پايگاه داده پيكربندي كرده ايد. مي توانيد با استفاده از دستور Createrole نقش هاي جديدي را از خط فرمان ايجاد كنيد. پرچم –interactive نام نقش جديد را از شما ميپرسد و همچنين سؤال ميكند كه آيا مجوزهاي superuser دارد يا خير.
اگر به عنوان حساب postgres وارد شويد ، مي توانيد با تايپ كردن دستور زير كاربر جديدي ايجاد كنيد:
postgres@server:~$ createuser –interactive

در عوض ، اگر ترجيح مي دهيد بدون تغيير حساب كاربري خود از sudo براي هر دستور استفاده كنيد ، تايپ كنيد:
$ sudo -u postgres createuser –interactive

اين اسكريپت انتخاب هاي مختلفي را به شما نشان ميدهد و بر اساس پاسخ هاي شما ، دستورات صحيح Postgres را اجرا مي كند تا كاربر را با مشخصات دلخواه شما ايجاد كند.
Output
Enter name of role to add: sammy
Shall the new role be a superuser? (y/n) y

با عبور از برخي از پرچم هاي اضافي مي توانيد كنترل بيشتري به دست آوريد. گزينه ها را با مراجعه به صفحه man بررسي كنيد:
$ man createuser

نصب شما در Postgres اكنون كاربر جديدي دارد ، اما شما هنوز هيچ پايگاه داده اي اضافه نكرده ايد. در بخش بعدي اين روند توضيح داده شده است.
مرحله 4 – ايجاد يك پايگاه داده جديد
فرض ديگري كه سيستم تأييد اعتبار Postgres بصورت پيش فرض انجام مي دهد اين است كه براي هر نقشي كه براي ورود به سيستم استفاده مي شود ، آن نقش يك بانك اطلاعاتي با همان نام دارد كه مي تواند به آن دسترسي داشته باشد.
اين بدان معني است كه اگر كاربري كه در آخرين بخش ايجاد كرده ايد ، sammy ناميده شود ، آن نقش سعي خواهد كرد به بانك اطلاعاتي وصل شود كه به طور پيش فرض “sammy” ناميده مي شود. مي توانيد با دستور ايجاد شده ، بانك اطلاعاتي مناسب ايجاد كنيد.
اگر به عنوان حساب postgres وارد شويد ، چيزي مانند اين تايپ ميكنيد:
postgres@server:~$ createdb sammy

از سوي ديگر ، اگر ترجيح مي دهيد بدون تغيير حساب عادي خود ، از sudo براي هر فرمان استفاده كنيد ، تايپ كنيد:
$ sudo -u postgres createdb sammy

اين انعطاف پذيري در صورت نياز چندين مسير ايجاد مي كند.
مرحله 5 – باز كردن اعلان Postgres با نقش جديد
براي ورود با تأييد هويت مبتني بر ident ، به استفاده از كاربر لينوكس با همان نام نقش و پايگاه داده Postgres خود نياز خواهيد داشت.
اگر يك كاربر لينوكس با اين ويژگي ها در دسترس نداريد ، مي توانيد يك كاربر با دستور adduser ايجاد كنيد. شما بايد اين كار را از حساب غير ريشه خود با امتيازات sudo انجام دهيد (به اين معني كه به عنوان كاربر postgres وارد نشويد):
$ sudo adduser sammy

پس از در دسترس بودن اين حساب جديد ، مي توانيد با تايپ كردن اين دستور به پايگاه داده وصل شويد:
$ sudo -i -u sammy

$ psql
يا مي توانيد اين كار را بصورت درون خطي انجام دهيد:
$ sudo -u sammy psql

با فرض اينكه همه مولفه ها به درستي پيكربندي شده اند ، اين دستور شما را به طور خودكار وارد سيستم مي كند.
اگر مي خواهيد كاربر شما به يك پايگاه داده ديگر متصل شود ، مي توانيد با مشخص كردن ديتابيس اين كار را انجام دهيد:
$ psql -d postgres

پس از ورود به سيستم ، مي توانيد اطلاعات مربوط به اتصال فعلي خود را با تايپ كردن بررسي كنيد:
Sammy=# conninfo

Output
You are connected to database “sammy” as user “sammy” via socket in “/var/run/postgresql” at port

اين امر در صورت اتصال به پايگاه داده هاي غير پيش فرض يا با كاربران غير پيش فرض مفيد خواهد بود.
مرحله 6 – ايجاد و حذف جداول
اكنون كه مي دانيد چگونه به سيستم پايگاه داده PostgreSQL وصل شويد ، مي توانيد برخي از وظايف اساسي مديريت Postgres را ياد بگيريد.
تركيب اصلي براي ايجاد جداول به شرح زير است:
CREATE TABLE table_name (
column_name1 col_type (field_length) column_constraints,
column_name2 col_type (field_length),
column_name3 col_type (field_length)
);

همانطور كه مشاهده مي كنيد ، اين دستورات جدول را نامگذاري ميكنند و سپس ستون ها و همچنين نوع ستون و حداكثر طول داده هاي فيلد را مشخص مي كنند. همچنين مي توانيد محدوديت هاي جدول را براي هر ستون به صورت اختياري اضافه كنيد.
در اينجا مي توانيد درباره نحوه ايجاد و مديريت جداول در Postgres اطلاعات بيشتري كسب كنيد.
براي اهداف نمايشي ، جدول زير را ايجاد كنيد:
Sammy=# CREATE TABLE playground (

Sammy=# equip_id serial PRIMARY KEY,

Sammy=# type varchar (50) NOT NULL,

Sammy=# color varchar (25) NOT NULL,

Sammy=# location varchar(25) check (location in (‘north’, ‘south’, ‘west’, ‘east’, ‘northeast’, ‘southeast’, ‘southwest’, ‘northwest’)),

Sammy=# install_date date

Sammy=#);

اين دستور يك جدول ايجاد مي كند كه تجهيزات زمين بازي را ذخيره مي كند. اولين ستون در جدول شماره شناسه تجهيزات از نوع سريال را نگه مي دارد كه يك عدد صحيح است و به صورت خودكار افزايش مي يابد. اين ستون همچنين داراي محدوديت PRIMARY KEY ميباشد ، بدين معني كه مقادير موجود در آن بايد منحصر به فرد باشند و null (صفر) نباشند.
دو خط بعدي به ترتيب ستون هايي براي نوع و رنگ تجهيزات ايجاد مي كنند كه هيچ يك از آنها نمي تواند خالي باشد. خط بعد از اينها يك ستون موقعيت مكاني و همچنين محدوديتي ايجاد مي كند كه بايد يكي از هشت مقدار ممكن باشد. خط آخر يك ستون تاريخ ايجاد مي كند كه تاريخ نصب تجهيزات را ثبت مي نمايد.
براي دو ستون (equip_id و install_date) ، دستورموجود طول فيلد را مشخص نمي كند. دليل اين امر اين است كه برخي از انواع داده ها به طول مشخص نياز ندارند زيرا طول يا قالب آن بيان ميشود.
مي توانيد جدول جديد خود را با تايپ كردن اين دستور مشاهده كنيد:
Sammy=# d

Output
List of relations
Schema | Name | Type | Owner
——–+————————-+———-+——-
public | playground | table | sammy
public | playground_equip_id_seq | sequence | sammy
(2 rows)

جدول زمين بازي شما اينجاست ، اما چيزي به نام playground_equip_id_seq نيز وجود دارد كه از نوع توالي است. در واقع نمايشي از نوع سريال است كه شما به ستون equip_id خود داده ايد. اين ستون شماره بعدي در توالي را دنبال مي كند و به طور خودكار براي ستون هاي اين نوع ايجاد مي شود.
اگر مي خواهيد فقط جدول بدون ترتيب را ببينيد ، مي توانيد تايپ كنيد:
Sammy=# dt

Output
List of relations
Schema | Name | Type | Owner
——–+————+——-+——-
public | playground | table | sammy
(1 row)

اكنون جدول آماده است ، بياييد از آن براي تمرين مديريت داده استفاده كنيم.
مرحله 7 – افزودن ، پرس و جو و حذف داده ها در يك جدول
اكنون كه جدولي داريد ، مي توانيد برخي از داده ها را در آن وارد كنيد. به عنوان نمونه ، با فراخواني جدول مورد نظر براي اضافه كردن ، نامگذاري ستونها و سپس تهيه داده براي هر ستون ، slide و swing اضافه كنيد ، مانند اين:
Sammy=# INSERT INTO playground (type, color, location, install_date) VALUES (‘slide’, ‘blue’, ‘south’, ‘2017-04-28’);

Sammy=# INSERT INTO playground (type, color, location, install_date) VALUES (‘swing’, ‘yellow’, ‘northwest’, ‘2018-08-16’);

بايد هنگام وارد كردن داده ها مراقب باشيد تا از مشكلات و قطعي هاي معمول جلوگيري كنيد. اولا نام ستون ها را در علامت نقل قول قرار ندهيد ، فقط مقادير ستوني كه وارد مي كنيد به نقل قول نياز دارند.
نكته ديگري كه بايد در نظر داشته باشيد اين است كه براي ستون equip_id مقداري وارد نمي كنيد. دليل اين امر اين است كه هر زمان كه يك رديف جديد به جدول اضافه كنيد ، به طور خودكار ايجاد مي شود.
با تايپ كردن اين دستور اطلاعاتي كه اضافه كرده ايد بازيابي كنيد:
Sammy=# SELECT * FROM playground;

Output
equip_id | type | color | location | install_date
———-+——-+——–+———–+————–
1 | slide | blue | south | 2017-04-28
2 | swing | yellow | northwest | 2018-08-16
(2 rows)

در اينجا ، مي بينيد كه equip_id شما با موفقيت پر شده است و تمام داده هاي ديگر شما به درستي سازماندهي شده اند.
اگر اسلايد روي زمين بازي خراب شد و مجبور شديد آن را حذف كنيد ، مي توانيد با تايپ دستور زير آن سطر از جدول خود حذف كنيد:
Sammy=# DELETE FROM playground WHERE type = ‘slide’;

جدول را دوباره پرس و جو كنيد:
Sammy=# SELECT * FROM playground;

Output
equip_id | type | color | location | install_date
———-+——-+——–+———–+————–
2 | swing | yellow | northwest | 2018-08-16
(1 row)

توجه كنيد كه رديف اسلايد ديگر جزئي از جدول نيست.
مرحله 8 – اضافه كردن و حذف ستون ها از يك جدول
پس از ايجاد جدول مي توانيد با اضافه كردن يا حذف ستون ها آن را تغيير دهيد. با تايپ دستور زير، براي نمايش آخرين بازديد از نگهداري از هر قطعه تجهيزات ، يك ستون اضافه كنيد:
Sammy=# ALTER TABLE playground ADD last_maint date;
اگر اطلاعات جدول خود را دوباره مشاهده كنيد ، مي بينيد كه ستون جديد اضافه شده است اما هيچ داده اي وارد نشده است:
Sammy=# SELECT * FROM playground;

Output
equip_id | type | color | location | install_date | last_maint
———-+——-+——–+———–+————–+————
2 | swing | yellow | northwest | 2018-08-16 |
(1 row)

اگر متوجه شديد كه خدمه كاري شما از يك ابزار جداگانه براي پيگيري سابقه نگهداري استفاده مي كنند ، مي توانيد ستون را با تايپ دستور زير حذف كنيد:
Sammy=# ALTER TABLE playground DROP last_maint;

اين دستور ستون last_maint و مقادير موجود در آن را حذف مي كند ، اما تمام داده هاي ديگر را دست نخورده نگه ميدارد.
مرحله 9 – بروزرساني داده ها در يك جدول
تاكنون ياد گرفته ايد كه چگونه مي توانيد سوابق را به يك جدول اضافه كنيد و چگونه آنها را حذف كنيد ، اما اين آموزش هنوز نحوه تغيير ورودي هاي موجود را پوشش نداده است.
مي توانيد مقادير ورودي موجود را با جستجوي ركورد مورد نظر خود به روز كنيد و ستون را روي مقدار مورد نظر خود تنظيم كنيد. مي توانيد ركورد swing را درخواست كنيد (با هر swing در جدول شما مطابقت دارد) و رنگ آن را به رنگ قرمز تغيير دهيد. وقتي swing را براي رنگ كاري تنظيم كنيد، اين امر مي تواند مفيد باشد :
Sammy=# UPDATE playground SET color = ‘red’ WHERE type = ‘swing’;

با پرس و جوي دوباره داده ها ، مي توانيد تأييد كنيد كه اين عمليات با موفقيت انجام شد:
Sammy=# SELECT * FROM playground;

Output
equip_id | type | color | location | install_date
———-+——-+——-+———–+————–
2 | swing | red | northwest | 2018-08-16
(1 row)

همانطور كه مشاهده مي كنيد ، اكنون اسلايد به عنوان قرمز ثبت شده است.
نتيجه
اكنون PostgreSQL را روي سرور مجازي Ubuntu 20.04 خود تنظيم كرده ايد. اگر مي خواهيد در مورد Postgres و
نحوه استفاده از آن اطلاعات بيشتري كسب كنيد، توصيه مي كنيم راهنماهاي زير را بررسي كنيد:
• مقايسه سيستم هاي مديريت پايگاه داده رابطه اي
• كار با پرس و جوهاي در حال اجرا با SQL

 

برچسب‌ها:PostgresPostgreSQLUbuntu 20.04

نحوه نصب MySQL در اوبونتو 20.04

۷۳ بازديد

MySQL يك سيستم مديريت پايگاه داده منبع باز است كه معمولاً به عنوان بخشي از پشته محبوب LAMP (Linux ، Apache ، MySQL ، PHP / Python / Perl) نصب مي شود. اين سيستم يك مدل رابطه اي را پياده سازي مي كند و براي مديريت داده هاي خود از زبان پرس و جوي ساختاريافته (معروف به SQL) استفاده مي كند.
در اين آموزش نحوه نصب MySQL نسخه 8 بر روي سرور مجازي Ubuntu 20.04 بررسي مي شود. با تكميل آن ، شما يك پايگاه داده رابطه اي در حال كار خواهيد داشت كه مي توانيد براي ساختن وب سايت يا برنامه بعدي خود استفاده كنيد.

پيش نيازها
براي دنبال كردن اين آموزش ، به موارد زير نياز داريد:
• يك سرور مجازي Ubuntu 20.04 با يك كاربر ادمين غير ريشه و فايروال تنظيم شده با UFW . براي راه اندازي ، راهنماي ستاپ اوليه سرور مجازي براي اوبونتو 20.04 را دنبال كنيد.

مرحله 1 – نصب MySQL
در Ubuntu 20.04 مي توانيد MySQL را با استفاده از مخزن بسته APT نصب كنيد. در زمان نوشتن اين مقاله، نسخه MySQL موجود در مخزن پيش فرض اوبونتو نسخه 8.0.19 است.
براي نصب آن ، اگر اخيراً اين كار را نكرده ايد ، فهرست بسته را روي سرور مجازي خود به روز كنيد:
$ sudo apt update

سپس بسته mysql-server را نصب كنيد:
$ sudo apt install mysql-server

اين كار MySQL را نصب مي كند ، اما از شما نميخواهد كه رمز عبوري تنظيم كنيد يا تغييرات ديگري در پيكربندي ايجاد كنيد. از آنجا كه اين امر باعث مي شود نصب MySQL ناامن باشد ، در ادامه به اين موضوع خواهيم پرداخت.

مرحله 2 – پيكربندي MySQL
براي نصب هاي جديد MySQL ، بهتر است اسكريپت امنيتي شامل DBMS را اجرا كنيد. اين اسكريپت برخي از گزينه هاي پيش فرض با ايمني كمتر را براي مواردي مانند ورود به سيستم ريشه از راه دور و كاربران نمونه تغيير مي دهد.
اسكريپت امنيتي را با sudo اجرا كنيد:
$ sudo mysql_secure_installation

اين امر مجموعه اي از اعلان ها را به شما نمايش ميدهد كه بتوانيد برخي از گزينه هاي امنيتي نصب MySQL خود را تغيير دهيد. اولين سؤال از شما ميپرسد كه آيا مي خواهيد افزونه Validate Password را تنظيم كنيد ، كه مي تواند براي تست قدرت رمز ورود MySQL استفاده شود.
اگر تصميم به تنظيم افزونه اعتبار سنجي گذرواژه بگيريد ، اسكريپت از شما مي خواهد كه يك سطح اعتبار رمز عبور را انتخاب كنيد. قوي ترين سطح – كه شما با وارد كردن 2 انتخاب مي كنيد – به حداقل 8 كاراكتر نياز دارد و شامل تركيبي از حروف بزرگ ، حروف كوچك ، عدد و علائم خاص است:
Output
Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: Y

There are three levels of password validation policy:

LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:
2

صرف نظر از اين كه آيا مي خواهيد افزونه رمز عبور معتبر را انتخاب كنيد ، اعلان بعدي تعيين رمز عبور براي كاربر ريشه MySQL خواهد بود. Enter را بزنيد و رمز عبور ايمن را تاييد كنيد:
Output
Please set the password for root here.

New password:

Re-enter new password:

اگر از افزونه اعتبار سنجي گذرواژه استفاده كرده ايد ، در مورد قدرت رمزعبور جديد خود بازخورد دريافت خواهيد كرد. سپس اسكريپت از شما سؤال مي كند كه آيا مي خواهيد رمز عبوري را كه وارد كرده ايد ادامه دهيد يا مي خواهيد يك رمز جديد را وارد كنيد. با فرض اينكه از قدرت رمز عبوري كه تازه وارد كرده ايد راضي هستيد ، Y را براي ادامه اسكريپت وارد كنيد:
Output
Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y

از اينجا به بعد ، مي توانيد Y و سپس ENTER را فشار دهيد تا پيش فرض براي همه سؤالات بعدي را بپذيريد. با اين كار برخي از كاربران ناشناس و بانك اطلاعاتي تستي حذف مي شوند ، ورود به سيستم ريشه از راه دور غيرفعال مي شود و اين قوانين جديد را بارگذاري مي كند تا MySQL فوراً با تغييراتي كه ايجاد كرده ايد منطبق شود.
توجه داشته باشيد كه حتي اگر يك رمز عبور براي كاربر ريشه MySQL تنظيم كرده ايد ، اين كاربر براي تأييد اعتبار با گذرواژه هنگام اتصال به پوسته MySQL پيكربندي نشده است. در صورت تمايل مي توانيد با دنبال كردن مرحله 3 اين تنظيمات را اعمال كنيد.

مرحله 3 – تنظيم تأييد اعتبار و امتيازات كاربر (اختياري)
در سيستم هاي اوبونتو كه MySQL 5.7 را اجرا مي كند (و نسخه هاي بعدي) ، كاربر ريشه MySQL براي تأييد اعتبار با استفاده از افزونه auth_socket بصورت پيش فرض و نه با گذرواژه تنظيم شده است. اين امر امنيت و قابليت استفاده بيشتر را در بسياري از موارد امكان پذير مي كند ، اما همچنين مي تواند مواردي را پيچيده تر كند كه شما نياز به دسترسي به كاربر توسط يك برنامه خارجي (مانند phpMyAdmin) داريد.
به منظور استفاده از رمز عبور براي اتصال به MySQL به عنوان root ، بايد روش تأييد اعتبار آن را از auth_socket به افزونه ديگري مانند caching_sha2_password يا mysql_native_password تغيير دهيد. براي اين كار ، اعلان MySQL را از پايانه خود باز كنيد:
$ sudo mysql

سپس ، با دستور زير بررسي كنيد كه هر يك از حسابهاي كاربري MySQL شما از كدام روش تأييد اعتبار استفاده ميكند:
Mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Output
+——————+————————————————————————+———————–+———–+
| user | authentication_string | plugin | host |
+——————+————————————————————————+———————–+———–+
| debian-sys-maint | $A$005$lS|M#3K #XslZ.xXUq.crEqTjMvhgOIX7B/zki5DeLA3JB9nh0KwENtwQ4 | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root | | auth_socket | localhost |
+——————+————————————————————————+———————–+———–+
5 rows in set (0.00 sec)

در اين مثال ، مي بينيد كه كاربر ريشه با استفاده از افزونه auth_socket ، در واقع تأييد اعتبار مي كند. براي پيكربندي حساب ريشه براي تأييد اعتبار با رمز عبور ، عبارت ALTER USER را اجرا كنيد تا افزونه احراز هويت مورد استفاده خود را تغيير داده و يك رمز عبور جديد تنظيم كنيد.
مطمئن شويد كه رمز عبور را به رمز عبور قوي به انتخاب خود تغيير مي دهيد و آگاه باشيد كه اين دستور رمز ريشه را كه در مرحله 2 تنظيم كرده ايد تغيير مي دهد:
Mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED WITH caching_sha2_password BY ‘password’;

توجه: جمله قبلي ALTER USER كاربر ريشه MySQL را براي تأييد اعتبار با افزونه caching_sha2_password تنظيم مي كند. طبق مطالب رسمي MySQL ، caching_sha2_password افزونه ارجح تأييد هويت MySQL است ، زيرا رمزگذاري ايمن تر پسورد را نسبت به نسخه قديمي تر به همراه دارد ، اما هنوز هم به طور گسترده استفاده مي شود ، mysql_native_password.
با اين حال ، بسياري از برنامه هاي PHP براي مثال phpMyAdmin – با اطمينان با caching_sha2_password كار نمي كنند. اگر قصد استفاده از اين پايگاه داده را با برنامه PHP داريد ، بهتر است تأييد اعتبار ريشه را با mysql_native_password انجام دهيد:
Mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘password’;

سپس ، PRUSILEGES FLUSH را اجرا كنيد كه به سرور مجازي مي گويد جداول اعطاي امتياز را مجدد لود كرده و
تغييرات جديد را اعمال كند:
Mysql> FLUSH PRIVILEGES;

روش هاي تأييد اعتبار استفاده شده توسط هر يك از كاربران خود را دوباره بررسي كنيد تا تأييد كنيد كه ريشه ديگر با استفاده از افزونه auth_socket احراز هويت نمي كند:
Mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Output
+——————+————————————————————————+———————–+———–+
| user | authentication_string | plugin | host |
+——————+————————————————————————+———————–+———–+
| debian-sys-maint | $A$005$lS|M#3K #XslZ.xXUq.crEqTjMvhgOIX7B/zki5DeLA3JB9nh0KwENtwQ4 | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root | *3636DACC8616D997782ADD0839F92C1571D6D78F | caching_sha2_password | localhost |
+——————+————————————————————————+———————–+———–+
5 rows in set (0.00 sec)

در اين مثال مي توانيد مشاهده كنيد كه كاربر ريشه MySQL اكنون با استفاده از caching_sha2_password تأييد اعتبار مي كند. پس از تأييد اين موضوع روي سرور مجازي خود ، مي توانيد از پوسته MySQL خارج شويد:
Mysql> exit

از طرف ديگر ، به نظر برخي ممكن است اتصال به MySQL با يك كاربر اختصاصي براي گردش كارشان مناسب تر باشد. براي ايجاد چنين كاربري ، بار ديگر پوسته MySQL را باز كنيد:
$ sudo mysql

توجه: اگر احراز هويت رمز عبور را براي ريشه فعال كرده ايد ، همانطور كه در پاراگراف هاي قبلي توضيح داده شد ، براي دسترسي به پوسته MySQL بايد از دستور ديگري استفاده كنيد. موارد زير كلاينت MySQL شما را با حق امتياز كاربر به طور منظم اجرا مي كند و شما فقط با تأييد اعتبار ، امتيازات ادمين را در بانك اطلاعات دريافت خواهيد كرد:
$ mysql -u root -p

از آنجا ، يك كاربر جديد ايجاد كرده و يك رمزعبور قوي به آن بدهيد:
Mysql> CREATE USER ‘sammy’@’localhost’ IDENTIFIED BY ‘password’;

سپس امتيازات مناسب را به كاربر جديد خود اعطا كنيد. به عنوان مثال ، شما مي توانيد امتيازات كاربر را به تمام جداول موجود در ديتابيس و همچنين قدرت اضافه كردن ، تغيير و حذف امتيازهاي كاربر با اين دستور اعطا كنيد:
Mysql> GRANT ALL PRIVILEGES ON *.* TO ‘sammy’@’localhost’ WITH GRANT OPTION;

توجه داشته باشيد كه در اين مرحله ، ديگر نيازي به اجراي فرمان FLUSH PRIVILEGES نداريد. اين دستور فقط در صورت تغيير جدول هاي اعطاي امتياز با استفاده از عباراتي مانند INSERT ، UPDATE يا DELETE مورد نياز است. از آنجا كه شما به جاي تغيير يك كاربر موجود، كاربر جديدي ايجاد كرده ايد،FLUSH PRIVILEGES در اينجا غير ضروري است.
سپس ، از پوسته MySQL خارج شويد:
Mysql> exit

در آخر ، بياييد نصب MySQL را آزمايش كنيم.
مرحله 4 – تست MySQL
صرف نظر از نحوه نصب آن ، MySQL بايد به صورت خودكار شروع به كار كند. براي آزمايش اين موضوع ، وضعيت آن را بررسي كنيد.
$ systemctl status mysql.service

خروجي مشابه زير را مشاهده خواهيد كرد:
Output
● mysql.service – MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-04-21 12:56:48 UTC; 6min ago
Main PID: 10382 (mysqld)
Status: “Server is operational”
Tasks: 39 (limit: 1137)
Memory: 370.0M
CGroup: /system.slice/mysql.service
└─10382 /usr/sbin/mysqld

اگر MySQL در حال اجرا نيست ، مي توانيد آن را با sudo systemctl start mysql شروع كنيد.
براي بررسي بيشتر، مي توانيد با استفاده از ابزار mysqladmin ، كه يك كلاينت است و به شما امكان اجراي دستورات ادمين را مي دهد ، به پايگاه داده وصل شويد. به عنوان مثال ، اين دستور مي گويد به عنوان ريشه به MySQL متصل شده (-u root) ، اعلان گذرواژه (-p) را پر كرده و نسخه را برگردانيد.
$ sudo mysqladmin -p -u root version

بايد خروجي مشابه اين را ببينيد:
Output
mysqladmin Ver 8.0.19-0ubuntu5 for Linux on x86_64 ((Ubuntu))
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Server version 8.0.19-0ubuntu5
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
Uptime: 10 min 44 sec

Threads: 2 Questions: 25 Slow queries: 0 Opens: 149 Flush tables: 3 Open tables: 69 Queries per second avg: 0.038

اين بدان معني است كه MySQL در حال كار است.
نتيجه
اكنون يك ستاپ اوليه MySQL نصب شده در سرور مجازي خود داريد. در اينجا چند نمونه از مراحل بعدي كه مي توانيد انجام دهيد آورده شده است:
• يك پشته LAMP تنظيم كنيد
• پرس و جوهاي در حال اجرا را با SQL تمرين كنيد

 

برچسب‌ها:MySQLPython

نصب Python 3 روي سرور Ubuntu 18.04

۶۵ بازديد

پايتون يك زبان برنامه نويسي انعطاف پذير و همه كاره است كه مي تواند در بسياري از موارد به خاطر داشتن نقاط قوت در اسكريپت ، اتوماسيون ، تجزيه و تحليل داده ها ، يادگيري ماشين و توسعه back-end مورد استفاده قرار گيرد. تيم توسعه پايتون براي اولين بار در سال 1991 با نامي الهام گرفته از گروه طنز بريتانيايي مونتي پايتون، آن را منتشر كردند و ميخواستند پايتون را به زباني تبديل كنند كه استفاده از آن بسيار جالب باشد. ستاپ سريع و سبك نسبتاً ساده و بازخورد فوري در مورد خطاها، پايتون را به يك انتخاب عالي براي مبتديان و توسعه دهندگان با تجربه تبديل كرده است. پايتون 3 جديدترين نسخه اين زبان است و آينده پايتون به حساب مي آيد.
در اين آموزش سرور مجازي Ubuntu 18.04 شما با يك محيط برنامه نويسي Python 3 تنظيم مي شود. برنامه نويسي روي سرور مجازي مزاياي بسياري دارد و از همكاري در پروژه هاي توسعه پشتيباني مي كند. اصول كلي اين آموزش در مورد هرگونه توزيع Debian Linux كاربرد دارد.
پيش نيازها
براي تكميل اين آموزش ، شما بايد يك كاربر غير ريشه با امتيازات sudo در سرور مجازي Ubuntu 18.04 داشته باشيد. براي يادگيري چگونگي دستيابي به اين تنظيمات ، راهنماي ستاپ اوليه دستي سرور مجازي را دنبال كنيد يا اسكريپت خودكار ما را اجرا كنيد.
اگر قبلاً با محيط ترمينال آشنايي نداريد ، مي توانيد مقاله “مقدمه اي بر ترمينال لينوكس” را براي جهت گيري بهتر در مورد ترمينال مطالعه كنيد.
با راه اندازي سرور مجازي و كاربر ، آماده شروع كار هستيد.
مرحله 1 – تنظيم پايتون 3
اوبونتو 18.04 و ساير نسخه هاي دبيان لينوكس ، Python 3 و Python 2 را از قبل نصب شده دارد. براي اطمينان از به روز بودن نسخه هاي خود ، بياييد سيستم را با دستور APT به روز رساني كنيم تا با ابزار بسته بندي پيشرفته اوبونتو همكاري كند:
$ sudo apt update

$ sudo apt -y upgrade

پرچم -y تأييد خواهد كرد كه ما با نصب همه موارد موافق هستيم ، اما بسته به نسخه لينوكس شما ، ممكن است لازم باشد كه با به روزرساني و ارتقاي سيستم ، پيام هاي بيشتري را تأييد كنيد.
پس از اتمام روند ، مي توانيم با تايپ كردن دستور زير نسخه پايتون 3 كه در سيستم نصب شده است را بررسي كنيم:
$ python3 -V

در پنجره ترمينال خروجي دريافت خواهيد كرد كه شماره نسخه را به شما اطلاع مي دهد. در حالي كه ممكن است تعداد متفاوت باشد ، خروجي مشابه اين خواهد بود:
Output
Python 3.6.7

براي مديريت بسته هاي نرم افزاري براي پايتون ، بياييد pip را نصب كنيم ، ابزاري كه بسته هاي برنامه نويسي را كه ممكن است بخواهيم در پروژه هاي توسعه خود استفاده كنيم ، نصب و مديريت خواهد كرد. مي توانيد با خواندن “چگونگي وارد كردن ماژول ها در پايتون 3” در مورد ماژول ها يا بسته هايي كه مي توانيد با pip نصب كنيد اطلاعات كسب كنيد.
$ sudo apt install -y python3-pip

بسته هاي پايتون با تايپ اين دستور قابل نصب هستند:
$ pip3 install package_name

در اينجا ، pack_name مي تواند به هر بسته يا كتابخانه Python مانند Django براي توسعه وب يا NumPy براي محاسبات علمي اشاره كند. بنابراين اگر مي خواهيد NumPy را نصب كنيد ، مي توانيد با دستور pip3 install numpy اين كار را انجام دهيد.
چند بسته و ابزار توسعه ديگر وجود دارد كه بايد اطمينان حاصل شود كه يك مجموعه قوي براي محيط برنامه نويسي خود داريم:
$ sudo apt install build-essential libssl-dev libffi-dev python3-dev

پس از راه اندازي پايتون و نصب pip و ساير ابزارها ، مي توانيم يك محيط مجازي براي پروژه هاي توسعه خود تنظيم كنيم.
مرحله 2 – تنظيم يك محيط مجازي
محيط هاي مجازي شما را قادر مي سازد براي پروژه هاي پايتون فضايي مجزا در سرور مجازي خود داشته باشيد ، اطمينان حاصل كنيد كه هر يك از پروژه هاي شما مي توانند مجموعه اي از متعلقات خاص خود را داشته باشند كه هيچ يك از پروژه هاي ديگر شما را مختل نمي كند.
تنظيم يك محيط برنامه نويسي ، كنترل بيشتري بر روي پروژه هاي Python و نحوه دستيابي به نسخه هاي مختلف بسته ها براي ما فراهم مي كند. اين امر به ويژه هنگام كار با بسته هاي شخص ثالث بسيار مهم است.
مي توانيد همانطور كه مي خواهيد محيط برنامه نويسي Python را تنظيم كنيد. هر محيط در واقع يك فهرست يا پوشه اي در سرور مجازي شماست كه چندين اسكريپت در آن وجود دارد تا بتواند به عنوان يك محيط عمل كند.
در حالي كه چند روش براي دستيابي به يك محيط برنامه نويسي در پايتون وجود دارد ، ما در اينجا از ماژول venv استفاده مي كنيم كه بخشي از كتابخانه استاندارد Python 3 است. بگذاريد venv را با تايپ كردن دستور زير نصب كنيم:
$ sudo apt install -y python3-venv

با استفاده از اين نصب ، آماده ايجاد محيط هستيم. بايد يا انتخاب كنيم كه مي خواهيم محيط هاي برنامه نويسي پايتون را در كدام ديركتوري قرار دهيم ، يا يك ديركتوري جديد با mkdir ايجاد كنيم ، مانند:
$ kdir environments

$ cd environments
وقتي در دايركتوري قرار گرفتيد كه ميخواهيد محيط در آن جا باشد ، مي توانيد با اجراي دستور زير محيطي ايجاد كنيد:
$ python3.6 -m venv my_env

در اصل ، pyvenv يك ديركتوري جديد ايجاد مي كند كه شامل چند آيتم است كه مي توانيم با دستور ls آنها را مشاهده كنيم:
$ ls my_env

Output
bin include lib lib64 pyvenv.cfg share

اين فايلها با هم كار مي كنند تا اطمينان حاصل كنند كه پروژه هاي شما از بستر وسيع دستگاه محلي شما جدا شده اند ، به گونه اي كه فايل هاي سيستم و فايل هاي پروژه مخلوط نشوند. اين روش خوبي براي كنترل نسخه و اطمينان از دسترسي هر يك از پروژه هاي شما به بسته هاي خاص مورد نياز خود است. Python Wheels يك فرمت بسته ساخته شده براي Python است كه مي تواند با كاهش تعداد دفعات لازم براي كامپايل ، باعث افزايش سرعت توليد نرم افزار شود ، و در ديركتوري share اوبونتو 18.04 قرار خواهد گرفت.
براي استفاده از اين محيط ، بايد آن را فعال كنيد ، كه مي توانيد با تايپ دستور زير كه اسكريپت activate  را فراخواني مي كند به آن دست پيدا كنيد.
$ source my_env/bin/activate

خط فرمان شما اكنون با نام محيط شما پيشوند داده مي شود ، در اين حالت my_env نام دارد. بسته به اينكه كدام نسخه لينوكس را اجرا ميكنيد، پيشوند شما ممكن است متفاوت باشد ، اما نام محيط شما در پرانتز بايد اولين چيزي باشد كه در خط python مشاهده مي كنيد:
(my_env) Sammy@ubuntu:~/environments$
اين پيشوند به ما اطلاع مي دهد كه محيط my_env در حال حاضر فعال است ، به اين معني كه وقتي ما در اينجا برنامه هايي را ايجاد مي كنيم آنها فقط از تنظيمات و بسته هاي خاص اين محيط استفاده مي كنند.
توجه: در محيط مجازي مي توانيد به جاي python3 از فرمان python استفاده كنيد و در صورت تمايل به جاي pip3 از pip استفاده كنيد. اگر در خارج از محيط خود از پايتون 3 در دستگاه خود استفاده مي كنيد ، لازم است كه از دستورات python3 و pip3 استفاده كنيد.

بعد از طي كردن اين مراحل ، محيط مجازي شما آماده استفاده است.
مرحله 3 – ايجاد يك برنامه ” hello, world ”
اكنون كه محيط مجازي ما تنظيم شده است ، بياييد يك برنامه ” “hello, world معمولي ايجاد كنيم. اين امر به ما امكان مي دهد تا محيط خود را مورد آزمايش قرار دهيم و اين امكان را براي ما فراهم مي كند كه اگر قبلاً با پايتون كار نكرده ايم، بيشتر با آن آشنا شويم.
براي اين كار ، يك ويرايشگر متن خط فرمان مانند nano را باز خواهيم كرد و يك فايل جديد ايجاد مي كنيم:
(my_env) Sammy@ubuntu:~/environments$ nano hello.py

پس از باز شدن فايل متني در پنجره ترمينال ، برنامه خود را تايپ مي كنيم:
print(“Hello, World!”)
Copy
با زدن كليدهاي CTRL و X از nano خارج شويد و هنگامي كه از شما خواسته شد فايل را ذخيره كنيد y را فشار دهيد.
پس از بيرون آمدن از nano و بازگشت به پوسته خود ، اجازه دهيد برنامه را اجرا كنيم:
(my_env) Sammy@ubuntu:~/environments$ python hello.py

برنامه hello.py كه به تازگي ايجاد كرده ايد بايد باعث شود ترمينال شما خروجي زير را توليد كند:
Output
Hello, World!

براي ترك محيط ، دستور deactivate را تايپ كنيد و به ديركتوري اصلي خود باز خواهيد گشت.
نتيجه
تبريك مي گويم! در اين مرحله شما يك محيط برنامه نويسي پايتون 3 در سرور مجازي Ubuntu Linux خود تنظيم كرده ايد و هم اكنون مي توانيد يك پروژه رمزگذاري را شروع كنيد!
اگر از يك دستگاه محلي به جاي سرور مجازي استفاده مي كنيد ، به مجموعه آموزشهاي مربوط به سيستم عامل خود در مجموعه “نحوه نصب و راه اندازي يك محيط برنامه نويسي محلي براي پايتون 3” مراجعه كنيد.
با آماده شدن سرور مجازي براي توسعه نرم افزار ، مي توانيد با خواندن كتاب الكترونيكي رايگان نحوه كد نويسي در Python 3 ، يا مراجعه به آموزش هاي پروژه برنامه نويسي ، اطلاعات بيشتري درباره كد نويسي در پايتون كسب كنيد.

 

برچسب‌ها:Debian LinuxDjangoNumPy

نحوه نصب Python 3 روي سرور Ubuntu 20.04

۵۹ بازديد

زبان برنامه نويسي پايتون يك انتخاب عالي هم براي مبتديان و هم توسعه دهندگان با تجربه ميباشد. اين زبان انعطاف پذير و همه كاره است و مي تواند در بسياري از موارد به خاطر داشتن نقاط قوت در اسكريپت ، اتوماسيون ، تجزيه و تحليل داده ها ، يادگيري ماشين و توسعه back-end مورد استفاده قرار گيرد. تيم توسعه پايتون براي اولين بار در سال 1991 با نامي الهام گرفته از گروه طنز بريتانيايي مونتي پايتون، آن را منتشر كردند و ميخواستند پايتون را به زباني تبديل كنند كه استفاده از آن بسيار جالب باشد.
در اين آموزش سرور مجازي Ubuntu 20.04 شما با يك محيط برنامه نويسي Python 3 تنظيم مي شود. برنامه نويسي روي سرور مجازي مزاياي بسياري دارد و از همكاري در پروژه هاي توسعه پشتيباني مي كند. اصول كلي اين آموزش در مورد هرگونه توزيع Debian Linux كاربرد دارد.
پيش نيازها
براي تكميل اين آموزش ، شما بايد يك كاربر غير ريشه با امتيازات sudo در سرور مجازي Ubuntu 20.04 داشته باشيد. براي يادگيري چگونگي دستيابي به اين راه اندازي ، راهنماي تنظيم اوليه سرور مجازي ما را دنبال كنيد.
اگر قبلاً با محيط ترمينال آشنايي نداريد ، مي توانيد مقاله “مقدمه اي بر ترمينال لينوكس” را براي جهت دهي بهتر مطالعه كنيد.
با راه اندازي سرور مجازي و كاربر ، آماده شروع كار هستيد.
مرحله 1 – تنظيم پايتون 3
اوبونتو 20.04 و ساير نسخه هاي دبيان لينوكس ، Python 3 و Python 2 را از قبل نصب شده دارد. براي اطمينان از به روز بودن نسخه هاي خود ، بياييد سيستم را با دستور APT به روز رساني كنيم تا با ابزار بسته بندي پيشرفته اوبونتو همكاري كند:
$ sudo apt update

$ sudo apt -y upgrade

پرچم -y تأييد خواهد كرد كه ما با نصب همه موارد موافق هستيم ، اما بسته به نسخه لينوكس شما ، ممكن است لازم باشد كه با به روزرساني و ارتقاي سيستم ، پيام هاي بيشتري را تأييد كنيد.
پس از اتمام روند ، مي توانيم با تايپ كردن دستور زير نسخه پايتون 3 كه در سيستم نصب شده است را بررسي كنيم:
$ python3 -V

در پنجره ترمينال خروجي دريافت خواهيد كرد كه شماره نسخه را به شما اطلاع مي دهد. در حالي كه ممكن است تعداد متفاوت باشد ، خروجي مشابه اين خواهد بود:
Output
Python 3.8.2

براي مديريت بسته هاي نرم افزاري براي پايتون ، بياييد pip را نصب كنيم ، ابزاري كه بسته هاي برنامه نويسي را كه ممكن است بخواهيم در پروژه هاي توسعه خود استفاده كنيم ، نصب و مديريت خواهد كرد. مي توانيد با خواندن “چگونگي وارد كردن ماژول ها در پايتون 3” در مورد ماژول ها يا بسته هايي كه مي توانيد با pip نصب كنيد اطلاعات كسب كنيد.
$ sudo apt install -y python3-pip

بسته هاي پايتون با تايپ اين دستور قابل نصب هستند:
$ pip3 install package_name

در اينجا ، pack_name مي تواند به هر بسته يا كتابخانه Python مانند Django براي توسعه وب يا NumPy براي محاسبات علمي اشاره كند. بنابراين اگر مي خواهيد NumPy را نصب كنيد ، مي توانيد با دستور pip3 install numpy اين كار را انجام دهيد.
چند بسته و ابزار توسعه ديگر وجود دارد كه بايد اطمينان حاصل شود كه يك مجموعه قوي براي محيط برنامه نويسي خود داريم:
$ sudo apt install -y build-essential libssl-dev libffi-dev python3-dev

پس از راه اندازي پايتون و نصب pip و ساير ابزارها ، مي توانيم يك محيط مجازي براي پروژه هاي توسعه خود تنظيم كنيم.
مرحله 2 – تنظيم يك محيط مجازي
محيط هاي مجازي شما را قادر مي سازد براي پروژه هاي پايتون فضايي مجزا در سرور مجازي خود داشته باشيد ، اطمينان حاصل كنيد كه هر يك از پروژه هاي شما مي توانند مجموعه اي از متعلقات خاص خود را داشته باشند كه هيچ يك از پروژه هاي ديگر شما را مختل نمي كند.
تنظيم يك محيط برنامه نويسي ، كنترل بيشتري بر روي پروژه هاي Python و نحوه دستيابي به نسخه هاي مختلف بسته ها براي ما فراهم مي كند. اين امر به ويژه هنگام كار با بسته هاي شخص ثالث بسيار مهم است.
مي توانيد همانطور كه مي خواهيد محيط برنامه نويسي Python را تنظيم كنيد. هر محيط در واقع يك ديركتوري يا پوشه اي در سرور مجازي شماست كه چندين اسكريپت در آن وجود دارد تا بتواند به عنوان يك محيط عمل كند.
در حالي كه چند روش براي دستيابي به يك محيط برنامه نويسي در پايتون وجود دارد ، ما در اينجا از ماژول venv استفاده مي كنيم كه بخشي از كتابخانه استاندارد Python 3 است. بگذاريد venv را با تايپ كردن دستور زير نصب كنيم:
$ sudo apt install -y python3-venv

با استفاده از اين نصب ، آماده ايجاد محيط هستيم. بايد يا انتخاب كنيم كه مي خواهيم محيط هاي برنامه نويسي پايتون را در كدام ديركتوري قرار دهيم ، يا يك ديركتوري جديد با mkdir ايجاد كنيم ، مانند:
$ kdir environments

$ cd environments
وقتي در دايركتوري قرار گرفتيد كه ميخواهيد محيط در آن جا باشد ، مي توانيد با اجراي دستور زير محيطي ايجاد كنيد:
$ python3.6 -m venv my_env

در اصل ، pyvenv يك ديركتوري جديد ايجاد مي كند كه شامل چند آيتم است كه مي توانيم با دستور ls آنها را مشاهده كنيم:
$ ls my_env

Output
bin include lib lib64 pyvenv.cfg share

اين فايلها با هم كار مي كنند تا اطمينان حاصل كنند كه پروژه هاي شما از بستر وسيع دستگاه محلي شما جدا شده اند ، به گونه اي كه فايل هاي سيستم و فايل هاي پروژه مخلوط نشوند. اين روش خوبي براي كنترل نسخه و اطمينان از دسترسي هر يك از پروژه هاي شما به بسته هاي خاص مورد نياز خود است. Python Wheels يك فرمت بسته ساخته شده براي Python است كه مي تواند با كاهش تعداد دفعات لازم براي كامپايل ، باعث افزايش سرعت توليد نرم افزار شود ، و در ديركتوري share اوبونتو 20.04 قرار خواهد گرفت.
براي استفاده از اين محيط ، بايد آن را فعال كنيد ، كه مي توانيد با تايپ دستور زير كه اسكريپت activate  را فراخواني مي كند به آن دست پيدا كنيد.
$ source my_env/bin/activate

خط فرمان شما اكنون با نام محيط شما پيشوند داده مي شود ، در اين حالت my_env نام دارد. بسته به اينكه كدام نسخه لينوكس را اجرا ميكنيد، پيشوند شما ممكن است متفاوت باشد ، اما نام محيط شما در پرانتز بايد اولين چيزي باشد كه در خط python مشاهده مي كنيد:
(my_env) Sammy@ubuntu:~/environments$
اين پيشوند به ما اطلاع مي دهد كه محيط my_env در حال حاضر فعال است ، به اين معني كه وقتي ما در اينجا برنامه هايي را ايجاد مي كنيم آنها فقط از تنظيمات و بسته هاي خاص اين محيط استفاده مي كنند.
توجه: در محيط مجازي مي توانيد به جاي python3 از فرمان python استفاده كنيد و در صورت تمايل به جاي pip3 از pip استفاده كنيد. اگر در خارج از محيط خود از پايتون 3 در دستگاه خود استفاده مي كنيد ، لازم است كه از دستورات python3 و pip3 استفاده كنيد.

بعد از طي كردن اين مراحل ، محيط مجازي شما آماده استفاده است.
مرحله 3 – ايجاد يك برنامه ” hello, world ”
اكنون كه محيط مجازي ما تنظيم شده است ، بياييد يك برنامه ” “hello, world معمولي ايجاد كنيم. اين امر به ما امكان مي دهد تا محيط خود را مورد آزمايش قرار دهيم و اين امكان را براي ما فراهم مي كند كه اگر قبلاً با پايتون كار نكرده ايم، بيشتر با آن آشنا شويم.
براي اين كار ، يك ويرايشگر متن خط فرمان مانند nano را باز خواهيم كرد و يك فايل جديد ايجاد مي كنيم:
(my_env) Sammy@ubuntu:~/environments$ nano hello.py

پس از باز شدن فايل متني در پنجره ترمينال ، برنامه خود را تايپ مي كنيم:
print(“Hello, World!”)
Copy
با زدن كليدهاي CTRL و X از nano خارج شويد و هنگامي كه از شما خواسته شد فايل را ذخيره كنيد y را فشار دهيد.
پس از بيرون آمدن از nano و بازگشت به پوسته خود ، اجازه دهيد برنامه را اجرا كنيم:
(my_env) Sammy@ubuntu:~/environments$ python hello.py

برنامه hello.py كه به تازگي ايجاد كرده ايد بايد باعث شود ترمينال شما خروجي زير را توليد كند:
Output
Hello, World!

براي ترك محيط ، دستور deactivate را تايپ كنيد و به ديركتوري اصلي خود باز خواهيد گشت.
نتيجه
تبريك مي گويم! در اين مرحله شما يك محيط برنامه نويسي پايتون 3 در سرور مجازي Ubuntu Linux خود تنظيم كرده ايد و هم اكنون مي توانيد يك پروژه رمزگذاري را شروع كنيد!
اگر از يك دستگاه محلي به جاي سرور مجازي استفاده مي كنيد ، به مجموعه آموزشهاي مربوط به سيستم عامل خود در مجموعه “نحوه نصب و راه اندازي يك محيط برنامه نويسي محلي براي پايتون 3” مراجعه كنيد.
با آماده شدن سرور مجازي براي توسعه نرم افزار ، مي توانيد با خواندن كتاب الكترونيكي رايگان نحوه كد نويسي در Python 3 ، يا مراجعه به آموزش هاي پروژه برنامه نويسي ، اطلاعات بيشتري درباره كد نويسي در پايتون كسب كنيد.

 

برچسب‌ها:Ubuntu Linuxاسكريپت activate

نصب Linux،Apache،MySQL،PHP LAMP در اوبونتو 20.04

۷۷ بازديد

پشته “LAMP” گروهي از نرم افزارهاي منبع باز است كه به طور معمول به منظور فعال كردن سرور مجازي براي ميزباني وب سايتهاي پويا و برنامه هاي وب كه به زبان PHP نوشته شده است ، با هم نصب مي شوند. اين اصطلاح مخفف سيستم عامل لينوكس داراي سرور مجازي وب Apache است. داده هاي سايت در يك پايگاه داده MySQL ذخيره مي شوند و محتواي پويا توسط PHP پردازش مي شود.
در اين راهنما ، يك پشته LAMP را روي يك سرور مجازي Ubuntu 20.04 نصب خواهيم كرد.
پيش نيازها
براي تكميل اين آموزش ، نياز به داشتن يك سرور مجازي اوبونتو 20.04 با يك حساب كاربري غير ريشه فعال با sudo و يك فايروال پايه داريد كه مي توان با استفاده از راهنماي تنظيم اوليه سرور مجازي ما براي اوبونتو 20.04 اين كار را انجام داد.
مرحله 1 – نصب Apache و به روزرساني فايروال
وب سرور مجازي Apache از محبوب ترين سرور مجازي هاي وب در جهان است. به خوبي مستند شده است ، جامعه فعالي از كاربران دارد و در بيشتر تاريخ وب مورد استفاده گسترده قرار گرفته است ، و اين باعث مي شود آن را به عنوان يك گزينه پيش فرض عالي براي ميزباني وب سايت انتخاب كنيم.
Apache را با استفاده از مدير بسته Ubuntu يعني apt نصب كنيد:
⦁ $ sudo apt update

⦁ $ sudo apt install apache2

اگر اولين بار است كه در اين بخش از sudo استفاده مي كنيد ، از شما خواسته مي شود كه رمزعبور كاربر خود را ارائه كنيد تا تأييد كنيد كه از امتيازات مناسب براي مديريت بسته هاي سيستم با apt برخوردار هستيد. از شما خواسته مي شود كه با فشار دادن Y ، سپس enter نصب Apache را تأييد كنيد.
پس از اتمام نصب ، بايد تنظيمات فايروال خود را تنظيم كنيد تا ترافيك HTTP و HTTPS امكان پذير باشد. UFW داراي پروفايل هاي متفاوتي است كه مي توانيد براي دستيابي به اين هدف اهرم كنيد. براي ليست كردن تمام پروفايل هاي برنامه UFW موجود ، مي توانيد اين دستور را اجرا كنيد:
⦁ $ sudo ufw app list

خروجي مانند اين را خواهيد ديد:
Output
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH

معني هر يك از اين پروفايل ها آورده شده است:
⦁ Apache: اين نمايه فقط پورت 80 (ترافيك وب عادي و بدون رمزگذاري) را باز مي كند.
⦁ Apache Full: اين پروفايل هر دو پورت 80 (ترافيك وب عادي و بدون رمزگذاري) و پورت 443 (ترافيك رمزگذاري شده TLS / SSL) را باز مي كند.
⦁ Apache Secure: اين نمايه فقط پورت 443 (ترافيك رمزگذاري شده TLS / SSL) را باز مي كند.
در حال حاضر ، بهتر است فقط اجازه دسترسي اتصالات در پورت 80 را بدهيد ، زيرا اين يك نصب جديد Apache است و هنوز گواهي TLS / SSL پيكربندي شده براي اجازه ترافيك HTTPS در سرور مجازي خود نداريد.
فقط براي ترافيك در پورت 80 ، از نمايه Apache استفاده كنيد:
⦁ $ sudo ufw allow in “Apache”

مي توانيد تغيير را با اين دستور تأييد كنيد:
⦁ $ sudo ufw status

Output
Status: active

To Action From
— —— —-
OpenSSH ALLOW Anywhere
Apache ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache (v6) ALLOW Anywhere (v6)

ترافيك پورت 80 اكنون از طريق فايروال مجاز است.
با مراجعه به آدرس IP عمومي سرور مجازي خود در مرورگر وب ، مي توانيد بلافاصله بررسي را انجام دهيد تا تأييد كنيد كه همه چيز به درستي پيش ميرود ( اگر در حال حاضر اين اطلاعات را نداريد ، نوشته زير اين عنوان را ببينيد تا بفهميد آدرس IP عمومي تان چيست):
http://your_server_ip

صفحه پيش فرض Ubuntu 20.04 Apache را مشاهده مي كنيد ، كه براي اهداف اطلاع رساني و آزمايشي ميباشد. بايد چيزي شبيه به اين باشد:

اگر اين صفحه را مشاهده كرديد ، اكنون سرور مجازي وب شما به درستي از طريق فايروال نصب شده و در دسترس است.
چگونه آدرس IP عمومي سرور مجازي خود را پيدا كنيد
اگر نمي دانيد آدرس IP عمومي سرور مجازي شما چيست ، روش هاي مختلفي براي يافتن آن وجود دارد. معمولاً آدرسي است كه براي اتصال به سرور مجازي خود از طريق SSH استفاده مي كنيد.
چند روش مختلف براي انجام اين كار از خط فرمان وجود دارد. ابتدا مي توانيد با تايپ دستور زير از ابزار iproute2 براي دريافت آدرس IP خود استفاده كنيد:
⦁ $ ip addr show eth0 | grep inet | awk ‘{ print $2; }’ | sed ‘s//.*$//’

اين دستور دو يا سه خط قبلي را به شما باز مي گرداند. همه آنها آدرس هاي صحيحي هستند ، اما رايانه شما فقط مي تواند از يكي از آنها استفاده كند ، بنابراين هر يك از آنها را امتحان كنيد.
روش ديگر استفاده از ابزار curl براي تماس با طرف خارجي است تا به شما بگويد سرور مجازي شما را چگونه مشاهده ميكند. اين كار با پرسيدن آدرس IP شما از يك سرور مجازي خاص انجام ميشود:
⦁ $ curl http://icanhazip.com

صرف نظر از روشي كه براي دريافت آدرس IP خود استفاده مي كنيد ، آن را در نوار آدرس مرورگر وب خود وارد كنيد تا صفحه پيش فرض Apache را مشاهده كنيد.
مرحله 2 – نصب MySQL
اكنون كه وب سرور خود را فعال و راه اندازي كرده ايد ، بايد سيستم پايگاه داده را نصب كنيد تا بتوانيد داده هاي سايت خود را ذخيره و مديريت كنيد. MySQL يك سيستم مديريت پايگاه داده محبوب است كه در محيط هاي PHP استفاده مي شود.
دوباره ، براي به دست آوردن و نصب اين نرم افزار از apt استفاده كنيد:
⦁ $ sudo apt install mysql-server

در صورت درخواست ، نصب را با تايپ Y و سپس ENTER تأييد كنيد.
پس از اتمام نصب ، توصيه مي شود اسكريپت امنيتي را اجرا كنيد كه از طريق MySQL از قبل نصب شده باشد. اين اسكريپت برخي از تنظيمات پيش فرض ناامن را حذف كرده و دسترسي به سيستم پايگاه داده شما را غيرفعال مي كند. اسكريپت تعاملي را با اجراي اين دستور شروع كنيد:
⦁ $ sudo mysql_secure_installation

با استفاده از اين گزينه مي توانيد پلاگين Validate PASSWORD را پيكربندي كنيد.
توجه: فعال كردن اين ويژگي چيزي مثل فراخواني قضاوت است. در صورت فعال بودن ، گذرواژهاي ناسازگار با معيارهاي مشخص توسط خطاي MySQL رد مي شوند. بهتر است اعتبارسنجي را غيرفعال رها كنيد ، اما هميشه بايد از رمز عبورهاي قوي و منحصر به فرد براي اعتبارات پايگاه داده استفاده كنيد.

براي بله yes را تايپ كنيد و يا هر چيز ديگري كه بدون فعال سازي كار را ادامه ميدهد.
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

اگر yes را جواب بدهيد ، از شما خواسته مي شود يك سطح اعتبار گذرواژه را انتخاب كنيد. به خاطر داشته باشيد اگر 2 را براي قويترين سطح وارد كنيد ، بايد گذرواژه اي شامل اعداد ، حروف بزرگ و كوچك و علائم خاص وارد كنيد ، در غير اين صورت خطايي دريافت خواهيد كرد.
There are three levels of password validation policy:

LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

صرف نظر از اين كه شما تصميم به تنظيم PLUGIN VALIDATE PASSWORD گرفته ايد ، سرور مجازي از شما درخواست مي كند كه يك رمز عبور را براي كاربر ريشه MySQL انتخاب و تأييد كنيد. اين كاربر نبايد با كاربر ريشه سيستم اشتباه گرفته شود. كاربر ريشه بانك اطلاعاتي يك كاربر ادمين با امتيازات كامل براي دسترسي به سيستم ديتابيس است. حتي اگر روش احراز هويت پيش فرض براي كاربر ريشه MySQL ، استفاده از يك رمزعبور را ناديده مي گيرد ، حتي اگر پسوردي تنظيم شده باشد ، بايد يك رمزعبور قوي را در اينجا به عنوان يك اقدام امنيتي اضافي تعريف كنيد. به صورت مختصر به اين مورد خواهيم پرداخت.
اگر اعتبار سنجي رمز عبور را فعال كرده باشيد ، قدرت رمز عبور براي رمز ريشه كه تازه وارد كرده ايد به شما نشان داده مي شود و سرور مجازي تان از شما سؤال مي كند كه آيا مي خواهيد با آن رمز عبور ادامه دهيد يا خير. اگر از گذرواژه فعلي خود راضي هستيد ، “yes” را وارد كنيد:
Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
براي بقيه سؤالات ، Y را فشار داده و در هر اعلان كليد ENTER را بزنيد. با اين كار برخي از كاربران ناشناس و بانك اطلاعاتي آزمايشي حذف مي شوند ، ورود به سيستم ريشه از راه دور غيرفعال مي شود و اين قوانين جديد بارگذاري مي شوند تا MySQL فوراً با تغييراتي كه ايجاد كرده ايد منطبق شود.
پس از اتمام ، مي توانيد با تايپ دستور زير بررسي كنيد كه آيا ميتوانيد به كنسول MySQL وارد شويد:
⦁ sudo mysql

با اين كار به سرور مجازي MySQL به عنوان كاربر ريشه پايگاه داده ادمين متصل مي شويد ، كه با استفاده از sudo هنگام اجراي اين دستور استنباط مي شود. بايد خروجي مانند اين را مشاهده كنيد:
Output
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 22
Server version: 8.0.19-0ubuntu5 (Ubuntu)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the current input statement.

mysql>

براي خروج از كنسول MySQL ، اين دستور را تايپ كنيد:
mysql> exit

توجه كنيد كه لازم نيست براي اتصال به عنوان كاربر اصلي ، گذرواژه ارائه كنيد ، حتي اگر هنگام اجراي اسكريپت mysql_secure_installation ، پسوردي تعريف كرده باشيد. اين بدان دليل است كه روش تأييد اعتبار پيش فرض براي كاربر MySQL ادمين به جاي رمز عبور، روش unix_socket است. حتي اگر ممكن است اين مسئله در ابتدا يك نگراني امنيتي به نظر برسد ، باعث مي شود سرور مجازي پايگاه داده ايمن تر شود زيرا تنها كاربراني كه اجازه ورود به عنوان كاربر ريشه MySQL را دارند ، كاربران سيستم با امتيازات sudo هستند كه از طريق كنسول يا برنامه اي با همان امتيازات ، وارد سيستم مي شوند. در عمل ، اين بدان معناست كه شما قادر نخواهيد بود از كاربر ريشه پايگاه داده ادمين براي اتصال به برنامه PHP خود استفاده كنيد. در صورت تغيير روش احراز هويت پيش فرض از unix_socket به رمز عبور، تنظيم گذرواژه براي حساب ريشه MySQL به عنوان محافظ عمل مي كند.
براي افزايش امنيت ، بهتر است براي هر بانك اطلاعاتي ، حسابهاي كاربري اختصاصي با امتيازات گسترده تري تنظيم كنيد ، به خصوص اگر قصد داريد چندين پايگاه داده را در سرور مجازي خود داشته باشيد.
توجه: در زمان نوشتن اين راهنما، كتابخانه بومي MySQL PHP ، يعني mysqlnd از caching_sha2_authentication، روش احراز هويت پيش فرض براي MySQL 8، پشتيباني نمي كند. به همين دليل ، هنگام ايجاد كاربران ديتابيس براي برنامه هاي PHP در MySQL 8 ، بايد مطمئن باشيد كه به گونه اي پيكربندي كرده ايد كه به جاي آن از mysql_native_password استفاده كنند. ما در مرحله 6 نحوه انجام اين كار را نشان خواهيم داد.

سرور مجازي MySQL شما اكنون نصب و ايمن شده است. در مرحله بعد ، PHP ، مؤلفه نهايي را در پشته LAMP نصب خواهيم كرد.
مرحله 3 – نصب PHP
شما Apache را براي ارائه خدمات خود و MySQL را براي ذخيره سازي و مديريت داده هاي خود نصب كرده ايد. PHP مؤلفه اي از ستاپ ما است كه كد را براي نمايش محتواي پويا به كاربر نهايي پردازش مي كند. علاوه بر بسته php ، به php-mysql ، يك ماژول PHP نياز خواهيد داشت كه به PHP اجازه مي دهد تا با بانكهاي اطلاعاتي مبتني بر MySQL ارتباط برقرار كند. براي فعال سازي Apache براي مديريت فايل هاي PHP ، به libapache2-mod-php نيز نياز خواهيد داشت. بسته هاي اصلي PHP بصورت خودكار به عنوان متعلقات نصب مي شوند.
براي نصب اين بسته ها ، اين دستور را اجرا كنيد:
⦁ $ sudo apt install php libapache2-mod-php php-mysql

پس از اتمام نصب ، مي توانيد دستور زير را براي تأييد نسخه PHP خود اجرا كنيد:
⦁ $ php -v

Output
PHP 7.4.3 (cli) (built: Mar 26 2020 20:24:23) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

در اين مرحله ، پشته LAMP شما كاملاً عملياتي است ، اما قبل از اينكه بتوانيد تنظيمات خود را با يك اسكريپت PHP تست كنيد ، بهتر است يك هاست مناسب Apache Virtual را براي نگهداري فايل ها و پوشه هاي وب سايت خود تنظيم كنيد. ما اين كار را در مرحله بعدي انجام خواهيم داد.
مرحله 4 – ايجاد يك هاست مجازي براي وب سايت خود
هنگام استفاده از وب سرور مجازي Apache ، مي توانيد هاست هاي مجازي (مشابه بلوك هاي سرور مجازي در Nginx) ايجاد كنيد تا جزئيات پيكربندي را كپسوله كنيد و هاست بيش از يك دامنه از يك سرور واحد باشيد. در اين راهنما دامنه اي به نام your_domain تنظيم خواهيم كرد ، اما شما بايد آن را با نام دامنه خود جايگزين كنيد.
Apache در Ubuntu 20.04 داراي يك بلوك سرور مجازي است كه بصورت پيش فرض فعال شده است تا براي ارائه اسناد از ديركتوري / var / www / html پيكربندي شود. اگرچه براي اين يك سايت واحد به خوبي كار مي كند ، اما اگر هاست چندين سايت باشيد ، مي تواند مشكل ساز شود. به جاي اصلاح / var / www / html ، يك ساختار دايركتوري را در / var / www براي سايت your_domain ايجاد خواهيم كرد ، و / var / www / html را در جاي خود به عنوان دايركتوري پيش فرض قرار مي دهيم كه در صورتي كه درخواست كلاينت با هيچ يك از سايت ها منطبق نبود، ارائه شود.
دايركتوري براي your_domain را به شرح زير ايجاد كنيد:
⦁ $ sudo mkdir /var/www/your_domain

در مرحله بعد ، مالكيت دايركتوري را به متغير محيط $USER اختصاص دهيد ، كه كاربر فعلي سيستم شما را ارجاع خواهد داد:
⦁ $ sudo chown -R $USER:$USER /var/www/your_domain

سپس ، با استفاده از ويرايشگر خط فرمان مورد نظر خود ، يك فايل پيكربندي جديد در ديركتوري sites-available Apache باز كنيد. در اينجا ، ما از nano استفاده خواهيم كرد:
⦁ $ sudo nano /etc/apache2/sites-available/your_domain.conf

با اين كار يك فايل جديد خالي ايجاد مي شود. پيكربندي بدون اسكلت زير را در آن قرار دهيد:
/etc/apache2/sites-available/your_domain.conf

ServerName your_domain
ServerAlias www.your_domain
ServerAdmin webmaster@localhost
DocumentRoot /var/www/your_domain
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

پس از اتمام كار فايل را ذخيره كنيد و ببنديد. اگر از nano استفاده ميكنيد ميتوانيد با فشردن CTRL+X سپس Yو ENTERاين كار را انجام دهيد.
با استفاده از اين پيكربندي VirtualHost ، به Apache مي گوييم تا با استفاده از / var / www / your_domain به عنوان دايركتوري ريشه وب ، به your_domain سرويس دهي كند. اگر مي خواهيد Apache را بدون نام دامنه تست كنيد ، مي توانيد با اضافه كردن يك كاراكتر # در ابتداي خطوط هر گزينه ، گزينه هاي ServerName و ServerAlias ​​را حذف يا اضافه كنيد.
اكنون مي توانيد از a2ensite براي فعال كردن هاست مجازي جديد استفاده كنيد:
⦁ $ sudo a2ensite your_domain

ممكن است بخواهيد وب سايت پيش فرض نصب شده با Apache را غيرفعال كنيد. در صورت عدم استفاده از نام دامنه سفارشي لازم نيست زيرا در اين حالت پيكربندي پيش فرض Apache باعث مي شود هاست مجازي شما بازنويسي شود. براي غيرفعال كردن وب سايت پيش فرض Apache ، اين دستور را تايپ كنيد:
⦁ $ sudo a2dissite 000-default

براي اطمينان از اينكه فايل پيكربندي شما حاوي خطاهاي نحوي نيست ، اجرا كنيد:
⦁ $ sudo apache2ctl configtest

در آخر ، Apache را مجدد لود كنيد تا اين تغييرات به مرحله اجرا درآيند:
⦁ $ sudo systemctl reload apache2

وب سايت جديد شما اكنون فعال است ، اما ريشه وب / var / www / your_domain هنوز خالي است. يك فايل index.html در آن مكان ايجاد كنيد تا بتوانيم آزمايش كنيم كه هاست مجازي مطابق آنچه انتظار مي رود كار ميكند:
⦁ $ nano /var/www/your_domain/index.html

محتواي زير را در اين فايل وارد كنيد:
/var/www/your_domain/index.html


your_domain website


Hello World!

This is the landing page of your_domain.



اكنون به مرورگر خود برويد و يك بار ديگر به نام دامنه يا آدرس IP سرور مجازي خود دسترسي پيدا كنيد:
http://server_domain_or_IP

صفحه اي را به اين شكل مشاهده خواهيد كرد:

اگر اين صفحه را مشاهده كرديد ، به اين معني است كه هاست مجازي Apache شما مطابق آنچه انتظار مي رود كار مي كند.
مي توانيد تا زماني كه يك فايل index.php تنظيم كنيد تا جايگزين آن شود ، اين فايل را به صورت يك صفحه فرود موقت براي برنامه خود باقي بگذاريد. پس از انجام اين كار ، به ياد داشته باشيد كه فايل index.html را از ريشه سند خود حذف يا تغيير نام دهيد ، زيرا به طور پيش فرض بر يك فايل index.php پيشي مي گيرد.
نكته اي درباره DirectoryIndex در Apache
با تنظيمات پيش فرض DirectoryIndex در Apache ، فايلي با نام index.html هميشه بر فايل index.php اولويت خواهد داشت. اين ويژگي براي ايجاد صفحات نگهداري در برنامه هاي PHP ، با ايجاد يك فايل موقت index.html حاوي يك پيام آموزنده براي بازديد كنندگان ، مفيد است. از آنجا كه اين صفحه بر صفحه index.php ارجحيت دارد ، سپس به صفحه فرود برنامه تبديل خواهد شد. پس از اتمام نگهداري، index.html تغيير نام داده يا از ريشه سند خارج مي شود و صفحه برنامه معمولي را برمي گرداند.
اگر مي خواهيد اين رفتار را تغيير دهيد ، بايد فايل /etc/apache2/mods-enabled/dir.conf را ويرايش كرده و نظمي را كه در آن ديركتوري index.php در دستورالعمل DirectoryIndex ذكر شده است اصلاح كنيد:
⦁ $ sudo nano /etc/apache2/mods-enabled/dir.conf

/etc/apache2/mods-enabled/dir.conf

DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm

پس از ذخيره و بستن فايل ، بايد Apache را مجدد لود كنيد تا تغييرات به مرحله اجرا در بيايند:
⦁ $ sudo systemctl reload apache2

در مرحله بعد ، ما يك اسكريپت PHP ايجاد خواهيم كرد تا آزمايش كنيم كه PHP به درستي روي سرور مجازي شما نصب شده و پيكربندي شده است.
مرحله 5 – تست پردازش PHP در وب سرور مجازي خود
اكنون كه يك مكان سفارشي براي ميزباني فايل ها و پوشه هاي وب سايت خود داريد ، يك اسكريپت تست PHP ايجاد خواهيم كرد تا تأييد كند كه Apache قادر به مديريت و پردازش درخواست هاي فايل هاي PHP است.
يك فايل جديد با نام info.php را در پوشه ريشه وب سفارشي خود ايجاد كنيد:
⦁ $ nano /var/www/your_domain/info.php

اين دستور يك فايل خالي را باز مي كند. متن زير را كه كد PHP معتبر است ، داخل فايل اضافه كنيد:
/var/www/your_domain/info.php
phpinfo();

پس از اتمام ، فايل را ذخيره كنيد و ببنديد.
براي تست اين اسكريپت ، به مرورگر وب خود برويد و به نام دامنه يا آدرس IP سرور مجازي خود ، كه پس از آن نام اسكريپت وجود دارد دسترسي پيدا كنيد ، كه در اين حالت info.php است:
http://server_domain_or_IP/info.php
صفحه اي شبيه به اين را مشاهده خواهيد كرد:

اين صفحه اطلاعاتي را در مورد سرور مجازي شما از منظر PHP ارائه مي دهد كه براي اشكال زدايي مفيد است و اطمينان حاصل ميكند كه تنظيمات شما به درستي اعمال مي شوند.
اگر مي توانيد اين صفحه را در مرورگر خود مشاهده كنيد ، نصب PHP شما مطابق آنچه انتظار مي رود كار مي كند.
پس از بررسي اطلاعات مربوط به سرور مجازي PHP خود از طريق آن صفحه ، بهتر است فايل ايجاد شده را حذف كنيد زيرا حاوي اطلاعات حساسي در مورد محيط PHP شما و سرور مجازي Ubuntu شماست. براي اين كار مي توانيد از rm استفاده كنيد:
⦁ $ sudo rm /var/www/your_domain/info.php

در صورت نياز به دسترسي مجدد به اطلاعات ، هميشه مي توانيد اين صفحه را مجدداً ايجاد كنيد.
مرحله 6 – آزمايش اتصال به بانك اطلاعاتي از PHP (اختياري)
اگر مي خواهيد تست كنيد كه آيا PHP قادر به اتصال به MySQL و اجراي پرس و جوهاي پايگاه داده است، مي توانيد يك جدول آزمايشي با داده هاي ساختگي و جستجوي مطالب آن از يك اسكريپت PHP ايجاد كنيد. قبل از اينكه بتوانيم اين كار را انجام دهيم ، بايد يك پايگاه داده آزمايشي و يك كاربر جديد MySQL براي دسترسي به آن را به درستي پيكربندي كنيم.
در زمان نوشتن اين مقاله، كتابخانه بومي MySQL PHP ، mysqlnd از caching_sha2_authentication، روش تأييد اعتبار پيش فرض براي MySQL 8 پشتيباني نمي كند. براي اينكه بتوانيم از PHP به آن متصل شويم ، نياز به ايجاد كاربر جديد با تاييد اعتبار mysql_native_password داريم.
يك ديتابيس با نام example_database و كاربري با نام example_user ايجاد خواهيم كرد ، اما مي توانيد اين نام ها را با مقادير مختلف جايگزين كنيد.
ابتدا با استفاده از حساب ريشه به كنسول MySQL وصل شويد:
⦁ $ sudo mysql

براي ايجاد يك پايگاه داده جديد ، دستور زير را از كنسول MySQL خود اجرا كنيد:
⦁ mysql> CREATE DATABASE example_database;

اكنون مي توانيد يك كاربر جديد ايجاد كنيد و در پايگاه داده سفارشي كه اخيراً ايجاد كرده ايد ، به آنها امتياز دهيد.
دستور زير با استفاده از mysql_native_password به عنوان يك روش تأييد اعتبار پيش فرض كاربر جديدي به نام example_user ايجاد مي كند. ما رمزعبور اين كاربر را به عنوان PASWORD تعريف مي كنيم ، اما شما بايد اين مقدار را با يك رمز عبور مطمئن به انتخاب خود جايگزين كنيد.
⦁ mysql> CREATE USER ‘example_user’@’%’ IDENTIFIED WITH mysql_native_password BY ‘password’;

اكنون بايد به اين كاربر اجازه به پايگاه داده example_database را بدهيم:
⦁ mysql> GRANT ALL ON example_database.* TO ‘example_user’@’%’;

اين كار به كاربر example_user دسترسي كامل به بانك اطلاعاتي example_database را مي دهد ، در حالي كه از ايجاد يا تغيير ساير پايگاه هاي داده روي سرور مجازي شما جلوگيري مي كند.
اكنون از پوسته MySQL خارج شويد:
⦁ Mysql> exit

با ورود دوباره به كنسول MySQL ، اين بار با استفاده از اعتبار كاربر سفارشي مي توانيد آزمايش كنيد كه آيا كاربر جديد داراي مجوزهاي مناسب است.
⦁ $ mysql -u example_user -p

در اين دستور ، به پرچم -p توجه كنيد ، كه رمز عبوري كه در هنگام ايجاد كاربر example_user استفاده كرديد را از شما ميخواهد. پس از ورود به كنسول MySQL ، تأييد كنيد كه به بانك اطلاعاتي example_database دسترسي داريد:
⦁ Mysql> SHOW DATABASES;

اين كار خروجي زير را به شما مي دهد:
Output
+——————–+
| Database |
+——————–+
| example_database |
| information_schema |
+——————–+
2 rows in set (0.000 sec)

در مرحله بعد ، يك جدول آزمايشي با نام todo_list ايجاد خواهيم كرد. از كنسول MySQL عبارت زير را اجرا كنيد:
⦁ Mysql> CREATE TABLE example_database.todo_list (

⦁ Mysql> item_id INT AUTO_INCREMENT,

⦁ Mysql> content VARCHAR(255),

⦁ Mysql> PRIMARY KEY(item_id)

⦁ Mysql> );

چند رديف محتوا را در جدول آزمون وارد كنيد. ممكن است بخواهيد با استفاده از مقادير مختلف دستور بعدي را چند بار تكرار كنيد:
⦁ Mysql> INSERT INTO example_database.todo_list (content) VALUES (“My first important item”);

براي تأييد اينكه داده ها با موفقيت در جدول شما ذخيره شده اند ، اجرا كنيد:
⦁ Mysql> SELECT * FROM example_database.todo_list;

خروجي زير را مشاهده خواهيد كرد:
Output
+———+————————–+
| item_id | content |
+———+————————–+
| 1 | My first important item |
| 2 | My second important item |
| 3 | My third important item |
| 4 | and this one more thing |
+———+————————–+
4 rows in set (0.000 sec)

پس از تأييد اينكه داده هاي معتبري در جدول آزمون خود داريد ، مي توانيد از كنسول MySQL خارج شويد:
Mysql> exit
اكنون مي توانيد اسكريپت PHP را ايجاد كنيد كه به MySQL متصل شود و محتواي شمار را پرس و جو كنيد. با استفاده از ويرايشگر مورد نظر خود ، يك فايل PHP جديد را در ديركتوري ريشه وب خود ايجاد كنيد. ما براي اين كار از nano استفاده خواهيم كرد:
⦁ $ nano /var/www/your_domain/todo_list.php

اسكريپت PHP زير به پايگاه داده MySQL متصل ميشود و براي محتواي جدول todo_list پرس و جو ميكند و نتايج را در يك ليست نمايش مي دهد. اگر در ارتباط با بانك اطلاعاتي مشكلي وجود داشته باشد ، يك استثنا به وجود مي آورد.
اين محتوا را در متن todo_list.php كپي كنيد:
/var/www/your_domain/todo_list.php
$user = “example_user”;
$password = “password”;
$database = “example_database”;
$table = “todo_list”;

try {
$db = new PDO(“mysql:host=localhost;dbname=$database”, $user, $password);
echo “

TODO

    ”;
    foreach($db->query(“SELECT content FROM $table”) as $row) {
    echo “
  1. ” . $row[‘content’] . “
  2. ”;
    }
    echo “
”;
} catch (PDOException $e) {
print “Error!: ” . $e->getMessage() . “
”;
die();
}

پس از پايان ويرايش ، فايل را ذخيره كنيد و ببنديد.
اكنون مي توانيد با مراجعه به نام دامنه يا آدرس IP عمومي كه براي وب سايت شما پيكربندي شده و پس از آن /todo_list.php نوشته شده، به اين صفحه در مرورگر وب خود دسترسي پيدا كنيد :
http://your_domain_or_IP/todo_list.php

بايد صفحه اي مانند اين را مشاهده كنيد ، كه محتوياتي را كه در جدول آزمايش خود وارد كرده ايد نشان دهد:

اين بدان معناست كه محيط PHP شما آماده اتصال و تعامل با سرور مجازي MySQL است.
نتيجه
در اين راهنما ، ما با استفاده از Apache به عنوان سرور مجازي وب و MySQL به عنوان سيستم پايگاه داده ، پايه اي انعطاف پذير براي ارائه وب سايت ها و برنامه هاي PHP به بازديد كنندگان شما ايجاد كرده ايم.
به عنوان مرحله فوري بعدي ، بايد با ارائه اتصالات از طريق HTTPS اطمينان حاصل كنيد كه اتصالات به سرور مجازي وب شما ايمن هستند. به منظور تحقق اين امر ، مي توانيد از Let’s Encrypt براي امنيت سايت خود با مجوز TLS / SSL رايگان استفاده كنيد.

 

برچسب‌ها:ApacheLinuxMySQLPHP

نصب وب سرور Apache در CentOS 8

۶۵ بازديد

سرور مجازي Apache HTTP پركاربردترين وب سرور مجازي در جهان است. اين نرم افزار بسياري از ويژگي هاي قدرتمند از جمله ماژول هاي قابل لود پويا ، پشتيباني رسانه اي قوي و ادغام گسترده با ساير نرم افزارهاي محبوب را ارائه مي دهد.
در اين راهنما يك سرور مجازي وب Apache با هاست هاي مجازي روي سرور مجازي CentOS 8 خود نصب خواهيد كرد.
پيش نيازها
براي تكميل اين راهنما به موارد زير نياز داريد:
• يك كاربر غير ريشه با امتيازات sudo كه در سرور مجازي شما پيكربندي شده باشد ، و با دنبال كردن راهنماي اوليه ستاپ سرور مجازي براي CentOS 8 تنظيم شده باشد.
• با پيروي از مرحله 4 تنظيم اوليه سرور مجازي با CentOS 8 (مرحله توصيه شده) در راهنماي بالا ، اطمينان حاصل كنيد كه يك فايروال پايه پيكربندي شده است.
مرحله 1 – نصب Apache
Apache در مخازن پيش فرض نرم افزار CentOS موجود است ، به اين معني كه مي توانيد آن را با مدير بسته dnf نصب كنيد.
وقتي كه كاربر sudo غير ريشه در پيش نيازها پيكربندي شد ، بسته Apache را نصب كنيد:
⦁ $ sudo dnf install httpd

پس از تأييد نصب ، dnf ، Apache و كليه متعلقات مورد نياز را نصب مي كند.
با تكميل مرحله 4 راهنماي ستاپ اوليه سرور مجازي CentOS 8 ذكر شده در بخش پيش نيازها ، در حال حاضر firewalld  را بر روي سرور مجازي خود نصب كرده ايد تا درخواست هاي روي HTTP را انجام دهيد.
اگر همچنين قصد داريد Apache را براي ارائه محتوا از طريق HTTPS پيكربندي كنيد ، بهتر اسن با فعال كردن سرويس https ، پورت 443 را نيز باز كنيد:
⦁ $ sudo firewall-cmd –permanent –add-service=https

در مرحله بعد ، فايروال را مجدد لود كنيد تا اين قوانين جديد به مرحله اجرا در بيايند:
⦁ $ sudo firewall-cmd –reload

پس از لود مجدد فايروال ، شما آماده شروع سرويس و بررسي سرور مجازي وب هستيد.
مرحله 2 – بررسي سرور مجازي وب خود
Apache پس از اتمام نصب به طور خودكار از CentOS شروع نمي شود ، بنابراين شما نياز به شروع فرآيند Apache به صورت دستي داريد:
⦁ $ sudo systemctl start httpd

با دستور زير تأييد كنيد كه اين سرويس در حال اجرا است:
⦁ $ sudo systemctl status httpd

هنگام اجراي سرويس وضعيت فعال را دريافت خواهيد كرد:
Output
● httpd.service – The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disa>
Active: active (running) since Thu 2020-04-23 22:25:33 UTC; 11s ago
Docs: man:httpd.service(8)
Main PID: 14219 (httpd)
Status: “Running, listening on: port 80”
Tasks: 213 (limit: 5059)
Memory: 24.9M
CGroup: /system.slice/httpd.service
├─14219 /usr/sbin/httpd -DFOREGROUND
├─14220 /usr/sbin/httpd -DFOREGROUND
├─14221 /usr/sbin/httpd -DFOREGROUND
├─14222 /usr/sbin/httpd -DFOREGROUND
└─14223 /usr/sbin/httpd -DFOREGROUND

در اين مرحله، اين سرويس با موفقيت شروع شده است. با اين حال ، بهترين راه براي آزمايش، درخواست يك صفحه از Apache است.
براي تأييد صحت اجراي نرم افزار از طريق آدرس IP خود ، مي توانيد به صفحه فرود پيش فرض Apache دسترسي پيدا كنيد. اگر آدرس IP سرور مجازي خود را نمي دانيد ، مي توانيد آن را چند راه مختلف از خط فرمان دريافت كنيد.
براي بازگشت به خط فرمان q و سپس دستور زير را تايپ كنيد:
⦁ $ hostname -I

اين دستور همه آدرس هاي شبكه هاست را نشان مي دهد ، بنابراين شما چند آدرس IP را كه با space جدا شده اند ، دريافت خواهيد كرد. مي توانيد هر يك از مرورگرهاي وب خود را امتحان كنيد تا مشخص شود كه آيا كار مي كنند يا خير.
از طرف ديگر ، مي توانيد از Curl براي درخواست IP خود از icanhazip.com استفاده كنيد ، كه آدرس IPv4 عمومي شما را به عنوان خوانده شده از يك مكان ديگر در اينترنت به شما مي دهد:
⦁ $ curl -4 icanhazip.com

هنگامي كه آدرس IP سرور مجازي خود را پيدا كرديد ، آن را در نوار آدرس مرورگر خود وارد كنيد:
http://your_server_ip
صفحه پيش فرض CentOS 8 Apache را مشاهده خواهيد كرد:

اين صفحه نشان مي دهد كه Apache درست كار مي كند. اين برنامه همچنين شامل برخي از اطلاعات اوليه در مورد فايل هاي مهم Apache و مكان هاي دايركتوري است.
مرحله 3 – مديريت فرايند Apache
اكنون كه سرويس نصب و راه اندازي شده است ، مي توانيد از دستورات مختلف systemctl براي مديريت سرويس استفاده كنيد.
براي متوقف كردن سرور مجازي وب خود ، تايپ كنيد:
⦁ $ sudo systemctl stop httpd

براي شروع سرور مجازي وب وقتي متوقف است ، تايپ كنيد:
⦁ $ sudo systemctl start httpd

براي متوقف كردن و شروع مجدد سرويس ، تايپ كنيد:
⦁ $ sudo systemctl restart httpd

اگر به سادگي تغييرات پيكربندي را انجام مي دهيد ، Apache اغلب مي تواند بدون افت اتصالات مجدد لود شود. براي انجام اين كار ، از اين دستور استفاده كنيد:
⦁ $ sudo systemctl reload httpd

به طور پيش فرض ، Apache به گونه اي تنظيم مي شود كه به طور خودكار شروع به كار كند. اگر اين چيزي نيست كه مي خواهيد ، با تايپ كردن دستور زير اين رفتار را غيرفعال كنيد:
⦁ $ sudo systemctl disable httpd

براي فعال كردن مجدد سرويس در هنگام بوت، اين دستور را تايپ كنيد:
⦁ $ sudo systemctl enable httpd

با دوباره بوت شدن سرور مجازي ، Apache به طور خودكار شروع مي شود.
پيكربندي پيش فرض براي Apache به سرور مجازي شما امكان ميزباني وب سايت واحد را مي دهد. اگر قصد داريد هاست چندين دامنه در سرور مجازي خود باشيد ، بايد هاست هاي مجازي را در سرور مجازي وب Apache خود پيكربندي كنيد.
مرحله 4 – تنظيم هاست هاي مجازي (توصيه مي شود)
هنگام استفاده از وب سرور مجازي Apache ، براي كپسوله كردن جزئيات پيكربندي و ميزباني بيش از يك دامنه از يك سرور مجازي واحد مي توانيد از هاست هاي مجازي استفاده كنيد )اگر با Nginx بيشتر آشنا هستيد ، اين ها به بلوك هاي سرور مجازي شباهت دارند). در اين مرحله دامنه اي به نام example.com را تنظيم مي كنيد ، اما بايد اين نام را با نام دامنه خود جايگزين كنيد.
Apache در CentOS 8 داراي يك هاست مجازي است كه بصورت پيش فرض فعال شده است تا براي ارائه اسناد از دايركتوري / var / www / html پيكربندي شود. اگرچه براي يك سايت واحد به خوبي كار مي كند ، اگر هاست چندين سايت باشيد ، مي تواند مشكل آفرين شود. به جاي تغيير / var / www / html ، يك ساختار دايركتوري را در / var / www براي سايت example.com ايجاد خواهيد كرد ، و / var / www / html را در جاي خود به عنوان دايركتوري پيش فرض قرار مي دهيد كه در صورتي كه درخواست كلاينت با هيچ سايت ديگري مطابقت نداشت، ارائه شود.
دايركتوري html را براي example.com به شرح زير بسازيد ، از پرچم -p براي ايجاد دايركتوري هاي لازم استفاده كنيد:
⦁ $ sudo mkdir -p /var/www/example.com/html

دايركتوري ديگري را براي ذخيره فايل هاي ورود به سايت ايجاد كنيد:
⦁ $ sudo mkdir -p /var/www/example.com/log

سپس ، مالكيت دايركتوري html را به متغير محيطي $ USER اختصاص دهيد:
⦁ $ sudo chown -R $USER:$USER /var/www/example.com/html

مطمئن شويد كه ريشه وب شما داراي مجموعه مجوزهاي پيش فرض است
⦁ $ sudo chmod -R 755 /var/www

سپس ، با استفاده از vi يا ويرايشگر مورد علاقه خود ، صفحه index.html نمونه را ايجاد كنيد:
⦁ $ sudo vi /var/www/example.com/html/index.html

i را فشار دهيد تا به حالت INSERT برويد و نمونه HTML زير را به فايل اضافه كنيد:
/var/www/example.com/html/index.html


Welcome to Example.com!


Success! The example.com virtual host is working!



با فشردن ESC ، تايپwq و زدن ENTER فايل را ذخيره كنيد و ببنديد.
با وجود دايركتوري سايت و نمونه فايل درج شده ، تقريباً آماده ايجاد فايل هاي هاست مجازي هستيد. فايلهاي هاست مجازي پيكربندي سايتهاي جداگانه شما را مشخص مي كنند و به سرور مجازي وب Apache نشان مي دهند كه چگونه به درخواستهاي دامنه مختلف پاسخ دهد.
قبل از ايجاد هاست مجازي خود ، بايد يك دايركتوري sites-available ايجاد كنيد تا آنها را در آن ذخيره كنيد. همچنين دايركتوري sites-enabled ايجاد خواهيد كرد كه به Apache مي گويد يك هاست مجازي آماده خدمت به بازديد كنندگان است. دايركتوري sites-enabled پيوندهاي سمبوليكي را براي هاست هاي مجازي كه مي خواهيم منتشر كنيم ، نگه مي دارد. هر دو دايركتوري را با دستور زير ايجاد كنيد:
⦁ $ sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled

در مرحله بعد ، به Apache مي گوييد كه در دايركتوري sites-enabled به دنبال هاست هاي مجازي باشد. براي دستيابي به اين هدف ، فايل پيكربندي اصلي Apache را با استفاده از vi يا ويرايشگر متن مورد علاقه خود ويرايش كنيد و خطي را اضافه كنيد كه يك دايركتوري اختياري براي فايل هاي پيكربندي اضافي اعلام ميكند:
⦁ $ sudo vi /etc/httpd/conf/httpd.conf

براي رفتن به انتهاي فايل ، G بزرگ را فشار دهيد. سپس i را فشار دهيد تا به حالت INSERT برويد و خط زير را به انتهاي فايل اضافه كنيد:
/etc/httpd/conf/httpd.conf

# Supplemental configuration
#
# Load config files in the “/etc/httpd/conf.d” directory, if any.
IncludeOptional conf.d/*.conf
IncludeOptional sites-enabled/*.conf
پس از افزودن آن خط ، فايل را ذخيره كنيد و ببنديد. اكنون كه دايركتوري هاست مجازي خود را در اختيار داريد ، فايل هاست مجازي خود را ايجاد خواهيد كرد.
با ايجاد يك فايل جديد در دايركتوري سايتهاي موجود شروع كنيد:
⦁ $ sudo vi /etc/httpd/sites-available/example.com.conf

بلوك پيكربندي زير را اضافه كنيد ، و دامنه example.com را به نام دامنه خود تغيير دهيد:
/etc/httpd/sites-available/example.com.conf

ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/example.com/html
ErrorLog /var/www/example.com/log/error.log
CustomLog /var/www/example.com/log/requests.log combined

با اين كار به Apache مي گوييد كه چگونه مستقيماً ريشه اي را كه در دسترس اسناد وب قرار دارد ، پيدا كند. همچنين به Apache مي گويد كه خطا و درخواست ورود به اين سايت خاص را كجا ذخيره كند.
پس از اتمام فايل را ذخيره كنيد و ببنديد.
اكنون كه فايلهاي هاست مجازي را ايجاد كرده ايد ، آنها را فعال خواهيد كرد تا Apache بداند كه مي تواند آنها را در اختيار بازديد كنندگان قرار دهد. براي انجام اين كار ، براي هر هاست مجازي در دايركتوري sites-enabled ، يك لينك نمادين ايجاد كنيد:
⦁ sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf

هاست مجازي شما اكنون پيكربندي شده و آماده ارائه مطالب است. قبل از راه اندازي مجدد سرويس Apache ، مطمئن شويد كه SELinux سياست هاي صحيحي را براي هاست هاي مجازي شما اعمال كرده است.
مرحله 5 – تنظيم مجوزهاي SELinux براي هاست هاي مجازي (توصيه مي شود)
SELinux يك ماژول امنيتي هسته لينوكس است كه امنيت سيستم هاي لينوكس را افزايش مي دهد. CentOS 8 به SELinux پيكربندي شده براي كار با تنظيمات پيش فرض Apache مجهز شده است. از آنجا كه پيكربندي پيش فرض را با تنظيم دايركتوري ورود به سيستم سفارشي در فايل پيكربندي هاست مجازي تغيير داده ايد ، در صورت تلاش براي شروع سرويس Apache ، خطايي دريافت خواهيد كرد. براي رفع اين مشكل ، شما بايد رويكردهاي SELinux را به روز كنيد تا Apache بتواند در فايل هاي لازم بنويسد.
روشهاي مختلفي براي تنظيم رويكردها بر اساس نياز محيط شما وجود دارد زيرا SELinux به شما اجازه مي دهد سطح امنيتي خود را شخصي سازي كنيد. اين مرحله شامل دو روش تنظيم رويكردهاي Apache خواهد بود: جهاني و در يك دايركتوري خاص. تنظيم رويكرد در دايركتوري ها ايمن تر است ، و بنابراين رويكرد توصيه شده ميباشد.
تنظيم رويكردهاي Apache به صورت جهاني
تنظيم رويكردApache به صورت جهاني به SELinux مي گويد كه با استفاده از بولي httpd_unified ، با تمام مراحل Apache به طور يكسان رفتار كند. اگرچه اين رويكرد راحت تر است ، اما سطح كنترل يكسان با رويكردي كه روي يك فايل يا رويكرد دايركتوري تمركز دارد به شما نمي دهد.
دستور زير را براي تنظيم رويكرد عمومي Apache اجرا كنيد:
⦁ $ sudo setsebool -P httpd_unified 1

دستور setsebool مقادير بولي SELinux را تغيير مي دهد. پرچم -P مقدار زمان بوت را به روز مي كند ، و اين تغيير در ريبوت ادامه مي يابد. httpd_unified بولي است كه به SELinux مي گويد در تمام مراحل Apache به يك صورت رفتار كند ، بنابراين شما آن را با مقدار 1 فعال مي كنيد.
تنظيم رويكردهاي Apache در يك دايركتوري
تنظيم مجوزهاي SELinux به صورت جداگانه براي دايركتوري /var/www/example.com/log به شما امكان كنترل بيشتر روي رويكردهاي Apache را مي دهد ، اما ممكن است به نگهداري بيشتري نيز نياز داشته باشد. از آنجا كه اين گزينه رويكردهاي تنظيم جهاني نيست ، لازم است به طور دستي نوع متن را براي هر دايركتوري جديد وارد كنيد كه در تنظيمات هاست مجازي شما مشخص شده است.
ابتدا نوع زمينه اي را كه SELinux به دايركتوري /var/www/example.com/log داده است بررسي كنيد:
⦁ $ sudo ls -dlZ /var/www/example.com/log/

اين دستور محتواي SELinux دايركتوري را ليست و چاپ مي كند. خروجي مشابه زير را دريافت خواهيد كرد:
Output
drwxr-xr-x. 2 root root unconfined_u:object_r:httpd_sys_content_t:s0 6 Apr 23 23:51 /var/www/example.com/log/

زمينه فعلي httpd_sys_content_t است ، كه به SELinux مي گويد فرآيند Apache فقط مي تواند فايل هاي ايجاد شده در اين دايركتوري را بخواند. در اين آموزش ، نوع متن دايركتوري /var/www/example.com/log را به آدرس httpd_log_t تغيير مي دهيد. اين حالت به Apache امكان مي دهد فايل هاي ورود به سيستم برنامه وب را توليد و پيوست كند:
⦁ $ sudo semanage fcontext -a -t httpd_log_t “/var/www/example.com/log(/.*)?”

در مرحله بعدي ، از دستور restorecon براي اعمال اين تغييرات استفاده كنيد و آنها را در ريبوت ادامه دهيد:
⦁ $ sudo restorecon -R -v /var/www/example.com/log

پرچم -R اين دستور را به صورت بازگشتي اجرا مي كند ، به اين معني كه هر فايل موجود را براي استفاده از متن جديد به روز مي كند. پرچم -v تغييرات متني كه فرمان ايجاد كرده را چاپ مي كند. خروجي زير را دريافت خواهيد كرد
Output
Relabeled /var/www/example.com/log from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:httpd_log_t:s0
براي ديدن تغييرات مي توانيد يك بار ديگر محتوا را ليست كنيد:
⦁ $ sudo ls -dlZ /var/www/example.com/log/

خروجي نوع متن به روز شده را منعكس مي كند:
Output
drwxr-xr-x. 2 root root unconfined_u:object_r:httpd_log_t:s0 6 Apr 23 23:51 /var/www/example.com/log/

اكنون كه دايركتوري /var/www/example.com/log از نوع httpd_log_t استفاده مي كند ، آماده آزمايش پيكربندي هاست مجازي خود هستيد.
مرحله 6 – آزمايش هاست مجازي (توصيه مي شود)
پس از به روزرساني متن SELinux با هر روشي ، Apache مي تواند در دايركتوري /var/www/example.com/log بنويسد. اكنون مي توانيد سرويس Apache را با موفقيت مجدداً راه اندازي كنيد:
⦁ $ sudo systemctl restart httpd

محتويات دايركتوري /var/www/example.com/log را ليست كنيد تا ببينيد آيا Apache فايلهاي ورود را ايجاد كرده است:
⦁ $ ls -lZ /var/www/example.com/log

تأييديه اي دريافت خواهيد كرد كه Apache قادر به ايجاد فايل هاي error.log و requests.log مشخص شده در پيكربندي هاست مجازي است:
Output
-rw-r–r–. 1 root root system_u:object_r:httpd_log_t:s0 0 Apr 24 00:06 error.log
-rw-r–r–. 1 root root system_u:object_r:httpd_log_t:s0 0 Apr 24 00:06 requests.log

اكنون كه هاست مجازي خود را تنظيم كرده و مجوزهاي SELinux را به روز كرده ايد ، Apache اكنون نام دامنه شما را ارائه مي دهد. مي توانيد با رفتن به http://example.com ، اين را آزمايش كنيد، كه بايد چيزي شبيه به اين را مشاهده كنيد:

اين عبارت تأييد مي كند كه هاست مجازي شما با موفقيت پيكربندي شده و محتوا را ارائه ميكند. مراحل 4 و 5 را تكرار كنيد تا هاست مجازي جديدي با مجوز SELinux براي دامنه هاي بيشتر ايجاد كنيد.
نتيجه
در اين آموزش وب سرور مجازي Apache را نصب و مديريت كرده ايد. اكنون كه سرور مجازي وب خود را نصب كرده ايد ، گزينه هاي بسياري را براي نوع محتوايي كه مي توانيد ارائه كنيد و فناوري هايي كه مي توانيد براي ايجاد يك تجربه بهتر استفاده نماييد ، در اختيار داريد.
اگر مي خواهيد يك برنامه كاربردي كاملتر ايجاد كنيد ، مي توانيد در اين مقاله به نحوه پيكربندي پشته LAMP در CentOS 8 مراجعه نماييد.

 

برچسب‌ها:Apachecentos 8HTTPS

نحوه نصب Drupal با Docker Compose

۶۳ بازديد

 يك سيستم مديريت محتوا (CMS) است كه به زبان PHP نوشته شده و تحت مجوز عمومي منبع آزاد GNU توزيع مي شود. مردم و سازمانهاي مختلف در سراسر جهان از Drupal براي ايجاد سايتهاي دولتي ، وبلاگ هاي شخصي ، كسب و كارها و موارد ديگر استفاده مي كنند. آنچه Drupal را از ساير چارچوبهاي CMS منحصر به فرد مي كند ، جامعه در حال رشد آن و مجموعه اي از ويژگي هايي است كه شامل فرآيندهاي ايمن ، عملكرد قابل اعتماد ، مدولاريتي (پيمانه اي بودن) و انعطاف پذيري در انطباق است.
Drupal نياز به نصب پشته LAMP (Linux ، Apache ، MySQLيا PHP) يا پشته LEMP (Linux، Nginx ، MySQL و PHP) دارد ، اما نصب تك تك مؤلفه ها يك كار زمان بر است. ما مي توانيم از ابزارهايي مانند Docker و Docker Compose براي ساده كردن روند نصب Drupal استفاده كنيم. در اين آموزش از تصاوير Docker براي نصب مولفه هاي جداگانه در كانتينر Docker استفاده خواهد شد. با استفاده از Docker Compose مي توان چندين كانتينر را براي پايگاه داده ، برنامه و شبكه / ارتباط بين آنها تعريف و مديريت كرد.
در اين آموزش Drupal را با استفاده از Docker Compose نصب خواهيم كرد تا بتوانيم از كانتينرينگ استفاده كرده و وب سايت Drupal خود را روي سرورها مستقر كنيم. كانتينرهايي براي يك پايگاه داده MySQL ، وب سرور مجازي Nginx و Drupal اجرا خواهيم كرد. همچنين با بدست آوردن گواهينامه هاي TLS / SSL با Let’s Encrypt براي دامنه مورد نظر جهت پيوند با سايت خود ، نصب خود را ايمن خواهيم كرد. سرانجام ، يك فرآيند cron را براي تمديد گواهينامه هاي خود تنظيم خواهيم كرد تا دامنه مان ايمن بماند.
پيش نيازها
براي دنبال كردن اين آموزش ، به موارد زير نياز خواهيم داشت:
⦁ سروري كه اوبونتو 18.04 را اجرا مي كند ، به همراه يك كاربر غير ريشه با امتيازات sudo و يك فايروال فعال. براي راهنمايي در مورد نحوه تنظيم اين موارد ، لطفاً به اين راهنماي تنظيم اوليه سرور مجازي مراجعه كنيد.
⦁ Docker كه طبق مراحل 1 و 2 نحوه نصب و استفاده از Docker در اوبونتو 18.04 بر روي سرور مجازي نصب شده باشد. اين آموزش بر روي نسخه 19.03.8 تست شده است.
⦁ Docker Compose كه طبق مرحله 1 نحوه نصب Docker در اوبونتو 18.04 بر روي سرور مجازي نصب باشد. اين آموزش بر روي نسخه 1.21.2 تست شده است.
⦁ نام دامنه ثبت شده. در سراسر اين آموزش از your_domain استفاده خواهد كرد. مي توانيد يك نام دامنه به صورت رايگان در Freenom دريافت كنيد ، و يا از ثبت كننده دامنه مورد نظر خود استفاده كنيد.
⦁ هر دو فايل DNS زير براي سرور مجازي شما تنظيم شده باشد.
⦁ يك ركورد A با your_domain كه به آدرس IP عمومي سرور مجازي شما اشاره كند.
⦁ ركورد A با www.your_domain كه به آدرس IP عمومي سرور مجازي شما نشان مي دهد.
مرحله 1 – تعريف پيكربندي وب سرور
قبل از اجراي هر نوع كانتينر ، بايد پيكربندي سرور مجازي وب Nginx خود را تعريف كنيم. فايل پيكربندي ما شامل برخي از بلوك هاي مكاني مخصوص Drupal ، به همراه بلوك موقعيت مكاني براي هدايت درخواست هاي تأييد Let’s Encrypt به كلاينت Certbot براي تمديد خودكار گواهينامه ميباشد.
ابتدا ، اجازه دهيد يك دايركتوري پروژه براي مجموعه Drupal خود به نام drupal ايجاد كنيم:
⦁ $ mkdir drupal

به ديركتوري جديد ايجاد شده برويد:
⦁ $ cd drupal

اكنون مي توانيم يك دايركتوري براي فايل پيكربندي خود تهيه كنيم:
⦁ $ mkdir nginx-conf

فايل را با nano يا ويرايشگر متن مورد علاقه خود باز كنيد:
⦁ $ nano nginx-conf/nginx.conf

در اين فايل ، يك بلوك سرور مجازي با دستورالعمل هايي براي نام سرور مجازي و ريشه اسناد ، و بلوك هاي مكان براي هدايت درخواست كلاينت Certbot براي صدور گواهينامه ها ، پردازش PHP و درخواست هاي دارايي استاتيك اضافه خواهيم كرد.
كد زير را در فايل اضافه كنيد. حتماً your_domain را با نام دامنه خود جايگزين كنيد:
~/drupal/nginx-conf/nginx.conf
server {
listen 80;
listen [::]:80;

server_name your_domain www.your_domain;

index index.php index.html index.htm;

root /var/www/html;

location ~ /.well-known/acme-challenge {
allow all;
root /var/www/html;
}

location / {
try_files $uri $uri/ /index.php$is_args$args;
}

rewrite ^/core/authorize.php/core/authorize.php(.*)$ /core/authorize.php$1;

location ~ .php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+.php)(/.+)$;
fastcgi_pass drupal:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}

location ~ /.ht {
deny all;
}

location = /favicon.ico {
log_not_found off; access_log off;
}
location = /robots.txt {
log_not_found off; access_log off; allow all;
}
location ~* .(css|gif|ico|jpeg|jpg|js|png)$ {
expires max;
log_not_found off;
}
}

بلوك سرور مجازي ما شامل اطلاعات زير است:
دستورالعمل ها:
⦁ listen: به Nginx مي گويد كه به پورت 80 گوش دهد ، كه به ما اين امكان را مي دهد تا از پلاگين webroot Certbot براي درخواست هاي گواهي خود استفاده كنيم. توجه داشته باشيد كه ما هنوز پورت 443 را دراختيار نداريم – پس از اينكه گواهينامه هاي خود را با موفقيت به دست آورديم ، پيكربندي خود را براي شامل شدن SSL به روز خواهيم كرد.
⦁ server_name: نام سرور مجازي ما و بلوك سرور مجازي را كه بايد براي درخواست به سرور مجازي ما استفاده شود ، تعريف مي كند. حتما your_domain را در اين خط با نام دامنه خود جايگزين كنيد.
⦁ index: فايل هايي را كه هنگام پردازش درخواست به سرور مجازي ما به عنوان ديركتوري استفاده مي شوند ، تعريف مي كند. ما ترتيب پيش فرض اولويت را در اينجا تغيير داده ايم ، index.php را در جلوي index.html قرار مي دهيم تا Nginx در صورت امكان فايلهايي به نام index.php را در اولويت قرار دهد.
⦁ Root: دستورالعمل root ديركتوري اصلي براي درخواست به سرور مجازي ما را نامگذاري مي كند. اين ديركتوري ، / var / www / html ، به عنوان يك نقطه نصب در زمان ساخت با دستورالعمل هايي در Drupal Dockerfile ما ايجاد مي شود. اين دستورالعمل Dockerfile همچنين اطمينان حاصل مي كند كه فايل هاي موجود در نسخه Drupal روي اين حجم نصب شده اند.
⦁ rewrite: اگر عبارت معمول و مشخص شده (^/core/authorize.php/core/authorize.php(.*)$) با يك URI درخواستي مطابقت داشته باشد ، URI همانطور كه در رشته جايگزيني مشخص شده است تغيير مي كند (/core/authorize.php$1)
بلوك هاي موقعيت مكاني:
⦁ location ~ /.well-known/acme-challenge : اين بلوك موقعيت مكاني درخواست ها به دايركتوري .well-known را مديريت ميكند كه در آن Certbot يك فايل موقت قرار مي دهد تا تأييد كند كه DNS براي دامنه ما روي سرور مجازي مناسب ميباشد. با استقرار اين پيكربندي ، مي توانيم از پلاگين webroot Certbot براي به دست آوردن گواهينامه هاي دامنه خود استفاده كنيم.
⦁ location / : در اين بلوك موقعيت مكاني ، ما از يك دستورالعمل try_files براي بررسي فايل هاي مطابق با درخواست هاي URI استفاده خواهيم كرد. با اين وجود ، به جاي بازگشت يك وضعيت 404 Not Found به عنوان پيش فرض ، با آرگومان هاي درخواست ، كنترل را به فايل index.php Drupal خواهيم داد.
⦁ location ~ .php$ : اين بخش موقعيت مكاني پردازش PHP و پروكسي اين درخواستها به كانتينر Drupal را مديريت مي كند. از آنجا كه تصوير Drupal Docker ما مبتني بر تصوير php: fpm خواهد بود ، همچنين گزينه هاي پيكربندي خاص را در پروتكل FastCGI در اين بلوك قرار خواهيم داد. Nginx براي درخواست هاي PHP به يك پردازنده مستقل PHP احتياج دارد: در مورد ما ، اين درخواست ها توسط پردازنده php-fpm كه همراه با تصوير php: fpm است ، انجام مي شود. علاوه بر اين ، اين بلوك موقعيت مكاني شامل دستورالعمل ها ، متغيرها و گزينه هاي خاص FastCGI است كه درخواست ها به برنامه Drupal را كه در كانتينر Drupal ما اجرا مي شود ، پروكسي ميكند، و شاخص مورد نظر را براي URI درخواستي تجزيه شده و درخواست هاي URI تنظيم ميكند.
⦁ location ~ /.ht : اين بلوك فايل هاي html دسترسي را از آنجايي كه Nginx به آنها سرويس نمي دهد ، مديريت خواهد كرد. دستورالعمل deny_all تضمين مي كند كه فايل هاي .htaccess هرگز در اختيار كاربران قرار نمي گيرد.
⦁ location = /favicon.ico, location = /robots.txt : اين بلوك ها اطمينان حاصل مي كنند كه درخواست ها به /favicon.ico و /robots.txt وارد نشوند.
⦁ location ~* .(css|gif|ico|jpeg|jpg|js|png)$ : اين بلوك ورود به سيستم براي درخواست هاي دارايي استاتيك را غيرفعال مي كند و تضمين مي كند كه اين دارايي ها بسيار قابل ذخيره هستند ، زيرا ارائه آن ها معمولاً گران است.
براي كسب اطلاعات بيشتر در مورد پراكسي FastCGI ، به راهنماي درك و اجراي غير مجاز مي باشدing FastCGI در Nginx مراجعه كنيد. براي كسب اطلاعات در مورد بلوك هاي سرور و موقعيت مكاني ، به راهنماي درك سرور Nginx و الگوريتم هاي انتخاب بلوك موقعيت مراجعه كنيد.
پس از پايان ويرايش ، فايل را ذخيره كنيد و ببنديد.
با تنظيم Nginx در محل خود ، مي توانيد به سراغ ايجاد متغيرهاي محيط برويد تا در زمان اجرا به كانتينرها برنامه و پايگاه داده خود منتقل شويد.
مرحله 2 – تعيين متغيرهاي محيط
برنامه Drupal ما براي ذخيره اطلاعات مربوط به سايت به يك پايگاه داده (MySQL ، PostgresSQL و غيره) نياز دارد. براي دسترسي به كانتينر پايگاه داده (MySQL) ، كانتينر Drupal در زمان اجرا به برخي از متغيرهاي محيطي نياز دارد. اين متغيرها حاوي اطلاعات حساسي مانند اعتبارات پايگاه داده هستند ، بنابراين نمي توانيم مستقيماً آنها را در فايل Docker Compose قرار دهيم – فايل اصلي كه حاوي اطلاعاتي در مورد نحوه اجراي كانتينرهاي ما است.
هميشه توصيه مي شود مقادير حساس را در فايل .env تنظيم كنيد و گردش آن را محدود كنيد. اين كار مانع از كپي شدن اين مقادير در مخازن پروژه مي شود و در معرض ديد عموم قرار نميگيرد.
در ديركتوري اصلي پروژه ، ~ / drupal ، فايلي با نام .env ايجاد و آن را باز كنيد:
⦁ $ nano .env

متغيرهاي زير را به فايل .env اضافه كنيد و بخش هايلايت شده را با اعتبار مورد نظر خود جايگزين كنيد:
~/drupal/.env
MYSQL_ROOT_PASSWORD=root_password
MYSQL_DATABASE=drupal
MYSQL_USER=drupal_database_user
MYSQL_PASSWORD=drupal_database_password

اكنون گذرواژه را براي حساب ريشه MySQL و همچنين نام كاربري و رمزعبور مورد نظر خود براي بانك اطلاعات برنامه خود اضافه كرده ايم.
فايل .env ما حاوي اطلاعات حساسي است ، بنابراين هميشه توصيه مي شود آن را در فايل هاي .gitignore و .dockerignore يك پروژه قرار دهيد تا به مخازن Git و تصاوير Docker اضافه نشود.
اگر مي خواهيد براي كنترل نسخه با Git كار كنيد ، ديركتوري كاري فعلي خود را به عنوان يك مخزن با git init مقداردهي كنيد:
⦁ $ git init

فايل gitignore را باز كنيد:
⦁ $ nano .gitignore

موارد زير را اضافه كنيد:
~/drupal/.gitignore
.env
فايل را ذخيره كنيد و از آن خارج شويد.
به همين ترتيب ، فايل .dockerignore را باز كنيد:
⦁ $ nano .dockerignore

سپس موارد زير را اضافه كنيد:
~/drupal/.dockerignore
.env
.git
فايل را ذخيره كنيد و از آن خارج شويد.
اكنون كه براي حفظ اعتبار خود به عنوان متغيرهاي محيطي اقداماتي انجام داده ايم ، بياييد به مرحله بعدي تعريف خدمات خود در فايل docker-compose.yml برويم.
مرحله 3 – تعريف خدمات با Compose Docker
Docker Compose ابزاري براي تعريف و اجراي برنامه هاي چند كانتينري Docker است. ما براي پيكربندي خدمات برنامه خود ، يك فايل YAML تعريف مي كنيم. سرويس در Docker Compose يك كانتينر در حال اجرا است و Compose به ما اجازه مي دهد تا اين سرويس ها را با حجم و شبكه هاي مشترك پيوند دهيم.
كانتينرهاي مختلفي را براي برنامه Drupal ، پايگاه داده و سرور مجازي وب خود ايجاد خواهيم كرد. در كنار اينها ، همچنين يك كانتينر براي اجراي Certbot ايجاد خواهيم كرد تا بتوانيم گواهينامه هايي را براي سرور مجازي وب خود بدست آوريم.
يك فايل docker-compose.yml ايجاد كنيد:
⦁ $ nano docker-compose.yml

براي تعريف نسخه فايل Compose و سرويس پايگاه داده mysql كد زير را اضافه كنيد:
~/drupal/docker-compose.yml
version: “3”

services:
mysql:
image: mysql:8.0
container_name: mysql
command: –default-authentication-plugin=mysql_native_password
restart: unless-stopped
env_file: .env
volumes:
– db-data:/var/lib/mysql
networks:
– internal

بياييد همه گزينه هاي پيكربندي سرويس mysql را يك به يك مرور كنيم:
⦁ image: تصويري را كه براي ايجاد كانتينر استفاده يا واكشي خواهد شد، مشخص مي كند. هميشه براي جلوگيري از مشكلات بعدي توصيه مي شود از تصوير با برچسب نسخه مناسب به استثناي آخرين برچسب استفاده كنيد. اطلاعات بيشتر در مورد بهترين روش هاي Dockerfile را از اسناد Docker بخوانيد.
⦁ container_name:براي تعريف نام كانتينر.
⦁ Command: از اين گزينه براي رونويسي دستور پيش فرض (دستورالعمل CMD) در تصوير استفاده مي شود. MySQL از افزونه هاي مختلف تأييد اعتبار پشتيباني كرده است ، اما mysql_native_password m روش معمول تأييد اعتبار است. از آنجا كه PHP ، و از اين رو Drupal ، از تأييد هويت MySQL جديدتر پشتيباني نمي كنند ، ما بايد –default-authentication-plugin=mysql_native_password  را به عنوان مكانيزم پيش فرض تأييد اعتبار تنظيم كنيم.
⦁ restart: براي تعريف رويكرد ريستارت كانتينر استفاده مي شود. رويكرد unless-stopped يك كانتينر را مجدداً راه اندازي مي كند مگر اينكه به صورت دستي متوقف شود.
⦁ env_file: متغيرهاي محيط را از يك فايل اضافه مي كند. در مورد ما متغيرهاي محيط را از فايل .env تعريف شده در مرحله قبل مي خواند.
⦁ volumes: مسيرهاي هاست يا واليوم هاي نامگذاري را به عنوان گزينه هايي براي يك سرويس مشخص مي كند. ما يك واليوم نامگذاري شده به نام db-data را در ديركتوري / var / lib / mysql روي كانتينر نصب مي كنيم ، جايي كه MySQL بصورت پيش فرض فايل هاي داده خود را خواهد نوشت.
⦁ networks: شبكه داخلي را كه سرويس برنامه ما به آن ملحق مي شود ، تعريف مي كند. ما در انتهاي فايل شبكه ها را تعريف خواهيم كرد.
تعريف سرويس mysql ما را انجام داده ايم ، بنابراين اكنون بياييد تعريف سرويس برنامه Drupal را به انتهاي فايل اضافه كنيم:
~/drupal/docker-compose.yml

drupal:
image: drupal:8.7.8-fpm-alpine
container_name: drupal
depends_on:
– mysql
restart: unless-stopped
networks:
– internal
– external
volumes:
– drupal-data:/var/www/html

در اين تعريف سرويس ، ما همانطور كه با سرويس mysql انجام داديم ، كانتينر خود را نامگذاري مي كنيم و يك سياست راه اندازي مجدد را تعريف مي كنيم. ما همچنين گزينه هاي خاصي را براي اين كانتينر اضافه مي كنيم:
Image: در اينجا ، از تصوير 8.7.8-fpm-alpine استفاده مي كنيم. اين تصوير داراي پردازنده php-fpm است كه سرور مجازي وب Nginx ما براي پردازش PHP نياز دارد. علاوه بر اين ، از تصوير alpine ، مشتق از پروژه Alpine Linux استفاده مي كنيم ، كه باعث كاهش سايز تصوير كلي مي شود و در بهترين روش هاي Dockerfile توصيه مي شود. Drupal نسخه هاي بيشتري از تصاوير دارد ، بنابراين آنها را در Dockerhub بررسي كنيد.
depends_on : براي بيان وابستگي بين خدمات استفاده مي شود. تعيين سرويس mysql به عنوان وابستگي به كانتينر Drupal ما ، اطمينان حاصل مي كند كه كانتينر Drupal ما پس از كانتينر mysql ايجاد مي شود و برنامه ما را قادر مي سازد تا يكنواخت شروع شود.
networks: در اينجا ، ما اين كانتينر را به همراه شبكه داخلي به شبكه خارجي اضافه كرده ايم. اين اطمينان حاصل مي كند كه سرويس mysql ما فقط از طريق كانتينر داخلي Drupal از طريق شبكه داخلي قابل دسترسي است در حالي كه اين كانتينرها را از طريق شبكه خارجي در دسترس ساير كانتينرها قرار مي دهد.
volumes: يك واليوم نامگذاري شده به نام drupal-data را بر روي Mount / var / www / html قرار مي دهيم كه توسط تصوير Drupal ايجاد شده است. استفاده از يك واليوم مشخص از اين طريق به ما امكان مي دهد تا كد برنامه خود را با ساير كانتينرها به اشتراك بگذاريم.
سپس ، تعريف خدمات Nginx را بعد از تعريف سرويس Drupal اضافه خواهيم كرد:
~/drupal/docker-compose.yml

webserver:
image: nginx:1.17.4-alpine
container_name: webserver
depends_on:
– drupal
restart: unless-stopped
ports:
– 80:80
volumes:
– drupal-data:/var/www/html
– ./nginx-conf:/etc/nginx/conf.d
– certbot-etc:/etc/letsencrypt
networks:
– external

مجدداً ، براي شروع كار ، كانتينر خود را نامگذاري مي كنيم و آن را به كانتينر Drupal وابسته مي كنيم. همچنين از يك تصوير alpine– تصوير 1.17.4-alpine Nginx – استفاده مي كنيم .
اين تعريف خدمات نيز گزينه هاي زير را شامل مي شود:
⦁ ports: پورت 80 را براي فعال كردن گزينه هاي پيكربندي تعريف شده در فايل nginx.conf در مرحله 1 در معرض نمايش قرار مي دهد.
⦁ volumes: در اينجا ، ما هم واليوم نامگذاري شده و هم مسير هاست را تعريف مي كنيم:
⦁ drupal-data:/var/www/html : كد برنامه Drupal ما را روي ديركتوري / var / www / html سوار مي كند ، كه ما آن را به عنوان ريشه در بلوك سرور مجازي Nginx قرار داده ايم.
⦁ ./nginx-conf:/etc/nginx/conf.d : دايركتوري پيكربندي Nginx را بر روي هاست براي ديركتوري مربوطه در كانتينر سوار مي كند ، و اطمينان حاصل مي كند كه هرگونه تغييري كه در فايل ها ايجاد كنيم روي هاست در كانتينر منعكس مي شود.
⦁ certbot-etc:/etc/letsencrypt : مجوزها و كليدهاي Let’s Encrypt براي دامنه ما را روي دايركتوري مناسب موجود در كانتينر سوار مي كند.
⦁ networks: ما شبكه خارجي را فقط براي اين تعريف كرده ايم تا اين كانتينر بتواند با كانتينر Drupal و نه با كانتينر mysql ارتباط برقرار كند.
سرانجام آخرين تعريف سرويس خود را براي سرويس certbot اضافه خواهيم كرد. حتماً sammy @ your_domain و your_domain را با ايميل و نام دامنه خود جايگزين كنيد:
~/drupal/docker-compose.yml

certbot:
depends_on:
– webserver
image: certbot/certbot
container_name: certbot
volumes:
– certbot-etc:/etc/letsencrypt
– drupal-data:/var/www/html
command: certonly –webroot –webroot-path=/var/www/html –email sammy@your_domain –agree-tos –no-eff-email –staging -d your_domain -d www.your_domain

اين تعريف به Compose مي گويد تا تصوير certbot / certbot را از Docker Hub دريافت كند. همچنين از اين واليوم هاي نامگذاري شده براي به اشتراك گذاري منابع با كانتينر Nginx ، از جمله گواهينامه هاي دامنه و كليد در certbot-etcو كد برنامه در drupal-data استفاده مي كند.
همچنين از depends_on استفاده كرده ايم تا مطمئن شويم كه پس از اجراي سرويس وب سرور مجازي ، كانتينرهاي certbot شروع مي شوند.
ما هيچ شبكه اي را در اينجا مشخص نكرده ايم زيرا اين كانتينر با هيچ سرويس ديگري از طريق شبكه ارتباط برقرار نخواهد كرد. تنها گواهي نامه هاي دامنه و كليد را اضافه ميكند كه ما با استفاده از واليوم نام گذاري شده نصب كرده ايم.
همچنين گزينه command  را گنجانده ايم كه يك فرمان فرعي را براي اجرا با دستور certbot پيش فرض كانتينر مشخص مي كند. كلاينت Certbot از پلاگين ها براي بدست آوردن و نصب گواهينامه ها پشتيباني مي كند. ما از پلاگين webroot براي بدست آوردن گواهي نامه با درج نام مستقل و – webroot در خط فرمان استفاده مي كنيم. اطلاعات بيشتر در مورد افزونه و دستورات اضافي را از مستندات رسمي Certbot بخوانيد.
پس از تعريف سرويس certbot ، تعريف شبكه و واليوم را اضافه كنيد:
~/drupal/docker-compose.yml

networks:
external:
driver: bridge
internal:
driver: bridge

volumes:
drupal-data:
db-data:
certbot-etc:

كليد شبكه سطح بالا به ما امكان مي دهد شبكه هايي كه بايد ايجاد شوند مشخص كنيم. شبكه ها امكان ارتباط بين سرويس ها و كانتينرهاي موجود در كليه پورت ها را از زمان ورود به سايت فراهم مي كنند زيرا در همان هاست Docker daemon هستند. ما دو شبكه داخلي و خارجي تعريف كرده ايم تا ارتباط وب سرورها ، Drupal و mysql را تضمين كنيم.
از كليد volumes  براي تعريف واليوم هاي نامگذاري drupal-data ، db-data و certbot-etc استفاده مي شود. هنگامي كه Docker واليوم ها را ايجاد مي كند ، محتواي واليوم در يك ديركتوري در سيستم فايل هاست ، / var / lib / docker / volumes / ، كه توسط Docker اداره مي شود ، ذخيره مي گردد. محتويات هر واليوم از اين ديركتوري روي هر كانتينر ديگري كه از واليوم استفاده كند سوار مي شود. به اين ترتيب ، امكان اشتراك گذاري كد و داده ها بين كانتينرها وجود دارد.
فايل نهايي docker-compose.yml اين گونه به نظر مي رسد:
~/drupal/docker-compose.yml
version: “3”

services:
mysql:
image: mysql:8.0
container_name: mysql
command: –default-authentication-plugin=mysql_native_password
restart: unless-stopped
env_file: .env
volumes:
– db-data:/var/lib/mysql
networks:
– internal

drupal:
image: drupal:8.7.8-fpm-alpine
container_name: drupal
depends_on:
– mysql
restart: unless-stopped
networks:
– internal
– external
volumes:
– drupal-data:/var/www/html

webserver:
image: nginx:1.17.4-alpine
container_name: webserver
depends_on:
– drupal
restart: unless-stopped
ports:
– 80:80
volumes:
– drupal-data:/var/www/html
– ./nginx-conf:/etc/nginx/conf.d
– certbot-etc:/etc/letsencrypt
networks:
– external

certbot:
depends_on:
– webserver
image: certbot/certbot
container_name: certbot
volumes:
– certbot-etc:/etc/letsencrypt
– drupal-data:/var/www/html
command: certonly –webroot –webroot-path=/var/www/html –email sammy@your_domain –agree-tos –no-eff-email –staging -d your_domain -d www.your_domain

networks:
external:
driver: bridge
internal:
driver: bridge

volumes:
drupal-data:
db-data:
certbot-etc:

ما كار تعريف سرويس ها را انجام داده ايم. سپس ، بياييد كانتينر را شروع كنيم و درخواست هاي گواهينامه خود را آزمايش كنيم.
مرحله 4 – اخذ گواهينامه ها و اعتبارات SSL
ما مي توانيم كانتينرهاي خود را با دستور docker-compose up شروع كنيم ، كه كانتينرهاي ما را به ترتيبي كه مشخص كرده ايم ، ايجاد و اجرا مي كند. اگر درخواست هاي دامنه ما موفق باشد ، وضعيت خروجي صحيح در خروجي خود و گواهي هاي صحيح نصب شده در پوشه / etc / letsencrypt / live در كانتينر سرور مجازي وب را مشاهده خواهيم كرد.
براي اجراي كانتينرها در پس زمينه ، از دستور docker-compose up با پرچم -d استفاده كنيد:
⦁ $ docker-compose up -d

خروجي مشابهي مشاهده خواهيد كرد كه تأييد مي كند خدمات شما ايجاد شده اند:
Output

Creating mysql … done
Creating drupal … done
Creating webserver … done
Creating certbot … done

با استفاده از دستور docker-compose ps وضعيت خدمات را بررسي كنيد:
⦁ $ docker-compose ps

خدمات mysql ، Drupal و وب سرور را با وضعيتUp مشاهده خواهيم كرد ، در حالي كه certbot با يك پيام وضعيت 0 خارج مي شود:
Output
Name Command State Ports
————————————————————————–
certbot certbot certonly –webroot … Exit 0
drupal docker-php-entrypoint php-fpm Up 9000/tcp
mysql docker-entrypoint.sh –def … Up 3306/tcp, 33060/tcp
webserver nginx -g daemon off; Up 0.0.0.0:80->80/tcp

اگر در ستون State براي خدمات mysql ، Drupal يا webserver چيز ديگري به غير از up مشاهده ميكنيد و يا وضعيت خروج غير از 0 براي كانتينر certbot مشاهده مي كنيد ، حتما ورود هاي خدمات را با دستور docker-comps logs بررسي نماييد:
⦁ $ docker-compose logs service_name

اكنون مي توانيم بررسي كنيم كه گواهينامه هاي ما با استفاده از دستور docker-compose exec در كانتينر webserver نصب شده است:
⦁ $ docker-compose exec webserver ls -la /etc/letsencrypt/live

خروجي زير را مي دهد:
Output
total 16
drwx—— 3 root root 4096 Oct 5 09:15 .
drwxr-xr-x 9 root root 4096 Oct 5 09:15 ..
-rw-r–r– 1 root root 740 Oct 5 09:15 README
drwxr-xr-x 2 root root 4096 Oct 5 09:15 your_domain
اكنون كه همه چيز با موفقيت اجرا شد ، مي توانيم تعريف سرويس certbot خود را ويرايش كنيم تا پرچم –staging را حذف كنيم.
فايل docker-compose.yml را باز كنيد ، به تعريف سرويس certbot برويد و پرچم –staging را در گزينه فرمان با پرچم –force-renewal جايگزين كنيد ، كه به Certbot مي گويد كه مي خواهيد يك گواهي جديد را با دامنه هاي مشابه گواهي موجود درخواست دهيد. تعريف certbot به روز شده به شرح زير خواهد بود:
~/drupal/docker-compose.yml

certbot:
depends_on:
– webserver
image: certbot/certbot
container_name: certbot
volumes:
– certbot-etc:/etc/letsencrypt
– drupal-data:/var/www/html
command: certonly –webroot –webroot-path=/var/www/html –email sammy@your_domain –agree-tos –no-eff-email –force-renewal -d your_domain -d www.your_domain

براي ايجاد مجدد كانتينر certbot بايد دوباره docker-compose up را اجرا كنيم. همچنين گزينه –no-deps را در اختيار ميگيريم تا به Compose بگوييم كه مي تواند از شروع سرويس وب سرور مجازي صرفنظر كند ، زيرا در حال حاضر اجرا ميشود:
⦁ $ docker-compose up –force-recreate –no-deps certbot

خروجي را نشان مي دهد كه تاييد ميكند درخواست گواهي ما موفق بوده است:
Output
Recreating certbot … done
Attaching to certbot
certbot | Saving debug log to /var/log/letsencrypt/letsencrypt.log
certbot | Plugins selected: Authenticator webroot, Installer None
certbot | Renewing an existing certificate
certbot | Performing the following challenges:
certbot | http-01 challenge for your_domain
certbot | http-01 challenge for www.your_domain
certbot | Using the webroot path /var/www/html for all unmatched domains.
certbot | Waiting for verification…
certbot | Cleaning up challenges
certbot | IMPORTANT NOTES:
certbot | – Congratulations! Your certificate and chain have been saved at:
certbot | /etc/letsencrypt/live/your_domain/fullchain.pem
certbot | Your key file has been saved at:
certbot | /etc/letsencrypt/live/your_domain/privkey.pem
certbot | Your cert will expire on 2020-01-03. To obtain a new or tweaked
certbot | version of this certificate in the future, simply run certbot
certbot | again. To non-interactively renew *all* of your certificates, run
certbot | “certbot renew”
certbot | – Your account credentials have been saved in your Certbot
certbot | configuration directory at /etc/letsencrypt. You should make a
certbot | secure backup of this folder now. This configuration directory will
certbot | also contain certificates and private keys obtained by Certbot so
certbot | making regular backups of this folder is ideal.
certbot | – If you like Certbot, please consider supporting our work by:
certbot |
certbot | Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donate
certbot | Donating to EFF: https://eff.org/donate-le
certbot |
certbot exited with code 0

اكنون كه مجوزهاي خود را با موفقيت توليد كرديم ، مي توانيم پيكربندي Nginx خود را به روز كنيم تا SSL را شامل شود.
مرحله 5 – اصلاح تنظيمات وب سرور مجازي و تعريف سرويس
پس از نصب گواهينامه هاي SSL در Nginx ، بايد كليه درخواست هاي HTTP را به HTTPS تغيير مسير دهيم. همچنين بايد مجوز SSL و مكانهاي كليدي خود را مشخص كنيم و پارامترهاي امنيتي و هدرها را اضافه كنيم.
از آنجا كه مي خواهيد سرويس وب سرور مجازي را براي گنجاندن اين موارد اضافه، بازتوليد كنيد ، مي توانيد اكنون آن را متوقف كنيد:
⦁ $ docker-compose stop webserver

خروجي زير را به دست مي دهد:
Output
Stopping webserver … done
سپس ، فايل پيكربندي Nginx را كه قبلاً ايجاد كرديم حذف خواهيم كرد:
⦁ $ rm nginx-conf/nginx.conf

نسخه ديگري از فايل را باز كنيد:
⦁ $ nano nginx-conf/nginx.conf

براي هدايت HTTP به HTTPS و اضافه كردن اعتبار ، پروتكل و هدرهاي امنيتي SSL ، كد زير را به فايل اضافه كنيد. به ياد داشته باشيد كه your_domain را با دامنه خود جايگزين كنيد:
~/drupal/nginx-conf/nginx.conf
server {
listen 80;
listen [::]:80;

server_name your_domain www.your_domain;

location ~ /.well-known/acme-challenge {
allow all;
root /var/www/html;
}

location / {
rewrite ^ https://$host$request_uri? permanent;
}
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name your_domain www.your_domain;

index index.php index.html index.htm;

root /var/www/html;

server_tokens off;

ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;

add_header X-Frame-Options “SAMEORIGIN” always;
add_header X-XSS-Protection “1; mode=block” always;
add_header X-Content-Type-Options “nosniff” always;
add_header Referrer-Policy “no-referrer-when-downgrade” always;
add_header Content-Security-Policy “default-src * data: ‘unsafe-eval’ ‘unsafe-inline'” always;

location / {
try_files $uri $uri/ /index.php$is_args$args;
}

rewrite ^/core/authorize.php/core/authorize.php(.*)$ /core/authorize.php$1;

location ~ .php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+.php)(/.+)$;
fastcgi_pass drupal:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}

location ~ /.ht {
deny all;
}

location = /favicon.ico {
log_not_found off; access_log off;
}
location = /robots.txt {
log_not_found off; access_log off; allow all;
}
location ~* .(css|gif|ico|jpeg|jpg|js|png)$ {
expires max;
log_not_found off;
}
}

بلوك سرور مجازي HTTP افزونه webroot را براي درخواستهاي تمديد Certbot به دايركتوري .well-known/acme-challenge مشخص مي كند. اين برنامه همچنين شامل يك دستورالعمل rewrite  است كه درخواست هاي HTTP را به ديركتوري اصلي به HTTPS هدايت مي كند.
بلوك سرور مجازي HTTPS ، ssl و http2 را فعال مي كند. براي كسب اطلاعات بيشتر درباره نحوه تكرار HTTP / 2 در پروتكل هاي HTTP و فوايد آن براي عملكرد وب سايت ، لطفاً به مقدمه نحوه تنظيم Nginx با پشتيباني HTTP / 2 در اوبونتو 18.04 مراجعه كنيد.
اين بلوك ها SSL را فعال مي كنند ، همانطور كه گواهي SSL و مكان هاي كليدي ما را همراه با هدرهاي توصيه شده درج كرده ايم. اين هدرها به ما اين امكان را مي دهند كه در سايت هاي آزمايش سرور مجازي SSL Labs و Security Headers امتياز A كسب كنيم.
دستورالعمل هاي root  و index  ما نيز در اين بلوك قرار دارند ، مانند ساير قسمت هاي بلوك مكان ويژه Drupal كه در مرحله 1 بحث شده است.
فايل پيكربندي Nginx به روز شده را ذخيره كنيد و ببنديد.
قبل از استفاده مجدد از كانتينر سرور مجازي ، نياز به اضافه كردن نگاشت پورت 443 روي تعريف سرويس وب سرور مجازي خود خواهيم داشت زيرا مجوزهاي SSL را فعال كرده ايم.
فايل docker-compose.yml را باز كنيد:
⦁ $ nano docker-compose.yml

تغييرات زير را در تعريف سرويس وب سرور مجازي ايجاد كنيد:
~/drupal/docker-compose.yml

webserver:
image: nginx:1.17.4-alpine
container_name: webserver
depends_on:
– drupal
restart: unless-stopped
ports:
– 80:80
– 443:443
volumes:
– drupal-data:/var/www/html
– ./nginx-conf:/etc/nginx/conf.d
– certbot-etc:/etc/letsencrypt
networks:
– external

پس از فعال كردن گواهينامه هاي SSL ، docker-compose.yml به صورت زير ظاهر مي شود:
~/drupal/docker-compose.yml
version: “3”

services:
mysql:
image: mysql:8.0
container_name: mysql
command: –default-authentication-plugin=mysql_native_password
restart: unless-stopped
env_file: .env
volumes:
– db-data:/var/lib/mysql
networks:
– internal

drupal:
image: drupal:8.7.8-fpm-alpine
container_name: drupal
depends_on:
– mysql
restart: unless-stopped
networks:
– internal
– external
volumes:
– drupal-data:/var/www/html

webserver:
image: nginx:1.17.4-alpine
container_name: webserver
depends_on:
– drupal
restart: unless-stopped
ports:
– 80:80
– 443:443
volumes:
– drupal-data:/var/www/html
– ./nginx-conf:/etc/nginx/conf.d
– certbot-etc:/etc/letsencrypt
networks:
– external

certbot:
depends_on:
– webserver
image: certbot/certbot
container_name: certbot
volumes:
– certbot-etc:/etc/letsencrypt
– drupal-data:/var/www/html
command: certonly –webroot –webroot-path=/var/www/html –email sammy@your_domain –agree-tos –no-eff-email –force-renewal -d your_domain -d www.your_domain

networks:
external:
driver: bridge
internal:
driver: bridge

volumes:
drupal-data:
db-data:
certbot-etc:

فايل را ذخيره كنيد و ببنديد. بياييد سرويس وب سرور مجازي را با پيكربندي به روز شده دوباره بازيابي كنيم:
⦁ $ docker-compose up -d –force-recreate –no-deps webserver

خروجي زير را ارائه مي دهد:
Output
Recreating webserver … done
خدمات را با docker-compose ps بررسي كنيد:
⦁ $ docker-compose ps

خدمات mysql ، Drupal و webserver را در حالي مشاهده خواهيم كرد كه certbot با يك پيام وضعيت 0 خارج مي شود:
Output
Name Command State Ports
————————————————————————–
certbot certbot certonly –webroot … Exit 0
drupal docker-php-entrypoint php-fpm Up 9000/tcp
mysql docker-entrypoint.sh –def … Up 3306/tcp, 33060/tcp
webserver nginx -g daemon off; Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp

در حال حاضر ، تمام خدمات ما در حال اجرا است و بهتر است با نصب Drupal از طريق رابط وب پيش برويم.
مرحله 6 – تكميل نصب از طريق رابط وب
بياييد نصب را از طريق رابط وب Drupal انجام دهيم.
در يك مرورگر وب ، به دامنه سرور برويد. به ياد داشته باشيد كه your_domain خود را در اينجا با نام دامنه خود جايگزين كنيد:
https://your_domain

زبان مورد استفاده را انتخاب كنيد:

روي Save and continue كليك كنيد . به صفحه نمايه نصب منتقل ميشويم. Drupal داراي پروفايل هاي مختلف است ، بنابراين مشخصات Standard را انتخاب كرده و روي Save and continue كليك كنيد.

پس از انتخاب پروفايل ، به صفحه پيكربندي Database خواهيم رفت. نوع Database را به عنوان MySQL ، MariaDB ، Percona Server يا معادل آن انتخاب كنيد و مقادير مربوط به نام پايگاه داده ، نام كاربري و رمز عبور را از بين مقادير مربوط به MYSQL_DATABASE ، MYSQL_USER و MYSQL_PASSWORD به ترتيب در فايل.env در مرحله 2 تعريف كرديد، انتخاب نماييد. روي Advanced Options كليك كرده و مقدار هاست را روي نام كانتينر سرويس mysql تنظيم كنيد. روي Save and continue كليك كنيد.

پس از پيكربندي پايگاه داده ، نصب ماژول ها و تم هاي پيش فرض Drupal شروع مي شود:

پس از نصب سايت ، به صفحه ستاپ سايت پيكربندي Drupal براي پيكربندي نام سايت ، ايميل ، نام كاربري ، رمز عبور و تنظيمات ناحيه اي مي رويم. اطلاعات را پر كنيد و بر روي Save and continue كليك كنيد:

بعد از كليك روي ذخيره و ادامه ، مي توانيم صفحه Welcome to Drupal را مشاهده كنيم ، كه نشان مي دهد سايت Drupal ما با موفقيت شروع به كار كرده است.

اكنون كه نصب Drupal ما تمام شد ، بايد اطمينان حاصل كنيم كه گواهينامه هاي SSL ما به صورت خودكار تمديد خواهد شد.
مرحله 7 – تمديد گواهينامه ها
گواهينامه هاي Let’s Encrypt به مدت 90 روز معتبر هستند ، بنابراين بايد يك فرايند تمديد خودكار را تنظيم كنيم تا اطمينان حاصل شود كه از بين نمي روند. يكي از راه هاي انجام اين كار ايجاد اقدامي با ابزار برنامه ريزي cron است. در اين حالت ، ما يك كار cron ايجاد خواهيم كرد تا به صورت دوره اي يك اسكريپت را اجرا كنيم كه گواهينامه هاي ما را تمديد كرده و پيكربندي Nginx را مجدد لود كند.
بياييد فايل ssl_renew.sh را براي تمديد گواهينامه هاي خود ايجاد كنيم:
⦁ $ nano ssl_renew.sh

كد زير را اضافه كنيد. به ياد داشته باشيد كه نام ديركتوري را با كاربر غير ريشه خود جايگزين كنيد:
~/drupal/ssl_renew.sh
#!/bin/bash

cd /home/sammy/drupal/
/usr/local/bin/docker-compose -f docker-compose.yml run certbot renew –dry-run &&
/usr/local/bin/docker-compose -f docker-compose.yml kill -s SIGHUP webserver

اين اسكريپت در ديركتوري پروژه ~ / drupal تغيير مي كند و دستورات docker-compose زير را اجرا مي كند.
docker-compose run : يك كانتينر certbot را شروع مي كند و فرمان ارائه شده در تعريف سرويس certbot ما را ناديده مي گيرد. به جاي استفاده از فرمان فرعي certonly ، ما در اينجا از فرمان فرعي renew  استفاده مي كنيم ، كه گواهينامه هايي را كه نزديك به انقضا هستند تجديد مي كند. براي آزمايش اسكريپت خود گزينه –dry run را در اينجا گنجانده ايم.
docker-compose kill : يك سيگنال SIGHUP را به كانتينر وب سرور مجازي ارسال مي كند تا پيكربندي Nginx را مجدد لود كند.
با اجراي دستور زير فايل را ببنديد و آن را قابل اجرا كنيد:
⦁ $ sudo chmod +x ssl_renew.sh

در مرحله بعد ، فايل crontab ريشه را باز كنيد تا اسكريپت تجديد در يك بازه مشخص اجرا شود:
⦁ $ sudo crontab -e

اگر اين اولين بار است كه اين فايل را ويرايش مي كنيد ، از شما خواسته مي شود ويرايشگر متن را انتخاب كنيد تا فايل با آن باز شود:
Output
no crontab for root – using an empty one

Select an editor. To change later, run ‘select-editor’.
1. /bin/nano
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
4. /bin/ed

Choose 1-4 [1]:

در انتهاي فايل خط زير را اضافه كنيد و sammy را با نام كاربري خود جايگزين كنيد:
crontab

*/5 * * * * /home/sammy/drupal/ssl_renew.sh >> /var/log/cron.log 2>&1

اين فاصله زماني را براي هر پنج دقيقه تعيين مي كند ، بنابراين مي توانيم آزمايش كنيم كه آيا درخواست تجديد ما مطابق پيش بيني شده كار كرده است يا خير. همچنين يك فايل ورود، cron.log را ايجاد كرده ايم تا خروجي مربوطه را ثبت كنيم.
پس از پنج دقيقه ، از دستور tail استفاده كنيد تا cron.log را بررسي كنيد و ببينيد آيا درخواست تمديد موفقيت آميز بوده است يا خير:
⦁ $ tail -f /var/log/cron.log

خروجي تأييد موفقيت آميز تجديد را مشاهده خواهيد كرد:
Output
** DRY RUN: simulating ‘certbot renew’ close to cert expiry
** (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/your_domain/fullchain.pem (success)
** DRY RUN: simulating ‘certbot renew’ close to cert expiry
** (The test certificates above have not been saved.)
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

CTRL + C را فشار دهيد تا از روند tail خارج شود.
اكنون مي توانيم فايل crontab را تغيير دهيم تا اسكريپت روز دوم هر هفته در ساعت 2 صبح اجرا شود. خط آخر crontab را به صورت زير تغيير دهيد:
crontab

* 2 * * 2 /home/sammy/drupal/ssl_renew.sh >> /var/log/cron.log 2>&1

خارج شويد و فايل را ذخيره كنيد.
اكنون ، بياييد گزينه –dry run را از متن ssl_renew.sh حذف كنيم. ابتدا آن را باز كنيد:
⦁ $ nano ssl_renew.sh

سپس محتوا را به شرح زير تغيير دهيد:
~/drupal/ssl_renew.sh
#!/bin/bash

cd /home/sammy/drupal/
/usr/local/bin/docker-compose -f docker-compose.yml run certbot renew &&
/usr/local/bin/docker-compose -f docker-compose.yml kill -s SIGHUP webserver

در حال حاضر كار cron از تمديد گواهينامه هاي SSL با تمديد آنها در صورت واجد شرايط بودن ، مراقبت مي كند.
نتيجه
در اين آموزش از Docker Compose براي ايجاد نصب Drupal با يك وب سرور مجازي Nginx استفاده كرده ايم. به عنوان بخشي از اين گردش كار ، گواهينامه هاي TLS / SSL را براي دامنه مورد نظر خود با سايت Drupal در نظر گرفتيم و يك كار cron ايجاد كرديم تا در صورت لزوم اين گواهينامه ها را تمديد كنيم.
اگر دوست داريد درباره Docker اطلاعات بيشتري كسب كنيد ، به صفحه  Docker topic مراجعه كنيد.

 

برچسب‌ها:CertbotCMScronDrupal

نحوه نصب Nginx در اوبونتو 20.04

۵۶ بازديد

يكي از محبوب ترين سرورهاي وب در جهان است و مسئوليت ميزباني برخي از بزرگترين و پر ترافيك ترين سايتها در اينترنت را دارد. يك انتخاب ساده است كه مي تواند به عنوان سرور مجازي وب يا پروكسي معكوس استفاده شود.
در اين راهنما ، ما در مورد چگونگي نصب Nginx در سرور مجازي Ubuntu 20.04 خود ، تنظيم فايروال ، مديريت فرايند Nginx و ايجاد بلوك هاي سرور مجازي براي ميزباني بيش از يك دامنه از يك سرور واحد بحث خواهيم كرد.
پيش نيازها
قبل از شروع اين راهنما ، بايد يك كاربر معمولي و غير ريشه با امتيازات sudo در سرور مجازي خود تنظيم كنيد. با پيروي از راهنماي ستاپ اوليه سرور مجازي براي اوبونتو 20.04 مي توانيد نحوه پيكربندي يك حساب كاربري معمولي را ياد بگيريد.
هنگامي كه يك حساب كاربري در دسترس داشتيد ، به عنوان كاربر غير ريشه خود وارد شويد.
مرحله 1 – نصب Nginx
از آنجا كه Nginx در مخازن پيش فرض اوبونتو موجود است ، مي توان آن را از طريق اين مخازن با استفاده از سيستم بسته بندي apt نصب كرد.
از آنجا كه اين اولين تعامل ما با سيستم بسته بندي apt در اين بخش است ، ديركتوري بسته هاي محلي خود را به روز مي كنيم تا به جديدترين ليست هاي بسته دسترسي داشته باشيم. پس از آن ، مي توانيم nginx را نصب كنيم:
⦁ $ sudo apt update

⦁ $ sudo apt install nginx
پس از پذيرش روال ، apt ، Nginx و هرگونه متعلقات لازم را براي سرور مجازي شما نصب مي كند.
مرحله 2 – تنظيم فايروال
قبل از آزمايش Nginx ، براي دسترسي به سرويس بايد نرم افزار فايروال تنظيم شود. Nginx پس از نصب ، خود را به عنوان سرويسي با ufw ثبت مي كند ، و اين باعث مي شود دسترسي Nginx ساده باشد.
با تايپ دستور زير تنظيمات برنامه را كه ufw مي داند چگونه با آن كار كند ليست كنيد:
⦁ $ sudo ufw app list

بايد ليستي از پروفايل هاي برنامه را دريافت كنيد:
Output
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH

همانطور كه از خروجي نشان داده شده است ، سه پروفايل براي Nginx در دسترس است:
⦁ Nginx Full: اين پروفايل هر دو پورت 80 (ترافيك وب عادي و بدون رمزگذاري) و پورت 443 (ترافيك رمزگذاري شده TLS / SSL) را باز مي كند
⦁ Nginx HTTP: اين نمايه فقط پورت 80 را باز مي كند (ترافيك وب عادي و بدون رمزگذاري)
⦁ Nginx HTTPS:اين پروفايل فقط پورت 443 را باز مي كند (ترافيك رمزگذاري شده TLS / SSL)
توصيه مي شود محدودترين نمايه اي را كه هنوز امكان ترافيك تنظيم شده خود را فراهم مي كند ، فعال كنيد. در حال حاضر ، ما فقط نياز به ترافيك در پورت 80 داريم.
مي توانيد آن را با تايپ كردن دستور زير فعال كنيد:
⦁ $ sudo ufw allow ‘Nginx HTTP’

مي توانيد تغيير را با تايپ اين دستور تأييد كنيد:
⦁ $ sudo ufw status

خروجي نشان خواهد داد كه ترافيك HTTP مجاز است:
Output
Status: active

To Action From
— —— —-
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)

مرحله 3 – بررسي سرور مجازي وب خود
در پايان مراحل نصب ، اوبونتو 20.04 ، Nginx را شروع مي كند. وب سرور مجازي اكنون راه اندازي و در حال كار ميباشد.
ما مي توانيم با تايپ كردن اين دستور زير سيستم شروع كار systemd  را بررسي كنيم تا مطمئن شويم كه اين سرويس در حال اجراست:
⦁ $ systemctl status nginx

Output
● nginx.service – A high performance web server and a reverse غير مجاز مي باشد server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-04-20 16:08:19 UTC; 3 days ago
Docs: man:nginx(8)
Main PID: 2369 (nginx)
Tasks: 2 (limit: 1153)
Memory: 3.5M
CGroup: /system.slice/nginx.service
├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─2380 nginx: worker process

همانطور كه با اين دستور تأييد شده است ، اين سرويس با موفقيت شروع به كار نموده است. با اين حال ، بهترين راه براي آزمايش آن، درخواست صفحه از Nginx است.
شما مي توانيد با رفتن به آدرس IP سرور مجازيخود به صفحه فرود پيش فرض Nginx دسترسي داشته باشيد تا تأييد كنيد كه نرم افزار به درستي كار مي كند. اگر آدرس IP سرور مجازي خود را نمي دانيد ، مي توانيد آن را با استفاده از ابزار icanhazip.com پيدا كنيد ، كه آدرس IP عمومي شما را همانطور كه از يك مكان ديگر در اينترنت دريافت كرده است به شما مي دهد:
⦁ $ curl -4 icanhazip.com

اكنون كه آدرس IP سرور مجازي خود را داريد ، آن را در نوار آدرس مرورگر خود وارد كنيد:
http://your_server_ip

بايد صفحه فرود پيش فرض Nginx را دريافت كنيد:

اگر در اين صفحه هستيد ، سرور مجازي شما به درستي كار مي كند و آماده مديريت است.
مرحله 4 – مديريت فرايند Nginx
اكنون كه سرور مجازي وب خود را فعال كرده ايد ، اجازه دهيد برخي دستورات مديريت پايه را مرور كنيم.
براي متوقف كردن سرور مجازي وب خود ، تايپ كنيد:
⦁ $ sudo systemctl stop nginx

براي شروع سرور مجازي وب هنگام متوقف بودن ، تايپ كنيد:
⦁ $ sudo systemctl start nginx

براي متوقف كردن و شروع مجدد سرويس ، تايپ كنيد:
⦁ $ sudo systemctl restart nginx

اگر فقط تغييرات پيكربندي را انجام مي دهيد ، Nginx اغلب مي تواند بدون افت اتصالات مجدد لود شود. براي انجام اين كار ، تايپ كنيد:
⦁ $ sudo systemctl reload nginx

به طور پيش فرض ، Nginx به گونه اي پيكربندي شده است تا وقتي سرور مجازي بوت ميشود ، به طور خودكار شروع گردد. اگر اين چيزي نيست كه شما مي خواهيد ، مي توانيد با تايپ كردن دستور زير، اين رفتار را غيرفعال كنيد:
⦁ $ sudo systemctl disable nginx

براي فعال كردن مجدد سرويس براي راه اندازي در هنگام بوت شدن ، مي توانيد اين دستور را تايپ كنيد:
⦁ $ sudo systemctl enable nginx

اكنون دستورات مديريت پايه را آموخته ايد و بايد براي پيكربندي سايت آماده باشيد تا ميزبان بيش از يك دامنه باشد.
مرحله 5 – تنظيم بلوك هاي سرور مجازي (توصيه مي شود)
هنگام استفاده از وب سرور مجازي Nginx ، مي توان از بلوك هاي سرور مجازي (مشابه هاست هاي مجازي در Apache) براي كپسوله كردن جزئيات پيكربندي و ميزباني بيش از يك دامنه از يك سرور مجازي واحد استفاده كرد. دامنه اي به نام your_domain.com را راه اندازي مي كنيم ، اما شما بايد اين نام را با نام دامنه خود جايگزين كنيد.
Nginx در اوبونتو 20.04 داراي يك بلوك سرور مجازي است كه بصورت پيش فرض فعال شده است تا براي ارائه اسناد از يك ديركتوري در / var / www / html پيكربندي شود. اگرچه براي يك سايت واحد به خوبي كار مي كند ، اگر ميزبان چندين سايت باشيد ، مي تواند مشكل ساز شود. به جاي تغيير / var / www / html ، بياييد يك ساختار دايركتوري در / var / www براي سايت your_domain.com ايجاد كنيم ، و / var / www / html را به عنوان دايركتوري پيش فرض رها كنيم تا در صورت عدم تطابق درخواست كلاينت با هيچ سايت ديگر، اين ديركتوري ارائه شود.
دايركتوري براي your_domain.com را به شرح زير ايجاد كنيد ، از پرچم -p براي ايجاد هرگونه ديركتوري parent لازم
استفاده نماييد.
⦁ sudo mkdir -p /var/www/your_domain/html

سپس ، مالكيت دايركتوري را به متغير محيط USER $ اختصاص دهيد:
⦁ sudo chown -R $USER:$USER /var/www/your_domain/html

اگر مقدار umask خود را تغيير نداده باشيد ، مجوزهاي ريشه وب شما بايد صحيح باشد كه مجوزهاي پيش فرض فايل را تعيين مي كند. براي اطمينان از صحيح بودن مجوزهاي تان و اجازه دادن به مالك براي خواندن ، نوشتن و اجراي فايل ها در حالي كه فقط امكان خواندن و اجراي مجوزها براي گروه ها و ديگران مجاز است ، مي توانيد دستور زير را وارد كنيد:
⦁ $ sudo chmod -R 755 /var/www/your_domain

سپس ، با استفاده از nano يا ويرايشگر مورد علاقه خود ، صفحه index.html نمونه را ايجاد كنيد:
⦁ $ nano /var/www/your_domain/html/index.html

در داخل ، نمونه HTML زير را اضافه كنيد:
/var/www/your_domain/html/index.html


Welcome to your_domain!


Success! The your_domain server block is working!



پس از اتمام ، فايل را با تايپ كردن CTRL و X و سپس Y و ENTER ذخيره كنيد.
براي اينكه Nginx بتواند اين محتوا را ارائه دهد ، لازم است يك بلوك سرور مجازي را با دستورالعمل هاي درست ايجاد كنيد. به جاي تغيير مستقيم پيكربندي پيش فرض ، بياييد فايل جديدي را در /etc/nginx/sites-available/your_domain.com ايجاد كنيم:
⦁ $ sudo nano /etc/nginx/sites-available/your_domain

در بلوك پيكربندي زير پيست كنيد كه مشابه پيش فرض است ، اما براي ديركتوري جديد و نام دامنه به روز ميباشد:
/etc/nginx/sites-available/your_domain
server {
listen 80;
listen [::]:80;

root /var/www/your_domain/html;
index index.html index.htm index.nginx-debian.html;

server_name your_domain www.your_domain;

location / {
try_files $uri $uri/ =404;
}
}

توجه كنيد كه پيكربندي ريشه را به ديركتوري جديد و server_name را به نام دامنه خود به روز كرده ايم.
در مرحله بعد ، اجازه خواهيم داد فايل را با ايجاد پيوندي از آن به ديركتوري sites-enabled ، كه Nginx هنگام راه اندازي از آن مي خواند ، فعال كنيم:
⦁ $ sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

اكنون دو بلوك سرور مجازي فعال و پيكربندي شده اند تا به درخواست ها بر اساس دستورالعمل هاي listen و server_name آنها پاسخ دهند (مي توانيد درباره نحوه پردازش Nginx اين دستورالعمل ها در اين لينك بيشتر بخوانيد):
⦁ your_domain.com: به درخواست هاي your_domain.com و www.your_domain.com پاسخ خواهد داد.
⦁ •default: به هر درخواست در پورت 80 كه با دو بلوك ديگر مطابقت ندارد پاسخ خواهد داد.
براي جلوگيري از بروز مشكل حافظه كه مي تواند ناشي از افزودن نام سرور مجازي اضافي باشد ، لازم است يك مقدار واحد را در فايل /etc/nginx/nginx.conf تنظيم كنيد. فايل را باز كنيد:
⦁ $ sudo nano /etc/nginx/nginx.conf

دستورالعمل server_names_hash_bucket_size را پيدا كنيد و نماد # را حذف كنيد تا خط را باطل كنيد. اگر از nano استفاده مي كنيد ، مي توانيد با فشار دادن CTRL و w به سرعت كلمات موجود در فايل را جستجو كنيد.
/etc/nginx/nginx.conf

http {

server_names_hash_bucket_size 64;

}

پس از اتمام فايل را ذخيره كنيد و ببنديد.
سپس ، بررسي كنيد تا مطمئن شويد كه هيچ خطاي نحوي در هيچ يك از فايل هاي Nginx شما وجود ندارد:
⦁ $ sudo nginx -t

اگر مشكلي وجود ندارد ، Nginx را ريستارت كنيد تا تغييرات خود را فعال نماييد:
⦁ $ sudo systemctl restart nginx

Nginx اكنون بايد نام دامنه شما را ارائه دهد. مي توانيد با رفتن به http://your_domain.com ، جايي كه بايد چيزي شبيه به اين تصوير را مشاهده كنيد ، اين فرآيند را آزمايش كنيد:

مرحله ششم – آشنايي با فايل ها و دستورالعمل هاي مهم Nginx
اكنون كه مي دانيد چگونه خود سرويس Nginx را مديريت كنيد ، بايد چند دقيقه وقت بگذاريد تا با چند ديركتوري و فايل مهم آشنا شويد.
محتوا
⦁ / var / www / html: محتواي وب واقعي ، كه به طور پيش فرض فقط شامل صفحه پيش فرض Nginx است كه قبلاً ديديد ، از ديركتوري / var / www / html ارائه مي شود. با تغيير فايل هاي پيكربندي Nginx قابل تغيير است.
پيكربندي سرور
⦁ / etc / nginx: ديركتوري پيكربندي Nginx . همه فايل هاي پيكربندي Nginx در اينجا قرار دارند.
⦁ /etc/nginx/nginx.conf: فايل اصلي پيكربندي Nginx . مي تواند براي ايجاد تغيير در تنظيمات جهاني Nginx اصلاح شود.
⦁ / etc / nginx / sites-available /: دايركتوري كه مي توان در آن بلوك هاي سرور مجازي هر سايت ذخيره شود. Nginx از فايل هاي پيكربندي موجود در اين ديركتوري استفاده نمي كند مگر اينكه به ديركتوري sites-enabled مرتبط باشند. به طور معمول ، تمام پيكربندي بلوك سرور مجازي در اين دايركتوري انجام مي شود ، و سپس با پيوند دادن به دايركتوري ديگر فعال مي شود.
⦁ / etc / nginx / sites-enabled /: دايركتوري كه در آن بلوكهاي سرور مجازي فعال در هر سايت ذخيره ميشوند. به طور معمول ، با پيوند دادن به فايلهاي پيكربندي موجود در ديركتوري sites-available ايجاد مي شوند.
⦁ / etc / nginx / snippets: اين ديركتوري شامل قطعات پيكربندي است كه مي توان در جايي ديگر در پيكربندي Nginx گنجانيد. بخش هاي پيكربندي قابل تكرار بالقوه گزينه هاي خوبي براي تجزيه قطعات هستند.
ورودهاي مربوط به سرور
⦁ /var/log/nginx/access.log: هر درخواستي به سرور مجازي وب شما در اين فايل log ثبت مي شود ، مگر اينكه Nginx به گونه اي پيكربندي شده باشد كه كاري غير از اين انجام دهد.
⦁ /var/log/nginx/error.log: هرگونه خطاي Nginx در اين ورود ثبت مي شود.
نتيجه
اكنون كه سرور مجازي وب خود را نصب كرده ايد ، گزينه هاي بسياري براي نوع محتوا و فناوري هايي كه مي خواهيد از آنها استفاده كنيد در اختيار داريد تا يك تجربه غني تر ايجاد نماييد.
اگر مايليد يك پشته برنامه كامل تر بسازيد، مقاله نحوه نصب پشته LEMP در اوبونتو 20.4 را بررسي كنيد.

 

برچسب‌ها:NginxTLS / SSLUbuntu 20.04فايروال