t3easy / typo3-bootcamp
用于在 Docker 容器中开发和运行 TYPO3 的环境
Requires
- helhum/typo3-console: ^6.0.0
- helhum/typo3-secure-web: ^0.2.9
- typo3/cms-about: ^10.4
- typo3/cms-backend: ^10.4
- typo3/cms-belog: ^10.4
- typo3/cms-beuser: ^10.4
- typo3/cms-core: ^10.4
- typo3/cms-dashboard: ^10.4
- typo3/cms-extbase: ^10.4
- typo3/cms-extensionmanager: ^10.4
- typo3/cms-felogin: ^10.4
- typo3/cms-filelist: ^10.4
- typo3/cms-fluid: ^10.4
- typo3/cms-fluid-styled-content: ^10.4
- typo3/cms-form: ^10.4
- typo3/cms-frontend: ^10.4
- typo3/cms-impexp: ^10.4
- typo3/cms-info: ^10.4
- typo3/cms-install: ^10.4
- typo3/cms-recordlist: ^10.4
- typo3/cms-rte-ckeditor: ^10.4
- typo3/cms-seo: ^10.4
- typo3/cms-setup: ^10.4
- typo3/cms-sys-note: ^10.4
- typo3/cms-t3editor: ^10.4
- typo3/cms-tstemplate: ^10.4
- typo3/cms-viewpage: ^10.4
Requires (Dev)
- typo3/cms-adminpanel: ^10.4
- typo3/cms-lowlevel: ^10.4
- typo3/cms-reports: ^10.4
README
需求
- Docker(4Mac) 17.09 或更高版本用于构建
- Docker Compose (包含在 Docker4Mac 中)
- composer
- 一个 Traefik 反向代理,例如 docker-frontend 或包含
.docker/env.direct.yml
并设置WEB_PORT
。
启动新项目
composer create-project t3easy/typo3-bootcamp awesome-project.tld
(或使用 git 克隆项目并检出所需的分支)- 切换到 awesome-project.tld / 在您喜欢的 IDE 中打开它
- 将
.env.dev
重命名为.env
并根据需要调整它,下面和文件中的注释提供了更多信息。例如VHOST=typo3.localhost
如果您使用.localhost
虚拟主机,您可以在没有主机条目的情况下使用 Chrome 访问它。
查看: https://tools.ietf.org/html/rfc2606#page-2 - 将您的虚拟主机添加为 127.0.0.1 / 您运行 docker 的机器的主机条目
- 使用
docker-compose up -d
启动环境 - 设置 TYPO3
- 使用 TYPO3 控制台
docker-compose exec -u www-data typo3 vendor/bin/typo3cms install:setup
- 或使用浏览器
docker-compose exec -u www-data typo3 touch /app/private/FIRST_INSTALL
打开 http://typo3.localhost/typo3/install.php 并配置 TYPO3
- 使用 TYPO3 控制台
- 转到
- http://typo3.localhost/ 用于 TYPO3 前端
- http://typo3.localhost/typo3/ 用于 TYPO3 后端
- http://adminer-typo3.localhost/ 用于 Adminer
- http://mailhog-typo3.localhost 用于 Mailhog
.env
在此文件中,您定义要设置的环境。有两个示例,.env.dev
用于启动开发环境,以及 .env.prod
作为构建和部署项目的模板。
要检查结果,运行 docker-compose config
。
要将部署到集群,将结果写入文件 docker-compose config > stack.yml
并使用它 docker stack deploy --compose-file stack.yml myproject
COMPOSE_PROJECT_NAME
唯一的工程名称。它不能包含点。例如 project-typo3version,如 company-typo3v11。有关更多详细信息,请参阅 https://docs.docker.net.cn/compose/reference/envvars/#compose_project_name
COMPOSE_FILE
添加所有必要的 compose 文件,使用 :
分隔,始终以根 docker-compose.yml
开头,以确保正确的项目名称和相对路径。最后配置的设置优先。更多内容请参阅 https://docs.docker.net.cn/compose/reference/envvars/#compose_file
VHOST
TYPO3 项目的 FQDN。它将被用于其他服务的前缀,例如,如果您将 VHOST 设置为 typo3.localhost
,则可以通过 adminer-typo3.localhost
访问 Adminer 和通过 mailhog-typo3.localhost
访问 Mailhog。
ADDITIONAL_VHOSTS
为 TYPO3 网络服务添加额外的名称。值必须以逗号(,
)开头。例如 ,2nd.domain.tld,3rd.domain.tld
FRONTEND_NETWORK
Traefik 可以用于连接到网络服务的 docker 网络的名称。
RESTART
为所有服务定义重启策略。在生产环境中应为always
,在开发环境中应为no
。
DB_IMAGE
db服务的镜像,详见
- https://hub.docker.com/_/mariadb/
- https://hub.docker.com/_/mysql/
- https://forge.typo3.org/issues/82023#note-8
示例 mariadb:10.2
MYSQL_ROOT_PASSWORD
设置root数据库用户的密码。您不应在生产环境的.env
文件中设置密码。请在CLI中设置,或在CI变量中设置。
MYSQL_ROOT_PASSWORD=MyV3rySecretP4sswd docker-compose up -d
或设置在CI变量中。
DB_BIND_TO
将db服务绑定到指定的IP和端口。格式为IP:端口
。使用127.0.0.1:
仅将动态端口发布到localhost。使用127.0.0.1:13306
发布端口13306
。使用13306
发布13306
到所有可用IP。注意!这允许任何地方访问!端口映射到容器内的3306,即MySQL/MariaDB端口。见通过tcp在开发期间访问数据库
REDIS和LDAP
使用这些PHP扩展构建TYPO3镜像。
WEB_PORT
Web容器公开的端口。仅当您使用.docker/env.direct.yml
时。
TRAEFIK_ENTRYPOINT_HTTP和TRAEFIK_ENTRYPOINT_HTTPS
Traefik入口点的名称
构建
要构建生产环境,请从根目录使用docker-compose -f .docker/build.yml
,带有准备好的.env
文件或在构建器的环境中设置REDIS和LDAP。如果您在GitLab CI上构建,可以使用.docker/env.gitlab.yml
标记您的镜像。见.gitlab-ci.example.yml
。
部署
见.gitlab-ci.example.yml
以获取使用GitLab CI部署到Docker宿主机的示例。考虑在部署作业中设置COMPOSE_PROJECT_NAME
,以便能够将项目多次部署到同一Docker宿主机,例如测试、预发布和线上。见https://docs.docker.net.cn/compose/reference/envvars/#compose_project_name
通过tcp在开发期间访问数据库
将一个动态端口映射到数据库服务端口3306。要获取此端口,运行
docker-compose ps db
您将得到类似以下内容
Name Command State Ports
-------------------------------------------------------------------------------------
project_db_1 docker-entrypoint.sh --cha ... Up 127.0.0.1:32770->3306/tcp
其中32770
是连接到本地docker主机的端口。
运行TYPO3控制台命令
要运行TYPO3 PHP容器内的命令,请使用docker-compose
:例如清除缓存
docker-compose exec -u www-data typo3 typo3cms cache:flush
导入/导出数据库
导出数据库
docker-compose exec -T db sh -c 'exec mysqldump --opt --single-transaction -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE"' > dump.sql
导入sql导出文件
docker-compose exec -T db sh -c 'exec mysql -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE"' < dump.sql # Setup new/development extensions docker-compose exec -u www-data typo3 typo3cms extension:setupactive --verbose
直接从远程导入
ssh user@server 'TYPO3_CONTEXT="Production" /path/to/typo3cms database:export' | docker-compose exec -T db sh -c 'exec mysql -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE"' # Setup new/development extensions docker-compose exec -u www-data typo3 typo3cms extension:setupactive --verbose
为什么您不能使用typo3-console将数据库从/到docker环境导入/导出
TYPO3 PHP镜像不包括typo3-console所需的mysql或mysqldump二进制文件。
与docker玩耍
启动演示堆栈