Cài Đặt LAMP VirtualHost trên CENTOS 7

Tác giả: 04/12/2022

Hôm nay Nhân Hòa sẽ  hướng dẫn các bạn cấu hình LAMP trên CENTOS 7 với các bước cài đặt, backup cơ bản:

  • Dựng LAMP VirtualHost trên centos 7
  • Cài đặt WordPress
  • Cài đặt  phpMyAdmin
  • Backup tự động source code và database web

LAMP là sự kết hợp của Linux + Apache + MySQL + PHP.

LAMP là một hệ thống bao gồm các ứng dụng hoạt động cùng nhau trên một máy chủ web để lưu trữ một trang web. Mỗi chương trình riêng lẻ phục vụ một mục đích khác nhau, được kết hợp lại để tạo thành một giải pháp máy chủ web linh hoạt.

Trong LAMP, Linux đóng vai trò là hệ điều hành của máy chủ xử lý tất cả các lệnh trên máy

Apache là một phần mềm máy chủ web quản lý các yêu cầu HTTP để cung cấp nội dung cho trang web

MySQL là một hệ quản trị cơ sở dữ liệu có chức năng duy trì dữ liệu của người dùng trên máy chủ

PHP là một ngôn ngữ lập kịch bản cho phép giao tiếp phía máy chủ.

Cài đặt LAMP trên CentOS 7

Máy chủ chạy CentOS 7 có IP= 103.28.36.64 chạy 2 tên miền tudv1.tudv.xyz và tudv2.tudv.xyz, Do mình chỉ làm LAB nên không có sẵn tên miền, các bạn cứ nghĩ tudv1.tudv.xyz và tudv2.tudv.xyz là 2 website độc lập nhé( không phải sub của tudv.xyz)

Cấu hình VirtualHost trong Apache: dạng 1 IP mà nhiều domain trỏ vào, mỗi 1 thư mục chứa dataweb chính nằm trong thư mục /home của mỗi 1 user tạo ra.

Ngược lại với kiểu cấu hình namebased trên là kiểu cấu hình nhiều địa chỉ IP trỏ về 1 domain, kiểu này là cấu hình làm ảo card mạng , các card mạng ảo này nhận IP ảo dựa trên 1 IP thật của máy chủ là ipbased.

Cài Apache

1-Xóa bộ nhớ cache cập nhật:

yum clean all

2-Update yum:

yum update –y

3-Cài apache:

yum install httpd -y

4-Khởi động và cho phép Apache khởi động cùng hệ thống mỗi khi máy reboot:

systemctl start httpd

systemctl enable httpd

5-Kiểm tra dịch vụ đã hoạt động chưa bằng cách nhập lệnh:

systemctl status httpd

6-Firewalld cho phép chạy http và https:

firewall-cmd –zone=public –add-service=http  –permanent

firewall-cmd –zone=public –add-service=https  –permanent

firewall-cmd –reload

7-Tạo user tudv1 là user trong đó /home/tudv1/puclic_html sẽ là thư mục chứa source code  tudv1.tudv.xyz và tudv2 là user trong đó /home/tudv2/public_html sẽ là thư mục chứa source code tudv2.tudv.xyz

useradd tudv1

passwd tudv1

useradd tudv2

passwd tudv2

8-Tạo và phân quyền thư mục tudv1, tudv2

su tudv1

mkdir -p  /home/tudv1/ public_html

chmod 711 /home/tudv1

chmod 755 /home/tudv1/public_html

 

su tudv2

mkdir /home/tudv2/public_html

chmod 711 /home/tudv2

chmod 755 /home/tudv2/public_html

 

Mục đích chỉ có user tudv1 toàn quyền với home của user tudv1 và tudv2 toàn quyền

với home của user tudv2

9-Config httpd VirtualHost Sau khi cài xong httpd , file userdir.conf tại /etc/httpd/conf.d/ sẽ được tạo ra ,các bạn chuyển vai trò sang root:

vi /etc/httpd/conf.d/userdir.conf

 

Trong đó có 1 vài chỉ thị: Mặc định UserDir tắt, phải bỏ # đằng trước để kích hoạt. Khi chúng ta dùng userdir thì mặc định đường dẫn chứa web theo gợi ý sẽ là /home/*/public_html là document Root của website đó.

AllowOverride= All

Options None: không có thêm điều kiện nào đó để được phép truy cập

Quay trở lại với user root cấu hình file virtualhost.conf

vi /etc/httpd/conf.d/tudv1.conf

Thêm vào đoạn sau

<VirtualHost *:80>
DocumentRoot /home/tudv1/public_html/
ServerName www.tudv1.tudv.xyz
ServerAlias tudv1.tudv.xyz
ErrorLog /home/tudv1/public_html/error.log
CustomLog /home/tudv1/public_html/requests.log common
</VirtualHost>

Tạo tudv2.conf

vi /etc/httpd/conf.d/tudv2.conf

Thêm vào đoạn sau:

<VirtualHost *:80>
DocumentRoot /home/tudv2/public_html/
ServerName www.tudv2.tudv.xyz
ServerAlias tudv2.tudv.xyz
ErrorLog /home/tudv2/public_html/error.log
CustomLog /home/tudv2/public_html/requests.log common
</VirtualHost>

Cài MariaDB

1-Cài dịch vụ mariadb

yum -y install mariadb mariadb-server

2-Khởi động dịch vụ mariadb

systemctl enable mariadb

service mariadb restart

3-Cấu hình bảo mật MariaDB:

mysql_secure_installation

Khi được nhắc nhập mật khẩu, ta có thể nhấn Enter để trống hoặc cập nhật mật khẩu mới

Sau đó làm các bước để thiết lập mật khẩu. Cuối cùng, tập lệnh sẽ yêu cầu định cấu hình một số biện pháp bảo mật, bao gồm:

  • Xóa người dùng ẩn danh?
  • Không cho phép đăng nhập từ xa?
  • Xóa cơ sở dữ liệu thử nghiệm và truy cập vào nó?
  • Load bảng đặc quyền ngay bây giờ.

 

Cài đặt PHP 8

1-Cài đặt Remi Repository

yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

2-Cài đặt và yum-utils kích hoạt kho lưu trữ EPEL repository

yum -y install epel-release yum-utils

3-Cài php8.0

yum-config-manager –enable remi-php80

4-Cài các module của PHP 8.0

yum install -y php php-fpm php-ldap php-zip php-embedded php-cli php-mysql php-common php-gd php-xml php-mbstring php-mcrypt php-pdo php-soap php-json php-simplexml php-process php-curl php-bcmath php-snmp php-pspell php-gmp php-intl php-imap perl-LWP-Protocol-https php-pear-Net-SMTP php-enchant php-pear php-devel php-zlib php-xmlrpc php-tidy php-opcache php-cli php-pecl-zip unzip gcc

5-Sau khi cài đặt thành công ta có thể kiểm tra phiên bản php bằng lệnh

php -v

http://tudv1.tudv.xyz/info.php

6-Khởi động lại Apache để đảm bảo rằng nó hoạt động với PHP mới được cài đặt

systemctl restart httpd

Tạo database:

1-Đăng nhập vào mysql

mysql -u root -p

2-Nhập password đã tạo cho MariaDB server đã tạo trước đó

3-Tạo cơ sở dữ liệu

CREATE DATABASE tudv1;

Sau khi tạo xong cơ sở dữ liệu, ta cần tạo người dùng cho cơ sở dữ liệu đó.

CREATE USER tudv1@localhost IDENTIFIED BY ‘Pp098765a@1’;

Tại thời điểm này, ta đã tạo một người dùng cơ sở dữ liệu, tuy nhiên ta vẫn chưa cấp cho người dùng đó quyền truy cập vào cơ sở dữ liệu. Có thể thêm các quyền đó bằng lệnh sau:

GRANT ALL PRIVILEGES ON tudv1.* TO tudv1@localhost IDENTIFIED BY ‘Pp098765a@1’;

Bây giờ người dùng có quyền truy cập vào cơ sở dữ liệu, ta cần xóa các đặc quyền để MySQL biết về những thay đổi đặc quyền gần đây mà ta đã thực hiện

FLUSH PRIVILEGES;

Tạo DB với site tudv2

CREATE DATABASE tudv2;

CREATE USER tudv2@localhost IDENTIFIED BY ‘Pp098765a@1’;

GRANT ALL PRIVILEGES ON tudv2.* TO tudv2@localhost IDENTIFIED BY ‘Pp098765a@1’;

FLUSH PRIVILEGES;

exit

Cài đặt WordPress

yum install wget mkdir /data && cd /data

wget http://wordpress.org/latest.tar.gz

Giải nén tệp vừa tải xuống

tar -xzvf latest.tar.gz

Chuyển wordpress vào public_html từng user

rsync -av /data/wordpress/* /home/tudv1/public_html

rsync -av /data/wordpress/* /home/tudv2/public_html

Khai báo kết nối database của wordpress mới tải về

cd /home/tudv1/public_html

Tạo tệp wp-config.php bằng cách sao chép tệp mẫu wp-config-sample.php mà WordPress đã cung cấp

cp wp-config-sample.php wp-config.php

Chỉnh sửa tệp wp-config.php mới với thông tin cơ sở dữ liệu chính xác mà ta đã tạo ở trên

vi wp-config.php

Thay đổi các giá trị DB_NAME, DB_USER, DB_PASSWORD thành các giá trị đã thiết lập ở trên

Làm tương tự với tudv2.

Truy cập vào trang quản trị WordPress bằng cách thêm hậu tố /wp-admin vào sau tên miền http://tudv1.tudv.xyz/wp-admin/ , http://tudv1.tudv.xyz/wp-admin/ để tạo tài khoản admin, thông tin sở hữu website…

Kết quả truy cập:

Cài PhpMyAdmin

1-Cài đặt kho lưu trữ EPEL

yum install epel-release

2-Cài đặt phpMyadmin trên CentOS 7

yum install -y phpmyadmin

Sau khi cài đặt hoàn tất cần phải chỉnh sửa tệp cấu hình phpMyadmin

3-Chỉnh sửa tệp phpMyadmin.conf

Chỉnh sửa để cho phép các máy có thể truy cập phpMyadmin từ xa

vi /etc/httpd/conf.d/phpMyAdmin.conf



Login phpMyAdmin bằng root

Login phpMyAdmin bằng user:

Lên lịch BACKUP

1-Crontab

Crontab (CRON TABLE) là một tiện ích cho phép thực hiện các tác vụ một cách tự động theo định kỳ, ở chế độ nền của hệ thống. Crontab là một file chứa đựng bảng biểu (schedule) của các entries được chạy.

Bằng cách sử dụng các lệnh trong Linux Crontab ta có thể tạo những task chạy vào những giờ cụ thể đặt trước, như vào giờ nào trong ngày, vào giờ nào trong ngày vào thứ mấy trong tuần….

Một số lệnh thường dùng:

crontab -e: tạo, chỉnh sửa các crontab

crontab -l: xem các Crontab đã tạo

crontab -r: xóa file crontab

2-Cài đặt crontab

yum install cronie

Start crontab và tự động chạy mỗi khi reboot:

service crond start
chkconfig crond on

3-Tạo bash script backup source code

Ở phần này mình backup đến một thư mục nào đó chứa các bản backup, thực tế bạn có thể backup vào một đĩa khác,một thư mục được mount bởi các giao thức sharing, hoặc một ftp server.

mkdir /backup/domains

Tạo file backup.sh trong  /root

vi backup.sh

Thêm vào đoạn mẫu

#!/bin/bash

TODAY=`/bin/date +%Y%m%d-%H%M`

mkdir /backup/domains/${TODAY}

FILENAME=”tudv1.tudv.xyz-${TODAY}”

tar -cvzf /backup/domains/${TODAY}/${FILENAME}.tar.gz /home/tudv1
echo Da backup thanh cong ${FILENAME} >> /backup/log.txt

FILENAME=”tudv2.tudv.xyz-${TODAY}”

tar -cvzf /backup/domains/${TODAY}/${FILENAME}.tar.gz /home/tudv2
echo Da backup thanh cong ${FILENAME} >> /backup/log.txt

#Xóa folder backup cũ quá 12 phút
find /backup/domains/* -mmin +12 -type d | xargs rm -rf
exit 0

Biến thời gian TODAY thay đổi theo thời gian của máy, thực tế bạn không cần thêm giờ và phút, vì ở đây là mình làm LAB

Biến tên  FILENAME thay đổi theo TODAY

tar.. Đóng gói và nén thư mục /home/tudv1 tại /backup/domains/${TODAY} với tên là FILENAME.taz.gz

ghi 1 đoạn nhật ký ” Da backup thanh cong FILENAME tại log.txt

Sau đó tìm trong /backup/domains/${TODAY} tất cả các folder  có thời gian quá >12 phút kể từ lúc thực thi lệnh tìm kiếm này

Không trả giá trị (ko in)gì nếu ko lỗi

Tạo cronetab:

Trên thực tế thời gian backup các bạn tính bằng ngày, bằng tuần , giữ lại bản backup cũ bao lâu tùy vào nhu cầu của bạn.(Giữ lại 1 tháng, backup hàng tuần)

crontab -e

Thêm vào đoạn sau với ý nghĩa : cứ 2 phút di chuyển vào /root và chạy backup.sh

*/2 * * * * cd /root;./backup.sh

Thực tế là bạn thay giá trị phút bằng ngày, ngày trong tuần.

Mình chạy lệnh tailf -f /backup/log.txt để theo dõi

Kiểm tra file nén trong /backup/domains/${TODAY}

 

Như vậy là các bản backup quá cũ đã bị xóa.

4- Tạo bash script backup database

Mô tả kịch bản: mình làm đơn giản dễ hiểu.

  • Export toàn bộ DatabaseName theo từng DBname
  • Đóng gói và chuyển tới /backup/database/thư mục tạo theo thời gian TODAY
  • Xóa thư mục chứa bản backup cũ

Tạo đường dẫn chứa file backup database

mkdir /backup/database ; nơi chứa file backup database đã nén.

Bạn tạo file bash như sau.

vi /root/backupdb.sh

Thêm vào

#!/bin/bash

TODAY=`/bin/date +%Y%m%d-%H%M`

mkdir /backup/database/${TODAY}

FILENAME=”Databasetudv1-${TODAY}”

mysqldump –single-transaction –routines –triggers –add-drop-table –extended-insert -u tudv1 -p’Pp098765a@1′ tudv1 | gzip -9 > /backup/database/${TODAY}/${FILENAME}.sql.gz
echo Da backup thanh cong ${FILENAME} >> /backup/logdb.txt

FILENAME=”Databasetudv2-${TODAY}”
mysqldump –single-transaction –routines –triggers –add-drop-table –extended-insert -u tudv2 -p’Pp098765a@1′ tudv2 | gzip -9 > /backup/database/${TODAY}/${FILENAME}.sql.gz

echo Da backup thanh cong ${FILENAME} >> /backup/logdb.txt

#Xóa folder backup cũ quá 12 phút
find /backup/database/* -mmin +12 -type d | xargs rm -rf

Diễn giải

TODAY=`/bin/date +%Y%m%d-%H%M`

Lấy 1 biến thời gian là TODAY;

mkdir /backup/database/${TODAY}

Tạo 1 thư mục để chứa file backup database, tên của nó thay đổi theo biến TODAY, nó thay đổi theo ngày

FILENAME=”Databasetudv1-${TODAY}”

Biến FILENAME mục đích để đặt tên cho file sql backup, nó đánh dấu tên là database tudv1 kèm theo thời gian để dễ nhận biết.

mysqldump –single-transaction –routines –triggers –add-drop-table –extended-insert -u tudv1 -p’Pp098765a@1′ tudv1 | gzip -9 > /backup/database/${TODAY}/${FILENAME}.sql.gz

Xuất database tudv1 với user và pass tudv1 sau đó nén dạng zip, rồi chuyển vào đúng folder được tạo ra theo ngày, với tên gọi là database tudv1.

FILENAME=”Databasetudv2-${TODAY}”

Trình tự công việc đến xuất database tudv2, lúc này biến TODAY đã thay đổi, nhằm phục vụ cho việc đặt tên file sql của tudv2.

mysqldump –single-transaction –routines –triggers –add-drop-table –extended-insert -u tudv2 -p’Pp098765a@1′ tudv2 | gzip -9 > /backup/database/${TODAY}/${FILENAME}.sql.gz

Đoạn cuối này mục đích chỉ kiểm tra xóa folder database cũ quá 12 phút và bắn log backup thành công

find /backup/database/* -mmin +12 -type d | xargs rm -rf

echo Da backup thanh cong ${FILENAME} >> /backup/logdb.txt

Và bước cuối cùng là thêm vào crontab 2 phút 1 lần chạy backupdb.sh

crontab -e

Kết quả Log báo backup database:

Kiểm tra thư mục:

 

Tổng kết

Như vậy Nhân Hòa đã hướng dẫn các bạn cách dựng LAMP và quản trị cơ bản LAMP trên CENTOS7.

Trên thực tế cần thêm những file cấu hình server cần backup.

Hy vọng bài viết này hữu ích với các bạn. Chúc các bạn thành công !

Nếu trong quá trình thực hiện theo hướng dẫn mà gặp phải vấn đề hoặc có điều gì thắc mắc thì bạn cứ để lại phản hồi bên dưới. Xin chào các bạn và hẹn gặp lại các bạn trong các bài viết sau tại wiki.nhanhoa.com

Trả lời