SimplCommerce项目使用SQLite数据库的Docker部署指南
前言
SimplCommerce是一个基于ASP.NET Core开发的现代化电子商务系统。本文将详细介绍如何使用Docker容器化部署SimplCommerce项目,并重点讲解如何将其默认的SQL Server数据库替换为轻量级的SQLite数据库。
为什么选择SQLite
SQLite是一个轻量级的嵌入式数据库引擎,相比SQL Server有以下优势:
- 无需单独的数据库服务器
- 零配置,开箱即用
- 数据库以单个文件形式存储
- 非常适合小型应用和开发测试环境
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
这一系列命令完成以下操作:
- 恢复NuGet包
- 构建项目
- 创建新的数据库迁移
- 应用迁移到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数据库文件,并设置启动命令。
部署建议
-
数据持久化:虽然SQLite数据库文件会随容器一起创建,但建议将数据库文件挂载到宿主机,防止容器重启导致数据丢失。
-
性能考虑:SQLite适合小型应用,如果预计有高并发访问,应考虑使用SQL Server或PostgreSQL等更强大的数据库。
-
备份策略:定期备份SQLite数据库文件,因为它是单个文件,备份非常方便。
常见问题
-
迁移失败:如果遇到迁移问题,可以尝试删除现有的迁移文件重新生成。
-
文件权限:确保容器对数据库文件有读写权限。
-
并发访问:SQLite在同一时间只支持一个写操作,不适合高并发写入场景。
总结
通过本文的Dockerfile配置,我们成功将SimplCommerce的数据库从SQL Server迁移到了SQLite,大大简化了部署复杂度。这种配置特别适合开发测试环境和小型部署场景,可以快速启动一个功能完整的电子商务系统。