Happy Server 私有部署
本文整理自 Happy 官方文档,介绍如何在自己的基础设施上部署 Happy 中继服务器,从而完全掌控 Claude Code 的移动端接入。
本文整理自 Happy 官方文档,介绍如何在自己的基础设施上部署 Happy 中继服务器,从而完全掌控 Claude Code 的移动端接入。
wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/containerd.io_1.6.9-1_amd64.deb && \
wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/docker-ce_24.0.2-1~ubuntu.18.04~bionic_amd64.deb && \
wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/docker-ce-cli_24.0.2-1~ubuntu.18.04~bionic_amd64.deb && \
wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/docker-buildx-plugin_0.10.5-1~ubuntu.18.04~bionic_amd64.deb && \
wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/docker-compose-plugin_2.18.1-1~ubuntu.18.04~bionic_amd64.deb && \
dpkg -i containerd.io_1.6.9-1_amd64.deb \
docker-ce_24.0.2-1~ubuntu.18.04~bionic_amd64.deb \
docker-ce-cli_24.0.2-1~ubuntu.18.04~bionic_amd64.deb \
docker-buildx-plugin_0.10.5-1~ubuntu.18.04~bionic_amd64.deb \
docker-compose-plugin_2.18.1-1~ubuntu.18.04~bionic_amd64.deb
如果安装失败, 执行 apt --fix-broken install
ref serverfault
Short: use the save CLI command.
Dockerfile 指定 entrypoint 脚本后, 运行提示一下错误:
docker 默认会创建一个 socket(/var/run/docker.sock) 供 docker daemon 链接使用, 这个socket一般必须是root账号才能链接. docker daemon 同时支持开发一个tcp端口号供外部使用, 开放步骤如下:
官方给的简介是: Caddy是一个强大的、可扩展的平台, 用于伺服你的站点、服务以及应用. Caddy使用Go语言编写.
简单来说, caddy 和 nginx 很像, 我觉得相比较nginx有以下优点:
缺点就是生态和性能不如nginx, 不过个人使用绝大部分场景都能hold住.
默认情况下使用 docker history <image-id> 输出的 Created By 信息是不完整的, docker cli会根据情况截断一些字符, 给命令加上--no-trunc参数即可输出完整的信息, 比如:
常用Dockerfile文件指令介绍
Dockerfile中的ARG指令用于定义用户变量, 这些变量在用户构建镜像(docker build)的时候使用--build-arg <var_name>=<value>可以修改, 通过镜像创建容器的系统中, 是无法访问到这些变量的. 也就是说ARG定义的变量, 仅在构建阶段起作用. 如果使用docker build --build-arg 使用了在 Dockerfile中未定义的参数, 在构建的时候会输出警告.
下面是一个示例, 在构建镜像的时候可以修改镜像里的用户名:
FROM alanway/code-server:latest
EXPOSE 80
# 设置两个变量
ARG USER=editor
ARG USER_ID=1000
# 1. 创建用户
# 2. 创建 /app 目录
# 3. 修改 /app 目录所有者, 如果不修改, 创建的用户对 /app 目录没有读写权限
RUN useradd --create-home --uid $USER_ID --user-group --shell /bin/bash $USER \
&& mkdir /app \
&& chown $USER:$USER /app
# 设置镜像的当前用户
USER $USER
WORKDIR /app
# 拷贝文件的默认所有者为root, 加上 --chown=$USER 修改文件所有者为上面新创建的用户
COPY --chown=$USER ./src ./
开始构建
docker build --file Dockerfile --tag blog-editor --build-arg USER=alan ./
不推荐在镜像构建阶段传递安全密钥信息(比如github keys, user credentials等). 构建阶段的变量对用户是可见的, 使用docker history命令即可看到构建时的变量.
Docker提供了一批预先定义的ARG, 无需在Dockerfile中定义即可使用:
直接使用 --build-arg 标识即可使用: docker build --build-arg HTTPS_PROXY=https://my-proxy.example.com .
默认情况下, 上面预置的指令在docker history命令中是不会输出的, 这样做是为了减少类似下面使用方式带来的安全风险:
docker build --build-arg HTTP_PROXY=http://user:pass@proxy.lon.example.com ./
上面的 HTTP_PROXY 参数值有敏感信息, 使用 docker history 是无法看到这个敏感信息的. 如果上述ARG在docker history中出现, 可以在Dockerfile中声明一次:
FROM ubuntu
ARG HTTP_PROXY
ENV指令可以用来定义系统环境变量, 这些变量可以在创建容器(docker run)的时候使用-e参数修改环境变量. 这些环境变量在容器启动后仍然可以访问.
格式如下
ENV <key>=<value> ...
FROM ubuntu
ENV TZ=Asia/Shanghai
ENV MY_NAME="John Doe"
ENV MY_DOG=Rex\ The\ Dog
ENV MY_CAT=fluffy
可以使用 docker inspect 查看环境变量的值, 在docker run创建容器的时候使用--env 修改环境变量的值:
docker run -it --rm --env TZ=test_value -e MY_NAME="Alan Wei" ubuntu bash
如果安装的是最新版的 Docker, 在容器内部直接使用 host.docker.internal 即可访问主机网络, 比如在容器执行 curl http://host.docker.internal:8080 即可访问主机的8080端口. (对于Linux环境, 创建容器时需要增加--add-host=host.docker.internal:host-gateway参数)
安装或者卸载Docker.
Ref Guide to Setting Up Apache Kafka Using Docker
在软件领域,Docker是创建、打包、部署应用的最受欢迎的容器引擎之一。本教程我们会学习如何使用Docker运行Kafka。
参考 Sentry Doc.
下面介绍几个常用基础镜像(Alpine,Ubuntu,Debian 和 CentOS)如何设置时区。
通过修改Docker的/etc/docker/daemon.json配置文件里的 registry-mirros 配置节,可是设置Docker的镜像服务: