网站首页/ 信息中心/ 档案百科/

档案软件容器化部署实战指南:从零到一的生产级方案

发布时间:2026年08月20日 05:40:15 浏览量:0

一、环境准备与基础镜像选择

操作系统要求:Linux发行版(Ubuntu 20.04 LTS或CentOS 8),内核版本4.15以上,已安装Docker 19.03+和Docker Compose 1.27+。

验证环境命令:

``` docker --version docker-compose --version ```

创建项目目录结构:

``` mkdir -p archive-system/{config,data,logs,backup} cd archive-system ```

基础镜像选择原则:根据档案软件技术栈决定。以Java Spring Boot应用为例:

数据库镜像选择:

二、Dockerfile编写规范

在项目根目录创建Dockerfile:

``` FROM openjdk:11-jre-slim LABEL maintainer="your-team@company.com" 设置时区 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ echo "Asia/Shanghai" > /etc/timezone 创建非root用户 RUN groupadd -r appuser && useradd -r -g appuser appuser 安装必要工具 RUN apt-get update && \ apt-get install -y --no-install-recommends \ curl \ vim \ && rm -rf /var/lib/apt/lists/ 创建工作目录 WORKDIR /app 复制应用文件 COPY target/archive-system.jar /app/ COPY config/application-docker.yml /app/config/ 设置文件权限 RUN chown -R appuser:appuser /app USER appuser 健康检查 HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD curl -f http://localhost:8080/actuator/health || exit 1 暴露端口 EXPOSE 8080 启动命令 ENTRYPOINT ["java", "-jar", "archive-system.jar", \ "--spring.config.location=file:/app/config/application-docker.yml"] ```

关键配置说明

application-docker.yml配置文件内容:

``` server: port: 8080 servlet: context-path: /archive spring: datasource: url: jdbc:postgresql://postgres:5432/archive_db username: ${DB_USERNAME:archive_user} password: ${DB_PASSWORD:your_secure_password} driver-class-name: org.postgresql.Driver hikari: maximum-pool-size: 10 minimum-idle: 5 redis: host: redis port: 6379 password: ${REDIS_PASSWORD:} database: 0 servlet: multipart: max-file-size: 50MB max-request-size: 100MB archive: storage: path: /data/archive/files backup-path: /data/archive/backup security: encryption-key: ${ENCRYPTION_KEY:} ```

三、Docker Compose编排配置

创建docker-compose.yml:

``` version: '3.8' services: postgres: image: postgres:13-alpine container_name: archive-postgres environment: POSTGRES_DB: archive_db POSTGRES_USER: archive_user POSTGRES_PASSWORD: ${DB_PASSWORD:-ChangeMe123} volumes: - postgres_data:/var/lib/postgresql/data - ./backup:/backup networks: - archive-network restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -U archive_user"] interval: 10s timeout: 5s retries: 5 redis: image: redis:6-alpine container_name: archive-redis command: redis-server --requirepass ${REDIS_PASSWORD:-RedisPass123} volumes: - redis_data:/data networks: - archive-network restart: unless-stopped archive-app: build: . container_name: archive-application depends_on: postgres: condition: service_healthy redis: condition: service_started environment: DB_PASSWORD: ${DB_PASSWORD:-ChangeMe123} REDIS_PASSWORD: ${REDIS_PASSWORD:-RedisPass123} ENCRYPTION_KEY: ${ENCRYPTION_KEY:-your-encryption-key-here} volumes: - ./data/files:/data/archive/files - ./data/backup:/data/archive/backup - ./logs:/app/logs ports: - "8080:8080" networks: - archive-network restart: unless-stopped volumes: postgres_data: redis_data: networks: archive-network: driver: bridge ```

四、环境变量配置管理

创建.env文件(不提交到版本控制):

``` 数据库配置 DB_PASSWORD=YourStrongPassword@2023 Redis配置 REDIS_PASSWORD=RedisSecurePass@2023 应用加密密钥(至少32位) ENCRYPTION_KEY=your-32-characters-long-secure-encryption-key 可选:外部服务配置 SMTP_HOST=smtp.yourcompany.com SMTP_PORT=587 SMTP_USERNAME=archive@yourcompany.com SMTP_PASSWORD=EmailPassword@2023 ```

安全注意事项

档案软件容器化部署实战指南:从零到一的生产级方案

生成强密码命令:

``` 生成数据库密码 openssl rand -base64 32 生成加密密钥 openssl rand -hex 32 ```

五、构建与部署流程

5.1 构建Docker镜像

在项目根目录执行:

``` 构建应用镜像 docker-compose build archive-app 或构建所有服务镜像 docker-compose build ```

5.2 启动完整服务栈

``` 启动所有服务(后台运行) docker-compose up -d 查看服务状态 docker-compose ps 查看应用日志 docker-compose logs -f archive-app ```

5.3 数据库初始化

创建数据库初始化脚本init.sql:

``` CREATE TABLE IF NOT EXISTS archive_documents ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), document_number VARCHAR(100) NOT NULL UNIQUE, title VARCHAR(500) NOT NULL, category VARCHAR(100), storage_path VARCHAR(1000), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_by VARCHAR(100), metadata JSONB ); CREATE INDEX idx_document_number ON archive_documents(document_number); CREATE INDEX idx_category ON archive_documents(category); CREATE INDEX idx_created_at ON archive_documents(created_at); -- 创建审计表 CREATE TABLE IF NOT EXISTS archive_audit_logs ( id SERIAL PRIMARY KEY, action VARCHAR(50) NOT NULL, document_id UUID REFERENCES archive_documents(id), user_id VARCHAR(100), ip_address INET, timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP, details TEXT ); ```

执行初始化:

``` 复制SQL文件到容器 docker cp init.sql archive-postgres:/tmp/init.sql 执行SQL脚本 docker exec -it archive-postgres psql -U archive_user -d archive_db -f /tmp/init.sql ```

六、生产环境优化配置

6.1 资源限制配置

在docker-compose.yml中添加资源限制:

``` services: archive-app: deploy: resources: limits: memory: 2G cpus: '2' reservations: memory: 1G cpus: '0.5' ```

6.2 日志配置优化

创建logback-spring.xml:

``` ${LOG_PATH}/${LOG_FILE}.log ${LOG_PATH}/${LOG_FILE}.%d{yyyy-MM-dd}.log 30 3GB %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n ```

6.3 健康检查端点配置

在application.yml中添加:

``` management: endpoints: web: exposure: include: health,info,metrics endpoint: health: show-details: always health: db: enabled: true redis: enabled: true ```

七、备份与恢复策略

7.1 数据库备份脚本

创建backup.sh:

``` !/bin/bash BACKUP_DIR="/backup" DATE=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="$BACKUP_DIR/archive_db_$DATE.sql.gz" docker exec archive-postgres pg_dump -U archive_user archive_db | gzip > $BACKUP_FILE 保留最近7天备份 find $BACKUP_DIR -name "archive_db_.sql.gz" -mtime +7 -delete ```

7.2 文件存储备份

``` !/bin/bash DATA_DIR="./data/files" BACKUP_DIR="./data/backup" DATE=$(date +%Y%m%d) 创建增量备份 tar -czf "$BACKUP_DIR/files_$DATE.tar.gz" --listed-incremental="$BACKUP_DIR/snapshot.snar" $DATA_DIR ```

7.3 恢复数据库

``` 停止应用 docker-compose stop archive-app 恢复数据库 gunzip -c backup_file.sql.gz | docker exec -i archive-postgres psql -U archive_user archive_db 重启应用 docker-compose start archive-app ```

八、监控与维护

8.1 常用维护命令

``` 查看容器资源使用 docker stats 进入应用容器 docker exec -it archive-app /bin/bash 查看数据库连接数 docker exec archive-postgres psql -U archive_user archive_db -c "SELECT count() FROM pg_stat_activity;" 清理无用镜像 docker image prune -a 清理停止的容器 docker container prune ```

8.2 性能监控配置

在docker-compose.yml中添加监控:

``` services: prometheus: image: prom/prometheus:latest volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml ports: - "9090:9090" networks: - archive-network grafana: image: grafana/grafana:latest environment: GF_SECURITY_ADMIN_PASSWORD: admin volumes: - grafana_data:/var/lib/grafana ports: - "3000:3000" networks: - archive-network ```

8.3 故障排查步骤

应用无法启动时:

  1. 检查容器状态:docker-compose ps
  2. 查看应用日志:docker-compose logs archive-app
  3. 检查数据库连接:docker exec archive-postgres pg_isready -U archive_user
  4. 验证网络连通性:docker exec archive-app curl -v http://postgres:5432
  5. 检查端口占用:netstat -tlnp | grep 8080

九、升级与回滚

9.1 平滑升级流程

``` 1. 备份当前数据 ./backup.sh 2. 拉取最新代码 git pull origin main 3. 重新构建镜像 docker-compose build archive-app 4. 重启应用(保持其他服务运行) docker-compose up -d --no-deps archive-app 5. 验证新版本 curl http://localhost:8080/archive/actuator/health ```

9.2 快速回滚方案

``` 1. 停止当前容器 docker-compose stop archive-app 2. 启动旧版本容器 docker run -d --name archive-app-old \ --network archive-system_archive-network \ -p 8080:8080 \ -v ./data/files:/data/archive/files \ your-registry/archive-app:previous-version 或回滚到上一个Compose版本 docker-compose -f docker-compose-previous.yml up -d ```

十、安全加固措施

10.1 网络隔离配置

``` 创建自定义网络 docker network create --internal archive-internal 只允许内部通信的服务 services: postgres: networks: archive-internal: aliases: - postgres.internal 应用服务同时连接内外网 archive-app: networks: archive-internal: default: ```

10.2 镜像安全扫描

``` 使用Trivy扫描镜像漏洞 docker run --rm \ -v /var/run/docker.sock:/var/run/docker.sock \ aquasec/trivy:latest image archive-app:latest 使用Docker Scout docker scout quickview archive-app:latest ```

10.3 定期安全更新

``` 更新基础镜像 docker pull openjdk:11-jre-slim docker pull postgres:13-alpine docker pull redis:6-alpine 重建服务 docker-compose build --no-cache docker-compose up -d ```
从一团乱麻到井井有条:中学档案制度建设实操案例分享
从一团乱麻到井井有条:中学档案制度建设实操案例分享
害,说起来你们可能不信,去年我帮在郊区公办中学当教务主任的表姐搭档案体系,前前后后踩的坑连起来能绕学校操场三圈,最后搞出来的成品还拿了教育局的市级档案管理示范奖,今天就把这套我亲测能用的中学档案制度建...
2026年08月20日 05:40:15
微信咨询
电话联系
QQ客服
微信咨询一对一服务
服务热线: 028-8744 4417
QQ客服: 2305721818