使用docker安装部署opencart电商独立站
什么是 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配置的例子:
- 修改 docker-compose.yml 文件:
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 驱动。