From ace301e4ec69dca7f61bfbd0af81c5f842203f11 Mon Sep 17 00:00:00 2001 From: Wang Qilin Date: Thu, 31 Oct 2019 00:47:01 +0800 Subject: [PATCH] Add chinese translation of install section (#1444) * add index translation of install section * add translation of build-from-source * add chinese translation of install-on-aci.md * add chinese translation of intall-on-kubernetes * add zh translation of managing-private-repos * fix some typos --- docs/content/install/_index.zh.md | 49 +++ docs/content/install/build-from-source.zh.md | 35 +++ docs/content/install/install-on-aci.zh.md | 67 +++++ .../install/install-on-kubernetes.zh.md | 282 ++++++++++++++++++ .../install/managing-private-repos.zh.md | 32 ++ .../install/shared-team-instance.zh.md | 195 ++++++++++++ 6 files changed, 660 insertions(+) create mode 100755 docs/content/install/_index.zh.md create mode 100755 docs/content/install/build-from-source.zh.md create mode 100755 docs/content/install/install-on-aci.zh.md create mode 100755 docs/content/install/install-on-kubernetes.zh.md create mode 100755 docs/content/install/managing-private-repos.zh.md create mode 100755 docs/content/install/shared-team-instance.zh.md diff --git a/docs/content/install/_index.zh.md b/docs/content/install/_index.zh.md new file mode 100755 index 00000000..f68452a4 --- /dev/null +++ b/docs/content/install/_index.zh.md @@ -0,0 +1,49 @@ +--- +title: "安装 Athens" +date: 2018-09-20T15:38:01-07:00 +weight: 2 +--- + +Go的生态系统一直是联合的,完全开放的。任何拥有GitHub或GitLab(或任何其他支持的VCS)帐户的人都可以轻松地通过git push(或类似命令)来提供库服务。 无需创建额外的帐户或设置凭据。 + +## 一个联合的生态系统 + +我们认为Athens应该保持社区的联合与开放,并且用户在构建应用程序和库时,无需更改工作流。 因此,为确保社区能够保持联合与开放,我们已为每个人提供了轻松安装Athens的方式,以便: + +-任何人都可以运行自己的全功能镜像,无论是公共镜像还是私有镜像 +-任何组织都可以运行自己的私有镜像,这样他们就可以像管理公共代码一样管理自己的私有代码 + + +## 不变性 + +如您所知,`go get`和`go mod download` 命令将直接从GitHub等版本控制系统中获取软件包。 这个方式对于软件包开发人员和相关应用程序都非常好,但是与此同时,我们长期以来一直遇到一个基本问题。即,版本控制系统中的代码即使在提交之后也可以随时更改。例如,包开发人员可以运行"git push -f"并覆盖项目中依赖的提交或标记。在这些情况下,您经常会看到校验和验证错误,相关例子可参见[这里](https://github.com/go-ole/go-ole/issues/185) + +_Athens通过将代码存储在其自己的不可变数据库中_ 来防止这些问题的发生。下面是当你运行`go get`时,发生的交互情况: + +1. `go get`向Athens请求一个模块 +2. Athens接受请求并开始搜寻该模块 +3. 首先,在后端存储中查找,如果找到了这个模块,Athens将立即返回(1)中发出请求的`go get` 客户端 +4. 如果找不到这个模块,则从版本控制系统中获取模块,保存在后端存储中,然后返回到(1)中的客户端 + + +一旦将模块保存到存储中,Athens就不会更改任何内容,因此Athens具有以下两个重要属性: + +- _对某个模块的一个版本,Athens永远只调用 `go mod download` **一次** 。换句话说,对于任何给定的模块和版本,Athens只会执行步骤(4)一次。_ +- _Athens处理存储的策略为仅追加,因此一旦模块被保存,它就永远不会改变,即使开发人员在GitHub上对其进行了更改_ + +## 发布规则 + +我们遵循[semver语义化版本号](https://semver.org)。 同时我们的Docker镜像打上了下列标签以表示镜像的稳定性: + +* latest = 最新的稳定版本 +* canary = mater分支最新构建出的版本 + +我们强烈建议您使用带标签的发行版镜像,例如 `gomods/athens:v0.3.0`, 而不是使用latest或canary标签的镜像。 + +## 拓展资源 + +为了确保易于安装,我们尝试提供尽可能多的方式来安装和运行Athens: + +- Athens是用Go语言编写的,因此您可以轻松地在几乎任何平台上自行构建它。您还可以根据自己的版本号和构建时间来构建二进制文件. See [here](./build-from-source) +- 我们提供了 [Docker 镜像](https://hub.docker.com/r/gomods/athens/) 以及 [如何运行的指导](./shared-team-instance) +- 我们提供了 [Kubernetes](https://kubernetes.io)上的 [Helm Charts](https://helm.sh) 以及 [如何在Kubernetes上运行Athens的指导](./install-on-kubernetes) diff --git a/docs/content/install/build-from-source.zh.md b/docs/content/install/build-from-source.zh.md new file mode 100755 index 00000000..9d0a7806 --- /dev/null +++ b/docs/content/install/build-from-source.zh.md @@ -0,0 +1,35 @@ +--- +title: 从源代码构建版本化的Athens二进制文件 +description: 从源代码构建版本化的Athens二进制文件 +weight: 1 +--- +您只需执行以下几个命令即可轻松实现构建Athens二进制文件: + +**Bash** +```bash +git clone https://github.com/gomods/athens +cd athens +make build-ver VERSION="0.2.0" +``` + +**PowerShell** +```PowerShell +git clone https://github.com/gomods/athens +cd athens +$env:GO111MODULE="on" +$env:GOPROXY="https://proxy.golang.org" +$version = "0.2.0" +$date = (Get-Date).ToUniversalTime() +go build -ldflags "-X github.com/gomods/athens/pkg/build.version=$version -X github.com/gomods/athens/pkg/build.buildDate=$date" -o athens ./cmd/proxy +``` + +这将生成一个名为`athens`的二进制文件. 你可以通过下列命令打印版本以及构建时间: +```console + ./athens -version +``` +which should return something like: +```console +Build Details: + Version: 0.2.0 + Date: 2018-12-13-20:51:06-UTC +``` diff --git a/docs/content/install/install-on-aci.zh.md b/docs/content/install/install-on-aci.zh.md new file mode 100755 index 00000000..51f525e0 --- /dev/null +++ b/docs/content/install/install-on-aci.zh.md @@ -0,0 +1,67 @@ +--- +title: "在Azure Container Instances上安装Athens" +date: 2018-12-06T13:17:37-08:00 +draft: false +weight: 3 +--- + +当您按照[Walkthrough](/walkthrough)中的说明进行操作时,Athens最终使用的是本地存储空间。 这仅适用于短期试用Athens,因为您将很快耗尽内存,并且Athens在两次重启之间不会保留模块。 本指南将帮助您以一种更适合的方式运行Athens,以用于提供一个实例供开发团队共享的场景。 + +在本文中,我们将展示如何在 [Azure Container Instances](https://cda.ms/KR) (ACI) 上运行Athens. + +## 选择存储提供商(Provider) + +Athens目前支持许多存储驱动。 为了在ACI上能快捷的使用,我们建议使用本地磁盘作为存储。如果希望更持久的存储数据,我们建议使用MongoDB或其他持久化存储架构。 对于其他提供商,请参阅 [storage provider documentation](/configuration/storage/). + +### 必需的环境变量 + +在执行以下任何命令之前,请确保在系统上设置了下列环境变量: + +- `AZURE_ATHENS_RESOURCE_GROUP` - 指定用于安装容器的 [Azure Resource Group](https://www.petri.com/what-are-microsoft-azure-resource-groups) 。在安装Athens之前,你需要设置该环境变量。 + -有关如何创建资源组(resource group)的详细信息,详见[此处](https://cda.ms/KS) 。 +- `AZURE_ATHENS_CONTAINER_NAME` - 容器的名称。 应为字母和数字,可以包含“-”和“uu”字符 +- `LOCATION` - 指定用于安装容器的 [Azure region](https://cda.ms/KT) 。有关详细列表,请参见上一链接, 同时这里有一个有用的备忘表,你可以立即使用,而不必阅读任何文档: + - 北美: `eastus2` + - 欧洲: `westeurope` + - 亚洲: `southeastasia` +- `AZURE_ATHENS_DNS_NAME` - 要分配给容器的DNS名称。它必须在您设置的区域(region)内是全局唯一的 (`LOCATION`) + + +### 使用本地磁盘驱动进行安装 + +```console +az container create \ +-g "${AZURE_ATHENS_RESOURCE_GROUP}" \ +-n "${AZURE_ATHENS_CONTAINER_NAME}-${LOCATION}" \ +--image gomods/athens:v0.3.0 \ +-e "ATHENS_STORAGE_TYPE=disk" "ATHENS_DISK_STORAGE_ROOT=/var/lib/athens" \ +--ip-address=Public \ +--dns-name="${AZURE_ATHENS_DNS_NAME}" \ +--ports="3000" \ +--location=${LOCATION} +``` + +创建ACI容器后,您将看到一个JSON Blob对象,其中包含该容器的公有IP地址. 您还将看到正在运行的容器的 [fully qualified domain name](https://en.wikipedia.org/wiki/Fully_qualified_domain_name) (FQDN) (以 `AZURE_ATHENS_DNS_NAME`为前缀)。 + +### 使用MongoDB驱动进行安装 + +首先,请确保您设置了以下环境变量: + +- `AZURE_ATHENS_MONGO_URL` - MongoDB 连接字符串。例如: `mongodb://username:password@mongo.server.com/?ssl=true` + +然后运行下列创建的命令: + +```console +az container create \ +-g "${AZURE_ATHENS_RESOURCE_GROUP}" \ +-n "${AZURE_ATHENS_CONTAINER_NAME}-${LOCATION}" \ +--image gomods/athens:v0.3.0 \ +-e "ATHENS_STORAGE_TYPE=mongo" "ATHENS_MONGO_STORAGE_URL=${AZURE_ATHENS_MONGO_URL}" \ +--ip-address=Public \ +--dns-name="${AZURE_ATHENS_DNS_NAME}" \ +--ports="3000" \ +--location=${LOCATION} +``` + +创建ACI容器后,您将看到一个JSON Blob对象,其中包含该容器的公有IP地址. 您还将看到正在运行的容器的 [fully qualified domain name](https://en.wikipedia.org/wiki/Fully_qualified_domain_name) (FQDN) (以 `AZURE_ATHENS_DNS_NAME`为前缀)。 + diff --git a/docs/content/install/install-on-kubernetes.zh.md b/docs/content/install/install-on-kubernetes.zh.md new file mode 100755 index 00000000..1c72a67e --- /dev/null +++ b/docs/content/install/install-on-kubernetes.zh.md @@ -0,0 +1,282 @@ +--- +title: 在Kubernetes上安装Athens +description: 在Kubernetes上安装Athens +weight: 1 +--- + +当您按照[Walkthrough](/walkthrough)中的说明进行操作时, 最终会得到使用内存作为存储的Athens。 这仅适用于短时间试用Athens,因为您将很快耗尽内存,并且Athens在两次重启之间不会保留储存的模块(modules)。 为了使Athens运行在一个更接近生产级别的环境上, 您可能需要在 [Kubernetes](https://kubernetes.io/) 集群上运行Athens. 为了帮助在Kubernetes上部署Athens,, 我们提供了一个 [Helm](https://www.helm.sh/) chart . 本指南将指导您使用Helm将Athens安装在Kubernetes集群上。 + +* [前提条件](#前提条件) +* [配置Helm](#配置Helm) +* [部署Athens](#部署Athens) + +--- + +## 前提条件 + +为了在Kubernetes集群上安装Athens,您必须满足一些前提条件.如果您已经完成以下步骤,请继续执行[配置Helm](#配置Helm). 本指南假设您已经创建了Kubernetes集群. + +* 安装 [Kubernetes CLI](#安装Kubernetes-CLI). +* 安装 [Helm CLI](#安装Helm-CLI). + +### 安装Kubernetes CLI + +为了与Kubernetes集群进行交互,您需要 [安装 kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/)。 + +### 安装Helm CLI + +[Helm](https://github.com/kubernetes/helm) 是用于在Kubernetes上安装预先配置好的应用程序的工具。 +可以通过运行以下命令来安装`helm`: + +#### MacOS + +```console +brew install kubernetes-helm +``` + +#### Windows + +1. 下载最新版本的 [Helm release](https://storage.googleapis.com/kubernetes-helm/helm-v2.7.2-windows-amd64.tar.gz)。 +1. 解压tar文件。 +1. 拷贝 **helm.exe** 到系统 PATH 中的一个目录下. + +#### Linux + +```console +curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash +``` + +## 配置Helm + +如果您的集群已配置为使用Helm,请继续[部署Athens](#部署Athens). + +如果没有,请继续阅读。 + +### RBAC 集群 + +如果您的集群启用了RBAC,则需要创建ServiceAccount,ClusterRole和ClusterRoleBinding以供Helm使用。 以下命令将创建它们并初始化Helm。 + +```console +kubectl create -f https://raw.githubusercontent.com/Azure/helm-charts/master/docs/prerequisities/helm-rbac-config.yaml +helm init --service-account tiller +``` + +### 非RBAC 集群 + +如果您的集群没有启用rbac,则可以轻松初始化helm。 + +```console +helm init +``` + +在部署Athens之前, 你需要等待Tiller的pod变成 `Ready`状态. 您可以通过查看 `kube-system`中的Pod来检查状态: + +```console +$ kubectl get pods -n kube-system -w +NAME READY STATUS RESTARTS AGE +tiller-deploy-5456568744-76c6s 1/1 Running 0 5s +``` + +## 部署Athens + +使用Helm安装Athens的最快方法是从我们的公共Helm Chart库中进行部署。 首先,使用以下命令添加库 + +```console +$ helm repo add gomods https://athens.blob.core.windows.net/charts +$ helm repo update +``` +接下来,将含有默认值的chart安装到`athens`命名空间: + +``` +$ helm install gomods/athens-proxy -n athens --namespace athens +``` + +这将在`athens`命名空间中部署一个启用了`disk`本地存储的Athens实例。此外,还将创建一个`ClusterIP`服务。 + +## 高级配置 + +### 多副本 + +默认情况下,该chart将安装副本数量为1的athens。要更改此设置,请更改`replicaCount`值: + +```console +helm install gomods/athens-proxy -n athens --namespace athens --set replicaCount=3 +``` + +### 资源 + +默认情况下,该chart将在没有特定资源请求或限制的情况下安装athens。 要更改此设置,请更改`resources`值: + +```console +helm install gomods/athens-proxy -n athens --namespace athens \ + --set resources.requests.cpu=100m \ + --set resources.requests.memory=64Mi \ + --set resources.limits.cpu=100m \ + --set resources.limits.memory=64Mi +``` + +有关更多信息,请参阅Kubernetes文档中的[管理容器的计算资源](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/) 。 + +### 通过Github令牌(Token)授予athens访问私有存储库的权限(可选) + +1. 在 https://github.com/settings/tokens 上创建一个令牌(Token) +2. 通过 [config.toml](https://github.com/gomods/athens/blob/master/config.dev.toml) 文件 ( `GithubToken` 字段) 或 通过设置`ATHENS_GITHUB_TOKEN` 环境变量,将令牌提供给Athens代理. + +### 存储提供程序(storage provider) + +Helm chart目前支持使用两个不同的存储提供程序来运行Athens:`disk`和`mongo`。 默认使用的是`disk`存储提供程序。 + +#### 磁盘存储配置 + +当使用`disk`存储提供程序时,可以配置许多有关数据持久性的选项。默认情况下,雅典将使用`emptyDir`卷进行部署。这可能不足以满足生产用例,因此该chart还允许您通过[PersistentVolumeClaim](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims)配置持久性。该chart目前允许您设置以下值: + +```yaml +persistence: + enabled: false + accessMode: ReadWriteOnce + size: 4Gi + storageClass: +``` + +将其添加到`override values.yaml`文件并运行: + +```console +helm install gomods/athens-proxy -n athens --namespace athens -f override-values.yaml +``` + +`enabled`用于打开chart的PVC功能,而其他值直接与PersistentVolumeClaim中定义的值相关。 + + +#### Mongo DB 配置 + +要使用Mongo DB存储提供程序,您首先需要一个MongoDB实例。当部署了MongoDB后,就可以通过`storage.mongo.url`字段使用连接字符串配置Athens。 您还需将`storage.type`设置为“mongo”。 + +``` +helm install gomods/athens-proxy -n athens --namespace athens --set storage.type=mongo --set storage.mongo.url= +``` + +#### S3 配置 + +要在Athens中使用S3存储,请将`storage.type`设置为`s3`,并将`storage.s3.region`和`storage.s3.bucket`分别设置为所使用的AWS区域和S3存储桶名称。 默认情况下,Athens将尝试使用AWS SDK从环境变量、共享凭证文件(shared credentials files)和EC2实例凭证组成的链中加载AWS凭证。 要手动指定AWS凭证,请设置`storage.s3.access_key_id`,`storage.s3.secret_access_key`,并将`storage.s3.useDefaultConfiguration`更改为`false`。 + +``` +helm install gomods/athens-proxy -n athens --namespace athens --set storage.type=s3 --set storage.s3.region= --set storage.s3.bucket= +``` + +#### Minio 配置 + +若要在Athens中使用S3存储,请将`storage.type`设置为`minio`。您需要设置`storage.minio.endpoint` 作为minio安装的URL。这个URL也可以是kubernetes内部地址的(例如`minio-service.default.svc`)。您需要在minio安装过程中创建一个桶(bucket)或使用现有的一个桶。桶需要在`storage.minio.bucket`中引用。最后,Athens需要在`storage.minio.accesskey`和`storage.minio.secretkey`中设置您的minio的身份验证凭据。 + + +``` +helm install gomods/athens-proxy -n athens --namespace athens --set storage.type=minio --set storage.minio.endpoint= --set storage.minio.bucket= --set storage.minio.accessKey= --set storage.minio.secretKey= +``` + +### Kubernetes 服务 + +默认情况下,Kubernetes中为Athens创建了一个`ClusterIP` 服务。在Kubernetes集群内使用Athens的场景下,`clusterip`就足够用了。如果要在Kubernetes集群外提供Athens的服务,请考虑使用“nodeport”或“loadbalancer”。可以在安装chart时通过设置`service.type`值来更改此设置。例如,要使用nodeport服务部署Athens,可以使用以下命令: + +```console +helm install gomods/athens-proxy -n athens --namespace athens --set service.type=NodePort +``` + +### Ingress 资源 + +该chart可以选择性为您的创建一个Kubernetes [Ingress 资源](https://kubernetes.io/docs/concepts/services-networking/ingress/#the-ingress-resource)。要启用此功能,请将`ingress.enabled`资源设置为true。 + +```console +helm install gomods/athens-proxy -n athens --namespace athens --set ingress.enabled=true +``` + +`values.yaml`文件中提供了更多配置选项: + +```yaml +ingress: + enabled: true + annotations: + certmanager.k8s.io/cluster-issuer: "letsencrypt-prod" + kubernetes.io/tls-acme: "true" + ingress.kubernetes.io/force-ssl-redirect: "true" + kubernetes.io/ingress.class: nginx + hosts: + - athens.mydomain.com + tls: + - secretName: athens.mydomain.com + hosts: + - "athens.mydomain.com +``` + +上述的示例使用[cert-manager](https://hub.helm.sh/charts/jetstack/cert-manager)从[Let's Encrypt](https://letsencrypt.org/)设置TLS证书的自动创建/检索。 并使用[nginx-ingress controller](https://hub.helm.sh/charts/stable/nginx-ingress) 将Athens对外暴露于互联网中。 + +将其添加到`override-values.yaml`文件中并运行: + +```console +helm install gomods/athens-proxy -n athens --namespace athens -f override-values.yaml +``` + +### 上游的模块(module)库 + +您可以为[上游模块库](https://docs.gomods.io/configuration/upstream/)设置`URL`,然后当Athens在自己的存储中找不到某个模块(module)时,它将尝试从上游模块库中下载该模块。 + +对于可用的为上游模块库,一下是几个好的选择: + +- `https://gocenter.io` 使用JFrog的GoCenter +- `https://proxy.golang.org` 使用Go Module 镜像 +- 指向任何其他Athens服务器的URL + +以下示例显示了如何将GoCenter设置为上游模块库: + +```yaml +upstreamProxy: + enabled: true + url: "https://gocenter.io" +``` + +将其添加到 `override-values.yaml` 文件里并运行: + +```console +helm install gomods/athens-proxy -n athens --namespace athens -f override-values.yaml +``` + +### .netrc文件支持 + +.netrc文件可以作为密钥共享,以允许访问私有模块。 +使用以下命令从`netrc`文件创建密钥(文件的名称**必须**为netrc): + +```console +kubectl create secret generic netrcsecret --from-file=./netrc +``` +为了指导athens获取并使用密钥,`netrc.enabled`标志必须设置为true: + +```console +helm install gomods/athens-proxy -n athens --namespace athens --set netrc.enabled=true +``` + +### gitconfig支持 + +[gitconfig](https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration)可以作为私钥共享,以允许访问私有git库中的模块。 例如,您可以使用GitHub,Gitlab和其他git服务上的个人访问令牌(token),通过HTTPS配置对私有存储库的访问。 + +首先,准备你的gitconfig文件: + +```console +cat << EOF > /tmp/gitconfig +[url "https://user:token@git.example.com/"] + insteadOf = ssh://git@git.example.com/ + insteadOf = https://git.example.com/ +EOF +``` + +接下来,使用上面创建的文件创建密钥: + +```console +kubectl create secret generic athens-proxy-gitconfig --from-file=gitconfig=/tmp/gitconfig +``` + +为了使athens使用密钥,请设置适当的标志(或`values.yaml`中的参数): + +```console +helm install gomods/athens-proxy --name athens --namespace athens \ + --set gitconfig.enabled=true \ + --set gitconfig.secretName=athens-proxy-gitconfig \ + --set gitconfig.secretKey=gitconfig +``` diff --git a/docs/content/install/managing-private-repos.zh.md b/docs/content/install/managing-private-repos.zh.md new file mode 100755 index 00000000..e63cda3b --- /dev/null +++ b/docs/content/install/managing-private-repos.zh.md @@ -0,0 +1,32 @@ +--- +title: 使用.netrc文件管理私人仓库 +description: 授权Athens访问私有仓库 +weight: 10 +--- + +## 通过.netrc文件认证访问私有仓库 + +1. 创建一个.netrc文件,如下所示: + + `machine ` + + `login ` + + `password ` + +2. 通过环境变量通知Athens该文件的位置: + + `ATHENS_NETRC_PATH=` + +3. Athens将文件复制到home目录,并覆盖home目录中的任何.netrc文件。或者,如果Athens服务器的主机在home目录中已经存在一个.netrc文件,则身份验证可开箱即用。 + +## 通过.hgrc认证访问Mercurial私有存储库 + +1. 创建带有身份验证数据的.hgrc文件 + +2. 通过环境变量通知Athens该文件的位置 + + `ATHENS_HGRC_PATH=` + +3. Athens将会把文件复制到home目录,并覆盖home目录中的任何.hgrc文件。或者,如果Athens服务器的主机在home目录中已经存在一个.hgrc文件,则身份验证可开箱即用。 + diff --git a/docs/content/install/shared-team-instance.zh.md b/docs/content/install/shared-team-instance.zh.md new file mode 100755 index 00000000..a2c4ea64 --- /dev/null +++ b/docs/content/install/shared-team-instance.zh.md @@ -0,0 +1,195 @@ +--- +title: 共享团队实例 +description: 为开发团队安装Athens实例 +weight: 2 +--- +当您按照[Walkthrough](/walkthrough)中的说明进行操作时,Athens最终使用的是本地存储空间。 这仅适用于短期试用Athens,因为您将很快耗尽内存,并且Athens在两次重启之间不会保留模块。 本指南将帮助您以一种更适合的方式运行Athens,以用于提供一个实例供开发团队共享的场景。 + +我们将使用Docker来运行Athens,因此首先请确保您已经[安装Docker](https://docs.docker.com/install/). + +## 选择存储提供程序 + +Athens目前支持许多存储驱动程序。 对于本机使用,建议从使用本地磁盘作为存储提供程序开始使用。对于其他提供商,请参阅 + [the Storage Provider documentation](/configuration/storage). + + +## 使用本地磁盘作为存储安装Athens + + +为了使用本地磁盘存储来运行Athens,您接下来需要确定要将模块持久化的位置。 在下面的示例中,我们将在当前目录中创建一个名为`athens-storage`的新目录。现在您可以在启用磁盘存储的情况下运行Athen。 要启用本地磁盘存储,您需要在运行Docker容器时设置`ATHENS_STORAGE_TYPE`和`ATHENS_DISK_STORAGE_ROOT`环境变量。 + +为了简单起见,下面的示例使用`:latest` Docker标记,但是我们强烈建议您在环境启动并运行后切换到使用正式版本(例如`:v0.3.0`)。 + +**Bash** +```bash +export ATHENS_STORAGE=~/athens-storage +mkdir -p $ATHENS_STORAGE +docker run -d -v $ATHENS_STORAGE:/var/lib/athens \ + -e ATHENS_DISK_STORAGE_ROOT=/var/lib/athens \ + -e ATHENS_STORAGE_TYPE=disk \ + --name athens-proxy \ + --restart always \ + -p 3000:3000 \ + gomods/athens:latest +``` + +**PowerShell** +```PowerShell +$env:ATHENS_STORAGE = "$(Join-Path $pwd athens-storage)" +md -Path $env:ATHENS_STORAGE +docker run -d -v "$($env:ATHENS_STORAGE):/var/lib/athens" ` + -e ATHENS_DISK_STORAGE_ROOT=/var/lib/athens ` + -e ATHENS_STORAGE_TYPE=disk ` + --name athens-proxy ` + --restart always ` + -p 3000:3000 ` + gomods/athens:latest +``` + +注意:如果您之前尚未使用Docker for Windows挂载此驱动器,则可能会提示您允许访问 + +Athens现在应该作为带有本地目录`athens-storage`的Docker容器运行。当Athens检索模块(module)时,它们将被存储在先前创建的目录中。首先,让我们确认雅典是否在运行: + +```console +$ docker ps +CONTAINER ID IMAGE COMMAND PORTS NAMES +f0429b81a4f9 gomods/athens:latest "/bin/app" 0.0.0.0:3000->3000/tcp athens-proxy +``` + +现在,我们可以从安装了Go v1.12+的任何机器上使用Athens。 要验证这一点,请尝试以下示例: + +**Bash** +```console +$ export GO111MODULE=on +$ export GOPROXY=http://127.0.0.1:3000 +$ git clone https://github.com/athens-artifacts/walkthrough.git +$ cd walkthrough +$ go run . +go: downloading github.com/athens-artifacts/samplelib v1.0.0 +The 🦁 says rawr! +``` + + +**PowerShell** +```console +$env:GO111MODULE = "on" +$env:GOPROXY = "http://127.0.0.1:3000" +git clone https://github.com/athens-artifacts/walkthrough.git +cd walkthrough +$ go run . +go: downloading github.com/athens-artifacts/samplelib v1.0.0 +The 🦁 says rawr! +``` + +我们可以通过检查Docker日志来验证Athens是否处理了此请求: + +```console +$ docker logs -f athens-proxy +time="2018-08-21T17:28:53Z" level=warning msg="Unless you set SESSION_SECRET env variable, your session storage is not protected!" +time="2018-08-21T17:28:53Z" level=info msg="Starting application at 0.0.0.0:3000" +handler: GET /github.com/athens-artifacts/samplelib/@v/v1.0.0.info [200] +handler: GET /github.com/athens-artifacts/samplelib/@v/v1.0.0.mod [200] +handler: GET /github.com/athens-artifacts/samplelib/@v/v1.0.0.zip [200] +``` + +现在,如果查看`athens_storage`文件夹的内容,您将会看到与samplelib模块相关的新增文件。 + +**Bash** +```console +$ ls -lr $ATHENS_STORAGE/github.com/athens-artifacts/samplelib/v1.0.0/ +total 24 +-rwxr-xr-x 1 jeremyrickard wheel 50 Aug 21 10:52 v1.0.0.info +-rwxr-xr-x 1 jeremyrickard wheel 2391 Aug 21 10:52 source.zip +-rwxr-xr-x 1 jeremyrickard wheel 45 Aug 21 10:52 go.mod +``` + +**PowerShell** +```console +$ dir $env:ATHENS_STORAGE\github.com\athens-artifacts\samplelib\v1.0.0\ + + + Directory: C:\athens-storage\github.com\athens-artifacts\samplelib\v1.0.0 + + +Mode LastWriteTime Length Name +---- ------------- ------ ---- +-a---- 8/21/2018 3:31 PM 45 go.mod +-a---- 8/21/2018 3:31 PM 2391 source.zip +-a---- 8/21/2018 3:31 PM 50 v1.0.0.info +``` + + +重新启动Athens后,它将在该位置提供模块(module),而无需重新下载。 为了验证这一点,我们需要首先删除Athens容器。 + +```console +docker rm -f athens-proxy +``` + +接下来,我们需要清除本地Go模块中的缓存。 这是必要的,以便您本地的Go命令行工具从Athens重新下载该模块。 以下命令将清除本地存储中的模块: + +**Bash** +```bash +sudo rm -fr "$(go env GOPATH)/pkg/mod" +``` + +**PowerShell** +```powershell +rm -recurse -force $(go env GOPATH)\pkg\mod +``` + +现在,我们重新运行Athens容器 + +**Bash** +```console +docker run -d -v $ATHENS_STORAGE:/var/lib/athens \ + -e ATHENS_DISK_STORAGE_ROOT=/var/lib/athens \ + -e ATHENS_STORAGE_TYPE=disk \ + --name athens-proxy \ + --restart always \ + -p 3000:3000 \ + gomods/athens:latest +``` + +**PowerShell** +```console +docker run -d -v "$($env:ATHENS_STORAGE):/var/lib/athens" ` + -e ATHENS_DISK_STORAGE_ROOT=/var/lib/athens ` + -e ATHENS_STORAGE_TYPE=disk ` + --name athens-proxy ` + --restart always ` + -p 3000:3000 ` + gomods/athens:latest +``` + +当我们重新运行我们的Go示例时,Go cli将再次从Athens下载模块。然而,Athens不需要重新检索模块。它将从本地磁盘中获取。 + +**Bash** +```console +$ ls -lr $ATHENS_STORAGE/github.com/athens-artifacts/samplelib/v1.0.0/ +total 24 +-rwxr-xr-x 1 jeremyrickard wheel 50 Aug 21 10:52 v1.0.0.info +-rwxr-xr-x 1 jeremyrickard wheel 2391 Aug 21 10:52 source.zip +-rwxr-xr-x 1 jeremyrickard wheel 45 Aug 21 10:52 go.mod +``` + +**PowerShell** +```console +$ dir $env:ATHENS_STORAGE\github.com\athens-artifacts\samplelib\v1.0.0\ + + + Directory: C:\athens-storage\github.com\athens-artifacts\samplelib\v1.0.0 + + +Mode LastWriteTime Length Name +---- ------------- ------ ---- +-a---- 8/21/2018 3:31 PM 45 go.mod +-a---- 8/21/2018 3:31 PM 2391 source.zip +-a---- 8/21/2018 3:31 PM 50 v1.0.0.info +``` + +请注意文件的时间戳并没有更改 + +下一步: + +* [通过helm在Kubernetes上运行Athens](/install/install-on-kubernetes) +* 查看Athens在生产环境上的最佳实践. [即将发布](https://github.com/gomods/athens/issues/531)