Rails 有朋友在国内服务器上通过 Kamal 成功部署 Rails 应用吗?

sitoto · 2025年03月30日 · 最后由 Rei 回复于 2025年04月15日 · 699 次阅读

最近用 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'

我是自建 docker 镜像解决的 https://geeknote.net/Rei/posts/3214

这个我有经验:

一般是两个问题:1. 产物镜像无法拉取 我用阿里云的 私有仓库解决。2 无法拉取 kamal-proxy,我是直接导出 kamal-proxy 镜像再在 server 上安装

问题确实是网络,需要每一步请求都规避访问外面。不用部署 xray 倒是也不麻烦

jicheng1014 回复

我也是这样的 kamal-proxy 用别的源的镜像安装下

我自建了 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
sitoto 回复

build 的时候失败可以把 build 服务器放在境外,然后 push 到境内的 register(例如 aliyun)。

在境内 build 除了 docker 还有 deb,rubygem,npm 的问题,很麻烦。

我最近这被个搞得好烦啊,目前是用 docker save/load命令手动解决的,哎

harbor 还要简单一些。

我最近这被个搞得好烦啊,目前是用 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/

问题主要在网络,解决不了的话,可以:

  1. kamal proxy, 镜像手动拉取。
  2. builder 机本地 build 或在能顺畅拉 docker 镜像的 vps 去 build.
  3. 不用 docker 的 registry, 用阿里云的 (如若在本地 build) 或 aws 的 (如若在 vps 里 build).
需要 登录 后方可回复, 如果你还没有账号请 注册新账号