diff --git a/forgejo-runner/7.0.0/docker-compose.yml b/forgejo-runner/7.0.0/docker-compose.yml index fcbaa9c43..f14192466 100644 --- a/forgejo-runner/7.0.0/docker-compose.yml +++ b/forgejo-runner/7.0.0/docker-compose.yml @@ -3,34 +3,37 @@ version: "3.9" services: forgejo_runner: image: code.forgejo.org/forgejo/runner:7.0.0 - container_name: ${CONTAINER_NAME} + container_name: ${CONTAINER_NAME:-forgejo-runner} restart: always - networks: - - 1panel-network + user: "1000:1000" # 非 root 用户运行容器 command: >- - bash -c ' - if [ ! -f /data/.runner ]; then - forgejo-runner create-runner-file --connect \ + /bin/sh -c ' + cd /data && + if [ ! -s .runner ]; then + echo ">>> Registering runner..." + forgejo-runner register --no-interactive \ --instance ${FORGEJO_INSTANCE_URL} \ + --token ${RUNNER_REGISTRATION_TOKEN} \ --name ${RUNNER_NAME} \ - --secret ${RUNNER_SHARED_SECRET} ; - sed -i -e "s|\"labels\": null|\"labels\": [\"${RUNNER_LABELS}\"]|" /data/.runner ; - forgejo-runner generate-config --config /data/config.yml ; - sed -i -e "s| level: info| level: debug|" /data/config.yml ; - fi ; - forgejo-runner --config /data/config.yml daemon + --labels ${RUNNER_LABELS}; + forgejo-runner generate-config > config.yml + fi; + echo ">>> Starting daemon..." + forgejo-runner --config config.yml daemon ' volumes: - ./data:/data - - /var/run/docker.sock:/var/run/docker.sock + - /var/run/docker.sock:/var/run/docker-forgejo-runner.sock environment: - FORGEJO_INSTANCE_URL=${FORGEJO_INSTANCE_URL} - - RUNNER_NAME=${RUNNER_NAME} - - RUNNER_LABELS=${RUNNER_LABELS} - - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET} - labels: + - RUNNER_REGISTRATION_TOKEN=${RUNNER_REGISTRATION_TOKEN} + - RUNNER_NAME=${RUNNER_NAME:-default-runner} + - RUNNER_LABELS=${RUNNER_LABELS:-docker:docker://node:20-bookworm} + networks: + - 1panel-network + labels: createdBy: "Apps" networks: 1panel-network: - external: true + external: true \ No newline at end of file diff --git a/forgejo-runner/7.0.0/scripts/init.sh b/forgejo-runner/7.0.0/scripts/init.sh new file mode 100644 index 000000000..76edf8ba9 --- /dev/null +++ b/forgejo-runner/7.0.0/scripts/init.sh @@ -0,0 +1,32 @@ +#!/bin/bash +set -e + +# 创建数据目录并设置权限 +mkdir -p data +touch data/.runner +touch data/config.yml +mkdir -p data/.cache + +# 设置为 forgejo-runner 镜像中的默认非 root 用户 +chown -R 1000:1000 data +chmod 775 data/.runner +chmod 775 data/.cache +chmod g+s data/.runner +chmod g+s data/.cache + +# 创建自定义 docker context 指向 /var/run/docker-forgejo-runner.sock +SOCK_PATH="/var/run/docker-forgejo-runner.sock" +CONTEXT_NAME="forgejo-runner-context" + +# 如果 context 已存在,则先删除 +if docker context inspect "$CONTEXT_NAME" >/dev/null 2>&1; then + docker context rm -f "$CONTEXT_NAME" + echo "已删除旧的 Docker context: $CONTEXT_NAME" +fi + +docker context create "$CONTEXT_NAME" \ + --docker "host=unix://$SOCK_PATH" + +echo "✅ 初始化完成:" +echo " - 已创建 ./data 并配置权限" +echo " - 已创建 Docker context: $CONTEXT_NAME -> $SOCK_PATH" diff --git a/forgejo-runner/7.0.0/scripts/uninstall.sh b/forgejo-runner/7.0.0/scripts/uninstall.sh new file mode 100644 index 000000000..cfdd4632b --- /dev/null +++ b/forgejo-runner/7.0.0/scripts/uninstall.sh @@ -0,0 +1,21 @@ +#!/bin/bash +set -e + +CONTEXT_NAME="forgejo-runner-context" +SOCK_PATH="/var/run/docker-forgejo-runner.sock" + +# 删除 Docker context +if docker context inspect "$CONTEXT_NAME" >/dev/null 2>&1; then + docker context rm -f "$CONTEXT_NAME" + echo "🗑️ 已删除 Docker context: $CONTEXT_NAME" +else + echo "⚠️ Docker context $CONTEXT_NAME 不存在,跳过删除。" +fi + +# 删除 socket 文件(如果存在) +if [ -S "$SOCK_PATH" ]; then + rm -f "$SOCK_PATH" + echo "🗑️ 已删除 socket 文件: $SOCK_PATH" +else + echo "⚠️ Socket 文件 $SOCK_PATH 不存在,跳过删除。" +fi \ No newline at end of file