So verwenden Sie Docker Compose zum Erstellen eines FastDFS-Dateiservers

So verwenden Sie Docker Compose zum Erstellen eines FastDFS-Dateiservers

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 Host 模式:

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 localhost “ als IP-Adresse eintragen, sollten Sie auf den Container zugreifen können. Tatsächlich ist dies aber nicht möglich. Mein persönliches Verständnis (bitte korrigieren Sie mich, wenn es sich um ein Missverständnis handelt) zum Eingeben IP Address ist wie folgt:

Konsolenausgabe beim Starten tracker :

Das Netzwerk von 192.168.64.2 ist:

Das Netzwerk von 192.168.65.4 ist:

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:
  • Detailliertes Beispiel zur Installation eines FastDfs-Dateiservers mit Docker Compose
  • Einige Hinweise zur Installation eines Fastdfs-Images im Docker
  • Erstellen eines FastDFS-Dateisystems in Docker (Tutorial mit mehreren Images)
  • So installieren Sie FastDFS in Docker
  • So stellen Sie FastDFS in Docker bereit

<<:  Konfigurationsprozess für selbststartende Dienste für einzelne Instanzen von MySQL5.7

>>:  9 superpraktische CSS-Tipps, die Designern und Entwicklern helfen

Artikel empfehlen

Implementierung der Bereitstellung eines privaten Docker-Warehouse-Registrars

Da immer mehr Docker-Images verwendet werden, mus...

Lassen Sie uns ausführlich über die LIMIT-Anweisung in MySQL sprechen

Inhaltsverzeichnis Frage Serverebene und Speicher...

Analyse der Probleme und Lösungen beim Importieren großer Datenmengen in MySQL

Im Projekt stoßen wir häufig auf das Problem, gro...

Vue3.0 implementiert die Kapselung von Kontrollkästchenkomponenten

In diesem Artikelbeispiel wird der spezifische Co...

Linux-Datenträgerverwaltung – LVM-Nutzung

1. Einführung in LVM Bei der Verwaltung von Linux...

Das neueste Installations-Tutorial für virtuelle Maschinen VMware 14

Zuerst gebe ich Ihnen den Aktivierungscode für VM...

Implementierung der Docker-Compose-Bereitstellung des ZK+Kafka+Storm-Clusters

Übersicht über die Clusterbereitstellung 172.22.1...