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

在 Mac 上使用 Docker 安装宝塔并部署 LNMP 环境

前言

只因为在mac上没有找到合适的PHP开发集成环境,之前有安装了Eserver,但是安装一些常用PHP扩展有时候还是需要手动去编译添加。phpStudy也没有找到适合Mac的版本,在后面安装了Parallels Desktop虚拟机 来运行Ubuntu系统搭建了一套LNMP环境,但是占用的资源有点多,干脆曲线救国直接装个宝塔,奈何宝塔又没有Mac版本,最后最后,上 Docker~~

本篇文章旨在指导您如何在 Mac 上使用 Docker 容器来安装并运行宝塔面板,以便高效管理 LNMP 开发环境。在本文的最终目标中,我们将实现:通过启动 Docker 容器自动加载 Ubuntu 系统,且容器中的宝塔面板、Nginx、MySQL、PHP、Redis 等关键服务也将自动启动。同时,配置在 supervisord 中的各项任务也能够在容器启动时自动运行,以保证整个开发环境高效、稳定地自启动。

以下是文章最后完成目标时使用的 Docker 启动命令,命令后附详细参数说明。

docker run -d \-p 8888:8888 \-p 888:888 \-p 80:80 \-p 443:443 \-p 20:20 \-p 21:21 \-p 3306:3306 \-p 3322:22 \-p 6379:6379 \-p 9501:9501 \--privileged=true \--restart always \-v ubuntu:/www \-v /Users/(你的实际名称)/www:/www/wwwroot \--name ubuntu \my-ubuntu-image /usr/sbin/init
  • -d: 以守护进程(detached mode)方式运行容器。使用 -d 后,容器会在后台运行,你的终端不会保持连接,这样可以让容器一直在后台运行而不占用当前的终端窗口
  • -p:用于将宿主机的端口映射至容器内的端口,例如 -p 8888:8888 使宿主机的 8888 端口对应到容器中宝塔面板的访问端口,方便通过浏览器访问。(可以根据你的实际需要进行设置)
  • --privileged=true:为容器授予额外的权限,支持 systemd 功能以实现服务管理。
  • --restart always:设置容器为自启动模式,即使宿主机重启也会自动启动容器。
  • -v:将宿主机路径与容器路径做目录挂载
    • 例如 -v /Users/(你的实际名称)/www:/www/wwwroot 把我本地的项目文件进行挂载到容器访问,便于Nginx和宝塔管理网站文件。
    • -v ubuntu:/www 是我在Docker中创建了一个名为UbuntuVolumes,用来存储ubuntu环境中宝塔面板的一些配置和修改。
  • --name:为容器指定一个易于管理的名称,此处为 ubuntu
  • my-ubuntu-image:自定义镜像名,指向已安装 systemd 和配置的基础 Ubuntu 环境。
  • /usr/sbin/init:设定容器启动时运行 /usr/sbin/init,确保 systemd 能够加载并管理各项服务,实现全面的服务自启动。

Docker面板

宝塔面板


环境准备

确保已经在 Mac 上安装了 Docker Desktop。如果未安装,可以在 Docker 官网 下载并安装。

一、创建并配置 Ubuntu 容器

  1. 创建基本 Ubuntu 22.04 容器

    首先,创建一个基础的 Ubuntu 22.04 容器。由于安装 systemd 需要完整的 init 系统支持,因此直接从 Ubuntu 官方镜像开始。

    拉取官方ubuntu22.04镜像

    docker pull ubuntu:22.04
    

    使用镜像创建新的容器

    docker run -it --name ubuntu ubuntu:22.04 /bin/bash
    
    • -it:指定运行容器时启用交互式终端模式,以便查看实时输出和交互。

    这条命令用于拉取并启动 Ubuntu 22.04 容器,并进入 Bash 环境中。

  2. 安装 systemdinit 模块

    进入容器后,首先安装常用工具

    apt install -y wget sudo bash curl vim net-tools
    

    安装 systemdinit 模块,这样可以使容器具备基本的服务管理功能(宝塔面板依赖 systemd 来管理服务的启动和停止)。

    apt-get update && apt-get install -y --reinstall systemd init
    

    这条命令会安装 systemdinit,使容器能够运行完整的服务管理系统。

  3. 提交容器为新的镜像

    由于修改了容器的系统配置,先退出容器,再将其保存为新的镜像,以便后续使用:

    docker stop ubuntu
    docker commit ubuntu my-ubuntu-image
    

    该命令会将当前的 ubuntu 容器保存为名为 my-ubuntu-image 的新镜像,用于后续的宝塔面板安装。


二、启动带 systemd 支持的容器并配置端口映射

为了让新的镜像支持服务的启动和停止(如宝塔和 supervisord 服务),在启动时要将 /usr/sbin/init 设为容器启动的命令。同时映射常用的端口,以便 Mac 和容器之间互通。

  1. 创建volume

    docker volume create ubuntu
    

Docker Volume

  1. 删除原容器 & 运行新镜像

    删除原来的ubuntu容器

    docker remove ubuntu
    

    使用新的镜像创建并运行容器,并加入端口映射和挂载目录,如下所示:

    docker run -d \
    -p 8888:8888 -p 888:888 -p 80:80 -p 443:443 -p 20:20 -p 21:21 -p 3306:3306 -p 3322:22 -p 6379:6379 -p 9501:9501 \
    --privileged=true \
    --restart always \
    -v ubuntu:/www -v /Users/echo/www:/www/wwwroot \
    --name ubuntu \
    my-ubuntu-image /usr/sbin/init
    
  2. 启动并测试 systemd

    启动容器

    docker start ubuntu
    

    进入ubuntu控制台

    docker exec -it ubuntu /bin/bash
    

    可以测试 systemd 是否正常工作:

    systemctl status
    

    如果 systemctl 正常工作,说明服务管理功能已成功配置。


三、在 Ubuntu 容器中安装宝塔面板

接下来,在容器中安装宝塔面板:

  1. 下载并安装宝塔面板

    使用官方安装脚本来安装宝塔面板。首先进入容器:

    docker exec -it ubuntu /bin/bash
    

    然后下载并运行宝塔安装脚本:

    wget -O install.sh https://download.bt.cn/install/install_lts.sh && sudo bash install.sh ed8484bec
    

    安装完成后,宝塔会生成访问地址和初始账户信息 (登录账户和密码记得保管)

  2. 修改宝塔登录默认端口为8888

    安装完成后可以修改宝塔登录端口为 8888

    • 容器中输入bt 回车 -> 8 回车 -> 8888 回车
    8
    8888
    bt

修改宝塔面板端口

  1. 测试面板访问

    打开浏览器,访问 http://127.0.0.1:8888,输入用户名和密码,进入宝塔面板。宝塔面板安装完成后,可以在这里安装并管理 LNMP 环境。


四、使用宝塔安装 LNMP 环境

在宝塔面板中,轻松配置和安装 Nginx、MySQL、PHP 等开发环境:

  1. 进入宝塔软件商店,在首页点击“软件商店”,找到以下组件并安装:

    • Nginx:Web 服务器
    • MySQL:数据库管理系统
    • PHP:运行 PHP 代码的解释器
    • Redis:缓存系统(可选)
    • Supervisord:系统进程管理

    通过宝塔安装后,所有服务会自动运行。你也可以通过宝塔的服务管理页面来控制每个组件的启动和停止。

  2. 配置 Supervisord

    可以使用 Supervisord 来管理 Nginx、MySQL、PHP、Redis 等工具,监控到服务停止运行后重启即可

  3. 测试自动重启

    • 关闭当前ubuntu容器并使用浏览器访问宝塔面板
    docker stop ubuntu
    
    • 启动ubuntu容器并使用浏览器访问宝塔面板
    docker start ubuntu
    

五、常见问题及解决方案

  1. 宝塔安装的supervisord无法运行
  • 在ubuntu中执行systemctl restart supervisord会遇到以下报错:
    • System has not been booted with systemd as init system (PID 1). Can‘t operate

意味着你的系统没有使用 systemd 作为初始化系统,因此,systemctl 命令无法运行,因为它是 systemd 的工具。只需要按照上面步骤 启动带 systemd 支持的容器就可以了。

  • 还有一种方式是直接使用自带systemd的Ubuntu镜像,下面是找到的一个镜像,但是本人没有尝试:
https://hub.docker.com/r/jrei/systemd-ubuntu
  1. 宝塔Redis无法启动/启动失败
    查看Redis 日志后发现了 设置 Locale 警告,如果出现 locale 错误提示,日志错误如下:
    Failed to configure LOCALE for invalid locale name.

    13368:C  * Configuration loaded
    13368:M  # Failed to configure LOCALE for invalid locale name.
    

    这个错误通常是因为 Redis 尝试配置 Locale 时未找到有效的 Locale 设置。可以通过以下方式解决:

    apt-get update
    apt-get install -y locales
    locale-gen en_US.UTF-8
    update-locale LANG=en_US.UTF-8
    export LANG=en_US.UTF-8
    

    然后在宝塔面板重启redis服务即可


http://www.mrgr.cn/news/69921.html

相关文章:

  • ODOO学习笔记(6):Odoo与Oracle ERP的区别
  • qt中ctrl+鼠标左键无法进入
  • 【机器学习】机器学习中用到的高等数学知识
  • jmeter常用配置元件介绍总结之用linux服务器压测
  • 解决msvcr100.dll丢失的方法,5个实测可靠的解决方法
  • Git - Think in Git
  • SCAU 华南农业大学 高级程序设计语言(C语言) 教材习题题解
  • distances = np.linalg.norm(data[:, None] - centers, axis=2)
  • spring-security(记住密码,CSRF)
  • C#-抽象类、抽象函数
  • 腾讯云双11狂欢:拼团优惠、会员冲榜、限时秒杀,多重好礼等你来拿!
  • 论文解读之SDXL: Improving Latent Diffusion Models forHigh-Resolution Image Synthesis
  • 「iOS」——知乎日报第三周总结
  • 销售管理SCRM助力企业高效提升业绩与客户关系管理
  • 【C++练习】二进制到十进制的转换器
  • The Rank-then-Encipher Approach
  • 「Mac玩转仓颉内测版1」入门篇1 - Cangjie环境的搭建
  • goframe开发一个企业网站 开发环境DOCKER 搭建16
  • MATLAB实现最大最小蚁群算法(Max-Min Ant Colony Optimization, MMAS)
  • leetcode hot100【LeetCode 131.分割回文串】java实现
  • Jquery添加或删除Class属性实例代分享
  • Linux应用项目之量产工具(一)——显示系统
  • SwiftUI开发教程系列 - 第7章:数据流和状态管理
  • 信息安全数学基础(46)域和Galois理论
  • Python实现Delaunay三角剖分之Bowyer-Watson算法
  • 区块链技术在版权保护中的应用