Docker 安装Bagisto详细过程

创建Bagisto Docker环境

系统要求

  • Bagisto基于Laravel框架

  • PHP 8.1+(Laravel 10+要求)

  • MySQL 8.0+或MariaDB

  • Nginx作为Web服务器

实现步骤

  1. 创建`docker-compose.yml`文件,配置以下服务:
  • Nginx:Web服务器,端口80

  • PHP 8.4-fpm:PHP解释器(本次安装使用的是8.4-fpm)

  • MySQL 8.0:数据库,端口3306

  • phpMyAdmin:数据库管理工具,端口8080

  1. 配置Nginx虚拟主机,指向Bagisto项目的`public`目录

  2. 配置PHP扩展,确保Bagisto所需的扩展已安装

  3. 配置MySQL环境变量,设置根密码和数据库名

  4. 提供启动和停止Docker环境的命令说明

文件结构

```

bagisto-docker/

├── docker-compose.yml

├── nginx/

│ └── default.conf

├── php/

│ └── Dockerfile

│ └── php.ini

└── src/ # Bagisto项目目录(将在启动后克隆)

```

预期结果

开始部署

说明一下,现在需要在Docker中安装需要的环境,我使用的是Nginx+mysql+php+phpmyadmin

版本分别为:

nginx:alpine # 使用轻量级的Alpine Linux版本的Nginx镜像。nginx/1.29.4

php:8.4-fpm # 直接使用官方PHP 8.4 FPM镜像,本来想直接使用Batisto建议的8.1版本,但是始终安装不成功,在Docker仓库中找到了8.4-fpm版本,就先安装这个版本。

mysql:8.0 # 使用MySQL 8.0镜像,符合Bagisto要求

phpmyadmin/phpmyadmin # 使用官方phpMyAdmin镜像

首先

创建docker-compose.yml文件,包含Nginx、PHP 8.4-fpm、MySQL 8.0和phpMyAdmin服务。

该文件定义了环境版本、端口映射、目录映射、各种配置文件的目录等。

docker-compose.yml 文件内容:

复制代码
# Docker Compose配置文件,用于创建Bagisto电商平台运行环境

services:
  # Nginx Web服务器服务
  nginx:
    image: nginx:alpine  # 使用轻量级的Alpine Linux版本的Nginx镜像
    container_name: bagisto-nginx  # 容器名称,方便管理
    restart: unless-stopped  # 除非手动停止,否则容器崩溃时自动重启
    ports:
      - "80:80"  # 将主机的80端口映射到容器的80端口,用于访问Bagisto网站
    volumes:
      - ./src:/var/www/html  # 将主机的src目录挂载到容器的/var/www/html,存放Bagisto项目代码
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf  # 挂载Nginx配置文件
    depends_on:
      - php  # 依赖php服务,确保php服务先启动
    networks:
      - bagisto-network  # 加入自定义网络,方便容器间通信

  # PHP服务,使用PHP-FPM模式
  php:
    build: ./php  #php:8.4-fpm  # 直接使用官方PHP 8.4 FPM镜像
    container_name: bagisto-php  # 容器名称
    restart: unless-stopped  # 除非手动停止,否则自动重启
    volumes:
      - ./src:/var/www/html  # 挂载Bagisto项目代码
      - ./php/php.ini:/usr/local/etc/php/conf.d/php.ini  # 挂载PHP配置文件
    environment:
      - DB_HOST=mysql  # 数据库主机名,对应下面的mysql服务名
      - DB_PORT=3306  # 数据库端口
      - DB_DATABASE=bagisto  # 数据库名称
      - DB_USERNAME=bagisto  # 数据库用户名
      - DB_PASSWORD=bagisto123  # 数据库密码
    depends_on:
      - mysql  # 依赖mysql服务
    networks:
      - bagisto-network  # 加入自定义网络

  # MySQL数据库服务
  mysql:
    image: mysql:8.0  # 使用MySQL 8.0镜像,符合Bagisto要求
    container_name: bagisto-mysql  # 容器名称
    restart: unless-stopped  # 除非手动停止,否则自动重启
    ports:
      - "3306:3306"  # 将主机的3306端口映射到容器的3306端口,方便外部连接
    volumes: 
     - mysql-data:/var/lib/mysql  # 挂载数据卷,持久化存储MySQL数据
    environment:
      - MYSQL_ROOT_PASSWORD=root123  # MySQL根用户密码
      - MYSQL_DATABASE=bagisto  # 自动创建的数据库名称
      - MYSQL_USER=bagisto  # 自动创建的数据库用户
      - MYSQL_PASSWORD=bagisto123  # 自动创建的数据库用户密码
    networks:
      - bagisto-network  # 加入自定义网络

  # phpMyAdmin数据库管理工具
  phpmyadmin:
    image: phpmyadmin/phpmyadmin  # 使用官方phpMyAdmin镜像
    container_name: bagisto-phpmyadmin  # 容器名称
    restart: unless-stopped  # 除非手动停止,否则自动重启
    ports:
      - "8080:80"  # 将主机的8080端口映射到容器的80端口,用于访问phpMyAdmin
    environment:
      - PMA_HOST=mysql  # 数据库主机名,对应mysql服务名
      - PMA_PORT=3306  # 数据库端口
      - MYSQL_ROOT_PASSWORD=root123  # MySQL根用户密码,用于phpMyAdmin登录
    depends_on:
      - mysql  # 依赖mysql服务
    networks:
      - bagisto-network  # 加入自定义网络

# 数据卷定义,用于持久化存储
volumes:
  mysql-data:  # MySQL数据卷,确保数据不会丢失

# 自定义网络,用于容器间通信
networks:
  bagisto-network:  # 定义网络名称
    driver: bridge  # 使用bridge驱动,Docker默认网络类型

然后,创建各个配置文件

各配置文件目录都在docker-compose.yml文件中

Nginx

  • ./src:/var/www/html # 将主机的src目录挂载到容器的/var/www/html,存放Bagisto项目代码

  • ./nginx/default.conf:/etc/nginx/conf.d/default.conf # 挂载Nginx配置文件

default.conf

复制代码
# Nginx虚拟主机配置文件,用于Bagisto电商平台

# 定义HTTP服务器
server {
    listen 80;  # 监听80端口
    server_name localhost;  # 服务器名称,可以是域名或IP地址

    # 网站根目录,指向Bagisto项目的public目录
    root /var/www/html/public;
    index index.php index.html index.htm;  # 默认索引文件

    # 访问日志和错误日志配置
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    # 处理静态文件请求,直接返回文件内容
    location ~* \.(css|js|gif|png|jpg|jpeg|ico|svg|woff|woff2|ttf|eot)$ {
        expires 1y;  # 静态文件缓存1年
        add_header Cache-Control "public, immutable";
        try_files $uri $uri/ =404;  # 尝试查找文件,找不到返回404
    }

    # 处理PHP文件请求,转发给PHP-FPM处理
    location ~ \.php$ {
        try_files $uri =404;  # 检查PHP文件是否存在,不存在返回404
        fastcgi_pass php:9000;  # 转发请求到php服务的9000端口(PHP-FPM默认端口)
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  # 设置脚本文件名参数
        include fastcgi_params;  # 包含FastCGI通用参数
    }

    # 处理目录请求,用于Laravel路由(Bagisto基于Laravel)
    location / {
        try_files $uri $uri/ /index.php?$query_string;  # 尝试查找文件,找不到则转发给index.php处理
    }

    # 禁止访问.htaccess等隐藏文件
    location ~ /\.ht {
        deny all;  # 拒绝所有访问
    }
}

PHP

重点:必须安装Bagisto需要的扩展

  • php-intl:国际化支持的必需
  • php-gd:图像处理和处理的必备工具
  • 其他标准的Laravel扩展 :通过命令进行检查php -m

关键设置:php.ini

memory_limit = 4G

max_execution_time = 360

这些配置是Bagisto要求的必须配置

  • ./src:/var/www/html # 挂载Bagisto项目代码

  • ./php/php.ini:/usr/local/etc/php/conf.d/php.ini # 挂载PHP配置文件

    PHP配置文件,用于Bagisto电商平台

    基本配置

    max_execution_time = 360 ; 最大执行时间,Bagisto需要较长时间处理某些操作
    memory_limit = 4G ; 内存限制,Bagisto需要足够的内存
    upload_max_filesize = 200M ; 最大上传文件大小
    post_max_size = 500M ; 最大POST数据大小
    max_input_vars = 10000 ; 最大输入变量数,用于表单提交

    时区配置

    date.timezone = Asia/Shanghai ; 设置时区为上海

    错误报告

    display_errors = On ; 开发环境显示错误
    display_startup_errors = On ; 显示启动错误
    error_reporting = E_ALL ; 报告所有错误
    log_errors = On ; 记录错误到日志文件

    会话配置

    session.save_path = /tmp ; 会话文件保存路径

    OPcache配置(提高PHP性能)

    opcache.enable = 1 ; 启用OPcache
    opcache.memory_consumption = 256 ; OPcache内存大小
    opcache.max_accelerated_files = 10000 ; 最大加速文件数
    opcache.validate_timestamps = 1 ; 验证文件时间戳
    opcache.revalidate_freq = 2 ; 重新验证频率(秒)

    MySQLi配置

    mysqli.default_host = mysql ; 默认MySQL主机
    mysqli.default_port = 3306 ; 默认MySQL端口

    PDO MySQL配置

    pdo_mysql.default_socket = ; 默认MySQL套接字(留空使用TCP连接)

    其他配置

    cgi.fix_pathinfo = 0 ; 修复路径信息(安全配置)
    allow_url_fopen = On ; 允许打开URL文件
    short_open_tag = On ; 允许短标签

Dockerfile

复制代码
# 使用官方PHP 8.4 FPM镜像作为基础镜像
FROM php:8.4-fpm

# 维护者信息
LABEL maintainer="Bagisto Docker Environment"

# 安装系统依赖包
RUN apt-get update && apt-get install -y \
    curl \
    git \
    zip \
    unzip \
    libpng-dev \
    libjpeg-dev \
    libfreetype-dev \
    libxml2-dev \
    libzip-dev \
    libonig-dev \
    libicu-dev \
    && rm -rf /var/lib/apt/lists/*
    

# 配置GD扩展(支持JPEG、PNG等图片格式)
RUN docker-php-ext-configure gd --with-freetype --with-jpeg    

# 安装PHP扩展
RUN docker-php-ext-install \
    bcmath \
    calendar \
    gd \
    intl \
    mbstring \
    mysqli \
    pdo_mysql \
    soap \
    zip \
    opcache

# 安装Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# 设置工作目录
WORKDIR /var/www/html

# 设置文件权限
RUN chown -R www-data:www-data /var/www/html

# 暴露PHP-FPM端口
EXPOSE 9000

# 启动PHP-FPM服务
CMD ["php-fpm"]

配置文件做好,下面开始创建环境

  1. 启动Docker容器

在项目根目录(包含docker-compose.yml的目录)中执行以下命令:

复制代码
docker-compose --project-name bagisto up -d --build

project-name bagisto 为项目名字

这个命令会:

  • 拉取所需的Docker镜像(如果本地没有)

  • 创建并启动所有配置的服务容器:

  • Nginx(Web服务器)

  • PHP 8.1-fpm(PHP解释器)

  • MySQL 8.0(数据库)

  • phpMyAdmin(数据库管理工具)

  • 所有容器在后台运行

中间出现的问题:

①国外源镜像拉取不到,需要再Docker->Docker 引擎配置国内源

目前亲测可用的镜像源 "https://docker.1ms.run", "https://docker.xuanyuan.me/",

或者网络问题,需要科学上网或者配置国内源

②php拓展安装不成功,需要手动安装

安装系统依赖包

进入PHP容器

docker-compose --project-name bagisto exec php bash

复制代码
apt-get update && apt-get install -y \
    curl \
    git \
    zip \
    unzip \
    libpng-dev \
    libjpeg-dev \
    libfreetype-dev \
    libxml2-dev \
    libzip-dev \
    libonig-dev \
    libicu-dev \
    && rm -rf /var/lib/apt/lists/*

查看是否安装成功

在容器内部执行apt命令验证依赖是否成功安装

复制代码
apt list --installed | grep -E 'curl|git|zip|unzip|libpng-dev|libjpeg-dev|libfreetype-dev|libxml2-dev|libzip-dev|libonig-dev|libicu-dev'

来个简单的脚本给小白,# 检查所有必需的系统依赖

复制代码
echo "=== 系统依赖检查 ===" && deps="curl git zip unzip libpng-dev libjpeg-dev libfreetype-dev libxml2-dev libzip-dev libonig-dev libicu-dev" && for pkg in $deps; do if dpkg -s $pkg > /dev/null 2>&1; then echo "✓ $pkg (已安装)"; else echo "✗ $pkg (未安装)"; fi; done

输出显示更直观

复制代码
=== 系统依赖检查 ===
✓ curl (已安装)
✓ git (已安装)
✓ zip (已安装)
✓ unzip (已安装)
✓ libpng-dev (已安装)
✓ libjpeg-dev (已安装)
✓ libfreetype-dev (已安装)
✓ libxml2-dev (已安装)
✓ libzip-dev (已安装)
✓ libonig-dev (已安装)
✓ libicu-dev (已安装)

手动安装PHP扩展

复制代码
docker-php-ext-install \
    bcmath \
    calendar \
    gd \
    intl \
    mbstring \
    mysqli \
    pdo_mysql \
    soap \
    zip \
    opcache

检查所有必需的PHP扩展

验证安装结果

php -m | grep -E 'bcmath|calendar|gd|intl|mbstring|mysqli|pdo_mysql|soap|zip|opcache'

来个简单的小白能看到懂的直接运行命令 # 检查所有必需的PHP扩展

复制代码
echo "=== PHP扩展检查 ===" && extensions="bcmath calendar gd intl mbstring mysqli pdo_mysql soap zip opcache" && for ext in $extensions; do if php -m | grep -q "^$ext$"; then echo "✓ $ext"; else echo "✗ $ext"; fi; done

输出

复制代码
root@97a320f33ad2:/var/www/html# # 检查所有必需的PHP扩展
string mysqli pdo_mysql soap zip opcache" && for ext in $exts; do if php -m | grep -i -q "^$ext$"; 
then echo "✓ $ext"; else echo "✗ $ext"; fi; done
=== PHP扩展检查 ===
✗ bcmath
✗ calendar
✗ gd
✗ intl
✓ mbstring
✗ mysqli
✗ pdo_mysql
✗ soap
✗ zip
✗ opcache
root@97a320f33ad2:/var/www/html#

所有依赖安装成功之后安装composer

  1. 进入PHP容器

    docker-compose --project-name bagisto exec php bash

  2. 安装Composer

下载并安装Composer到/usr/local/bin目录

复制代码
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

验证Composer安装成功

复制代码
composer --version

Composer安装成功后

  1. 继续执行Bagisto部署步骤

    进入项目根目录

    cd /var/www/html

    安装项目依赖

    composer install

    配置环境变量

    cp .env.example .env
    vi .env

    生成应用密钥

    php artisan key:generate

    运行数据库迁移和填充

    php artisan migrate
    php artisan db:seed

    发布资源和创建存储链接

    php artisan vendor:publish --all
    php artisan storage:link

    设置文件权限

    chmod -R 775 storage bootstrap/cache
    chown -R www-data:www-data storage bootstrap/cache

相关推荐
XIAOHEZIcode15 小时前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220701 天前
如何搭建本地yum源(上)
运维
武子康1 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn864 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_4 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化