AEM Deployment, Publish content assets and Project architecture

AEM deployment

Overview

Author: nằm trong mạng nội bộ (protected zone hoặc VPN), JCR riêng.

Publish: có thể nằm trong DMZ hoặc public cloud, JCR riêng.

Dispatcher: Apache HTTP server phía ngoài cùng (cache + bảo vệ).

Thành phầnCó JCR riêng không?Có dùng chung với thành phần khác không?
AuthorKhông — hoàn toàn riêng biệt
PublishKhông — hoàn toàn riêng biệt
DispatcherKhông

Vậy dữ liệu ở Publish đến từ đâu?

Từ Author “đẩy qua” bằng quá trình gọi là Replication (hoặc “Publishing”).

  • Content Author trên Author tạo ra một page, một asset, hay một content fragment
  • Khi họ bấm nút “Publish”, AEM Author:
    • Serialize node JCR thành một gói nội dung nhẹ
    • Gửi qua HTTP request đến AEM Publish
    • AEM Publish ghi vào JCR riêng của nó

Mỗi instance Author và Publish đều có ổ đĩa riêng, repository riêng.

Trong môi trường Production thực tế, Dispatcher luôn chạy trên một server riêng biệt — và thường nằm trước AEM Publish như một reverse proxy + cache + firewall.

Chi tiết về Dispatcher Server:

Thành phầnChi tiết
SoftwareApache HTTP Server (httpd) + Dispatcher module
File config chínhdispatcher.any
Mục tiêu– Cache content (HTML, JSON, CF…)
– Bảo vệ Publish
– Ghi log access
Vị trí triển khaiTrên server riêng biệt với AEM (thường là edge node hoặc DMZ)
Cổng mặc định80 (HTTP), 443 (HTTPS)
Không cài AEMTuyệt đối không chạy AEM ở đây

Đặt servlet tại path không bị Dispatcher chặn

Không dùng /bin/, /system/, hoặc /libs/
Deploy servlet lên Publish

Nếu bạn đang local:

mvn clean install -PautoInstallPackage -Daem.port=4503

Nếu dùng AEMaaCS:

Đảm bảo servlet nằm trong core và gói all được build đúng

Deploy qua Cloud Manager pipeline

Cho phép URL truy cập qua Dispatcher

Nếu bạn có Dispatcher (Apache HTTP server) ở ngoài:

Mở rule trong dispatcher.any:

apacheCopyEdit/filter {
  /0001 { /type "allow" /url "/cf/list.html" }
}

Bật method GET:

apacheCopyEdit/allowedClients {
  /methods [ "GET" ]
}

Tắt cache nếu nội dung thay đổi thường xuyên:

apacheCopyEdit/cache {
  /rules {
    /0001 { /glob "/cf/list.html" /type "deny" }
  }
}

Sau đó:

bashCopyEditsudo service apache2 restart

Kết quả:

Khi mọi thứ xong xuôi, người dùng bên ngoài có thể truy cập:

arduinoCopyEdithttps://www.yourdomain.com/cf/list.html

→ Trả về HTML danh sách các CF từ DAM.

Mô hình mạng AEM với DMZ:

AEM với DMZ

Mô hình mạng AEM với DMZ:

DMZ là gì?

DMZ là viết tắt của Demilitarized Zone – tạm dịch là vùng phi quân sự, trong hạ tầng IT gọi là:

Một vùng mạng “trung lập” nằm giữa Internet công cộng và mạng nội bộ (internal network).


Mục đích của DMZ

  • Cho phép người ngoài truy cập các dịch vụ cần thiết (web, API, mail…) mà không thể chạm đến mạng nội bộ.
  • Nếu server trong DMZ bị tấn công → kẻ tấn công không thể truy cập vào hệ thống nội bộ của công ty.

Lợi ích:

DMZ Giúp Bạn…Vì sao?
Bảo vệ dữ liệu nội bộAuthor không lộ diện trước Internet
Cho phép public websiteDispatcher & Publish có thể truy cập công khai
Giới hạn thiệt hại khi bị hackHacker không thể “nhảy” từ web → database nội bộ

Tóm gọn:

  • DMZ là vùng đệm mạng.
  • Chứa các server cần public như: Dispatcher, AEM Publish, Web APIs.
  • Có 2 lớp firewall: ngăn từ Internet → LAN, và DMZ → LAN.

Project architecture

aem-project-root
├── core <– chứa OSGi bundles
│ └──── src/main/java/com/example/core
│ ├──── config <– đặt interface cấu hình tại đây
│ ├──── services <– interface như ExternalService.java
│ └──── services/impl <– lớp thực thi như ExternalServiceImpl.java
├── ui.apps <– cấu hình apps & components
├── ui.content <– content structure (site, pages)
├── ui.config <– OSGi configs theo runmode
└── all <– mô-đun tổng hợp để build đầy đủ dự án

AEM Deployment

Leave a Reply

Your email address will not be published. Required fields are marked *