Skip to main content

บันทึกการย้ายรูปภาพทั้งหมด 50GB จาก Google Photos ไปยัง Immich (self-hosted) บน NAS เมื่อพื้นที่ Google ใกล้เต็มแต่ไม่อยากซื้อเพิ่ม

Kongvut Sangkla

Intro

สวัสดีครับ บทความนี้จะเล่ากระบวนการย้ายรูปภาพจาก Google Photos ไปยัง Immich บน NAS เมื่อพื้นที่ Google ใกล้เต็มแต่ไม่อยากซื้อเพิ่ม

ปัญหาพื้นที่เต็ม

ตามปกติแล้ว Google จะให้พื้นที่ฟรีแค่ 15GB (ใช้ร่วมกันระหว่าง Gmail, Photo, Drive)

Google one pricing plan

โดยราคาของ Google one ซึ่งเป็นราคาแพ็กเก็จพื้นที่ราคาเริ่มต้นขนาด 100GB (กรณีซื้อเพิ่ม) จะอยู่ที่ 70 บาท/เดือน (เป็นพื้นที่ใช้ร่วมกันระหว่าง Gmail, Photos, Drive)

ถ้าอนาคตใช้งานไม่เยอะก็อาจจะคุ้ม (แต่ถ้ามีอย่างอื่นที่ต้องเก็บที่ Drive และมีผู้ใช้งานเพิ่มหลายท่านก็อาจจะไม่ค่อยคุ้มเท่าไหร่)

ปัจจุบันเนื่องด้วยพื้นที่ของบัญชีส่วนตัวใกล้จะเต็มแล้ว อยากลดการพึ่งพา Google และไม่อยากซื้อพื้นที่เพิ่ม ดังนั้นจึงวางแผนย้ายรูปภาพจาก Google Photos ทั้งหมด 2 บัญชี (บัญชีส่วนตัว, บัญชีการศึกษา) รวม 50GB ไปไว้ที่ NAS ส่วนตัวที่ติดตั้งระบบ Immich ไว้

Google Photoใช้ไปแล้วหมายเหตุ
บัญชีส่วนตัว (15GB)11GBไม่รวม Gmail, Drive
บัญชีการศึกษา (50GB)39GBไม่รวม Gmail, Drive
รวม50GB

บัญชีการศึกษาตอนนี้จำกัดไว้ 50GB แล้ว

รู้จักกับ Immich

Immich คือ Self-hosted สำหรับ Photos, Videos ซึ่งเป็นโซลูชันสำรองรูปภาพและวิดีโอด้วยตนเอง ช่วยให้เราสามารถจัดการรูปภาพและวิดีโอได้คล้ายกับ Google Photos โดย Immich มีความพิเศษดังนี้

Immich

  • Self-Hosted: แตกต่างจาก Google Photos ตรงที่ Immich จะเก็บข้อมูลของคุณไว้บนเซิร์ฟเวอร์ของเราเอง และดูแลความเป็นส่วนตัวและความปลอดภัยด้วยตนเอง
  • Mobile Backup: Immich รองรับการทำงานบน Mobile Apps ทั้ง iOS และ Android เพื่อให้สามารถสำรองรูปภาพและวิดีโอโดยตรงผ่านมือถือ
  • Features: คุณสมบัติต่าง ๆ ที่น่าสนใจ เช่น การจดจําใบหน้า แยกแยะบุคคล การค้นหารูปภาพแบบง่าย และเป็นมิตรกับผู้ใช้งานคล้ายกับ Google Photos
  • Open-Source: ซอฟต์แวร์เป็นโอเพ่นซอร์ส ซึ่งหมายความว่าใช้งานฟรีโดยอิสระสําหรับทุกคน และความสามารถในการตรวจสอบและมีส่วนร่วมพัฒนาได้

หากกําลังมองหาทางเลือกอื่นที่เน้นความเป็นส่วนตัวแทน Google Photos ที่มีฟังก์ชันการทํางานคล้ายกัน Immich ก็เป็นตัวเลือกที่ดีในการพิจารณา อย่างไรก็ตามสิ่งสําคัญคือต้องเข้าใจการตั้งค่าและบํารุงรักษาระบบ ซึ่งก็ต้องใช้ความรู้ทางเทคนิคร่วมด้วย

สำหรับผู้ที่มี NAS อยู่แล้วถึงจะคุ้ม

What is NAS

(What is NAS from https://www.seagate.com/as/en/blog/what-is-nas-master-ti/)

ก่อนจะอ่านต่อ ขอเตือนว่าบทความนี้สำหรับผู้ที่มี NAS อยู่แล้วถึงจะคุ้มเพราะว่า

ใครที่ไม่มี NAS อยากลองติดตั้ง Immich ก็สามารถทำได้แต่ไม่แนะนำให้ใช้งานจริง (ถ้าเป็นข้อมูลที่สำคัญ) เพราะถ้า HDD เสียหรือพังข้อมูลจะเสียหายหมด

NAS คือเครื่องจัดเก็บข้อมูลโดยเป็น Hardware ที่ทำงานร่วมกับ Software เฉพาะมีลักษณะการทำงานคล้าย ๆ การเก็บข้อมูลบน Cloud Storage (Google Drive, Dropbox, หรืออื่นๆ) แต่ NAS จะเน้นการจัดเก็บข้อมูลในเครือข่าย (Network) ภายในบ้าน หรือในองค์กร

  1. ต้องใช้ระบบ RAID 1 หรือ RAID 5 (หรือตัวอื่นที่มีความสามารถเมื่อ HDD ตัวใดตัวหนึ่งพังแต่ระบบยังสามารถใช้งานได้)
  2. NAS ปัจจุบันมี 2 ประเภท
    1. แบบสำเร็จรูปพร้อมใช้งานก็มีขายทั่วไปที่ดัง ๆ มี 2 ยี่ห้อ เช่น Synology, QNAP (ลองดูราคาตามลิงค์ ราคาส่วนใหญ่ยังไม่รวม HDD) สำหรับผู้ไม่อยากทำอะไรเองเยอะ แค่อยากใช้งานแบบ User ทั่วไป
    2. แบบสร้างเอง ประเภทนี้ต้องหา Hardware มาประกอบเอง และติดตั้ง OS เอง ข้อดีคือได้สเปคที่สูงในราคาที่ถูก ข้อเสียคือต้องทำเองแก้ปัญหาทุกอย่าง ส่วน OS ดัง ๆ ได้แก่ TrueNAS Scale, OpenMediaVault, Unraid
info

RAID 1 หรือ RAID 5 คือการนำ HDD หลายตัวมาต่อกัน (Disk Array) เพื่อเพิ่มขนาดความจุ และเพิ่มความสามารถของ HDD รวมกัน อีกทั้งยังมีข้อดีที่สามารถเสียได้ทีละ 1 ลูก (จะเป็นตัวใดก็ได้) จากนั้นเราก็ซื้อตัวใหม่มาเปลี่ยน

ภาพรวมขั้นตอนทั้งหมด

  1. ติดตั้ง Immich
  2. (แถม) เพิ่มความสามารถเรื่อง Hardware acceleration สำหรับ Machine learning และ Transcoding
  3. ทดลอง Sync รูปภาพในมือถือผ่าน Immich App
  4. ดาวน์โหลดรูปภาพทั้งหมดจาก Google Photos (ผ่านบริการ Google Takeout)
  5. ย้ายรูปภาพจาก Google Photos ไปยัง Immich
    1. รู้จักกับ Immich External Library
    2. นำ .zip ของรูปภาพทั้งหมดของ Google Photos อัพโหลดไปยัง Immich (External Library Path)
    3. สร้าง Immich External Library ใหม่
    4. เพื่ม Immich External Library Path
    5. Scan รูปภาพใหม่จาก Immich External Library Path

การติดตั้ง Immich

(NAS ที่ใช้ระบบ RAID 5 ใช้งานส่วนตัวที่บ้านแบบประกอบเอง)

Hardware Specs ขั้นต่ำสำหรับ Immich

  • OS: แนะนำ Linux (Ubuntu, Debian, etc)
    • Windows ที่มี Docker Desktop หรือ WSL 2
    • macOS ที่มี Docker Desktop
  • RAM: ขั้นต่ำ 4GB (แนะนำ 6GB)
  • CPU: ขั้นต่ำ 2 cores (แนะนำ 4 cores)
  • Storage: แนะนำเป็น Unix-compatible filesystem (EXT4, ZFS, APFS, etc.) ที่สนับสนุนการทำ user/group ownership และ permissions
  • รายละเอียดอื่น ๆ ทั้งหมด https://immich.app/docs/install/requirements

สำหรับการติดตั้ง Immich นั้นสามารถทำได้หลายวิธีสามารถอ่านได้จาก Immich install แต่สำหรับบทความนี้จะใช้ Docker ในการติดตั้งเพราะสะดวกต่อการดูแล และการอัปเดตในอนาคต

1. ติดตั้งผ่าน Docker (แนะนำ)

ขั้นตอนการติดตั้ง Immich นั้นมีหลายวิธีแต่บทความนี้จะใช้ Docker กับ Docker Compose ในการติดตั้งเพราะสะดวกต่อการดูแล และการอัปเดตในอนาคต

ขั้นตอนที่ 1

สร้าง Directory สำหรับ Immich
mkdir ./immich
cd ./immich

ดาวน์โหลด Template ของ docker-compose.yml และ .env จากคำสั่ง

docker-compose.yml
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
.env
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env
เพิ่มความสามารถ Hardware acceleration สำหรับ Machine learning และ Transcoding

รายละเอียดเพิ่มเติม:

เป็นการเพิ่มความสามารถในการประมวลผลรูปภาพโดยอาศัยความสามารถของ Hardware (CPU, GPU)

ตัวอย่างนี้จะเป็นการใช้ Hardware acceleration (CPU Intel) กำหนดค่าดังนี้

immich-microservices (สำหรับ CPU Intel เท่านั้น)
  immich-microservices:
container_name: immich_microservices
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/hardware-transcoding
file: hwaccel.transcoding.yml
service: quicksync # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
immich-machine-learning (สำหรับ CPU Intel เท่านั้น)
  immich-machine-learning:
container_name: immich_machine_learning
# For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag.
# Example tag: ${IMMICH_VERSION:-release}-cuda
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}-openvino
extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
file: hwaccel.ml.yml
service: openvino # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
(ไม่จำเป็น) hwaccel.transcoding.yml
wget -O hwaccel.transcoding.yml https://github.com/immich-app/immich/releases/latest/download/hwaccel.transcoding.yml
(ไม่จำเป็น) hwaccel.ml.yml
wget -O hwaccel.ml.yml https://github.com/immich-app/immich/releases/latest/download/hwaccel.ml.yml

ขั้นตอนที่ 2

แก้ไขไฟล์ .env ดังนี้

.env
# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables

# The location where your uploaded files are stored
UPLOAD_LOCATION=./library
# The location where your database files are stored
DB_DATA_LOCATION=./postgres

# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=release

# Connection secret for postgres. You should change it to a random password
DB_PASSWORD=postgres

# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

ส่วนที่สำคัญ (ที่ควรจะแก้ไข):

  • UPLOAD_LOCATION คือ Path ที่จัดเก็บรูปภาพ (กำหนดได้เอง เช่น /srv/dev-disk/immich)
  • DB_DATA_LOCATION คือ Path ที่จัดเก็บฐานข้อมูล (กำหนดได้เอง เช่น /srv/dev-disk/immich-pgdata)
  • DB_PASSWORD คือรหัสผ่านของฐานข้อมูล (กำหนดได้เอง)

ขั้นตอนที่ 3

เริ่มต้นการติดตั้ง Immich ด้วย Docker Compose ดังนี้

Start containers ด้วยคำสั่ง docker compose
docker-compose up -d

รอสักครู่ และหลังติดตั้ง Immich เสร็จลองใช้คำสั่ง

เพื่อดู Container ที่ติดตั้ง
docker ps -a
docker ps -a
   CONTAINER ID        IMAGE                                        COMMAND                    CREATED             STATUS             PORTS                                        NAMES
1799dc8c4355 ghcr.io/immich-app/immich-server:release "tini -- /bin/bash s…" 5 days ago Up 3 hours 0.0.0.0:2283->3001/tcp, :::2283->3001/tcp immich_server
1ce7a1c2e2a0 .../tensorchord/pgvecto-rs:pg14-v0.2.0 "docker-entrypoint.s…" 5 days ago Up 3 hours 5432/tcp immich_postgres
b3400f007b69 .../library/redis:6.2-alpine "docker-entrypoint.s…" 5 days ago Up 3 hours 6379/tcp immich_redis

2. ทดสอบใช้งาน

เมื่อติดตั้งเสร็จเรียบร้อยสามารถเข้าใช้งานผ่าน URL ดังนี้

http://nas-ip:2283

ในการเข้าใช้งานครั้งแรก จำเป็นต้องสร้างบัญชีของผู้ดูแลดังนี้

จากนั้นติดตั้ง App เพื่อ Sync รูปภาพจากมือถือ

Mobile App Login

เมื่อติดตั้ง App ในมือถือแล้วในหน้า Login ระบุ URL ของ Server ดังนี้

  • กำหนด Server Endpoint URL http://nas-ip:2283/api
  • Login ด้วย Email และ Password ของคุณ
  • ในหน้า Backup กด Select เพื่อเลือก Albums ที่ต้องการ Backup
Immich Mobile App LoginImmich Mobile App

Immich Mobile App
tip

แถมนิดนึง ในหน้า Backup options สามารถกำหนดค่าดังนี้

  • Turn on foreground backup เปิดการทำงานให้สำรองข้อมูลอัตโนมัติเมื่อเปิด App (ส่วนตัวไม่เปิด)
  • Automatic background backup เปิดการทำงานให้สำรองข้อมูลอัตโนมัติเบื้องหลัง (ส่วนตัวเปิด)
    • เมื่อเชื่อมต่อผ่าน WiFi เท่านั้น
    • เมื่อกำลังเสียบชาร์ทอยู่เท่านั้น

Google Takeout

Google Takeout คือบริการสำหรับนำข้อมูลจากบริการของ Google ออกมา (Export) เช่น Google Photos, Google Drive

ในกรณีนี้เราจะเอา Google Photos ออกมาทั้งหมดด้วยวิธีการ Download (ทั้งหมด) ขั้นตอนคือ

  1. ไปที่ Google Takeout https://takeout.google.com/
  2. ในหน้าเลือกข้อมูลที่ต้องการ Export (กดที่ Deselect all จากนั้นเลือก Google Photos)
  3. กด Next step
  4. ในหน้า Frequency & Destination
    1. Transfer to: Send download link via email (ดาวน์โหลดผ่านลิงค์ที่ส่งมาใน email)
    2. Frequency: Export once (Export ครั้งเดียว)
    3. File type: .zip
    4. File size: 50GB (ถ้าเลือกต่ำกว่านี้ เช่น 10GB และสมมุติรูปภาพทั้งหมดมีขนาด 11GB จะถูกแบ่งเป็น 2 .zip ไฟล์)
    5. กด Create export
  5. รอสักพักเพราะ Google กำลังเตรียมไฟล์สำหรับดาวน์โหลดให้เรา หากเสร็จแล้วจะแจ้งเราทาง email (ไม่เกิน 10 นาทีขึ้นอยู่กับขนาดไฟล์)
  6. เมื่อดาวน์โหลดไฟล์ .zip มาไว้ที่เครื่องให้ทำการ Copy ไฟล์ไปยังเครื่อง NAS
  7. ตัวอย่างจะ copy (ทั้งหมด 3 .zip) ไฟล์ไปยัง path ใหม่ (ต้อง Extract ไฟล์ .zip)
    1. /srv/dev-disk/immich-external/GooglePhotos1
    2. /srv/dev-disk/immich-external/GooglePhotos2
    3. /srv/dev-disk/immich-external/GooglePhotos3

ย้ายรูปภาพจาก Google Photos ไปยัง Immich

การย้ายรูปภาพจาก Google Photos ไปยัง Immich (จำนวนมาก ๆ) จะใช้ความสามารถของ Immich ที่เรียกว่า External Library ดังนี้

1. แก้ไขไฟล์ docker-compose.yml และ .env

กำหนด External Library Path ตัวอย่าง

.env
EXTERNAL_PATH = /srv/dev-disk/immich-external

เพิ่ม Volume External Library Path ให้กับ immich-server และ immich-microservices

docker-compose.yml
immich-server:
volumes:
- ${EXTERNAL_PATH}:/usr/src/app/external

Restart Immich

docker compose down
docker compose up -d

2. สร้าง Library ใหม่

  • ที่เมนูขวาบนกดที่ Administration
  • จากนั้นกดที่เมนู External Libraries
  • กดที่ปุ่ม + Create library
  • จะมีหน้าต่างให้เลือกว่า Select library owner หมายถึง External Library เป็นของใคร
  • จากนั้นกดที่ปุ่ม Create
  • กดที่เมนู เพื่อเลือก Edit Import Paths

Edit Import Paths

  • จากนั้น Add path
  • ระบุ /usr/src/app/external แล้วกดที่ปุ่ม Add

Add path

  • เมื่อระบุ Path ครบแล้วให้กดที่ปุ่ม Save

Scan New Library Files

  • กดที่เมนู เพื่อเลือก Scan New Library Files

Jobs (Scan New Library Files)

  • เพื่อตรวจสอบว่าระบบกำลัง Scan รูปภาพใหม่ ไปที่เมนู Jobs (ด้านซ้าย)
  • คุณควรเห็นว่าระบบกำลังทำงาน (Waiting) ในการ Generate Thumbnails และ Extract Metadata

ในขั้นตอน Generate Thumbnails และ Extract Metadata จะใช้ CPU เครื่อง (แทบจะ 100%) อาจจะทำให้เครื่องทำงานหนัก ความเร็วนั้นขึ้นอยู่กับสเปคเครื่อง

สรุป

ที่จริงบทความนี้ไม่ค่อยได้เล่าถึงรายละเอียดวิธีการใช้งาน Immich เท่าไหร่ แต่ถึงอย่างไรท่านสามารถลองดู Demo ของ Immich ได้จากลิงก์ด้านล่าง

https://demo.immich.app

สำหรับการย้ายรูปภาพจาก Google Photos ไปยัง Immich และหลังจากใช้งานแล้วก็ค่อนข้างพอใจอย่างมาก เพราะ Immich นั้นออกแบบระบบคล้ายกับของ Google Photos (จะเรียกว่าลอกกันมาก็ได้ 😄) อีกทั้งมี Client App พร้อมใช้งานทั้งบน Android/iOS ทำงานได้เร็ว Clean ไม่ต้องปรับตัวเยอะ

สำหรับใครที่อยากใช้งานนอกบ้านด้วย และอยากทำเป็น https สามารถใช้ Cloudflare Tunnel ช่วยได้ (ส่วนตัวใช้แค่ภายในบ้าน และ Sync รูปภาพกับ Networks ภายในเวลากลับมาที่บ้าน)

ที่จริงนอกจาก Immich ที่เป็น Photos sharing services แบบ Self-hosted ก็มีตัวอื่น ๆ ด้วยเผื่อมีผู้สนใจ สามารถหาข้อมูลและดูรายละเอียดเปรียบเทียบได้ที่นี่

https://meichthys.github.io/foss_photo_libraries/

References

Loading...