Bài 6: Biết deploy dự án CI4 ra môi trường production

Biết deploy dự án CI4 ra môi trường production

Triển khai & Quản lý Dự Án CodeIgniter 4 (CI4) Lên Production. Deploy CodeIgniter 4 (hay còn gọi là triển khai CodeIgniter 4 ra môi trường production) là bước quan trọng ngay sau khi bạn hoàn thiện tính năng của ứng dụng. Việc triển khai không chỉ dừng lại ở việc upload code, mà còn đòi hỏi bạn phải cấu hình nhiều môi trường (.env), thiết lập hosting/VPS hoặc Docker, đồng thời áp dụng CI/CD để tự động hóa việc cập nhật.

Trong bài viết này, chúng ta sẽ tìm hiểu toàn bộ quy trình deploy CodeIgniter 4 từ cơ bản đến nâng cao, kèm các bước bảo mật và giám sát hệ thống giúp ứng dụng chạy ổn định và an toàn.

1. Config .env cho nhiều môi trường

CI4 sử dụng file .env để quản lý cấu hình.

Ví dụ: .env

# Môi trường
CI_ENVIRONMENT = production

# Database
database.default.hostname = localhost
database.default.database = myapp
database.default.username = root
database.default.password = secret
database.default.DBDriver = MySQLi

# Email
email.protocol = smtp
email.SMTPHost = smtp.gmail.com
email.SMTPUser = [email protected]
email.SMTPPass = yourpassword
email.SMTPPort = 587

➔ Có thể tạo nhiều file .env khác nhau (local, staging, production) và load theo môi trường server.


2. Deploy CI4 trên Shared Hosting

  • Upload toàn bộ code lên hosting.

  • Di chuyển file trong public/ ra ngoài public_html/ (nếu hosting không cho phép set root).

  • Chỉnh sửa index.php để trỏ tới ../app../system.

➔ Lưu ý bảo mật: chỉ để public/ làm document root, không expose cả project.


3. Deploy CI4 trên VPS (Apache/Nginx)

Apache (VirtualHost)

<VirtualHost *:80>
    ServerName myapp.com
    DocumentRoot /var/www/ci4-app/public

    <Directory /var/www/ci4-app/public>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Nginx

server {
    listen 80;
    server_name myapp.com;
    root /var/www/ci4-app/public;

    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

➔ Sau đó reload:

sudo systemctl reload nginx

4. Deploy CI4 bằng Docker

  • Tạo Dockerfile

    FROM php:8.1-fpm
    WORKDIR /var/www/html
    
    RUN docker-php-ext-install mysqli pdo pdo_mysql
    COPY . /var/www/html
    
    CMD ["php-fpm"]
    
  • Tạo docker-compose.yml

    version: '3.8'
    services:
      app:
        build: .
        volumes:
          - .:/var/www/html
        ports:
          - "8080:80"
        depends_on:
          - db
      db:
        image: mysql:8.0
        restart: always
        environment:
          MYSQL_DATABASE: myapp
          MYSQL_ROOT_PASSWORD: secret
        ports:
          - "3306:3306"
    

➔ Chạy:

docker-compose up -d

5. CI/CD (Continuous Integration / Deployment)

  • GitHub Actions: tạo file .github/workflows/deploy.yml

    name: Deploy CI4 App
    
    on:
      push:
        branches: [ "main" ]
    
    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v2
          - name: Deploy to server
            run: |
              ssh user@yourserver "
                cd /var/www/ci4-app &&
                git pull origin main &&
                composer install --no-dev &&
                php spark migrate --all
              "

➔ Cứ push code lên GitHub → server tự cập nhật.


6. Logging & Monitoring

  • CI4 log mặc định ở writable/logs/.

  • Config trong app/Config/Logger.php.

  • Nên dùng thêm Sentry hoặc Logstash + ELK Stack để tập trung log.

Ví dụ log error:

log_message('error', 'User đăng nhập thất bại: {email}', ['email' => $userEmail]);

7. Bảo mật Production

  • Chạy CI_ENVIRONMENT = production.

  • Disable debug toolbar.

  • Luôn đặt public/ làm document root.

  • Đổi session handler sang database hoặc Redis.

  • Cấu hình HTTPS (SSL) với Let’s Encrypt.

  • Dùng firewall (UFW, iptables).


Kết luận

Qua bài viết này, bạn đã nắm được toàn bộ quy trình triển khai và quản lý ứng dụng CodeIgniter 4:

  • Cấu hình nhiều môi trường với file .env (local, staging, production).

  • Triển khai trên shared hosting hoặc VPS (Apache/Nginx).

  • Sử dụng Docker để đóng gói và triển khai ứng dụng.

  • Thiết lập CI/CD với GitHub Actions để tự động hóa deploy.

  • Quản lý log & monitoring với Sentry, Logstash.

  • Bảo mật production: HTTPS, firewall, session handler…

Với các bước trên, bạn đã có thể tự tin đưa ứng dụng CI4 lên production và vận hành an toàn, ổn định.

➔ Tham khảo thêm:

Thành Nguyễn

Tôi là Thành, nên tôi đặt tên blog là Thành Nè, Thánh Né... là một coder cùi bắp (Code quèn). Chẳng giỏi viết lách, chỉ giỏi chém gió và có sở thích chia sẻ những kiến thức tôi đã từng...