修改安装脚本
This commit is contained in:
29
bootstrap.sh
29
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
|
||||
|
||||
|
||||
@@ -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 "=== 完成 ==="
|
||||
Reference in New Issue
Block a user