Cài Đặt LAMP VirtualHost trên CENTOS 7
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/bashTODAY=`/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.txtFILENAME=”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.txtFILENAME=”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.gzecho 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