在线文件共享平台
在线文件共享平台
提供短时/长期(类似蓝奏云)的文件分享,无文件类型限制
项目安装
1 | git clone https://github.com/stonith404/pingvin-share.git |
根据实际需求,修改映射端口等,如映射到宿主机的3001端口
1 | vim docker-compose.yml |
配置文件参考,如果需要禁止通过ip:端口访问,需要将ports下面添加- "127.0.0.1:3001:3000"
1 | services: |
运行
1 | docker compose up -d |
使用HTTP访问
要将运行在Docker容器中的服务通过域名访问,并使用Nginx作为反向代理来转发到宿主机的3001端口,你需要完成几个步骤。这包括设置DNS记录、配置Nginx以及确保网络安全。下面是具体步骤:
步骤 1: 设置DNS记录
确保你的域名 fs.lthero.cn
的DNS记录指向托管Nginx的服务器的IP地址。这通常在你的域名注册商处进行设置:
- A记录:将域名指向IPv4地址
- AAAA记录:将域名指向IPv6地址(如果适用)
步骤 2: 安装并启动Nginx
步骤 1: 更新软件包列表
打开终端,首先使用apt
命令更新你的包列表,以确保你安装的是最新版本的Nginx。
1 | sudo apt update |
步骤 2: 安装Nginx
使用apt
安装Nginx。
1 | sudo apt install nginx |
步骤 3: 配置Nginx
你需要在Nginx中创建一个新的服务器块(server block),或者在已有的默认配置中修改,以设置反向代理。以下是一个基本的Nginx配置示例,将会把所有到 fs.lthero.cn
的请求转发到本地的3001端口:
-
打开或创建一个新的Nginx配置文件:
1
sudo vim /etc/nginx/sites-available/fs.lthero.cn
-
添加以下配置:
1
2
3
4
5
6
7
8
9
10
11
12
13server {
listen 80;
server_name fs.lthero.cn;
location / {
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}这个配置做了以下几点:
listen 80;
告诉Nginx监听80端口(HTTP标准端口)。server_name fs.lthero.cn;
设置这个块应当响应的域名。proxy_pass http://localhost:3001;
指定所有传入的请求转发到本地的3001端口。proxy_set_header
指令将重要的HTTP头信息转发给后端应用。
-
启用配置文件通过创建一个符号链接:
1
sudo ln -s /etc/nginx/sites-available/fs.lthero.cn /etc/nginx/sites-enabled/
-
检查Nginx配置文件是否有语法错误:
1
sudo nginx -t
-
如果没有错误,重启Nginx以应用配置:
1
sudo systemctl restart nginx
步骤 4: 调整防火墙规则
确保你的服务器的防火墙规则允许HTTP(端口80)和HTTPS(端口443,如果你使用SSL)的流量。如果你正在使用ufw
,可以使用以下命令:
1 | sudo ufw allow 'Nginx Full' |
步骤 5: 测试配置
在浏览器中输入 http://fs.lthero.cn
或使用命令行工具如 curl
来测试你的配置:
1 | curl http://fs.lthero.cn |
你应该能看到从Docker容器中运行的服务响应的内容。
这样,你就配置好了Nginx作为反向代理,将域名 fs.lthero.cn
的流量转发到宿主机的3001端口上的服务。如果你希望使用HTTPS,你还需要设置SSL证书,可以考虑使用Let’s Encrypt免费证书并配置HTTPS。
使用HTTPS访问
要让你的域名 fs.lthero.cn
使用 HTTPS,你需要获取 SSL/TLS 证书,并配置 Nginx 以使用这些证书来加密网页内容。以下是详细的步骤,包括如何使用 Let’s Encrypt 提供的免费证书自动化这个过程。
步骤 1: 安装 Certbot
Certbot 是一个自动获取并安装 Let’s Encrypt 证书的客户端。在 Ubuntu 上安装 Certbot 及其 Nginx 插件非常简单:
1 | sudo apt update |
步骤 2: 获取和安装证书
使用 Certbot 获取并为你的域名安装证书:
1 | sudo certbot --nginx -d fs.lthero.cn |
此命令会自动为指定的域名 fs.lthero.cn
配置 SSL 证书,并更新 Nginx 配置以使用这些证书。Certbot 会询问你一些问题,比如电子邮件地址(用于紧急联系和证书续订提醒),以及是否重定向所有 HTTP 请求到 HTTPS(强烈建议启用)。
生成的证书位置/etc/letsencrypt/live/
步骤 3: 更新 Nginx 配置
如果你想手动编辑 Nginx 配置文件,可以按以下方式配置:
1 | sudo vim /etc/nginx/sites-available/fs.lthero.cn |
下面是certbot自动配置的文件,最新版本的certbot会自动配置好
1 | server { |
下面是手动修改
1 | server { |
这个配置不仅启用了 HTTPS,还包括了一些现代的安全实践,如启用 HTTP/2,配置加密套件和协议等。
允许最大请求体大小为 1000MB
client_max_body_size 1000m;
这行最好与config.js中保持一致,如果nginx设置小了,会出现“上传失败”的结果!
步骤 4: 重新加载 Nginx
更改配置后,需要重新加载 Nginx 以应用新的配置:
检查配置文件是否有语法错误,如果有warn!直接看“遇到的问题”部分,重新加载配置是不一定能work的
1 | sudo nginx -t # 检查配置文件是否有语法错误 |
步骤 5: 验证 HTTPS
在浏览器中访问 https://fs.lthero.cn
来检查是否配置成功。你应该能够看到一个安全锁标志,表明连接是通过 HTTPS 加密的。
步骤 6: 自动续订证书
Let’s Encrypt 的证书有效期为90天,因此建议设置自动续订:
1 | sudo certbot renew |
这个命令会测试证书续订过程。如果这个测试成功,添加定时任务crontab
:
crontab -e
再填写下面内容,表示每月第一天会自动执行
通过which certbot
查看具体程序位置/usr/local/bin/certbot
1 | 0 0 1 * * /usr/local/bin/certbot renew --deploy-hook "nginx -s reload" |
续签的证书位置/etc/letsencrypt/renewal
通过以上步骤,你的站点 fs.lthero.cn
现在应该能够安全地使用 HTTPS 进行通信了。
如果要换crontab编辑器,运行下面的命令
1 | select-editor |
使用防火墙限制IP:端口访问
这是从防火墙级别禁用ip:端口访问,但要注意如果docker在映射时使用了0.0.0.0:3001:3000这种形式,docker的规则高于防火墙;
方式有三种
1、直接在vps对应的云平台添加安全组,权限应该是最高的
2、在docker启动时设置-p 127.0.0.1:3001:3000,仅本地访问,权限次高
3、设置vps上的防火墙规则,权限会被docker覆盖
1. 禁止外部直接访问应用端口
1 | sudo ufw deny 3001 |
2. 允许本地访问
1 | sudo ufw allow from 127.0.0.1 to any port 3001 |
这会禁止外部直接访问 3001
端口,但允许 Nginx 在本地访问它。
3. 验证
1 | sudo netstat -tuln | grep 3001 |
其它操作
1 | # ufw查看规则 |
解析到阿里云DNS的申请方法
如果域名解析在阿里云,可以安装这个插件从而完成证书申请,https://github.com/tengattack/certbot-dns-aliyun
Credentials File
在某个熟悉的目录下,把下面的内容写入credentials.ini
1 | dns_aliyun_access_key = 12345678 |
dns_aliyun_access_key是阿里云账号的AccessKey ID
dns_aliyun_access_key_secret是阿里云账号的AccessKey Secret
这两个值可以在阿里云控制台->用户头像->accesskeys按指引获取AccessKey/SecretKey
1 | chmod 600 /path/to/credentials.ini |
Obtain Certificates
1 | certbot certonly \ |
申请下来的证书位置
1 | /etc/letsencrypt/archive/ |
适合阿里云的自动命令
1 | 0 0 1 * * /usr/local/bin/certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --deploy-hook "nginx -s reload" |