当前位置: 首页 > article >正文

在受限网络环境下的 Docker 部署实践 —— Strapi 和 Appsmith 的解决之道20241128

在受限网络环境下的 Docker 部署实践 —— Strapi 和 Appsmith 的解决之道

小图标 关键词:Strapi、Appsmith、Docker、网络受限、镜像传输

在构建开发环境时,网络环境通常是一个关键因素。然而,如何在网络受限的服务器环境下部署如 StrapiAppsmith 等依赖 Docker 的开源工具?本文将带您通过源服务器下载目标服务器传输脚本化加载部署的完整流程,解决无法拉取镜像的困扰。


🛠 背景与挑战

项目背景

本次实践的目标是搭建一个技术问答与知识复盘系统

  1. 使用 Strapi 作为后端内容管理系统(CMS)。
  2. 使用 Appsmith 搭建问题提交与展示的前端界面。
  3. 配合 MySQL 数据库,提供高效存储与查询支持。

主要挑战

由于目标服务器网络受限,遇到以下问题:

  • 无法拉取 Docker 镜像:无法访问 Docker Hub 导致镜像下载失败。
  • 网络和 DNS 限制:目标服务器无外网访问权限。
  • 部署效率低下:手动解决网络限制耗时长,部署流程容易出错。

核心需求:在无法直接访问 Docker Hub 的环境下,快速、稳定地部署所需服务。


🚀 解决方案概述

小图标 分步解析解决方案

  1. 利用源服务器下载 Docker 镜像:在网络通畅的服务器上下载并保存所需的 Docker 镜像文件。
  2. 通过文件传输将镜像传递到目标服务器:借助 scp 等工具传输镜像文件。
  3. 在目标服务器上加载镜像并部署:从镜像文件中加载服务,并完成服务部署与配置。

📋 实施步骤

以下是分步骤解决问题的详细实践过程。

1. 在源服务器下载并保存 Docker 镜像

1.1 创建镜像存放目录

首先,为存储 Docker 镜像文件创建固定目录,确保文件管理清晰:

mkdir -p $HOME/docker_iso
1.2 编写下载与保存脚本

创建一个脚本,完成镜像的自动化下载和保存操作。

nano download_and_save_images.sh

脚本内容:

#!/bin/bash

# 定义要下载的镜像列表
images=(
  "mysql:8.0"
  "strapi/strapi"
  "appsmith/appsmith-ce"
  "mongo"
  "redis"
)

# 镜像存放目录
image_dir="$HOME/docker_iso"
mkdir -p "$image_dir"

# 下载并保存镜像
for image in "${images[@]}"; do
  echo "正在拉取镜像:$image"
  docker pull "$image"
  image_name=$(echo "$image" | tr '/:' '_')
  docker save -o "$image_dir/${image_name}.tar" "$image"
done

echo "镜像已保存至目录:$image_dir"
1.3 运行脚本
chmod +x download_and_save_images.sh
./download_and_save_images.sh

脚本运行后,所有镜像将被保存为 .tar 文件,存放在 $HOME/docker_iso 目录中。


2. 将镜像文件传输到目标服务器

使用 scp 命令,将镜像文件传输到目标服务器。

scp $HOME/docker_iso/*.tar user@目标服务器IP:$HOME/
  • 目标服务器路径:传输到 $HOME 目录。
  • 便捷传输技巧:使用 ssh-copy-id 设置免密码登录,减少人为干预。

3. 在目标服务器加载镜像并部署服务

3.1 创建存放目录并移动镜像文件
mkdir -p $HOME/docker_iso
mv $HOME/*.tar $HOME/docker_iso/
3.2 编写加载脚本

创建脚本 load_images.sh,用于批量加载 Docker 镜像。

nano load_images.sh

脚本内容:

#!/bin/bash

# 镜像存放目录
image_dir="$HOME/docker_iso"

# 加载镜像
for tar_file in "$image_dir"/*.tar; do
  echo "正在加载镜像文件:$tar_file"
  docker load -i "$tar_file"
done

echo "所有镜像加载完成。"
3.3 运行脚本
chmod +x load_images.sh
./load_images.sh
3.4 部署服务
3.4.1 创建 Docker 网络
docker network create app-network
3.4.2 部署 MySQL 容器
docker run -d \
  --name mysql \
  --network app-network \
  -e MYSQL_ROOT_PASSWORD='StrongRootPass!2023' \
  -e MYSQL_DATABASE='strapi' \
  -e MYSQL_USER='strapiuser' \
  -e MYSQL_PASSWORD='StrapiUserPass@2023' \
  -v mysql_data:/var/lib/mysql \
  mysql:8.0
3.4.3 部署 Strapi

创建 docker-compose.yml 文件:

version: '3'
services:
  strapi:
    image: strapi/strapi
    container_name: strapi
    environment:
      DATABASE_CLIENT: mysql
      DATABASE_HOST: mysql
      DATABASE_PORT: 3306
      DATABASE_NAME: strapi
      DATABASE_USERNAME: strapiuser
      DATABASE_PASSWORD: 'StrapiUserPass@2023'
    ports:
      - '1337:1337'
    networks:
      - app-network
networks:
  app-network:
    external: true

启动 Strapi:

docker-compose up -d
3.4.4 部署 Appsmith

创建并启动 Appsmith 服务,同理进行配置。


📊 数据可视化

以下是整个流程的可视化图表,帮助快速理解:

流程示意图

Docker镜像下载
SCP传输
Docker Load加载
源服务器
保存为.tar文件
目标服务器
运行服务

🌟 实践心得

  1. 脚本化与自动化:通过脚本完成重复性工作,不仅提高效率,还减少人为干扰和错误。
  2. 良好的文件管理:固定镜像文件存放路径,方便多次使用和后续维护。
  3. 网络环境适配:利用源服务器的网络优势,解决目标服务器的访问限制。

🔚 结语

本文分享的实践经验,展示了如何在受限网络环境下完成 Docker 部署。这种方法不仅适用于 Strapi 和 Appsmith,也适用于其他需要 Docker 支持的工具。

希望本文能为您的技术实践提供思路。如果您有更好的方法,欢迎留言交流!


http://www.kler.cn/a/414085.html

相关文章:

  • python的字体如何调整
  • 【Petri网导论学习笔记】Petri网导论入门学习(九) —— 3.1 可达标识图与可覆盖树
  • npm库xss依赖的使用方法和vue3 中Web富文本编辑器 wangeditor 使用xss库解决 XSS 攻击的方法
  • Postman定义公共函数
  • eduSRC挖洞思路
  • 《解锁计算机专业宝藏:核心编程语言与学习资料全解析》
  • python-解决一元一次方程
  • Unix和Linux之异同
  • 【后端开发】Go语言编程实践,Goroutines和Channels,基于共享变量的并发,反射与底层编程
  • 【人工智能】从零构建一个文本分类器:用Python和TF-IDF实现
  • 软件工程——期末复习(适用于sdut)
  • vue-baidu-map基本使用
  • webpack 项目访问静态资源
  • 新型实时的端到端对象检测器
  • 大电流PCB设计
  • 什么是BIOS
  • 天锐绿盾加密软件与Ping32联合打造企业级安全保护系统,确保敏感数据防泄密与加密管理
  • Python毕业设计选题:基于django+vue的智能停车系统的设计与实现
  • nodejs相关知识介绍
  • 【机器学习】机器学习的基本分类-监督学习-线性回归(Linear Regression)
  • rabbitmq原理及命令
  • Git上传本地项目到远程仓库(gitee/github)
  • Java 与设计模式(14):策略模式
  • QT:多ui界面显示
  • 嵌入式C语言技巧15:深入浅出:多线程编程中锁的选择与优化策略
  • Unity高效编程经验50条分享