by Devin Yang

建立於: 1年前 ( 更新: 1年前 )

本文介紹如何拉出phpenv的資料庫服務,到獨立環境。
PHPENV可以透過環境變數,在SERVICE中定義資料庫的服務,
如果有需要在開發環境中,我們可以很輕易的透過./start及./restart等指令,進行服務全部重啟,nginx、fpm及db 。
但如果在線上模式,我並不希望重啟網站,就連整個DB也重啟,例如更新php版本時,並不需要重啟DB。
 

由於phpenv僅是一個簡易的bash容器控制環境,所以基本上可以把phpenv的資料庫建立在另一個獨立的環境。
以下便是我的做法囉,
我使用的是Synalogy Nas架站的,所以我把他放到了/volume1/docker目錄中。
在Linux的環境,如果您無法順立啟動資料庫容器,別警張,依說明去建目錄,並且調整權限owner為999即可。
一、我將phpenv更名為database。

git clone https://github.com/DevinY/phpenv.git database

二、直接加入資料庫的環境設定檔到envs目錄,內容如下:

DEFAULT=mariadb_ssh
SERVICES="ssh_db"
FOLDER=/volume1/docker/ccc/storage/app/backup
WORKSPACE=db
PROJECT=db
SSH_PORT=2260
DB_PORT=3360
USER_ID=1026
GROUP_ID=100

三、在上方的設定中,我指定了DEFAULT要使 用yml檔,這個檔案在services目錄中,所以我透如下指令將他拷貝出來到database的目錄。

cp services/mariadb_ssh.yml .

四、我們可以cat maraidb_ssh.yml查看,請依自己的需求調整,這個檔案root免密碼可以登入的
請注意,一定要有只允許ROOT只可從本機進入,或是啟動後設定好root的帳號密碼。

version: '3.6'
services:
 db:
  image: mariadb:10.5.5
  #ports:
  #  - ${DB_PORT-1250}:3306
  volumes:
    #- ./etc/my.cnf:/etc/mysql/conf.d/my.cnf
    - ./data/${PROJECT-default}:/var/lib/mysql
  environment:
    - MYSQL_ALLOW_EMPTY_PASSWORD= "yes"
    - MYSQL_ROOT_HOST=127.0.0.1
    - TZ=Asia/Taipei
  restart: unless-stopped
  network_mode: service:ssh

在這裡可以看到資料庫的目錄即是我們在上方第二步中設定的PROJECT名稱,
另外,這裡使用了network_mode: 為service,他代表了我要將DB的服務掛在SSH的容器上,這樣我較好透過SSH的連線進入容器中管理資料庫。
所以在第二步的設定中,您應該有發現了另一個設定,SERVICES="ssh_db"
這個便是告知,當我們使用./start指令時 ,同時也會去啟動services/ssh_db.yml檔。
 

我們可以看看ssh_db.yml的內容如下:

version: '3.6'
services:
 ssh:
  build:
    context: ./dockerfiles
    dockerfile: Dockerfile-ssh-${CPU-x86_64}
    args:
      USER_ID: ${USER_ID-1000}
      GROUP_ID: ${GROUP_ID-1000}
  image: ${PROJECT}_ssh
  ports:
    - ${SSH_PORT-2222}:22
    - ${DB_PORT-127.0.0.1:3306}:3306
  volumes:
    - ./etc/php:/usr/local/etc/php/conf.d
    - ./etc/code-server:/home/dlaravel/.vscode-server
    - ./authorized_keys:/home/dlaravel/.ssh/authorized_keys
    - ${FOLDER-./project}:/var/www/html
  networks:
    - dlaravel_net
networks:
    dlaravel_net:

這個檔案中,會用到SSH_PORT及DB_PORT,在這個例子中,我開放了2260及3360給外部存取。
在這裡的FOLDER是個有趣的設定,我直接掛載了這個網站的Projecte到容器的/var/www/html目錄中。
這樣如果需要時,我可以把.sql檔案,丟到Project的storage資料夾,然後用source進行insert資料了。
五、在database的目錄中,更新自己的openssh公鑰到authorized_keys檔案,然後就能啟動容器囉。
除了啟動時可以查看外,也可能透過./console ps查看,如下畫面所示:

六、可以看見,我使用的SSH是port 2260,因此在我的~/.ssh/config中加入如下的組態

Host db
  HostName 192.168.99.130
  User dlaravel
  Port 2260
  IdentitiesOnly yes
  IdentityFile=~/.ssh/id_ed25519 

在上方的設定中Host的名稱是自訂的,我簡單的設定叫db,我們可以用命令列進行簡易的連線測試:

六、我個入喜歡Sequel Pro,所以我的設定大概就這樣

順利透過ssh加密連線,連上DB囉


補充,在最新版本的PHPENV中,2023-01-21加入了WORKSPACE的設定。
舊版本預設打./console時是固定進入php的服務,但現在可以透過worksapce定義我們要進入的預設服務囉。
在這裡我定義WORKSPACE預設進入db的容器服務,我們也可以調整預設進入ssh的容器服務。

 

Tags: phpenv

Devin Yang

文章內容無法一一說明,如果您有什麼不了解處,歡迎提問哦:)

No Comment

Post your comment

需要登入才可留言!

類似的文章


fastapi,phpenv,docker

我如何用phpenv建立fastapi執行環境

雖然phpenv主要用於運行PHP Laravel的環境,但不代表他不能跑其他語言或其他容器。本文介紹,我如何讓phpenv跑python的fastapi環境,當然這只是一個概念,目前為止,我已經讓PHP api跑HAProxy了,並且自動申請及更新免費憑證,現在就讓他來跑Python的fastapi吧。phpenv沒有什麼限制,限制的是您的想像力😆

docker,phpenv

在Linux上ping不到host.docker.internal

可用docker version檢查,確認版本在Docker v20.10+即可加入extra_hosts如下:

openspeedtest,docker,phpenv

用phpenv跑openspeedtest

雖然我們可能會用speedtest之類網站進行上下傳的速度的測試,那如果我們想測自己的Server的速度呢?像是用戶在別的國家,連到我們的主機速度快慢 ,這時self-hosted的測試工具就很方便啦。最新版本的phpenv在services的yml檔中,加入了openspeedtest.yml囉。