在Apple Sillicon Mac服务器上安装宝塔
由于新西兰运营商Skinny为家宽分配公网ip,于是我在家中用一台Mac Mini搭建了一个服务器。但是在选择面板的时候遇到了问题:宝塔没有Mac的安装脚本,官方的Apple Sillicon Docker镜像已经两年没有更新;1Panel本质上是一个Docker管理面板,无法在Docker里再运行一个Docker。
查阅多方资料后,我决定在Ubuntu的Docker镜像上安装宝塔。
创建Ubuntu镜像
安装Docker的步骤在这里省略。只需要在官网下载Docker Desktop就可以安装,附带一个GUI面板。
首先,拉取Ubuntu 22.04镜像:
docker pull ubuntu:jammy
拉取镜像后创建Docker容器:
docker run -itd \
--name bt \
-p 20:20 \
-p 21:21 \
-p 80:80 \
-p 443:443 \
-p 888:888 \
-p 8891:8891 \
--privileged=true \
--restart=always \
-v ~/wwwroot:/www/wwwroot ubuntu:jammy
该命令创建了一个名为bt
的容器,可以修改。后面打开了宝塔官网要求的所有端口。其中,8888
端口是宝塔面板的默认端口。为了应对宝塔登录后需要修改端口的要求,增加开放了8891
端口。--privileged=true
给予容器更高权限,否则共享宗卷会出问题。
注意,实测为Docker分配8G内存不足以编译安装MySQL 8.0。需要在设置-Resources中调大Memory limit和Swap。14GB内存和4GB Swap足够编译安装MySQL 8.0。
调整后需要重启Docker,但如果重启后容器不会自动启动,可能是创建容器的命令中没有提到随Docker启动。一种方法是在创建容器时加入--restart=always
参数。另一种方法是运行docker update --restart=always bt
命令。否则可以每次手动启动容器。
设置Ubuntu容器
在终端运行以下命令进入容器内部。
docker exec -it bt /bin/bash
进入后,更新所有软件。如需换源可先换源:
apt update
apt upgrade
安装一系列软件:
apt install sudo vim wget curl build-essential locales iproute2
安装完成后,为了避免爆出/bin/sh: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
的警告,可以先运行如下指令,但不修复不影响后续安装:
sudo locale-gen en_US.UTF-8
使用官网脚本安装宝塔:
wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec
等待片刻安装完成后,暂时不能按照终端上的提示进入宝塔面板,因为宝塔分配的随机端口没有被暴露出容器。运行bt
命令,选择【8】选项,即可修改面板端口。同样地,可以修改安全入口,用户名密码等配置。
安装LNMP
这时就可以使用ip和端口登录宝塔了。初次进入宝塔,会提示安装LNMP套装。
由于ARM64的Ubuntu系统不含一些x86库,所以需要选择编译安装,安装LNMP所有组件。
常见问题
如果在宝塔安装MySQL时没有成功,在日志中遇到诸如此类问题:
[ 88%] Building CXX object sql/CMakeFiles/sql_gis.dir/item_geofunc_buffer.cc.o c++: fatal error: Killed signal terminated program cc1plus compilation terminated. make[2]: *** [sql/CMakeFiles/sql_gis.dir/build.make:271: sql/CMakeFiles/sql_gis.dir/gis/intersection_functor.cc.o] Error 1 make[2]: *** Waiting for unfinished jobs.... make[1]: *** [CMakeFiles/Makefile2:31039: sql/CMakeFiles/sql_gis.dir/all] Error 2 make: *** [Makefile:163: all] Error 2
很可能是因为内存不足,请参阅前文调节Docker容器内存和Swap大小。
有时候安装MySQL的成功与否也取决于概率。可以多试几遍。
若重启容器后无法登录宝塔面板,是因为宝塔在容器中未能自动启动。在容器终端中使用bt
命令再按【1】即可启动宝塔所有服务。