🚀 快速安装

复制以下命令并运行,立即安装此 Skill:

npx @anthropic-ai/skills install supercent-io/skills-template/system-environment-setup

💡 提示:需要 Node.js 和 NPM

系统与环境配置

何时使用此技能

  • 新项目启动:进行初始环境配置
  • 团队新人 onboarding:统一新开发者的环境标准
  • 多服务架构:在本地运行多个微服务
  • 生产环境复现:在本地测试生产环境配置

操作指南

步骤 1: Docker Compose 配置

docker-compose.yml

version: '3.8'

services:
  # Web 应用服务
  web:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=development
      - DATABASE_URL=postgresql://postgres:password@db:5432/myapp
      - REDIS_URL=redis://redis:6379
    volumes:
      - .:/app
      - /app/node_modules
    depends_on:
      - db
      - redis
    command: npm run dev

  # PostgreSQL 数据库服务
  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      POSTGRES_DB: myapp
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql

  # Redis 缓存服务
  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data

  # Nginx (反向代理服务)
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - web

volumes:
  postgres_data:
  redis_data:

使用方法

# 启动所有服务
docker-compose up -d

# 查看日志
docker-compose logs -f web

# 仅重启特定服务
docker-compose restart web

# 停止并移除容器
docker-compose down

# 移除容器及其关联的数据卷
docker-compose down -v

步骤 2: 环境变量管理

.env.example

# 应用配置
NODE_ENV=development
PORT=3000
APP_URL=http://localhost:3000

# 数据库配置
DATABASE_URL=postgresql://postgres:password@localhost:5432/myapp
DATABASE_POOL_SIZE=10

# Redis 配置
REDIS_URL=redis://localhost:6379

# JWT 配置
ACCESS_TOKEN_SECRET=change-me-in-production-min-32-characters
REFRESH_TOKEN_SECRET=change-me-in-production-min-32-characters
TOKEN_EXPIRY=15m

# 邮件服务配置
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASSWORD=your-app-password

# 外部 API 密钥
STRIPE_SECRET_KEY=sk_test_xxx
STRIPE_PUBLISHABLE_KEY=pk_test_xxx
AWS_ACCESS_KEY_ID=AKIAXXXXXXX
AWS_SECRET_ACCESS_KEY=xxxxxxxx
AWS_REGION=us-east-1

.env (仅本地使用,需添加到 .gitignore):

# .gitignore 文件内容
.env
.env.local
.env.*.local

加载环境变量 (以 Node.js 为例):

import dotenv from 'dotenv';
import path from 'path';

// 加载 .env 文件
dotenv.config();

// 类型安全的环境变量接口定义
interface Env {
  NODE_ENV: 'development' | 'production' | 'test';
  PORT: number;
  DATABASE_URL: string;
  REDIS_URL: string;
  ACCESS_TOKEN_SECRET: string;
}

// 加载并验证环境变量的函数
function loadEnv(): Env {
  const required = ['DATABASE_URL', 'ACCESS_TOKEN_SECRET', 'REDIS_URL'];

  for (const key of required) {
    if (!process.env[key]) {
      throw new Error(`缺少必需的环境变量: ${key}`);
    }
  }

  return {
    NODE_ENV: (process.env.NODE_ENV as any) || 'development',
    PORT: parseInt(process.env.PORT || '3000'),
    DATABASE_URL: process.env.DATABASE_URL!,
    REDIS_URL: process.env.REDIS_URL!,
    ACCESS_TOKEN_SECRET: process.env.ACCESS_TOKEN_SECRET!
  };
}

export const env = loadEnv();

步骤 3: 开发容器 (VS Code)

.devcontainer/devcontainer.json

{
  "name": "Node.js 和 PostgreSQL 开发环境",
  "dockerComposeFile": "../docker-compose.yml",
  "service": "web",
  "workspaceFolder": "/app",

  "customizations": {
    "vscode": {
      "extensions": [
        "dbaeumer.vscode-eslint",
        "esbenp.prettier-vscode",
        "ms-azuretools.vscode-docker",
        "prisma.prisma"
      ],
      "settings": {
        "editor.formatOnSave": true,
        "editor.defaultFormatter": "esbenp.prettier-vscode",
        "eslint.validate": ["javascript", "typescript"]
      }
    }
  },

  "forwardPorts": [3000, 5432, 6379],

  "postCreateCommand": "npm install",

  "remoteUser": "node"
}

步骤 4: Makefile (便捷命令)

Makefile

.PHONY: help install dev build test clean docker-up docker-down migrate seed

help: ## 显示此帮助信息
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'

install: ## 安装项目依赖
	npm install

dev: ## 启动开发服务器
	npm run dev

build: ## 构建生产版本
	npm run build

test: ## 运行测试
	npm test

test-watch: ## 以监视模式运行测试
	npm test -- --watch

lint: ## 运行代码检查
	npm run lint

lint-fix: ## 自动修复代码检查问题
	npm run lint -- --fix

docker-up: ## 启动 Docker 服务
	docker-compose up -d

docker-down: ## 停止 Docker 服务
	docker-compose down

docker-logs: ## 查看 Docker 日志
	docker-compose logs -f

migrate: ## 运行数据库迁移
	npm run migrate

migrate-create: ## 创建新的数据库迁移文件
	@read -p "迁移名称: " name; \
	npm run migrate:create -- $$name

seed: ## 向数据库填充初始数据
	npm run seed

clean: ## 清理构建产物
	rm -rf dist node_modules coverage

reset: clean install ## 重置项目 (清理 + 重新安装依赖)

使用方法

make help         # 显示所有可用命令
make install      # 安装项目依赖
make dev          # 启动开发服务器
make docker-up    # 启动 Docker 服务

步骤 5: 基础设施即代码 (Terraform)

main.tf (以 AWS 为例):

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }

  # 配置远程状态存储 (S3)
  backend "s3" {
    bucket = "myapp-terraform-state"
    key    = "production/terraform.tfstate"
    region = "us-east-1"
  }
}

# 配置 AWS Provider
provider "aws" {
  region = var.aws_region
}

# 创建 VPC (虚拟私有云)
resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"

  tags = {
    Name        = "${var.project_name}-vpc"
    Environment = var.environment
  }
}

# 创建 RDS (PostgreSQL 实例)
resource "aws_db_instance" "postgres" {
  identifier           = "${var.project_name}-db"
  engine               = "postgres"
  engine_version       = "15.4"
  instance_class       = "db.t3.micro"
  allocated_storage    = 20
  storage_encrypted    = true

  db_name  = var.db_name
  username = var.db_username
  password = var.db_password

  vpc_security_group_ids = [aws_security_group.db.id]
  db_subnet_group_name   = aws_db_subnet_group.main.name

  backup_retention_period = 7
  skip_final_snapshot     = false
  final_snapshot_identifier = "${var.project_name}-final-snapshot"

  tags = {
    Name        = "${var.project_name}-db"
    Environment = var.environment
  }
}

# 创建 ECS (容器服务集群)
resource "aws_ecs_cluster" "main" {
  name = "${var.project_name}-cluster"

  # 启用容器监控
  setting {
    name  = "containerInsights"
    value = "enabled"
  }
}

# 创建负载均衡器
resource "aws_lb" "main" {
  name               = "${var.project_name}-alb"
  internal           = false
  load_balancer_type = "application"
  security_groups    = [aws_security_group.alb.id]
  subnets            = aws_subnet.public[*].id
}

variables.tf

variable "project_name" {
  description = "项目名称"
  type        = string
  default     = "myapp"
}

variable "environment" {
  description = "部署环境 (dev, staging, production)"
  type        = string
}

variable "aws_region" {
  description = "AWS 区域"
  type        = string
  default     = "us-east-1"
}

variable "db_username" {
  description = "数据库用户名"
  type        = string
  sensitive   = true # 标记为敏感信息
}

variable "db_password" {
  description = "数据库密码"
  type        = string
  sensitive   = true # 标记为敏感信息
}

输出格式

推荐的项目结构

project/
├── .devcontainer/
│   └── devcontainer.json
├── docker-compose.yml
├── Dockerfile
├── Makefile
├── .env.example
├── .gitignore
├── terraform/
│   ├── main.tf
│   ├── variables.tf
│   └── outputs.tf
└── README.md

约束条件

强制性规则 (必须遵守)

  1. 提供 .env.example 文件:清晰列出所有必需的环境变量。
  2. 配置 .gitignore:绝不能将 .env 文件提交到版本控制系统。
  3. 编写 README.md:详细说明安装和运行步骤。

禁止事项 (绝不能做)

  1. 禁止提交密钥:严禁将 .env、包含凭证的文件提交到代码库。
  2. 禁止硬编码配置:所有配置必须通过环境变量注入。

最佳实践

  1. Docker Compose:始终为本地开发使用 Docker Compose 来编排服务。
  2. 使用卷挂载:实现代码更改的即时同步,提升开发效率。
  3. 添加健康检查:确保服务在依赖就绪后才开始接受请求。

参考链接

元数据

版本信息

  • 当前版本:1.0.0
  • 最后更新:2025-01-01
  • 兼容平台:Claude, ChatGPT, Gemini

相关技能

标签

#环境配置 #Docker-Compose #开发环境 #IaC #Terraform #基础设施

使用示例

示例 1:基础用法

示例 2:高级用法

📄 原始文档

完整文档(英文):

https://skills.sh/supercent-io/skills-template/system-environment-setup

💡 提示:点击上方链接查看 skills.sh 原始英文文档,方便对照翻译。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。