immich - Sao lưu ảnh
Selfhost
Selfhost
Add Headings and they will appear in your table of contents.
Cài immich bằng docker compose:
Khắc phục tình trạng lỗi không thể upload file lớn hơn 100MB khi dùng Tunnel của Cloudflare để truy cập qua tên miền từ Internet mà không cần mở port.
Vì mình dùng Cloudflared rồi nên dùng luôn WARP - Zero Trust luôn, không cần dùng dịch vụ VPN khác (nếu muốn an toàn hơn thì có thể cài thêm 1 VPN khác để backup).
Lợi ích của việc này là có thể dùng trực tiếp tên miền luôn mà không cần thay đổi tên miền sang IP cục bộ của server, hoạt động liền mạch - tốt cho những người dùng khác của bạn (Điều kiện là tên miền của bạn đang được Cloudflare quản lý). Cũng như vẫn có thể dùng tính năng đăng nhập bàng Google,.. vì bạn vẫn đang truy cập bằng tên miền mà. Nếu bạn dùng IP để truy cập immich thì bắt buộc phải dùng user và password.
Vì mình dùng docker nên tất cả hướng dẫn các sẽ chỉ hướng dẫn cài trên docker!
Sơ đồ:
Client (điện thoại, máy tính,..) - Zero Trust WARP - Caddy - Server immich
Truy cập bằng domain public: immich.yourdomain.vn
Nhưng resolve về IP nội bộ 192.168.1.X
SSL vẫn hợp lệ từ Let's Encrypt
DNS quản lý bởi Cloudflare
Nghĩa là: Cùng một domain, nhưng trả về IP khác nhau tùy theo môi trường mạng (dùng hoặc không dùng VPN/ZeroTrust).
Zero Trust - phân giải tên miền thành IP cục bộ của server immich:
Caddy - cấp chứng chỉ SSL từ Let's Encrypt (Vì đang truy cập domain qua IP local nên SSL do Cloudflare cấp trước đó qua Tunnel không hoạt động).. thông qua Cloudflare (vì khi Let's Encrypt xác thực thông tin để cấp chứng chỉ SSL thì không truy cập được server chạy caddy vì đang proxy qua Cloudflare, Let's Encrypt chỉ thấy được Cloudflare thôi).
Thiết lập DNS policy trên Zero Trust (Cloudflare):
Zero Trust -> Firewall policies -> DNS policy -> Create a DNS policy
Traffic: Domain
Operator : is
Value: YourDomain.com
Select an action:
Action: Override
Override Hostname: YourServerIP
=> Save policy
Tạo CLOUDFLARE_API_TOKEN:
Bạn truy cập link này, hoặc
Vào icon tài khoản của bạn trên góc phải và chọ Profile
API Tokens.
Sau đó chọn "Create Token"
Dùng Edit zone DNS templates hoặc Create Custom Token với thiết lập:
Permissions:
Zone → DNS → Edit
Zone → Zone → Read
Zone Resources: Include -> Specific zone -> youdomain.vn
Sau đó xác nhận và copy token, dùng để điền vào CLOUDFLARE_API_TOKEN trên file compose của Caddy.
Caddy - vì không có image chính thức sẵn của Caddy kèm plugin caddy-dns/cloudflare nên ta sẽ tự build image riêng.
Build image hỗ trợ DNS-Cloudflare cho Caddy bằng Dockerfile:
#Dockerfile
FROM caddy:2-builder AS builder
RUN xcaddy build \
--with github.com/caddy-dns/cloudflare
FROM caddy:2
COPY --from=builder /usr/bin/caddy /usr/bin/caddy
Caddy compose cho image tự build:
container_name: caddy - bạn thay "caddy" thành tên của image mà đặt lúc bạn build nhé. Tại mình dùng OMV thao tác qua giao diện web. Các bạn tự tìm hiểu nhé.
CLOUDFLARE_API_TOKEN=bmXjgdev1eTn_efGkkRyIbk32gneqtJCx8ndsgUe - Thay API Token mà bạn đã lấy bên trên vào.
#compose file:
services:
caddy:
container_name: caddy
image: caddy-dns
restart: always
ports:
- 80:80
- 443:443
volumes:
- CHANGE_TO_COMPOSE_DATA_PATH/caddy/Caddyfile:/etc/caddy/Caddyfile
- CHANGE_TO_COMPOSE_DATA_PATH/caddy/caddy_data:/data
- CHANGE_TO_COMPOSE_DATA_PATH/caddy/caddy_config:/config
- CHANGE_TO_COMPOSE_DATA_PATH/caddy/websites:/var/www
networks:
- caddy_net
environment:
- CLOUDFLARE_API_TOKEN=bmXjgdev1eTn_efGkkRyIbk32gneqtJCx8ndsgUe
networks:
caddy_net:
name: caddy_net
external: true
File Caddyfile:
#Bạn có thể dùng local_certs nếu không muốn dùng acme_dns cloudflare để Let's Encrypt xác thực tên miền qua Cloudflare, nhưng trình duyệt/app sẽ báo lỗi SSL gây khó chịu.
#{
# local_certs
#}
{
acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}
#For test
:80 {
respond "Hello, world!"
}
YourDomain.com {
# respond "Hello, world!!"
reverse_proxy YourIP:2283
}
Và thế là xong rồi!