使用 Coder 搭建云开发环境相关问题记录

code-server 是开源的在浏览器中运行 VS Code。如果你想搭建一套自己的远程开发环境 code-server 是一个不错的选择。如果只是给自己用 code-server 没什么问题,如果想提供团队使用就得配合 Coder 来做用户和环境等管理。

下面是 Coder 使用过程中遇到问题的一些简单记录。

Docker 镜像拉取问题

在国内拉取 Docker 镜像几乎无法成功,如果使用 Docker 部署首先要修改 Docker 源。

Linux 下 Docker 的配置文件位于 /etc/docker/daemon.json 。修改 Docker 源的方法网上有很多资料,这里不再赘述。

为 Coder 设置代理

Coder 创建 Template 时需要从网络上下载资料,这一步很容易失败。通过环境变量的方式为 Coder 设置代理 HTTP_PROXY 和 HTTPS_PROXY

services:
  coder:
    # This MUST be stable for our documentation and
    # other automations.
    image: ghcr.io/coder/coder:${CODER_VERSION:-latest}
    ports:
      - "7080:7080"
    environment:
      CODER_PG_CONNECTION_URL: "postgresql://${POSTGRES_USER:-username}:${POSTGRES_PASSWORD:-password}@database/${POSTGRES_DB:-coder}?sslmode=disable"
      CODER_HTTP_ADDRESS: "0.0.0.0:7080"
      # You'll need to set CODER_ACCESS_URL to an IP or domain
      # that workspaces can reach. This cannot be localhost
      # or 127.0.0.1 for non-Docker templates!
      # CODER_ACCESS_URL: "${CODER_ACCESS_URL}"
      CODER_ACCESS_URL: "https://coder.your-domain.com"
      HTTP_PROXY: "http://your.proxy.com:1087"
      HTTPS_PROXY: "http://your.proxy.com:1087"
    group_add:
      - "124" # docker group on host `getent group docker | cut -d: -f3`
    user: "1000:1000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./coder_home:/home/coder
    depends_on:
      database:
        condition: service_healthy
  database:
    image: "docker.1ms.run/postgres:16"
    environment:
      POSTGRES_USER: ${POSTGRES_USER:-username} # The PostgreSQL user (useful to connect to the database)
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-password} # The PostgreSQL password (useful to connect to the database)
      POSTGRES_DB: ${POSTGRES_DB:-coder} # The PostgreSQL default database (automatically created at first launch)
    volumes:
      - ./coder_data:/var/lib/postgresql/data # Use "docker volume rm coder_coder_data" to reset Coder
    healthcheck:
      test:
        [
          "CMD-SHELL",
          "pg_isready -U ${POSTGRES_USER:-username} -d ${POSTGRES_DB:-coder}",
        ]
      interval: 5s
      timeout: 5s
      retries: 5

编辑 Template

在 Template 中设置代理

通过 Template 创建 Workspace 依旧会用到网络,这一步依旧很难成功。在 resource "coder_agent" "main" 中添加 HTTP_PROXYHTTPS_PROXY

Docker in Docker

如果要在 Workspace 中调用 Docker,需要将 docker.sock 映射给 workspace,且需要将传入的路径转换为 HOST 的文件路径。还需要将 HOST 的 docker 用户组添加给 coder 用户。

# ...
resource "coder_agent" "main" {
  # ...
  env = {
    # ...
    HTTP_PROXY          = "http://your-proxy.com:1087"
    HTTPS_PROXY         = "http://your-proxy.com:1087"
  }
  # ...
}

resource "docker_container" "workspace" {
  # ...
  group_add  = ["124"]  # host 的 docker 用户组id
  # unsafe, should https://coder.com/docs/v2/latest/templates/docker-in-workspaces#use-sysbox-in-docker-based-templates
  volumes {
    host_path = "/var/run/docker.sock"
    container_path = "/var/run/docker.sock"
  }
  # ...
}

禁用 autostop

为节约服务器资源,长期不用的 workspace 会被自动销毁,下次使用时再进行重建。如果服务用的人不多,资源足够,建议把 autostop 关闭掉。

选中 template 并进入 template 的 settings 并在 schedule 中将 default autostop 修改为 0。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注