项目背景

GLPI(Gestionnaire Libre de Parc Informatique)是一款开源的IT资产管理和服务管理工具,广泛应用于企业IT资源管理、工单系统、库存跟踪等场景。随着GLPI 11版本的发布,新功能、性能优化和安全增强成为推动升级的主要因素。GLPI 11引入了现代化的技术栈,包括对PHP 8.1及更高版本的兼容性支持,改进了数据库查询效率,并优化了用户界面体验。GLPI 10的维护周期逐渐接近尾声,官方支持重心转向新版本,升级可确保系统长期稳定性和安全性。

项目需求

GLPI不同版本对环境及数据库的要求

GLPI 11.x GLPI 10.x
PHP版本 8.0+ 7.2.5+
Mysql 8.0+ 5.7+
MariaDB 10.2+ 10.5+
Apache 必须 Apache 2.4+ 推荐/支持 Apache 2.2+

项目目标

通过升级到GLPI 11,企业能够获得更高效、更安全的IT管理平台,同时为未来的功能扩展和技术迭代奠定基础。项目需确保平滑迁移,最小化对现有业务流程的影响。

GLPI 10 项目架构:Docker+MySQL+Apache+PHP

  • Docker:25.0.5
  • MySQL:5.7
  • Apache:2.4

由于构建GLPI 10的应用镜像时,使用的基础镜像是php:8.2-apache镜像,该镜像包含的PHP环境及Apache版本足以支持GLPI 10系列升级到GLPI 11系列,后续的升级可以沿用该基础镜像,也可以使用更高版本的基础镜像。
GLPI 10系列的部署可以参考:Ubuntu22.04部署容器化GLPI 10.0.6

GLPI 10系列升级至GLPI 11的流程思路

1、查看GLPI 11的部署对PHPApacheMysql或者MarinaDB的版本要求。
2、备份GLPI 10configfileplugins目录,如果更新失败,还可以及时回滚版本。
3、备份MySQL 5.7glpi库,如果更新失败,还可以及时回滚版本。
4、升级MySQL 5.7数据库,升级至Mysql 8.0版本。
5、先升级GLPI 10.0.xGLPI 10.0.23,再升级至GLPI 11.0.x版本。

1、备份数据库的数据文件

先停止my-glpi容器的运行,防止在备份数据时,有数据写入。

sudo docker stop my-glpi

使用mysqldump备份glpi库,备份至容器里的/var/lib/mysql目录。
备份时使用mysqlroot用户去备份,root用户的密码:123456
在这里插入图片描述

sudo docker exec -it glpi-db sh -c 'mysqldump -uroot -p123456 --single-transaction --routines --events --triggers --databases glpi > /var/lib/mysql/glpi_backup.sql'

参数解析:
–single-transaction:对于 InnoDB 表,使用事务确保备份一致性,且不锁表(不影响业务)。
–routines:备份存储过程和函数。
–events:备份事件调度器中的事件。
–triggers:备份触发器(默认已包含,但显式写上更安全)。
–databases glpi:明确指定备份的数据库,恢复时会在 SQL 中包含 CREATE DATABASE 语句(如果不加该选项,则默认不会创建库,需手动创建)。

因为我们对mysql容器的/var/lib/mysql目录做了数据持久化,映射到了物理机的/usr/local/glpi/mysql/data/目录,在备份完成后,在该目录下就可以查看我们备份好的glpi_backup.sql文件。

ls /usr/local/glpi/mysql/data/

在这里插入图片描述
停止glpi-db容器的运行

sudo docker stop glpi-db

2、备份GLPI的数据文件

主要对/usr/local/glpi/目录进行进行备份

sudo cp -rf /usr/local/glpi/ /usr/local/glpi_10

3、升级Mysql 5.7至Mysql 8.0

创建glpi-db:11应用镜像构建目录

sudo mkdir -p /opt/build-glpi-db && cd /opt/build-glpi-db
sudo cp -rf /usr/local/glpi_10/mysql/data/glpi_backup.sql .

前面已经备份好了数据库文件,所以我们直接使用Mysql:8.0制作glpi-db应用镜像。

cat <<EOF>Dockerfile
# 基础镜像,使用 MySQL 作为基础
FROM mysql:8.0

# 将 .sql 文件复制到容器中的特定路径
COPY glpi_backup.sql /docker-entrypoint-initdb.d/
# 设置环境变量,根据需要配置数据库用户和密码
ENV MYSQL_ROOT_PASSWORD=rootP@ssw0rd
ENV MYSQL_DATABASE=glpi

# 暴露 MySQL 默认端口
EXPOSE 3306
EOF

构建glpi-db镜像

sudo docker build -t glpi-db:11 .

构建成功截图
在这里插入图片描述
查看镜像

sudo docker images

在这里插入图片描述

4、升级GLPI 10.0.x 至GLPI 10.0.23

为什么GLPI 10.0.x不能直接升级到GLPI 11.0.x?
核心原因是为了确保数据库结构和数据的平滑、安全过渡。这通常是由于在 10.0.6 到 10.0.23 之间的某个版本中,数据库发生了重大的、基础性的架构变更,这个变更是后续升级到 11.x 系列的必要前提。

创建my-glpi:10.0.23应用镜像构建目录

sudo mkdir -p /opt/build-glpi-10-23 && cd /opt/build-glpi-10-23

4.1、创建glpi.conf

配置Apache虚拟主机,使得Apache能够正确服务于GLPI应用程序Apache将从这个/var/www/html/publi目录开始寻找文件来响应请求。

sudo cat <<EOF> glpi.conf
<VirtualHost *:80>
    # 核心修改:将根目录指向 /public 子目录
    DocumentRoot /var/www/html/public

    <Directory /var/www/html/public>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
        # 确保所有请求都路由到 index.php (符合GLPI要求)
        DirectoryIndex index.php
        <IfModule mod_rewrite.c>
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule ^(.*)\$ index.php [QSA,L]
        </IfModule>
    </Directory>

    ErrorLog \${APACHE_LOG_DIR}/error.log
    CustomLog \${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
EOF

4.2、创建docker-entrypoint.sh

在Docker容器启动时运行,用于执行一些初始化操作,然后启动主进程。

sudo cat <<EOF> docker-entrypoint.sh
#!/bin/bash

# 等待数据库就绪的函数
wait_for_database() {
    local host="\$1"
    local port="\${2:-3306}"
    local timeout=30
    local counter=0
    
    echo "等待数据库连接: \$host:\$port"
    
    while [ \$counter -lt \$timeout ]; do
        # 使用 bash 内置的 TCP 检查
        if timeout 1 bash -c "echo > /dev/tcp/\$host/\$port" 2>/dev/null; then
            echo "数据库已就绪"
            return 0
        fi
        
        echo "等待数据库... (\$((counter + 1))/\$timeout)"
        sleep 2
        counter=\$((counter + 1))
    done
    
    echo "错误: 数据库连接超时"
    return 1
}

# 主程序
if [ -n "\$DB_HOST" ]; then
    wait_for_database "\$DB_HOST" "\${DB_PORT:-3306}"
fi

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

# 检查是否首次运行
if [ ! -f /var/www/html/config/config_db.php ]; then
    echo "检测到首次运行,确保插件目录存在..."
    mkdir -p /var/www/html/plugins
    chown www-data:www-data /var/www/html/plugins
    
    # 如果是首次运行,等待数据库完全初始化
    sleep 5
fi

# 执行原始命令
exec "\$@"
EOF

4.3、编写Dockerfile

在构建镜像的过程中,如果拉取GithubGLPI的源码失败,可以通过科学的方式去Github上下载源码到本地,然后上传至服务器/opt/build-glpi-10-23目录并对Dockerfile进行部分修改即可。
源码地址:

https://github.com/glpi-project/glpi/releases/download/10.0.23/glpi-10.0.23.tgz

修改前:

ENV GLPI_VERSION=10.0.23
ENV GLPI_FILE=glpi-${GLPI_VERSION}.tgz
RUN wget -O "/tmp/${GLPI_FILE}" \
    "https://github.com/glpi-project/glpi/releases/download/${GLPI_VERSION}/${GLPI_FILE}" \
    && tar -xzf "/tmp/${GLPI_FILE}" -C /var/www/html --strip-components=1 \
    && rm -f "/tmp/${GLPI_FILE}"

修改后:

ENV GLPI_VERSION=10.0.23
ENV GLPI_FILE=glpi-${GLPI_VERSION}.tgz
COPY ./${GLPI_FILE}  /tmp/${GLPI_FILE} # 新增语句
RUN  tar -xzf "/tmp/${GLPI_FILE}" -C /var/www/html --strip-components=1 \
    && rm -f "/tmp/${GLPI_FILE}"

在这里插入图片描述

编写Dockerfile

sudo cat <<EOF> Dockerfile
FROM php:8.2-apache

# 设置时区
ENV TZ=Asia/Shanghai
ENV PHP_INI_DATE_TIMEZONE=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/\$TZ /etc/localtime && echo \$TZ > /etc/timezone

# 安装系统依赖
RUN apt-get update && apt-get install -y \
    libpng-dev libjpeg-dev libfreetype6-dev \
    libxml2-dev libldap2-dev libicu-dev \
    libzip-dev libcurl4-openssl-dev libonig-dev \
    libxslt1-dev unzip wget curl cron nano \
    && rm -rf /var/lib/apt/lists/*

# 配置 PHP 扩展
RUN docker-php-ext-configure gd --with-freetype --with-jpeg
RUN docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/

# 安装 PHP 扩展
RUN docker-php-ext-install \
    pdo_mysql mysqli gd intl ldap zip xml xsl mbstring \
    curl soap sockets opcache bcmath bz2

# 安装和配置 APCu
RUN pecl install apcu && docker-php-ext-enable apcu

# 设置 PHP 时区
RUN echo "date.timezone = Asia/Shanghai" > /usr/local/etc/php/conf.d/timezone.ini

# 启用 Apache 模块
RUN a2enmod rewrite
RUN a2enmod headers

# 下载 GLPI
ENV GLPI_VERSION=10.0.23
ENV GLPI_FILE=glpi-\${GLPI_VERSION}.tgz
RUN wget -O "/tmp/\${GLPI_FILE}" \
    "https://github.com/glpi-project/glpi/releases/download/\${GLPI_VERSION}/\${GLPI_FILE}" \
    && tar -xzf "/tmp/\${GLPI_FILE}" -C /var/www/html --strip-components=1 \
    && rm -f "/tmp/\${GLPI_FILE}"
COPY glpi.conf /etc/apache2/sites-available/000-default.conf
    
# 创建必要的目录
RUN mkdir -p /var/www/html/files/_cache /var/www/html/files/_cron \
    /var/www/html/files/_dumps /var/www/html/files/_graphs \
    /var/www/html/files/_lock /var/www/html/files/_pictures \
    /var/www/html/files/_plugins /var/www/html/files/_rss \
    /var/www/html/files/_tmp /var/www/html/files/_uploads \
    /var/www/html/files/_sessions

# 设置权限
RUN chown -R www-data:www-data /var/www/html \
    && chmod -R 755 /var/www/html

# 健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
    CMD curl -f http://localhost/ || exit 1

# 启动脚本 - 处理首次安装配置
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh

EXPOSE 80

ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["apache2-foreground"]
EOF

4.4、构建镜像

构建GLPI 10.0.23应用镜像

sudo docker build -t my-glpi:10.0.23 .

构建的过程大概需要十几分钟,没有报错就是构建成功。
在这里插入图片描述

4.5、编排容器

创建docker-compose.yaml,将 Docker 容器内的数据持久化存储到宿主机的指定目录,避免容器重启或删除容器时数据丢失。

sudo cat <<EOF> docker-compose.yaml 
services:
  glpi-db:
    image: glpi-db:11
    container_name: glpi-db
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: glpi
      MYSQL_USER: glpi
      MYSQL_PASSWORD: glpi@123
      MYSQL_ROOT_HOST: '%'
      TZ: Asia/Shanghai
      MYSQL_DEFAULT_AUTHENTICATION_PLUGIN: mysql_native_password
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
      - --innodb-buffer-pool-size=512M
      - --sql-mode=NO_ENGINE_SUBSTITUTION
      - --default-authentication-plugin=mysql_native_password
    volumes:
      - glpi_db_data:/var/lib/mysql
    networks:
      - glpi-network
    restart: unless-stopped

  my-glpi:
    image: my-glpi:10.0.23
    container_name: my-glpi
    environment:
      - TIMEZONE=Asia/Shanghai
      - DB_HOST=glpi-db
      - DB_NAME=glpi
      - DB_USER=glpi
      - DB_PASSWORD=glpi@123
    volumes:
      - glpi_files_data:/var/www/html/files
      - glpi_plugins_data:/var/www/html/plugins
      - glpi_config_data:/var/www/html/config
    ports:
      - "80:80"
    networks:
      - glpi-network
    depends_on:
      - glpi-db
    restart: unless-stopped

volumes:
  glpi_db_data:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /usr/local/glpi/mysql8/data
  glpi_files_data:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /usr/local/glpi/glpi_files_data
  glpi_plugins_data:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /usr/local/glpi/glpi_plugins_data
  glpi_config_data:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /usr/local/glpi/glpi_config_data
networks:
  glpi-network:
    name: glpi-network
    driver: bridge
EOF

4.6、数据目录处理

由于这次启动需要启用glpi-db:11容器,需要将/usr/local/glpi/目录下的mysql目录重名为mysql_old,重新生成持久化数据库数据目录。

sudo mv /usr/local/glpi/mysql /usr/local/glpi/mysql_old

/usr/local/glpi/目录下的glpi_config_dataglpi_files_dataglpi_plugins_data还可以继续沿用,不需要进行更改。创建/usr/local/glpi/mysql8/data空目录。

sudo mkdir -p /usr/local/glpi/mysql8/data

4.7、编排容器

创建docker-compose.yaml,将 Docker 容器内的数据持久化存储到宿主机的指定目录,避免容器重启或删除容器时数据丢失。GLPI使用的数据库身份认证插件为 mysql_native_password,而 MySQL 8.0 默认采用 caching_sha2_password 插件。若直接升级而不调整认证方式,会导致数据库升级失败。

sudo cat <<EOF> docker-compose.yaml 
services:
  glpi-db:
    image: glpi-db:11
    container_name: glpi-db
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: glpi
      MYSQL_USER: glpi
      MYSQL_PASSWORD: glpi@123
      MYSQL_ROOT_HOST: '%'
      TZ: Asia/Shanghai
      MYSQL_DEFAULT_AUTHENTICATION_PLUGIN: mysql_native_password
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
      - --innodb-buffer-pool-size=512M
      - --sql-mode=NO_ENGINE_SUBSTITUTION
      - --default-authentication-plugin=mysql_native_password
    volumes:
      - glpi_db_data:/var/lib/mysql
    networks:
      - glpi-network
    restart: unless-stopped

  my-glpi:
    image: my-glpi:10.0.23
    container_name: my-glpi
    environment:
      - TIMEZONE=Asia/Shanghai
      - DB_HOST=glpi-db
      - DB_NAME=glpi
      - DB_USER=glpi
      - DB_PASSWORD=glpi@123
    volumes:
      - glpi_files_data:/var/www/html/files
      - glpi_plugins_data:/var/www/html/plugins
      - glpi_config_data:/var/www/html/config
    ports:
      - "80:80"
    networks:
      - glpi-network
    depends_on:
      - glpi-db
    restart: unless-stopped

volumes:
  glpi_db_data:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /usr/local/glpi/mysql8/data
  glpi_files_data:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /usr/local/glpi/glpi_files_data
  glpi_plugins_data:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /usr/local/glpi/glpi_plugins_data
  glpi_config_data:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /usr/local/glpi/glpi_config_data
networks:
  glpi-network:
    name: glpi-network
    driver: bridge
EOF

4.8、下线glpi 10.0.x系统

cd /opt/build-glpi
sudo docker compose -f docker-compose.yaml down -v

在这里插入图片描述

4.9、上线glpi 10.0.23系统

cd /opt/build-glpi-10-23
sudo docker compose -f docker-compose.yaml up -d

在这里插入图片描述

5、访问GLPI Web端进行升级

http://IP

在升级的过程中会有报错,直接忽略。
在这里插入图片描述

在这里插入图片描述
登陆Web端
用户名:glpi
密码:glpi
在这里插入图片描述
登陆进去后,点击【右上角图标】-【关于】,查看版本,看到该版本GLPI 10.0.23即为升级成功!
在这里插入图片描述
查看之前部署的Agent端,发现数据没有问题。
在这里插入图片描述

6、升级GLPI 10.0.23至GLPI 11

根据 GLPI的官方规划,从GLPI 11版本开始,项目的 Web 入口文件 index.php将会被强制要求放置在public目录下。这个变化主要是为了提升安全性,通过将公开访问的文件与核心代码分离,可以更好地保护应用。以下是 GLPI 11 中 public 目录的核心作用:

传统根目录 (如 /var/www/html) 新的 Web 根目录 (/public)
存放内容 index.php, config/, src/, vendor/ 等所有代码文件。 仅存放公开访问的入口文件(如 index.php)和静态资源(如 CSS、JS、图片等)。
安全风险 配置不当可能导致核心代码被直接访问。 核心代码(如 src/, config/)位于 Web 根目录之外,无法被浏览器直接访问,大大提升了安全性。

创建my-glpi:11.0.4应用镜像构建目录

sudo mkdir -p /opt/build-glpi-11 && cd /opt/build-glpi-11

6.1、创建glpi.conf

配置Apache虚拟主机,使得Apache能够正确服务于GLPI应用程序Apache将从这个/var/www/html/publi目录开始寻找文件来响应请求。使用的配置同前面的glpi.conf一致,直接复制过来使用。

sudo cp /opt/build-glpi-10-23/glpi.conf .

6.2、创建docker-entrypoint.sh

在Docker容器启动时运行,用于执行一些初始化操作,然后启动主进程。使用的配置同前面的docker-entrypoint.sh一致,直接复制过来使用。

sudo cp /opt/build-glpi-10-23/docker-entrypoint.sh .

6.3、编写Dockerfile

在构建镜像的过程中,如果拉取GithubGLPI的源码失败,可以通过科学的方式去Github上下载源码到本地,然后上传至服务器/opt/build-glpi-11目录并对Dockerfile进行部分修改即可。
源码地址:

https://github.com/glpi-project/glpi/releases/download/11.0.4/glpi-11.0.4.tgz

修改前:

ENV GLPI_VERSION=11.0.4
ENV GLPI_FILE=glpi-${GLPI_VERSION}.tgz
RUN wget -O "/tmp/${GLPI_FILE}" \
    "https://github.com/glpi-project/glpi/releases/download/${GLPI_VERSION}/${GLPI_FILE}" \
    && tar -xzf "/tmp/${GLPI_FILE}" -C /var/www/html --strip-components=1 \
    && rm -f "/tmp/${GLPI_FILE}"

修改后:

ENV GLPI_VERSION=11.0.4
ENV GLPI_FILE=glpi-${GLPI_VERSION}.tgz
COPY ./${GLPI_FILE}  /tmp/${GLPI_FILE} # 新增语句
RUN  tar -xzf "/tmp/${GLPI_FILE}" -C /var/www/html --strip-components=1 \
    && rm -f "/tmp/${GLPI_FILE}"

在这里插入图片描述

编写Dockerfile

sudo cat <<EOF> Dockerfile
FROM php:8.2-apache

# 设置时区
ENV TZ=Asia/Shanghai
ENV PHP_INI_DATE_TIMEZONE=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/\$TZ /etc/localtime && echo \$TZ > /etc/timezone

# 安装系统依赖
RUN apt-get update && apt-get install -y \
    libpng-dev libjpeg-dev libfreetype6-dev \
    libxml2-dev libldap2-dev libicu-dev \
    libzip-dev libcurl4-openssl-dev libonig-dev \
    libxslt1-dev unzip wget curl cron nano \
    && rm -rf /var/lib/apt/lists/*

# 配置 PHP 扩展
RUN docker-php-ext-configure gd --with-freetype --with-jpeg
RUN docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/

# 安装 PHP 扩展
RUN docker-php-ext-install \
    pdo_mysql mysqli gd intl ldap zip xml xsl mbstring \
    curl soap sockets opcache bcmath bz2

# 安装和配置 APCu
RUN pecl install apcu && docker-php-ext-enable apcu

# 设置 PHP 时区
RUN echo "date.timezone = Asia/Shanghai" > /usr/local/etc/php/conf.d/timezone.ini

# 启用 Apache 模块
RUN a2enmod rewrite
RUN a2enmod headers

# 下载 GLPI
ENV GLPI_VERSION=11.0.4
ENV GLPI_FILE=glpi-\${GLPI_VERSION}.tgz
RUN wget -O "/tmp/\${GLPI_FILE}" \
    "https://github.com/glpi-project/glpi/releases/download/\${GLPI_VERSION}/\${GLPI_FILE}" \
    && tar -xzf "/tmp/\${GLPI_FILE}" -C /var/www/html --strip-components=1 \
    && rm -f "/tmp/\${GLPI_FILE}"
COPY glpi.conf /etc/apache2/sites-available/000-default.conf

# 创建必要的目录
RUN mkdir -p /var/www/html/files/_cache /var/www/html/files/_cron \
    /var/www/html/files/_dumps /var/www/html/files/_graphs \
    /var/www/html/files/_lock /var/www/html/files/_pictures \
    /var/www/html/files/_plugins /var/www/html/files/_rss \
    /var/www/html/files/_tmp /var/www/html/files/_uploads \
    /var/www/html/files/_sessions

# 设置权限
RUN chown -R www-data:www-data /var/www/html \
    && chmod -R 755 /var/www/html

# 健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
    CMD curl -f http://localhost/ || exit 1

# 启动脚本 - 处理首次安装配置
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh

EXPOSE 80

ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["apache2-foreground"]
EOF

5.4、构建镜像

sudo docker build -t my-glpi:11.0.4 .

构建的过程大概需要十几分钟…
在这里插入图片描述
镜像构建完成后,查看镜像的情况

sudo docker images

在这里插入图片描述

6.5、编排容器

创建docker-compose.yaml,将 Docker 容器内的数据持久化存储到宿主机的指定目录,避免容器重启或删除容器时数据丢失。

sudo cat <<EOF> docker-compose.yaml 
services:
  glpi-db:
    image: glpi-db:11
    container_name: glpi-db
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: glpi
      MYSQL_USER: glpi
      MYSQL_PASSWORD: glpi@123
      MYSQL_ROOT_HOST: '%'
      TZ: Asia/Shanghai
      MYSQL_DEFAULT_AUTHENTICATION_PLUGIN: mysql_native_password
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
      - --innodb-buffer-pool-size=512M
      - --sql-mode=NO_ENGINE_SUBSTITUTION
      - --default-authentication-plugin=mysql_native_password
    volumes:
      - glpi_db_data:/var/lib/mysql
    networks:
      - glpi-network
    restart: unless-stopped

  my-glpi:
    image: my-glpi:11.0.4
    container_name: my-glpi
    environment:
      - TIMEZONE=Asia/Shanghai
      - DB_HOST=glpi-db
      - DB_NAME=glpi
      - DB_USER=glpi
      - DB_PASSWORD=glpi@123
    volumes:
      - glpi_files_data:/var/www/html/files
      - glpi_plugins_data:/var/www/html/plugins
      - glpi_config_data:/var/www/html/config
    ports:
      - "80:80"
    networks:
      - glpi-network
    depends_on:
      - glpi-db
    restart: unless-stopped

volumes:
  glpi_db_data:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /usr/local/glpi/mysql8/data
  glpi_files_data:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /usr/local/glpi/glpi_files_data
  glpi_plugins_data:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /usr/local/glpi/glpi_plugins_data
  glpi_config_data:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /usr/local/glpi/glpi_config_data
networks:
  glpi-network:
    name: glpi-network
    driver: bridge
EOF

6.6、下线glpi 10.0.23 系统

cd /opt/build-glpi-10-23
sudo docker compose down -v

在这里插入图片描述
/usr/local/glpi目录进行备份

sudo cp -rf /usr/local/glpi /usr/local/glpi_10_23

6.7、上线 glpi 11.0.04 系统

cd /opt/build-glpi-11
sudo docker compose up -d

在这里插入图片描述

7、访问GLPI Web端进行升级

http://IP

在这里插入图片描述
在这里插入图片描述
等待数据库更新完成,点击【继续】
在这里插入图片描述
又见到了我们熟悉的界面,账号/密码依旧是 glpi
在这里插入图片描述

登陆上去后查看我们的版本信息,显示11.0.4字样,我们就升级完成了,后续的升级以此类推,可以给自己一些掌声了,坚持到了这一步,并没有放弃!
在这里插入图片描述

8、总结

GLPI的升级花费了我很多的时间,从0-1的构建镜像到部署成功以及系统升级,经历了一次又一次的报错,每一次报错并解决都是经验的增长,在一次又一次的报错中,逐渐理解系统的架构,项目部署的细节,以及MySQL 5.7升级至MySQL 8.0的过程中需要注意的点。部署项目的过程中遇到问题是常事,解决问题的思路和发散的思维才是最大的收获。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐