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

相关推荐
眠りたいです2 小时前
Docker:Docker image常用命令使用及实操
运维·docker·容器·eureka·镜像
可爱又迷人的反派角色“yang”2 小时前
docker基本概念(一)
linux·运维·docker·容器
西瓜和拾月2 小时前
Ubuntu Server 24.04 LVM 分区扩容
linux·运维·ubuntu
RisunJan2 小时前
Linux命令-help命令(查看 Shell 内置命令帮助信息)
linux·运维·服务器
RemainderTime2 小时前
(十)Spring Cloud Alibaba 2023.x:生产级 CI/CD 全链路实战(从 Dockerfile 到 Jenkins)
运维·spring cloud·ci/cd·docker·jenkins
yenggd2 小时前
华为SRv6 BE跨域配置案例
运维·网络·计算机网络·华为
梁正雄2 小时前
linux服务-Kibana8原理与安装
linux·运维·服务器
专业开发者2 小时前
楼宇自动化如何提升运营效率
运维·物联网·自动化
Radan小哥2 小时前
Docker学习笔记—day013
笔记·学习·docker