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

需要登入才可留言!

类似文章


openspeedtest,docker,phpenv

用phpenv跑openspeedtest

虽然我们可能会用speedtest之类网站进行上下传的速度的测试,那如果我们想测自己的Server的速度呢?像是用户在别的国家,连到我们的主机速度快慢 ,这时self-hosted的测试工具就很方便啦。最新版本的phpenv在services的yml档中,添加了openspeedtest.yml罗。

docker,phpenv

在Linux上ping不到host.docker.internal

可用docker version检查,确认版本在Docker v20.10+即可添加extra_hosts如下:

docker,phpenv

用光了Docker IPv4 address pool问题解法

可能在旧版的docker环境,使用Docker compose启动容器时,会碰过下方的错误: Error response from daemon: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network这其实这是default-address-pools用光的症状,有些环境,docker-compose默认会使用Class B的私有网络。172段的私有IP是有范围的,从172.16.0.0到172.31.255.255。也就是说,当我们起动一个docker-compose的Project,就会吃掉一个Class B的私有段,非常豪迈,