2018 Web 项目部署备忘:加速镜像及本地构建

差不多一年前我用 Vue 做了一个 Web App 项目,最近又完成这个项目的 2.0 版本,除去项目本身的升级以外,在部署方面我也从以前的土法部署改成了基于 Docker 环境部署。

基于国内糟糕的网络环境,以及 Web 前端项目日益臃肿的部署和消耗资源极大的构建环境,这篇文章简单列举一下我用的加速镜像及构建方式。

Docker 加速镜像

就像使用 Ubuntu 或其他 Linux 发行版需要使用镜像源一样,使用 Docker 也得使用镜像源,不然慢吞吞地从国外官方源 Pull Image 的过程会痛不欲生。

这里推荐 Docker 中国的镜像,使用很简单,修改 /etc/docker/daemon.json 文件,写入下面这行即可(记得重启 Docker 以生效):

{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

此外还有一个候选,如果你是阿里云的用户,则可以使用「阿里云加速器」,可以登录 容器Hub服务 获得。

如果自己有能力折腾的话,可以尝试一下 @yaodongfs 所说的「自建 registry,上游再对接国内镜像」的方式。

参考资料:

Python 的 pip 源镜像

Docker 镜像的速度解决了,后面还有更多的问题等着你…我的这个项目是用 Python 做后端服务的,和 Docker 一样,默认情况下安装 Python 包会非常慢。这个要怎么解决呢?

如果在目标服务器上制作 Docker 镜像,可以推荐阿里云镜像。首先准备一个叫 pip.conf 的文件:

[global]
trusted-host=mirrors.aliyun.com
index-url=http://mirrors.aliyun.com/pypi/simple

在制作 Docker 镜像的 Dockerfile 里面,添加一句:

ADD pip.conf /etc/pip.conf

这样在通过 pip install 安装 Python 包的时候,就会从这个源去获得了。

NPM 镜像

NPM 包管理也同理,不管你是本地构建还是服务器构建,镜像可以使用「淘宝 NPM 镜像」:https://npm.taobao.org

里面介绍得很详细,我这里就不多讲了。

Web 前端项目本地构建,rsync 上传

前言提到了一句「消耗资源极大的构建环境」,本来我还没有感觉,毕竟一年前我就在服务器上构建 Web 项目,没出过什么问题,直到昨晚…连续搞挂两次 1G 内存的 Server,我才意识到——Web 前端(Node 项目)已经到了可以几乎和 Native App 一样相比的构建模式了。

于是我简单的学了一下,采用了 @请叫我汪二 同学推荐的「本地构建 + rsync 上传」模式。

rsync 的使用非常简单,而且默认就是基于 SSH 的,比如:

rsync -r fontend/dist username@my.server.com:~/www/

就可以把本地前端项目构建好的 dist 目录上传至远程服务器的 ~/www 目录下了。可以说从「远端构建」改成「本地构建 + rsync 上传」的成本非常低。

总结

经过上述变更之后,在国内的服务器上,终于也可以很流畅地部署 Web 项目了…如果大家有更棒的部署和构建方式,欢迎交流。

<推广> 本站架设于 Linode

6 Comments

  1. https://registry.docker-cn.com 會同步 docker 官方的 image?如果自己構建的 image push 上去是私有的怎麼辦?它也會代理 docker login 的請求得到嗎?

  2. 用 circleci 之类的不是更方便吗

  3. 非阿里云用户,推荐一下 Daocloud 的服务,无论是文档还是速度都很令人满意。
    软件源什么的,清华源自从重拾初心后,还是很棒的(只不过开大会期间会被干掉)。
    私有镜像,如果有硬件条件的话能自建仓库还是推荐用自建仓库,不过安全性可能会有问题(我用的是2016年的方案,现在应该有更容易的)。

    如果没有条件的话,办法也是有的:
    本地创建镜像->生成一个容器->docker export导出容器到文件->服务器端docker import导入这个容器。不过这个方法不是很优雅,我们应该直接操作镜像,而不是容器。
    现在的版本应该有docker save和docker load可以直接导入导出镜像了。这些方法也很适合开发条件非常差的国内公司。

  4. 七牛也提供了dockerhub镜像 https://reg-mirror.qiniu.com

Leave a Comment