惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
CXSECURITY Database RSS Feed - CXSecurity.com
K
Kaspersky official blog
A
Arctic Wolf
Attack and Defense Labs
Attack and Defense Labs
L
LINUX DO - 热门话题
N
News | PayPal Newsroom
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
L
Lohrmann on Cybersecurity
PCI Perspectives
PCI Perspectives
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
The Last Watchdog
The Last Watchdog
B
Blog RSS Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
W
WeLiveSecurity
Know Your Adversary
Know Your Adversary
博客园 - Franky
T
Tenable Blog
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Help Net Security
Help Net Security
WordPress大学
WordPress大学
T
The Exploit Database - CXSecurity.com
www.infosecurity-magazine.com
www.infosecurity-magazine.com
博客园 - 司徒正美
阮一峰的网络日志
阮一峰的网络日志
D
Darknet – Hacking Tools, Hacker News & Cyber Security
H
Heimdal Security Blog
TaoSecurity Blog
TaoSecurity Blog
S
Security Affairs
J
Java Code Geeks
小众软件
小众软件
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Apple Machine Learning Research
Apple Machine Learning Research
NISL@THU
NISL@THU
O
OpenAI News
The Cloudflare Blog
月光博客
月光博客
Google Online Security Blog
Google Online Security Blog
V
V2EX
罗磊的独立博客
美团技术团队
博客园 - 三生石上(FineUI控件)
Security Latest
Security Latest
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
Cyber Attacks, Cyber Crime and Cyber Security
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Cyberwarzone
Cyberwarzone
L
LINUX DO - 最新话题
Hacker News - Newest:
Hacker News - Newest: "LLM"
大猫的无限游戏
大猫的无限游戏

Sehnsucht

记一次博客换图床的过程 观《花束般的恋爱》 读《活过》 东京 旅行篇 亲人逝去 我为什么想养鱼 防止AI爬取你的博客 「monthly 」博客重构 游戏全成就 好看的小说 人生的每一步都不会是浪费-2024年终 「weekly」星期五综合征 「weekly」听播客 杂谈 读《美丽新世界》 「weekly」社交媒体 恶性事件 新世界 「weekly」认知觉醒 美丽新世界 follow 「weekly」独立博客9问题 双十一买书 读《惊呆了!原来这就是社会学》 一次聊天与自我建设 2024-09月记 补番《relife》 树状数组简单理解 lvm简单使用 博客自动发布方案 某公众号废案 fail2ban基本使用 2024-07同学聚会 vps使用podman部署freshrss Gitlab CICD 实践,思考与记录 装备升级:新的PC gitlab局域网搭建流程 FastMail迁移至GMail+Cloudflare Email Routing 读《黑客与画家》 leetcode 第 391 场周赛 Astro添加过渡后DarkModeToggle按钮失效 nuxt3使用echarts5渲染中国地图 人生刻度 又到凤凰花朵开放的时候 2023-05-10 实习结束 2023-04-26 广州博物馆游记 YOASOBI「たぶん」官方音乐视频 风灵玉秀-发如雪 带我的老哥离职了 从p10k转向Starship lunarvim国内安装踩坑记录 什么是对称加密非对称加密、密钥交换、数字签名、证书 强调体验的一种思考时间的方式 ArchLinux使用vscode编写latex报错The font "FontAwesome" cannot be found ArchLinux安装(移动硬盘)流程 yay一个或多个文件没有通过有效性检查! 2022年终 hugo建站伊始 clash设置relay前置代理(校园网破解改进记录) 群青 · YOASOBI · Ayase 华为 matepad pro 11使用体验 Nginx使用acme.sh免费安装ssl证书 永远属于你的安娜 在线 童年趣事 童心,是比野心更难得的梦想 2021年终总结 基于jeeSite的软件测试课程作业 流程记录 Linux不同用户安装不同版本jdk Wifi4更换Wifi6路由器的使用体验 Flask 上传图片并灰度显示 玩客云刷机debain个人记录 jython 简单入门 Jenkins 个人搭建流程记录 集成邮件系统(qq邮箱),gitlab服务器,freestyle风格 在Web项目中配置Log4j --指南-- Codeforces Round 753 (Div. 3) ABCDE 浅谈fork函数 JavaWeb servlet 使用Cookie记录用户访问次数 Codeforces Round Educational Codeforces Round 114 (Rated for Div. 2) ABC 2021牛客多校7 I xay loves or 2021牛客多校9 H Happy Number 2021牛客多校8 D OR 2021牛客多校5 B Boxes 2021牛客多校5 H Holding Two 2021牛客多校2 D Er Ba Game 2021牛客多校1 F Find 3-friendly Integers 2021牛客多校1 B Ball Dropping 记人生第一次投简历和笔试 原型模式 2021-2-20 雨时随记 关于一维差分数组的例子 halo个人建站 关于手机ping电脑和电脑ping手机 泛型类简单理解 CodeForces - 849C From Y to Y 2020牛客国庆集训派对day3 Leftbest 约瑟夫环问题---2020牛客国庆集训派对day2 AKU NEGARAKU mysql 5.7 忘记密码如何更改 CF 1099B Squares and Segments CF 998A Balloons CF 998B Cutting 链表应用之多项式相加 CF 1150A Stock Arbitraging CF 1199A City Day CF 1199B Water Lily CF 982A Row CF 934A A Compatible Pair CF 629B Far Relative’s Problem 651A Joysticks 651B Beautiful Paintings
Podman 环境使用 Nginx Proxy Manager 最佳实践
2024-07-18 · via Sehnsucht

我有台小的vps,2核1g

目标是,上面的所有服务都只能从nginx(nginx proxy manager)访问,不对外暴露服务端口

原来的freshrss,用的是下面的命令构建的容器

podman run -d --restart unless-stopped --log-opt max-size=10m \
  -p 8080:80 \
  -e TZ=Europe/Paris \
  -e 'CRON_MIN=1,31' \
  -v ./data:/var/www/FreshRSS/data \
  -v ./extensions:/var/www/FreshRSS/extensions \
  --name freshrss \
  freshrss/freshrss

端口映射使用的是桥接模式,故宿主机的防火墙无法管理到8080

参考了文档后,我成功实现,在不暴露容器端口的情况下通过nginx访问服务

其基本原理是,将多个容器置于同个网络中,让nginx proxy manager可以访问到,且容器的端口不保留给外界

前情提要

  • vps上安装的是podman,并不是docker(本文忽略podman和podman compose的安装过程)
  • podman的命令几乎完全和docker兼容,故下面所有的操作只需要替换到podman换成docker也可以正常使用
  • 下面的nginx proxy manager用NPM代替

个人习惯于,在~/app/中存放docker/podman的资源,例如:

  • 使用podman run的情况:建立~/app/freshrss/docker.sh文件,里面的就是上面那个freshrss的容器运行命令,在~/app/freshrss底下输入bash docker.sh即可启动容器,其中的容器卷也映射到了本地,例如./data./extensions
  • 使用podman compose的情况:建立~/app/freshrss/docker-compose.yml,在~/app/freshrss中输入podman compose up -d即可启动,容器卷叶映射到了本地

在nginx proxy manager没有被安装的情况下开始下面的步骤:

  1. 创建容器网络
  2. 修改docker-compose.yml文件并启动NPM
  3. 启动其他服务
  4. NPM映射

创建容器网络

# 创建容器网络
podman network create nginx-net

其中nginx-net是可以随意变换的,只要其他的容器加入到这个网络就行

# 查看容器所属的网络名
podman inspect -f '{{.NetworkSettings.Networks}}' <container_id_or_name>

启动NPM

我们需要修改官方提供的docker-compose.yml文件

官方提供的:

version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '443:443'
      - '81:81'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

其中ports默认是以桥接的模式对外开放的,即宿主机没办法用防火墙控制,而我们需要修改的是所属的网络

version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    networks: # 新增
      - nginx-net
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

networks: # 新增
  nginx-net:
    external: true # 该网络已经存在

docker-compose.yml存入~/app/nginx-proxy-manager中,并在其中输入podman compose up -d

查看是否成功启动

可以用下面的命令查看容器所属的网络名,后面的其他程序也同样适用

podman inspect -f '{{.NetworkSettings.Networks}}' <container_id_or_name>

启动其他程序

如果是使用podman compose的程序,那么就和上面的NPM一样,增加网络部分

如果是使用podman run的程序,可以按照下面的步骤执行

原本的命令是:

podman run -d --restart unless-stopped --log-opt max-size=10m \
  -p 8080:80 \ # 这行删掉,然后增加网络设置
  -e TZ=Europe/Paris \
  -e 'CRON_MIN=1,31' \
  -v ./data:/var/www/FreshRSS/data \
  -v ./extensions:/var/www/FreshRSS/extensions \
  --name freshrss \
  freshrss/freshrss

修改成:

podman run -d --restart unless-stopped --log-opt max-size=10m \
  --network nginx-net \
  -e TZ=Europe/Paris \
  -e 'CRON_MIN=1,31' \
  -v ./data:/var/www/FreshRSS/data \
  -v ./extensions:/var/www/FreshRSS/extensions \
  --name freshrss \
  freshrss/freshrss

将上面的命令写入~/app/freshrss/docker.sh中,然后在输入bash docker.sh即可

NPM映射

在NPM的UI界面修改反向代理,例如freshrss容器名就是freshrss,且原本暴露的端口是80,那么反向代理就可以写成这样:https://freshrss:80

最后检查是否无误

快速手册

  • docker-compose.yml中删掉端口,加入:
servers:
  app:
    networks:
      - nginx-net

networks:
  nginx-net:
    external: true
  • docker运行命令中去掉端口,加入--network nginx-net

  • 访问地址是容器名+原来的端口,例如https://freshrss:80

  • 可以参考docker-compose.yml