一个稳定、易用的档案网站系统需要清晰的技术架构。我们选择基于LAMP(Linux, Apache, MySQL, PHP)栈,因为它成熟、资源丰富且完全免费。
使用Ubuntu 22.04 LTS作为操作系统,长期支持版本更稳定。通过SSH登录你的云服务器或本地虚拟机后,执行以下命令更新系统并安装核心组件:
```bash
sudo apt update && sudo apt upgrade -y
sudo apt install apache2 mysql-server php8.1 libapache2-mod-php php-mysql php-gd php-curl php-zip php-xml -y
```
验证安装:分别访问 http://你的服务器IP 查看Apache欢迎页,执行 php -v 查看PHP版本,执行 sudo mysql --version 查看MySQL版本。
为档案系统创建专用的数据库和用户,提高安全性。
```bash
sudo mysql
```
进入MySQL命令行后,依次执行:
```sql
CREATE DATABASE archive_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'archive_user'@'localhost' IDENTIFIED BY '你的强密码';
GRANT ALL PRIVILEGES ON archive_db. TO 'archive_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
```
请将‘你的强密码’替换为至少12位包含大小写字母、数字和特殊字符的密码。
我们选用开源的“ArchiveBox”作为核心,它功能全面且支持Web界面。
在服务器的Web目录进行操作:
```bash
cd /var/www/html
sudo wget https://github.com/ArchiveBox/ArchiveBox/archive/refs/tags/v0.6.3.tar.gz
sudo tar -xzf v0.6.3.tar.gz
sudo mv ArchiveBox-0.6.3 archive_system
sudo chown -R www-data:www-data archive_system
```
关键操作:最后一步将目录所有者改为Apache运行用户(www-data),否则会出现权限错误。
创建专属的站点配置文件,实现更规范的访问。
```bash
sudo nano /etc/apache2/sites-available/archive.conf
```
将以下配置完整粘贴进去,注意替换你的服务器域名或IP:
```apache
ServerAdmin admin@your-domain.com
ServerName 你的服务器域名或IP
DocumentRoot /var/www/html/archive_system
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
ErrorLog ${APACHE_LOG_DIR}/archive_error.log
CustomLog ${APACHE_LOG_DIR}/archive_access.log combined
```
保存退出后,启用该站点并重写模块:
```bash
sudo a2ensite archive.conf
sudo a2enmod rewrite
sudo systemctl reload apache2
```
ArchiveBox基于Python,需要安装其依赖包。
```bash
cd /var/www/html/archive_system
sudo apt install python3-pip python3-venv -y
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip wheel setuptools
pip install archivebox
```
初始化ArchiveBox,并配置数据库连接:
```bash
archivebox init
```
编辑配置文件:
```bash
nano /var/www/html/archive_system/ArchiveBox.conf
```
找到数据库配置部分,修改为:
```ini
DATABASE_ENGINE = 'mysql'
DATABASE_NAME = 'archive_db'
DATABASE_USER = 'archive_user'
DATABASE_PASSWORD = '你的强密码'
DATABASE_HOST = 'localhost'
DATABASE_PORT = '3306'
```
保存后,执行数据库迁移:
```bash
archivebox manage migrate
```
创建一个超级用户来管理Web后台:
```bash
archivebox manage createsuperuser
```
按提示输入用户名、邮箱和密码。然后启动ArchiveBox的Web服务器:
```bash
archivebox server 0.0.0.0:8000
```
此时,可以通过 http://你的服务器IP:8000 访问后台,使用刚创建的账号登录。
设置后台服务常驻:避免SSH断开后服务停止。创建Systemd服务:
```bash
sudo nano /etc/systemd/system/archivebox.service
```
粘贴以下内容:
```ini
[Unit]
Description=ArchiveBox Web Service
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/html/archive_system
Environment="PATH=/var/www/html/archive_system/venv/bin"
ExecStart=/var/www/html/archive_system/venv/bin/archivebox server 0.0.0.0:8000
Restart=always
[Install]
WantedBy=multi-user.target
```
启动并设置开机自启:
```bash
sudo systemctl start archivebox
sudo systemctl enable archivebox
```
ArchiveBox支持多种添加方式。最常用的是通过Web界面添加单个URL,或在服务器端通过命令行批量添加。
通过命令行批量添加URL列表:
首先创建一个文本文件,每行一个URL:
```bash
nano urls_to_archive.txt
```
添加内容如:
```
https://example.com/important-document
https://example.org/report-2023
```

然后执行归档命令:
```bash
cd /var/www/html/archive_system
source venv/bin/activate
archivebox add < urls_to_archive.txt
```
系统会自动抓取网页内容、截图、生成PDF等,具体输出格式在 ArchiveBox.conf 中配置。
档案数据至关重要,必须定期备份。备份主要包含两部分:MySQL数据库和归档的原始文件。
创建数据库备份脚本:
```bash
sudo nano /usr/local/bin/backup_archive_db.sh
```
脚本内容:
```bash
!/bin/bash
BACKUP_DIR="/backup/archive"
DATE=$(date +%Y%m%d_%H%M%S)
mysqldump -u archive_user -p'你的强密码' archive_db | gzip > $BACKUP_DIR/db_backup_$DATE.sql.gz
保留最近7天的备份
find $BACKUP_DIR -name "db_backup_.sql.gz" -mtime +7 -delete
```
赋予执行权限并创建备份目录:
```bash
sudo chmod +x /usr/local/bin/backup_archive_db.sh
sudo mkdir -p /backup/archive
sudo chown www-data:www-data /backup/archive
```
备份归档文件:归档文件默认位于 /var/www/html/archive_system/data 下,使用rsync同步到远程存储或另一块硬盘:
```bash
sudo nano /usr/local/bin/backup_archive_data.sh
```
脚本内容(示例为备份到另一目录):
```bash
!/bin/bash
SOURCE="/var/www/html/archive_system/data/"
TARGET="/backup/archive/data/"
rsync -av --delete $SOURCE $TARGET
```
通过Cron设置每日自动备份:
```bash
sudo crontab -e
```
在末尾添加:
```
0 2 /usr/local/bin/backup_archive_db.sh
0 3 /usr/local/bin/backup_archive_data.sh
```
这表示每天凌晨2点备份数据库,3点备份数据文件。
配置防火墙:只开放必要的端口(HTTP 80, 后台管理 8000)。
```bash
sudo ufw allow 80/tcp
sudo ufw allow 8000/tcp
sudo ufw enable
```
修改Apache默认配置,隐藏版本信息:
```bash
sudo nano /etc/apache2/conf-available/security.conf
```
找到并修改以下两行:
```apache
ServerTokens Prod
ServerSignature Off
```
保存后重启Apache:sudo systemctl restart apache2。
为Web后台管理界面(8000端口)设置基础认证:为后台再加一层密码保护。
```bash
sudo apt install apache2-utils
sudo htpasswd -c /etc/apache2/.htpasswd_archive 你的后台用户名
```
输入两次密码。然后修改ArchiveBox的Systemd服务文件,在ExecStart行前添加环境变量,强制ArchiveBox只监听本地,再通过Apache反向代理并添加认证:
修改服务文件让ArchiveBox只运行在本地:将ExecStart行改为 ExecStart=/var/www/html/archive_system/venv/bin/archivebox server 127.0.0.1:8000,并重载服务。
然后配置Apache代理:
```bash
sudo a2enmod proxy proxy_http
sudo nano /etc/apache2/sites-available/archive_admin.conf
```
添加一个新的虚拟主机配置(监听8000端口):
```apache
ServerAdmin admin@your-domain.com
DocumentRoot /var/www/html
AuthType Basic
AuthName "Restricted Access"
AuthUserFile /etc/apache2/.htpasswd_archive
Require valid-user
ProxyPass http://127.0.0.1:8000/
ProxyPassReverse http://127.0.0.1:8000/
ErrorLog ${APACHE_LOG_DIR}/archive_admin_error.log
CustomLog ${APACHE_LOG_DIR}/archive_admin_access.log combined
```
启用站点并重启Apache:
```bash
sudo a2ensite archive_admin.conf
sudo systemctl restart apache2
```
现在访问 http://你的服务器IP:8000 需要输入两层密码:第一层是刚设置的htpasswd密码,第二层是ArchiveBox的超级用户密码。
调整MySQL配置:针对档案系统读多写少的特点进行优化。
```bash
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
```
在[mysqld]部分添加或修改:
```ini
innodb_buffer_pool_size = 256M
query_cache_type = 1
query_cache_size = 64M
key_buffer_size = 128M
max_connections = 100
```
保存后重启MySQL:sudo systemctl restart mysql。
启用Apache缓存与压缩:
```bash
sudo a2enmod cache cache_disk deflate expires headers
sudo systemctl restart apache2
```
在站点配置文件 archive.conf 的块内添加:
```apache
启用压缩
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript
设置缓存过期时间
ExpiresActive On
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType text/css "access plus 1 week"
```
至此,一个具备完整功能、安全可控且性能经过优化的档案网站系统已部署完成。你可以通过Web界面管理档案,通过命令行进行批量操作,并通过定时任务确保数据安全。后续可根据需要,在ArchiveBox.conf中进一步配置归档深度、文件格式等高级参数。