编程

使用docker安装部署opencart电商独立站

2644 2022-11-13 10:09:20

什么是 OpenCart?

OpenCart 是世界著名的开源电子商务系统,系统开发语言为 PHP。早期由英国人 Daniel Kerr 个人开发,项目托管在 GitHub。OpenCart 总部设在香港,GitHub 项目仍由 Daniel 及其团队领导维护。开发者项目非常活跃,版本更新升级很快。据 Alexa 网站流量统计显示,OpenCart 已成为世界主流的电子商务建站系统。

获取镜像

推荐从 Docker Hub 拉取 Opencart 镜像。

$ docker pull bitnami/opencart:latest

要使用指定版本,拉取对应版本的 tag。可以在 Docker Hub 中的 Tag 标签页查看可用版本列表。

$ docker pull bitnami/opencart:[TAG]

你也可以克隆仓库自己创建镜像,进入包含 Dockerfile 的文件,执行 docker build 命令。记得替换下例命令中的 APP, VERSION 和 OPERATING-SYSTEM 路径占位符。

$ git clone https://github.com/bitnami/containers.git
$ cd bitnami/APP/VERSION/OPERATING-SYSTEM
$ docker build -t bitnami/APP:latest .

怎么使用这个镜像

Opencart 需要访问 MySQL 或 MariaDB 数据库用来保存信息。我们使用 Bitnami 的 MariaDB 镜像作为数据库。

使用 Docker Compose 运行应用

仓库的主目录包含 docker-compose.yml 文件。使用如下命令运行应用: 

$ curl -sSL https://raw.githubusercontent.com/bitnami/containers/main/bitnami/opencart/docker-compose.yml > docker-compose.yml
$ docker-compose up -d

使用 Docker 命令行

如果你想手动运行应用,而不是使用docker-composer, 你需要运行这些基础步骤:

Step 1: 新建网络

$ docker network create opencart-network

Step 2: 为 MariaDB 持久化创建数据集,并创建 MariaDB 容器

$ docker volume create --name mariadb_data
$ docker run -d --name mariadb \
  --env ALLOW_EMPTY_PASSWORD=yes \
  --env MARIADB_USER=bn_opencart \
  --env MARIADB_PASSWORD=bitnami \
  --env MARIADB_DATABASE=bitnami_opencart \
  --network opencart-network \
  --volume mariadb_data:/bitnami/mariadb \
  bitnami/mariadb:latest

Step 3:  新建 OpenCart 持久化数据卷并启动容器

$ docker volume create --name opencart_data
$ docker run -d --name opencart \
  -p 8080:8080 -p 8443:8443 \
  --env ALLOW_EMPTY_PASSWORD=yes \
  --env OPENCART_DATABASE_USER=bn_opencart \
  --env OPENCART_DATABASE_PASSWORD=bitnami \
  --env OPENCART_DATABASE_NAME=bitnami_opencart \
  --network opencart-network \
  --volume opencart_data:/bitnami/opencart \
  bitnami/opencart:latest

这样你就可以在 http://your-ip/ 访问 Opencart 前台了。要访问后台,登陆http://your-ip/administration。

注意: 如果你想从公共 IP 或主机访问应用,你需要对 Opencart 进行配置。你可以修改实例的配置,将环境变量 OPENCART_HOST 设置成你的公共 IP 或主机。

应用持久化

如果你删除了容器,所有数据都会消失,下次运行镜像的时候数据库会被重新安装。要避免数据丢失,你应该将挂载数据卷使其得即使容器删除了依然可以持久化。

要做持久化,你应该将目录挂载在 /bitnami/opencart 路径下。如果挂载的目录是空的,第一次运行时会将其初始化。另外,你也应该为 MariaDB 数据的持久化挂载一个数据卷。

以上的例子中定义了名为 mariadb_data 和  opencart_data 的 Docker 卷。

只要数据卷没变删除, Opencart 应用的状态就会被持久化。

要避免无意中删除数据卷,你可以将主机目录挂载为数据卷。

此外,你也可以使用数据集插件来管理数据卷中的数据。

使用 Docker Compose 将主机目录挂载为数据卷

仓库中的 docker-compose.yml 至少要做如下这些修改:

   mariadb:
     ...
     volumes:
-      - 'mariadb_data:/bitnami/mariadb'
+      - /path/to/mariadb-persistence:/bitnami/mariadb
   ...
   opencart:
     ...
     volumes:
-      - 'opencart_data:/bitnami/opencart'
+      - /path/to/opencart-persistence:/bitnami/opencart
   ...
-volumes:
-  mariadb_data:
-    driver: local
-  opencart_data:
-    driver: local

注意:  由于不是非根容器,UID 1001 对挂载的文件和目录必须拥有合适的权限。 

使用 Docker 命令行将主机目录挂载为数据卷

Step 1: 创建网络(如果不存在) 

$ docker network create opencart-network

Step 2. 使用主机卷创建 MariaDB 容器

$ docker run -d --name mariadb \
  --env ALLOW_EMPTY_PASSWORD=yes \
  --env MARIADB_USER=bn_opencart \
  --env MARIADB_PASSWORD=bitnami \
  --env MARIADB_DATABASE=bitnami_opencart \
  --network opencart-network \
  --volume /path/to/mariadb-persistence:/bitnami/mariadb \
  bitnami/mariadb:latest

Step 3. 使用主机卷创建 OpenCart 容器

$ docker run -d --name opencart \
  -p 8080:8080 -p 8443:8443 \
  --env ALLOW_EMPTY_PASSWORD=yes \
  --env OPENCART_DATABASE_USER=bn_opencart \
  --env OPENCART_DATABASE_PASSWORD=bitnami \
  --env OPENCART_DATABASE_NAME=bitnami_opencart \
  --network opencart-network \
  --volume /path/to/opencart-persistence:/bitnami/opencart \
  bitnami/opencart:latest

配置

环境变量

开启OpenCart镜像时,你可以在 docker-compose 文件或者运行 docker 命令行时传入一个或者多个环境变量修改实例配置。比如你要添加一个新变量:

  • 对于 docker-compose 而言,在仓库的 docker-compose.yml 文件的应用区域下,添加变量名和变量值:
opencart:
  ...
  environment:
    - OPENCART_PASSWORD=my_password
  ...
  • 如果是手动执行的话,则添加 --env 选项并带上每个变量名和变量值:
$ docker run -d --name opencart -p 80:8080 -p 443:8443 \
  --env OPENCART_PASSWORD=my_password \
  --network opencart-tier \
  --volume /path/to/opencart-persistence:/bitnami \
  bitnami/opencart:latest

可用环境变量

用户及站点配置

  • APACHE_HTTP_PORT_NUMBER: 由Apache绑定的HTTP接口。默认: 8080
  • APACHE_HTTPS_PORT_NUMBER: Apache绑定的HTTPS接口。默认: 8443
  • OPENCART_USERNAME: OpenCart 应用用户名。 默认值:user
  • OPENCART_PASSWORD: OpenCart 应用密码,默认值:bitnami
  • OPENCART_EMAIL: OpenCart 应用 email。默认值:user@example.com
  • OPENCART_HOST: OpenCart 主机名/地址。 
  • OPENCART_ENABLE_HTTPS: 默认是否启用 HTTPS。默认值:no.
  • OPENCART_EXTERNAL_HTTP_PORT_NUMBER: OpenCart 生成的用于 HTTP 访问的URL链接端口。默认值 80
  • OPENCART_EXTERNAL_HTTPS_PORT_NUMBER: 使用 HTTPS 访问时,OpenCart 用以生成URL链接端口。默认值 443
  • OPENCART_SKIP_BOOTSTRAP: 是否跳过应用初始化引导的执行。默认值:no

使用已有数据库

  • OPENCART_DATABASE_HOST: MariaDB 服务器主机名。默认值: mariadb
  • OPENCART_DATABASE_PORT_NUMBER: MariaDB 服务器端口。默认值: 3306
  • OPENCART_DATABASE_NAME: OpenCart 连接的数据库名。默认值: bitnami_opencart
  • OPENCART_DATABASE_USER: OpenCart 连接的数据库用户名。默认值:bn_opencart
  • OPENCART_DATABASE_PASSWORD: OpenCart 连接的数据库密码。没有默认值。
  • ALLOW_EMPTY_PASSWORD: 是否允许密码为空。默认值:no

使用 mysql-client 为 OpenCart 创建数据库

  • MYSQL_CLIENT_FLAVOR: SQL 数据库类型。有效值: mariadb 或 mysql. 默认值: mariadb.
  • MYSQL_CLIENT_DATABASE_HOST: MariaDB 服务器主机名。默认值: mariadb
  • MYSQL_CLIENT_DATABASE_PORT_NUMBER: MariaDB 服务器使用的端口. 默认值: 3306
  • MYSQL_CLIENT_DATABASE_ROOT_USER: 数据库管理员用户名。默认值: root
  • MYSQL_CLIENT_DATABASE_ROOT_PASSWORD: 数据库管理员的密码,无默认值。
  • MYSQL_CLIENT_CREATE_DATABASE_NAME: 由 mysql 客户端模块创建的新数据库名。无默认值。
  • MYSQL_CLIENT_CREATE_DATABASE_USER: 由 mysql 客户端模块创建的新数据库用户名。无默认值。
  • MYSQL_CLIENT_CREATE_DATABASE_PASSWORD: MYSQL_CLIENT_CREATE_DATABASE_USER 用户的数据库密码。无默认值。
  • MYSQL_CLIENT_CREATE_DATABASE_CHARACTER_SET: 新数据库使用的字符集。无默认值。
  • MYSQL_CLIENT_CREATE_DATABASE_COLLATE: 用于新数据库的数据库排序规则。无默认值。
  • MYSQL_CLIENT_CREATE_DATABASE_PRIVILEGES: 将MYSQL_CLIENT_CREATE_DATABASE_NAME中指定的数据库权限授权给由 MYSQL_CLIENT_CREATE_DATABASE_USER 指定的用户 。无默认值。
  • MYSQL_CLIENT_ENABLE_SSL_WRAPPER: 通过 mysql CLI 工具连接数据库是否强制使用 SSL。对于依赖CLI连接的应用非常有用。默认值 no
  • MYSQL_CLIENT_ENABLE_SSL: 是否强制数据库连接使用 SSL。默认 no
  • MYSQL_CLIENT_SSL_CA_FILE: 新数据库 SSL CA 文件的路径。无默认值
  • MYSQL_CLIENT_SSL_CERT_FILE: 新数据库 SSL CA 文件的路径。无默认值
  • MYSQL_CLIENT_SSL_KEY_FILE: 新数据库 SSL CA 文件的路径。无默认值
  • ALLOW_EMPTY_PASSWORD: 是否允许密码为空。默认为 no

SMTP 配置

要使用 SMTP 发送邮件,你需要设置以下环境变量:

  • OPENCART_SMTP_HOST: SMTP 主机。
  • OPENCART_SMTP_PORT: SMTP 端口。
  • OPENCART_SMTP_USER: SMTP 账号用户。
  • OPENCART_SMTP_PASSWORD: SMTP 账号密码。

PHP 配置

  • PHP_ENABLE_OPCACHE: 启用 PHP 脚本的 OPcache,无默认值
  • PHP_EXPOSE_PHP: 启用后,HTTP header 带 PHP 版本,无默认值
  • PHP_MAX_EXECUTION_TIME: PHP 脚本的最大执行时间。无默认值
  • PHP_MAX_INPUT_TIME: PHP 脚本的最大输入事件(max_input_time),无默认值
  • PHP_MAX_INPUT_VARS: PHP 脚本输入变量的最大个数,无默认值。
  • PHP_MEMORY_LIMIT: PHP 脚本内存限制,默认值 256M
  • PHP_POST_MAX_SIZE: PHP POST 请求最大尺寸。没有默认值
  • PHP_UPLOAD_MAX_FILESIZE: PHP 上传文件最大尺寸,没有默认值。

示例

此处是使用Gmail账号进行SMTP配置的例子:

  opencart:
    ...
    environment:
      - OPENCART_DATABASE_USER=bn_opencart
      - OPENCART_DATABASE_NAME=bitnami_opencart
      - ALLOW_EMPTY_PASSWORD=yes
      - OPENCART_SMTP_HOST=smtp.gmail.com
      - OPENCART_SMTP_PORT=587
      - OPENCART_SMTP_USER=your_email@gmail.com
      - OPENCART_SMTP_PASSWORD=your_password
  ...

对于手动执行:

$ docker run -d --name opencart -p 80:8080 -p 443:8443 \
  --env OPENCART_DATABASE_USER=bn_opencart \
  --env OPENCART_DATABASE_NAME=bitnami_opencart \
  --env OPENCART_SMTP_HOST=smtp.gmail.com \
  --env OPENCART_SMTP_PORT=587 \
  --env OPENCART_SMTP_USER=your_email@gmail.com \
  --env OPENCART_SMTP_PASSWORD=your_password \
  --network opencart-tier \
  --volume /path/to/opencart-persistence:/bitnami \
  bitnami/opencart:latest

日志

Bitnami OpenCart Docker 镜像将容器日志发送到标准输出。要查看日志:

$ docker logs opencart

或者使用docker-compose

$ docker-compose logs opencart

如果想用不同的方式消费日志,你可以使用--log-driver选项配置日志驱动。默认配置中,docker 使用 json-file  驱动。