So erstellen Sie einen Nginx-Image-Server mit Docker

So erstellen Sie einen Nginx-Image-Server mit Docker

Vorwort

Bei der allgemeinen Entwicklung werden Bilder in ein Verzeichnis hochgeladen. Anschließend werden Verzeichnis und Dateiname verknüpft und in der Datenbank gespeichert. Wenn diese Methode jedoch nicht gut umgesetzt wird, kann sie gewisse Mängel aufweisen.

Wenn das Projekt verschoben wird, müssen, auch wenn der Server selbst noch verwendet wird, die auf dem Server gespeicherten projektbezogenen Bilder ebenfalls verschoben und gleichzeitig der Code geändert werden, was zu großen Problemen führt. Wenn Sie einen Server speziell zum Speichern von Bildern und zum Übertragen dieser Bilder per FTP erstellen, müssen Sie Ihren Code nicht ändern.

Auf die Einführung und Vorteile von Docker und Nginx werde ich hier nicht näher eingehen, im Internet gibt es dazu viele Blogs und Tutorials.

Umweltkonstruktion

Einige Module der Umgebungskonstruktion sind möglicherweise nicht detailliert genug. Wenn Sie mehr wissen möchten, können Sie andere Materialien prüfen. Hier sind nur einfache Vorgänge.

1. Docker installieren

yum installiere Docker

2. Ziehen Sie das Nginx-Image

Docker-Pull nginx:1.16.0

1.16.0 ist die Versionsnummer. Sie können das Image über die Docker-Suche nginx abfragen; dasselbe gilt für das Abrufen anderer Images wie Tomcat, MySQL usw.

3. Erstellen Sie die Hauptdateien für die Docker-Montage

mkdir -p /home/nginx/www /home/nginx/logs /home/nginx/conf

4. Erstellen und Ausführen des Nginx-Containers

docker run -d -p 80:80 -p 443:443 --name nginx-server -v /home/nginx/www:/usr/share/nginx/html 
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/logs:/var/log/nginx nginx

5. Erstellen Sie eine Nginx-Konfigurationsdatei auf dem Host

Erstellen Sie eine neue Datei nginx.conf in /home/nginx/conf und schreiben Sie die folgende Konfiguration:

Benutzer root;
Arbeiterprozesse 1;
Fehlerprotokoll /var/log/nginx/error.log warnen;
pid /var/run/nginx.pid;
Ereignisse {
 Arbeiterverbindungen 1024;
}
http {
 /etc/nginx/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"';
 Zugriffsprotokoll /var/log/nginx/access.log Haupt;
 sendfile an;
 #tcp_nopush ein;
 KeepAlive-Timeout 65;
 #gzip ein;
 schließen Sie /etc/nginx/conf.d/*.conf ein;
 Server {
 hören Sie 443 SSL;
 Servername: Ihre IP-Adresse oder Ihr Domänenname;
 root /usr/share/nginx/html;
 ssl_certificate Ihr-Schlüssel.pem;
 ssl_certificate_key Ihr_Schlüssel.Schlüssel;
 SSL-Sitzungszeitüberschreitung 5 Min.
 ssl_session_cache geteilt:SSL:1m;
 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HOCH:!NULL:aNULL:!MD5:!ADH:!RC4;
 SSL-Protokolle TLSv1 TLSv1.1 TLSv1.2;
 ssl_prefer_server_ciphers ein;
 # Springe zu Port 8080, das ist mein Tomcat-Container. Wenn du https://ip/ im Browser eingibst, springst du zum Tomcat-Container (der bereits läuft und die Portnummer zugeordnet hat)
 Standort / {
  root /usr/share/nginx/html;
  Proxy-Passwort http://ip:8080/;
  Index Index.html Index.htm;
 }
     # Wenn Sie https://ip/images/ im Browser eingeben, entspricht dies /home/nginx/www/images/ auf dem Hostcomputer, da es zuvor gemountet wurde, d. h. ein Verzeichnis auf dem Hostcomputer und ein Ordner im Docker-Container teilen Daten. # Erstellen Sie zuerst das Bilderverzeichnis in /home/nginx/www/ auf dem Hostcomputer. Speicherort ~ /images/ {
  root /usr/share/nginx/html/;
 }
 }
 Server {
 hören Sie 80;
 Servername: Ihre IP-Adresse oder Ihr Domänenname;
 umschreiben ^ https://$host$1 permanent;
 }
}

Hier gibt es eine SSL-Konfiguration. Sie müssen zuerst einen Domänennamen beantragen, dann ein SSL-Zertifikat erhalten und es dann konfigurieren. Ich werde hier nicht ins Detail gehen.

Die Umgebungskonfiguration ist fast abgeschlossen. Als nächstes installieren Sie vsftpd und erstellen ftp

FTP einrichten

Installieren Sie vsftpd

yum -y installiere vsftpd

Benutzer hinzufügen

useradd benutzerdefinierter Benutzername

passwd benutzerdefiniertes Passwort

Ändern der Konfigurationsdatei

vi /etc/vsftpd/vsftpd.conf

Die Stellen, die geändert werden müssen, sind wie folgt:

# Der Standardwert der Konfigurationsdatei ist JA, was bedeutet, dass anonymer Zugriff unterstützt wird. Wenn es auf Nichtunterstützung eingestellt ist
anonymous_enable=NEIN
# Fügen Sie diese beiden Zeilen am Ende hinzu
pasv_min_port=30000
pasv_max_port=30009

Festlegen der Benutzerzugriffsrechte nach dem Speichern und Beenden

chown ftpadmin /home/nginx/www/image
chmod 777 -R /home/nginx/www/image

Nach dem Test wurden nach dem Hochladen per FTP über die https-Anfrage des Browsers folgende Ergebnisse erzielt:

*Noch etwas: Denken Sie bei Alibaba Cloud-Servern daran, die Sicherheitsgruppe zu konfigurieren und Port 21 sowie die Ports 443, 80 und 30000-30009 zu öffnen.

Implementieren der FTP-Übertragung in Java

Erstellen Sie zunächst die Datei ftpResource.properties in resource und schreiben Sie die Parameter

FTP_ADDRESS=Ihre IP
FTP_PORT=21
FTP_USERNAME=Benutzername
FTP_PASSWORD=Benutzerkennwort
FTP_BASE_PATH=/home/nginx/www/images
IMAGE_BASE_URL=https://domain/bilder/

Schreiben Sie dann eine Toolklasse für die FTP-Übertragung

importiere org.apache.commons.net.ftp.FTP;
importiere org.apache.commons.net.ftp.FTPClient;
importiere org.springframework.beans.factory.annotation.Value;
importiere org.springframework.context.annotation.PropertySource;
importiere org.springframework.stereotype.Component;
importiere java.io.*;
/**
 * @Autor Max
 */
@Komponente
@PropertySource("Klassenpfad:ftpResource.properties")
öffentliche Klasse FtpUtil {
 /**
 * FTP_ADDRESS: IP-Adresse des FTP-Servers * FTP_PORT: Port des FTP-Servers, Standard ist 21
 * FTP_USERNAME: Benutzername des FTP-Servers* FTP_PASSWORD: Passwort des FTP-Servers* FTP_BASE_PATH: der absolute Pfad des FTP-Servers zum Speichern der Bilder* IMAGE_BASE_URL: der Pfad des FTP-Servers zum Zugriff auf die Bilder aus dem Internet*/
 @Wert("${FTP_ADDRESS}")
 private Zeichenfolge FTP_ADRESSE;
 @Wert("${FTP_PORT}")
 privater Integer FTP_PORT;
 @Wert("${FTP_USERNAME}")
 privater String FTP_USERNAME;
 @Wert("${FTP_PASSWORD}")
 private Zeichenfolge FTP_PASSWORD;
 @Wert("${FTP_BASE_PATH}")
 private Zeichenfolge FTP_BASE_PATH;
 @Wert("${IMAGE_BASE_URL}")
 private Zeichenfolge IMAGE_BASE_URL;
 /**
 * Bild hochladen * @param inputStream Eingabestream * @param name Dateiname * @return Bild-URL
 * @throws IOException IO-Ausnahme */
 öffentlicher String uploadImage(InputStream inputStream, String name) wirft IOException {
 FTPClient ftpClient = neuer FTPClient();
 versuchen {
  System.out.println(FTP_ADRESSE);
  ftpClient.enterLocalPassiveMode();
  ftpClient.connect(FTP_ADRESSE, FTP_PORT);
  ftpClient.login(FTP_BENUTZERNAME, FTP_PASSWORT);
  ftpClient.changeWorkingDirectory(FTP_BASE_PATH);
  ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
  boolean ist erfolgreich = ftpClient.storeFile(Name, Eingabestream);
  wenn (ist erfolgreich){
  gibt IMAGE_BASE_URL + Name zurück;
  }
 }catch (Ausnahme e){
  e.printStackTrace();
 }Endlich {
  ftpClient.logout();
 }
 gibt IMAGE_BASE_URL + "Fehler" zurück;
 }
}

Dann wird in der Service-Verarbeitungslogik nur ein Teil des Codes hier angezeigt

@Autowired
 privates FtpUtil ftpUtil;

 @Überschreiben
 public int insertImg(MultipartFile Datei) wirft IOException {
 /*
 1. Holen Sie sich den hochgeladenen Dateistream inputStream und den Dateinamen getOriginalFilename
 2. Rufen Sie die Funktion in FtpUtil auf, um das Bild auf den Bildserver hochzuladen und die https-Adresse zurückzugeben. 3. Wenn die Bildadresse zurückgegeben wird, fügen Sie sie in die Datenbank ein */
 InputStream inputStream = Datei.getInputStream();
 String Dateiname = Datei.getOriginalFilename();
 String picUrl = ftpUtil.uploadImage(inputStream, Dateiname);
 }

Das ist alles. Wenn der Client es in Zukunft anfordert, wird es per FTP auf den Server übertragen und die Adresse wird dann in der Datenbank gespeichert. Solange das Frontend die Bild-URL erhält, wird sie angezeigt.

Zusammenfassen

Dies ist das Ende dieses Artikels zum Erstellen eines Nginx-Image-Servers mit Docker. Weitere Informationen zum Erstellen eines Nginx-Image-Servers mit Docker 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:
  • Detaillierte Erläuterung der Verarbeitung der drei Docker Nginx-Protokolle
  • Docker Nginx-Container und Tomcat-Container zur Realisierung von Lastausgleich und dynamischen und statischen Trennungsvorgängen
  • Docker stellt nginx bereit und mountet Ordner und Dateioperationen
  • Docker nginx implementiert einen Host zum Bereitstellen mehrerer Sites
  • Docker-Bereitstellung - Nginx-Implementierungsprozess - Grafik und Text - detaillierte Erläuterung
  • So stellen Sie ein Vue-Projekt mit Docker-Image + nginx bereit
  • Methoden und Schritte zum Erstellen eines Docker-basierten Nginx-Dateiservers
  • Implementierungsmethode für die Produktion und Bereitstellung von Docker Nginx-Containern

<<:  Vue2.x-Reaktionsfähigkeit – einfache Erklärung und Beispiele

>>:  Detaillierte Erklärung von MySQL Explain

Artikel empfehlen

Detaillierte Erklärung des Sticky Position-Attributs in CSS

Beim Entwickeln mobiler Apps stoßen Sie häufig au...

Praktische Methode zum Upgrade von PHP auf 5.6 unter Linux

1: Überprüfen Sie die PHP-Version nach dem Aufruf...

Methode für die Sicherheitseinstellungen des Tomcat-Servers

Tomcat ist ein HTTP-Server, der die offizielle Re...

Grundlegendes Handbuch für Webdesign 216 Websichere Farben

Die Farbdarstellung auf einer Webseite wird von ve...

React antd realisiert dynamische Vergrößerung und Verkleinerung der Form

Beim Schreiben dynamischer Formulare bin ich zuvo...

Ein kurzes Verständnis der drei Prinzipien zum Hinzufügen von MySQL-Indizes

1. Die Bedeutung von Indizes Indizes werden verwe...

border-radius ist eine Methode zum Hinzufügen abgerundeter Ränder zu Elementen

border-radius:10px; /* Alle Ecken sind mit einem ...

Bedeutung der Hintergrundfarbdeklaration beim Schreiben von Stilen

Wie der Titel schon sagt, kann andernfalls bei ein...

Detaillierte Hinweise zu React für Einsteiger

Inhaltsverzeichnis 1. Grundlegendes Verständnis v...

7 Möglichkeiten zum Schreiben einer Vue v-for-Schleife

Inhaltsverzeichnis 1. Verwenden Sie in der v-for-...