一、起因
云服务器的内存太小了,而next.js的编译又是内存大户,所以笔者就想能不能在我本地电脑上直接编译好了传到服务器上直接docker compose up -d,于是找到了支持交叉编译的buildx工具。
二、在Mac上安装和配置Docker和colima
2.1 安装
brew install docker
brew install colima2.2 配置colima
colima start --edit可以分配多一点CPU和内存
# Number of CPUs to be allocated to the virtual machine.
# Default: 2
cpu: 8
# Size of the disk in GiB to be allocated to the virtual machine for container data.
# NOTE: value can only be increased after virtual machine has been created.
#
# Default: 100
disk: 100
# Size of the memory in GiB to be allocated to the virtual machine.
# Default: 2
memory: 6在下面配置一个换源路径
docker:
registry-mirrors:
- https://mirror.ccs.tencentyun.com
- https://docker.m.daocloud.io但配置这个换源路径还不够,还需要编辑~/.docker/buildkitd.toml文件,不然docker buildx还是无法拉取node24这样的包
[registry."docker.io"]
mirrors = ["docker.m.daocloud.io"]2.3 让 buildx 加载这个配置并创建容器
docker buildx create --name mybuilder --config ~/.docker/buildkitd.toml --use
docker buildx inspect --bootstrap三、使用阿里云容器镜像服务控制台
网站:https://cr.console.aliyun.com/cn-chengdu/instances
创建个人实例-命名空间
在这个命名空间创建两个仓库(因为我的next项目分了两个应用)
四、进行构建和推送
4.1 创建.dockerignore文件
首先需要在项目内添加一个.dockerignore文件来过滤掉所有本地编译产物和垃圾文件
.git
.gitignore
node_modules
.next
out
build
.build
apple/**/.build
*.log
.DS_Store4.2 进行推送
# 先在终端登录
docker login --username=your_name your_web
# 构建和推送
docker buildx build \
--platform linux/amd64 \
--target runner \
-t my_space_addr/workenote-app:latest \
--push .
docker buildx build \
--platform linux/amd64 \
--target worker \
-t my_space_addr/worknote-worker:latest \
--push .五、在服务器端拉取与部署
5.1 拉取
# 1.先登录
docker login --username=your_name your_web
# 2.拉
docker pull my_space_addr:latest5.2 部署
首先需要把项目里必要的环境文件和配置文件移植过来(包括
.env,以及笔者自己项目的llm.yml)配置docker-compose.yml
services: worknote-app: image: my-space-addr/workenote-app:latest container_name: worknote-app restart: unless-stopped command: ["node", "server.js"] ports: - "3005:3005" env_file: - .env environment: PORT: "3005" volumes: - ./config:/app/config worknote-worker: image: my-space-addr/worknote-worker:latest container_name: worknote-worker restart: unless-stopped command: ["npm", "run", "worker:weekly-reports"] env_file: - .env volumes: - ./config:/app/config:ro
输入
docker compose up -d即可部署