使用 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

替换mycustomnetworkmycustompassword

然后运行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容器添加到现有docker网络

如何将现有docker容器上的Spring启动应用程序链接到数据库?

根据 prestashop 中的模块状态禁用覆盖的 tpl 文件

将产品添加到 Prestashop 1.6 中特定商店的购物车(以编程方式)

prestashop用户登录集成

Prestashop 产品自定义 - 保存到购物车