最近用 Kamal 在国内阿里云服务器上部署,这个网络问题不好解决。 在本地和服务器都装了 xray, 在 config/deploy.yml 里面配置了环境变量代理。
config/deploy.yml
servers:
web:
- demo.txxx.txxx: tag1
env:
tags:
tag1:
http_proxy: 'http://127.0.0.1:10809'
https_proxy: 'http://127.0.0.1:10809'
这个我有经验:
一般是两个问题:1. 产物镜像无法拉取 我用阿里云的 私有仓库解决。2 无法拉取 kamal-proxy,我是直接导出 kamal-proxy 镜像再在 server 上安装
我自建了 docker 镜像服务器,也配置上了。但是还是在执行 kamal setup 的 Build and push app image... 的这个阶段:执行 docker buildx build .. 这个地方失败。
#2 resolve image config for docker-image://docker.io/docker/dockerfile:1
#2 ERROR: failed to do request: Head "https://registry-1.docker.io/v2/docker/dockerfile/manifests/1:" dial tcp 104.244.46.57:443: i/o timeout
如图:
我直接把这个 syntax=docker/dockerfile:1 和 #check=error=true 删除了。 然后呢,又把 Dokerfile 里面的 from docker.io/library/ruby:$...里面的 docker.io 替换成为自建的服务器地址。
可以继续前进了。
Dokerfile 里面还要在 RUN apt update 之前,加一个修改 apt sources 的命名,否则更新太太慢了。
RUN sed -i 's|deb.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources
# Install base packages
RUN apt update
build 的时候失败可以把 build 服务器放在境外,然后 push 到境内的 register(例如 aliyun)。
在境内 build 除了 docker 还有 deb,rubygem,npm 的问题,很麻烦。
我最近这被个搞得好烦啊,目前是用 docker save/load命令手动解决的,哎
研究了一下,现在使用 github action,将构建的镜像上传到我的服务器中,这样省事不少。我目前还是用 docker compose 来部署项目的
- name: Install SSH key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.SSH_PRIVATE_KEY }}
known_hosts: ${{ secrets.SSH_KNOWN_HOSTS }}
- name: Upload image file to server
run: |
scp -o StrictHostKeyChecking=no ${{ env.IMAGE_PATH }} deployer@your_server_ip:/tmp/
问题主要在网络,解决不了的话,可以: