操作系统:Ubuntu 20.04 LTS Server
核心软件清单:
更新系统并安装编译工具:
``` sudo apt update sudo apt install -y gcc g++ make perl wget vim ```安装JDK:
``` sudo apt install -y openjdk-8-jdk java -version 验证安装 ```安装MySQL:
``` sudo apt install -y mysql-server sudo mysql_secure_installation 按提示设置root密码 ```下载并编译安装:
``` wget https://github.com/happyfish100/libfastcommon/archive/V1.0.43.tar.gz tar -zxvf V1.0.43.tar.gz cd libfastcommon-1.0.43/ sudo ./make.sh sudo ./make.sh install ```下载FastDFS源码:
``` wget https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz tar -zxvf V6.06.tar.gz cd fastdfs-6.06/ sudo ./make.sh sudo ./make.sh install ```创建配置文件目录:
``` sudo cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf sudo mkdir -p /opt/fastdfs/tracker ```编辑tracker配置文件:
``` sudo vim /etc/fdfs/tracker.conf ```修改以下配置项:
``` base_path=/opt/fastdfs/tracker bind_addr=0.0.0.0 port=22122 http.server_port=8080 ```启动Tracker服务:
``` sudo fdfs_trackerd /etc/fdfs/tracker.conf start sudo netstat -tunlp | grep fdfs 验证端口22122已监听 ```创建存储目录:
``` sudo mkdir -p /opt/fastdfs/storage sudo cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf ```编辑storage配置文件:
``` sudo vim /etc/fdfs/storage.conf ```修改以下配置项:
``` group_name=group1 base_path=/opt/fastdfs/storage store_path0=/opt/fastdfs/storage tracker_server=你的服务器IP:22122 http.server_port=8888 ```启动Storage服务:
``` sudo fdfs_storaged /etc/fdfs/storage.conf start sudo fdfs_monitor /etc/fdfs/storage.conf 查看状态 ```下载并安装Nginx:
``` wget http://nginx.org/download/nginx-1.18.0.tar.gz tar -zxvf nginx-1.18.0.tar.gz cd nginx-1.18.0/ sudo ./configure --prefix=/usr/local/nginx sudo make sudo make install ```下载模块:
``` wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.22.tar.gz tar -zxvf V1.22.tar.gz ```重新编译Nginx:
``` cd nginx-1.18.0/ sudo ./configure --add-module=/path/to/fastdfs-nginx-module-1.22/src sudo make sudo make install ```复制FastDFS配置文件:
``` sudo cp /path/to/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/ sudo vim /etc/fdfs/mod_fastdfs.conf ```修改配置:
``` tracker_server=你的服务器IP:22122 url_have_group_name=true store_path0=/opt/fastdfs/storage ```配置Nginx虚拟主机:
``` sudo vim /usr/local/nginx/conf/nginx.conf ```
在http块内添加:
``` server { listen 80; server_name localhost; location ~ /group[0-9]/M00 { root /opt/fastdfs/storage/data; ngx_fastdfs_module; } location / { root html; index index.html index.htm; } } ```启动Nginx:
``` sudo /usr/local/nginx/sbin/nginx ```使用Maven创建项目:
``` mvn archetype:generate -DgroupId=com.digitalarchive -DartifactId=digital-archive -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false ```pom.xml依赖配置:
```创建数据库表:
``` CREATE DATABASE digital_archive DEFAULT CHARACTER SET utf8mb4; USE digital_archive; CREATE TABLE archive_file ( id BIGINT PRIMARY KEY AUTO_INCREMENT, file_name VARCHAR(255) NOT NULL, file_size BIGINT NOT NULL, file_type VARCHAR(50), fastdfs_path VARCHAR(500) NOT NULL, upload_time DATETIME DEFAULT CURRENT_TIMESTAMP, upload_user VARCHAR(100), description TEXT, INDEX idx_upload_time (upload_time), INDEX idx_file_type (file_type) ); ```创建配置文件fdfs_client.conf:
``` connect_timeout = 30 network_timeout = 60 charset = UTF-8 http.tracker_http_port = 8080 tracker_server = 你的服务器IP:22122 ```FileService.java:
``` @Service public class FileService { @Value("${fdfs.config.path}") private String fdfsConfigPath; public String uploadFile(MultipartFile file) throws Exception { // 初始化客户端 ClientGlobal.init(fdfsConfigPath); TrackerClient trackerClient = new TrackerClient(); TrackerServer trackerServer = trackerClient.getConnection(); StorageServer storageServer = null; StorageClient1 storageClient = new StorageClient1(trackerServer, storageServer); // 获取文件扩展名 String originalFilename = file.getOriginalFilename(); String extName = originalFilename.substring(originalFilename.lastIndexOf(".") + 1); // 上传文件 String fileId = storageClient.upload_file1(file.getBytes(), extName, null); // 构建访问URL String fileUrl = "http://你的服务器IP/group1/" + fileId; // 保存文件元数据到数据库 saveFileMetadata(originalFilename, file.getSize(), extName, fileId, fileUrl); return fileUrl; } private void saveFileMetadata(String fileName, long fileSize, String fileType, String fastdfsPath, String url) { // 数据库保存逻辑 } } ```FileController.java:
``` @RestController @RequestMapping("/api/file") public class FileController { @Autowired private FileService fileService; @PostMapping("/upload") public ResponseEntity打包Spring Boot应用:
``` mvn clean package -DskipTests ```启动应用:
``` java -jar target/digital-archive-1.0.0.jar --server.port=8081 ```使用curl测试文件上传:
``` curl -X POST -F "file=@/path/to/test.pdf" http://localhost:8081/api/file/upload ```预期返回:
``` http://你的服务器IP/group1/M00/00/00/test.pdf ```浏览器访问返回的URL验证文件可正常下载。
查看FastDFS状态:
``` sudo fdfs_monitor /etc/fdfs/storage.conf ```检查存储空间使用情况:
``` df -h /opt/fastdfs/storage ```查看Nginx访问日志:
``` tail -f /usr/local/nginx/logs/access.log ```检查Tracker服务状态:
``` sudo systemctl status fdfs_trackerd ```检查Storage服务状态:
``` sudo systemctl status fdfs_storaged ```检查防火墙设置:
``` sudo ufw status sudo ufw allow 22122/tcp 开放Tracker端口 sudo ufw allow 23000/tcp 开放Storage端口 sudo ufw allow 80/tcp 开放HTTP端口 ```检查Nginx配置:
``` sudo /usr/local/nginx/sbin/nginx -t ```检查FastDFS模块配置:
``` cat /etc/fdfs/mod_fastdfs.conf | grep tracker_server ```验证文件是否存在:
``` ls -la /opt/fastdfs/storage/data/00/00/ ```