如何使用Docker部署FTP和Nginx并通過HTTP訪問FTP里的文件
Docker部署FTP和Nginx并通過HTTP訪問FTP里的文件
使用 Docker 部署 FTP 和 Nginx 通過 HTTP 訪問 FTP 里的文件,這是一個常見的需求,通常用于將存儲在 FTP 服務器上的文件通過 Web 方式提供訪問。
以下是如何操作的詳細步驟:
1. 部署 FTP 服務器 (vsftpd)
我們使用 fauria/vsftpd 鏡像,因為它配置簡單且常用。
創(chuàng)建存儲目錄: 在宿主機上創(chuàng)建一個目錄用于 FTP 存儲文件。
mkdir -p /path/to/ftp/data
將 /path/to/ftp/data 替換為你希望使用的實際路徑。
運行 vsftpd 容器:
docker run -d -p 21:21 -p 20:20 -p 21100-21110:21100-21110 \
-v /path/to/ftp/data:/home/vsftpd \
-e FTP_USER=ftpuser -e FTP_PASS=ftppass \
-e PASV_ENABLE=YES -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 \
--name ftpserver fauria/vsftpd-p 21:21 -p 20:20: 映射 FTP 的控制端口 (21) 和數(shù)據(jù)端口 (20)。-p 21100-21110:21100-21110: 映射被動模式的端口范圍。被動模式對于 Docker 環(huán)境很重要。-v /path/to/ftp/data:/home/vsftpd: 將宿主機目錄掛載到容器內(nèi)的 FTP 用戶目錄。-e FTP_USER=ftpuser -e FTP_PASS=ftppass: 設置 FTP 用戶名和密碼。請務必修改為你自己的用戶名和密碼。-e PASV_ENABLE=YES -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110: 啟用被動模式并指定端口范圍,這對于在 Docker 容器中使用 FTP 非常重要。--name ftpserver: 為容器命名。
驗證 FTP 連接: 使用 FTP 客戶端(如 FileZilla)連接到你的服務器。
2. 部署 Nginx
創(chuàng)建 Nginx 配置文件: 創(chuàng)建一個名為 nginx.conf 的文件,內(nèi)容如下:
user root; # 用戶使用root,否則沒有權限訪問FTP用戶上傳的文件
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
#include /etc/nginx/conf.d/*.conf; # 注釋掉這句,否則里面的默認配置會覆配置蓋下面的server配置
server {
listen 80;
listen [::]:80;
server_name localhost; # 修改為你的域名或 IP 地址
location / {
root /ftp/data; # Nginx 訪問的根目錄,稍后會通過掛載 FTP 數(shù)據(jù)目錄實現(xiàn)
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /ftp/data;
}
}
}
運行 Nginx 容器:
Bash
docker run -d -p 80:80 \
-v /path/to/ftp/data:/ftp/data \
-v $(pwd)/nginx.conf:/etc/nginx/conf.d/default.conf \
--name webserver nginx:latest-p 80:80: 映射 Nginx 的 80 端口。-v /path/to/ftp/data:/ftp/data: 關鍵步驟! 將 FTP 數(shù)據(jù)目錄掛載到 Nginx 容器內(nèi)的/ftp/data目錄。這樣 Nginx 就可以訪問 FTP 上的文件了。-v $(pwd)/nginx.conf:/etc/nginx/conf.d/default.conf: 將我們創(chuàng)建的 Nginx 配置文件掛載到容器內(nèi)。--name webserver: 為容器命名。nginx:latest: 使用最新的 Nginx 鏡像。
3. 訪問 FTP 文件
現(xiàn)在,你可以通過瀏覽器訪問服務器的 IP 地址 (例如 http://your_server_ip) 來瀏覽 FTP 上的文件。Nginx 將會提供一個文件列表,你可以點擊鏈接下載文件。
使用 Docker Compose (推薦)
使用 Docker Compose 可以更方便地管理多個容器。
創(chuàng)建一個名為 docker-compose.yml 的文件,內(nèi)容如下:
version: "3.9"
services:
ftpserver:
image: fauria/vsftpd
ports:
- "21:21"
- "20:20"
- "21100-21110:21100-21110"
volumes:
- ./ftpdata:/home/vsftpd # 注意使用相對路徑
environment:
- FTP_USER=ftpuser
- FTP_PASS=ftppass
- PASV_ENABLE=YES
- PASV_MIN_PORT=21100
- PASV_MAX_PORT=21110
restart: always
webserver:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./ftpdata:/ftp/data # 共享同一個數(shù)據(jù)卷
- ./nginx.conf:/etc/nginx/nginx.conf # 掛載配置文件
depends_on:
- ftpserver # 依賴于 ftpserver 啟動
restart: always
volumes:
ftpdata: #定義數(shù)據(jù)卷在該文件所在目錄下運行 docker-compose up -d 即可同時啟動 FTP 和 Nginx 容器。
關鍵點和注意事項:
- 被動模式 (PASV): 在 Docker 環(huán)境中,F(xiàn)TP 客戶端通常需要使用被動模式。確保正確配置被動模式的端口范圍。
- 數(shù)據(jù)卷: 使用數(shù)據(jù)卷來共享 FTP 和 Nginx 容器之間的文件。這是實現(xiàn)此功能的關鍵。
- 安全性: 上述配置只是一個基本的示例。在生產(chǎn)環(huán)境中,你需要考慮安全性問題,例如使用 SFTP 而不是 FTP,配置防火墻,限制訪問權限等。
- 端口映射: 確保宿主機上沒有其他服務占用這些端口。
- 文件權限: 確保 FTP 容器和 Nginx 容器都具有訪問共享目錄的正確權限。
希望以上步驟能夠幫助你成功搭建 FTP 和 Nginx 服務,并通過 HTTP 訪問 FTP 上的文件。使用 Docker Compose 可以大大簡化部署和管理過程,強烈推薦使用。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Spring Boot 2.4 新特性之一鍵構建Docker鏡像的過程詳解
這篇文章主要介紹了Spring Boot 2.4 新特性之一鍵構建Docker鏡像的過程詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12

