Với lemp stack ta sẽ cài đặt các thành phần như sau: Nginx, MySQL, PHP, phpmyadmin.
Yêu cầu đối với VPS là ram >=512MB, hệ điều hành là CentOS 8 mới hoàn toàn.
Tắt Selinux
Sửa file sau: /etc/selinux/config
sudo nano /etc/selinux/config
Tìm dòng Cấu hình SELINUX thành disabled:
SELINUX=disabled
Cuối cùng reboot VPS để cập nhật selinux bằng lệnh:
reboot
Cài đặt nginx
ta cài đặt nginx với thư viện dnf
dnf install nginx
Khởi động Nginx service:
systemctl start nginx
Kiểm tra nginx đã hoạt động hay chưa :
systemctl status nginx
Kết quả:
nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled) Active: active (running) since Sat 2019-11-02 01:22:01 UTC; 26s ago Process: 8867 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS) Process: 8865 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS) Process: 8864 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS) Main PID: 8869 (nginx) Tasks: 2 (limit: 11543) Memory: 6.8M CGroup: /system.slice/nginx.service ├─8869 nginx: master process /usr/sbin/nginx └─8870 nginx: worker process
Nếu trạng thái là Active: active (running) tức là nginx đã được cài đặt và start đúng.
Thiết lập nginx chạy mỗi khi hệ thống khởi động:
systemctl enable nginx
Mở HTTP firewall port 80,443 nếu dùng firewalld:
firewall-cmd --zone=public --permanent --add-service=http firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload
Giờ bạn có thể truy cập dạng http://IP kết quả truy cập được tức là cài đặt đã đúng.
Để tối ưu cho nginx bạn thêm đoạn sau vào file cấu hình /etc/nginx/nginx.conf ngay sát dấu ngoặc đóng cuối cùng.
server_tokens off; server_names_hash_max_size 10000; server_names_hash_bucket_size 1024; keepalive_requests 100000; gzip on; gzip_min_length 1100; gzip_disable "msie6"; gzip_buffers 4 32k; gzip_vary on; gzip_types text/plain text/css application/json application/javascript application/x-javascript text/javascript text/xml application/xml application/rss+xml application/atom+xml application/rdf+xml; ignore_invalid_headers on; client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; reset_timedout_connection on; connection_pool_size 256; client_header_buffer_size 1k; large_client_header_buffers 4 4k; client_max_body_size 100M; client_body_buffer_size 128k; request_pool_size 32k; output_buffers 1 32k; postpone_output 1460;
Hình ảnh:
Sau đó bạn restart lại nginx.
Cài đặt mariadb 10.4
tạo file :
/etc/yum.repos.d/mariadb.repo
Với nội dung như sau:
# MariaDB 10.4 CentOS repository list - created 2019-11-02 01:37 UTC # http://downloads.mariadb.org/mariadb/repositories/[mariadb]
name = MariaDB baseurl = http://yum.mariadb.org/10.4/centos8-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
Sau khi tạo file xong ta cài đặt mariadb bằng các lệnh sau
sudo dnf install boost-program-options sudo dnf install MariaDB-server MariaDB-client --disablerepo=AppStream sudo systemctl start mariadb sudo systemctl enable mariadb
Như vậy mariadb đã cài đặt xong, giờ tiếp theo bạn thiết lập ban đầu cho mariadb bằng lệnh:
mysql_secure_installation
Phần thiết lập ban đầu bạn chỉ cần thay đổi root mysql, các tuỳ chọn khác không ảnh hưởng nhiều nên bạn có thể tuỳ chọn theo mong muốn.
Cài đặt php-fpm
Cài đặt php
sudo dnf install php php-fpm php-common -y
Cài đặt thư viện php
sudo dnf install php*
Khởi động php-fpm
systemctl start php-fpm && systemctl enable php-fpm
Thiết lập vhost cho các website
để thêm một website lên VPS bạn làm lần lượt các bước sau.
Xoá pool mặc định:
mv /etc/php-fpm.d/ww.conf /etc/php-fpm.d/ww.conf.bak
Thêm pool php cho website.
Ví dụ như tôi cần thêm website nguyenvanphong.com
Tạo user nguyenvanphong chỉ có quyền hoạt động trên site nguyenvanphong.com
useradd -M nguyenvanphong
Tạo file :
nano /etc/php-fpm.d/nguyenvanphong.com.conf
Nội dung:
[nguyenvanphong.com] listen = /run/php-fpm/nguyenvanphong.com.sock; user = nguyenvanphong group = nguyenvanphong listen.owner = nginx listen.group = nginx listen.mode = 0660 pm = dynamic pm.max_children = 15 pm.start_servers = 5 pm.min_spare_servers = 3 pm.max_spare_servers = 10 pm.max_requests = 500
Bạn lưu ý: Bạn thay nguyenvanphong.com thành tên domain của bạn, user/group bạn để mỗi domain được quản lý bởi mỗi user riêng, điều này sẽ tiện cho việc debug lỗi, kiểm tra luồng tiến trình cũng như tránh vấn đề mã độc được chạy bởi các user khác nhau.
Cuối cùng restart lại php-fpm và kiểm tra .
systemctl restart php-fpm systemctl status php-fpm ● php-fpm.service - The PHP FastCGI Process Manager Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2019-11-02 02:46:04 UTC; 5s ago Main PID: 13600 (php-fpm) Status: "Ready to handle connections" Tasks: 6 (limit: 11543) Memory: 33.4M CGroup: /system.slice/php-fpm.service ├─13600 php-fpm: master process (/etc/php-fpm.conf) ├─13602 php-fpm: pool nguyenvanphong.com ├─13603 php-fpm: pool nguyenvanphong.com ├─13604 php-fpm: pool nguyenvanphong.com ├─13605 php-fpm: pool nguyenvanphong.com └─13606 php-fpm: pool nguyenvanphong.com
Kết quả php-fpm được tạo và chạy với pool như bạn cấu hình là đúng. Như ví dụ phía trên pool này tạo và lắng nghe trên sock: /run/php-fpm/nguyenvanphong.com.sock ; sock này bạn sẽ dùng để xử lý php từ nginx truyền xuống.
Thay đổi dung lượng upload file php.
Mặc định việc tải site trên php-fpm được cấu hình là 2MB, Bạn chạy lệnh sau để thay đổi, giả sử tôi muốn nâng lên max là 512 MB.
sed -i '/upload_max_filesize/s/= *2M/=512M/' /etc/php.ini
sed -i '/post_max_size/s/= *8M/=512M/' /etc/php.ini
Restart php-fpm để nhận cấu hình mới.
systemctl restart php-fpm
Thêm Vhost nginx
Mặc định khi cài đặt nginx sẽ cấu hình một vhost và upstream mặc định, tuy nhiên bạn cần nhu cầu mỗi website hoạt động với các thư mục khác nhau vì vậy bạn cần bỏ vhost mặc định và cấu hình vhost cho từng domain.
Xoá Vhost và upstream mặc định.
Xoá vhost mặc định bằng cách sửa file .
/etc/nginx/nginx.conf
bạn chèn # phía trước các dòng lệnh cấu hình vhost mặc định.
xoá upstream và location xử lý php mặc định bằng lệnh:
mv /etc/nginx/default.d/php.conf /etc/nginx/default.d/php.conf.bak mv /etc/nginx/conf.d/php-fpm.conf /etc/nginx/conf.d/php-fpm.conf.bak
Khai báo và thêm vhost domain mới trên nginx.
Vhost này tôi sẽ thêm cả upstream lẫn location xử lý php bên trong.
nano /etc/nginx/conf.d/nguyenvanphong.com.conf
Với nội dung (ở đây bạn sử dụng sock đã tạo ở phần thêm pool phía trên):
server { listen 80; server_name nguyenvanphong.com www.nguyenvanphong.com; root /home/nguyenvanphong/nguyenvanphong.com/public_html; # Load configuration files for the default server block. # pass the PHP scripts to FastCGI server # # See conf.d/php-fpm.conf for socket configuration # index index.php index.html index.htm; location ~ \.(php|phar)(/.*)?$ { fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$; fastcgi_intercept_errors on; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_pass unix:/run/php-fpm/nguyenvanphong.com.sock; } location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
Tạo thư mục chứa website như đã cấu hình trên vhost.
mkdir -p /home/nguyenvanphong/nguyenvanphong.com/public_html
restart lại nginx, ở đây site nguyenvanphong.com sẽ được control bởi user nguyenvanphong và thư mục chứa website là: /home/nguyenvanphong/nguyenvanphong.com/public_html.
systemctl restart nginx
Kiểm tra
Sau khi cấu hình hoàn tất và trỏ domain về IP VPS, như trên tôi sử dụng domain nguyenvanphong.com để cấu hình.
Bạn tạo file info.php
nano /home/nguyenvanphong/nguyenvanphong.com/public_html/info.php
với nội dung sau để kiểm tra :
<?php echo $_SERVER['SERVER_NAME']; phpinfo(); ?>
Nếu bạn truy cập link website hiển thị nội dung info php tức là bạn đã cấu hình đúng.
Nếu bạn muốn thêm một website khác, bạn tạo vhost mới bao gồm tạo pool mới và cũng như vhost nginx cho domain mới như phía trên là được.
Cài đặt SSL:
Sau khi tạo vhost thêm website và trỏ IP hoàn tất bạn có thể cài đặt ssl như sau.
Cài đặt tool cấu hình ssl tự động.
Chạy lệnh sau để cài đặt:
curl https://get.acme.sh | sh alias acme.sh=~/.acme.sh/acme.sh acme.sh --upgrade --auto-upgrade
Cài đặt ssl cho domain nguyenvanphong.com
acme.sh --issue -w /home/nguyenvanphong/nguyenvanphong.com/public_html -d nguyenvanphong.com -d www.nguyenvanphong.com -k 4096
Bạn sử dụng lệnh trên thay đổi phù hợp với website của bạn.
- /home/nguyenvanphong/nguyenvanphong.com/public_html : là đường dẫn thư mục root chứa mã nguồn site nguyenvanphong.com
- Bạn có thể bỏ bớt đi phần www nếu không muốn cài ssl cho tiền tố www nếu như vậy lệnh sẽ là:
acme.sh --issue -w /home/nguyenvanphong/nguyenvanphong.com/public_html -d nguyenvanphong.com -k 4096
Kết quả sẽ cho ra các file cấu hình ssl có dạng như:
[Sat Nov 2 06:59:46 UTC 2019] Your cert is in /root/.acme.sh/nguyenvanphong.com/nguyenvanphong.com.cer [Sat Nov 2 06:59:46 UTC 2019] Your cert key is in /root/.acme.sh/nguyenvanphong.com/nguyenvanphong.com.key [Sat Nov 2 06:59:46 UTC 2019] The intermediate CA cert is in /root/.acme.sh/nguyenvanphong.com/ca.cer [Sat Nov 2 06:59:46 UTC 2019] And the full chain certs is there: /root/.acme.sh/nguyenvanphong.com/fullchain.cer
Bạn mở file cấu hình vhost nginx của domain và redirect về https, như ví dụ file cần chỉnh sửa là:
/etc/nginx/conf.d/nguyenvanphong.com.conf
Bạn sửa toàn file thành:
server { listen 80; return 301 https://nguyenvanphong.com$request_uri; }
Tiếp theo thêm file vhost của domain cấu hình https với port 443.
File tạo mới: /etc/nginx/conf.d/nguyenvanphong.com.ssl.conf
nano /etc/nginx/conf.d/nguyenvanphong.com.ssl.conf
Nội dung:
server { listen 443 ssl http2; server_name nguyenvanphong.com www.nguyenvanphong.com; server_name nguyenvanphong.com www.nguyenvanphong.com; root /home/nguyenvanphong/nguyenvanphong.com/public_html; index index.php index.html index.htm; ssl_certificate "/root/.acme.sh/nguyenvanphong.com/fullchain.cer"; ssl_certificate_key "/root/.acme.sh/nguyenvanphong.com/nguyenvanphong.com.key"; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_ciphers PROFILE=SYSTEM; ssl_prefer_server_ciphers on; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location ~ \.(php|phar)(/.*)?$ { fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$; fastcgi_intercept_errors on; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_pass unix:/run/php-fpm/nguyenvanphong.com.sock; } location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
Trong đó bạn thay thế nội dung ssl_certificate, ssl_certificate_key phù hợp kết quả cài đặt ssl cho domain khi nãy bạn mới cài đặt. Đồng thời bạn cũng thay đổi tên domain nguyenvanphong.com thành tên domain của bạn.
Cuối cùng restart lại nginx và truy cập thử link domain với https.
systemctl restart nginx
Cài đặt WordPress
Tôi sẽ cài mẫu wordpress mới nhất lên domain nguyenvanphong.com mới thiết lập.
Đầu tiên tôi tải và giải nén mã nguồn wordpress cài đặt theo bằng lệnh sau.
cd /home/nguyenvanphong/nguyenvanphong.com/public_html wget https://wordpress.org/latest.zip unzip latest.zip mv wordpress/* . rm -rf latest.zip chown -R nguyenvanphong:nguyenvanphong *
Trong đó /home/nguyenvanphong/nguyenvanphong.com/public_html là thư mục chứa mã nguồn domain.
về lệnh chown, bạn cũng tương tự phân quyền lại cho đúng user ban đầu bạn cấu hình cho domain.
Tiếp theo tôi tạo 1 database. để đơn giản tôi sử dụng command mysql. để truy cập sử dụng command mysql bạn gõ lệnh sau.
mysql -u root -p
Sau đó bạn nhập mật khẩu root mysql ban đầu bạn đã thiết lập cho mariadb.
Cuối cùng bạn tạo database mới với cú pháp như sau:
CREATE DATABASE wordpress; CREATE USER wordpress_user@localhost; SET PASSWORD FOR wordpress_user@localhost= PASSWORD("123456"); GRANT ALL PRIVILEGES ON wordpress. * TO wordpress_user@localhost IDENTIFIED BY "123456"; FLUSH PRIVILEGES; exit;
trong đó:
wordpress: là tên database muốn tạo. wordpress_user: là tên user quản lý database muốn tạo. 123456: là mật khẩu của database.
Bạn thay thế các giá trị trên cho phù hợp với mong muốn của mình.
Cuối cùng tôi truy cập website và cài đặt wordpress mới như bình thường với database vừa tạo.
Chạy cài thử với theme flastsome mặc định demo.
Cài đặt Phpmyadmin.
Bài viết đến đây cũng khá đầy đủ toàn vẹn cho các bạn quản lý một website rồi.
Tuy nhiên có một số bạn không dùng được dòng lệnh mysql để tạo database hoặc đơn giản là đéo thích.
bạn có thể cài đặt bản rút gọn vào thư mục website bất kỳ. chẳng hạn tôi chọn cài trong website nguyenvanphong.com .
truy cập vào thư mục chứa website nguyenvanphong.com
cd /home/nguyenvanphong/nguyenvanphong.com/public_html
Tải và giải nén
wget https://files.phpmyadmin.net/phpMyAdmin/4.7.6/phpMyAdmin-4.7.6-all-languages.zip unzip phpMyAdmin-*.zip
Cuối cùng bạn có thể truy cập vào phpmyadmin trên trình duyệt bằng link dẫn.
https://nguyenvanphong.com/phpMyAdmin-4.7.6-all-languages
Lưu ý: Bạn thay nguyenvanphong.com bằng domain của bạn cho phù hợp.
Chúc các bạn thành công.