Nhảy đến nội dung

mtls

Setting up and configuring mTLS certificate for Headless CMS OneEntry using tokens and mTLS, as well as deploying the application on a server with Nginx, Docker, and GitLab

Phần 1: Thiết lập mTLS

Bảo vệ API
  1. 1. Sử dụng Token: Tạo một token trong cài đặt OneEntry và thêm nó vào tiêu đề yêu cầu với tham số 'x-app-token', trong đó giá trị là token.
  2. 2. Sử dụng mTLS: Bật tùy chọn mTLS trong bảng điều khiển OneEntry của bạn và tạo chứng chỉ trong cài đặt OneEntry.
Thiết lập chứng chỉ
  1. 1. Trong bảng điều khiển của bạn, đi đến tab 'Truy cập' và chuyển từ token sang mTLS.
  2. 2. Tạo một chứng chỉ mới trong OneEntry ('Cài đặt' -> 'Chứng chỉ ứng dụng' -> 'Tạo chứng chỉ mới').
  3. 3. Tải nó về máy tính của bạn và giải nén vào thư mục 'cert' trong thư mục gốc của dự án.
Thiết lập môi trường địa phương (sử dụng ReactJS làm ví dụ)
  1. 1. Tải tệp setupProxy.js và lưu nó trong thư mục 'src'.
  2. 2. Chỉnh sửa tham số 'target', chỉ định địa chỉ của dự án của bạn.
  3. 3. Cài đặt gói 'http-proxy-middleware': 'npm install http-proxy-middleware'.
  4. 4. Khởi động ứng dụng.

Phần 2: Cấu hình máy chủ

Chuẩn bị máy chủ
  1. 1. Cập nhật thông tin kho lưu trữ: `apt update`.
  2. 2. Thêm kho lưu trữ Docker và cài đặt các gói: `apt install nginx certbot docker-ce pwgen`.
Cấu hình UFW
  1. 1. Chặn tất cả các kết nối đến: `ufw default deny incoming`.
  2. 2. Cho phép tất cả các kết nối đi: `ufw default allow outgoing`.
  3. 3. Cho phép các kết nối TCP đến trên các cổng 22, 80 và 443: `ufw allow 22,80,443/tcp`.
Cấu hình SSH
  1. 1. Chỉnh sửa cấu hình daemon SSH: `nano /etc/ssh/sshd_config`.
  2. 2. Đặt `PasswordAuthentication no`.
  3. 3. Khởi động lại daemon SSH: `systemctl restart ssh`.
Cấu hình Nginx
  1. 1. Xóa tệp cấu hình mặc định: `rm /etc/nginx/sites-available/default`
  2. 2. Tạo một tệp cấu hình mới: `nano /etc/nginx/sites-available/my_app`.
  3. 3. Tải xuống và chỉnh sửa cấu hình Nginx từ OneEntry, thay thế "your_domain.com" bằng miền của bạn.
  4. 4. Sau đó chạy lệnh: ‘ln -s /etc/nginx/sites-available/my_app /etc/nginx/sites-enabled', thay thế "my_app" bằng tên tệp cấu hình của bạn.
  5. 5. Cấp phát chứng chỉ SSL bằng Certbot: `certbot certonly --webroot -w /var/www/html -d your_domain`
  6. 6. Kiểm tra việc gia hạn chứng chỉ tự động: `certbot renew --dry-run`.
  7. 7. Chỉnh sửa tác vụ cron của Certbot để tự động tải lại cấu hình Nginx sau khi cấp phát chứng chỉ: ‘nano /etc/cron.d/certbot', thay thế dòng cuối cùng bằng: `echo "0 */12 * * * root certbot -q renew && nginx -s reload" > /etc/cron.d/certbot`
  8. 8. Bỏ chú thích các dòng trong tệp cấu hình 'nano /etc/nginx/sites-available/my_app' (nơi 'my_app' là tên tệp cấu hình của bạn).
  9. 9. Kiểm tra cấu hình Nginx: `nginx -t`
  10. 10. Tải lại Nginx sau mỗi thay đổi: `nginx -s reload`.

Phần 3: Triển khai ứng dụng với GitLab và GitHub

GitHub
Tạo người dùng mới cho GitHub Runner
  1. 1. Tạo một mật khẩu: 'pwgen -s 15 1'
  2. 2. Tạo một người dùng mới: 'useradd -m github-runner'
  3. 3. Đặt mật khẩu cho nó: 'passwd github-runner'
  4. 4. Thêm người dùng mới vào các nhóm: 'usermod -aG docker github-runner' và 'usermod -aG sudo github-runner'.
  5. 5. Thay đổi shell cho người dùng GitHub Runner: 'chsh -s /bin/bash github-runner'
  6. 6. Chuyển sang người dùng mới: 'sudo su - gitlab-runner'.
Cấu hình GitHub Runner
  1. 1. Tạo một GitHub Runner: đi đến cài đặt của kho lưu trữ của bạn, nhấp vào 'Actions' và chọn 'Runners', sau đó nhấp vào 'New self-hosted runner'.
  2. 2. Làm theo hướng dẫn trong khối 'Tải xuống' và lệnh đầu tiên trong khối 'Cấu hình'.
  3. 3. Thêm Runner vào khởi động tự động của hệ thống: 'sudo ./svc.sh install'. Bạn sẽ cần nhập mật khẩu đã tạo trước đó.
  4. 4. Khởi động Runner: 'sudo ./svc.sh start'.
  5. 5. Đi đến phần 'Actions', nhấp vào 'Runners', và đảm bảo rằng 'Runner' đang chạy.
  6. 6. Chuyển lại về người dùng 'root'.
  7. 7. Tạo một thư mục làm việc: 'mkdir -p /var/apps/frontend'
  8. 8. Đặt quyền cho người dùng 'github-runner': 'chown -R github-runner:docker /var/apps/frontend'.
Cấu hình biến môi trường trong GitHub
  1. 1. Tạo các biến `DOMAIN`, `MTLS_USER_CERT`, và `MTLS_USER_KEY` trong kho lưu trữ GitHub của bạn ('Cài đặt' -> 'Secrets and Variables').
  2. 2. Tạo một chứng chỉ trong OneEntry, thêm chứng chỉ và khóa vào các biến. Trong biến `DOMAIN`, chỉ định địa chỉ của dự án của bạn mà không có https.
  3. 3. Tải xuống tệp docker-compose.yml và hai tệp nén .github.docker.
  4. 4. Đặt docker-compose.yml, .github.zip, và .docker.zip vào thư mục gốc của dự án của bạn và giải nén các tệp nén (bạn có thể xóa các tệp nén sau khi giải nén).
  5. 5. Chạy lệnh push trong dự án của bạn.
  6. 6. Kiểm tra quá trình trong tab 'Actions'.
  7. 7. Kiểm tra khả năng truy cập của ứng dụng trong trình duyệt.
GitLab
Đăng ký GitLab Runner
  1. 1. Chỉ định các thẻ 'docker, frontend'.
  2. 2. Đi đến 'Cài đặt -> CI/CD -> Runners' và nhấp vào nút 'New project runner'.
  3. 3. Đi đến thư mục đã tạo: `cd /var/apps/gitlab-runner`.
  4. 4. Chạy lệnh để bắt đầu quá trình đăng ký: `docker compose run runner register`.
  5. 5. Nhập URL GitLab, ví dụ, https://gitlab.com/.
  6. 6. Lấy mã đăng ký từ GitLab (trong phần 'Runners' của dự án) và dán vào terminal.
  7. 7. Chỉ định executor là 'docker'.
  8. 8. Chỉ định hình ảnh mặc định là docker:20.10.16.
Cài đặt biến môi trường trong GitLab
  1. 1. Tạo các biến `DOMAIN`, `MTLS_USER_CERT`, và `MTLS_USER_KEY` trong kho lưu trữ GitLab của bạn ('Cài đặt' -> 'CI/CD' -> 'Biến').
  2. 2. Tạo một chứng chỉ trong OneEntry, thêm chứng chỉ và khóa vào các biến, và chỉ định địa chỉ của dự án của bạn mà không có https trong biến `DOMAIN`.
  3. 3. Tải xuống các tệp docker-compose.yml, .gitlab-ci.yml, và tệp nén .docker, đặt các tệp vào thư mục gốc của dự án của bạn, và giải nén các tệp nén (bạn có thể xóa các tệp nén sau khi giải nén).
Chuẩn bị cấu hình GitLab Runner (executor Docker)
  1. 1. Tạo các thư mục cần thiết: `mkdir -p /var/apps/gitlab-runner/volumes/etc/gitlab-runner`
  2. 2. Chạy lệnh: `cat \ /var/apps/gitlab-runner/docker-compose.yamlversion: '3' services: runner: image: 'gitlab/gitlab-runner:v16.2.0' restart: always container_name: 'gitlab-runner' privileged: true volumes: - './volumes/etc/gitlab-runner:/etc/gitlab-runner' - '/var/run/docker.sock:/var/run/docker.sock' EOT`
Cấu hình GitLab Runner
  1. 1. Chỉnh sửa tệp cấu hình: `nano volumes/etc/gitlab-runner/config.toml`.
  2. 2. Đặt tham số `priviledged` thành `true` để kích hoạt Docker-in-Docker.
  3. 3. Thay đổi giá trị của `volumes` thành `['/var/run/docker.sock:/var/run/docker.sock', '/cache']` để Docker hoạt động chính xác.
  4. 4. Thêm `user = 'gitlab-runner'` ở đầu tệp để chạy Runner với tư cách người dùng đó.
  5. 5. Lưu các thay đổi và thoát khỏi trình soạn thảo.
  6. 6. Khởi động lại Runner: 'systemctl restart gitlab-runner'.
Kích hoạt và xác minh GitLab Runner
  1. 1. Chạy lệnh `docker compose up -d` để khởi động Runner.
  2. 2. Đi đến GitLab và kiểm tra rằng Runner đang hoạt động và chạy (bạn sẽ thấy trạng thái của nó trong phần 'Runners' của dự án).
Thiết lập một Runner bổ sung trên máy chủ (executor shell)
  1. 1. Làm theo Hướng dẫn để cài đặt một Runner bổ sung chạy trực tiếp trên máy chủ (không trong Docker).
  2. 2. Đặt thẻ cho Runner: 'shell, frontend'.
Quyền của Runner
  1. 1. Thêm một người dùng mới vào nhóm: 'usermod -aG docker gitlab-runner'
  2. 2. Nếu bạn cần thay đổi chủ sở hữu và nhóm cho một tệp hoặc thư mục: 'chown -R gitlab-runner:docker /var/apps/frontend'

Cấu hình cuối cùng và kiểm tra

  1. 1. Đảm bảo tất cả các Runner được cấu hình đúng và sẵn sàng sử dụng.
  2. 2. Thực hiện lệnh push trong dự án của bạn.
  3. 3. Kiểm tra tiến trình trong 'Build' -> 'Pipelines'.
  4. 4. Kiểm tra khả năng truy cập của ứng dụng trong trình duyệt.

Kết luận

Hãy làm theo các bước này để thiết lập và triển khai ứng dụng của bạn với OneEntry thành công. Chúc bạn may mắn với việc phát triển!