You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地Django Rest API连接AWS LND节点时找不到admin.macaroon文件

问题:本地Django API无法访问AWS上LND节点的admin.macaroon

我正尝试通过本地运行的Django Rest API连接AWS上的LND节点(已知这不是最佳部署方案,但此次别无选择)。尽管admin.macaroon文件存在于EC2实例的指定目录,但API始终提示找不到该文件,同时不清楚如何从外部API访问EC2实例,需要帮助。


1. Django View代码

class GetInfo(APIView):
    def get(self, request):
        REST_HOST = "https://ec2-18-195-111-81.eu-central-1.compute.amazonaws.com"
        MACAROON_PATH = "/home/ubuntu/.lnd/data/chain/bitcoin/mainnet/admin.macaroon"
        # url = "https://ec2-18-195-111-81.eu-central-1.compute.amazonaws.com/v1/getinfo"
        TLS_PATH = "/home/ubuntu/.lnd/tls.cert"

        url = f"https//{REST_HOST}/v1/getinfo"
        macaroon = codecs.encode(open(MACAROON_PATH, "rb").read(), "hex")
        headers = {"Grpc-Metadata-macaroon": macaroon}
        r = requests.get(url, headers=headers, verify=TLS_PATH)
        return Response(json.loads(r.text))

2. LND节点状态(lncli getinfo输出)

$ lncli getinfo:
{
"version": "0.15.5-beta commit=v0.15.5-beta",
"commit_hash": "c0a09209782b1c62c3393fcea0844exxxxxxxxxx",
"identity_pubkey": "mykey",
"alias": "020d4da213770890e1c1",
"color": "#3399ff",
"num_pending_channels": 0,
"num_active_channels": 0,
"num_inactive_channels": 0,
"uris": [
....

3. 文件权限信息

$ ls -l
total 138404
-rwxrwxr-x 1 ubuntu ubuntu 293 Feb 6 09:38 admin.macaroon
drwxrwxr-x 2 ubuntu ubuntu 4096 Feb 5 14:48 bin
drwxr-xr-x 6 ubuntu ubuntu 4096 Jan 27 20:17 bitcoin-22.0
drwxrwxr-x 4 ubuntu ubuntu 4096 Feb 1 16:39 go
-rw-rw-r-- 1 ubuntu ubuntu 141702072 Mar 15 2022 go1.18.linux-amd64.tar.gz
drwxrwxr-x 72 ubuntu ubuntu 4096 Feb 1 16:36 lnd
-rw-rw-r-- 1 ubuntu ubuntu 0 Jan 27 20:13 screenlog.0

4. 报错信息

[Errno 2] No such file or directory:'/home/ubuntu/.lnd/data/chain/bitcoin/mainnet/admin.macaroon'


问题分析与解决步骤

核心问题:本地API读取的是本地路径,而非EC2上的文件

你的Django API运行在本地,代码里的MACAROON_PATH和TLS_PATH指向的是AWS EC2实例上的路径,本地机器根本没有这个目录,所以会提示文件不存在。

正确的访问流程

LND的REST API需要通过EC2公网地址访问,同时需要将EC2上的认证文件下载到本地,再调整代码配置:

  1. 下载EC2上的认证文件到本地
    在本地终端通过scp命令复制文件:

    # 复制admin.macaroon到当前目录
    scp ubuntu@ec2-18-195-111-81.eu-central-1.compute.amazonaws.com:/home/ubuntu/.lnd/data/chain/bitcoin/mainnet/admin.macaroon ./
    # 复制tls.cert到当前目录
    scp ubuntu@ec2-18-195-111-81.eu-central-1.compute.amazonaws.com:/home/ubuntu/.lnd/tls.cert ./
    

    然后修改Django代码里的路径为本地路径:

    MACAROON_PATH = "./admin.macaroon"
    TLS_PATH = "./tls.cert"
    
  2. 修复请求URL的拼写错误
    代码里的url = f"https//{REST_HOST}/v1/getinfo"少了一个冒号,正确写法是:

    url = f"{REST_HOST}/v1/getinfo"
    # 或者直接写完整URL:"https://ec2-18-195-111-81.eu-central-1.compute.amazonaws.com:8080/v1/getinfo"
    

    注意:LND REST API默认端口是8080,需要在URL中加上端口号,除非你已经修改过LND配置将端口映射到443。

  3. 配置EC2安全组允许外部访问

    • 打开EC2实例的安全组规则,添加一条入站规则:允许本地机器的IP访问8080端口(LND REST默认端口)
    • 检查LND的lnd.conf配置文件,确保restlisten参数设置为0.0.0.0:8080,允许外部IP访问
  4. 用curl验证请求可用性
    先在本地用curl测试,确认API能正常响应:

    curl -v --cacert ./tls.cert -H "Grpc-Metadata-macaroon: $(xxd -ps -u -c 1000 ./admin.macaroon)" https://ec2-18-195-111-81.eu-central-1.compute.amazonaws.com:8080/v1/getinfo
    

    如果curl能返回正确结果,再调整Django代码即可正常调用。

内容的提问来源于stack exchange,提问作者Pau1aAm7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 18:32:28