Docker Compose部署Adminer:如何实现安全连接?
实现Adminer的安全HTTPS连接(基于Nginx Proxy Manager)
一、调整Docker Compose配置
先移除Adminer直接对外暴露的端口,让流量仅通过Nginx Proxy Manager转发,避免未加密的直接访问:
修改后的配置如下:
version: "3" services: nginx: image: "jc21/nginx-proxy-manager:latest" hostname: websin.space container_name: npm restart: always ports: - "80:80" - "81:81" - "443:443" volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt db: image: mysql:latest volumes: - ./db:/var/lib/mysql - ./init:/docker-entrypoint-initdb.d restart: always environment: MYSQL_ROOT_PASSWORD: doNotTellPasswordsOnStackOverflow MYSQL_DATABASE: so MYSQL_USER: so MYSQL_PASSWORD: doNotTellPasswordsOnStackOverflow adminer: image: adminer restart: always # 移除直接对外的端口映射,仅通过NPM反向代理访问 environment: ADMINER_DEFAULT_SERVER: db depends_on: - db
执行命令更新容器:
docker-compose down && docker-compose up -d
二、在Nginx Proxy Manager配置反向代理与SSL
- 登录NPM管理后台:访问
http://websin.space:81,用初始账号(默认admin@example.com,密码changeme)登录后立即修改密码。 - 点击左侧「Proxy Hosts」,再点击「Add Proxy Host」。
- 填写基础代理信息:
- Domain Names:输入子域名(如
adminer.websin.space),确保该域名已解析到你的服务器公网IP。 - Forward Hostname/IP:填写
adminer(Docker Compose中Adminer服务的名称,容器间可通过服务名直接通信)。 - Forward Port:填写
8080(Adminer容器的内部服务端口)。
- Domain Names:输入子域名(如
- 切换到「SSL」标签页配置加密:
- 选择「Request a new SSL Certificate」。
- 勾选「Force SSL」(强制HTTP跳转至HTTPS)和「HTTP/2 Support」。
- 填写你的邮箱(用于证书过期提醒),勾选「I Agree to the Let's Encrypt Terms of Service」。
- 点击「Save」,等待NPM自动申请并部署SSL证书。
三、可选安全优化
- IP访问限制:在代理主机的「Access List」标签页,创建仅允许指定IP访问的规则,避免无关人员尝试登录Adminer。
- Adminer额外认证:在Adminer服务的环境变量中添加
ADMINER_AUTH="user:password",开启HTTP基础认证,增加一层访问屏障。
完成后,即可通过https://adminer.websin.space安全访问Adminer并连接数据库。
内容的提问来源于stack exchange,提问作者Pavel Janicek
相关产品推荐
相关产品推荐

