部署档案软件B/S版革命历史版,需要准备标准的LAMP或LNMP环境。以下是具体组件版本要求:
以Ubuntu 20.04为例,执行以下命令安装基础环境:
``` sudo apt update sudo apt install nginx mysql-server php7.4-fpm php7.4-mysql php7.4-gd php7.4-zip php7.4-mbstring php7.4-xml -y ```从官方仓库获取最新版本:
``` cd /var/www sudo wget https://github.com/archives-software/revolution-history-bs/releases/download/v2.1.0/revolution-history-bs-2.1.0.zip sudo unzip revolution-history-bs-2.1.0.zip sudo mv revolution-history-bs-2.1.0 archives sudo chown -R www-data:www-data archives ```创建数据库和用户:
``` mysql -u root -p CREATE DATABASE archives_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'archives_user'@'localhost' IDENTIFIED BY 'YourStrongPassword123!'; GRANT ALL PRIVILEGES ON archives_db. TO 'archives_user'@'localhost'; FLUSH PRIVILEGES; EXIT; ```创建配置文件 /etc/nginx/sites-available/archives:
``` server { listen 80; server_name your-domain.com; root /var/www/archives/public; index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known). { deny all; } } ```启用站点并重启Nginx:
``` sudo ln -s /etc/nginx/sites-available/archives /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl restart nginx ```复制环境配置文件并修改:
``` cd /var/www/archives sudo cp .env.example .env sudo nano .env ```修改以下关键配置项:
``` APP_URL=http://your-domain.com DB_HOST=localhost DB_DATABASE=archives_db DB_USERNAME=archives_user DB_PASSWORD=YourStrongPassword123! ```生成应用密钥并安装依赖:
``` sudo php artisan key:generate sudo composer install --no-dev sudo php artisan migrate --seed ```登录后台管理界面(默认地址:/admin),进入"分类管理"模块。创建革命历史档案分类结构:
分类配置示例代码(可通过API批量导入):
``` { "categories": [ { "name": "土地革命时期", "code": "T001", "children": [ { "name": "文件类", "code": "T001-01", "metadata_template": "revolution_document" } ] } ] } ```在"系统设置-元数据管理"中,为不同档案类型定义专用字段:
元数据配置示例(JSON格式):
``` { "template_name": "revolution_document", "fields": [ { "field_name": "archive_number", "display_name": "档案编号", "type": "string", "required": true, "validation": "regex:/^[A-Z]{2}\\d{6}$/" }, { "field_name": "form_date", "display_name": "形成时间", "type": "date", "required": true } ] } ```修改存储配置 config/filesystems.php:
``` 'archives' => [ 'driver' => 'local', 'root' => storage_path('app/archives'), 'url' => env('APP_URL').'/storage/archives', 'visibility' => 'private', ], ```设置文件上传限制(修改 .env 文件):
``` UPLOAD_MAX_SIZE=204800 ALLOWED_EXTENSIONS=pdf,jpg,png,tiff,mp4,mp3 ```
安装Elasticsearch并集成到系统中:
``` sudo apt install elasticsearch sudo systemctl start elasticsearch sudo systemctl enable elasticsearch ```安装Laravel Scout扩展:
``` composer require laravel/scout composer require elasticsearch/elasticsearch ```配置模型索引(以档案模型为例):
``` $this->title, 'content' => $this->content, 'metadata' => json_encode($this->metadata), 'category' => $this->category->name ]; } } ```创建时间轴数据接口:
``` // routes/api.php Route::get('/api/timeline', 'TimelineController@index'); // TimelineController.php public function index(Request $request) { $startYear = $request->input('start', 1921); $endYear = $request->input('end', 1949); $archives = Archive::whereBetween('year', [$startYear, $endYear]) ->orderBy('year') ->orderBy('month') ->orderBy('day') ->get() ->groupBy(function($item) { return $item->year; }); return response()->json($archives); } ```前端时间轴组件(Vue.js示例):
```{{ archive.description }}
创建Excel导入处理器:
``` // app/Imports/ArchivesImport.php class ArchivesImport implements ToModel, WithHeadingRow { public function model(array $row) { return new Archive([ 'archive_number' => $row['档案编号'], 'title' => $row['题名'], 'year' => $row['年度'], 'category_id' => Category::where('code', $row['分类代码'])->first()->id, 'metadata' => json_encode([ 'form_date' => $row['形成时间'], 'author' => $row['责任者'], 'pages' => $row['页数'], 'security_level' => $row['密级'] ]) ]); } } ```创建导入路由和控制器:
``` // ImportController.php public function import(Request $request) { $request->validate([ 'file' => 'required|mimes:xlsx,xls' ]); Excel::import(new ArchivesImport, $request->file('file')); return redirect()->back()->with('success', '档案数据导入成功'); } ```创建备份脚本 /usr/local/bin/backup-archives.sh:
``` !/bin/bash BACKUP_DIR="/backup/archives" DATE=$(date +%Y%m%d_%H%M%S) DB_NAME="archives_db" 备份数据库 mysqldump -u archives_user -pYourStrongPassword123! $DB_NAME > $BACKUP_DIR/db_$DATE.sql gzip $BACKUP_DIR/db_$DATE.sql 备份上传文件 tar -czf $BACKUP_DIR/files_$DATE.tar.gz /var/www/archives/storage/app/archives 保留最近30天备份 find $BACKUP_DIR -name ".gz" -mtime +30 -delete ```设置定时任务:
``` crontab -e 每天凌晨2点执行备份 0 2 /usr/local/bin/backup-archives.sh ```防火墙配置示例:
``` sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow from 192.168.1.0/24 to any port 22 sudo ufw enable ```Nginx优化配置:
``` /etc/nginx/nginx.conf worker_processes auto; worker_connections 4096; keepalive_timeout 65; gzip on; gzip_types text/plain text/css application/json application/javascript; ```PHP-FPM优化:
``` /etc/php/7.4/fpm/pool.d/www.conf pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 ```OPcache启用:
``` /etc/php/7.4/mods-available/opcache.ini opcache.enable=1 opcache.memory_consumption=256 opcache.max_accelerated_files=10000 opcache.validate_timestamps=0 ```完成以上所有配置后,访问您的域名,系统将显示革命历史档案管理平台首页。通过/admin路径登录后台,即可开始档案数据的录入、管理和利用工作。