Bài viết này hướng dẫn deploy dự án mẫu (PHP + MySQL) lên VPS theo cách thủ công: export database từ máy local, tạo database trên VPS, import qua phpMyAdmin, upload mã nguồn và các lưu ý khi chạy migration cũng như khi sau này tạo bài viết mới ở local và muốn đưa lên VPS.
1. Chuẩn bị trên máy local
Đảm bảo dự án chạy ổn định local (MAMP hoặc XAMPP), đã có dữ liệu bài viết, cấu hình database trong config/database.local.php.
2. Export database ra file (Terminal)
Mở Terminal, chạy lệnh export database myapp ra Desktop (thay user/password nếu bạn dùng khác):
mysqldump -h 127.0.0.1 -u myapp -pmyapp123 myapp > ~/Desktop/myapp_backup_$(date +%Y-%m-%d_%H-%M).sql
Hoặc export chỉ bảng bài viết (nhẹ hơn, dùng khi chỉ cần đồng bộ bài viết):
mysqldump -h 127.0.0.1 -u myapp -pmyapp123 myapp posts > ~/Desktop/myapp_posts.sql
File .sql sẽ nằm trên Desktop, dùng để import lên VPS.
3. Tạo database mới trên VPS
Đăng nhập VPS qua SSH. Nếu dùng MySQL/MariaDB:
sudo mysql -u root -e \"
CREATE DATABASE IF NOT EXISTS myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'mat_khau_manh';
GRANT ALL PRIVILEGES ON myapp.* TO 'myapp_user'@'localhost';
FLUSH PRIVILEGES;
\"
Thay mat_khau_manh bằng mật khẩu an toàn. Ghi lại user và password để điền vào config/database.local.php trên VPS.
4. Import database qua phpMyAdmin
- Mở phpMyAdmin trên VPS (thường qua panel như cPanel, DirectAdmin hoặc cài riêng).
- Chọn database
myapp(hoặc tạo mới nếu chưa có). - Vào tab Import → Chọn file
myapp_backup_....sqlđã tải từ Desktop lên (upload qua SFTP/FTP trước nếu file nằm trên máy bạn). - Chọn Go / Thực hiện để import. Đợi đến khi báo thành công.
Nếu import cả file backup đầy đủ thì toàn bộ bảng (posts, users, orders, config...) sẽ có trên VPS. Nếu chỉ import file myapp_posts.sql thì chỉ có bảng posts (cần đã tạo sẵn các bảng khác bằng migration hoặc schema trước).
5. Upload mã nguồn lên VPS
- Dùng SFTP, SCP hoặc FileZilla: kết nối VPS, đưa toàn bộ thư mục dự án (trừ
.gitnếu không dùng Git) vào thư mục web, ví dụ/var/www/myapp. - Hoặc nén thư mục dự án thành
myapp.zip, upload lên VPS rồi giải nén:unzip myapp.zip -d /var/www/myapp. - Đặt quyền thư mục cho web server:
sudo chown -R www-data:www-data /var/www/myappvàsudo chmod -R 755 /var/www/myapp, thư mụcdata/cần ghi:sudo chmod -R 775 /var/www/myapp/data.
6. Cấu hình trên VPS
- Tạo file
config/database.local.phptrên VPS (copy từconfig/database.local.php.example), điền đúnghost,dbname,user,passwordcủa MySQL trên VPS. - Cấu hình Nginx hoặc Apache trỏ document root tới thư mục chứa
index.php(ví dụ/var/www/myapp). - Bật PHP (php-fpm) và chỉnh rewrite nếu cần (try_files $uri $uri/ /index.php?$query_string).
7. Chạy migration trên VPS
Sau khi upload code và import DB, nếu có thay đổi cấu trúc bảng (thêm cột, thêm bảng) thì chạy migration:
cd /var/www/myapp
php install/migrate.php
Lưu ý migration:
- Migration chỉ chạy các file trong
install/migrations/chưa được ghi vào bảngschema_migrations. Chạy nhiều lần an toàn, không bị trùng. - Nên chạy migration bằng CLI (
php install/migrate.php), tránh gọi qua trình duyệt (?run=1) trên production để hạn chế rủi ro. - Nếu lần đầu deploy đã import đủ bảng từ file
schema.sqlhoặc từ backup đầy đủ thì migration 001 có thể đã “được coi là chạy” (bảng đã tồn tại). Các migration tiếp theo (002, 003...) vẫn chạy bình thường khi bạn thêm file mới.
8. Lần sau tạo bài viết mới ở local — đưa lên VPS thế nào?
Bài viết lưu trong database (bảng posts), không nằm trong file đẩy bằng Git. Để có bài viết mới trên VPS bạn cần đưa dữ liệu lên:
- Export từ local:
mysqldump -h 127.0.0.1 -u myapp -pmyapp123 myapp posts > ~/Desktop/myapp_posts.sql - Upload file .sql lên VPS (SFTP/FTP).
- Trên VPS: Import vào database
myapp. Nếu file export cóDROP TABLE+CREATE TABLE+INSERTthì lần import sẽ thay thế toàn bộ bảngpoststrên VPS bằng bản local (bài chỉ có trên VPS sẽ mất). Nếu bạn muốn chỉ thêm bài mới mà không xóa bài cũ trên VPS, cần export dạng chỉ INSERT và dùngINSERT IGNORE(trùng id thì bỏ qua) hoặc chỉ export các bài có ngày tạo mới hơn.
Khuyến nghị: Nếu bạn chỉ chỉnh và tạo bài ở local, VPS chỉ là bản copy thì mỗi lần cập nhật: export cả DB (hoặc ít nhất bảng posts) từ local → upload file .sql → import vào DB trên VPS. Code thì đẩy bằng Git (git push, trên VPS git pull) hoặc upload lại thư mục thay đổi.
9. Tóm tắt quy trình deploy thủ công
| Bước | Việc cần làm |
| 1 | Export DB từ local (mysqldump) ra file .sql trên Desktop |
| 2 | Trên VPS: tạo database myapp và user MySQL |
| 3 | Import file .sql qua phpMyAdmin (hoặc mysql < file.sql) |
| 4 | Upload mã nguồn lên VPS (SFTP / Git pull) |
| 5 | Tạo config/database.local.php, cấu hình Nginx/Apache |
| 6 | Chạy php install/migrate.php nếu có migration mới |
Kết luận
Deploy thủ công dự án mẫu lên VPS gồm: export database bằng Terminal, tạo database và user trên VPS, import qua phpMyAdmin, upload mã nguồn, cấu hình và chạy migration. Khi tạo bài viết mới ở local, cần export (ít nhất bảng posts) và import lại lên VPS để bài xuất hiện trên site production.