file DB: ShopDT/Database/database.sql
file hướng dẫn hơi dài nếu bạn đã từng có dự án rồi thì khi giải nén đưa vào
xampp rồi mở lên thôi, config mình đang dùng aiven nha!
## Yêu cầu hệ thống
### Phần mềm cần thiết:
- **PHP:** >= 7.4 (khuyến nghị PHP 8.0+)
- **MySQL/MariaDB:** >= 5.7 / >= 10.2
- **Web Server:** Apache 2.4+ hoặc Nginx
- **Composer:** (không bắt buộc, dự án không sử dụng dependencies)
### Extensions PHP cần có:
```bash
php-mysqli # Kết nối MySQL
php-pdo # PDO Database
php-pdo-mysql # PDO MySQL Driver
php-json # Xử lý JSON
php-mbstring # Xử lý chuỗi đa byte
php-gd # Xử lý ảnh (upload, resize)
php-curl # HTTP requests
php-zip # Xử lý file nén
php-xml # Xử lý XML
```
### Kiểm tra extensions đã cài:
```bash
php -m | grep -E "mysqli|pdo|json|mbstring|gd|curl"
```
---
## Cài đặt trên Localhost
### Bước 1: Cài đặt môi trường
#### Windows - XAMPP:
1. Tải và cài đặt [XAMPP](https://www.apachefriends.org/)
2. Khởi động Apache và MySQL từ XAMPP Control Panel
3. Đảm bảo Apache chạy trên port 80 và MySQL trên port 3306
#### Windows - Laragon:
1. Tải và cài đặt [Laragon](https://laragon.org/)
2. Khởi động Laragon và click "Start All"
3. Laragon tự động cấu hình Apache, PHP, MySQL
#### macOS - MAMP:
1. Tải và cài đặt [MAMP](https://www.mamp.info/)
2. Khởi động MAMP và start servers
3. Cấu hình document root nếu cần
#### Linux - Manual:
```bash
# Ubuntu/Debian
sudo apt update
sudo apt install apache2 php php-mysql php-gd php-mbstring php-curl mysql-server
# CentOS/RHEL
sudo yum install httpd php php-mysqlnd php-gd php-mbstring php-curl mariadb-server
# Enable và start services
sudo systemctl enable apache2 mysql
sudo systemctl start apache2 mysql
```
### Bước 2: Clone/Download dự án
# Download ZIP và giải nén
```
### Bước 3: Di chuyển vào thư mục web root
#### XAMPP (Windows):
```bash
# Di chuyển folder ShopDT vào
C:\xampp\htdocs\ShopDT
```
#### Laragon (Windows):
```bash
# Di chuyển folder ShopDT vào
C:\laragon\www\ShopDT
```
#### MAMP (macOS):
```bash
# Di chuyển folder ShopDT vào
/Applications/MAMP/htdocs/ShopDT
```
#### Linux:
```bash
sudo mv ShopDT /var/www/html/ShopDT
sudo chown -R www-data:www-data /var/www/html/ShopDT
sudo chmod -R 755 /var/www/html/ShopDT
```
### Bước 4: Tạo cơ sở dữ liệu
1. Truy cập phpMyAdmin:
- XAMPP: `http://localhost/phpmyadmin`
- Laragon: `http://localhost/phpmyadmin`
- MAMP: `http://localhost:8888/phpMyAdmin`
2. Tạo database mới:
```sql
CREATE DATABASE shopdt CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```
3. Import file SQL:
- Click vào database `shopdt`
- Chọn tab "Import"
- Chọn file `database.sql` từ thư mục dự án
- Click "Go" để import
### Bước 5: Cấu hình kết nối database
#### File 1: `config/config.php` (Frontend)
```php
<?php
define('DB_HOST', 'localhost');
define('DB_NAME', 'shopdt');
define('DB_USER', 'root'); // Thay đổi nếu cần
define('DB_PASS', ''); // Thay đổi nếu có password
define('DB_CHARSET', 'utf8mb4');
// Base URL
define('BASE_URL', 'http://localhost/ShopDT/');
```
#### File 2: `admin/config/config.php` (Admin Panel)
```php
<?php
define('DB_HOST', 'localhost');
define('DB_NAME', 'shopdt');
define('DB_USER', 'root');
define('DB_PASS', '');
define('BASE_URL', 'http://localhost/ShopDT/');
define('ADMIN_BASE', 'http://localhost/ShopDT/admin');
```
### Bước 6: Cấu hình quyền thư mục (Linux/macOS)
```bash
# Cho phép web server ghi vào thư mục uploads
sudo chmod -R 775 public/uploads
sudo chown -R www-data:www-data public/uploads
# Cho phép ghi log (nếu có)
sudo chmod -R 775 logs
```
### Bước 7: Cấu hình Apache (nếu cần)
#### Enable mod_rewrite (Linux):
```bash
sudo a2enmod rewrite
sudo systemctl restart apache2
```
#### Cấu hình Virtual Host (tùy chọn):
```apache
<VirtualHost *:80>
ServerName shopdt.local
DocumentRoot "/var/www/html/ShopDT/public"
<Directory "/var/www/html/ShopDT/public">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
```
Thêm vào `/etc/hosts`:
```
127.0.0.1 shopdt.local
```
### Bước 8: Truy cập website
- **Frontend:** `http://localhost/ShopDT/`
- **Admin Panel:** `http://localhost/ShopDT/admin/`
#### Tài khoản admin mặc định:
```
Password: admin123
```
---
## Deploy lên Production Server
### Bước 1: Chuẩn bị Server
#### Yêu cầu:
- VPS/Cloud Server (DigitalOcean, AWS, Vultr, etc.)
- Ubuntu 20.04/22.04 hoặc CentOS 7/8
- Domain name đã trỏ về IP server
#### Cài đặt LAMP Stack:
```bash
# Ubuntu/Debian
sudo apt update
sudo apt install apache2 mysql-server php php-mysql php-gd php-mbstring php-curl php-zip php-xml
# Enable Apache modules
sudo a2enmod rewrite
sudo a2enmod ssl
sudo systemctl restart apache2
# Secure MySQL
sudo mysql_secure_installation
```
### Bước 2: Upload code lên server
#### Sử dụng Git:
```bash
cd /var/www/html
sudo git clone https://github.com/your-repo/ShopDT.git
```
#### Sử dụng FTP/SFTP:
- Sử dụng FileZilla hoặc WinSCP
- Upload toàn bộ thư mục ShopDT lên `/var/www/html/`
#### Sử dụng rsync:
```bash
rsync -avz -e ssh ./ShopDT user@your-server-ip:/var/www/html/
```
### Bước 3: Cấu hình quyền
```bash
sudo chown -R www-data:www-data /var/www/html/ShopDT
sudo chmod -R 755 /var/www/html/ShopDT
sudo chmod -R 775 /var/www/html/ShopDT/public/uploads
sudo chmod -R 775 /var/www/html/ShopDT/logs
```
### Bước 4: Tạo database trên server
```bash
# Đăng nhập MySQL
sudo mysql -u root -p
# Tạo database và user
CREATE DATABASE shopdt CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'shopdt_user'@'localhost' IDENTIFIED BY 'your_strong_password';
GRANT ALL PRIVILEGES ON shopdt.* TO 'shopdt_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
# Import database
mysql -u shopdt_user -p shopdt < /var/www/html/ShopDT/database.sql
```
### Bước 5: Cấu hình production
#### File `config/config.php`:
```php
<?php
define('DB_HOST', 'localhost');
define('DB_NAME', 'shopdt');
define('DB_USER', 'shopdt_user');
define('DB_PASS', 'your_strong_password');
define('BASE_URL', 'https://yourdomain.com/');
// Production settings
ini_set('display_errors', 0);
error_reporting(0);
```
#### File `admin/config/config.php`:
```php
<?php
define('DB_HOST', 'localhost');
define('DB_NAME', 'shopdt');
define('DB_USER', 'shopdt_user');
define('DB_PASS', 'your_strong_password');
define('BASE_URL', 'https://yourdomain.com/');
define('ADMIN_BASE', 'https://yourdomain.com/admin');
```
### Bước 6: Cấu hình Apache Virtual Host
```bash
sudo nano /etc/apache2/sites-available/shopdt.conf
```
Nội dung:
```apache
<VirtualHost *:80>
ServerName yourdomain.com
ServerAlias www.yourdomain.com
DocumentRoot /var/www/html/ShopDT/public
<Directory /var/www/html/ShopDT/public>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/shopdt_error.log
CustomLog ${APACHE_LOG_DIR}/shopdt_access.log combined
</VirtualHost>
```
Enable site:
```bash
sudo a2ensite shopdt.conf
sudo systemctl reload apache2
```
### Bước 7: Cài đặt SSL (HTTPS)
#### Sử dụng Let's Encrypt (Miễn phí):
```bash
# Cài đặt Certbot
sudo apt install certbot python3-certbot-apache
# Tạo SSL certificate
sudo certbot --apache -d yourdomain.com -d www.yourdomain.com
# Auto-renewal
sudo certbot renew --dry-run
```
### Bước 8: Tối ưu hóa Production
#### 1. Enable PHP OPcache:
```bash
sudo nano /etc/php/8.0/apache2/php.ini
```
Thêm/sửa:
```ini
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
```
#### 2. Cấu hình Firewall:
```bash
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 22/tcp
sudo ufw enable
```
#### 3. Backup tự động:
```bash
# Tạo script backup
sudo nano /usr/local/bin/backup-shopdt.sh
```
Nội dung:
```bash
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup/shopdt"
mkdir -p $BACKUP_DIR
# Backup database
mysqldump -u shopdt_user -p'your_password' shopdt > $BACKUP_DIR/db_$DATE.sql
# Backup files
tar -czf $BACKUP_DIR/files_$DATE.tar.gz /var/www/html/ShopDT
# Xóa backup cũ hơn 7 ngày
find $BACKUP_DIR -type f -mtime +7 -delete
```
Cấp quyền và tạo cron job:
```bash
sudo chmod +x /usr/local/bin/backup-shopdt.sh
sudo crontab -e
# Thêm dòng: Backup mỗi ngày lúc 2h sáng
0 2 * * * /usr/local/bin/backup-shopdt.sh
```
### Bước 9: Monitoring và Bảo mật
#### 1. Cài đặt Fail2Ban:
```bash
sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
```
#### 2. Giới hạn truy cập admin:
Thêm vào `.htaccess` trong thư mục `admin/`:
```apache
# Chỉ cho phép IP cụ thể truy cập admin
<RequireAny>
Require ip 123.456.789.0
Require ip 192.168.1.0/24
</RequireAny>
```
#### 3. Disable directory listing:
```apache
Options -Indexes
```
---
## Troubleshooting
### Lỗi 404 Not Found:
```bash
# Kiểm tra mod_rewrite
sudo a2enmod rewrite
sudo systemctl restart apache2
# Kiểm tra .htaccess
cat /var/www/html/ShopDT/.htaccess
```
### Lỗi kết nối database:
```bash
# Kiểm tra MySQL đang chạy
sudo systemctl status mysql
# Test kết nối
mysql -u shopdt_user -p -h localhost shopdt
```
### Lỗi upload ảnh:
```bash
# Kiểm tra quyền thư mục
ls -la /var/www/html/ShopDT/public/uploads
# Sửa quyền
sudo chmod -R 775 /var/www/html/ShopDT/public/uploads
sudo chown -R www-data:www-data /var/www/html/ShopDT/public/uploads
```
### Lỗi PHP extensions:
```bash
# Kiểm tra extensions
php -m
# Cài đặt thiếu
sudo apt install php-gd php-mbstring php-curl
sudo systemctl restart apache2
```
---