Hướng dẫn chi tiết cách cài đặt LEMP với Php7.2 trên hệ điều hành Centos 7, áp dụng cho các bạn có nhu cầu cài đặt VPS Centos 7 dùng chạy webserer với ngôn ngữ lập trình PHP và cơ sở dữ liệu Mysql/Mariadb. Tôi cũng thường làm theo các bước cài đặt này để setup được 1 vps chạy laravel Framewrork.
LEMP là gì?
LEMP là một bộ công cụ phổ biến để vận hành và chạy một hệ thống webserver (LINUX, NGINX, Mysql/Mariadb, PHP). Ở thời gian trước thì phổ biến có LAMP (Linux, Apache, Mysql, Php), hiện nay Nginx được sử dụng phổ biến hơn.
Chuẩn bị trước khi cài
- Access quyền root vào hệ điều hành (hoặc quyền user cũng được)
- Update hệ điều hành:
yum update
Cài đặt Nginx
Mặc định trong Centos 7 khi cài đặt nginx chỉ cần chạy 1 vài lệnh cơ bản, Tuy nhiên đôi khi cũng có thể do bản phân phối nào đó được custom khác đi và có thể không được đúng như ý muốn của bạn. Vì vậy bước đầu tiên để cho chắc chắn bạn cần tạo file /etc/yum.repos.d/nginx.repo
nano /etc/yum.repos.d/nginx.repo
Dán nội dung sau vào file trên:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1
Cập nhật yum và cài đặt nginx
sudo yum update
sudo yum install nginx
Bật service nginx và đảm bảo sao cho nginx tự khởi động khi hệ điều hành khởi động lại
sudo systemctl start nginx
sudo systemctl enable nginx
Kiểm tra phiên bản nginx
sudo nginx -v
Lệnh kiểm tra tình trạng nginx
service nginx status
Cài đặt MariaDb
Mariadb tương tự mysql, sau khi mysql bị bán cho Oracle thì mariadb ra đời, và từ đó đến nay phát triển mạnh và được sử dụng rộng rãi
Cài đặt mariadb với lệnh sau:
sudo yum install mariadb-server
Khởi động service mariadb và đảm bảo service này sẽ tự khởi động khi reboot hệ điều hành
sudo systemctl start mariadb
sudo systemctl enable mariadb
hoặc đôi khi tên service không phải mariadb mà vẫn là mysql thì chạy lệnh như sau
sudo systemctl start mysql
sudo systemctl enable mysql
Sau khi cài đặt và khởi động mariadb, bạn cần setup password mysql. Để cài đặt mật khẩu root cho mariadb ta làm như sau: chạy mysql_secure_installation
sudo mysql_secure_installation
Nếu bạn được nhắc nhập mật khẩu root hiện tại thì hãy nhấn Enter (vì lúc này chưa có mật khẩu)
Enter current password for root (enter for none):
Tiếp theo đó hệ thống sẽ hỏi có cài đặt mật khẩu cho tài khoản root của mysql không (thì chọn Y(es))
Set root password? [Y/n]
Hệ thống sẽ yêu cầu nhập mật khẩu mới , hãy nhập và nhấn Enter theo các bước hướng dẫn khi cài (mật khẩu sẽ được nhập 2 lần, trong đó có 1 lần nhập lại để xác nhận)
Tiếp theo đó chọn Y cho các yêu cầu còn lại, gồm có:
- Remove anonymous users?
- Disallow root login remotely?
- Remove test database and access to it?
- Reload privilege tables now?
Đăng nhập mysql với tài khoản root và mật khẩu vừa tạo để kiểm tra lại
mysql -uroot -p
Tạo 1 database test với tên “codezi_demo_database” sau đó gán quyền truy cập cho tài khoản “codezi_demo_account ” như sau:
CREATE DATABASE codezi_demo_database;
CREATE USER 'codezi_demo_account' IDENTIFIED BY 'mật khẩu tự định nghĩa';
GRANT ALL PRIVILEGES ON codezi_demo_database.* TO 'codezi_demo_account';
quit
Cài đặt Php7.2 trên Centos7
Bình thường nếu hệ điều hành update và bản phân phối Linux của bạn có hỗ trợ Repo php7 sẵn thì bạn có thể cài đặt với lệnh cơ bản như sau:
sudo yum install php php-fpm php-mysql php-pdo
Tuy nhiên đôi khi bạn sẽ nhận được Php với phiên bản khác ngoài ý muốn, và để chắc chắn có thể cài đặt được Php 7.2 bạn cần làm những bước sau:
sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum --enablerepo=remi-php72 install php php-pdo php-pecl php-intl php-opcache php-xml php-pear php-xmlrpc php-mbstring php-json php-gd php-mcrypt phpize php-devel php-fpm php-mysql php-mbstring php-mcrypt
Bạn không nhất thiết phải cài đặt tất cả các gói trên, tùy theo yêu cầu và bài toán của bạn mà chọn các gói phù hợp, tuy nhiên nếu bạn cần cài Php chạy laravel thì cài các gói trên là OK.
Nếu cần cài composer cho php7.2 theo cách trên bạn làm như sau
yum --enablerepo=remi-php72 install composer
Sau khi cài đặt xong, hãy đảm bảo rằng service php-fpm được bật, và nó cũng cần được tự động bật khi hệ điều hành khởi động lại:
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
Vậy là đã cơ bản xong các service để có thể chạy webserver với nginx, php và mariadb. Các việc tiếp theo có thể là tạo web config virtual host để trỏ domain với thư mục code tương ứng bạn muốn.
Cài đặt virtual host nginx trên Centos 7
Bạn có thể mở file /etc/nginx/nginx.conf
để include 1 file config khác của bạn vào, hoặc có thể tạo 1 file config trong thư mục /etc/nginx/conf.d/
Ví dụ ở đây tôi có domain là codezi.pro và tôi cần trỏ đển thư mục code /home/codezi.pro và code tôi sử dụng là framework laravel tôi tạo file như sau:
nano /etc/nginx/conf.d/codezi.pro.conf
Nội dung file như sau:
server {
listen 80;
access_log off;
error_log off;
root /home/codezi.pro/public;
index index.php index.html index.htm;
server_name codezi.pro ;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 256k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Sau đó lưu lại và khởi động lại nginx
service nginx restart
Các file *.conf trong thư mục /etc/nginx/conf.d/ mặc định được nginx load sẵn khi khởi động, do đó tạo file trong thư mục đó là được load luôn.
Ngoài ra cách quản lý của tôi là đưa file config này vào 1 thư mục nào đó trong source code của bạn, và rồi include chúng trong file nginx.conf hoặc copy vào /etc/nginx/conf.d/ mỗi lần chuyển server.
Trong trường hợp bạn đặt file config trong thư mục nào đó (do bạn chọn) và rất có thể sẽ không start được service nginx, và nếu như nó là lỗi hãy thực hiện lệnh dưới đây để biết lỗi là gì
systemctl status nginx.service
Và nếu như lỗi bạn gặp có nội dung tương tự như sau
nginx: [emerg] open() "/duong-dan-file-config.conf" failed (13: Permission denied) in /etc/nginx/nginx.conf: LINE XX
Điều đó nghĩa là nginx của bạn không có quyền access file trên, trong trường hợp này cách đơn giản nhất là chạy lệnh dưới đây là xong
sudo setenforce Permissive
Sau đó restart lại nginx để thử lại.
Trong 1 ngữ cảnh khác nếu bạn không muốn dùng mysql mà dùng mongodb thì làm thêm vài lệnh như sau
yum install php-pear
pecl install mongodb
Sau đó chỉnh php.ini bật thêm mongo extension, có thể làm bằng cách tạo file : /etc/php.d/mongod.ini
nano /etc/php.d/mongod.ini
sau đó copy nội dung extension=mongodb.so
vào file đó và lưu lại
Build process completed successfully
Installing '/usr/lib64/php/modules/mongodb.so'
install ok: channel://pecl.php.net/mongodb-1.5.5
configuration option "php_ini" is not set to php.ini location
You should add "extension=mongodb.so" to php.ini
sau đó nhớ restart lại php
service php-fpm restart
Kết luận
Vậy là bạn đã có 1 VPS hoặc 1 máy tính với hệ điều hành Centos 7 và có đầy đủ các service để có thể chạy 1 website build bằng php có thể là laravel với hệ quản trị cơ sở dữ liệu mysql/mariadb
Ngoài ra bước tiếp theo có thể là cài đặt thêm SSL cho website có thể tham khảo thêm tại: Cài đặt Ssl Let’s Encrypt miễn phí cho website https trên Centos
Lưu ý vụ bật các service khi hệ điều hành khởi động lại
sudo systemctl enable php-fpm
sudo systemctl enable nginx
sudo systemctl enable mariadb
sudo systemctl enable mysql