發表文章

目前顯示的是 1月, 2024的文章

django 快速工作環境建置

 很多時侯不是工具本身不好,而是要使用一個工具之前的環境建置 (安裝)就能磨死人了,這次就是又想看看有沒有現成的 django 可以用 工作環境:     ubuntu linux server LTS 22          cookiecutter               cookiecutter-django 安裝時執行 cookiDjango 有約10個問題要回答,主要注意 現在很習慣用 docker 所以 docker選y async 選 y drf 選 y 因為在本地搞,沒有用雲所以 whitenoise 要選 y 開發階段還是把 debug 選 y 吧 你可以依據你的實際需求來選 安裝好了之後在 requirements/base.txt 加入 django-qr-code ==4.0.1 # https://github.com/dprog-philippe-docourt/django-qr-code cookiBuild 然後要等好一下下下下下下 裝好之後記得建立管理者帳號,這個套件不是透過 .env 來設定 admin 帳密的 cookirun django python manage.py createsuperuser cookiup 本文都是以 local 本地端的開發環境來建置,相對要上線的就用 production 一些懶人用的 shell 不想重複打同樣的指令可以自行建置修改 安裝 nano ~/.bin/cookiDjango #!/bin/sh cookiecutter https://github.com/cookiecutter/cookiecutter-django 如果你要裝的是 django + vue.js nano ~/.bin/cookiDjangoV #!/bin/sh cookiecutter https://github.com/cookiecutter/cookiecutter-django 要用 source 的方式 nano ~/.bin/your_app #!/bin/sh cd container/your_app 裝好了以後因為有加客製的套件所以重建映像檔了 nano ~/.bin/cookiBuild #!/bin/sh . your_app docker-compose -f l

客製、套用 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; docker-compose rm -f;  套用新的 image:      devilbox 不去動 docker-compose.yml 用的是 docker-compose.orverwrite.yml # docker-comp

使用 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_PASSWORD =your_password HOST_PORT_BIND =53 BIND_DNS_RESOLVER =8.8.8.8,168.95.1.1 #DNS server you like BIND_DNSSEC

ssh server 也來調整成 publick key 登入

 使用 public key 登入 ssh server 並不是什麼新玩意,只是很久以來沒(懶)有(得)去(去)碰(管),最近有點空檔,把這些個設定檔搞一搞好了 工作環境:     Windows Client(以下稱 Client)     Ubuntu Server(以下稱 Server)  Server: /etc/ssh/sshd_config 的一些要更改的參數 #如果兩種都 password 和 public key 都開放的設定項,如果只開放其中一種,單藍就是把另一種方式的設定註解掉 # 使用 password 認證 # 這個應該原本就有 PasswordAuthentication yes # 這個還是限制一下吧 PermitEmptyPasswords no # 使用 public key 認證 # 要開放 public key 登入的設定 PubkeyAuthentication yes # 開放 public key 的設定檔 AuthorizedKeysFile      .ssh/authorized_keys .ssh/authorized_keys2 # public key 和 password 都需要才能登入 AuthenticationMethods "publickey,password" # 這時侯要把這個註解掉,不然就會先輸入一次密碼,過一次 public key,再輸入一次密碼 # PubkeyAuthentication yes    Client:  ssh-keygen -t rsa -b 4096  id_rsa.pub 開頭應該長得像這樣 ssh-rsa AAAA  找不到 ssh-copy-id 所以沒辦法 ssh-copy-id username@remote_host  要手動把金鑰加上  cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"  或是到 Server 上  echo public_key_string >> ~/.ssh/authorized_keys  重新登入伺服器

virtualbox也拿出來用一用之 80 port forwarding 不見了

  virtualbox 在 windows 上使用還是蠻直覺的,一個 Linux VM(以下簡稱 VM) 的網頁伺服器,設定完成 NAT 的埠號轉接(port forwarding)就啟用了,想必將 VM 轉到 Linux Server(以下簡稱 Server) 上這個 VM 也(那)是(知)瞬(馬)間(上)完(撞)成(牆)吧(呢)! 工作環境:     Ubuntu Web Server VM 建置於 Windows 平台預計移植到 Linux Server平台  因為 Server 本身就會運行 ssh server 所以 VM 上的 ssh port 勢必得改掉,這樣遠端連入 ssh 時可以用 port 來辨別到底要連到 VM 上還是 Server 上,過了一關  為了讓 VM 的網頁伺服器運行起來和一般連接網頁時一樣,使用者直覺的打上網址(不用另加特殊埠號)就能連結,所以埠號轉送選了預設的 Server 80 port 對 VM 80 port ,接著怎麼連也連不上, netstat 一直不會出現 80 port 而 SSH 的 port 明晃晃的擺在眼前  防火牆開開關關, tcp wrapper, iptables 查了又查,就是沒辦法讓 80 port 現形,直到有人在網頁上說了,1024以下的埠號是保留存取權的,難怪…… 設定都對,別說找不到路,連路口都沒看到,問題就來了,問題發現,問題解釋,都有了,怎麼解決?  chat 被追問了許久,終於說出要 setcap ,指令打了半天,拆解又合併,就是不行,只好選用 VBOX_HARD_CAP_NET_BIND_SERVICE ,本能反應地在指令模式中 export VBOX_HARD_CAP_NET_BIND_SERVICE=1 source 接著和 GPT 確認之後,說是直接 vboxmanage startvm VMName --type headless 就行,結果也撞壁 ……  結果試出是 vboxmanage startvm VMName --type headless --putenv VBOX_HARD_CAP_NET_BIND_SERVICE=1  如此,不用先 export 或是 source .bashrc ,   netstat -tulpan: 80 port 回來了,也登入 V

virtualbox 也拿出來用一用之 vdi 無法使用

 因為懶得折騰一大堆的程式碼,看來去挖之前的 VM 出來用應該是會比較快 ………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………… 嗎!? 工作環境:     windows          virtualbox 7          以前備份的 vdi 檔案  話說之前備份 vm 有點麻煩,還得下指令,只備 vdi 和 vbox 有時侯還是不行,本以為挖備份檔來重建工作環境會是比較快的,至少不用全部的程式重改一通,哪知道人算不如天算…,這大約是莫菲無誤  有些 VM 直接執行就可以,因為它沒離開主要的執行環境,而不能執行的那些備份檔案,要靠重建,或是更改檔案的 uuid  所謂的重建就是複製一個可用的 VM 然後把之前的 vdi 檔案匯入儲存媒體  這時侯可能會遇到之前的 vdi 檔案無法匯入的情形,出現的錯誤訊息很清楚,就是各種各樣的錯誤碼,仔細一看就是外星文,看不懂又解法又難搜,是一堆難啃的說明文件,這時侯就靠更改檔案的 uuid 了  處理好了之後,我回想了一下,可能不用複製 VM 來重建,最主要的要靠更改 uuid ...     收工! ---------------------------------- 一些可能會用到的指令 ----------------------------------  列出目前的 VM 有那些 VBoxManage list vms 複製 VM 到指定位址(不要包含 VM 名字的資料夾,不然 VM 的檔案會跑到指定資料夾下的 VM 名字的資料夾之下) VBoxManage clonevm sourcevm --mode all --name newvm --basefolder /path-to-vm/withoutVmName --register 重設硬碟的 UUID VBoxManage internalcommands sethduuid your-box-disk2.vdi 修改連接埠轉接(port forward)時直接改 vm_name.vbox 檔案內容 啟動 VM VBoxManage startvm vm_name (headless) 查看 VM 的訊息

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

 想把老程式裝到新的作業系統上,說是都用 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 裏的作業系統的版本,省(還)得(是)折騰,好在皇天不負苦(老)心(灰)人(啊),被搞了幾天之後,總算摸出一點路子,希望別花太多生命,腦細胞已死不少,不都說嗎,人腦死就是死了… 收工!

耍廢文之裝裝老程式

 最近在移植老程式到新的舊平台上撞上的南(難)牆(強),不管環境怎麼調校就是給你一片空白,這是最嚇人的,因為沒有訊息就沒辦法除錯。  好在喝了一些糖水,腦袋瓜子突然磞出,是不是之前有用了什麼特別的套件… 工作環境:     Ubuntu Server 22 TLS          docker: lamp stack               PHP5.5               pear packages...   想那時,pear install package 就搞定了,重裝時也是幾分鐘的事 果然開始想那時就是老了,程式老了,人也老了,pear 不給裝套件了 好在,當初設計 pear 的神人留了一條後路  所以把要裝的 package.tgz 全部下載下來: curl -o package.tgz http://pear.php.net/somewhere/package.tgz  再手動裝起來: pear install --offline package.tgz 好在選的這個 docker 容器有 pear 可以用,不然不知道還要搞多久 暫時過關     收工!

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 ())     {         header ( "Location: $url " );     }     else