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

JSON (JavaScript Object Notation) in einem Artikel verstehen

Inhaltsverzeichnis JSON wird angezeigt JSON-Struk...

Detailliertes Installationstutorial für MySQL 5.7.11 unter Win7

Betriebssystem: Win7 64-Bit Ultimate Edition Komp...

Detaillierte Erklärung der binären und varbinären Datentypen in MySQL

Vorwort BINARY und VARBINARY ähneln in gewisser W...

Vue+thinkphp5.1+axios zum Realisieren des Datei-Uploads

In diesem Artikel erfahren Sie, wie Sie mit think...

Alibaba Cloud beantragt ein kostenloses SSL-Zertifikat (https) von Cloud Shield

Da das Projekt den https-Dienst nutzen muss, habe...

Wann sollte man Map anstelle einfacher JS-Objekte verwenden?

Inhaltsverzeichnis 1. Map akzeptiert jeden Schlüs...

Vue-Beispielcode für die Online-Vorschau von Office-Dateien

Ich arbeite derzeit an elektronischen Archiven un...

Vue nutzt Amap zur Realisierung der Stadtpositionierung

In diesem Artikel wird der spezifische Code von V...

So verwenden Sie die Zusatzfunktionen von Vuex

Inhaltsverzeichnis Kartenstaat Kartengetter Karte...

Implementieren eines Tabellen-Scrollkarusselleffekts durch CSS-Animation

Eine Anwendung einer CSS-Animation mit demselben ...

Detaillierte Erklärung des SELINUX-Arbeitsprinzips

1. Einleitung Der Hauptvorteil, den SELinux für L...