使用 Docker 将现有 Prestashop 部署到服务器
Posted
技术标签:
【中文标题】使用 Docker 将现有 Prestashop 部署到服务器【英文标题】:Deploy existing Prestashop to server using Docker 【发布时间】:2019-04-12 11:07:17 【问题描述】:我在服务器上创建了 PrestaShop 商店。是否有任何可能的方法可以将 docker 用于我的商店并使用 docker 将其迁移到另一台服务器?我知道我需要 docker-compose 但老实说我不知道如何处理当前服务器上的文件。
【问题讨论】:
【参考方案1】:你可以使用这个docker-compose.yml
:
version: "3"
services:
prestashop:
image: prestashop/prestashop
networks:
mycustomnetwork:
ports:
- 82:80
links:
- mariadb:mariadb
depends_on:
- mariadb
volumes:
- ./src:/var/www/html
- ./src/modules:/var/www/html/modules
- ./src/themes:/var/www/html/themes
- ./src/override:/var/www/html/override
environment:
- PS_DEV_MODE=1
- DB_SERVER=mariadb
- DB_USER=root
- DB_PASSWD=mycustompassword
- DB_NAME=prestashop
- PS_INSTALL_AUTO=0
mariadb:
image: mariadb
networks:
mycustomnetwork:
volumes:
- presta_db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=mycustompassword
- MYSQL_DATABASE=prestashop
phpmyadmin:
image: phpmyadmin/phpmyadmin
networks:
mycustomnetwork:
links:
- mariadb:mariadb
ports:
- 1235:80
depends_on:
- mariadb
environment:
- PMA_HOST=mariadb
- PMA_USER=root
- PMA_PASSWORD=mycustompassword
volumes:
presta_db:
networks:
mycustomnetwork:
external: true
替换mycustomnetwork
和mycustompassword
然后运行docker-compose up
网址:localhost:82
PHP MyAdmin 网址:localhost:1235
【讨论】:
在配置你的数据库数据库时应该填写哪个服务器地址?【参考方案2】:您还应该在撰写文件中包含桥接网络,一些示例可能从这里https://runnable.com/docker/docker-compose-networking 开始工作。
通过这种方式,db 可以配置为仅由本地 docker 网络上的 prestashop 访问,而不会暴露在外部。 Presta db 也可以指向正在运行的映像的名称,以防您的 IP 发生更改或其他情况。您将保留运行的所有内容都是应用程序上的端口 80。
【讨论】:
【参考方案3】:好的,所以我深入研究了问题和解决问题的方法如下。我所做的是从 prestashop 中提取原始图像并将我的文件复制到那里。
下一步是使用mariadb
图像。我从以前的商店 phpmyadmin 导出了 backup.sql
文件
version: '2'
services:
prestashop:
image: prestashop
ports:
- 80:80
links:
- mariadb:mariadb
depends_on:
- mariadb
volumes:
- ./src:/var/www/html
- ./src/modules:/var/www/html/modules
- ./src/themes:/var/www/html/themes
- ./src/override:/var/www/html/override
environment:
- PS_DEV_MODE=1
- DB_SERVER=mariadb
- DB_USER=root
- DB_PASSWD=root
- DB_NAME=prestashop
- PS_INSTALL_AUTO=0
mariadb:
image: mariadb
volumes:
- backup.sql:/docker-entrypoint-initdb.d
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=prestashop
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- mariadb
ports:
- 81:80
environment:
- PMA_HOST=mariadb
- PMA_USER=root
- PMA_PASSWORD=root
最大的问题是docker-machine
中的 IP。请记住,如果您使用 docker 工具箱,您的 IP 为 192.168.99.100,但在 Docker for Windows 中,您的 IP 取决于 localhost(或仅键入 localhost)。
【讨论】:
【参考方案4】:您可以按照本教程在 Docker 环境中设置 Prestashop。
https://hub.docker.com/r/prestashop/prestashop/
您需要将当前文件添加到 Prestashop 容器中,并且很可能将数据库导入 MySQL 容器中。 Docker-compose 将用于一起启动这些容器。完成此操作后,您将能够在任何地方部署整个东西。
【讨论】:
我考虑为我现有的文件创建Dockerfile
,例如this tutorial,但它不起作用。您的想法似乎没问题,但我会在 Dockerfile 中完成所有操作,然后使用 docker-compose
将所有内容连接在一起以上是关于使用 Docker 将现有 Prestashop 部署到服务器的主要内容,如果未能解决你的问题,请参考以下文章
如何将现有docker容器上的Spring启动应用程序链接到数据库?
根据 prestashop 中的模块状态禁用覆盖的 tpl 文件