树莓派4B arm64 搭建 docker+drone+gitea
树莓派4B arm64 搭建 docker+drone+gitea
记录时间: 2023年02月10日
树莓派烧录
如何用树莓派搭建一台永久运行的个人服务器?
https://mp.weixin.qq.com/s?__biz=MzI5NjA0ODkwNA==&mid=2651847658&idx=1&sn=267a1257b43d4a76f2a081ed157b77f9&chksm=f7b11b8dc0c6929b768fb1314c9dbcb75a5079ac24080294102dc72b349944750d8b32916f42&scene=27
树莓派安装官方系统,无桌面版本,最后发现自己是小丑!!!-哔哩哔哩
https://b23.tv/6xC0kiQ
- 树莓派官网:https://www.raspberrypi.com/
- 下载安装烧录工具:Raspberry Pi OS
- https://downloads.raspberrypi.org/imager/imager_latest.exe
- 下载Pi OS64位精简镜像:Raspberry Pi OS (64-bit) Raspberry Pi OS Lite
- https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2022-09-26/2022-09-22-raspios-bullseye-arm64-lite.img.xz
- 烧录完成后在boot分区加入文件
- ssh
- 空白文件
- userconf.txt
- 使用openSSL(openssl passwd -6)生成密码(raspberry)
- wpa_supplicant.conf
- 不能是windows的换行符
- ssh
- 插入内存卡启动, 使用Xshell连接树莓派
- 地址:raspberrypi
户名:pi
密码:raspberry
- 地址:raspberrypi
更换国内镜像站
清华大学开源软件镜像站
https://mirrors.tuna.tsinghua.edu.cn/help/raspbian/
# aarch64 用户:编辑 `/etc/apt/sources.list` 文件,用以下内容取代:
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free# 编辑 `/etc/apt/sources.list.d/raspi.list` 文件,删除原文件所有内容,用以下内容取代:
deb https://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ bullseye main
更新软件源列表
sudo apt-get update
(可选)更新升级以安装软件包,这个过程耗时较长
sudo apt-get upgrade
启用树莓派FTP传输协议
#FTP Server安装
sudo apt-get install vsftpd
#使用指令启动FTP服务:
sudo service vsftpd start
#允许树莓派写入权限:
sudo nano /etc/vsftpd.conf
#找到 write_enable=YES 的,将前面的 # 号删除即可
#删除注释符号后,按 Ctrl + X 保存,输入 Y 确认
修改时区
sudo dpkg-reconfigure tzdata
#找到亚洲 Asia,然后选择 shanghai 就可以了。
开机自启 ssh
sudo raspi-config
#进入选择找到 interfacing option 选择,然后找到 ssh,按回车使能 enable 就可以了。
docker相关软件安装
https://www.bilibili.com/read/cv17137378
安装docker
#可以直接使用脚本安装:
sudo curl -sSL https://get.docker.com | sh
#也可以使用国内 daocloud 一键安装命令:
sudo curl -sSL https://get.daocloud.io/docker | sh
#把 pi 用户添加到 docker 用户组,这样在执行 docker 命令时就不需要每次都带 sudo
sudo groupadd docker
sudo gpasswd -a $USER docker
newgrp docker#安装完毕后可以使用如下命令检查是否安装成功:
docker -v
#设置开机自启动:
sudo systemctl enable docker
配置阿里云镜像加速
Docker必备六大国内镜像
https://www.cnblogs.com/boonya/p/15954368.html
#配置阿里云镜像加速
#创建文件
sudo mkdir -p /etc/docker
#写入配置
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://lz2nib3q.mirror.aliyuncs.com"]
}
EOF
#docker重启
sudo systemctl daemon-reload
sudo systemctl restart docker
#检测docker配置查看是否配置成功
sudo docker info#我的阿里加速链接
#https://ma4s1a5t.mirror.aliyuncs.com
常用命令
#查看 Docker 版本
sudo docker -v
sudo docker pull 仓库/镜像:版本(留空的话默认为 latest)
sudo docker run 加参数,用来创建容器
#查看运行容器
sudo docker ps
#查看所有下载的镜像
sudo docker images
#docker重启
sudo systemctl daemon-reload
sudo systemctl restart docker
#检测docker配置
sudo docker info
#关闭docker服务
systemctl stop docker.socket
systemctl stop docker
安装 portainer - docker 管理图形化
官方文档
https://docs.portainer.io/v/ce-2.9/start/install/server/docker/linux
#下载 Docker 图形化界面 portainer 的镜像
sudo docker pull portainer/portainer-ce
#创建 portainer 数据卷
sudo docker volume create portainer_data
#运行 portainer
sudo docker run -d -p 9000:9000 \
--name portainer \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce
docker-compose安装
sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-aarch64" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-composedocker-compose -v
其他
数据卷
两个容器通过数据卷来数据共享
#创建数据卷
docker volume create my-vol
#数据卷列表
docker volume ls
#查看数据卷具体信息
docker volume inspect my-vol
#删除数据卷
docker volume rm my-vol
#清除无主的数据卷
docker volume prune#启动一个容器并挂载一个数据卷到容器的/webapp目录(两种方式:)
docker run -d -P --name nginx -v my-vol:/webapp nginx
docker run -d -P --name nginx --mount source=my-vol,target=/webapp nginx
#如果本地数据卷或者本地目录尚未创建,-v命令则会自动创建,--mount则会报错
#如果是容器里的目录不存在,两者都会自动创建
gitea自部署Git库
小小树莓派干大事-自部署Git库(一)
https://defloop.com/xiao-xiao-shu-mei-pai-gan-da-shi-zi-bu-shu-gitku-er/
docker部署gitea
https://zhuanlan.zhihu.com/p/563413410
# 然后拉取镜像
sudo docker pull gitea/gitea:latest
# 运行容器
sudo docker run -itd \
--privileged=true \
--restart=always \
--name=gitea \
-p 3022:22 \
-p 3000:3000 \
-v /home/docker/gitea/data:/data \
gitea/gitea:latest
访问地址: http://192.168.1.6:3000/
安装界面修改参数
#服务器域名
192.168.1.6:3000
#SSH服务端口
3022
#http服务端口
3000
Drone(基于Gitea)
如何在 Raspberry Pi 上设置 Drone CI(以及为什么不应该)
https://devpress.csdn.net/cloudnative/62fb70c9c6770329308000a4.html#devmenu3
轻量级CI/CD自动构建平台Gitea+Drone保姆级实践教程
https://huaweicloud.csdn.net/63311ad4d3efff3090b522e6.html
【Tools】Drone + Gitee:以SpringBoot项目为例,实现自动化软件构建和测试,CI/CD 持续集成/持续部署
https://blog.csdn.net/weixin_42029283/article/details/128658518
在gitea中创建OAuth应用
- 重定向URI填写: http://192.168.1.6:20080/login
- 记下CLIENT_ID与CLIENT_SECRET
安装drone-server
# 下载Drone-server镜像
sudo docker pull drone/drone:latest
# 开启debug
# --env=DRONE_LOGS_DEBUG=true \
# 运行Drone-server
sudo docker run --privileged=true \--volume=/home/docker/drone-server/data:/data \--env=DRONE_GITEA_SERVER=http://192.168.1.6:3000 \--env=DRONE_GITEA_CLIENT_ID=ec2a1045-4b88-4a4e-a290-f061bc4e2356 \--env=DRONE_GITEA_CLIENT_SECRET=7WAfS57DtEW2NmdVwIk1rfkns02LxQKZWp4F5StFZaJB \--env=DRONE_RPC_SECRET=dc3f3edea46c3e486621f375251aea58 \--env=DRONE_SERVER_HOST=192.168.1.6:20080 \--env=DRONE_SERVER_PROTO=http \--env=DRONE_USER_CREATE=username:bxuits,admin:true \--publish=20080:80 \--publish=20443:443 \--restart=always \--detach=true \--env=TZ=Asia/Shanghai \--name=drone-server \drone/drone:latest
安装drone-runner-docker
# 下载Drone-runner-docker镜像
sudo docker pull drone/drone-runner-docker:latest
# 运行drone-runner-docker
sudo docker run --detach --privileged=true \--volume=/var/run/docker.sock:/var/run/docker.sock \--env=DRONE_RPC_PROTO=http \--env=DRONE_RPC_HOST=192.168.1.6:20080 \--env=DRONE_RPC_SECRET=dc3f3edea46c3e486621f375251aea58\--env=DRONE_RUNNER_CAPACITY=1 \--env=DRONE_RUNNER_NAME=drone-runner-docker \--env=DRONE_UI_USERNAME=root \--env=DRONE_UI_PASSWORD=root \--publish=23000:3000 \--restart=always \--name=drone-runner-docker \--env=TZ=Asia/Shanghai \drone/drone-runner-docker:latest
nginx安装
https://blog.csdn.net/weixin_46244732/article/details/114315708
#拉取镜像
sudo docker pull nginx:latest
#先启动
sudo docker run --name nginx -d \
-p 80:80 \
nginx:latest
#复制容器配置文件
sudo mkdir /home/docker/nginx
sudo docker cp nginx:/etc/nginx/nginx.conf /home/docker/nginx/nginx.conf
sudo docker cp nginx:/etc/nginx/conf.d /home/docker/nginx/conf.d
sudo docker cp nginx:/usr/share/nginx/html /home/docker/nginx/html
停止并移除容器
sudo docker stop nginx
sudo docker rm nginx
再次启动容器并作目录挂载
sudo docker run --name nginx -d --privileged=true \
-v /home/docker/common-data:/home/docker/common-data \
-v /home/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/docker/nginx/conf.d:/etc/nginx/conf.d \
-v /home/docker/nginx/html:/usr/share/nginx/html \
-v /etc/localtime:/etc/localtime \
-e TZ="Asia/Shanghai" \
-p 80:80 \
--restart=always \
nginx:latest
nginx 读取文件配置
#打开
sudo nano /home/docker/nginx/conf.d/default.conf
#添加location /release {root /home/docker/common-data;autoindex on;}
#重启后访问
http://192.168.1.6/release/
.drone.yml配置
【Tools】Drone + Gitee:以SpringBoot项目为例,实现自动化软件构建和测试,CI/CD 持续集成/持续部署
https://blog.csdn.net/weixin_42029283/article/details/128658518
kind: pipeline # kind 属性定义了对象的种类。此示例定义了一个管道对象。
type: docker # type 属性定义管道的类型。此示例定义了一个 Docker 管道,其中每个管道步骤都在 Docker 容器内执行。
name: HBuilderXSsq # name 属性定义了管道的名称。您可以为您的项目定义一个或多个管道
platform:os: linuxarch: arm64steps: # 步骤部分定义了一系列串行执行的管道步骤。如果管道中的任何步骤失败,管道将立即退出- name: start # name 属性定义管道步骤的名称image: alpine:latest # image 属性定义了一个执行 shell 命令的 Docker 镜像。您可以使用来自任何 DockerHub 中的任何 Docker镜像。volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置- name: common-datapath: /home/docker/common-data # 将应用打包好的Jar和执行脚本挂载出来commands: # commands 属性将在 Docker 容器内执行的 shell 命令列表定义为容器入口点。如果任何命令返回非零退出代码,则管道步骤将失败。- ls /home/docker/common-data- echo 删除release目录- rm -rf /home/docker/common-data/release- echo 创建release目录- mkdir -p /home/docker/common-data/release- echo 复制release目录- cp -r ssq/unpackage/release/* /home/docker/common-data/release/
volumes: # 定义流水线挂载目录,用于共享数据- name: common-datahost:path: /home/docker/common-data # 从宿主机中挂载的目录