基地的git仓库发生了一些变动,只有一个gitea仓库留下来了,博客仓库还在,故此番折腾完成从仓库自动更新博客网页
请自行安装docker
与docker-compose
,遇上了几个大坑,费我一天时间,气死了气死了气死了
一、部署gitea
1.启用ssh支持
你可以参看官方教程SSH 容器直通或者直接使用下面的指令
创建一个名叫
git
的账户sudo adduser git
查看
USER_UID
和USER_GID
的值id git
创建 SSH 密钥对
sudo -u git ssh-keygen -t rsa -b 4096 -C "Gitea Host Key"
打开
/usr/local/bin/gitea
写入以下内容sudo vim /usr/local/bin/gitea
ssh -p 2222 -o StrictHostKeyChecking=no git@127.0.0.1 "SSH_ORIGINAL_COMMAND=\"$SSH_ORIGINAL_COMMAND\" $0 $@"
添加权限
sudo chmod +x /usr/local/bin/gitea
sudo -i
进入管理员输入下面的指令echo "$(cat /home/git/.ssh/id_rsa.pub)" >> /home/git/.ssh/authorized_keys
ctrl
+D
退出管理员模式
2.docker 启动
docker-compose.yml
文件
USER_UID/USER_GID
按上面查询的修改注意
./gitea
是放置gitea数据文件的地方,如果基地有遗传数据,修改路径即可
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:latest
container_name: gitea
environment:
- USER_UID=1001 # 这是git用户的uid,详见https://docs.gitea.cn/installation/install-with-docker/#ssh-%E5%AE%B9%E5%99%A8%E7%9B%B4%E9%80%9A
- USER_GID=1001 # 这是git用户组的gid
restart: always
networks:
- gitea
volumes:
- ./gitea:/data
- /home/git/.ssh/:/data/git/.ssh
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "8080:3000"
- "127.0.0.1:2222:22"
启动docker
docker-compose up -d
需要用ngix反代域名到8080端口
3.修改参数
配置文件在/gitea/conf/app.ini
里面加入
[webhook]
ALLOWED_HOST_LIST = *
[sever]
字段中含有域名的填写,如果后续有域名一直对不上的情况,请检查一下
二、启动Drone CI
1.在gitea中获得参数
像如下生成ID和密钥
生成会得到ID和密钥
ID就是DRONE_GITEA_CLIENT_ID
密钥是DRONE_GITEA_CLIENT_SECRET
,后面会用
Linux下使用openssl rand -hex 16
可获得一个32位的token,就是DRONE_RPC_SECRET
2.启动Drone
docker run \
--volume=/var/lib/drone:/data \
--env=DRONE_GITEA_SERVER={你的gitea地址,如https://git.gitea.cn} \
--env=DRONE_GITEA_CLIENT_ID={上面生成的ID} \
--env=DRONE_GITEA_CLIENT_SECRET={上面生成的密钥} \
--env=DRONE_RPC_SECRET={上面生成的32位token} \
--env=DRONE_SERVER_HOST={drone的地址,如drone.drone.cn} \
--env=DRONE_SERVER_PROTO={协议,如https} \
--env=DRONE_GIT_ALWAYS_AUTH=true \
--publish=6080:80 \
--publish=6443:443 \
--restart=always \
--detach=true \
--name=drone \
drone/drone:2
所有字段不需要引号,直接写
如果出现了什么错误需要删除重启,建议
sudo rm -rf /var/lib/drone
清一下之前产生的东西需要用ngix反代域名到6080端口,用HTTPS也是6080端口
3.启动drone-runner
docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DRONE_RPC_PROTO={协议,如https} \
-e DRONE_RPC_HOST={drone的地址,如drone.drone.cn} \
-e DRONE_RPC_SECRET={上面生成的32位token} \
-e DRONE_RUNNER_CAPACITY=2 \
-e DRONE_RUNNER_NAME=blog_auto \
-p 6030:3000 \
--restart always \
--name runner \
drone/drone-runner-docker:1
6030端口可以随便改
查看日志,正常运行
➜ ~ docker logs runner
time="2024-03-22T11:17:25Z" level=info msg="starting the server" addr=":3000"
time="2024-03-22T11:17:25Z" level=info msg="successfully pinged the remote server"
time="2024-03-22T11:17:25Z" level=info msg="polling the remote server" arch=amd64 capacity=2 endpoint="https://drone.xxxxx.cn" kind=pipeline os=linux type=docker
4.访问Drone
访问{drone的地址,如drone.drone.cn}
,会自动跳转到gitea进行鉴权,点击红色按钮授权即可
选择你的仓库点击ACTIVATE REPOSITORY
即启动了工作流
5.编写脚本文件
在HEXO博客仓库根目录下提交.drone.yml
文件,内容如下
kind: pipeline
type: docker
name: default
steps:
- name: Hexo Build
image: node:12-alpine
commands:
- npm config set registry https://registry.npmmirror.com
- npm install
- npm run build
- name: SCP File Transfer
image: appleboy/drone-scp
settings:
target: /home/blog/blog/
source: ./public
host:
from_secret: ssh_host
port:
from_secret: ssh_port
username:
from_secret: ssh_username
password:
from_secret: ssh_password
rm: true
when:
branch:
- master
event:
exclude:
- pull_request
trigger:
event:
- push
target修改为服务器上的某一文件夹,ngix反代到博客网址即可
6.返回Drone配置参数
博客仓库->Settings->Secrets->New secret,勾选Allow Pull Repuest
配置ssh_host
、ssh_port
、ssh_username
、ssh_password
四个参数
现在,当有推送时会编译博客,当pr成功时会将博客内容复制到目标文件夹,ngix反代完成实时更新
第一次点new build是会没有反应的,第一次启用后需要在仓库中添加
.drone.yml
后用个push,让自动完成更新一次
点击右上角new build可以测试
三、使用OwnCloud
顺便搭了个校园网局域网云盘,这玩意儿有点小坑,权限问题
这里我需要把一个机械硬盘持久化挂载在在某一目录并让 owncloud 使用
sudo vim /etc/fstab
追加如下内容让硬盘挂载持久化UUID=7E524C65524C23ED /home/v5/disk_hdd ntfs defaults,utf8,uid=33,gid=33,dmask=007,fmask=007 0 2
/home/v5/disk_hdd
:修改为你想挂载的路径33
:修改为id www-data
返回的值007
:意味770,只允许www-data
用户访问,不让其他用户访问(设置为770是他的要求,试了个网上的参数改为false也没作用只好按他说的做)- 用
ll
和df -h
可以查看权限和挂载结果
启动docker
docker run -p 7070:80 -d -v /home/v5/disk_hdd/owncloud:/var/www/html --name=owncloud --restart always owncloud
/home/v5/disk_hdd/owncloud
:修改为owncloud使用的文件夹7070
:需要ngix反代到域名
如果直接操作文件夹
owncloud/data/{user_name}/files
增加文件,需要进行如下操作在网页中才能看见docker exec -it owncloud /bin/bash
进入容器su www-data -s /bin/bash -c 'php occ files:scan --all'
更新索引文件夹ctrl
+D
退出容器
总结
我踩的第一个坑是docker run的时候每个字符串加了引号(或许是这个,不是很确定),然后域名当时改了要用git.
,一直写的是gitea.
,然后一直鉴权失败
第二个坑是gitea的app.ini,可恶,还是域名改了的问题,要从gitea.
换成git.
,当时就看到Drone运行的时候,我明明docker启动传的参是的git.
,但是他就从gitea.
仓库里面拉,一直鉴权失败
然后就是如果之前哪出问题了要重新run Drone一定要sudo rm -rf /var/lib/drone
,不然还是会和之前一样
参考教程: