Im vorherigen Artikel wurde ein ausführliches Beispiel für die Verwendung von Docker Compose zur Installation des FastDfs-Dateiservers vorgestellt. Heute werde ich vorstellen, wie man mit Docker Compose einen FastDFS-Dateiserver erstellt. Die Details sind wie folgt: Plattform: Mac M1 Hinweis: Informationen zur IP-Adresse In Bezug auf den Docker-Netzwerkmodus erwähnt der obige Artikel den Docker Wenn Sie beim Starten eines Containers den Hostmodus verwenden, erhält der Container keinen unabhängigen Netzwerk-Namespace, sondern teilt einen Netzwerk-Namespace mit dem Host. Der Container virtualisiert nicht seine eigene Netzwerkkarte, konfiguriert nicht seine eigene IP usw., sondern verwendet die IP und den Port des Hosts. Andere Aspekte des Containers, etwa das Dateisystem und die Prozessliste, sind jedoch weiterhin vom Hostcomputer isoliert. Das Problem ist: Wenn Sie die IP-Adresse und den Port des Hostcomputers verwenden und in der Konfigurationsdatei Konsolenausgabe beim Starten Das Netzwerk von Das Netzwerk von Dateiverzeichnis ├── docker-compose.yaml ├── nginx │ └── nginx.conf ├── Lagerung │ └── Daten └── Tracker │ └── conf │ └── client.conf └── Speicherpfad ./docker-compose.yaml Version: "2" Leistungen: FastDFS-Tracker: Hostname: FastDFS-Tracker Containername: FastDFS-Tracker Bild: season/fastdfs:1.2 Netzwerkmodus: "Host" Befehl: Tracker Bände: - ./tracker/data:/fastdfs/tracker/data - ./tracker/conf:/etc/fdfs FastDFS-Speicher: Hostname: FastDFS-Speicher Containername: FastDFS-Speicher Bild: Saison/fastdfs:1.2 Netzwerkmodus: "Host" Bände: - ./storage/data:/fastdfs/storage/data - ./store_path:/fastdfs/store_path Umfeld: – TRACKER_SERVER=192.168.64.2:22122 Befehl: Speicher hängt ab von: - FastDFS-Tracker fastdfs-nginx: Hostname: fastdfs-nginx Containername: fastdfs-nginx Bild: season/fastdfs:1.2 Netzwerkmodus: "Host" Bände: - ./nginx/nginx.conf:/etc/nginx/conf/nginx.conf - ./store_path:/fastdfs/store_path Umfeld: – TRACKER_SERVER=192.168.64.2:22122 Befehl: nginx ./tracker/conf/client.conf # Verbindungstimeout in Sekunden # Standardwert ist 30s Verbindungstimeout = 30 # Netzwerk-Timeout in Sekunden # Standardwert ist 30s Netzwerk-Timeout = 60 # der Basispfad zum Speichern von Protokolldateien Basispfad=/fastdfs/client # tracker_server kann mehr als einmal vorkommen und das tracker_server-Format ist # "Host:Port", Host kann Hostname oder IP-Adresse sein # Hier muss die IP geändert werden tracker_server=192.168.64.2:22122 #Standardprotokollebene wie Syslog, ohne Berücksichtigung der Groß-/Kleinschreibung, Werteliste: ### emerg für Notfall ### Alarm ### crit für kritisch ### Fehler ### warnen vor Warnung ### beachten ### Informationen ### debug log_level=Informationen # wenn Verbindungspool verwendet wird # Der Standardwert ist false # seit V4.05 use_connection_pool = falsch # Verbindungen, deren Leerlaufzeit diese Zeit überschreitet, werden geschlossen # Einheit: Sekunde # Standardwert ist 3600 # seit V4.05 Maximale Leerlaufzeit des Verbindungspools = 3600 # wenn FastDFS-Parameter vom Tracker-Server geladen werden # seit V4.05 # Der Standardwert ist false load_fdfs_parameters_from_tracker=false # wenn Speicher-ID statt IP-Adresse verwendet wird # dasselbe wie tracker.conf # nur gültig, wenn load_fdfs_parameters_from_tracker false ist # Der Standardwert ist false # seit V4.05 use_storage_id = falsch # Speicher-IDs Dateinamen angeben, kann relativer oder absoluter Pfad verwendet werden # dasselbe wie tracker.conf # nur gültig, wenn load_fdfs_parameters_from_tracker false ist # seit V4.05 storage_ids_filename = storage_ids.conf #HTTP-Einstellungen http.tracker_server_port=80 #verwenden Sie die Direktive „#include“, um andere HTTP-Einstellungen einzuschließen ##http.conf einschließen ./nginx/nginx.conf #Benutzer niemand; Arbeiterprozesse 1; #error_log Protokolle/Fehler.log; #error_log Protokolle/error.log Hinweis; #error_log Protokolle/error.log-Info; #pid-Protokolle/nginx.pid; Ereignisse { Arbeiterverbindungen 1024; } http { mime.types einschließen; Standardtyp Anwendung/Oktett-Stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log Protokolle/access.log Haupt; sendfile an; #tcp_nopush ein; #keepalive_timeout 0; KeepAlive-Timeout 65; #gzip ein; Server { hören Sie 9800; Servername localhost; #Zeichensatz koi8-r; #access_log Protokolle/Host.access.log Haupt; # Teilestandort ändern / { root /fastdfs/Speicherpfad/Daten; ngx_fastdfs_module; } #Fehlerseite 404 /404.html; # Server-Fehlerseiten auf die statische Seite /50x.html umleiten # Fehlerseite 500 502 503 504 /50x.html; Standort = /50x.html { Stamm-HTML; } } } SpringBoot integriert fastDFS Abhängigkeiten hinzufügen <Abhängigkeit> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> <version>1.27.2</version> </Abhängigkeit> anwendung.yaml # Konfiguration des verteilten Dateisystems fdfs: #Ändern Sie die IP entsprechend Ihrer eigenen IP: 192.168.64.2 #Timeout für Socket-Verbindung soTimeout: 1500 VerbindungsTimeout: 600 #Unterstützt mehrere Trackerlisten: – ${fdfs.ip}:22122 # Die IP und der Port von nginx in fastDFS # IDEA fordert zur Verwendung von https auf, # nginx SSL konfigurieren, bitte wechseln Sie zu: Webserver-URL: http://${fdfs.ip}:9800/ FastDFSConfig.java @Konfiguration // FastDFS-Client-Komponente importieren @Import(FdfsClientConfig.class) //Lösen Sie das Problem der wiederholten JMX-Bean-Registrierung @EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING) öffentlicher Aspekt FastDFSConfig { } FastDFSUtil.java @Komponente öffentliche Klasse FastDFSUtil { @Ressource privater FastFileStorageClient fastFileStorageClient; @Ressource privater FdfsWebServer fdfsWebServer; public String uploadFile(MultipartFile Datei) wirft IOException { StorePath storePath = fastFileStorageClient.uploadFile(file.getInputStream(), file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()), null); Zeichenfolge fullPath = storePath.getFullPath(); getResAccessUrl(vollständiger Pfad); gibt den vollständigen Pfad zurück; } öffentliche Zeichenfolge uploadFile(Datei Datei) { versuchen { FileInputStream inputStream = neuer FileInputStream(Datei); StorePath storePath = fastFileStorageClient.uploadFile(inputStream, file.length(), FilenameUtils.getExtension(file.getName()), null); gibt storePath.getFullPath() zurück; } Fang (Ausnahme e) { e.printStackTrace(); gibt null zurück; } } public byte[] downloadFile(String dateipfad) { StorePath storePath = StorePath.parseFromUrl(Dateipfad); gibt fastFileStorageClient.downloadFile zurück (storePath.getGroup(), storePath.getPath(), neues DownloadByteArray()); } öffentliche Boolean Datei löschen(String Dateipfad) { wenn (StringUtils.isEmpty(filePath)) { gibt false zurück; } versuchen { StorePath storePath = StorePath.parseFromUrl(Dateipfad); fastFileStorageClient.deleteFile(storePath.getGroup(), storePath.getPath()); } Fang (Ausnahme e) { e.printStackTrace(); gibt false zurück; } gibt true zurück; } /** * Vollständige URL-Adresse der Paketdatei* * @param Pfad * @zurückkehren */ öffentliche String getResAccessUrl(String-Pfad) { returniere fdfsWebServer.getWebServerUrl() + Pfad; } } FastDFSController.java @RestController @RequestMapping("/fast-dfs") öffentliche Klasse FastDFSController { /** * @param-Datei * @zurückkehren * @throws IOException */ @PostMapping("") @Transaktional public void uploadFile(MultipartFile file, String cuisineId) wirft IOException { Zeichenfolge s = fastDfsUtil.uploadFile(Datei); Zeichenfolge resAccessUrl = fastDfsUtil.getResAccessUrl(s); } /** * @param Antwort * @throws IOException */ @GetMapping("") public void downloadFile(String filePath, HttpServletResponse response) löst IOException aus { byte[] bytes = fastDfsUtil.downloadFile(Dateipfad); String[] split = Dateipfad.split("/"); String Dateiname = split[split.length - 1]; //Erzwungenen Download so einstellen, dass response.setContentType("application/force-download"); nicht geöffnet wird. Dateiname = URLEncoder.encode(Dateiname, StandardCharsets.UTF_8); response.setHeader("Content-Disposition", "attachment;filename=" + Dateiname); IOUtils.write(bytes, response.getOutputStream()); } /** * Spielen Sie das Video im Streaming-Modus ab. Sie können es nur von Anfang bis Ende ansehen. Sie können nicht manuell auf Inhalte klicken, die Sie bereits angesehen haben. * @param filePath * @param Antwort * @throws IOException */ @GetMapping("/abspielen") public void streamMedia(String filePath, HttpServletResponse response) löst IOException aus { byte[] bytes = fastDfsUtil.downloadFile(Dateipfad); IOUtils.copy(neuer ByteArrayInputStream(Bytes), Antwort.getOutputStream()); Antwort.FlushBuffer(); } } Dies ist das Ende dieses Artikels über die Verwendung von Docker Compose zum Erstellen eines FastDFS-Dateiservers. Weitere Informationen zur Verwendung von Docker Compose zum Erstellen von FastDFS finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Konfigurationsprozess für selbststartende Dienste für einzelne Instanzen von MySQL5.7
>>: 9 superpraktische CSS-Tipps, die Designern und Entwicklern helfen
Inhaltsverzeichnis JSON wird angezeigt JSON-Struk...
Finden Sie das Problem Wenn wir den Inhalt in ein...
Betriebssystem: Win7 64-Bit Ultimate Edition Komp...
Vorwort BINARY und VARBINARY ähneln in gewisser W...
In diesem Artikel erfahren Sie, wie Sie mit think...
Da das Projekt den https-Dienst nutzen muss, habe...
Inhaltsverzeichnis 1. Map akzeptiert jeden Schlüs...
Ich arbeite derzeit an elektronischen Archiven un...
Dieser Artikel beschreibt anhand von Beispielen d...
In diesem Artikel wird beschrieben, wie Sie mit D...
In diesem Artikel wird der spezifische Code von V...
Inhaltsverzeichnis Kartenstaat Kartengetter Karte...
Eine Anwendung einer CSS-Animation mit demselben ...
In diesem Artikel finden Sie eine Sammlung von Ja...
1. Einleitung Der Hauptvorteil, den SELinux für L...