本方案采用完全开源的软件栈,核心是使用Docker进行环境隔离与部署,Nextcloud作为文件存储与管理平台,Mayan EDMS作为专业的文档管理系统,并通过Nginx提供统一的Web访问入口。这套组合能实现从档案扫描、上传、分类、检索到权限管理的完整闭环,且无需支付任何软件授权费用。
你需要一台运行Linux的服务器(物理机或云服务器均可),建议配置为:
以root用户登录你的服务器,完成系统更新和Docker环境的搭建。
执行以下命令:
``` apt update && apt upgrade -y apt install -y curl wget vim gnupg2 apt-transport-https ca-certificates software-properties-common ```Docker是容器化部署的核心,Docker Compose用于编排多容器应用。
安装Docker Engine:
``` curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh systemctl start docker && systemctl enable docker ```安装Docker Compose:
``` curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose ```验证安装:
``` docker --version docker-compose --version ```Nextcloud负责原始扫描件(如PDF、图片)的集中存储和初步管理。
在服务器上创建所有服务的根目录:
``` mkdir -p /data/archive_solution cd /data/archive_solution mkdir nextcloud && cd nextcloud ```创建 docker-compose.yml 文件:
``` vim docker-compose.yml ```将以下完整配置复制进去:
``` version: '3' services: nextcloud-db: image: mariadb:10.6 container_name: nextcloud-db restart: always environment: - MYSQL_ROOT_PASSWORD=YourStrongDBRootPass123! - MYSQL_PASSWORD=YourNextcloudDBPass123! - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud volumes: - ./db_data:/var/lib/mysql nextcloud-app: image: nextcloud:latest container_name: nextcloud-app restart: always ports: - "8080:80" depends_on: - nextcloud-db environment: - MYSQL_HOST=nextcloud-db - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud - MYSQL_PASSWORD=YourNextcloudDBPass123! - NEXTCLOUD_ADMIN_USER=archive_admin - NEXTCLOUD_ADMIN_PASSWORD=YourStrongAdminPass123! volumes: - ./app_data:/var/www/html/data - ./config:/var/www/html/config - ./apps:/var/www/html/apps ```保存并退出(按ESC,输入:wq,回车)。
在 /data/archive_solution/nextcloud 目录下执行:
``` docker-compose up -d ```等待约1-2分钟,然后在浏览器访问 http://你的服务器IP:8080。使用配置中设置的用户名(archive_admin)和密码(YourStrongAdminPass123!)登录。首次登录会完成初始化,进入Nextcloud管理后台。
关键操作:进入“设置”->“基本设置”,在“受信任的域名”中添加你的服务器IP和计划使用的域名(如 archive.your-company.com)。
Mayan EDMS是专业的档案内容管理核心,负责档案的元数据定义、索引、检索和版本控制。
返回根目录并创建Mayan的文件夹:
``` cd /data/archive_solution mkdir mayan && cd mayan ```创建 docker-compose.yml 文件:
``` vim docker-compose.yml ```将以下完整配置复制进去:
``` version: '3.4' services: redis: image: redis:6-alpine container_name: mayan-redis restart: always postgres: image: postgres:13-alpine container_name: mayan-postgres restart: always environment: POSTGRES_DB: mayan POSTGRES_USER: mayan POSTGRES_PASSWORD: YourMayanDBPass123! volumes: - ./postgres_data:/var/lib/postgresql/data mayan: image: mayanedms/mayanedms:latest container_name: mayan-app restart: always depends_on: - redis - postgres ports: - "8000:8000" environment: MAYAN_DATABASE_ENGINE: django.db.backends.postgresql MAYAN_DATABASE_HOST: postgres MAYAN_DATABASE_NAME: mayan MAYAN_DATABASE_PASSWORD: YourMayanDBPass123! MAYAN_DATABASE_USER: mayan MAYAN_REDIS_HOST: redis volumes: - ./media:/var/lib/mayan ```
保存并退出。
在 /data/archive_solution/mayan 目录下执行:
``` docker-compose up -d ```启动过程较慢,首次需要下载镜像并初始化数据库,请等待3-5分钟。然后访问 http://你的服务器IP:8000。
初始化设置:
创建文档类型:在“管理”->“文档类型”中,点击“新建文档类型”。例如,创建“员工入职档案”、“劳动合同”、“学历证明”等。为每种类型定义对应的元数据(Metadata),如“员工工号”、“姓名”、“部门”、“合同有效期”等。
配置存储路径:在“管理”->“存储路径”中,系统已有一个默认路径。你可以根据“文档类型”或“部门”创建新的存储路径规则,实现文件的自动归类。
配置全文检索:在“管理”->“索引”中,创建索引。例如,创建一个名为“员工档案索引”的索引,将“员工工号”、“姓名”等元数据字段添加进去。然后重建索引,使历史文档可被检索。
为了让用户通过一个统一的域名访问,并启用HTTPS,我们需要用Nginx将Nextcloud和Mayan整合起来。
在服务器上安装Nginx:
``` apt install -y nginx ```使用Certbot申请免费的Let‘s Encrypt SSL证书(假设你的域名已解析到该服务器):
``` apt install -y certbot python3-certbot-nginx certbot --nginx -d archive.your-company.com --email your-email@example.com --agree-tos --no-eff-email ```按照提示操作,证书会自动配置到Nginx。
编辑Nginx的站点配置文件:
``` vim /etc/nginx/sites-available/archive ```将以下配置复制进去,请将 archive.your-company.com 替换为你的实际域名。
``` server { listen 80; server_name archive.your-company.com; 强制跳转到HTTPS return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name archive.your-company.com; ssl_certificate /etc/letsencrypt/live/archive.your-company.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/archive.your-company.com/privkey.pem; 其他SSL优化配置可从Certbot生成的文件中继承 代理Nextcloud (用于文件上传/下载) location /nextcloud/ { proxy_pass http://127.0.0.1:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; Nextcloud特定头部 proxy_set_header Front-End-Https on; client_max_body_size 10G; 允许上传大文件 } 代理Mayan EDMS (核心档案管理) location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 300; proxy_connect_timeout 300; } } ```保存并退出。然后创建软链接并测试配置:
``` ln -s /etc/nginx/sites-available/archive /etc/nginx/sites-enabled/ nginx -t 测试配置语法 systemctl reload nginx 重载Nginx使配置生效 ```假设你要录入员工“张三”的入职材料。
在Mayan的搜索框中,输入“张三”或工号“10001”,即可立即找到这份档案。点击文档,可以查看所有关联的原始文件(通过链接从Nextcloud获取),并查看完整的元数据信息。
核心数据在三个目录:
编写一个简单的备份脚本 /root/backup_archive.sh:
``` !/bin/bash BACKUP_DIR="/backup/archive_$(date +%Y%m%d_%H%M%S)" mkdir -p $BACKUP_DIR 停止服务,确保数据一致性 cd /data/archive_solution/nextcloud && docker-compose stop cd /data/archive_solution/mayan && docker-compose stop 备份数据目录 tar -czf $BACKUP_DIR/nextcloud_app_data.tar.gz -C /data/archive_solution/nextcloud app_data tar -czf $BACKUP_DIR/nextcloud_db_data.tar.gz -C /data/archive_solution/nextcloud db_data tar -czf $BACKUP_DIR/mayan_media.tar.gz -C /data/archive_solution/mayan media tar -czf $BACKUP_DIR/mayan_postgres_data.tar.gz -C /data/archive_solution/mayan postgres_data 重新启动服务 cd /data/archive_solution/nextcloud && docker-compose start cd /data/archive_solution/mayan && docker-compose start 删除7天前的备份 find /backup -type d -name "archive_" -mtime +7 -exec rm -rf {} \; ```给脚本添加执行权限并添加到定时任务(每天凌晨2点执行):
``` chmod +x /root/backup_archive.sh crontab -e 添加一行:0 2 /root/backup_archive.sh ```更新Nextcloud和Mayan到最新版本:
``` cd /data/archive_solution/nextcloud docker-compose pull docker-compose up -d cd /data/archive_solution/mayan docker-compose pull docker-compose up -d ```更新前请务必执行一次完整的备份。