树莓派安装Docker和部署typecho+frp+cloudflare-ddns

在之前的博文中也说过,我的博客目前是运行在一台树莓派2B上,且已经稳定运行3年,同时使用了bypy进行备份,将树莓派的数据定期备份到百度云盘,这样就算哪天我的树莓派挂了,也能保证数据不丢失。但由于树莓派还承担了下载机的功能,考虑到目前树莓派的TF卡内存只有16G,所以元旦期间趁着之前IPv6也搞定了,就把树莓派做一下整体升级,把TF卡存储升级到64G,考虑到我的折腾劲,就把树莓派上部署的所有服务整体迁移到Docker下,算是对自己学习的Docker知识的一个整理吧。

Raspbian的具体安装过程详见之前的博文,树莓派搭建Typecho小记

1.安装Docker

Docker有两种安装方式,脚本安装和apt安装,一般推荐用脚本安装,非常方便。

sudo curl -sSL https://get.docker.com | sh

这时候,Docker就已经安装成功了,但我们这时候只能使用命令行来操作,我们可以搭配着再安装一个web管理面板,这样后续管理就非常方便了,推荐安装轻量易用的Portainer,主要是内存占用也比较低,符合树莓派的要求。

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

安装完以后,输入树莓派的IP:9000,就进入到Portainer的web管理面板,首次安装后需要设置下用户名和密码,这样以后就可以正常登录使用了。

2.部署typecho

安装完Docker以后,就可以在Docker上部署typecho了,typecho官网没有一个推荐的镜像,需要自己根据博客的配置选择一个合适的镜像,因为我的博客主要使用的是SQLite数据库,所以就需要找一个nginx+php+sqlite的镜像,通过强大的Google终于找到一个可以支持树莓派的且内存占用比较低的镜像codeideal/nginx-php-sqlite,通过大半个月的运行,目前总得来说一切良好。

docker run -d --name typecho --restart always \
-p 80:80 -p 443:443 \
-v /home/pi/Websites:/data/www \
-v /home/pi/Nginx/nginx.conf:/etc/nginx/nginx.conf \
-v typecho_data:/data  \
codeideal/nginx-php-sqlite:latest

上面的路径可以自定义,我把博客的源码放在了/home/pi/Websites目录,把Nginx的配置文件放在了/home/pi/Nginx目录下,你们的这个路径可能和我的不一样,酌情修改哈。

3.部署frp

frp主要是一个内网穿透工具,之前的博文也有解决如何原生的安装frp客户端和服务端,此次把frp客户端安装到Docker内,也是为了简化部署,使用的是Docker Hub上下载量最多的一个镜像snowdreamtech/frpc,对应的服务端是snowdreamtech/frps,实测也是挺好用的。

docker run -d --name frpc --network host --restart=always \
-v /etc/frp/frpc.ini:/etc/frp/frpc.ini \
snowdreamtech/frpc:latest

/etc/frp/frpc.ini 这个路径对应的就是你frp客户端配置的路径,自行修改哈。

4.部署cloudflare-ddns

由于目前已经有了IPv6地址,实测IPv6地址也可以访问,所以把域名也配置了AAAA记录,但有个问题,家庭宽带获取的IPv6地址不是静态的,而是会动态改变的,所以我们需要一个类似于IPv4的DDNS功能,来让动态改变后的IPv6同步到域名AAAA记录中,因为我的域名是托管在cloudflare上,且cloudflare也有一些API,通过强大的Google,我找到一个合适的镜像oznu/cloudflare-ddns:armhf,这个镜像是专门为了arm32适配过的,所以性能方面不成问题。

docker run -d --name ddns --restart=always \
-e API_KEY=xxxxxxx \
-e ZONE=example.com \
-e SUBDOMAIN=subdomain \
-e RRTYPE=AAAA \
-e PROXIED=true \
oznu/cloudflare-ddns:armhf

上面的API_KEY可以在cloudflare后台中找到,如果没有子域名SUBDOMAIN那一行可以省略,PROXIED默认值为false,表示不代理会返回真实的IP地址,建议改为true,这样就能通过cloudflare保护源IP地址。

标签:frp, docker, typecho, cloudflare