首页 / 资讯中心 / 文章详情

Serverpod 4.1.0 全栈项目开发与 Docker 部署规范文档

Serverpod 4.1.0 全栈项目开发与 Docker 部署规范文档 ★ FEATURED ARTICLE
文章目录一、 项目架构与目录规划Serverpod 4.1.0 共享模型架构二、 Serverpod 4.1.0 共享 Model 开发规范1. 创建共享模块 (Serverpod Module)2. 在双后端中引用共享模块三、 Serverpod 4.1.0 Docker 打包规范1. 编写通用 Dockerfile2. 本地构建并导出镜像四、 服务器容器编排 (docker-compose.yml)五、 反向代理与 HTTPS 配置 (Caddyfile)本文档基于Serverpod 4.1.0最新版本编写规范了从本地多端工程组织APP 管理后台 共享 Model 双后端、最新 CLI 开发流程、Docker 镜像打包到阿里云服务器容器化部署的全生命周期流程。一、 项目架构与目录规划Serverpod 4.1.0 共享模型架构在 4.1.0 架构中前端APP、Web与后端Serverpod Services逻辑解耦。为了让app_server和admin_server共用同一套数据结构Entities / Models我们将共享模型抽离为独立的 Serverpod Module 库my_full_project/ -- 统一的项目根目录本地工作区 │ ├── shared_models/ -- 0. 共享数据模型模块 (Serverpod Module) │ ├── shared_models_server/ (放置通用的 .yaml 模型描述文件) │ └── shared_models_client/ (自动生成的共享数据实体代码) │ ├── my_app/ -- 1. Flutter 移动端 APP 客户端 │ ├── lib/ │ └── pubspec.yaml │ ├── my_admin_web/ -- 2. 管理后台前端Flutter Web / Vue3 / React │ ├── lib/ (或 src/) │ └── pubspec.yaml (或 package.json) │ ├── app_server/ -- 3. App 专用的 Serverpod 后端 (依赖 shared_models) │ ├── app_server/ (Serverpod 服务端代码监听 8080) │ └── app_server_client/ (自动生成的客户端 SDK供 my_app 引用) │ ├── admin_server/ -- 4. 后台管理专用的 Serverpod 后端 (依赖 shared_models) │ ├── admin_server/ (Serverpod 服务端代码监听 8081) │ └── admin_server_client/ (自动生成的 SDK供 my_admin_web 引用) │ └── deploy/ -- 5. 服务器统一部署编排目录 ├── docker-compose.yml ├── app_config/ (app_server 的 production.yaml) └── admin_config/ (admin_server 的 production.yaml)二、 Serverpod 4.1.0 共享 Model 开发规范1. 创建共享模块 (Serverpod Module)在项目根目录下运行 Serverpod 4.1.0 命令serverpod create shared_models--templatemodule在shared_models/shared_models_server/lib/src/protocol/中定义所有公共.yaml模型如user.yaml,order.yaml。2. 在双后端中引用共享模块分别在app_server/app_server/pubspec.yaml和admin_server/admin_server/pubspec.yaml中引入dependencies:serverpod:^4.1.0shared_models_server:path:../../shared_models/shared_models_server在各自的config/generator.yaml中配置模块关联modules:shared_models:nickname:shared执行代码生成serverpod generate三、 Serverpod 4.1.0 Docker 打包规范在app_server/app_server/和admin_server/admin_server/中编写通用的Dockerfile。因为使用了共享模块依赖构建上下文需涵盖根目录1. 编写通用Dockerfile# --- 阶段一编译二进制文件 --- FROM dart:3.12.0 AS build WORKDIR /app # 复制共享模块与服务依赖 COPY shared_models /shared_models COPY app_server/app_server/pubspec.* ./app_server/app_server/ WORKDIR /app/app_server/app_server RUN dart pub get COPY app_server/app_server . RUN dart compile exe bin/main.dart -o serverpod_app # --- 阶段二运行镜像 --- FROM debian:bookworm-slim RUN apt-get update apt-get install -y \ ca-certificates \ rm -rf /var/lib/apt/lists/* WORKDIR /app COPY --frombuild /app/app_server/app_server/serverpod_app /app/serverpod_app COPY --frombuild /app/app_server/app_server/config /app/config EXPOSE 8080 ENTRYPOINT [/app/serverpod_app, --roleall, --modeproduction]2. 本地构建并导出镜像# 镜像构建针对 linux/amd64 服务器架构dockerbuildx build--platformlinux/amd64-tmy_app_server:latest-fapp_server/app_server/Dockerfile.dockersave-oapp_server_image.tar my_app_server:latestdockerbuildx build--platformlinux/amd64-tmy_admin_server:latest-fadmin_server/admin_server/Dockerfile.dockersave-oadmin_server_image.tar my_admin_server:latest四、 服务器容器编排 (docker-compose.yml)在服务器部署目录/opt/server_cluster/下新建docker-compose.ymlversion:3.8services:postgres:image:postgres:15-alpinecontainer_name:shared_postgresrestart:alwaysenvironment:POSTGRES_DB:main_dbPOSTGRES_USER:db_userPOSTGRES_PASSWORD:secure_password_herevolumes:-postgres_data:/var/lib/postgresql/datanetworks:-cluster_netredis:image:redis:alpinecontainer_name:shared_redisrestart:alwaysnetworks:-cluster_netapp_server:image:my_app_server:latestcontainer_name:app_server_containerrestart:alwaysports:-8080:8080volumes:-./app_config:/app/configdepends_on:-postgres-redisnetworks:-cluster_netadmin_server:image:my_admin_server:latestcontainer_name:admin_server_containerrestart:alwaysports:-8081:8080volumes:-./admin_config:/app/configdepends_on:-postgres-redisnetworks:-cluster_netvolumes:postgres_data:networks:cluster_net:driver:bridge五、 反向代理与 HTTPS 配置 (Caddyfile)修改服务器端的/etc/caddy/Caddyfile# APP 端 Backend 接口域名 api.yourdomain.com { reverse_proxy localhost:8080 { header_up X-Real-IP {remote_host} header_up X-Forwarded-For {remote_host} header_up X-Forwarded-Proto {scheme} } } # 管理后台 Backend 接口域名 admin-api.yourdomain.com { reverse_proxy localhost:8081 { header_up X-Real-IP {remote_host} header_up X-Forwarded-For {remote_host} header_up X-Forwarded-Proto {scheme} } }部署启动命令# 启动容器集群dockercompose up-d# 执行数据库自动迁移dockerexec-itapp_server_container /app/serverpod_app --apply-migrations--modeproduction# 热重载 Caddysudosystemctl reload caddy
阅读完成 · 觉得有帮助?
咨询建站