本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)
此系列共分以下几篇
运维篇
本篇开始要实施项目的运维部署,让前面所做的工作最终落地。
我们使用的是阿里云服务器,在服务器上已经使用 docekr 部署了一套基础的服务环境,可参考 基于 traefik v2 的本地开发、部署一致环境方案,现在就需要将前端项目、Phabricator 系统部署在这台服务器上面来供用户访问使用。
针对两个项目分别进行规划:
由于服务器是 docker 环境,因此我们只需要做好每一个项目的编排文件就可以搭建好项目的运行时环境。
- 网站端
我们网站的实现是基于vuejs 的 nuxtjs 框架,所以需要一套 nodejs 服务环境,它由 Dockerfile + docker-compose 组成。
Dockerfile 内容如下
FROM node:10-alpine
# 设置镜像作者
MAINTAINER baisheng <baisheng@gmail.com>
# 设置时区
RUN sh -c "echo 'Asia/Shanghai' > /etc/timezone"
# 使用 aliyun 仓库加速
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
# 以下软件根据实际情况选择是否安装
#RUN apk add --no-cache make gcc g++ python git
# Nodejs 服务的淘宝源配置
RUN npm config set registry https://registry.npm.taobao.org && \
npm config set disturl https://npm.taobao.org/dist && \
npm config set electron_mirror https://npm.taobao.org/mirrors/electron/ && \
npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/ && \
npm config set phantomjs_cdnurl https://npm.taobao.org/mirrors/phantomjs/
WORKDIR /app
COPY package.json .
ENV HOST=0.0.0.0
RUN yarn --frozen-lockfile --non-interactive
COPY . /app
RUN yarn build
EXPOSE 3000
CMD ["yarn", "start"]
这个文件中基于 node 官方的 alpine 镜像,由于需要在镜像内做构建工作,设置 npm 源为国内源可以加速构建
docker-compose.yml 文件内容如下
version: '3.5'
services:
website:
build: .
restart: 'unless-stopped'
networks:
- traefik
- default
expose:
- 3000
labels:
- "traefik.enable=true"
- "traefik.http.routers.website.entrypoints=web, web-secure"
- "traefik.http.routers.website.tls=true"
- "traefik.http.routers.website.rule=Host(`caixie.top`, `www.caixie.top`, `caixie.ltd`)"
- "traefik.http.routers.app_https.service=website"
- "traefik.docker.network=traefik"
networks:
traefik:
external: true
这个编排文件主要是配置好 Dockerfile 的构建以及让 traefik 去识别我们新开启的服务,让反向代理能够工作。
文件配置好后,执行以下命令:
docker-compose up -d --build
执行过程及结果如下:
# 执行结果
Building website
Step 1/13 : FROM node:10-alpine
---> 288d2f688643
Step 2/13 : MAINTAINER baisheng <baisheng@gmail.com>
---> Using cache
---> 43f7cce00704
Step 3/13 : RUN sh -c "echo 'Asia/Shanghai' > /etc/timezone"
---> Using cache
---> 38ae5055ef52
Step 4/13 : RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
---> Using cache
---> 4463d3e3f02a
Step 5/13 : RUN npm config set registry https://registry.npm.taobao.org && npm config set disturl https://npm.taobao.org/dist && npm config set electron_mirror https://npm.taobao.org/mirrors/electron/ && npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/ && npm config set phantomjs_cdnurl https://npm.taobao.org/mirrors/phantomjs/
---> Using cache
---> b2df0e507af0
Step 6/13 : WORKDIR /app
---> Using cache
---> b4311163db84
Step 7/13 : COPY package.json .
---> Using cache
---> 8bebbb69624b
Step 8/13 : ENV HOST=0.0.0.0
---> Using cache
---> 9f392ae2670a
Step 9/13 : RUN yarn --frozen-lockfile --non-interactive
---> Using cache
---> 8c3c4910913c
Step 10/13 : COPY . /app
---> Using cache
---> ac58285a3548
Step 11/13 : RUN yarn build
---> Using cache
---> 740bc2148595
Step 12/13 : EXPOSE 80
---> Using cache
---> 081db1e15be8
Step 13/13 : CMD ["yarn", "start"]
---> Using cache
---> 8b86964361c6
Successfully built 8b86964361c6
Successfully tagged caixie-website-nuxtjs_website:latest
caixie-website-nuxtjs_website_1 is up-to-date
Ok,完成后,我们来验证一下,首先登录 traefik 的管理端看一下反向代理是否识别了服务,工作是否正常。
我们可以看到已经正常识别服务,浏览器测试访问也一切正常,网站端部署完毕。
- Phabricator
- 官方SaaS版本 https://www.phacility.com/phabricator/
- 社区开源仓库 https://github.com/phacility/phabricator/
- Bitnami 容器仓库 https://github.com/bitnami/bitnami-docker-phabricator
因为当前没有特别的定制需求,我们直接用的是 Bitnami 容器方案,目前社区最新版是 《2020.5.0-ol-7-r2 release》 Bitnami 会定期从官方仓库中获取版本,并进行容器封装
采用 bitnami 的 docker-compose.yml 配置如下
version: '3'
services:
works:
image: jwilder/nginx-proxy:alpine
depends_on:
- phabricator
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
# - ./nginx/certs:/etc/nginx/certs:ro
- ./nginx/vhost.d:/etc/nginx/vhost.d
- ./nginx/html:/usr/share/nginx/html
expose:
- 80
labels:
- "traefik.docker.network=traefik"
- "traefik.enable=true"
- "traefik.http.routers.works.tls=true"
- "traefik.http.routers.works_https.service=works"
- "traefik.http.routers.works.entryPoints=web, web-secure"
- "traefik.http.routers.works.rule=Host(`w.caixie.top`)"
networks:
- traefik
- phabricator-tier
mariadb:
image: 'bitnami/mariadb'
networks:
- phabricator-tier
environment:
- ALLOW_EMPTY_PASSWORD=yes
- MARIADB_EXTRA_FLAGS=--local-infile=0
volumes:
- 'mariadb_data:/bitnami'
phabricator:
image: 'bitnami/phabricator:latest'
ports:
- '8080:80'
volumes:
- 'phabricator_data:/bitnami'
- './extensions:/opt/bitnami/phabricator/src/extensions'
depends_on:
- mariadb
environment:
- PHABRICATOR_HOST=w.caixie.top
- VIRTUAL_HOST=w.caixie.top
- VIRTUAL_PORT=80
networks:
- phabricator-tier
volumes:
mariadb_data:
driver: local
phabricator_data:
driver: local
networks:
phabricator-tier:
traefik:
external: true
对程序进行汉化
采用社区网友提供的汉化补丁,下载仓库中指定的 PhabricatorSimplifiedChineseTranslation.php 文件,将其放置在 extensions
目录中后,启动应用 docker-compose up -d
启动后访问 w.caixie.top
输入默认
- 用户名
user
- 密码
bitnami1
然后可以在 user/config
中进行界面语言配置、密码修改等操作
由于 phabricator 默认的开放规则需要系统用户可见,但我们是需要开放一些内容可以让来访者看得到,达到服务和宣传的作用。现在开启公开可见的策略:
最后
Phabricator 的搭建只是第一步,与现有仓库集成、与CI 集成等内容会在业务服务的工作中进行整合。请大家关注后续的运营篇。
--EOF
相关资源
- 网站项源码库
- 网站示例
- Sketch 设计稿源文件
链接: https://pan.baidu.com/s/1c-kcDr0IdynVD7poFwZ7Iw 提取码: h3ve