Cuối cùng mọi thứ sẽ ổn. Nếu nó chưa ổn, thì chưa phải cuối cùng.
Khuyết Danh
Mở đầu
Khi bạn có một VPS tương đương với việc bạn đang có một máy tính với hệ điều hành không và chưa cài đặt bất cứ phần mềm gì trong đó. Lúc đó, bạn sẽ cần phải cài đặt và cấu hình nhiều thứ để có thể deploy được một website lên đó. Bài này mình tổng hợp và trình bày cách deploy một project laravel lên VPS.
Mục tiêu của bài:
- Cài đặt PHP, nginx, mysql, git,... phục vụ cho việc cài đặt một website.
- Deploy thành công một laravel website sử dụng webserver nginx (không phải apache2).
- Truy cập vào website đó từ browser trên local máy tính bằng tên domain (ví dụ daovanhung.com) chứ không phải localhost.
Lúc bạn mua VPS thì bạn nên chọn hệ điều hành ubuntu thay vì debian vì nó dễ sử dụng hơn và có nhiều tài liệu tìm kiếm hơn. Dưới đây mình trình bày cho ubuntu 16.

Truy cập vào VPS lần đầu tiên
Trước tiên bạn cần phải truy cập vào VPS để thao tác lên đó. Khi mua một VPS, nhà cung cấp sẽ đưa cho bạn password để bạn truy cập ssh vào nó.
ssh root@your_vps_ip
your_vps_ip là IP của VPS, bạn có thể vào control panel hoặc trong mail của nhà cung cấp gửi để lấy.
Sau khi nhập dòng lệnh trên bạn sẽ phải điền password mà nhà cung cấp đã gửi thông qua mail.
Sau khi đăng nhập lần đầu thành công thì bạn nên:
- Update các gói phần mềm cài đặt sẵn:
apt-get update
apt-get upgrade
- Đổi port mặc định của SSH thành port khác:
vi /etc/ssh/sshd_config
Tìm dòng sau và đổi port 22 thành port khác mà bạn muốn:
# What ports, IPs and protocols we listen for
Port 22
Đổi xong thì restart:
/etc/init.d/ssh restart
Bạn có thể thoát ra VPS bằng lệnh exit và truy cập lại bằng SSH theo cổng mới (truy cập mặc định theo kiểu cũ sẽ không được nữa):
ssh root@your_vps_ip -p NewPort
- Đổi password mặc định của root thành password mong muốn của mình:
passwd root
terminal sẽ yêu cầu bạn nhập password mới.
- Thêm một user vào VPS bên cạnh root để từ giờ trở đi bạn sẽ kết nối ssh bằng user này chứ không cho root có quyền truy cập ssh nữa:
Thêm user mới:
adduser daovanhung
Bạn sẽ phải nhập password cho user daovanhung.
Thiết lập cho user daovanhung có quyền sudo:
usermod -aG sudo daovanhung
Khi bạn muốn thực hiện câu lệnh nào đó mà chỉ có quyền root mới thực hiện được thì bạn gõ:
sudo your-command-line
Hoặc bạn có thể chuyển đổi sang tài khoản root để khỏi mất công gõ sudo ở đầu mỗi câu lệnh:
su root
Chặn không cho phép root truy cập VPS bằng SSH:
vi /etc/ssh/sshd_config
Tìm dòng
# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
và thay thế PermitRootLogin yes sang PermitRootLogin no.
Khởi động lại ssh:
/etc/init.d/ssh restart
Cài đặt các phần mềm cho VPS
Cài đặt PHP
Dưới đây là php7.1, nếu bạn muốn cài đặt php phiên bản khác chỉ cần thay thế 7.1 bằng version khác là được:
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php7.1
sudo apt-cache search php7.1
sudo apt-get install php7.1 php7.1-cli php7.1-common php7.1-json php7.1-opcache php7.1-mysql php7.1-mbstring php7.1-mcrypt php7.1-zip php7.1-fpm php7.1-xml
Sửa file php.ini:
sudo vi /etc/php/7.1/cli/php.ini
Tìm dòng cgi.fix_pathinfo=1, uncomment nếu nó bị comment và thay thế bằng cgi.fix_pathinfo=0
Khởi động lại php:
sudo systemctl restart php7.1-fpm.service
Cài đặt và cấu hình nginx
Cài đặt nginx:
sudo apt-get install nginx
Thêm một website mong muốn của bạn (từ giờ mình lấy tên site là daovanhung.com làm ví dụ).
Thêm và mở file /etc/nginx/sites-available/daovanhung.com:
sudo vi /etc/nginx/sites-available/daovanhung.com
và sửa thành:
server {
listen 80;
listen [::]:80;
# đường dẫn tới thư mục public/ trong project laravel
root /your/laravel/public/folder;
# nhớ có index.php
index index.php index.html index.htm index.nginx-debian.html;
server_name daovanhung.com;
location / {
# ở đây phải tuyệt đối đúng nếu không paginate và route trong laravel sẽ không họat động
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# thay bằng version php khác nếu bạn không dùng 7.1
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Tạo file trong sites-enabled:
sudo ln -s /etc/nginx/sites-available/daovanhung.com /etc/nginx/sites-enabled/daovanhung.com
Restart nginx:
sudo systemctl restart nginx.service
#hoặc sudo nginx -s reload
Cài đặt mysql
sudo apt-get update
sudo apt-get install mysql-server
mysql_secure_installation
truy cập vào mysql bằng câu lệnh:
sudo -u root -p
Vào mysql tạo database mong muốn:
mysql -u root -p
Enter password: # nhập password
mysql> create database your_database_name;
Cài đặt git và clone project laravel
Cài đặt git:
sudo apt-get install git
Clone laravel project:
git clone your_laravel_project_repo_url
cd your_project
Cài đặt thư viện cho laravel:
composer install
Chạy migration nếu có:
php artisan migrate
Khi bạn cần import dữ liệu từ file data .sql được encode bằng UTF8 thì phải làm như sau:
File dữ liệu data.sql của bạn chỉ chứa dữ liệu chứ không chứa cấu trúc các bảng. Khi import thì gõ:
mysql -u root -p --default-character-set=utf8 your_database_name < data.sql
Tạo file .env và thiết lập các thông số của bạn trong file .env
APP_KEY=base64:abcdeWLPE9Xcah4d9iejjzC6g8kpxaaCxSgUfghijk=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=localhost
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=your_database_name
DB_USERNAME=your_username
DB_PASSWORD=your_password
BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
PUSHER_KEY=
PUSHER_SECRET=
PUSHER_APP_ID=
Trong những thông số trên có 3 thông số bạn phải cấu hình là DB_DATABASE, DB_USERNAME và DB_PASSWORD. DB_DATABASE đã tạo phía trên, tạo DB_USERNAME và DB_PASSWORD bằng cách:
mysql -u root -p
mysql> GRANT ALL PRIVILEGES ON *.* TO 'your_username'@'localhost' IDENTIFIED BY 'your_password';
Chạy các câu lệnh sau trong project laravel:
php artisan cache:clear
php artisan clear-compiled
sudo chmod -R 777 storage
chmod -R 777 bootstrap/cache/
composer dump-autoload
php artisan key:generate
php artisan optimize
Truy cập vps website từ browser ở local
Từ máy tính local của bạn, vào file /etc/hosts:
sudo vi /etc/hosts
Thêm dòng sau vào file trên:
your_vps_ip daovanhung.com
your_vps_ip là IP của VPS của bạn. Sau đó truy cập daovanhung.com từ browser là được.
Kết luận
Trên đây mình đã tổng hợp cách để cài đặt và deploy một project laravel lên VPS từ đầu. Tùy vào từng hoàn cảnh của từng project cụ thể mà có thể có các cách làm khác nhau và có thể phát sinh nhiều vấn đề khác nhau. Lúc đó bạn sẽ phải tự mình sửa hết những vấn đề đó, đặc biệt là chú ý tới các vấn đề về phân quyền.
Link tham khảo:
https://www.rosehosting.com/blog/install-php-7-1-with-nginx-on-an-ubuntu-16-04-vps/
https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-16-04
