跳过正文
  1. 文章/

strapi+docker容器化部署实例

 Author
文森的科技小站
目录

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配置文件
#

在项目根目录下创建两个核心文件:Dockerfiledocker-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:

启动与运行
#

在终端中运行以下命令启动整个环境:

  1. **启动容器。**打开终端,输入第一次构建命令:
docker-compose up --build
  1. 查看日志(确认是否启动成功):
docker-compose logs -f strapi
  1. 创建成功,访问后台

如果一切顺利的话,打开浏览器访问 http://localhost:1337/admin。你将看到创建第一个管理员账号的界面。这样就说明创建已成功,可以将代码推送到GitHub。接下来,打开Docker Desktop,你会在容器栏看到刚刚创建的容器已成功运行,image镜像栏会看到两个创建的镜像:strapipostgres: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

📖 阅读量: