所有操作基于CentOS7.9/Ubuntu22.04操作系统,服务器最低配置为4核8G、100G系统盘SSD、500G数据盘SSD(按年档案增量100G预估扩容)。
执行以下命令一键安装所需依赖:
``` CentOS执行 yum install -y java-1.8.0-openjdk nginx mysql-server wget net-tools rsync crontabs Ubuntu执行 apt install -y openjdk-8-jdk nginx mysql-server wget net-tools rsync cron ```安装后校验版本:Java1.8、MySQL5.7/8.0、Nginx1.20及以上即为合格。
创建启动脚本/opt/archive/scripts/start.sh,内容如下,必须固定Xms和Xmx数值一致,避免JVM动态调整内存导致卡顿:
``` !/bin/bash 提前创建日志和dump目录:mkdir -p /opt/archive/{logs,dump,scripts} nohup java -Xms4G -Xmx4G -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512M \ -XX:+UseG1GC -XX:MaxGCPauseMillis=200 \ -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/archive/dump/ \ -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/opt/archive/logs/gc.log \ -jar /opt/archive/archive-system.jar --spring.profiles.active=prod > /dev/null 2>&1 & echo $! > /opt/archive/run.pid ```执行chmod +x /opt/archive/scripts/start.sh赋予执行权限。
修改/etc/my.cnf(CentOS)或/etc/mysql/mysql.conf.d/mysqld.cnf(Ubuntu),完整配置如下:
``` [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 max_connections=1000 wait_timeout=1800 interactive_timeout=1800 max_allowed_packet=1024M innodb_buffer_pool_size设为服务器内存的50%,8G服务器设为4G innodb_buffer_pool_size=2G innodb_log_file_size=512M innodb_flush_log_at_trx_commit=1 sync_binlog=1 slow_query_log=1 slow_query_log_file=/var/log/mysql/slow.log long_query_time=2 sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION ```修改后执行systemctl restart mysqld重启MySQL生效。
修改/etc/nginx/conf.d/archive.conf,完整配置如下,替换your-domain.com为实际域名:
``` server { listen 80; server_name your-domain.com; client_max_body_size 1024M; proxy_connect_timeout 300s; proxy_send_timeout 300s; proxy_read_timeout 300s; 前端静态资源 location / { root /opt/archive/front/; index index.html index.htm; try_files $uri $uri/ /index.html; expires 7d; add_header Cache-Control "public, no-transform"; } 接口转发 location /api/ { proxy_pass http://127.0.0.1:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } 档案文件访问 location /file/ { root /opt/archive/data/; expires 30d; add_header Content-Disposition "attachment;filename=UTF-8''$utf8_filename"; } } ```
执行nginx -t校验配置无误后,执行nginx -s reload生效。
创建MySQL备份脚本/opt/archive/scripts/mysql_backup.sh,替换MySQL密码和异地备份服务器地址:
``` !/bin/bash BACKUP_DIR=/opt/archive/backup/mysql DATE=$(date +%Y%m%d%H%M%S) mkdir -p $BACKUP_DIR 替换为实际MySQL账号密码和库名 mysqldump -u root -p'你的MySQL密码' archive_db | gzip > $BACKUP_DIR/archive_$DATE.sql.gz 删除30天前本地备份 find $BACKUP_DIR -mtime +30 -name ".sql.gz" -exec rm -rf {} \; 同步到异地备份服务器,提前配置ssh免密登录 rsync -az $BACKUP_DIR/ backup@192.168.1.100:/backup/archive/mysql/ ```执行chmod +x /opt/archive/scripts/mysql_backup.sh,执行crontab -e添加定时任务,每天凌晨2点执行:0 2 /opt/archive/scripts/mysql_backup.sh。档案文件按相同逻辑配置rsync每日同步到异地服务器。
安装node_exporter采集服务器指标,执行以下命令:
``` wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz tar -zxvf node_exporter-1.6.1.linux-amd64.tar.gz cp node_exporter-1.6.1.linux-amd64/node_exporter /usr/local/bin/ ```创建systemd服务文件/usr/lib/systemd/system/node_exporter.service:
``` [Unit] Description=Node Exporter After=network.target [Service] User=root ExecStart=/usr/local/bin/node_exporter --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|run)($|/)" [Install] WantedBy=multi-user.target ```执行systemctl daemon-reload && systemctl start node_exporter && systemctl enable node_exporter启动服务。接入Prometheus后配置告警阈值:CPU使用率超80%持续5分钟告警、内存使用率超85%告警、磁盘使用率超80%告警。
用Uptime-Kuma监控接口可用性,执行docker命令安装:
``` docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1 ```访问服务器3001端口配置监控项,设置告警规则:接口成功率低于99.9%告警、响应时间超3s告警,告警渠道绑定企业微信/钉钉。