本文使用「署名 4.0 國際 (CC BY 4.0)」許可協(xié)議,歡迎轉(zhuǎn)載、或重新修改使用,但需要注明來源。 署名 4.0 國際 (CC BY 4.0)
此系列共分以下幾篇
運維篇
本篇開始要實施項目的運維部署,讓前面所做的工作最終落地。
我們使用的是阿里云服務(wù)器,在服務(wù)器上已經(jīng)使用 docekr 部署了一套基礎(chǔ)的服務(wù)環(huán)境,可參考 基于 traefik v2 的本地開發(fā)、部署一致環(huán)境方案,現(xiàn)在就需要將前端項目、Phabricator 系統(tǒng)部署在這臺服務(wù)器上面來供用戶訪問使用。
針對兩個項目分別進行規(guī)劃:
由于服務(wù)器是 docker 環(huán)境,因此我們只需要做好每一個項目的編排文件就可以搭建好項目的運行時環(huán)境。
- 網(wǎng)站端
我們網(wǎng)站的實現(xiàn)是基于vuejs 的 nuxtjs 框架,所以需要一套 nodejs 服務(wù)環(huán)境,它由 Dockerfile + docker-compose 組成。
Dockerfile 內(nèi)容如下
FROM node:10-alpine
# 設(shè)置鏡像作者
MAINTAINER baisheng <baisheng@gmail.com>
# 設(shè)置時區(qū)
RUN sh -c "echo 'Asia/Shanghai' > /etc/timezone"
# 使用 aliyun 倉庫加速
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
# 以下軟件根據(jù)實際情況選擇是否安裝
#RUN apk add --no-cache make gcc g++ python git
# Nodejs 服務(wù)的淘寶源配置
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 鏡像,由于需要在鏡像內(nèi)做構(gòu)建工作,設(shè)置 npm 源為國內(nèi)源可以加速構(gòu)建
docker-compose.yml 文件內(nèi)容如下
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 的構(gòu)建以及讓 traefik 去識別我們新開啟的服務(wù),讓反向代理能夠工作。
文件配置好后,執(zhí)行以下命令:
docker-compose up -d --build
執(zhí)行過程及結(jié)果如下:
# 執(zhí)行結(jié)果
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 的管理端看一下反向代理是否識別了服務(wù),工作是否正常。

我們可以看到已經(jīng)正常識別服務(wù),瀏覽器測試訪問也一切正常,網(wǎng)站端部署完畢。
- Phabricator
- 官方SaaS版本 https://www.phacility.com/phabricator/
- 社區(qū)開源倉庫 https://github.com/phacility/phabricator/
- Bitnami 容器倉庫 https://github.com/bitnami/bitnami-docker-phabricator
因為當前沒有特別的定制需求,我們直接用的是 Bitnami 容器方案,目前社區(qū)最新版是 《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
對程序進行漢化
采用社區(qū)網(wǎng)友提供的漢化補丁,下載倉庫中指定的 PhabricatorSimplifiedChineseTranslation.php 文件,將其放置在 extensions 目錄中后,啟動應(yīng)用 docker-compose up -d
啟動后訪問 w.caixie.top 輸入默認
- 用戶名
user - 密碼
bitnami1
然后可以在 user/config 中進行界面語言配置、密碼修改等操作

由于 phabricator 默認的開放規(guī)則需要系統(tǒng)用戶可見,但我們是需要開放一些內(nèi)容可以讓來訪者看得到,達到服務(wù)和宣傳的作用?,F(xiàn)在開啟公開可見的策略:

最后
Phabricator 的搭建只是第一步,與現(xiàn)有倉庫集成、與CI 集成等內(nèi)容會在業(yè)務(wù)服務(wù)的工作中進行整合。請大家關(guān)注后續(xù)的運營篇。
--EOF
相關(guān)資源
- 網(wǎng)站項源碼庫
- 網(wǎng)站示例
- Sketch 設(shè)計稿源文件
鏈接: https://pan.baidu.com/s/1c-kcDr0IdynVD7poFwZ7Iw 提取碼: h3ve