Trong bài này mình sẽ hướng dẫn cài đặt EmDash (self-host) trên Ubuntu 22.04 theo mô hình Node/Astro + Nginx + systemd + SSL Let’s Encrypt. Đây là cách triển khai ổn định, dễ vận hành và phù hợp cho VPS/VM.
Lưu ý về tên miền: Trong bài viết này, mình sử dụng tên miền emdash.22.id.vn làm ví dụ. Bạn hãy thay thế bằng tên miền của riêng mình (ví dụ: cms.yourdomain.com) ở tất cả các bước bên dưới. Đảm bảo domain đã trỏ A record về IP server của bạn trước khi bắt đầu.
1) Chuẩn bị
Bạn cần:
• Ubuntu 22.04 với quyền sudo
• Tên miền đã trỏ A record về IP server (ví dụ: emdash.22.id.vn → thay bằng domain của bạn)
• Mở port 80/443 trên firewall
• Đã cài sẵn git và curl
2) Cài Node.js và pnpm
Kiểm tra phiên bản Node và NPM:
node -v
npm -v Cài pnpm:
sudo npm i -g pnpm@latest
pnpm -v 3) Clone mã nguồn EmDash và cài dependencies
Cài vào thư mục /srv/emdash:
sudo mkdir -p /srv
cd /srv
sudo git clone https://github.com/emdash-cms/emdash.git
cd emdash Cài dependencies:
pnpm install 4) Build demo site (production)
Build demo site demos/simple:
cd /srv/emdash
pnpm --filter emdash-demo build Server entry sau build thường nằm tại:
/srv/emdash/demos/simple/dist/server/entry.mjs 5) (Quan trọng) Fix reverse proxy: tắt checkOrigin
Khi chạy sau Nginx reverse proxy, một số request POST có thể bị chặn do kiểm tra origin/CSRF. Cần tắt checkOrigin trong astro.config.mjs:
nano /srv/emdash/demos/simple/astro.config.mjs Thêm cấu hình sau:
security: {
checkOrigin: false,
}, Build lại sau khi sửa:
cd /srv/emdash
pnpm --filter emdash-demo build 6) Tạo systemd service để chạy EmDash
Tạo file service. Lưu ý thay emdash.22.id.vn bằng domain của bạn ở dòng EMDASH_PUBLIC_URL:
sudo nano /etc/systemd/system/emdash.service Nội dung file:
[Unit]
Description=EmDash (Astro Node)
After=network.target
[Service]
Type=simple
WorkingDirectory=/srv/emdash/demos/simple
Environment=HOST=127.0.0.1
Environment=PORT=4322
Environment=NODE_ENV=production
# Đổi domain bên dưới thành tên miền của bạn
Environment=EMDASH_PUBLIC_URL=https://emdash.22.id.vn
ExecStart=/usr/bin/node /srv/emdash/demos/simple/dist/server/entry.mjs
Restart=on-failure
RestartSec=3
User=root
[Install]
WantedBy=multi-user.target Enable và start service:
sudo systemctl daemon-reload
sudo systemctl enable --now emdash.service
sudo systemctl status emdash.service --no-pager -l Test local:
curl -I http://127.0.0.1:4322 7) Cài Nginx reverse proxy
Cài Nginx:
sudo apt update
sudo apt install -y nginx Tạo file vhost. Thay emdash.22.id.vn bằng domain của bạn:
# Thay YOUR_DOMAIN bằng domain của bạn, ví dụ: cms.yourdomain.com
sudo nano /etc/nginx/sites-available/YOUR_DOMAIN.conf Nội dung file (thay emdash.22.id.vn thành domain của bạn):
server {
listen 80;
listen [::]:80;
# Đổi server_name thành domain của bạn
server_name emdash.22.id.vn;
location / {
proxy_pass http://127.0.0.1:4322;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
} Enable site và reload Nginx:
# Thay YOUR_DOMAIN bằng domain của bạn
sudo ln -sf /etc/nginx/sites-available/YOUR_DOMAIN.conf /etc/nginx/sites-enabled/YOUR_DOMAIN.conf
sudo nginx -t
sudo systemctl reload nginx 8) Bật HTTPS bằng Let’s Encrypt (Certbot)
Cài certbot:
sudo apt install -y certbot python3-certbot-nginx Xin SSL và tự động redirect HTTPS. Thay emdash.22.id.vn bằng domain của bạn:
# Thay domain bên dưới thành của bạn
sudo certbot --nginx -d emdash.22.id.vn --redirect 9) Link quản trị và vận hành
Sau khi cài xong, truy cập admin panel và setup (thay domain tương ứng):
Admin panel: https://your-domain.com/_emdash/admin
Setup: https://your-domain.com/_emdash/admin/setup Xem log hệ thống:
journalctl -u emdash.service -n 200 --no-pager Lưu ý
• Khi dùng passkeys/WebAuthn, hãy đảm bảo site chạy HTTPS và cấu hình EMDASH_PUBLIC_URL đúng domain để tránh lỗi mismatch origin.
• Nếu bạn dùng domain khác, nhớ thay thế emdash.22.id.vn bằng domain của bạn ở cả 3 nơi: systemd service (EMDASH_PUBLIC_URL), Nginx vhost (server_name), và Certbot (tham số -d).
• Sau khi đổi domain, cần restart service và reload Nginx:
sudo systemctl restart emdash.service
sudo systemctl reload nginx
No comments yet