目录

    1. 关于个人项目

    为什么强调是个人项目?商业项目对代码托管、开发、运维部署等环节有着冗长的流程。而对于个人开发者,这样的流程成本过高,不利于快速项目迭代。

    个人项目可能是一次学习的 Demo。完成一个领域 Demo 是很好的技术学习思路。从零开始搭建一个完整的 Demo, 不仅能了解到一些常见的领域问题,还能够对领域有一个完整的了解。既见树木,又见树林。

    个人项目也有可能是为了满足一个小的需求。比如,你需要一个在线相册,而公共相册又不能任意的按照自己的想法展示,也不承诺永久服务。这样就产生了一个需求。你可以自己开发在线相册,也可以在开源项目的基础上修改,总之有了一个小需求。

    无论何种出发点,个人项目都应该被鼓励。个人项目是程序员的试验场,也是程序员展示自己的地方,既能够提高自己的能力,也能够取悦自己。

    2. 使用 GitHub 开源自己的项目

    你要记住的是,你的代码远没有你想象的那么重要。

    绝大多数的程序员只是在模仿或者搬运他人的成果,具有开创性贡献的程序员极少。这里并不是在贬低模仿或者搬运,对于商业来讲,代码的核心是与业务逻辑相关的实现,并不需要特殊的技巧。而对于个人项目,摆脱了业务逻辑的束缚,开源对我们不仅没有害处,还有诸多好处。

    • 监督代码质量。毕竟是需要对外开源的项目,代码肯定被自己 Review 很多次。

    • 交流项目合作开发。全世界的程序员都在 GitHub,用 issues 提交自己的问题,通过 PR 多人开发。

    • 增加影响力。你的Demo、小需求,其他人也会需要,在分享给其他人的同时,你也获得了其他人的赞许,收获影响力。

    3. 使用 Docker 容器化项目

    Docker 简直是喜欢折腾服务器者的福音。

    在没有 Docker 之前,服务器总是被弄得乱糟糟,安装各种服务软件、运行环境,没过多久服务器磁盘就不够用了。有了 Docker 之后,你可以在隔离的运行环境去完成自己的各种尝试。

    Docker 通过 lxc、cgroup、namespace 等技术在宿主机上虚拟出运行时,提供支持秒级启停的虚拟机服务。相对于 VirtualBox、VMWare 等虚拟机,Docker 更轻量级,对资源利用率更高效。

    使用 Docker 容器化一个项目也只有三步:

    • 需要合适的基础镜像

    • 挂载目录

    • 暴露服务端口

    # 需要合适的基础镜像
    FROM node:6
    
    RUN mkdir -p /var/www/app
    WORKDIR /var/www/app
    
    # 挂载目录
    ADD . /var/www/app
    RUN rm -rf /var/www/app/resources/photos/* /var/www/app/config.js
    
    # 暴露服务端口
    EXPOSE 3000
    
    RUN npm install -g cnpm --registry=https://registry.npm.taobao.org && return 0
    RUN cnpm install
    
    CMD ["cnpm", "run", "start"]
    

    上面是我为最近 Docker 化的一个应用,编写的 Dockerfile 文件。为了加快依赖包安装时间,使用了 cnpm。

    4. 使用 hub.docker.com 发布镜像

    通过 GitHub 托管代码的好处是可以方便地使用各种各样周边的服务。比如,用于持续集成的 Travis CI 。这里想提的是 hub.docker.com 提供的镜像编译功能。

    在 hub.docker.com 注册账号之后,创建项目关联上 GitHub 的项目。每次向 GitHub 推送代码之后,就会触发 hub.docker.com 的编译镜像任务。同时,编译完成的镜像也可以被其他人所使用。

    5. 使用 GitLab 私有仓库托管部署脚本

    对于一些私人信息的配置,放在 GitLab 是一个不错的选择。GitHub 免费账号只能创建公开项目,而 GitLab 免费账户也可以创建私人项目。

    将项目配置、部署脚本托管在 GitLab 私有仓库,既保证了隐私,也记录了配置和脚本的变更。

    再加上 GitLab CI,GitLab 真的是越用越喜欢。

    version: '2'
    
    services:
    
        nginx:
          image: shaowenchen/docker-nginx:latest
          restart: always
          privileged: true
          links:
            - gallery
          volumes:
            - ./www/:/var/www/
          ports:
            - "80:80"
          depends_on:
            -  gallery
    
        gallery:
          image: shaowenchen/zing-gallery:latest
          restart: always
          volumes:
            - ./www/resources/photos:/var/www/app/resources/photos
            - ./www/conf/config.js:/var/www/app/config.js
    

    上面是我最近利用 docker-compose 编排的一个服务。只需要一个 docker-compose.yml 文件,加上一些配置文件,在任意一台服务器上,都可以使用一条命令 docker-compose up -d 将服务跑起来。

    6. 将服务监控起来

    有两种方式监控服务:

    • 第一种是通过日志。通过部署 ELK 可以很好的记录运行和访问日志,针对日志关键字可以开发相关的监控告警系统。

    • 第二种是监控系统。通过部署 Prometheus、Bosun 可以对服务进行有效地监控。

    如果嫌麻烦,还有一种更加方面的途径,使用 DaoCloud。安装 DaoCloud 的 Agent ,将主机托管在 DaoCloud 之后,就可以实时地查看和部署服务,了解服务器的运行状况了。