首页
/ SimplCommerce项目使用SQLite数据库的Docker部署指南

SimplCommerce项目使用SQLite数据库的Docker部署指南

2025-07-08 08:02:03作者:瞿蔚英Wynne

前言

SimplCommerce是一个基于ASP.NET Core开发的现代化电子商务系统。本文将详细介绍如何使用Docker容器化部署SimplCommerce项目,并重点讲解如何将其默认的SQL Server数据库替换为轻量级的SQLite数据库。

为什么选择SQLite

SQLite是一个轻量级的嵌入式数据库引擎,相比SQL Server有以下优势:

  1. 无需单独的数据库服务器
  2. 零配置,开箱即用
  3. 数据库以单个文件形式存储
  4. 非常适合小型应用和开发测试环境

Dockerfile解析

基础镜像选择

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env

这里选择了微软官方的.NET 5.0 SDK镜像作为构建环境,包含了编译和运行ASP.NET Core应用所需的所有工具。

项目文件修改

RUN sed -i 's#<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.0" />#<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="5.0.0" />#' src/SimplCommerce.WebHost/SimplCommerce.WebHost.csproj

这一行命令将项目文件中的SQL Server数据库提供程序替换为SQLite提供程序,这是切换数据库类型的关键步骤。

代码适配修改

RUN sed -i 's/UseSqlServer/UseSqlite/' src/SimplCommerce.WebHost/Program.cs
RUN sed -i 's/UseSqlServer/UseSqlite/' src/SimplCommerce.WebHost/Extensions/ServiceCollectionExtensions.cs

这两行命令将应用代码中所有使用SQL Server的配置点替换为使用SQLite,确保应用能够正确连接到SQLite数据库。

数据库连接字符串配置

RUN sed -i 's/"DefaultConnection": ".*"/"DefaultConnection": "Data Source=simplcommerce.db"/' src/SimplCommerce.WebHost/appsettings.json

这里修改了连接字符串,指定SQLite数据库文件名为"simplcommerce.db"。

数据库迁移处理

RUN rm src/SimplCommerce.WebHost/Migrations/*
RUN dotnet tool install --global dotnet-ef --version 5.0.0
ENV PATH="${PATH}:/root/.dotnet/tools"

首先删除原有的迁移文件,然后安装Entity Framework Core工具,用于创建新的数据库迁移。

RUN dotnet restore && dotnet build \
    && cd src/SimplCommerce.WebHost \
	&& dotnet ef migrations add initialSchema \
    && dotnet ef database update

这一系列命令完成以下操作:

  1. 恢复NuGet包
  2. 构建项目
  3. 创建新的数据库迁移
  4. 应用迁移到SQLite数据库

发布应用

RUN dotnet build -c Release \
	&& cd src/SimplCommerce.WebHost \
	&& dotnet build -c Release \
	&& dotnet publish -c Release -o out

以Release模式构建并发布应用,优化性能和减小体积。

PDF生成依赖

RUN curl -SL "https://github.com/rdvojmoc/DinkToPdf/raw/v1.0.8/v0.12.4/64%20bit/libwkhtmltox.so" --output /app/src/SimplCommerce.WebHost/out/libwkhtmltox.so

下载PDF生成所需的依赖库,SimplCommerce使用这个库来生成订单PDF等功能。

运行时镜像

FROM mcr.microsoft.com/dotnet/aspnet:5.0

RUN apt-get update \
	&& apt-get install libgdiplus -y \
	&& rm -rf /var/lib/apt/lists/*

使用更轻量的ASP.NET运行时镜像,并安装libgdiplus库用于图像处理。

WORKDIR /app	
COPY --from=build-env /app/src/SimplCommerce.WebHost/out ./
COPY --from=build-env /app/src/SimplCommerce.WebHost/simplcommerce.db ./

ENTRYPOINT ["dotnet", "SimplCommerce.WebHost.dll"]

从构建阶段复制发布输出和SQLite数据库文件,并设置启动命令。

部署建议

  1. 数据持久化:虽然SQLite数据库文件会随容器一起创建,但建议将数据库文件挂载到宿主机,防止容器重启导致数据丢失。

  2. 性能考虑:SQLite适合小型应用,如果预计有高并发访问,应考虑使用SQL Server或PostgreSQL等更强大的数据库。

  3. 备份策略:定期备份SQLite数据库文件,因为它是单个文件,备份非常方便。

常见问题

  1. 迁移失败:如果遇到迁移问题,可以尝试删除现有的迁移文件重新生成。

  2. 文件权限:确保容器对数据库文件有读写权限。

  3. 并发访问:SQLite在同一时间只支持一个写操作,不适合高并发写入场景。

总结

通过本文的Dockerfile配置,我们成功将SimplCommerce的数据库从SQL Server迁移到了SQLite,大大简化了部署复杂度。这种配置特别适合开发测试环境和小型部署场景,可以快速启动一个功能完整的电子商务系统。