最简单的Yii环境搭建方法. [ 2.0 版本 ]
若要观看视频演示,请移步到微信公众号:
1、概述
Yii的源码中其实已经提供了一种快速搭建开发环境的方式,包括php/apache/mysql,不过需要事先安装好docker环境。优点如下:
一键安装,快速方便;
不需要分心安装php/apache/mysql这些软件,已有默认的配置可以跑应用;
便于升级,如果想升级php版本,只要改变一下Dockerfile的基础镜像就可以;
2、安装步骤
2.1 下载源码
从Github拉取
git clone -b 2.0.42 https://github.com/yiisoft/yii2-app-advanced.git advanced
github是国外的网站,有些同学因为网络原因,导致无法访问,或者拉取数据缓慢,因此我在gitee上同步了这个项目,建议使用下面的方式拉取代码,非常快。
从Gitee拉取
git clone -b 2.0.42 https://gitee.com/lvzmen_github/yii2-app-advanced.git advanced
2.2 源码分析
源代码中提供了三个容器编排文件,如下所示:
chenzhiwei:advanced$ tree -L 2
.
├── docker-compose.yml
├── backend
│ └── Dockerfile
└── frontend
└── Dockerfile
我们看一下docker-compose.yml:
version: '3.2'
services:
frontend:
build: frontend
ports:
- 20080:80
volumes:
# Re-use local composer cache via host-volume
- ~/.composer-docker/cache:/root/.composer/cache:delegated
# Mount source-code for development
- ./:/app
backend:
build: backend
ports:
- 21080:80
volumes:
# Re-use local composer cache via host-volume
- ~/.composer-docker/cache:/root/.composer/cache:delegated
# Mount source-code for development
- ./:/app
mysql:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=verysecret
- MYSQL_DATABASE=yii2advanced
- MYSQL_USER=yii2advanced
- MYSQL_PASSWORD=secret
从上述源码可以分析可知:
frontend.build => frontend
这表示使用frontend目录下的Dockerfile文件来生成需要使用的镜像,backend同理。这么做是为了避免管理中间镜像,让整个编排都处于源码可编辑的状态;
frontend.ports => 21080:80
这个表示容器内的服务端口号是21080,并和宿主机的80端口绑定,目的是当宿主机的80端口有http请求时,会自动转发到容器内的21080端口;
frontend.volumes => ./:/app
表示把当前的目录映射到宿主机的/app目录下,实现代码共享,便于开发人员开发。
mysql
mysql容器会读取这四个环境变量,并将配置应用于数据库。
==注意:由于mysql并没有volumes将数据库映射到宿主机,因此删除容器后,数据库也会被删除!==
接下来我们看一下frontend/Dockerfile:
FROM yiisoftware/yii2-php:7.4-apache
# Change document root for Apache
RUN sed -i -e 's|/app/web|/app/frontend/web|g' /etc/apache2/sites-available/000-default.conf
从上述文件我们可知:
- 使用的基础镜像是:yiisoftware/yii2-php:7.4-apache
- 使用的apache配置文件是:/etc/apache2/sites-available/000-default.conf
2.3 安装docker-compose工具
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
如果发现太慢下不了,则可以到我的网盘中下载:
链接: https://pan.baidu.com/s/1gMSInCDo60Li2TEdwipMHg 提取码: 2ij6
==注意:要配置可执行权限。==
2.4 一键部署
进入到advanced目录,执行如下命令:
chenzhiwei:advanced$ sudo docker-compose up -d
Creating network "advanced_default" with the default driver
Creating advanced_frontend_1 ... done
Creating advanced_mysql_1 ... done
Creating advanced_backend_1 ... done
-d 表示后台安装,不会把安装时的日志打印出来,因此报错也不知道,如果第一次安装的话,可以去掉。
如果docker ps后可以看到下面的内容,表示容器正常运行,环境部署成功:
chenzhiwei:advanced$ docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Image}}"
CONTAINER ID NAMES IMAGE
ad3cc7dcf763 advanced_backend_1 advanced_backend
aecb968efedd advanced_mysql_1 mysql:5.7
abdd6c885b2b advanced_frontend_1 advanced_frontend
2.5 初始化项目
容器部署已经完成,但是对于新的项目,尚未初始化,compose依赖也没有拉取,因此无法正常工作,下面就来初始化项目。
进入frontend容器:
chenzhiwei:advanced$ docker exec -it advanced_frontend_1 /bin/bash _ _ __ _ (_|_)/ _| | | _ _ _ _| |_ _ __ __ _ _ __ ___ _____ _____ _ __| | __ | | | | | | _| '__/ _` | '_ ` _ \ / _ \ \ /\ / / _ \| '__| |/ / | |_| | | | | | | | (_| | | | | | | __/\ V V / (_) | | | < \__, |_|_|_| |_| \__,_|_| |_| |_|\___| \_/\_/ \___/|_| |_|\_\ __/ | |___/ PHP version: 7.4.21 root@abdd6c885b2b:/app#
执行init初始化命令:
root@abdd6c885b2b:/app# init Yii Application Initialization Tool v1.0 Which environment do you want the application to be initialized in? [0] Development [1] Production Your choice [0-1, or "q" to quit] 0 Initialize the application under 'Development' environment? [yes|no] yes Start initialization ... generate yii_test.bat generate frontend/web/robots.txt generate frontend/web/index-test.php generate frontend/web/index.php generate frontend/config/params-local.php generate frontend/config/codeception-local.php generate frontend/config/main-local.php generate frontend/config/test-local.php generate backend/web/robots.txt generate backend/web/index-test.php generate backend/web/index.php generate backend/config/params-local.php generate backend/config/codeception-local.php generate backend/config/main-local.php generate backend/config/test-local.php generate yii_test generate console/config/params-local.php generate console/config/main-local.php generate console/config/test-local.php generate yii generate common/config/params-local.php generate common/config/codeception-local.php generate common/config/main-local.php generate common/config/test-local.php generate cookie validation key in backend/config/main-local.php generate cookie validation key in common/config/codeception-local.php generate cookie validation key in frontend/config/main-local.php chmod 0777 backend/runtime chmod 0777 backend/web/assets chmod 0777 console/runtime chmod 0777 frontend/runtime chmod 0777 frontend/web/assets chmod 0755 yii chmod 0755 yii_test ... initialization completed.
拉取依赖
容器中已经存在composer工具,因此只要执行如下命令就可以拉取依赖:
root@abdd6c885b2b:/app# composer update Loading composer repositories with package information ... ...
3 大功告成
要想访问容器内的服务,需要知道容器的ip,下面是获取容器ip的两个方法:
宿主机上执行如下命令
chenzhiwei:advanced$ docker inspect advanced_frontend_1 | grep IPAddress "SecondaryIPAddresses": null, "IPAddress": "", "IPAddress": "172.22.0.2",
容器内部可查看/etc/hosts文件
root@abdd6c885b2b:/app# cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.22.0.2 abdd6c885b2b,
通过ip直接访问即可,前台:
后台:
php神灯
最后登录:2022-03-09
在线时长:2小时9分
- 粉丝0
- 金钱0
- 威望0
- 积分20
共 0 条评论