strapi容器化部署方案#
基本思路#
利用docker,容器化部署strapi内容管理系统,建立strapi和数据库双容器结构,利用docker-compose.yml链接两个容器,形成一个独立的数据库后端。充分利用开源的strapi内容管理系统,在本地建立数据库后端,无需服务器,无需云平台部署,随时随地热启动,数据本地化存储安全无虞。
准备工作#
安装docker:
- Docker Desktop for Mac:从官网下载并启动,确保图标在菜单栏显示为“运行中”。
- Node.js (可选):虽然我们在容器内运行,但在本地执行初始化脚本会更方便。
创建Strapi项目#
首先在本地创建一个Strapi项目文件夹,选择postgres作为数据库(推荐postgres作为数据库),设置数据库名、数据库用户名称和密码。
npx create-strapi-app@latest my-strapi-project
cd my-strapi-project进入strapi根目录,打开环境文件.env,会显示数据库设置如下:
# Database
DATABASE_CLIENT=postgres
DATABASE_HOST=strapiDB # 关键:这里要写 docker-compose 里的服务名
DATABASE_PORT=5432
DATABASE_NAME=strapidb # 数据库名(自己设置)
DATABASE_USERNAME=my-strapi # 用户名(自己设置)
DATABASE_PASSWORD=******** # 自行设置密码
DATABASE_SSL=false如何快速部署strapi项目,可以参考:

编写Docker配置文件#
在项目根目录下创建两个核心文件:Dockerfile 和 docker-compose.yml。
创建Dockerfile#
在strapi项目的根目录新建Dockerfile文件(注意:没有后缀名,在vscode下会出现鲸鱼图标),这个文件定义了Strapi运行环境。
FROM node:18-alpine
# 安装 libvips-dev 用于处理图片
RUN apk update && apk add --no-cache build-base gcc autoconf automake zlib-dev libpng-dev vips-dev
ENV NODE_ENV=development
WORKDIR /opt/app
# 复制 package 文件并安装依赖
COPY package.json package-lock.json* ./
RUN npm install && npm cache clean --force
# 复制项目文件
COPY . .
RUN chown -R node:node /opt/app
USER node
# 构建 Strapi admin
RUN ["npm", "run", "build"]
EXPOSE 1337
CMD ["npm", "run", "develop"]创建docker-compose.yml#
在strapi项目的根目录新建docker-compose.yml,这个文件负责链接Strapi容器和PostgreSQL数据库容器。
version: '3.8'
services:
strapi:
container_name: strapi
build: .
image: strapi:latest
restart: unless-stopped
env_file: .env
environment:
DATABASE_CLIENT: ${DATABASE_CLIENT:-postgres}
DATABASE_HOST: ${DATABASE_HOST:-strapiDB}
DATABASE_PORT: ${DATABASE_PORT:-5432}
DATABASE_NAME: ${DATABASE_NAME:-strapidb}
DATABASE_USERNAME: ${DATABASE_USERNAME:-my-strapi}
DATABASE_PASSWORD: ${DATABASE_PASSWORD:-********}
volumes:
- .:/opt/app
- /opt/app/node_modules
ports:
- "${STRAPI_PORT:-1337}:1337"
depends_on:
- strapiDB
strapiDB:
container_name: strapiDB
image: postgres:14-alpine
restart: unless-stopped
environment:
POSTGRES_USER: ${DATABASE_USERNAME:-my-strapi}
POSTGRES_PASSWORD: ${DATABASE_PASSWORD:-*******}
POSTGRES_DB: ${DATABASE_NAME:-strapidb}
volumes:
- strapi-data:/var/lib/postgresql/data
ports:
- "${DB_EXTERNAL_PORT:-5432}:5432"
volumes:
strapi-data:启动与运行#
在终端中运行以下命令启动整个环境:
- **启动容器。**打开终端,输入第一次构建命令:
docker-compose up --build- 查看日志(确认是否启动成功):
docker-compose logs -f strapi- 创建成功,访问后台
如果一切顺利的话,打开浏览器访问 http://localhost:1337/admin。你将看到创建第一个管理员账号的界面。这样就说明创建已成功,可以将代码推送到GitHub。接下来,打开Docker Desktop,你会在容器栏看到刚刚创建的容器已成功运行,image镜像栏会看到两个创建的镜像:strapi和postgres:14-alpine。
数据备份和导入#
导出数据 (Export)#
此步骤将生成一个包含数据库内容、上传资产(图片等)、配置信息和 Schema 的压缩包,文件名后缀为.tar.gz。
# 进入你的项目目录,运行:
docker exec -it strapi npx strapi export --no-encrypt -f my-backup导入数据 (Import)#
此步骤用于在新环境(如你修改为具名卷后)恢复数据。
将备份的数据库文件my-backup.tar.gz 复制到新的strapi项目文件夹根目录,然后执行以下命令:
# 在容器内执行导入
docker exec -it strapi npx strapi import -f my-backup.tar.gz --force