本文介紹如何拉出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的容器服務。
No Comment
Post your comment