摘要:接下來是系統需要的配置文件,文件分別在變化時被使用,這樣編寫一套啟動文件不僅部署可用,也可用于主題或應用開發。文件內容設置了反向代理啟用協議以及規定上傳文件大小。本案例的博客地址原文出處最后配置一下網站,也使用了自己開發的主題。
為什么是Ghost、Docker
這個問題很容易得到回答,因為ghost快又簡約,而且使用node.js開發,使用起來體驗十分良好。我自己曾經用過不少的博客系統,最長一次使用WordPress,但最后因為選擇合適插件這個問題上使我放棄了(選擇困難癥,因為太多了)。
使用docker?好吧,一是為了學習docker技術,二是因為作為學生沒有一臺穩定的服務器,每次都要重新配置服務器,很麻煩的。。
廢話就說到這里,開始進入正題。
前提條件一臺安裝好docker的服務器
檢查docker-compose是否安裝
一些必要的基礎知識(Linux、MySQL、Nginx等等)
整個項目結構長這樣
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鏡像
在國內任何國外資源下載安裝起來都會很麻煩,所以為了保證安裝速度飛起來,換源是很重要的,另外npm install也換成了cnpm,其實使用yarn也是不錯的選擇。為了進一步的快速,我使用了docker社區資源daocloud.io/library/node:6.11.2-alpine,省去了編譯安裝node的時間。整個Dockerfile文件內容如下:
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 # 設置變量 # ================================ 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 # 復制必要文件 COPY config.production.json /ghost COPY config.development.json /ghost RUN cd /ghost && ls && cnpm install --${NODE_ENV} # 復制啟動文件 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"]
這么一來build的時間就被極大縮短,我只用了幾分鐘~
稍微解釋一下,chmod +x /usr/local/bin/run.sh為啟動文件賦予權限,這個很重要。
接下來是ghost系統需要的配置文件,config.production.json、config.development.json文件分別在NODE_ENV變化時被使用,這樣編寫一套Docker啟動文件不僅部署可用,也可用于主題或應用開發。如果是開發主題可以使用VOLUME指定容器可訪問的宿主機文件目錄。具體配置文件的配置項可以移步到官網查看。這一部分內容后續還有說明。
最后是容器啟動的入口文件了,由于并不十分了解shell所以寫的很簡單,但是也滿足了當下需求。具體就是設置了環境變量,遷移數據庫,最后運行啟動。run.sh文件內容如下:
#!/bin/sh cd /ghost export NODE_ENV=${NODE_ENV} node_modules/.bin/knex-migrator init # NODE_ENV=development migrate exec node index.js制作Nginx鏡像
社區的強大無時無刻不在影響開發者,真的是這樣。我使用了官方鏡像,并且加以簡單的修改,同時還啟用了HTTP SSL域名訪問變成了綠色的,強迫癥再一次被滿足。。Dockerfile文件內容如下:
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的相關教程我直接獲取自這篇文章。nginx.conf文件內容設置了反向代理、啟用SSL協議以及規定上傳文件大小。文件內容如下:
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;就規定的是上傳文件限制的大小。如果從阿里云購買了CA認證服務并下載了相關證書,再將證書或內容復制到nginx.key、nginx.pem或直接替換為你的文件。
制作Mysql鏡像這一部分沒有什么特殊設置,所以直接使用了現成的鏡像,具體的配置在后續的docker-compose.yml文件之中。
使用docker-compose如果你的docker應用是由好多個部分組成的,那么docker-compose是統一管理它們的良好工具,統一制作、啟動或停止,總之非常方便。
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
在這里配置要數據庫密碼。restart: always會讓容器掛掉的時候自己自行啟動。容器之間使用了links讓其可以互相訪問,這是因為docker會將links的規定內容直接映射到/etc/hosts文件中去,直接添加解析。例如,在ghost中添加links: - mysql,那么在配置文件config.production.json、config.development.json中就可以這樣寫
"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;
一條命令來構建并啟動:
docker-compose up -d --build
這樣成功部署了屬于自己的博客網站,并且也讓其后臺運行了。
后續本項目的地址在awesome-ghost,歡迎留言討論。
因為覺著很好玩,想要不定期更新這個小項目,添加更多自定義設置,解決博客升級更新的問題。如果你也有興趣或許可以一起討論。
本案例的博客地址
原文出處
最后配置一下網站,也使用了自己開發的主題awesome-imlooke。做個廣告,喜歡就留個star給我吧?
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27035.html
摘要:接下來是系統需要的配置文件,文件分別在變化時被使用,這樣編寫一套啟動文件不僅部署可用,也可用于主題或應用開發。文件內容設置了反向代理啟用協議以及規定上傳文件大小。本案例的博客地址原文出處最后配置一下網站,也使用了自己開發的主題。 為什么是Ghost、Docker 這個問題很容易得到回答,因為ghost快又簡約,而且使用node.js開發,使用起來體驗十分良好。我自己曾經用過不少的博客系...
摘要:時間年月日星期六說明本文部分內容均來自慕課網。必填用于執行命令,當執行完畢后,將產生一個新的文件層。可選指定此鏡像啟動時默認執行命令。可選用于指定需要暴露的網絡端口號。可選向鏡像中掛載一個卷組。 時間:2017年09月16日星期六說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com 教學源碼:無 學習源碼:無 第一章:課程簡介 1-1 課程介紹 Docke...
摘要:后記昨天第一次聽說,一時興起今天花了半天的時間從開始搗鼓,只會基本使用,也記不清多久沒碰過了,不涉及高級使用姿勢,像改主題改文件支持某些特性等等。 后記 昨天第一次聽說ghost,一時興起今天花了半天的時間從0開始搗鼓,node只會基本使用,js也記不清多久沒碰過了,不涉及高級使用姿勢,像改主題、改js文件支持某些特性等等。個人能力不夠,也沒有興趣深入研究,就是為了看看這東西怎么用。 ...
閱讀 4001·2023-04-26 02:13
閱讀 2244·2021-11-08 13:13
閱讀 2729·2021-10-11 10:59
閱讀 1732·2021-09-03 00:23
閱讀 1301·2019-08-30 15:53
閱讀 2275·2019-08-28 18:22
閱讀 3050·2019-08-26 10:45
閱讀 726·2019-08-23 17:58