摘要:接下來(lái)是系統(tǒng)需要的配置文件,文件分別在變化時(shí)被使用,這樣編寫(xiě)一套啟動(dòng)文件不僅部署可用,也可用于主題或應(yīng)用開(kāi)發(fā)。文件內(nèi)容設(shè)置了反向代理啟用協(xié)議以及規(guī)定上傳文件大小。本案例的博客地址原文出處最后配置一下網(wǎng)站,也使用了自己開(kāi)發(fā)的主題。
為什么是Ghost、Docker
這個(gè)問(wèn)題很容易得到回答,因?yàn)?b>ghost快又簡(jiǎn)約,而且使用node.js開(kāi)發(fā),使用起來(lái)體驗(yàn)十分良好。我自己曾經(jīng)用過(guò)不少的博客系統(tǒng),最長(zhǎng)一次使用WordPress,但最后因?yàn)檫x擇合適插件這個(gè)問(wèn)題上使我放棄了(選擇困難癥,因?yàn)樘嗔耍?/p>
使用docker?好吧,一是為了學(xué)習(xí)docker技術(shù),二是因?yàn)樽鳛閷W(xué)生沒(méi)有一臺(tái)穩(wěn)定的服務(wù)器,每次都要重新配置服務(wù)器,很麻煩的。。
廢話(huà)就說(shuō)到這里,開(kāi)始進(jìn)入正題。
前提條件一臺(tái)安裝好docker的服務(wù)器
檢查docker-compose是否安裝
一些必要的基礎(chǔ)知識(shí)(Linux、MySQL、Nginx等等)
整個(gè)項(xiàng)目結(jié)構(gòu)長(zhǎng)這樣
docker-ghost/ ├── ghost/ │ └── config.production.json │ └── config.development.json │ └── Dockerfile │ └── run.sh ├── nginx/ │ └── copy/ │ └── nginx.conf │ └── nginx.pem │ └── nginx.key │ └── Dockerfile └── docker-compose.yml建立Ghost鏡像
在國(guó)內(nèi)任何國(guó)外資源下載安裝起來(lái)都會(huì)很麻煩,所以為了保證安裝速度飛起來(lái),換源是很重要的,另外npm install也換成了cnpm,其實(shí)使用yarn也是不錯(cuò)的選擇。為了進(jìn)一步的快速,我使用了docker社區(qū)資源daocloud.io/library/node:6.11.2-alpine,省去了編譯安裝node的時(shí)間。整個(gè)Dockerfile文件內(nèi)容如下:
FROM daocloud.io/library/node:6.11.2-alpine # alpine換源,中科大 RUN cp /etc/apk/repositories /etc/apk/repositories.bak && echo "http://mirrors.ustc.edu.cn/alpine/v3.4/main/" > /etc/apk/repositories # 安裝必要文件 RUN apk update && apk add -U --no-cache vim bash ca-certificates grep wget unzip # npm換源,yarn換源,安裝cnpm RUN npm config set registry https://registry.npm.taobao.org && npm install -g cnpm # 設(shè)置變量 # ================================ ENV GHOST_VERSION 1.8.1 ENV NODE_ENV production RUN wget -q https://github.com/TryGhost/Ghost/releases/download/${GHOST_VERSION}/Ghost-${GHOST_VERSION}.zip -P /tmp && unzip -q /tmp/Ghost-${GHOST_VERSION}.zip -d /ghost # 復(fù)制必要文件 COPY config.production.json /ghost COPY config.development.json /ghost RUN cd /ghost && ls && cnpm install --${NODE_ENV} # 復(fù)制啟動(dòng)文件 COPY run.sh /usr/local/bin RUN chmod +x /usr/local/bin/run.sh WORKDIR /ghost VOLUME /ghost/content EXPOSE 2368 LABEL description="Ghost-$GHOST_VERSION" maintainer="imlooke" ENTRYPOINT ["run.sh"] CMD ["./usr/local/bin/run.sh"]
這么一來(lái)build的時(shí)間就被極大縮短,我只用了幾分鐘~
稍微解釋一下,chmod +x /usr/local/bin/run.sh為啟動(dòng)文件賦予權(quán)限,這個(gè)很重要。
接下來(lái)是ghost系統(tǒng)需要的配置文件,config.production.json、config.development.json文件分別在NODE_ENV變化時(shí)被使用,這樣編寫(xiě)一套Docker啟動(dòng)文件不僅部署可用,也可用于主題或應(yīng)用開(kāi)發(fā)。如果是開(kāi)發(fā)主題可以使用VOLUME指定容器可訪(fǎng)問(wèn)的宿主機(jī)文件目錄。具體配置文件的配置項(xiàng)可以移步到官網(wǎng)查看。這一部分內(nèi)容后續(xù)還有說(shuō)明。
最后是容器啟動(dòng)的入口文件了,由于并不十分了解shell所以寫(xiě)的很簡(jiǎn)單,但是也滿(mǎn)足了當(dāng)下需求。具體就是設(shè)置了環(huán)境變量,遷移數(shù)據(jù)庫(kù),最后運(yùn)行啟動(dòng)。run.sh文件內(nèi)容如下:
#!/bin/sh cd /ghost export NODE_ENV=${NODE_ENV} node_modules/.bin/knex-migrator init # NODE_ENV=development migrate exec node index.js制作Nginx鏡像
社區(qū)的強(qiáng)大無(wú)時(shí)無(wú)刻不在影響開(kāi)發(fā)者,真的是這樣。我使用了官方鏡像,并且加以簡(jiǎn)單的修改,同時(shí)還啟用了HTTP SSL域名訪(fǎng)問(wèn)變成了綠色的,強(qiáng)迫癥再一次被滿(mǎn)足。。Dockerfile文件內(nèi)容如下:
FROM nginx ENV WEB_SITE your-blog.site RUN mkdir -p /etc/nginx/ssl/${WEB_SITE} COPY copy/nginx.pem /etc/nginx/ssl/${WEB_SITE}/nginx.pem COPY copy/nginx.key /etc/nginx/ssl/${WEB_SITE}/nginx.key COPY copy/nginx.conf /etc/nginx/nginx.conf LABEL description="SSL & Ghost" maintainer="imlooke" EXPOSE 80 EXPOSE 443 CMD nginx -g "daemon off;"
啟用SSL的相關(guān)教程我直接獲取自這篇文章。nginx.conf文件內(nèi)容設(shè)置了反向代理、啟用SSL協(xié)議以及規(guī)定上傳文件大小。文件內(nèi)容如下:
events { worker_connections 2048; } http { include mime.types; default_type application/octet-stream; client_max_body_size 20m; server { listen 80; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name your-blog.site; access_log /var/log/nginx/your-blog.site.log; ssl on; ssl_certificate /etc/nginx/ssl/your-blog.site/nginx.pem; ssl_certificate_key /etc/nginx/ssl/your-blog.site/nginx.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL; ssl_prefer_server_ciphers on; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header HOST $http_host; proxy_set_header X-NginX-Proxy true; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://ghost:2368; proxy_redirect off; } } }
client_max_body_size 20m;就規(guī)定的是上傳文件限制的大小。如果從阿里云購(gòu)買(mǎi)了CA認(rèn)證服務(wù)并下載了相關(guān)證書(shū),再將證書(shū)或內(nèi)容復(fù)制到nginx.key、nginx.pem或直接替換為你的文件。
制作Mysql鏡像這一部分沒(méi)有什么特殊設(shè)置,所以直接使用了現(xiàn)成的鏡像,具體的配置在后續(xù)的docker-compose.yml文件之中。
使用docker-compose如果你的docker應(yīng)用是由好多個(gè)部分組成的,那么docker-compose是統(tǒng)一管理它們的良好工具,統(tǒng)一制作、啟動(dòng)或停止,總之非常方便。
version: "2" services: nginx: image: nginx build: nginx command: nginx -g "daemon off;" restart: always ports: - "80:80" - "443:443" container_name: nginx links: - ghost mysql: image: mysql:latest restart: always ports: - "3306:3306" container_name: mysql environment: - MYSQL_ROOT_PASSWORD=your_mysql_password - MYSQL_DATABASE=ghost ghost: image: ghost build: ghost depends_on: - mysql restart: always ports: - "2368:2368" container_name: ghost links: - mysql environment: - NODE_ENV:production
在這里配置要數(shù)據(jù)庫(kù)密碼。restart: always會(huì)讓容器掛掉的時(shí)候自己自行啟動(dòng)。容器之間使用了links讓其可以互相訪(fǎng)問(wèn),這是因?yàn)?b>docker會(huì)將links的規(guī)定內(nèi)容直接映射到/etc/hosts文件中去,直接添加解析。例如,在ghost中添加links: - mysql,那么在配置文件config.production.json、config.development.json中就可以這樣寫(xiě)
"database": { "client": "mysql", "connection": { "host": "mysql", "user": "your_mysql_user", "password": "your_mysql_password", "database": "your_mysql_database" } },
同理在nginx.conf中也添加了這樣的鏈接proxy_pass http://ghost:2368;
一條命令來(lái)構(gòu)建并啟動(dòng):
docker-compose up -d --build
這樣成功部署了屬于自己的博客網(wǎng)站,并且也讓其后臺(tái)運(yùn)行了。
后續(xù)本項(xiàng)目的地址在awesome-ghost,歡迎留言討論。
因?yàn)橛X(jué)著很好玩,想要不定期更新這個(gè)小項(xiàng)目,添加更多自定義設(shè)置,解決博客升級(jí)更新的問(wèn)題。如果你也有興趣或許可以一起討論。
本案例的博客地址
原文出處
最后配置一下網(wǎng)站,也使用了自己開(kāi)發(fā)的主題awesome-imlooke。做個(gè)廣告,喜歡就留個(gè)star給我吧?
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/40561.html
摘要:接下來(lái)是系統(tǒng)需要的配置文件,文件分別在變化時(shí)被使用,這樣編寫(xiě)一套啟動(dòng)文件不僅部署可用,也可用于主題或應(yīng)用開(kāi)發(fā)。文件內(nèi)容設(shè)置了反向代理啟用協(xié)議以及規(guī)定上傳文件大小。本案例的博客地址原文出處最后配置一下網(wǎng)站,也使用了自己開(kāi)發(fā)的主題。 為什么是Ghost、Docker 這個(gè)問(wèn)題很容易得到回答,因?yàn)間host快又簡(jiǎn)約,而且使用node.js開(kāi)發(fā),使用起來(lái)體驗(yàn)十分良好。我自己曾經(jīng)用過(guò)不少的博客系...
摘要:時(shí)間年月日星期六說(shuō)明本文部分內(nèi)容均來(lái)自慕課網(wǎng)。必填用于執(zhí)行命令,當(dāng)執(zhí)行完畢后,將產(chǎn)生一個(gè)新的文件層。可選指定此鏡像啟動(dòng)時(shí)默認(rèn)執(zhí)行命令。可選用于指定需要暴露的網(wǎng)絡(luò)端口號(hào)。可選向鏡像中掛載一個(gè)卷組。 時(shí)間:2017年09月16日星期六說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com 教學(xué)源碼:無(wú) 學(xué)習(xí)源碼:無(wú) 第一章:課程簡(jiǎn)介 1-1 課程介紹 Docke...
摘要:后記昨天第一次聽(tīng)說(shuō),一時(shí)興起今天花了半天的時(shí)間從開(kāi)始搗鼓,只會(huì)基本使用,也記不清多久沒(méi)碰過(guò)了,不涉及高級(jí)使用姿勢(shì),像改主題改文件支持某些特性等等。 后記 昨天第一次聽(tīng)說(shuō)ghost,一時(shí)興起今天花了半天的時(shí)間從0開(kāi)始搗鼓,node只會(huì)基本使用,js也記不清多久沒(méi)碰過(guò)了,不涉及高級(jí)使用姿勢(shì),像改主題、改js文件支持某些特性等等。個(gè)人能力不夠,也沒(méi)有興趣深入研究,就是為了看看這東西怎么用。 ...
閱讀 2652·2021-09-09 09:33
閱讀 2810·2019-08-30 15:54
閱讀 2867·2019-08-30 14:21
閱讀 2356·2019-08-29 17:15
閱讀 3579·2019-08-29 16:13
閱讀 2758·2019-08-29 14:21
閱讀 3421·2019-08-26 13:25
閱讀 2027·2019-08-26 12:14