部署至Digital Ocean的Strapi重新部署后图片失效问题求助
Strapi部署DigitalOcean后数据异常&Admin面板问题的解决办法
问题根源
- SQLite不适合生产环境:SQLite是本地文件型数据库,DigitalOcean应用平台每次部署都会新建容器,之前的数据库文件不会被持久化保留,部署后数据直接清空,这就是文章异常的核心原因。
- 内容类型变更未同步:修改内容类型后直接部署,生产环境的数据库结构和本地不一致,会引发数据结构异常,进而导致Admin面板故障。
- Admin面板重复构建冲突:每次部署重新构建Admin时,若本地的自定义配置、依赖版本与生产环境不匹配,就会出现加载异常。
具体解决步骤
1. 替换SQLite为托管数据库
DigitalOcean提供现成的PostgreSQL/MySQL托管服务,直接用它替代SQLite:
- 在DO后台创建托管数据库实例,获取连接信息(主机、端口、用户名、密码、数据库名)。
- 修改项目的
config/env/production/database.js(无此文件则新建),配置生产环境使用托管数据库:
module.exports = ({ env }) => ({ connection: { client: 'postgres', // 选mysql也可 connection: { host: env('DATABASE_HOST'), port: env.int('DATABASE_PORT'), database: env('DATABASE_NAME'), user: env('DATABASE_USER'), password: env('DATABASE_PASSWORD'), ssl: env.bool('DATABASE_SSL', true), // DO托管数据库必须开启SSL }, }, });
- 在DO应用平台的环境变量中添加上述数据库参数,确保部署时能正确连接。
2. 用迁移工具同步内容类型变更
每次修改内容类型后,必须生成迁移文件同步到生产环境:
- 本地安装迁移工具:
npm install @strapi/plugin-content-type-builder --save - 修改内容类型后,生成迁移文件:
yarn strapi generate migration(npm环境用npx strapi generate migration) - 将生成的迁移文件提交到Github,部署时Strapi会自动执行迁移,同步数据库结构且不破坏现有数据。
- 部署前先在本地测试迁移,确认无问题后再提交代码。
3. 避免Admin面板重复构建异常
- 提交预构建的Admin文件到Github:本地运行
yarn build生成.strapi/admin目录,将该目录加入版本控制(确保.gitignore未排除它),部署时直接使用预构建文件,无需重新构建。 - 锁定依赖版本:将
package-lock.json或yarn.lock提交到Github,确保生产环境安装的依赖与本地完全一致,避免版本冲突。 - 若自定义了Admin面板(如修改UI、添加插件),需将所有自定义代码提交到仓库,确保生产环境能正常加载。
4. 做好数据备份与同步
- 开启DO托管数据库的自动备份功能,定期备份数据,出现问题时可快速恢复。
- 本地与生产环境数据分离:不要直接复制本地SQLite数据到生产,而是通过Strapi的内容导出/导入功能手动同步所需内容,避免数据结构不一致引发异常。
内容的提问来源于stack exchange,提问作者Nqobizitha Mlilo
相关产品推荐
相关产品推荐

