diff --git a/bootstrap.sh b/bootstrap.sh index a549296..b3ee9af 100644 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -36,35 +36,36 @@ create-shokku-app() { echo "=> pulling image (version: $SHOKKU_VERSION)" HOST_SSH_PORT=$(grep "Port " /etc/ssh/sshd_config | awk '{ print $2 }') - docker pull "$SHOKKU_IMAGE" &>/dev/null + docker pull "$SHOKKU_IMAGE" SHOKKU_IMAGE_DIGEST=$(docker inspect --format='{{index .RepoDigests 0}}' "$SHOKKU_IMAGE") echo "=> creating & configuring dokku app" - dokku apps:create shokku &>/dev/null + dokku apps:create shokku dokku docker-options:add shokku deploy \ - "--add-host=host.docker.internal:host-gateway" &>/dev/null + "--add-host=host.docker.internal:host-gateway" dokku config:set shokku \ DOKKU_SSH_HOST='host.docker.internal' \ - DOKKU_SSH_PORT="$HOST_SSH_PORT" &>/dev/null + DOKKU_SSH_PORT="$HOST_SSH_PORT" echo "==> creating storage" - dokku storage:ensure-directory shokku --chown false &>/dev/null - dokku storage:mount shokku "$SHOKKU_APP_DATA_MOUNT_PATH" &>/dev/null - chown -R "$DISTROLESS_NONROOT_UID":"$DISTROLESS_NONROOT_UID" "$SHOKKU_DATA_DIR" &>/dev/null + dokku storage:ensure-directory shokku --chown false + dokku storage:mount shokku "$SHOKKU_APP_DATA_MOUNT_PATH" + chown -R "$DISTROLESS_NONROOT_UID":"$DISTROLESS_NONROOT_UID" "$SHOKKU_DATA_DIR" echo "==> bootstrapping" - dokku config:set shokku DOKKU_SKIP_DEPLOY=true &>/dev/null - dokku git:from-image shokku "$SHOKKU_IMAGE_DIGEST" &>/dev/null + dokku config:set shokku DOKKU_SKIP_DEPLOY=true + dokku git:from-image shokku "$SHOKKU_IMAGE_DIGEST" - shokku_ssh_key=$(dokku run shokku bootstrap) &>/dev/null - echo "$shokku_ssh_key" | dokku ssh-keys:add "$SHOKKU_DOKKU_USER" &>/dev/null + shokku_ssh_key=$(dokku run shokku bootstrap) + echo "$shokku_ssh_key" | dokku ssh-keys:add "$SHOKKU_DOKKU_USER" echo "==> deploying" - dokku config:unset shokku DOKKU_SKIP_DEPLOY &>/dev/null + dokku config:unset shokku DOKKU_SKIP_DEPLOY if [ -z "$SHOKKU_CERT" ]; then echo "==> enabling letsencrypt" - dokku letsencrypt:enable shokku &>/dev/null + dokku letsencrypt:set shokku email ssl@ssl.com + dokku letsencrypt:enable shokku else echo "==> adding certificate from SHOKKU_CERT" dokku certs:add shokku < "$SHOKKU_CERT" @@ -92,7 +93,7 @@ main() { for plugin in redis postgres mongo mysql; do if ! dokku plugin:installed $plugin; then echo "=> Installing plugin $plugin" - dokku plugin:install https://git.shusou.com/dokku/dokku-$plugin.git $plugin &>/dev/null + dokku plugin:install https://git.shusou.com/dokku/dokku-$plugin.git $plugin fi done diff --git a/build_and_push.sh b/build_and_push.sh index 02280fd..aaddef3 100755 --- a/build_and_push.sh +++ b/build_and_push.sh @@ -1,14 +1,16 @@ #!/bin/bash -# Docker 镜像构建和推送脚本 -# 使用方法: ./build_and_push.sh [推送标志] [镜像标签] +# Docker amd64 镜像构建脚本 +# 使用方法: +# ./build_amd64.sh # 仅构建 +# ./build_amd64.sh push # 构建并推送 -set -e # 遇到错误立即退出 +set -e # 配置变量 IMAGE_NAME="shokku" -REGISTRY="ccr.ccs.tencentyun.com" # 替换为您的仓库地址 -NAMESPACE="miaogai" # 替换为您的命名空间 +REGISTRY="ccr.ccs.tencentyun.com" +NAMESPACE="miaogai" DOCKERFILE="Dockerfile" BUILD_CONTEXT="." @@ -19,58 +21,38 @@ TAG=${2:-"latest"} # 完整的镜像地址 FULL_IMAGE_NAME="${REGISTRY}/${NAMESPACE}/${IMAGE_NAME}:${TAG}" -echo "=== Docker 镜像构建和推送 ===" +echo "=== Docker amd64 镜像构建 ===" echo "镜像名称: ${FULL_IMAGE_NAME}" -echo "Dockerfile: ${DOCKERFILE}" -echo "构建上下文: ${BUILD_CONTEXT}" -# 检查 Docker 是否安装 +# 检查 Docker if ! command -v docker &> /dev/null; then - echo "错误: 未找到 Docker,请先安装 Docker" + echo "错误: 未找到 Docker" exit 1 fi # 构建镜像 -echo "开始构建镜像..." -docker build -t ${IMAGE_NAME}:${TAG} -f ${DOCKERFILE} ${BUILD_CONTEXT} +echo "开始构建 amd64 镜像..." +docker build --platform linux/amd64 -t ${IMAGE_NAME}:${TAG} -f ${DOCKERFILE} ${BUILD_CONTEXT} # 标记镜像 -echo "标记镜像..." docker tag ${IMAGE_NAME}:${TAG} ${FULL_IMAGE_NAME} -# 如果需要推送 -if [ "$PUSH" = "true" ]; then +# 推送逻辑 +if [ "$PUSH" = "push" ]; then echo "登录到镜像仓库..." - # 检查是否已经登录到目标仓库 - if ! docker info 2>/dev/null | grep -q "${REGISTRY}"; then - echo "需要登录到镜像仓库: ${REGISTRY}" - - # 从环境变量获取凭据,如果存在的话 - if [ -n "$DOCKER_REGISTRY_USER" ] && [ -n "$DOCKER_REGISTRY_PASSWORD" ]; then - echo "使用环境变量中的凭据进行登录..." - echo "$DOCKER_REGISTRY_PASSWORD" | docker login ${REGISTRY} --username "$DOCKER_REGISTRY_USER" --password-stdin - else - # 交互式登录 - echo "请输入镜像仓库凭据:" - docker login ${REGISTRY} - fi - - # 检查登录是否成功 - if [ $? -ne 0 ]; then - echo "错误: 镜像仓库登录失败" - exit 1 - fi + if [ -n "$DOCKER_REGISTRY_USER" ] && [ -n "$DOCKER_REGISTRY_PASSWORD" ]; then + echo "$DOCKER_REGISTRY_PASSWORD" | docker login ${REGISTRY} --username "$DOCKER_REGISTRY_USER" --password-stdin else - echo "已登录到镜像仓库 ${REGISTRY}" + docker login ${REGISTRY} fi - echo "推送镜像到仓库..." + echo "推送镜像..." docker push ${FULL_IMAGE_NAME} - - echo "✅ 镜像推送完成: ${FULL_IMAGE_NAME}" + echo "✅ amd64 镜像推送完成: ${FULL_IMAGE_NAME}" else - echo "ℹ️ 镜像构建完成,未推送 (使用 'true' 作为第1个参数来推送)" + echo "✅ amd64 镜像构建完成" + echo "ℹ️ 使用 '$0 push' 来推送镜像" fi echo "=== 完成 ===" \ No newline at end of file