网站要改版,经过一番调研选择 strapi 做为CMS 提供数据接口等服务 和 astro 开发前台页面。
一个前端开发搞定web项目的开发场景~
实现功能:
- 利用nginx反向代理将项目页面和后台管理配置到一个域名下面
- strapi 使用 postgres 数据库
- astro 使用 SSR
项目目录划分:
backend (strapi代码)
frontend (astro代码)
nginx (代理服务器)
docker-compose 文件如下:
version: '3'
name: "fullstack-app"
services:
# 数据库服务
strapiDB:
container_name: strapiPG
platform: linux/amd64 #for platform error on Apple M1 chips
restart: unless-stopped
env_file: .env
image: postgres:14.5-alpine
environment:
POSTGRES_USER: ${DATABASE_USERNAME}
POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
POSTGRES_DB: ${DATABASE_NAME}
volumes:
- strapipg-data:/var/lib/postgresql/data/ #using a volume
#- ./data:/var/lib/postgresql/data/ # if you want to use a bind folder
ports:
- "5432:5432"
networks:
- myapp # 加入到myapp网络
# 数据库管理
strapiAdminer:
container_name: strapiAdminer
image: adminer
restart: unless-stopped
ports:
- '9090:8080'
environment:
- ADMINER_DEFAULT_SERVER=strapiDB
networks:
- myapp
depends_on:
- strapiDB
# Strapi CMS
strapi:
container_name: mystrapi
build:
context: ./backend
dockerfile: ./docker/Dockerfile
image: mystrapisql:latest
restart: unless-stopped
env_file: .env
environment:
DATABASE_CLIENT: ${DATABASE_CLIENT}
DATABASE_HOST: strapiDB
DATABASE_PORT: ${DATABASE_PORT}
DATABASE_NAME: ${DATABASE_NAME}
DATABASE_USERNAME: ${DATABASE_USERNAME}
DATABASE_PASSWORD: ${DATABASE_PASSWORD}
JWT_SECRET: ${JWT_SECRET}
ADMIN_JWT_SECRET: ${ADMIN_JWT_SECRET}
APP_KEYS: ${APP_KEYS}
NODE_ENV: ${NODE_ENV}
volumes:
- ./backend/config:/opt/app/config
- ./backend/src:/opt/app/src
- ./backend/package.json:/opt/package.json
- ./backend/yarn.lock:/opt/yarn.lock
- ./backend/.env:/opt/app/.env
- ./backend/public/uploads:/opt/app/public/uploads
ports:
- "1337:1337"
networks:
- myapp
depends_on:
- strapiDB
# Astro
app:
container_name: myastro
build:
context: ./frontend
dockerfile: ./docker/Dockerfile
restart: unless-stopped
ports:
- "3000:4321"
environment:
- PUBLIC_STRAPI_URL=http://strapi:1337 #important
- PUBLIC_STRAPI_ASSETS_URL=https://www.shougongmi.com #important public host
networks:
- myapp
depends_on:
- strapi
nodejsapp:
container_name: mynodeapp
build:
context: ./nodejs
environment:
NODE_ENV: production
ports:
- 3001:3000
networks:
- myapp
nginx:
image: nginx:latest
ports:
- "80:80"
- "443:443"
volumes:
- $PWD/nginx/conf/logs:/var/log/nginx
- $PWD/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- $PWD/nginx/conf.d:/etc/nginx/conf.d
- $PWD/nginx/ssl:/etc/nginx/ssl/
- $PWD/nginx/html:/usr/share/nginx/html
networks:
- myapp
depends_on:
- app
volumes:
strapi-data:
strapipg-data:
# 创建自定义网络
networks:
myapp:
driver: bridge