主题

这几天在使用 docker搭建 Nginx Proxy Manager时的方法、遇到了一些错误,和我的一些错误排查思路;

环境

家庭公网 IP地址

DDNS

系统 Centos6 or Centos7

使用Docker compose搭建

以下是我个人搭建的环境,如果想要详细的请查看:🎉️ https://docs.halo.run/getting-started/install/docker-compose 来选择你需要的搭建方法;

搭建完成就可以使用你的 ip:Admin web Port来访问了

[root@TcServer nginx-proxy-manager]# cat docker-compose.yaml 
version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    #network: host
    ports:
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
    environment:
      DB_MYSQL_HOST: "你mysql地址"
      DB_MYSQL_PORT: mysql端口
      DB_MYSQL_USER: "mysql用户名"
      DB_MYSQL_PASSWORD: "mysqll密码"
      DB_MYSQL_NAME: "mysql数据库"
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

问题一:创建代理主机问题

下面这个图是填写代理主机的详解,如果你访问不到自己的网络请注意以下几点:

  1. 你的路由器的端口转发是否是设置了Nginx Proxy Manager的两个http和https端口(因为家庭网络关闭了80和443端口所以需要转发)
  2. 你的域名是否可以被DNS解析或者成功使用了DDNS,这个你可以去你买域名的服务商或者你托管的服务商去看DNS选项,有没有添加A记录,添加了有没有正确设置主机
  3. 你的服务是否是已经启动了的,检测你的服务器是否可以访问到你的代理的主机

2024-01-09T03:38:16.650070912-klesexmk.png

问题二:创建SSL失败

问题图片:

2024-01-09T03:52:17.523815851-pcfvfaoh.jpg

下面是我的排查思路

docker exec -it nginx-proxy-manager-app-1  bash #进入容器,容器名依照自己来
tail -f  /tmp/letsencrypt-log/letsencrypt.log ##查看日志文件有没有报错,有则先解决日志文件的报错
tail -f /data/logs/proxy-host- #查看你错误代理主机的那条报错信息注意这里需要补全且后缀带erro
tail -f /tmp/certbot-log- #仔细检测上面基本有没有certbot的错误,每次 "-" 后的id不一样

我这次错误是1:
usage: 
  certbot [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN] ...

Certbot can obtain and install HTTPS/TLS/SSL certificates.  By default,
it will attempt to use a webserver both for obtaining and installing the
certificate. 
certbot: error: unrecognized arguments: --dns-tencentcloud-credentials /etc/letsencrypt/credentials/credentials-22

这个报错为没有安装指定的certbot插件,我这里是腾讯云就需要执行以下命令,这条命令依照你的对应DNS服务商来
pip3 install certbot-dns-tencentcloud

错误2:
An unexpected error occurred:
requests.exceptions.ConnectTimeout: HTTPSConnectionPool(host='acme-v02.api.letsencrypt.org', port=443): Max retries exceeded with url: /directory (Caused by ConnectTimeoutError(<urllib3.connection.HTTPSConnection object at 0x7fdfbb127518>, 'Connection to acme-v02.api.letsencrypt.org timed out. (connect timeout=45)'))
Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /tmp/letsencrypt-log/letsencrypt.log or re-run Certbot with -v for more details.

这个就是网络问题了,我这里是dockers容器安装的,我排查发现解析不到域名,加上一个DNS解决问题了,就可以成功申请了