برنامه نویسی

تنظیم سرور Apache با PHP و SSH در Linux

در سفر من برای یادگیری اصول اولیه لینوکس و مدیریت سرور مهارتهای اساسی که هر توسعه دهنده باید داشته باشد ، حتی جلوی آن. من یادداشت هایی را نیز گرفته ام که ممکن است به دیگران نیز کمک کند. در این وبلاگ ، من بینش خود را در مورد تنظیم سرور Apache با PHP در لینوکس به اشتراک می گذارم. اگر این موضوع را مفید می دانید ، به من اطلاع دهید – من چیزهای بیشتری برای اشتراک گذاری دارم! 😊

بیایید با اجرای دستور زیر برای نصب بسته های لازم شروع کنیم:
دستور زیر را برای نصب بسته های لازم اجرا کنید:

sudo apt update && sudo apt upgrade -y
sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql -y
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

1. چرا php-mysql و نه فقط mysql؟

  • php-mysql یک پسوند PHP است که به PHP اجازه می دهد تا با پایگاه داده های MySQL ارتباط برقرار کند.
  • بدون php-mysql، اسکریپت های PHP قادر به تعامل با MySQL نخواهند بود.

2. چیست libapache2-mod-php؟

  • libapache2-mod-php یک ماژول Apache است که پردازش PHP را در سرور وب Apache امکان پذیر می کند.
  • این تضمین می کند که آپاچی می تواند اداره کند .php پرونده ها و اجرای اسکریپت های PHP.

سپس دستورات زیر را اجرا کنید:

sudo systemctl start apache2
sudo systemctl enable apache2

sudo systemctl start mysql
sudo systemctl enable mysql
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

sudo systemctl start apache2

  • شروع می شود سرویس آپاچی بلافاصلهبشر
  • با این حال ، آن به طور خودکار شروع نمی شود در راه اندازی مجدد

sudo systemctl enable apache2

  • فعال کردن سرویس Apache برای شروع به طور خودکار در بوتبشر

پایگاه داده MySQL را پیکربندی کنید

اسکریپت امنیتی MySQL را برای تأمین امنیت پایگاه داده خود اجرا کنید:

sudo mysql_secure_installation
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • رمز عبور ریشه را تنظیم کنید
  • کاربران ناشناس را حذف کنید
  • ورود به سیستم ریشه از راه دور
  • پایگاه داده های تست را حذف کنید
  • جداول ممتاز بارگیری مجدد

سپس ، به MySQL وارد شوید و یک پایگاه داده ایجاد کنید:

sudo mysql -u root -p
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

داخل mysql:

CREATE DATABASE mydatabase;
CREATE USER 'abdessamad'@'%' IDENTIFIED BY '123456789';

# Creates a new MySQL user myuser with the password mypassword.
# The @'%' part allows the user to connect from any host (% is a wildcard representing any IP address).
GRANT ALL PRIVILEGES ON mydatabase.* TO 'abdessamad'@'%';

# Refreshes the MySQL server's internal cache of user privileges. This is necessary after creating users or changing privileges to apply the changes.
FLUSH PRIVILEGES;
EXIT;
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

برای خدمت به سایت PHP خود آپاچی را پیکربندی کنید

پرونده های PHP خود را به فهرست وب ریشه منتقل کنید:

sudo rm -rf /var/www/html/*
sudo nano /var/www/html/index.php
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این کد PHP را اضافه کنید:


echo "its finaly working ..."
?>
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ذخیره و خروج.

مجوزهای مناسب را تنظیم کنید:

# Change ownership of all files and directories in /var/www/html recursively
# The user and group ownership is set to 'www-data' which is the default user/group for web servers (Nginx/Apache)
sudo chown -R www-data:www-data /var/www/html

# - Owner (www-data) has read, write, and execute permissions (7)
# - Group (www-data) and Others have read and execute permissions, but no write permissions
sudo chmod -R 755 /var/www/html
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

راه اندازی مجدد آپاچی:

sudo systemctl restart apache2
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اکنون باید روی LocalHost کار کند:

Apache2 روی مرورگر کار می کند

6. آپاچی را برای دسترسی به شبکه پیکربندی کنید

پیکربندی پیش فرض Apache را ویرایش کنید:

sudo nano /etc/apache2/sites-available/000-default.conf
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

پیدا کردن DocumentRoot /var/www/html و اضافه کنید:


    DocumentRoot /var/www/html
    
        AllowOverride All
        Require all granted
    

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ذخیره و خروج.

اجازه ترافیک را از طریق فایروال:

sudo ufw allow 80/tcp
sudo ufw allow 3306/tcp
sudo ufw reload
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

فعال کردن mod_rewrite:

sudo a2enmod rewrite
sudo systemctl restart apache2
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اکنون IP سرور خود را با استفاده از: بررسی کنید:

ip a
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

تصویر IP یک نتیجه

اکنون می توانید به آن در خارج از VM و دسترسی به شبکه دسترسی پیدا کنید:

دسترسی به Apache2 در خارج از localhost در شبکه

اگر کار نمی کند ، یا می خواهید از خارج از دستگاه محلی در شبکه به سرور دسترسی پیدا کنید ، به جای NAT در VMware یا VirtualBox از یک شبکه پل استفاده کنید. این به شما امکان می دهد به جای IP خصوصی از یک آدرس IP محلی (به عنوان مثال ، 192.xxx) استفاده کنید.

اگر سرور Apache و MySQL شما روی سرورهای جداگانه قرار می گیرند ، باید:

اجازه دسترسی از راه دور mySQL را داشته باشید

فایل پیکربندی MySQL را ویرایش کنید:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

پیدا کردن bind-address = 127.0.0.1 و آن را به:

bind-address = 0.0.0.0
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ذخیره و خروج (CTRL + X، پس Y، پس ENTER). اکنون هرکسی می تواند از راه دور به DB شما دسترسی پیدا کند.

mysql را دوباره راه اندازی کنید:

sudo systemctl restart mysql
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اکنون اجازه می دهیم آن را با صفحه PHP پویا آزمایش کنیم:

sudo mysql -u root -p

CREATE DATABASE mydatabase;
USE mydatabase;
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

CREATE TABLE books (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
author VARCHAR(255) NOT NULL,
genre VARCHAR(100),
published_date DATE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


$servername = "localhost";
$username = "myuser";
$password = "mypassword";
$dbname = "mydatabase";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $title = $_POST['title'];
    $author = $_POST['author'];
    $genre = $_POST['genre'];
    $published_date = $_POST['published_date'];

    $sql = "INSERT INTO books (title, author, genre, published_date) 
            VALUES ('$title', '$author', '$genre', '$published_date')";

    if ($conn->query($sql) === TRUE) {
        echo "New book added successfully";
    } else {
        echo "Error: " . $sql . "
"
. $conn->error; } } // Fetching all books $sql = "SELECT id, title, author, genre, published_date FROM books"; $result = $conn->query($sql); $conn->close(); ?> lang="en"> charset="UTF-8"> name="viewport" content="width=device-width, initial-scale=1.0"> </span>Create a New Book<span class="nt"/> <span class="nt"/> <span class="nt"/> <span class="nt"/>Create a New Book<span class="nt"/> <span class="nt"/> <span class="nt"><h2/></span>Book List<span class="nt"/> <span class="cp"><?php </span?> <span class="k">if</span> <span class="p">(</span><span class="nv">$result</span><span class="o">-></span><span class="n">num_rows</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> <span class="k">echo</span> <span class="s2">"<table border="1"> <tr> <th>Title</th> <th>Author</th> <th>Genre</th> <th>Published Date</th> </tr>"<span class="p">;</span> <span class="k">while</span><span class="p">(</span><span class="nv">$row</span> <span class="o">=</span> <span class="nv">$result</span><span class="o">-></span><span class="nf">fetch_assoc</span><span class="p">())</span> <span class="p">{</span> <span class="k">echo</span> <span class="s2">"<tr> <td>" <span class="mf">.</span> <span class="nv">$row</span><span class="p">[</span><span class="s2">"title"</span><span class="p">]</span> <span class="mf">.</span> <span class="s2">"</span></td> <td>" <span class="mf">.</span> <span class="nv">$row</span><span class="p">[</span><span class="s2">"author"</span><span class="p">]</span> <span class="mf">.</span> <span class="s2">"</span></td> <td>" <span class="mf">.</span> <span class="nv">$row</span><span class="p">[</span><span class="s2">"genre"</span><span class="p">]</span> <span class="mf">.</span> <span class="s2">"</span></td> <td>" <span class="mf">.</span> <span class="nv">$row</span><span class="p">[</span><span class="s2">"published_date"</span><span class="p">]</span> <span class="mf">.</span> <span class="s2">"</span></td> </tr>"</span><span class="p">;</span> <span class="p">}</span> <span class="k">echo</span> <span class="s2">"</span></table>"</span><span class="p">;</span> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="k">echo</span> <span class="s2">"No books found"</span><span class="p">;</span> <span class="p">}</span> <span class="cp">?></span> <span class="nt"/> <span class="nt"/> </span></span></span></span></span></code></pre> <div class="highlight__panel js-actions-panel"> <div class="highlight__panel-action js-fullscreen-code-action"> <svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewbox="0 0 24 24" class="highlight-action crayons-icon highlight-action--fullscreen-on"><title>حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

تصویر صفحه PHP پویا با Apache2

اکنون اجازه می دهیم SSH را تنظیم کنیم:

sudo apt install openssh-server
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

sudo systemctl start ssh
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

sudo ufw allow ssh
sudo ufw reload
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ssh-keygen -t rsa -b 4096 -C "[your_email@example.com](mailto:your_email@example.com)"
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

# to get your server username or create a new user if you want with sudo useradd -m -s /bin/bash newusername
whoami

# to get your server ip
hostname -I
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ssh-copy-id username@server_ip
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

تصویر ssh-copy-id در ترمینال

سپس سعی کنید:

ssh username@server_ip
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

تصویر اتصال SSH در نهایت کار می کند

با دنبال کردن این مراحل ، اکنون یک سرور وب کاملاً کاربردی قادر به مدیریت برنامه های PHP ، مدیریت تعامل پایگاه داده و امکان دسترسی از راه دور ایمن از طریق SSH هستید. این تنظیم نه تنها از توسعه پشتیبانی می کند بلکه پایه و اساس استقرار برنامه های دنیای واقعی را نیز فراهم می کند.

اگر این راهنما را مفید دیدید ، به من اطلاع دهید! یادداشت ها و مقالات زیادی در مورد موضوعات مختلف وجود دارد تا به شما در رسیدن به مهارت های برنامه نویسی خود به سطح بعدی کمک کند. من خوشحال می شوم که بینش بیشتری به اشتراک بگذارم! 🚀

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا