送的礼物,当然要好好折腾折腾

引言

树莓派到如今已经发布了4代,性能自然是越来越强了,每一代都分为A、B型,也有比较特殊的型号比如去掉大部分接口很小巧的树莓派Zero、去掉所有接口的树莓派计算型CM(Compute Module)、B型的增强型B+等。其中B型是最常用的,而A、B型区别也只在于尺寸和接口不同,SoC基本都是一致的。

设备

  • MacBook Pro (14-inch, 2021)
  • Raspberry Pi Model B (4GB)

硬件

主要接口

image

GPIO 引脚

image

散热器

风扇的接线是接载树莓派最外排是从右往左数第二和第三个引脚上,红色接第二根引脚(+5V),黑色接第三根引脚(GND)。

IMG_2982

搭建系统

树莓派开发板没有配置板载 FLASH,它支持 SD 卡启动(或者从U盘启动),所以我们需要下载相应镜像,并将其烧写在 SD 上制作系统盘。

支持的系统如下: Raspbian、Arch Linux ARM、Debian Squeeze、Firefox OS、Gentoo Linux、Google Chrome OS、Raspberry Pi Fedora Remix、Slackware ARM、QtonPi、Slackware ARM、WebOS、RISC OS、FreeBSD、NetBSD、Android 4.0(Ice Cream Sandwich)

下载镜像

https://www.raspberrypi.com/software/operating-systems/

建议 NOOBS 安装。Mac用户直接可以跳过。

镜像烧写

准备工作

  • TF卡(2GB以上)
  • 读卡器
  • Raspberry Pi Imager(Mac烧录工具)

image

Tips

  1. 4b没有标准HDMI接口,只有micro HDMI接口
  2. 建议准备一根网线,直连在路由器上,这样方便获得树莓派ip地址
  3. 默认树莓派没有开启ssh,vnc服务,所以在无法连接显示屏的情况下,建议下载已经修改过设置的镜像

树莓派访问方式

  • 外接 HDMI 或者 AV 显示器,USB 鼠标、键盘

    • 初次连接使用
  • 使用 USB 转 TTL 串口模块通过串口访问树莓派

    image

  • SSH

    • username: pi
    • password: raspberry
  • VNC

运营商普遍屏蔽了5900这个端口,注意转发

树莓派配置

经过前面的步骤,树莓派已经可以正常工作了,但在正式开发使用之前,还需要做一些配置。

树莓派第一次使用的时候需要进行一个简单的配置,在命令行模式下运行以下命令:

1
sudo raspi-config

image

  • System Options
    • Wireless LAN 无线设置
    • Password 修改密码
  • Interface Options
    • SSH 开启SSH
    • VNC 开启VNC
  • Localisation Options
    • Lacale 建议英文
    • Timezone 初始为英国,这里改成 Shanghai/Hong Kong
  • Overclock 超频选项,新手不建议调整

树莓派网络与更新配置

有线网络

  • 自动获取 IP:树莓派默认有线网卡是使能的,只需将网线插入树莓派网卡,即可自动获得 IP(要求在局域网内)。
  • 手动设定 IP:如果是电脑与树莓派直连,不能自动获得 IP,可以使用:ifconfig eth0 192.168.1.123 设定 ip(下次重启就没了)。
  • 设置静态 IP:如果担心在同网络情况下 ip 或者不固定,可以讲电脑设置为静态 ip
    • 打开文件 /etc/dhcpcd.conf
    • 修改 # Example static IP configuration 下面的配置

无线网络

4b带有WiFi模块,所以可以直接跳过。

更新软件源

Linux的软件不像Windows,基本都是需要在线安装的,但是树莓派由于各种原因其默认的软件源在国内速度并不是很理想,所以需要更新一下软件源。

  • 软件更新源

    1
    
    sudo vi /etc/apt/sources.list
    
  • 系统更新源

    1
    
    sudo vi /etc/apt/sources.list.d/raspi.list
    

这里我们使用 清华源 ,根据自己机器操作系统的版本修改文件内容。

  • 查看系统版本

    1
    
    lsb_release -a
    
    1
    2
    3
    4
    5
    
    No LSB modules are available.
    Distributor ID:	Raspbian
    Description:	Raspbian GNU/Linux 10 (buster)
    Release:	10
    Codename:	buster
    

挂载

  • 使用fdisk命令查看设备硬盘情况

    1
    
    sudo fdisk -l
    
  • 使用 df 查看挂载情况

    1
    
    df -h
    

手动挂载

  • /mnt 下新建一个目录作为挂载点

    1
    
    sudo mkdir /mnt/udisk
    
  • 挂载

    1
    
    sudo mount -o uid=pi,gid=pi /dev/sda1 /mnt/udisk
    
  • 卸载

    1
    
    sudo umount /mnt/1GB_USB_flash
    

Tips

  1. sda1 是取决于你的实际情况,a 表示第一个硬盘,1 表示第一个分区。
  2. FAT 格式 U 盘 mount 本身就能支持,但如果你的 U 盘或移动硬盘使用的是 exFAT 格式,mount 会说不支持。 安装 exfat-fuse 软件之后 mount 就支持了。 sudo apt-get install exfat-fuse

开机挂载

  • /etc/fstab 中新增一行,每次开机都会挂载

    1
    
    /dev/sda1 /mnt/udisk vfat rw,defaults 0 0
    

热插挂载

需要希望想电脑一样,插上自动识别挂载在某一目录下,拔下自动 umount,按以下操作,会自动在 /mnt/udisk 目录下挂载 U 盘。

  • 新建文件

    1
    
    sudo vi /etc/udev/rules.d/10-usbstorage.rules
    
  • 输入

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    
    KERNEL!="sd*", GOTO="media_by_label_auto_mount_end"  
    SUBSYSTEM!="block",GOTO="media_by_label_auto_mount_end"  
    IMPORT{program}="/sbin/blkid -o udev -p %N"  
    ENV{ID_FS_TYPE}=="", GOTO="media_by_label_auto_mount_end"  
    ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"  
    ENV{ID_FS_LABEL}=="", ENV{dir_name}="Untitled-%k"  
    ACTION=="add", ENV{mount_options}="relatime,sync"  
    ACTION=="add", ENV{ID_FS_TYPE}=="vfat", ENV{mount_options}="iocharset=utf8,umaskk  
    =000"  
    ACTION=="add", ENV{ID_FS_TYPE}=="ntfs", ENV{mount_options}="iocharset=utf8,umaskk  
    =000"  
    ACTION=="add", RUN+="/bin/mkdir -p /mnt/udisk/", RUN+="/bin/mount -o $env{mount__  
    options} /dev/%k /mnt/udisk/"  
    
    ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /mnt/udisk/}", RUN+="//  
    bin/rmdir /mnt/udisk/"  
    LABEL="media_by_label_auto_mount_end"
    

    4b上不需要这个功能,默认挂在 /media/pi/<udisk_name>

墨水屏

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
== Hardware connection ==
    EPD    =>    Raspberry Pi
  * VCC    ->    3.3
  * GND    ->    GND
  * DIN    ->    MOSI
  * CLK    ->    SCLK
  * CS     ->    24 (Physical, BCM: CE0, 8)
  * D/C    ->    22 (Physical, BCM: 25)
  * RES    ->    11 (Physical, BCM: 17)
  * BUSY   ->    18 (Physical, BCM: 24)

软件

统计端口

applicationlocal porturl
smb139,445
mysql3306
calendar5000calendar.pi.eveneko.com:9000
vnc5900pi.eveneko.com:5901
pihole_web8488
clash_web8588clash.pi.eveneko.com:9000
clash7890,9090
nextcloud8688
aria26800
ariaNg8788aria2.pi.eveneko.com:9000
frp dashboard7500pi.eveneko.com:7500
jupyter8888jupyter.pi.eveneko.com:9000
portainer8988portainer.pi.eveneko.com:9000

中文

  • 安装中文字库

    1
    
    sudo apt-get install ttf-wqy-zenhei
    
  • 安装中文输入法

    1
    
    sudo apt-get install fcitx fcitx-googlepinyin fcitx-module-cloudpinyin fcitx-sunpinyin
    

python3

  • 默认使用python3

    1
    2
    
    sudo rm /usr/bin/python
    sudo ln -s /usr/bin/python3.7 /usr/bin/python
    
  • 换源

    • 临时使用

      1
      
      pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
      
    • 设为默认

      1
      2
      
      pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
      pip3 install pip -U
      

nginx

  • 安装

    1
    
    sudo apt-get install nginx
    
  • 其他命令

    1
    2
    3
    4
    5
    6
    
    # 启动 nginx
    systemctl start nginx
    # 停止
    systemctl stop nginx
    # 加载配置文件
    systemctl reload nginx
    
  • 启动

    1
    
    systemctl enable nginx
    

jupyterlab

  • 安装

    1
    
    pip3 install jupyter
    
  • 配置

    1
    
    python3 -m jupyter notebook --generate-config
    

    修改以下内容

    1
    2
    3
    4
    5
    6
    7
    8
    
    c.NotebookApp.allow_origin = '*'
    c.NotebookApp.ip = '0.0.0.0'
    c.NotebookApp.open_browser = False
    c.NotebookApp.port = 8888
    c.NotebookApp.notebook_dir = '</home/pi>'
    c.NotebookApp.allow_root = True
    c.NotebookApp.allow_remote_access = True
    c.NotebookApp.token = ''
    
  • 开机自启动

    /etc/init.d 下新建文件 jupyter.init

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    #!/bin/bash 
    ### BEGIN INIT INFO
    # Provides:          jupyter
    # Required-Start:    $local_fs $remote_fs $network $syslog
    # Required-Stop:     $local_fs $remote_fs $network $syslog
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: jupyter service
    # Description:       jupyter service daemon
    ### END INIT INFO 
    case "$1" in
        start)
            echo "starting jupyterlab"
            su pi -c "nohub python3 -m jupyterlab > /dev/null 2>&1 &"
            ;;
        stop)
            echo "stopping jupyterlab"
            kill $(ps aux|grep -m 1 'python3 -m jupyterlab'|awk '{ print $2}')
            ;;
        *)
            echo "Usage: service jupyterlab start|stop"
            exit 1
            ;;
    esac
    exit 0
    

    添加权限

    1
    
    sudo chmod +x /etc/init.d/jupyter.init
    

    设置开机启动

    1
    
    sudo update-rc.d jupyter.init defaults
    

    重启

    rcconf 查看启动项

    开机启动目前用supervisor实现,还可以守护进程。

frp内网穿透

frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。

frp releases 下载对应版本的frp

下载后,对应修改 frps.ini

  • 服务端

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    [common]
    bbind_port = 7000
    privilege_token = eveneko
    max_pool_count = 5
    dashboard_port = 7500
    dashboard_user = admin
    dashboard_pwd = admin
    vhost_http_port = 9000
    #subdomain_host = pi.eveneko.com
    

    后台启动

    1
    
    nohup ./frps -c frps.ini>/dev/null 2>&1 &
    

    /etc/init.d 下新建文件 frps.init

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    #!/bin/bash 
    ### BEGIN INIT INFO
    # Provides:          frp
    # Required-Start:    $local_fs $remote_fs $network $syslog
    # Required-Stop:     $local_fs $remote_fs $network $syslog
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: frps service
    # Description:       frps service daemon
    ### END INIT INFO 
    case "$1" in
        start)
            echo "starting frps"
            nohup /home/ubuntu/Workspace/frp/frps -c /home/ubuntu/Workspace/frp/frps.ini>/dev/null 2>&1 &
            ;;
        stop)
            echo "stopping frps"
            kill $(ps aux|grep -m 1 '/home/ubuntu/Workspace/frp/frps -c /home/ubuntu/Workspace/frp/frps.ini'|awk '{ print $2}')
            ;;
        *)
            echo "Usage: service frps start|stop"
            exit 1
            ;;
    esac
    exit 0
    

    开机启动目前用supervisor实现,还可以守护进程。

  • 客户端

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    
    [common]
    server_addr = pi.eveneko.com
    server_port = 7000
    privilege_token = eveneko
    
    [ssh]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 22
    remote_port = 2222
    
    [pi-vnc]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 5900
    remote_port = 5901
    
    [pi-jupyter]
    type = http
    local_port = 8888
    custom_domains = jupyter.pi.eveneko.com
    #subdomain = jupyter
    
    [pi-ariaNg]
    type = http
    local_port = 8788
    custom_domains = aria2.pi.eveneko.com
    
    [pi-aria2]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 6800
    remote_port = 6800
    
    [pi-portainer]
    type = http
    local_port = 8988
    custom_domains = portainer.pi.eveneko.com
    
    [pi-clash]
    type = http
    local_port = 8588
    custom_domains = clash.pi.eveneko.com
    
    [pi-calendar]
    type = http
    local_port = 5000
    custom_domains = calendar.pi.eveneko.com
    

    后台启动

    1
    
    nohup ./frpc -c frpc.ini>/dev/null 2>&1 &
    

    /etc/init.d 下新建文件 frpc.init

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    #!/bin/bash 
    ### BEGIN INIT INFO
    # Provides:          frp
    # Required-Start:    $local_fs $remote_fs $network $syslog
    # Required-Stop:     $local_fs $remote_fs $network $syslog
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: frpc service
    # Description:       frpc service daemon
    ### END INIT INFO 
    case "$1" in
        start)
            echo "starting frpc"
            nohup /home/pi/Workspace/frp/frpc -c /home/pi/Workspace/frp/frpc.ini>/dev/null 2>&1 &
            ;;
        stop)
            echo "stopping frpc"
            kill $(ps aux|grep -m 1 '/home/pi/Workspace/frp/frpc -c /home/pi/Workspace/frp/frpc.ini'|awk '{ print $2}')
            ;;
        *)
            echo "Usage: service frpc start|stop"
            exit 1
            ;;
    esac
    exit 0
    

    开机启动目前用supervisor实现,还可以守护进程。

supervisor

帮助我们守护进程,自动恢复服务

  • 安装

    1
    
    sudo apt-get install supervisor
    
  • 配置

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    
    [program:frpc]
    directory = /home/pi/Workspace/frp/ ;
    command = /home/pi/Workspace/frp/frpc -c /home/pi/Workspace/frp/frpc.ini ;
    root = pi ;
    stopsignal = INT ;
    autostart = true ;
    startsecs = 5 ;
    autorestart = true ;
    startretries = 10 ;
    stopasgroup = true ;
    killasgroup = true ;
    redirect_stderr = true ;
    stdout_logfile_maxbytes = 20MB ;
    stdout_logfile_backups = 20 ;
    stdout_logfile = /var/log/frpc.log ;
    
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    
    [program:jupyterlab]
    directory = /home/pi/ ;
    command = python3 -m jupyterlab ;
    user = pi ;
    stopsignal = INT ;
    autostart = true ;
    startsecs = 10 ;
    autorestart = true ;
    startretries = 10 ;
    stopasgroup = true ;
    killasgroup = true ;
    redirect_stderr = true ;
    stdout_logfile_maxbytes = 20MB ;
    stdout_logfile_backups = 20 ;
    stdout_logfile = /var/log/jupyterlab.log ;
    
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    
    [program:ncovbot]
    directory = /home/pi/Workspace/BUPT-NCOV-AUTO-REPORT-BOT/ ;
    command = /home/pi/Workspace/BUPT-NCOV-AUTO-REPORT-BOT/venv/bin/python3 ./main.py ;
    environment=http_proxy="http://localhost:7890",https_proxy="http://localhost:7890"
    user = pi ;
    stopsignal = INT ;
    autostart = true ;
    startsecs = 5 ;
    autorestart = true ;
    startretries = 10 ;
    stopasgroup = true ;
    killasgroup = true ;
    redirect_stderr = true ;
    stdout_logfile_maxbytes = 20MB ;
    stdout_logfile_backups = 20 ;
    stdout_logfile = /var/log/ncovbot.log ;
    

    注意 supervisor 的环境变量需要

  • 重新加载配置

    1
    
    sudo supervisorctl reload
    
  • 查看状态

    1
    
    sudo supervisorctl status
    

    注意user是root到时候,可能会出现一下环境问题

docker

  • docker

    1
    
    sudo curl -sSL https://get.docker.com | sh
    
  • 换源

    1
    
    sudo vim /etc/docker/daemon.json
    
    1
    2
    3
    
    {
    "registry-mirrors": ["https://registry.docker-cn.com"]
    }
    
  • docker-compose

    Docker Compose 的安装方式有很多种,但由于 ARM 架构的限制,树莓派上的 Docker Compose 建议使用 pip 安装。

    1
    
    sudo pip3 install -U docker-compose
    
  • ui

1
2
3
sudo docker volume create portainer_data

sudo docker run -d -p 8988:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/

默认用户admin

Aria2

Aria2 是一款自由、跨平台命令行界面的下载管理器,和 wget 这类下载器不同的是,Aria2 不仅支持 BitTorrent,还能够从各种来源多路检索所请求的文件。包括 HTTP,HTTPS,FTP 和 BitTorrent 协议。

而且 Raspbain 系统默认已经安装了 Aria2,运行 apt-cache show aria2 即可查看安装信息。

1
sudo docker run -d --name aria2-ui-pi -p 8788:80 -p 6800:6800 -v /data:/data --restart=always huangzulin/aria2-ui-pi

默认用户/密码 admin/admin

mysql

为Nextcloud准备

1
2
3
4
5
6
7
8
docker pull mysql

docker run -d -p 3306:3306 -v /mnt/sde/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw --name mysql mysql

# linux/arm/v7 不支持mysql,需要安装
docker pull hypriot/rpi-mysql

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d -p 12345:3306 hypriot/rpi-mysql

Nextcloud

Nextcloud是一款开源免费的私有云存储网盘项目,可以让你快速便捷地搭建一套属于自己或团队的云同步网盘,从而实现跨平台跨设备文件同步、共享、版本控制、团队协作等功能。它的客户端覆盖了Windows、Mac、Android、iOS、Linux 等各种平台,也提供了网页端以及 WebDAV接口,所以你几乎可以在各种设备上方便地访问你的云盘。

1
2
3
sudo docker pull nextcloud

docker run -d --restart=always -p 8688:80 -v /mnt/sde/nextcloud:/var/www/html -v /mnt/sde:/var/www/data -link mysql:mysql --name nextcloud nextcloud

–link 链接数据库容器,链接使用mysql容器镜像mysql(容器名称), 不使用则为sqlite数据库 -v 挂载目录,将容器/var/www/html挂载到主机/mnt/sde/nextcloud下面,html为服务路径,稍后会修改/mnt/sde/nextcloud/config/config.php的data,修改data的目录

docker-compose.yml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
version: '2'

services:
  mysql:
    image: ibex/debian-mysql-server-5.7
    restart: always
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_PASSWORD=<password>
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
    container_name: mysql

  nextcloud:
    image: arm32v7/nextcloud
    ports:
      - 8688:80
    links:
      - mysql
    volumes:
      - nextcloud:/var/www/html
    restart: always
    container_name: nextcloud

  volumes:
    db:
    nextcloud:

等一块硬盘盒

smb

1
docker run -d -p 139:139 -p 445:445 --name samba -v /mnt/sde:/mount --restart=always dperson/samba -u "root;root" -s "root;/mount/;yes;no;yes;all;all;all" -w "WORKGROUP" -g "force user=root" -g "guest account=root"

clash

科学上网,dddd

  • docker-compose.yaml

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    
    version: '3'
    services:
    clash:
        # ghcr.io/dreamacro/clash
        # ghcr.io/dreamacro/clash-premium
        # dreamacro/clash
        # dreamacro/clash-premium
        image: dreamacro/clash
        container_name: clash
        volumes:
        - ./config.yaml:/root/.config/clash/config.yaml
        # - ./ui:/ui # dashboard volume
        ports:
        - "7890:7890"
        - "7891:7891"
        - "9090:9090"
        # - "8080:8080" # external controller (Restful API)
        # # TUN
        # cap_add:
        #   - NET_ADMIN
        # devices:
        #   - /dev/net/tun
        restart: unless-stopped
    #network_mode: "bridge" # or "host" on Linux
    clash_web:
        image: haishanh/yacd
        restart: always
        depends_on:
            - clash
        ports:
            - 8588:80
        container_name: clash_web
    
  • 创建 config.yaml后,执行

    1
    
    sudo docker-compose up -d
    
  • 查看log

    1
    
    sudo docker-compose logs
    
  • 停止clash

    1
    
    docker-compose stop
    
  • 测试

    1
    
    curl -x 127.0.0.1:7890 http://www.google.com
    
  • 设置代理

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    # Define `setproxy` command to enable proxy configuration
    setproxy() {
    export http_proxy="http://localhost:7890"
    export https_proxy="http://localhost:7890"
    }
    
    # Define `unsetproxy` command to disable proxy configuration
    unsetproxy() {
    unset http_proxy
    unset https_proxy
    }
    
    # By default, enable proxy configuration for terminal login
    setproxy
    

pihole

Pi-hole 是一款开源且免费的 DNS 沉洞服务器(DNS sinkhole)

  • docker-compose.yaml

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    version: "3"
    
    # More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/
    services:
    pihole:
        container_name: pihole
        image: pihole/pihole:latest
        ports:
        - "53:53/tcp"
        - "53:53/udp"
        #- "67:67/udp" # Only required if you are using Pi-hole as your DHCP server
        - "8488:80/tcp"
        environment:
        TZ: 'America/Chicago'
        # WEBPASSWORD: 'set a secure password here or it will be random'
        # Volumes store your data between container upgrades
        volumes:
        - './etc-pihole:/etc/pihole'
        - './etc-dnsmasq.d:/etc/dnsmasq.d'    
        #   https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
        cap_add:
        - NET_ADMIN # Recommended but not required (DHCP needs NET_ADMIN)      
        restart: unless-stopped
    
  • web

  • ad host

国内广告屏蔽不够全面 设备有时候不自动更换dns