آموزش نصب LEMP روی سرور ابری اوبونتو

آموزش نصب LEMP روی سرور ابری اوبونتو

آموزش کامل نصب و راه‌اندازی استک LEMP (Nginx, MySQL, PHP) روی سرور ابری اوبونتو. راه‌اندازی وب‌سرور، دیتابیس و PHP برای میزبانی سایت‌های مدرن.

استک LEMP (Linux, Nginx, MySQL/MariaDB, PHP) یکی از محبوب‌ترین ترکیب‌های نرم‌افزاری برای میزبانی وب‌سایت‌های مدرن است. این استک به دلیل کارایی بالا، مصرف کم منابع و انعطاف‌پذیری، انتخاب بسیاری از توسعه‌دهندگان و مدیران سیستم می‌باشد. در این آموزش، نصب و پیکربندی استک LEMP روی سرور ابری اوبونتو را به صورت گام‌به‌گام بررسی می‌کنیم.

پیش‌نیازها

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

  • یک سرور ابری یا VPS با سیستم‌عامل اوبونتو 20.04 یا 22.04
  • دسترسی root یا کاربر با مجوز sudo
  • حداقل 1GB RAM (2GB یا بیشتر توصیه می‌شود)
  • حداقل 10GB فضای دیسک
  • یک نام دامنه (اختیاری، اما برای تنظیم SSL توصیه می‌شود)
  • دانش پایه‌ای از خط فرمان لینوکس

نصب و پیکربندی Nginx

Nginx یک وب‌سرور قدرتمند و کارآمد است که برای سرعت، پایداری و مصرف منابع کم شناخته شده است. برای نصب Nginx، مراحل زیر را دنبال کنید:

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

sudo apt update
sudo apt upgrade -y

سپس Nginx را نصب کنید:

sudo apt install nginx -y

پس از نصب، وضعیت Nginx را بررسی کنید:

sudo systemctl status nginx

اگر Nginx به درستی نصب شده باشد، باید به صورت خودکار اجرا شود. برای مشاهده صفحه خوش‌آمدگویی Nginx، آدرس IP سرور خود را در مرورگر وارد کنید.

اگر فایروال UFW فعال است، باید اجازه دسترسی به پورت HTTP و HTTPS را بدهید:

sudo ufw allow 'Nginx Full'

تنظیمات پایه Nginx

تنظیمات اصلی Nginx در فایل /etc/nginx/nginx.conf قرار دارد. برای بهینه‌سازی اولیه، می‌توانید برخی تغییرات را اعمال کنید:

sudo nano /etc/nginx/nginx.conf

در بخش http{} تنظیمات زیر را ویرایش یا اضافه کنید:

http {
    # تنظیمات پایه
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    server_tokens off;

    # گزینه‌های بافر
    client_max_body_size 64m;
    client_body_buffer_size 128k;
    client_header_buffer_size 1k;
    large_client_header_buffers 4 4k;

    # تنظیمات Gzip
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    
    # ادامه تنظیمات پیش‌فرض
    ...
}

پس از ذخیره تغییرات، پیکربندی را بررسی کرده و Nginx را راه‌اندازی مجدد کنید:

sudo nginx -t
sudo systemctl restart nginx

نصب و تنظیم MySQL/MariaDB

برای ذخیره‌سازی داده‌ها، به یک پایگاه داده نیاز داریم. در این آموزش از MariaDB استفاده می‌کنیم که یک نسخه متن‌باز و پیشرفته از MySQL است:

sudo apt install mariadb-server -y

پس از نصب، اسکریپت امنیتی را اجرا کنید تا تنظیمات امنیتی پایه را انجام دهید:

sudo mysql_secure_installation

در طول این فرآیند، به سوالات زیر پاسخ دهید:

  • رمز عبور فعلی root را وارد کنید (معمولاً خالی است، پس Enter بزنید)
  • آیا می‌خواهید رمز عبور root را تغییر دهید؟ Y (بله)
  • یک رمز عبور قوی تعیین کنید
  • کاربران ناشناس را حذف کنید؟ Y (بله)
  • ورود root از راه دور را غیرفعال کنید؟ Y (بله)
  • پایگاه داده آزمایشی را حذف کنید؟ Y (بله)
  • جدول امتیازات را مجدداً بارگذاری کنید؟ Y (بله)

برای آزمایش نصب MariaDB، وارد خط فرمان MySQL شوید:

sudo mysql

حالا می‌توانید یک پایگاه داده و کاربر جدید ایجاد کنید:

CREATE DATABASE mywebsite;
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'secure_password';
GRANT ALL PRIVILEGES ON mywebsite.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

جایگزین کردن 'secure_password' با رمز عبور قوی خود را فراموش نکنید!

نصب و پیکربندی PHP-FPM

PHP-FPM (FastCGI Process Manager) یک پیاده‌سازی جایگزین PHP FastCGI است که عملکرد بهتری نسبت به روش‌های قدیمی دارد. برای نصب PHP-FPM و برخی افزونه‌های ضروری:

sudo apt install php8.1-fpm php8.1-mysql php8.1-common php8.1-mbstring php8.1-xml php8.1-curl php8.1-gd php8.1-zip php8.1-intl php8.1-bcmath -y

نسخه PHP نصب شده ممکن است متفاوت باشد (مثلاً 7.4 یا 8.2). دستور زیر را اجرا کنید تا نسخه نصب شده را ببینید:

php -v

در نتیجه، دستور نصب را با نسخه مناسب PHP تطبیق دهید.

برخی تنظیمات PHP را برای بهبود امنیت و عملکرد بهینه‌سازی کنیم:

sudo nano /etc/php/8.1/fpm/php.ini

تنظیمات زیر را پیدا کرده و تغییر دهید:

upload_max_filesize = 32M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 300
max_input_time = 300
display_errors = Off
expose_php = Off

PHP-FPM را مجدداً راه‌اندازی کنید:

sudo systemctl restart php8.1-fpm

تنظیم Nginx برای کار با PHP

حالا باید Nginx را پیکربندی کنیم تا درخواست‌های PHP را به PHP-FPM ارسال کند:

sudo nano /etc/nginx/sites-available/default

محتویات فایل را با کد زیر جایگزین کنید:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    
    root /var/www/html;
    index index.php index.html index.htm;
    
    server_name _;
    
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
    
    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }
    
    location ~ /.ht {
        deny all;
    }
}

پیکربندی را بررسی کرده و Nginx را مجدداً راه‌اندازی کنید:

sudo nginx -t
sudo systemctl restart nginx

برای آزمایش PHP، یک فایل info.php در مسیر /var/www/html ایجاد کنید:

sudo nano /var/www/html/info.php

و کد زیر را در آن وارد کنید:

<?php
phpinfo();
?>

حالا با مراجعه به http://your_server_ip/info.php در مرورگر، باید اطلاعات PHP را مشاهده کنید.

به دلایل امنیتی، پس از بررسی، فایل info.php را حذف کنید: sudo rm /var/www/html/info.php

نصب گواهی SSL با Let's Encrypt

برای ایمن‌سازی وب‌سایت خود با HTTPS، از Let's Encrypt استفاده می‌کنیم که گواهی‌های SSL رایگان ارائه می‌دهد. ابتدا Certbot را نصب کنید:

sudo apt install certbot python3-certbot-nginx -y

سپس پیکربندی مناسب برای دامنه خود را ایجاد کنید:

sudo nano /etc/nginx/sites-available/example.com

با محتوای زیر:

server {
    listen 80;
    listen [::]:80;
    
    server_name example.com www.example.com;
    
    root /var/www/example.com;
    index index.php index.html index.htm;
    
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
    
    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }
    
    location ~ /.ht {
        deny all;
    }
}

دامنه example.com را با دامنه واقعی خود جایگزین کنید. پوشه ریشه را ایجاد کنید:

sudo mkdir -p /var/www/example.com
sudo chown -R www-data:www-data /var/www/example.com
sudo chmod -R 755 /var/www/example.com

یک پیوند نمادین ایجاد کرده و Nginx را مجدداً راه‌اندازی کنید:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

اکنون Certbot را اجرا کنید تا گواهی SSL را دریافت و نصب کند:

sudo certbot --nginx -d example.com -d www.example.com

دستورالعمل‌های روی صفحه را دنبال کنید. Certbot به طور خودکار پیکربندی Nginx را به‌روزرسانی می‌کند و HTTPS را فعال می‌کند.

تنظیم Virtual Hosts برای چندین سایت

اگر می‌خواهید چندین وب‌سایت را روی یک سرور میزبانی کنید، باید برای هر دامنه یک Virtual Host جداگانه تنظیم کنید. مراحل زیر را برای هر دامنه تکرار کنید:

  1. یک فایل پیکربندی ایجاد کنید: sudo nano /etc/nginx/sites-available/site2.com
  2. پیکربندی مشابه بالا را با تغییر دامنه و مسیر ریشه اضافه کنید
  3. پوشه ریشه را ایجاد کنید: sudo mkdir -p /var/www/site2.com
  4. مجوزها را تنظیم کنید:
    sudo chown -R www-data:www-data /var/www/site2.com
    sudo chmod -R 755 /var/www/site2.com
  5. پیوند نمادین ایجاد کنید: sudo ln -s /etc/nginx/sites-available/site2.com /etc/nginx/sites-enabled/
  6. Nginx را بررسی و راه‌اندازی مجدد کنید: sudo nginx -t && sudo systemctl restart nginx
  7. گواهی SSL را برای سایت جدید نصب کنید

تنظیمات امنیتی

برخی تنظیمات امنیتی توصیه شده:

1. نصب و پیکربندی Fail2Ban

Fail2Ban از سرور شما در برابر تلاش‌های ورود به سیستم محافظت می‌کند:

sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

یک پیکربندی سفارشی ایجاد کنید:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

تنظیمات پایه را تغییر دهید:

[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5

[sshd]
enabled = true

[nginx-http-auth]
enabled = true

Fail2Ban را راه‌اندازی مجدد کنید:

sudo systemctl restart fail2ban

2. تنظیم هدرهای امنیتی در Nginx

هدرهای امنیتی را به پیکربندی سایت خود اضافه کنید:

sudo nano /etc/nginx/sites-available/example.com

در بخش server{} هدرهای زیر را اضافه کنید:

add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "strict-origin-when-cross-origin";
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

3. محدود کردن دسترسی به فایل‌های حساس

اضافه کردن قوانین زیر به پیکربندی Nginx:

location ~ /.(?!well-known) {
    deny all;
}

location ~* (?:.(?:bak|conf|dist|fla|in[ci]|log|psd|sh|sql|sw[op])|~)$ {
    deny all;
}

بهینه‌سازی عملکرد

برای بهبود عملکرد سرور LEMP، چند اقدام موثر می‌توان انجام داد:

1. فعال‌سازی کش FastCGI در Nginx

کش FastCGI می‌تواند عملکرد سایت‌های PHP را بهبود بخشد. برای فعال‌سازی آن، در پیکربندی سایت خود:

location ~ .php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    fastcgi_cache_path /var/run/nginx-cache levels=1:2 keys_zone=MYAPP:100m inactive=60m;
    fastcgi_cache_key "$scheme$request_method$host$request_uri";
    fastcgi_cache MYAPP;
    fastcgi_cache_valid 200 60m;
    fastcgi_cache_use_stale error timeout invalid_header http_500;
    fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
}

2. افزایش محدودیت فایل‌های باز برای Nginx

ایجاد فایل پیکربندی سیستمی:

sudo nano /etc/systemd/system/nginx.service.d/limits.conf

با محتوای زیر:

[Service]
LimitNOFILE=30000

بارگیری مجدد سیستم و راه‌اندازی مجدد Nginx:

sudo systemctl daemon-reload
sudo systemctl restart nginx

3. بهینه‌سازی تنظیمات MariaDB

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

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

تنظیمات زیر را در بخش [mysqld] اضافه یا ویرایش کنید:

innodb_buffer_pool_size = 256M
innodb_log_file_size = 64M
innodb_flush_method = O_DIRECT
query_cache_type = 1
query_cache_size = 32M
query_cache_limit = 1M
key_buffer_size = 32M

MariaDB را راه‌اندازی مجدد کنید:

sudo systemctl restart mariadb

راه‌اندازی وب‌سایت خود با میزبانی کانتینری Apploud

تجربه میزبانی مدرن، امن و مقیاس‌پذیر را همین امروز آغاز کنید. با استفاده از کد تخفیف BLOG15 از ۱۵٪ تخفیف در سرویس‌های میزبانی کانتینری بهره‌مند شوید.

مشاهده تعرفه‌ها