本文介绍如何拉出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