اگر یک سیستم قدیمی یا کامپیوتر بدون استفاده دارید، میتوانید از آن به عنوان یک سرور لینوکس استفاده کنید و بدون خرید هاست، یک وبسایت را روی شبکه خانگی خود میزبانی نمائید. برای این کار به یک سیستم دارای لینوکس، اتصال اینترنت، یک IP پابلیک و یک وبسرور نیاز دارید. اگر IP پابلیک شما ثابت (استاتیک) نباشد، میتوانید از سرویسهای Dynamic DNS مانند DuckDNS استفاده کنید تا یک نام ثابت همیشه به IP فعلی اینترنت شما اشاره کند.
در این مطلب، وبسرور Apache را نصب میکنیم و در ادامه MariaDB، PHP و WordPress را راهاندازی میکنیم. سپس با Port Forwarding دسترسی از اینترنت را فراهم کرده و در نهایت HTTPS را با گواهی رایگان Let’s Encrypt فعال میکنیم.
برای میزبانی وبسایت در خانه به چه چیزهایی نیاز داریم؟
قبل از شروع، موارد زیر را آماده کنید:
- یک کامپیوتر یا سرور با لینوکس
- توزیعی مانند Ubuntu، Debian، Rocky Linux یا RHEL
- اتصال اینترنت
- IP عمومی روی اتصال اینترنت
- دسترسی به تنظیمات مودم یا روتر
- امکان Port Forwarding روی روتر
- Apache
- MariaDB
- PHP
- WordPress
یکی از مهمترین پیشنیازها داشتن IP پابلیک است. بسیاری از اتصالهای خانگی IP عمومی داینامیک دارند و ممکن است این IP بعد از قطع و وصل اینترنت تغییر کند. در این حالت میتوان از DDNS استفاده کرد.
مرحله اول، راهاندازی DuckDNS برای IP داینامیک
DuckDNS یک سرویس رایگان Dynamic DNS است که یک نام مانند زیر در اختیار شما قرار میدهد:
mywebsite.duckdns.org
این نام میتواند همیشه به IP عمومی فعلی اینترنت شما اشاره کند.
پس از ایجاد دامنه در DuckDNS، باید IP عمومی سیستم را به صورت دورهای برای سرویس ارسال کنیم. برای این کار ابتدا یک پوشه ایجاد کنید:
mkdir -p ~/duckdns
سپس اسکریپت بهروزرسانی IP را ایجاد کنید:
echo 'echo url="https://www.duckdns.org/update?domains=<your-subdomain>&token=<your-token>&ip=" | curl -k -o ~/duckdns/duck.log -K -' > ~/duckdns/duck.sh
مقادیر <your-subdomain> و <your-token> را با اطلاعات حساب DuckDNS خود جایگزین کنید.
مجوز اجرای اسکریپت را تنظیم کنید:
chmod 700 ~/duckdns/duck.sh
برای اینکه IP به صورت خودکار بهروزرسانی شود، میتوان این اسکریپت را با Cron هر پنج دقیقه اجرا کرد:
crontab -e
سپس این خط را اضافه کنید:
*/5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1
برای آزمایش:
~/duckdns/duck.sh cat ~/duckdns/duck.log
در صورت دریافت OK، بهروزرسانی IP با موفقیت انجام شده است.
مرحله دوم، نصب Apache
Apache یکی از وبسرورهای متنباز و قدیمی لینوکس است که برای میزبانی وبسایتهای استاتیک و داینامیک استفاده میشود.
در Ubuntu و Debian میتوانید آن را با دستور زیر نصب کنید:
sudo apt update sudo apt install apache2 -y
سرویس را فعال و اجرا کنید:
sudo systemctl enable --now apache2
و وضعیت آن را بررسی کنید:
sudo systemctl status apache2
در Rocky Linux و سایر توزیعهای مبتنی بر RHEL:
sudo dnf install httpd -y sudo systemctl enable --now httpd
در این مرحله، Apache آماده دریافت درخواستهای HTTP است.
مرحله سوم، نصب MariaDB
اگر قصد دارید WordPress یا هر نرمافزار مبتنی بر پایگاه داده را اجرا کنید، به یک Database Server نیاز دارید.
در Ubuntu و Debian:
sudo apt install mariadb-server mariadb-client -y sudo systemctl enable --now mariadb
در Rocky Linux:
sudo dnf install mariadb-server -y sudo systemctl enable --now mariadb
MariaDB اطلاعاتی مانند نوشتهها، کاربران، تنظیمات و سایر دادههای WordPress را ذخیره میکند.
مرحله چهارم، نصب PHP
WordPress با PHP اجرا میشود، بنابراین PHP و ماژولهای موردنیاز آن را نصب کنید.
در Ubuntu و Debian:
sudo apt install php libapache2-mod-php php-mysql php-curl php-gd php-mbstring php-xml php-zip php-bcmath -y
در Rocky Linux:
sudo dnf install php php-cli php-common php-gd php-mysqlnd php-pdo php-bcmath php-curl php-zip php-xml -y
اکنون اجزای اصلی LAMP شامل Linux، Apache، MariaDB و PHP آماده هستند.
مرحله پنجم، نصب WordPress
برای دریافت آخرین نسخه WordPress:
wget https://wordpress.org/latest.tar.gz
فایل را اکستراکت کنید:
tar -xvzf latest.tar.gz
سپس فایلهای WordPress را به مسیر Document Root منتقل کنید:
sudo mv wordpress /var/www/html/
مجوزها و مالکیت فایلها را تنظیم کنید:
sudo chmod 755 -R /var/www/html/wordpress/ sudo chown -R www-data:www-data /var/www/html/wordpress/
در Rocky Linux معمولا مالک فایلها باید apache باشد:
sudo chown -R apache:apache /var/www/html/wordpress/
در سیستمهایی که SELinux فعال است، ممکن است لازم باشد Context فایلها را هم اصلاح کنید:
sudo restorecon -Rv /var/www/html/wordpress/
ایجاد پایگاه داده WordPress
ابتدا وارد MariaDB شوید:
sudo mysql -u root -p
سپس پایگاه داده و کاربر مخصوص WordPress را ایجاد کنید:
CREATE DATABASE wordpress_db; CREATE USER 'wordpress_user'@'localhost' IDENTIFIED BY 'StrongPassword'; GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wordpress_user'@'localhost';
در پایان:
FLUSH PRIVILEGES; EXIT;
استفاده از یک کاربر اختصاصی برای WordPress بهتر از استفاده مستقیم از حساب root است.
برای میزبانی وبسایتها و سرویسهای مبتنی بر لینوکس، خرید سرور مجازی لینوکس را بررسی و پلن مناسب خود را انتخاب کنید.
مرحله ششم، تنظیم Virtual Host در Apache
برای اینکه Apache دامنه DuckDNS را به پوشه WordPress متصل کند، باید یک Virtual Host ایجاد کنیم.
در Ubuntu و Debian:
sudo nano /etc/apache2/sites-available/wordpress.conf
محتوای فایل:
<VirtualHost *:80>
ServerAdmin admin@your_domain.com
DocumentRoot /var/www/html/wordpress
ServerName <your-subdomain>.duckdns.org
<Directory /var/www/html/wordpress>
Options FollowSymlinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/wordpress_error.log
CustomLog ${APACHE_LOG_DIR}/wordpress_access.log combined
</VirtualHost>
به جای mywebsite.duckdns.org نام DuckDNS خودتان را قرار دهید.
سپس سایت و Rewrite را فعال کنید:
sudo a2ensite wordpress sudo a2enmod rewrite sudo a2dissite 000-default sudo systemctl restart apache2
در Rocky Linux میتوانید فایل Virtual Host را در مسیر زیر قرار دهید:
sudo nano /etc/httpd/conf.d/wordpress.conf
ساختار Virtual Host در هر دو سیستم مشابه است.
مرحله هفتم، باز کردن پورتهای HTTP و HTTPS
فایروال لینوکس باید اجازه دسترسی به پورتهای 80 و 443 را بدهد.
در Ubuntu و Debian:
sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw reload
در Rocky Linux:
sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
اما باز کردن پورت روی فایروال سرور به تنهایی کافی نیست. چون سرور داخل شبکه خانگی قرار دارد، باید روی روتر هم Port Forwarding انجام شود.
مرحله هشتم، تنظیم Port Forwarding روی روتر
ابتدا IP داخلی سرور لینوکس را پیدا کنید:
hostname -I
برای مثال ممکن است خروجی چیزی شبیه این باشد:
192.168.0.162
اکنون وارد پنل مدیریتی روتر شوید و در بخش Port Forwarding دو قانون ایجاد کنید:
External Port Internal IP Internal Port 80 192.168.0.162 80 443 192.168.0.162 443
به این ترتیب درخواستهایی که از اینترنت روی پورت 80 یا 443 دریافت میشوند، به سرور لینوکس داخل شبکه ارسال خواهند شد.
برای تست بهتر است از اینترنت موبایل و خارج از شبکه خانگی استفاده کنید:
curl -I https://mywebsite.duckdns.org
اگر سایت از اینترنت قابل دسترسی باشد، باید پاسخ HTTP دریافت کنید.
مرحله نهم، نصب WordPress از طریق مرورگر
اکنون آدرس دامنه DuckDNS را در مرورگر باز کنید:
https://mywebsite.duckdns.org
صفحه نصب WordPress نمایش داده میشود.
در مراحل نصب، اطلاعات پایگاه دادهای که قبلا ایجاد کردیم را وارد کنید:
Database Name: wordpress_db Username: wordpress_user Password: StrongPassword Database Host: localhost
پس از تکمیل نصب، میتوانید وارد پیشخوان WordPress شوید و سایت خود را مدیریت کنید.
مرحله دهم، فعالسازی HTTPS با Let’s Encrypt
اگر سایت از اینترنت قابل دسترسی است، استفاده از HTTPS ضروری است. برای دریافت گواهی رایگان Let’s Encrypt میتوان از Certbot استفاده کرد.
در Ubuntu و Debian:
sudo apt install certbot python3-certbot-apache -y
سپس:
sudo certbot --apache -d mywebsite.duckdns.org
در Rocky Linux:
sudo dnf install certbot python3-certbot-apache -y
و:
sudo certbot --apache -d mywebsite.duckdns.org
Certbot میتواند تنظیمات Apache را برای HTTPS انجام دهد و امکان انتقال خودکار HTTP به HTTPS را فراهم کند.
آیا میزبانی وبسایت روی سرور خانگی مناسب است؟
راهاندازی وبسایت روی کامپیوتر خانگی برای یادگیری لینوکس، آزمایش وبسرور، توسعه و پروژههای شخصی گزینه خوبی است. با این روش میتوانید بدون پرداخت هزینه هاست، با Apache، MariaDB، PHP، WordPress، DNS، فایروال و Port Forwarding کار کنید.
اما برای یک وبسایت عمومی و مهم، محدودیتهایی وجود دارد. قطع شدن برق یا اینترنت باعث از دسترس خارج شدن سایت میشود. IP متغیر، محدودیت آپلود اینترنت، امنیت شبکه خانگی و نیاز به بکاپگیری منظم هم باید در نظر گرفته شوند.
به همین دلیل، سرور خانگی بیشتر برای محیط آزمایشی و آموزشی مناسب است. برای وبسایتهای تجاری، استفاده از سرور مجازی یا زیرساخت حرفهای معمولا مدیریت سادهتر و دسترسپذیری بیشتری فراهم میکند.
جمعبندی
برای میزبانی رایگان یک وبسایت روی سرور خانگی لینوکس میتوان یک سیستم قدیمی را به وبسرور تبدیل کرد. در این سناریو، DuckDNS مشکل IP پویا را تا حد زیادی برطرف میکند، Apache درخواستهای وب را دریافت میکند، MariaDB اطلاعات WordPress را ذخیره میکند و PHP امکان اجرای WordPress را فراهم میکند.
در ادامه با تنظیم فایروال و Port Forwarding، دسترسی از اینترنت فراهم میشود و با Let’s Encrypt میتوان HTTPS رایگان را فعال کرد.
این پروژه علاوه بر میزبانی یک وبسایت، تمرین بسیار خوبی برای یادگیری Linux، Apache، MariaDB، PHP، DNS، Firewall، Port Forwarding، SSL و WordPress است.