發表文章

目前顯示的是有「docker」標籤的文章

為內網的 IMMICH 設定加密連線

 話說現在的網站都要有 https 沒有那個 s 好像犯天條似的,即使是在內網也要搞個 s 來玩玩,如果你已經當了勇者把伺服器放上公網,也歡迎你分享設定,肯定香啊~,做為一個膽小時間又少的使用者,還是來設一下 s 吧! 工作環境:     debian linux          docker               immich               nginx(做為反向代理用)                反向代理有很多選項,試了很多沒遇上好運,回頭用了最基本的 nginx,或許下次可以試試 caddy 吧 首先,開2個 docker 的網路並且設定 docker network create inner_network docker netowrk create reverse_proxy_network   在開始設定之前,記得把之前的 immich-app 停下來 docker compose down 設定一下 docker-compose.yml :進到你的 immich-app/docker-compose.yml 把每個 service 的 networks 改一下 如果 service 名稱是 immich 開頭的: networks:   - inner_network   - reverse_proxy_network 其他的 networks:   - inner_network networks 的總述 networks:   proxy:     driver: bridge   internal:     driver: bridge  引用 nginx:   nginx :     container_name : ng...

繼續 IMMICH 安裝來備份手機上的照片和影片

 之前有提到為了躲避 nextcloud all-in-one 的群坑,所以先擱(割)置(捨)難搞的 nextcloud aio 轉投 immich-app 的懷抱,畢竟原本的目的就沒有要包山包海,主要是要把照片和影片存出來而已 工作環境:     內網的 debian linux          docker(-compose)               immich 後來發現上次用的註解法不是最佳解,所以開大門走大路把整個 immich 抓回來裝: git clone https: //github.com/immich-app/immich.git install.sh 然後到 immich-app 裏把 docker-compose.yml 改一下,可以改一下這個 environment:   - TZ=${TZ} .env 可以改一下這個 UPLOAD_LOCATION=/你想放資料/的位置 TZ=Asia/Taipei 然後 docker compose up -d 連到主機網址 http://192.168.100.100:2283 就可以用了 上傳的檔案在 /你想放資料/的位置/library/admin/ 裏面 是的,你沒有看錯,是 http 不是 https  很在意的人再搞一下 反向代理吧,先醬子將就用著 收工!

合併多個 docker-compose.yml 檔案

 雖然 docker-compose.override.yml 可以將修改後的設定套用到新的 docker image 裏啟用,但是維護1個檔案還是比維護2個檔案好一些,最好合併檔案的時侯不要使用傷眼法,和自已動手剪貼,而是程式自已整理貼好… 工作環境:     Linux Mint          Docker compose docker-compose -f docker-compose.yml -f docker-compose.override.yml config > docker-compose.merged.yml  mkdir orig mv docker-compose.yml orig mv docker-compose.override.yml orig mv docker-compose.merged.yml docker-compose.yml 之後就用新的 docker-compose.yml 來啟用 docker 還有就是後面的檔案會蓋掉前面的檔案的設定,有些設定則是會多個並列,所以還是得進去調一下設定的內容     收工!

docker 容器之使用者 uid 和 gid

 docker 容器的 uid 和 gid 常會讓使用者在 host 端取用 volume 時綁手綁腳,雖然有人說這其中還有安全性的考量,但是使用 sudo 好像也沒有比較好,為了可以直接存取 volume 的檔案,居然花了好久好久,久到夫人說:怎麼最近又開始抱著電腦了?……………………………………其實是電腦沒有放人  工作環境:     Debian          mariadb 10.11 docker(compose) 狀況:裝好 mariadb 之後,volume 的權限是 999.999 ,很煩,得 sudo 才能在本機作業,雖然也沒什麼不行,但就不愛,然後…………搞死自已  2個解法,因為不是 product 環境,先試到這兒,期望有人講白話,把這題解了,免得折騰半天 法1:雖然不能自動化,但是直覺…  先裝起來  dcshell container_name (docker exec -it $1 /bin/bash -l)  usermod -u your_uid_in_host app_user;  groupmod -g your_gid_in_host app_group;  exit  chown -R user_user:user_group docker_volume  然後參照之前的 客製 docker image 的方式, 在 docker-compose.override.yml 設定引用新的 image  法2:真的用 Dockerfile 就可以自動化嗎!?先搞懂 Dockerfile 怎麼用吧  去 下載 所需的檔案,然後加一個超奇怪的 「USER "1000"」 到 Dockerfile 裏,再回到 docker-compose 裏引用 Dockerfile 並且指定 user ,這個解法能用匪夷所思來形容,反正能解,先頂著   總而言之  書到用時恨太多! 先醬!      收工! =================== sample 檔 =============...

Docker image 以及物件控管 主要是刪除不必要的物件

docker 真的是好用,一個 docker-compose.yml 就可以配置作業環境,但是… 如果有好多功能要啟用,雖然最後得到適用的設置,除非你是超級幸運星,每次都是一次成功配置這些環境,久了,還是會有些沒有用到的或是中間產物的物件,每次佔用一點點空間,慢慢吃掉你的硬碟空間…,這次就是要清掉這些暫(垃)存(圾)物件。 列出所有 Untag 的容器映像: docker images --filter "dangling=true" 列出所有 Untag 的容器映像,但只顯示 Image ID 而已: docker images --filter "dangling=true" -q 快速移除所有無用的容器映像 (Remove all dangling images): docker rmi $(docker images -f "dangling=true" -q) 移除所有沒用到的容器映像 (Remove all unused images): docker image prune -a 移除所有沒用到的 Docker 物件 (Docker System Prune): 注意!!!會連同以下, 「停用的容器」(stopped containers) 「無用的網路」(dangling networks) 「無用的容器映像」(dangling images) 「無用的建置快取」(dangling build cache) 全都刪除 docker system prune -a 在 N 次 docker-compose up -d 後,把還在用的物件啟用後,一次性地 docker system prune -a 就可以看到一連串療癒的雜湊值,殺了一堆檔案後,居然生出了 12G 的空間,開心!   收工!      

客製、套用 devilbox image

 找到了 devilbox 這個跨足許多版本的 LAMP stack ,它少了一些老程式沒有的 pear package ,雖然之前 裝裝老程式 已經解決了安裝問題,如果不小心 docker-compose down 就一(打)言(回)難(原)盡(形)了… 工作環境:     Ubuntu Server 22 LTS          docker               devilbox LAMP stack  要做的事情大致上就是,先把套件裝一裝,然後把裝好套件的這個 image commit,給 commit 之後的 image 命名,之後指名套用新的 image  Commit, Save, and Restore,套用、儲存、回存指令 # 由於 docker-compose down; docker-compose rm -f 之後所做的變動都會重置 # 以 devilbox 的 php-fpm-5.5 為基礎,進入容器中加裝 PEAR 套件, # 目標容器 devilbox_php_1 # install PEAR package and commit new docker image # 把更動過的容器做成新的 image docker commit -a "yourOrgName.org" -m "php-fpm-5.5-noteOfChange" devilbox_php_1   php-fpm-5.5-pear:5.5pAsTagName # 備份:把新的 image 存一個備份到 tar 檔案中 docker image save -o images.tar php-fpm-5.5-pear:5.5pAsTagName [image2 ...] # 回復:從備份的 tar 檔案中建立新的容器 docker image load -i images.tar  停止 docker:        docker-compose down; docke...

使用 devilbox 建置 LAMP 環境

 docker 功能很強,可以(被)玩的東西很多,雖然要用 docker 自已建置一個 LAMP 環境也不算太難,單藍如果有人建好 LAMP 可以拿來用不就不難了(嗎?)… 工作環境:     Ubuntu Server 22          docker               devilbox  選用這個套件主要是它把很多伺服器 參數 的控制項都寫好了,整體上來說非常方便設定和使用,使用時透過 .env 來設定就行,(被)玩了好一會兒,覺得這個套件主要還是針對開發人員在本機上運行的,如果是放在伺服器遠端連過去的話,dashboard 會和 vhost 打架… 如果你的不打架,可以留言教一下,感激不盡   列出可能會動到的設定 DEBUG_ENTRYPOINT =4 TLD_SUFFIX =yourdomain.name NEW_UID =1000 NEW_GID =1000 TIMEZONE =Asia/Taipei DEVILBOX_UI_SSL_CN =localhost,*.localhost,devilbox,*.dvl.to DEVILBOX_UI_PROTECT =1 DEVILBOX_UI_PASSWORD =your_password DEVILBOX_UI_ENABLE =0 DEVILBOX_HTTPD_MGMT_USER =userName DEVILBOX_HTTPD_MGMT_PASS =your_password HTTPD_VHOST_SSL_TYPE =redir   #自動將 http 導轉到 https PHP_SERVER =uncomment_version_you_like HTTPD_SERVER =uncomment_version_you_like MYSQL_SERVER =uncomment_version_you_like HTTPD_DOCROOT_DIR =dirNameYouLike MYSQL_ROOT_PASSWORD =your_password PGSQL_ROOT...

耍廢文之裝裝老程式到新系統

 想把老程式裝到新的作業系統上,說是都用 Linux 那就 docker 給它開下去,然後就…   發現了骨感的現實 工作環境:     Ubuntu Server 22 TLS for host     Windows host for Ubuntu 14 PHP 5 VM  先把之前的 vm 從老硬碟裏挖出來  確認一下作業環境、使用的應用程式和套件的版本  開始試那家的 docker 可以少花點力氣,一開始選的 lamp 看起來蠻威的,沒想到開下去沒過多久就卡關了,調了很久,因為就算登進去容器裏也因為拔得作業系統很乾淨了,難搞,常用指令找不到,常用的應用程式沒裝,也沒辦法加裝,就醬花了好幾天,換個好幾個 docker ,終於找到了個不錯的傢伙 compose: apache/nginx 前可以,還可以選版本,PHP 可以從 5 選到 8 版,MySQL/mariadb 都支援選版本,如果想要 pgsql 也行,還支持 redis,又能用 .env 來設定參數,這麼威的工具,而我只需要 LAMP … XD...... 為了讓老物運行起來,應用程式版本盡量貼近 VM 裏的作業系統的版本,省(還)得(是)折騰,好在皇天不負苦(老)心(灰)人(啊),被搞了幾天之後,總算摸出一點路子,希望別花太多生命,腦細胞已死不少,不都說嗎,人腦死就是死了… 收工!

PHP 重新導向失效修復

 最近,把以前的程式拿出來,準備移植到新的舊平台上,怎麼說呢?程式很舊,用的環境很舊,偏偏作業系統很新,而程式很老,只能用老的套件,這有什麼問題嗎?問題就在新的作業系統本身不提供老的套件,也就是說,老程式就算會跳舞也沒舞臺了 另外還發現人也老了…還有就是修舊如舊也是得花很多工夫的… 能修好嗎?問題是 工作環境:   Ubuntu Server 22 LTS     docker: lamp stack          PHP 5.5  光是修這個重新導向可能就要花好多功了,因為之前寫的時侯用了很多跳轉的做法  找到了個不用自已折騰那麼多的做法,把要跳轉的部份從原本的 header(Location: ...) 換成 redirect_rel($relative_url) 就行了 function server_url () {       $proto = "http" .         (( isset ( $_SERVER [ 'HTTPS' ]) && $_SERVER [ 'HTTPS' ] == "on" ) ? "s" : "" ) . "://" ;     $server = isset ( $_SERVER [ 'HTTP_HOST' ]) ?         $_SERVER [ 'HTTP_HOST' ] : $_SERVER [ 'SERVER_NAME' ];     return $proto . $server ; }     function redirect_rel ( $relative_url ) {     $url = server_url () . dirname ( $_SERVER [ 'PHP_SELF' ]) . "/" . $relative_url ;     if (! headers_sent ())   ...

在移除 python2 之後 docker-compose 除錯

 其實要是不手賤可以不用這麼麻煩,因為大部份的時間用的是 python3 但是,裝的時侯沒注意,裝了 python2 和 python3 而預設的 pip 用的是 python2 ,在移除了 python2 之後,原本作動得好好的 docker container 不動了。  症狀: Traceback (most recent call last): File "urllib3/connectionpool.py", line 677, in urlopen File "urllib3/connectionpool.py", line 392, in _make_request File "http/client.py", line 1252, in request File "http/client.py", line 1298, in _send_request File "http/client.py", line 1247, in endheaders File "http/client.py", line 1026, in _send_output File "http/client.py", line 966, in send File "docker/transport/unixconn.py", line 43, in connect FileNotFoundError: [Errno 2] No such file or directory During handling of the above exception, another exception occurred: Traceback (most recent call last): File "requests/adapters.py", line 449, in send File "urllib3/connectionpool.py", line 727, in urlopen File "urllib3/util/retry.py", ...

開機時確保 docker 網路建立 docker 網路不要冠上 service 的名稱

需求:  ubuntu 18 之後預設已經沒有 /etc/rc.local 這個檔案,所以,要自已加1個,然後就能做開機之後要做的事  docker 的網路已經事先建(create)好了,如果直接在 docker-compose.yml 的設定檔裏面直接引用的話,不但會和建好的網路相衝,必須移掉相衝的網路重新啟用容器,而啟用設定檔內的網路時, service 的名稱就會冠在 network NAME 前面,不是很直覺  如果 docker 網路沒有建好,想要開機時確保 網路建立 起來 工作環境:   ubuntu server 18 lts     docker     /etc/rc.local 動手: /etc/rc.local 這個檔預設是沒有的,開起來就行,記得加上執行的權限,等一下重開機才會執行 printf '%s\n' '#!/bin/bash' 'exit 0' | sudo tee -a /etc/rc.local sudo chmod +x /etc/rc.local   vim /etc/rc.local 在 exit 0 之前加上你要做的事,確保建立 docker 網路 docker network create your.network.name --driver=bridge --subnet=192.168.0.0/24 || true   編輯容器的設定檔 /somewhere/docker-compose.yml services :   app :     image : someone/app:latest     restart : always     volumes :       - /path/you/want:/data     ports :       - "1.2.3.4:1:1"       - "2:2/udp"     networks : # 把既有的網路指定給 service ...

用 docker 架名稱伺服器並且用 docker-compose 檔來啟用

 之前說了怎麼 用 docker 把名稱伺服器架起來 ,這次要用 docker-compose 來啟用這個伺服器。醬子,之後不管到哪裏要架,拿著這個檔案就行。沒想到從命令列到寫設定檔也是要折騰一下地~  工作環境:     Ubuntu Server 18 LTS         docker-compose         bind9 通常是存成 docker-compose.yml 這樣子直接在同一個資料夾下指令 docker-compose up 就行 version: '3' services:   bind:     image: sameersbn/bind:latest     # 重開機之後會自已啟動     restart: always     dns: 127.0.0.1     networks:       br.rickyworks.tk:         # 別用 192.168.0.1 以免相衝         # 不能只用 ip         ipv4_address: 192.168.0.2         #environment:         #ROOT_PASSWORD: ${ROOT_PASSWORD}         #ROOT_PASSWORD="ROOT_PASSWORD"   #用 env 檔就不用直接把密碼寫在這個設定檔裏     env_file:       - ./.env     ports:       - 10000:1000...

只不過是想用 docker 架個 dns 也要這麼虐嗎

 想著要把伺服器搬到 docker 上去架設,比起那個 apt install PACKAGEsssss 折騰了許多,先拿個 bind DNS server 來試一下,不試不知道,一試不得了,果真折騰!  工作環境:     Ubuntu Server 18 LTS         docker             bind9         docker-compose(另文好了)  一開始先把伺服器清乾淨,然後把 docker 裝起來,把防火牆上的小洞挖好,然後開始動手。  先把 docker 自已的網路設一下, docker network create br.name.u.like --driver=bridge --subnet=192.168.0.0/24  抓一下 docker 的 bind DNS server docker pull sameersbn/bind:latest  啟動 bind DNS server docker run -d --name=bind \   --ip=192.168.0.9 \   --network=br.name.u.like \   --publish=53:53/udp --publish=10000:10000/tcp \   --volume=/home/someone/.bind/primary:/data \   --env= 'ROOT_PASSWORD=WhateverPasswordUWant' \   sameersbn/bind:latest    醬子就行了,然後連到電腦的 ip:10000 把用剛才上面設的 root 密碼 WhateverPasswordUWant 進去 Webmin 設定你要的 DNS 。   =======================...

docker 初探

 做為容器管理,docker, k8s ....很多工具,已經不是新聞,把伺服器搬進容器已經無法再拖…  工作環境:     Ubuntu 18 LTS         docker  裝好了 docker 就來裝個 name server 吧, docker pull ******** 結果:permission denied *********   太急了,忘了用 sudo 或是把 user 加到 docker 群了  sudo docker pull ***********  或是   sudo usermod -aG docker USERNAME 收工!