{"id":4026,"date":"2026-08-30T23:12:26","date_gmt":"2026-08-30T15:12:26","guid":{"rendered":"https:\/\/yowlab.idv.tw\/wordpress\/?p=4026"},"modified":"2026-08-30T23:49:29","modified_gmt":"2026-08-30T15:49:29","slug":"%e6%9e%b6%e8%a8%ad-immich-%e7%b6%b2%e8%b7%af%e7%9b%b8%e7%b0%bf%e7%b3%bb%e7%b5%b1","status":"publish","type":"post","link":"https:\/\/yowlab.idv.tw\/wordpress\/?p=4026","title":{"rendered":"\u67b6\u8a2d Immich \u7db2\u8def\u76f8\u7c3f\u7cfb\u7d71"},"content":{"rendered":"<p>\u56e0\u70ba\u9700\u6c42\uff0c\u9700\u8981\u4fdd\u5b58\u6d3b\u52d5\u76f8\u7247\u3002<\/p>\n<p><a href=\"https:\/\/immich.app\/\" target=\"_blank\">Immich \u76f8\u7247\u5f71\u7247\u7ba1\u7406\u7cfb\u7d71<\/a>\u662f\u500b\u5f88\u4e0d\u932f\u7684\u89e3\u6c7a\u65b9\u6848\u3002\u8edf\u9ad4\u4ecb\u9762\u8207\u64cd\u4f5c\u7fd2\u6163\u90fd\u548c Google \u76f8\u7c3f\u76f8\u5dee\u4e0d\u9060\u3002\u76ee\u524d\u88ab\u8a31\u591a\u4eba\u8996\u70ba Google Photos \u7684\u6700\u4f73\u66ff\u4ee3\u9078\u64c7\u3002\u800c\u4e14\u4f7f\u7528\u8005\u9664\u4e86\u4f7f\u7528\u7db2\u9801\u7ba1\u7406\u76f8\u7247\u5916\uff0c\u4e5f\u53ef\u900f\u904e\u4e0b\u8f09\u884c\u52d5\u88dd\u7f6e\u7684 APP \u4f86\u7ba1\u7406\u76f8\u7247\u5f71\u7247\u3002<br \/>\n<a href=\"https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2026\/08\/Screenshot_20260830_232414.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2026\/08\/Screenshot_20260830_232414-1024x502.png\" alt=\"\" width=\"530\" height=\"260\" class=\"alignnone size-large wp-image-4082\" srcset=\"https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2026\/08\/Screenshot_20260830_232414-1024x502.png 1024w, https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2026\/08\/Screenshot_20260830_232414-350x172.png 350w, https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2026\/08\/Screenshot_20260830_232414-768x376.png 768w, https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2026\/08\/Screenshot_20260830_232414.png 1479w\" sizes=\"auto, (max-width: 530px) 100vw, 530px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2026\/08\/Screenshot_20260830_232538.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2026\/08\/Screenshot_20260830_232538-1024x502.png\" alt=\"\" width=\"530\" height=\"260\" class=\"alignnone size-large wp-image-4084\" srcset=\"https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2026\/08\/Screenshot_20260830_232538-1024x502.png 1024w, https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2026\/08\/Screenshot_20260830_232538-350x172.png 350w, https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2026\/08\/Screenshot_20260830_232538-768x376.png 768w, https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2026\/08\/Screenshot_20260830_232538.png 1479w\" sizes=\"auto, (max-width: 530px) 100vw, 530px\" \/><\/a><\/p>\n<style type=\"text\/css\">\nli.present01 {line-height:2em; background-color:#F5E5C9; padding:5px; border-radius:10px; font-weight:bold; margin:5px;}\nli.present02 {line-height:2em; background-color:#ceffbc; padding:5px; border-radius:10px; font-weight:bold; margin:5px;}\nli.present03 {line-height:1.5em; background-color:#b3dffa; padding:5px; border-radius:10px; font-weight:bold; margin:5px;}\nul.none {list-style-type:none;line-height:1.5em; padding:10px;}\nol.lower-alpha {list-style-type:lower-alpha;}\nol.lower-roman {list-style-type:lower-roman;}\nul.note {line-height:1.5em; padding:2px; font-weight:bold; font-size:0.9em;}\n.highlight01 {font-weight:bold; line-height:1.5em; background-color:#e7f49c; padding:0px 2px; border:1px; border-radius:10px;}\n.highlight02 {font-weight:bold; line-height:1.5em; background-color:#F2F26B; padding:1px 1px; border:1px;}\n.highlight03 {font-weight:bold; line-height:1.5em; background-color:#F9BF72; padding:3px 10px; border:2px; border-radius:10px;}\n.highlight04 {font-weight:bold; line-height:1.5em; background-color:#F9BF72; padding:3px 10px 0px 10px; border:0px; border-radius:3px;}\n.box01 {margin: 5px; border:1px #19130B solid; border-radius:5px; padding:10px;}\n.box02 {margin: 5px; font-weight:bold; line-height:1.5em; padding:10px; border:1px #19130B solid; border-radius:5px; float: left;}\nh3 {border:2px #000 solid; border-width:0px 0px 1px 0px; padding-width:0px 0px 3px 0px;}\nh4 {border:2px #000 solid; border-width:0px 0px 1px 0px; padding-width:0px 0px 3px 0px;}\npre { margin: 0px; padding:0px 5px; border:2px soild #000; }<\/p>\n<\/style>\n<p>Immich \u7cfb\u7d71\u67b6\u8a2d\u76ee\u524d\u652f\u63f4\u591a\u7a2e\u65b9\u5f0f\uff0c\u6211\u9078\u64c7\u4f7f\u7528 Docker\u3002<\/p>\n<h3>\u5efa\u7f6e\u6b65\u9a5f\u5982\u4e0b\uff1a<\/h3>\n<ol>\n<li class=\"present01\">\u5efa\u7acb docker\u76ee\u6a19\u8cc7\u6599\u593e\uff0c\u4e26\u5207\u63db\u5230\u8a72\u8cc7\u6599\u593e<\/li>\n<p>    mkdir \/usr\/local\/www\/docker-site\/immich-app;<br \/>\n    cd \/usr\/local\/www\/docker-site\/immich-app<\/p>\n<li class=\"present01\">\u4e0b\u8f09\u5b98\u65b9 docker-compose.yml<\/li>\n<p>    wget <a href=\"https:\/\/github.com\/immich-app\/immich\/releases\/latest\/download\/docker-compose.yml\">https:\/\/github.com\/immich-app\/immich\/releases\/latest\/download\/docker-compose.yml<\/a><\/p>\n<li class=\"present01\">\u4e0b\u8f09\u7bc4\u4f8b\u74b0\u5883\u8b8a\u6578\u6a94<\/li>\n<p>    wget -O .env <a href=\"https:\/\/github.com\/immich-app\/immich\/releases\/latest\/download\/example.env\">https:\/\/github.com\/immich-app\/immich\/releases\/latest\/download\/example.env<\/a><\/p>\n<li class=\"present01\">\u7de8\u8f2f .env \u6a94\u6848<\/li>\n<p># \u7167\u7247\u8207\u5f71\u7247\u5132\u5b58\u4f4d\u7f6e\uff08\u5efa\u8b70\u7528\u7d55\u5c0d\u8def\u5f91\uff0c\u4e26\u78ba\u4fdd\u6709\u8db3\u5920\u7a7a\u9593\uff09<br \/>\nUPLOAD_LOCATION=\/mnt\/your-drive\/immich\/library<\/p>\n<p># \u8cc7\u6599\u5eab\u5132\u5b58\u4f4d\u7f6e\uff08\u26a0\ufe0f \u5fc5\u9808\u662f\u672c\u5730 SSD\uff0c\u4e0d\u53ef\u653e\u5728 NAS\uff09<br \/>\nDB_DATA_LOCATION=\/mnt\/your-ssd\/immich\/postgres<\/p>\n<p># \u8a2d\u5b9a\u6642\u5340\uff08\u53f0\u7063\u8acb\u8a2d Asia\/Taipei\uff09<br \/>\nTZ=Asia\/Taipei<\/p>\n<p># Immich \u7248\u672c\uff0c\u5efa\u8b70\u56fa\u5b9a\u70ba v3 \u6216\u6307\u5b9a\u7248\u672c\u865f<br \/>\nIMMICH_VERSION=v3<\/p>\n<p># \u8cc7\u6599\u5eab\u5bc6\u78bc\uff08\u8acb\u6539\u6210\u96a8\u6a5f\u5f37\u5bc6\u78bc\uff0c\u53ea\u80fd\u7528 A-Z\u3001a-z\u30010-9\uff0c\u4e0d\u80fd\u6709\u7279\u6b8a\u7b26\u865f\u6216\u7a7a\u683c\uff09<br \/>\nDB_PASSWORD=YourStrongPassword123<\/p>\n<p># \u4ee5\u4e0b\u901a\u5e38\u4e0d\u7528\u6539<br \/>\nDB_USERNAME=postgres<br \/>\nDB_DATABASE_NAME=immich<\/p>\n<p># \u8b93 Immich \u77e5\u9053\u5b83\u904b\u884c\u5728\u53cd\u5411\u4ee3\u7406\u5f8c\u9762<br \/>\n#IMMICH_TRUSTED_PROXIES=192.168.1.0\/24,10.0.0.0\/8<br \/>\nIMMICH_TRUSTED_PROXIES=127.0.0.1<\/p>\n<p>##\u6c92\u8a2d TRUSTED_PROXIES\uff1a\u4efb\u4f55\u4eba\u8aaa\u300c\u6211\u662f\u5e6b\u5225\u4eba\u50b3\u8a71\u7684\u300d\uff0c\u8b66\u885b\u90fd\u76f8\u4fe1\uff0c\u5bb9\u6613\u88ab\u9a19\uff08IP \u507d\u9020\uff09<br \/>\n##\u8a2d\u4e86 TRUSTED_PROXIES\uff1a\u8b66\u885b\u53ea\u76f8\u4fe1\u300c\u9019\u5e7e\u500b\u4eba\u300d\u50b3\u4f86\u7684\u8a71\uff0c\u800c\u4e14\u6703\u53bb\u8b80\u4ed6\u5011\u9644\u5e36\u7684\u300c\u771f\u6b63\u8a2a\u5ba2\u540d\u55ae\u300d<\/p>\n<li class=\"present01\">\u7de8\u8f2f docker.compose.yaml \u6a94\u6848<\/li>\n<pre><code>\r\nname: immich\r\n\r\nservices:\r\n  immich-server:\r\n    container_name: immich_server\r\n    image: ghcr.io\/immich-app\/immich-server:${IMMICH_VERSION:-release}\r\n\r\n    ## \u53d6\u6d88\u8a3b\u89e3\u53ef\u555f\u7528\u786c\u9ad4\u52a0\u901f\u5f71\u7247\u8f49\u78bc\uff0c\u652f\u63f4 nvenc\uff08NVIDIA\uff09\u3001quicksync\uff08Intel\uff09\u3001rkmpp\uff08Rockchip\uff09\u3001vaapi\uff08AMD\/Intel\uff09\u7b49\u3002\r\n    # extends:\r\n    #   file: hwaccel.transcoding.yml\r\n    #   service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding\r\n\r\n    volumes:\r\n      # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file\r\n      - ${UPLOAD_LOCATION}:\/data\r\n      - \/etc\/localtime:\/etc\/localtime:ro\r\n    env_file:\r\n      - .env\r\n\r\n    ## \u5c0d\u5167\u5c0d\u5916\u7686\u662f\u8dd1 2283 \u57e0\r\n    ports:\r\n      - '2283:2283'\r\n\r\n    depends_on:\r\n      - redis\r\n      - database\r\n    restart: always\r\n    healthcheck:\r\n      disable: false\r\n\r\n## AI \u6a21\u578b\u670d\u52d9\uff0c\u9019\u662f\u8ca0\u8cac\u4eba\u81c9\u8fa8\u8b58\u3001CLIP \u5716\u7247\u641c\u5c0b\u3001OCR \u6587\u5b57\u8fa8\u8b58\u7684\u7368\u7acb\u670d\u52d9\u3002\r\n  immich-machine-learning:\r\n    container_name: immich_machine_learning\r\n\r\n    # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.\r\n    # Example tag: ${IMMICH_VERSION:-release}-cuda\r\n    image: ghcr.io\/immich-app\/immich-machine-learning:${IMMICH_VERSION:-release}\r\n\r\n    # extends: # uncomment this section for hardware acceleration - see https:\/\/docs.immich.app\/features\/ml-hardware-acceleration\r\n    #   file: hwaccel.ml.yml\r\n    #   service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the <code data-enlighter-language=\"raw\" class=\"EnlighterJSRAW\">-wsl<\/code> version for WSL2 where applicable\r\n    volumes:\r\n      - model-cache:\/cache\r\n    env_file:\r\n      - .env\r\n    restart: always\r\n    healthcheck:\r\n      disable: false\r\n\r\n## \u2014 \u5feb\u53d6\u8cc7\u6599\u5eab\r\n  redis:\r\n    container_name: immich_redis\r\n    image: docker.io\/valkey\/valkey:9@sha256:8e8d64b405ce18f41b8e5ee20aa4687a8ed0022d1298f2ce31cdcf3a76e09411\r\n    healthcheck:\r\n      test: redis-cli ping || exit 1\r\n    restart: always\r\n\r\n## PostgresSQL \u8cc7\u6599\u5eab\r\n  database:\r\n    container_name: immich_postgres\r\n    image: ghcr.io\/immich-app\/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23\r\n    environment:\r\n      POSTGRES_PASSWORD: ${DB_PASSWORD}\r\n      POSTGRES_USER: ${DB_USERNAME}\r\n      POSTGRES_DB: ${DB_DATABASE_NAME}\r\n      POSTGRES_INITDB_ARGS: '--data-checksums'\r\n      # Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs\r\n      # DB_STORAGE_TYPE: 'HDD'\r\n    volumes:\r\n      # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file\r\n      - ${DB_DATA_LOCATION}:\/var\/lib\/postgresql\/data\r\n    shm_size: 128mb\r\n    restart: always\r\n    healthcheck:\r\n      disable: false\r\n\r\nvolumes:\r\n  model-cache:\r\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<li class=\"present01\">\u555f\u52d5 docker <\/li>\n<p>  docker compose up -d <\/p>\n<p>  \u82e5\u60f3\u8981\u505c\u6b62\u6b64\u670d\u52d9\uff1a<br \/>\n  docker compose down <\/p>\n<li class=\"present01\">\u5b8c\u6210\u521d\u59cb\u5316<\/li>\n<p>    \u958b\u555f\u700f\u89bd\u5668\uff0c\u8a2a\u554f http:\/\/<\u4f60\u7684\u4f3a\u670d\u5668IP>:2283<br \/>\n    \u9996\u6b21\u767b\u5165\uff0c\u7b2c\u4e00\u500b\u5efa\u7acb\u7684\u4fbf\u662f \u7ba1\u7406\u54e1\u5e33\u865f<br \/>\n    \u767b\u5165\u5f8c\u5373\u53ef\u958b\u59cb\u4f7f\u7528<\/p>\n<\/ol>\n<p>&nbsp;<\/p>\n<h3>\u7db2\u7ad9\u8f49\u5740\u8a2d\u7f6e<\/h3>\n<p>\u96d6\u7136\u7db2\u9801\u76f8\u7c3f\u670d\u52d9\u5df2\u8a2d\u7f6e\u5b8c\u6210\uff0c\u4f46\u7531\u65bc\u63d0\u4f9bImmich\u7db2\u8def\u76f8\u7c3f\u7cfb\u7d71\u7684 Web Server (Apache2) \u5c0d\u5916\u50c5\u63d0\u4f9b 443 \u57e0\u901a\u9053\uff0c\u6240\u4ee5\u6b64\u670d\u52d9\u5fc5\u9808\u8981\u900f\u904e\u8f49\u5740\uff0c\u624d\u80fd\u6b63\u5e38\u63d0\u4f9b\u670d\u52d9\u3002<\/p>\n<ol>\n<li class=\"present01\">\u5148\u555f\u7528\u5fc5\u9808\u6a21\u7d44<\/li>\n<p>sudo a2enmod proxy<br \/>\nsudo a2enmod proxy_http<\/p>\n<p># WebSocket \u652f\u63f4\uff08\u5373\u6642\u901a\u77e5\u9700\u8981\uff09<br \/>\nsudo a2enmod proxy_wstunnel     <\/p>\n<p># \u82e5\u4f7f\u7528 HTTPS<br \/>\nsudo a2enmod ssl<\/p>\n<p># \u6a19\u982d\u8655\u7406<br \/>\nsudo a2enmod headers <\/p>\n<p>sudo systemctl restart apache2<\/p>\n<li class=\"present01\">\u5efa\u7acb VirtualHost \u8a2d\u5b9a\u6a94<\/li>\n<p>\u5efa\u7acb\u8207\u7de8\u4fee \/etc\/apache2\/sites-available\/immich.conf<\/p>\n<pre><code>\r\n<VirtualHost *:80>\r\n    ServerName photos.yourdomain.com\r\n    \r\n    # \u5f37\u5236\u8f49 HTTPS\uff08\u5efa\u8b70\uff09\r\n    RewriteEngine On\r\n    RewriteCond %{HTTPS} off\r\n    RewriteRule ^(.*)$ https:\/\/%{HTTP_HOST}$1 [R=301,L]\r\n<\/VirtualHost>\r\n\r\n<VirtualHost *:443>\r\n    ServerName photos.yourdomain.com\r\n    \r\n    # SSL \u6191\u8b49\uff08Let's Encrypt \u6216\u81ea\u7c3d\uff09\r\n    SSLEngine on\r\n    SSLCertificateFile     \/etc\/letsencrypt\/live\/photos.yourdomain.com\/fullchain.pem\r\n    SSLCertificateKeyFile  \/etc\/letsencrypt\/live\/photos.yourdomain.com\/privkey.pem\r\n    \r\n    # \u5b89\u5168\u6a19\u982d\r\n    Header always set X-Frame-Options \"SAMEORIGIN\"\r\n    Header always set X-Content-Type-Options \"nosniff\"\r\n    Header always set Referrer-Policy \"strict-origin-when-cross-origin\"\r\n    \r\n    # \u53cd\u5411\u4ee3\u7406\u5230 Immich\r\n    ProxyPreserveHost On\r\n    ProxyPass         \/ http:\/\/localhost:2283\/\r\n    ProxyPassReverse  \/ http:\/\/localhost:2283\/\r\n    \r\n    # WebSocket \u652f\u63f4\uff08\u5373\u6642\u4e0a\u50b3\u9032\u5ea6\u3001\u901a\u77e5\u7b49\uff09\r\n    RewriteEngine On\r\n    RewriteCond %{HTTP:Upgrade} websocket [NC]\r\n    RewriteCond %{HTTP:Connection} upgrade [NC]\r\n    RewriteRule ^\/?(.*) \"ws:\/\/localhost:2283\/$1\" [P,L]\r\n    \r\n    # \u65e5\u8a8c\r\n    ErrorLog  ${APACHE_LOG_DIR}\/immich-error.log\r\n    CustomLog ${APACHE_LOG_DIR}\/immich-access.log combined\r\n<\/VirtualHost>\r\n\r\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<li class=\"present01\">\u555f\u7528\u8207\u6e2c\u8a66<\/li>\n<p># \u5176\u5be6\u53ea\u662f sudo ln -s \/etc\/apache2\/sites-available\/immich.conf  \/etc\/apache2\/sites-enabled\/immich.conf<br \/>\nsudo a2ensite immich.conf<\/p>\n<p># \u78ba\u8a8d\u8a9e\u6cd5\u6b63\u78ba<br \/>\nsudo apache2ctl configtest<br \/>\nsudo systemctl reload apache2<\/p>\n<\/ol>\n<p>&nbsp;<\/p>\n<h3>\u532f\u5165 Goole Drive \u548c Google \u76f8\u7c3f\u76f8\u7247<\/h3>\n<p>\u82e5\u60f3\u5c07\u5df2\u5b58\u653e\u5728 Google \u76f8\u7c3f \u6216 Google Drive \u7684\u76f8\u7247\u532f\u5165 Immich \u7db2\u8def\u76f8\u7c3f\u88e1\uff0c\u4e0d\u7ba1\u662f\u4f55\u8005\uff0c\u6574\u500b\u6b77\u7a0b\u4f86\u8aaa\uff0c\u6703\u5206\u6210\u300c\u532f\u51fa\u820a\u76f8\u7247\u300d\u8207\u300c\u532f\u5165\u65b0\u76f8\u7247\u300d\u5169\u500b\u52d5\u4f5c\u3002<\/p>\n<ol>\n<li class=\"present01\">\u532f\u51fa\u820a\u76f8\u7247<\/li>\n<p>\u82e5\u662f Google \u76f8\u7c3f\uff0c\u53ef\u4ee5\u5229\u7528Google takeout\u5de5\u5177\u4f86\u532f\u51fa\uff0c\u53ef\u53c3\u770b\u9019\u4e00\u7bc7\u7d00\u9304\uff1a<a href=\"https:\/\/yowlab.idv.tw\/wordpress\/?p=677\" target=\"_blank\">\u5229\u7528 Google takeout \u6253\u5305\u5099\u4efd\u8cc7\u6599<\/a><\/p>\n<p>\u82e5\u662f Google Drive \u7684\u76f8\u7247\uff0c\u5c31\u4ee5\u76f8\u7247\u8cc7\u6599\u593e\u70ba\u55ae\u4f4d\u9032\u884c\u4e0b\u8f09\uff0c\u9019\u4e9b\u8cc7\u6599\u593e\u5167\u76f8\u7247\u6703\u5148\u9032\u884c\u58d3\u7e2e\uff0c\u7136\u5f8c\u624d\u6703\u88ab\u4e0b\u8f09\u3002<\/p>\n<p>\u4ee5\u4e0a\u5169\u7a2e\u65b9\u5f0f\uff0c\u4e0b\u8f09\u56de\u4f86\u7684\u8cc7\u6599\u7686\u662f zip \u58d3\u7e2e\u6a94\uff0c\u4e0d\u5fc5\u89e3\u958b\u3002<\/p>\n<li class=\"present01\">\u4e0b\u8f09\u76f8\u7247\u6279\u6b21\u4e0a\u50b3\u5de5\u5177\uff1aimmich-go<\/li>\n<p># \u4e0b\u8f09\u6700\u65b0\u7248\uff08\u4ee5 Linux amd64 \u70ba\u4f8b\uff09<br \/>\nwget https:\/\/github.com\/simulot\/immich-go\/releases\/latest\/download\/immich-go_Linux_x86_64.tar.gz<\/p>\n<p>#\u89e3\u58d3\u7e2e<br \/>\ntar -xzf immich-go_Linux_x86_64.tar.gz<\/p>\n<p>#\u8ce6\u4e88\u6a94\u6848\u53ef\u57f7\u884c\u5c6c\u6027<br \/>\nchmod +x immich-go<\/p>\n<li class=\"present01\">\u53d6\u5f97 immich \u7684 api-key<\/li>\n<p>\u767b\u5165Immich \u7db2\u9801\u7248\u5f8c\uff0c\u9ede\u9078\u53f3\u4e0a\u89d2\u982d\u50cf &#8211;> Account Settings &#8211;>\u5de6\u5074\u9078 API Keys \u2192 New API Key<\/p>\n<p><span class=\"highlight01\">\u8907\u88fd\u7522\u751f\u7684\u91d1\u9470<\/span>\uff0c\u7136\u5f8c\u5b58\u8d77\u4f86\u3002<\/p>\n<li class=\"present01\">\u532f\u5165 Google \u76f8\u7c3f<\/li>\n<pre><code>\r\n.\/immich-go upload from-google-photos \\\r\n  --server=http:\/\/localhost:2283 \\\r\n  --api-key=\u4f60\u7684API\u91d1\u9470 \\\r\n  --manage-raw-jpeg=StackCoverRaw \\\r\n  --manage-burst=Stack \\\r\n  \/path\/to\/takeout-001.zip \\\r\n  \/path\/to\/takeout-002.zip \\\r\n  \/path\/to\/takeout-003.zip\r\n  \/path\/to\/takeout-*.zip\r\n\r\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>\u9019\u500b\u65b9\u6cd5\u6703\u5b8c\u6574\u4fdd\u7559\uff1a<br \/>\n    \u2705 Google Photos \u76f8\u7c3f\u540d\u7a31<br \/>\n    \u2705 \u6536\u85cf\uff08Favorites\uff09<br \/>\n    \u2705 \u62cd\u651d\u65e5\u671f\u8207\u6642\u9593<br \/>\n    \u2705 GPS \u5730\u7406\u4f4d\u7f6e<br \/>\n    \u2705 \u7167\u7247\u63cf\u8ff0<\/p>\n<li class=\"present01\">\u532f\u5165 Google Drive \u7684\u76f8\u7247<\/li>\n<pre><code>\r\n.\/immich-go upload from-folder \\\r\n  --server=http:\/\/localhost:2283 \\\r\n  --api-key=\u4f60\u7684API\u91d1\u9470 \\\r\n  --folder-as-album=FOLDER  ##\u6703\u628a\u6bcf\u500b\u5b50\u8cc7\u6599\u593e\u8b8a\u6210 Immich \u7684\u76f8\u7c3f \\\r\n  \/path\/to\/\u4e0b\u8f09\u7684\u7167\u7247\u8cc7\u6599\u593e-001.zip \\\r\n  \/path\/to\/\u4e0b\u8f09\u7684\u7167\u7247\u8cc7\u6599\u593e-002.zip \\\r\n  \/path\/to\/\u4e0b\u8f09\u7684\u7167\u7247\u8cc7\u6599\u593e-003.zip \\\r\n  \/path\/to\/\u4e0b\u8f09\u7684\u7167\u7247\u8cc7\u6599\u593e-004.zip \\\r\n\r\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>\u6a94\u6848\u4e0a\u50b3\u4e2d\uff1a<br \/>\n<a href=\"https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2026\/08\/Screenshot_20260825_133334.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2026\/08\/Screenshot_20260825_133334-1024x524.png\" alt=\"\" width=\"530\" height=\"271\" class=\"alignnone size-large wp-image-4078\" srcset=\"https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2026\/08\/Screenshot_20260825_133334-1024x524.png 1024w, https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2026\/08\/Screenshot_20260825_133334-350x179.png 350w, https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2026\/08\/Screenshot_20260825_133334-768x393.png 768w, https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2026\/08\/Screenshot_20260825_133334.png 1521w\" sizes=\"auto, (max-width: 530px) 100vw, 530px\" \/><\/a><\/p>\n<p>\u5b8c\u6210\u5716\uff1a<br \/>\n<a href=\"https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2026\/08\/Screenshot_20260825_183941.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2026\/08\/Screenshot_20260825_183941-1024x531.png\" alt=\"\" width=\"530\" height=\"275\" class=\"alignnone size-large wp-image-4076\" srcset=\"https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2026\/08\/Screenshot_20260825_183941-1024x531.png 1024w, https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2026\/08\/Screenshot_20260825_183941-350x181.png 350w, https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2026\/08\/Screenshot_20260825_183941-768x398.png 768w, https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2026\/08\/Screenshot_20260825_183941.png 1513w\" sizes=\"auto, (max-width: 530px) 100vw, 530px\" \/><\/a><\/p>\n<li class=\"present01\">\u5982\u679c\u7167\u7247\u5f88\u591a\uff08\u5e7e\u842c\u5f35\u4ee5\u4e0a\uff09\uff0c\u5efa\u8b70\u52a0\u4e0a\u9019\u4e9b\u53c3\u6578\u907f\u514d\u4f3a\u670d\u5668\u904e\u8f09\uff1a<\/li>\n<pre>code>\r\n.\/immich-go upload from-google-photos \\\r\n  --server=http:\/\/localhost:2283 \\\r\n  --api-key=\u4f60\u7684API\u91d1\u9470 \\\r\n  --concurrent-tasks=4 \\\r\n  --client-timeout=60m \\\r\n  --pause-immich-jobs=true \\\r\n  --on-errors=continue \\\r\n  --session-tag \\\r\n  \/path\/to\/takeout-*.zip\r\n\r\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>\u53c3\u6578\u8aaa\u660e\uff1a<\/p>\n<ul>\n<li>&#8211;concurrent-tasks=4\uff0c\u540c\u6642\u4e0a\u50b3 4 \u500b\u6a94\u6848\uff0c\u964d\u4f4e\u4f3a\u670d\u5668\u8ca0\u64d4<\/li>\n<li>&#8211;pause-immich-jobs=true\uff0c\u66ab\u505c Immich \u80cc\u666f\u5de5\u4f5c\uff08\u7e2e\u5716\u3001\u4eba\u81c9\u8fa8\u8b58\uff09\uff0c\u532f\u5165\u5b8c\u518d\u81ea\u52d5\u6062\u5fa9<\/li>\n<li>&#8211;on-errors=continue\uff0c\u9047\u5230\u932f\u8aa4\u7e7c\u7e8c\uff0c\u4e0d\u4e2d\u65b7\u6574\u6279\u532f\u5165<\/li>\n<li>&#8211;session-tag\uff0c\u70ba\u9019\u6b21\u532f\u5165\u52a0\u4e0a\u6a19\u7c64\uff0c\u65b9\u4fbf\u65e5\u5f8c\u7ba1\u7406<\/li>\n<\/ul>\n<\/ol>\n<h3>\u5099\u4efd\u8207\u5fa9\u539f<\/h3>\n<p><span class=\"highlight01\">\u8cc7\u6599\u5eab\u5099\u4efd\uff0c\u6709\u5169\u7a2e\u65b9\u6cd5\uff1a<\/li>\n<ol>\n<li>\u9032\u5165\u8cc7\u6599\u5eab\u5bb9\u5668\u57f7\u884c pg_dump<\/li>\n<p>docker exec -t immich_postgres pg_dumpall -c -U postgres > immich_db_$(date +%Y%m%d).sql<\/p>\n<li>\u76f4\u63a5\u57f7\u884c pg_dump<\/li>\n<p>docker exec immich_postgres pg_dumpall -c -U postgres > \/backup\/immich\/db\/immich_$(date +\\%Y\\%m\\%d).sql<\/p>\n<\/ol>\n<p><span class=\"highlight01\">\u8cc7\u6599\u5eab\u5fa9\u539f\uff0c\u5169\u7a2e\u4f5c\u6cd5<\/li>\n<ol>\n<li>\u76f4\u63a5\u5fa9\u539f<\/li>\n<p>cat \/backup\/immich\/db\/immich_20260830.sql | docker exec -i immich_postgres psql -U postgres<\/p>\n<li>\u532f\u5165\u5bb9\u5668\u5fa9\u539f<\/li>\n<p># \u628a\u5099\u4efd\u6a94\u8907\u88fd\u9032\u5bb9\u5668<br \/>\ndocker cp \/backup\/immich\/db\/immich_20260830.sql immich_postgres:\/tmp\/backup.sql<\/p>\n<p># \u9032\u5165\u5bb9\u5668\u57f7\u884c\u5fa9\u539f<br \/>\ndocker exec -i immich_postgres psql -U postgres -f \/tmp\/backup.sql\n<\/ol>\n<p><span class=\"highlight01\">postgresql \u8cc7\u6599\u5eab\u89c0\u5ff5\u5c0f\u6280\u5de7\uff1a<\/span><br \/>\n1. \u5099\u4efd = pg_dumpall \u532f\u51fa SQL<br \/>\n2. \u5fa9\u539f = psql \u8b80\u5165 SQL<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u56e0\u70ba\u9700\u6c42\uff0c\u9700\u8981\u4fdd\u5b58\u6d3b\u52d5\u76f8\u7247\u3002 Immich \u76f8\u7247\u5f71\u7247\u7ba1\u7406\u7cfb\u7d71\u662f\u500b\u5f88\u4e0d\u932f\u7684\u89e3\u6c7a\u65b9\u6848\u3002 <a class=\"more-link\" href=\"https:\/\/yowlab.idv.tw\/wordpress\/?p=4026\">Continue reading <span class=\"screen-reader-text\">  \u67b6\u8a2d Immich \u7db2\u8def\u76f8\u7c3f\u7cfb\u7d71<\/span><span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-4026","post","type-post","status-publish","format-standard","hentry","category-3"],"_links":{"self":[{"href":"https:\/\/yowlab.idv.tw\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/4026","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yowlab.idv.tw\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yowlab.idv.tw\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yowlab.idv.tw\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/yowlab.idv.tw\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4026"}],"version-history":[{"count":25,"href":"https:\/\/yowlab.idv.tw\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/4026\/revisions"}],"predecessor-version":[{"id":4089,"href":"https:\/\/yowlab.idv.tw\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/4026\/revisions\/4089"}],"wp:attachment":[{"href":"https:\/\/yowlab.idv.tw\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4026"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yowlab.idv.tw\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4026"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yowlab.idv.tw\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4026"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}