DevOps Docker

Hướng dẫn triển khai Ghost Blog với docker

blog

Ghost Blog là một nền tảng blog mã nguồn mở mạnh mẽ dựa trên nodejs. Nó được thiết kế tốt và dễ sử dụng. Nền tảng ghost được viết bằng JavaScript và sử dụng node.js làm môi trường runtime. Phiên bản Ghost đầu tiên được phát hành vào năm 2013 theo giấy phép MIT..

Traefik là proxy ngược HTTP hiện đại và là bộ cân bằng tải cho các dịch vụ microservice. Traefik giúp việc triển khai tất cả các dịch vụ microservice trở nên dễ dàng, được tích hợp với các thành phần cơ sở hạ tầng hiện có như Docker, Swarm Mode, Kubernetes, Amazon ECS, Rancher, Etcd, Consul, v.v.

Trong hướng dẫn này, chúng tôi sẽ hướng dẫn từng bước cách cài đặt và định cấu hình Ghost với Docker. Chúng tôi sẽ cài đặt và cấu hình Ghost theo phiên bản mới nhất, sử dụng MySQL làm cơ sở dữ liệu và Traefik làm Reverse Proxy.

Điều kiện tiên quyết

  • Ubuntu 18.04 LTS
  • User có quyền root hoặc sudo

Chúng tôi sẽ làm gì

  1. Cài đặt Docker CE trên Ubuntu 18.04 LTS
  2. Thiết lập Docker cho người dùng non-root
  3. Cài đặt Docker Compose
  4. Cấu hình Ghost stack
    • Tạo một mạng tùy chỉnh
    • Tạo một thư mục dự án
    • Tạo và cấu hình bộ chứa MySQL
    • Tạo và cấu hình Proxy ngược Traefik
    • Tạo và cấu hình Ghost Container
  5. Triển khai Ghost với MySQL và Traefik
  6. Kiểm tra

Bước 1 – Cài đặt Docker CE trên Ubuntu 18.04 LTS

Bước đầu tiên chúng ta sẽ làm trong hướng dẫn này là cài đặt phiên bản mới nhất từ kho docker chính thức.

Thêm khóa và kho lưu trữ.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

Lệnh sẽ tự động cập nhật tất cả các kho lưu trữ trên hệ thống.

Bây giờ cài đặt docker bằng lệnh apt bên dưới.

sudo apt install docker-ce -y

Sau khi cài đặt hoàn tất, hãy khởi động dịch vụ và cho phép nó khởi chạy mỗi khi khởi động hệ thống.

systemctl start docker
systemctl enable docker

Phiên bản docker-ce mới nhất đã được cài đặt trên hệ thống Ubuntu 18.04.

Bước 2 – Thiết lập Docker cho người dùng non-root

Trong hướng dẫn này, tất cả các dịch vụ microservice sẽ được chạy với người dùng thông thường/không phải root. Vì vậy, chúng ta cần cấu hình người dùng để có thể chạy container và chạy lệnh sudo để có quyền root.

Tạo người dùng mới có tên ‘hakase‘ và tạo mật khẩu.

useradd -m -s /bin/bash hakase
passwd hakase

Bây giờ chỉ định người dùng ‘hakase‘ cho nhóm ‘sudo’ và ‘docker’.

usermod -a -G root hakase
usermod -a -G docker hakase

Và khởi động lại dịch vụ docker.

systemctl restart docker

‘Hakase’ hiện có thể chạy container docker và chạy lệnh sudo để có quyền root.

Đăng nhập với tư cách người dùng ‘hakase’ và chạy vùng chứa docker hello-world.

su - hakase
docker run -it hello-world

Và sau đây là kết quả.

Bước 3 – Cài đặt Docker Compose

Trong hướng dẫn này, chúng tôi sẽ cài đặt docker-compose 1.21 từ tệp nhị phân trên kho lưu trữ Github.

Tải tệp nhị phân xuống thư mục ‘/usr/local/bin’.

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

Và làm cho tệp ‘docker-compose’ có thể thực thi được bằng cách thay đổi quyền của tệp.

sudo chmod +x /usr/local/bin/docker-compose

docker-compose đã được cài đặt – kiểm tra nó bằng lệnh bên dưới.

docker-compose version
docker version

Bước 4 – Cấu hình Ghost Stack

Trong bước này, chúng ta sẽ cấu hình docker và tạo một tệp docker-compose mới để cài đặt ghost.

Chúng tôi sẽ tạo một mạng tùy chỉnh mới và tạo một tệp yml docker-compose mới chứa ba dịch vụ chính, bao gồm cơ sở dữ liệu MySQL, proxy ngược Traefik và chính blog Ghost.

Tạo một mạng tùy chỉnh

Hiển thị mạng có sẵn bằng lệnh docker network bên dưới.

docker network ls

Tạo mạng docker tùy chỉnh mới cho proxy ngược traefik có tên ‘traefiknet’.

docker network create traefiknet

Bây giờ hãy kiểm tra lại mạng có sẵn trên hệ thống docker.

docker network ls

Mạng tùy chỉnh cho Treafik có tên ‘traefiknet’ đã được tạo.

Tạo một thư mục dự án

Sau khi tạo mạng tùy chỉnh docker, chúng ta sẽ tạo một thư mục dự án mới có tên là ‘ghost’ và tạo tệp docker-compose.yml mới.

Đăng nhập vào người dùng ‘hakase’.

su - hakase

Tạo một thư mục ‘ma’ mới và thay đổi thư mục làm việc vào đó.

mkdir ghost/
cd ghost/

Và tạo một tập tin docker-compose mới.

touch docker-compose.yml

Tạo và cấu hình dịch vụ MySQL

MySQL là dịch vụ đầu tiên chúng tôi muốn tạo và chúng tôi muốn tạo bộ chứa MySQL với các cấu hình bên dưới.

  • Chúng tôi sẽ sử dụng hình ảnh docker MySQL 5.7.
  • Gắn thư mục dữ liệu MySQL vào thư mục máy chủ docker cục bộ.
  • Chạy dịch vụ MySQL trên mạng nội bộ cục bộ.
  • Cấu hình người dùng và mật khẩu MySQL.
    • Mật khẩu root MySQL: mypassword
    • Cơ sở dữ liệu cho bản ghost có tên ‘ghostdb’ với người dùng ‘ghost’ và mật khẩu là ‘ghostdbpass’
  • Vùng chứa MySQL sẽ được đặt tên là ‘mysql’.

Bên trong thư mục ‘ghost’, tạo một thư mục mới có tên ‘data’ và chỉnh sửa tệp ‘docker-compose.yml’.

mkdir -p data/
vim docker-compose.yml

Dán cấu hình bên dưới.

version: '3.3'

services:

  mysql:
    image: mysql:5.7
    restart: always
    volumes:
      - ./data:/var/lib/mysql
    labels:
      - "traefik.enable=false"
    networks:
      - internal
    environment:
      MYSQL_ROOT_PASSWORD: mypassword
      MYSQL_USER: ghost
      MYSQL_PASSWORD: ghostdbpass
      MYSQL_DATABASE: ghostdb
    container_name: mysql

Lưu và thoát.

Tạo và cấu hình Proxy ngược Traefik

Sau khi tạo dịch vụ MySQL, chúng tôi sẽ tạo và định cấu hình vùng chứa proxy ngược traefik.

Trước khi chỉnh sửa tập lệnh ‘docker-compose.yml’, chúng ta cần tạo cấu hình traefik mới có tên ‘traefik.toml’.

vim traefik.toml

Dán cấu hình quy tắc traefik bên dưới.

#Traefik Global Configuration
debug = false
checkNewVersion = true
logLevel = "ERROR"

#Define the EntryPoint for HTTP and HTTPS
defaultEntryPoints = ["https","http"]

#Define the HTTP port 80 and
#HTTPS port 443 EntryPoint
#Enable automatically redirect HTTP to HTTPS
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]

#Enable Traefik Dashboard on port 8080
#with basic authentication method
#hakase and password
[entryPoints.dash]
address=":8080"
[entryPoints.dash.auth]
[entryPoints.dash.auth.basic]
    users = [
        "hakase:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi.",
    ]

[api]
entrypoint="dash"
dashboard = true

#Enable retry sending a request if the network error
[retry]

#Define Docker Backend Configuration
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "hakase-labs.io"
watch = true
exposedbydefault = false

#Letsencrypt Registration
#Define the Letsencrypt ACME HTTP challenge
[acme]
email = "[email protected]"
storage = "acme.json"
entryPoint = "https"
OnHostRule = true
  [acme.httpChallenge]
  entryPoint = "http"

Lưu và thoát.

Bây giờ chúng ta cần tạo một tệp mới cho cấu hình SSL Letsencrypt ‘acme.json’.  Nó được sử dụng để lưu trữ tất cả các bản ghi được Letsencrypt tạo ra.

Tạo tệp ‘acme.json’ trống và thay đổi quyền thành 600.

touch acme.json
chmod 600 acme.json

Tiếp theo, chúng ta sẽ chỉnh sửa tập lệnh ‘docker-compose.yml’ và thêm cấu hình dịch vụ traefik.

  • Chúng tôi sẽ sử dụng hình ảnh docker traefik mới nhất.
  • Vùng chứa sẽ được đặt tên là ‘traefik’
  • Nó sử dụng mạng tùy chỉnh ‘traefiknet’ và hiển thị các cổng HTTP và HTTPS.
  • Gắn tệp docker sock và cấu hình traefik ‘traefik.toml’ và ‘acme.json’
  • Chúng tôi đã xác định URL trang tổng quan traefik và phần phụ trợ thông qua nhãn docker.

Chỉnh sửa ‘docker-compose.yml’.

vim docker-compose.yml

Dán cấu hình dịch vụ traefik bên dưới.

 traefik:
    image: traefik:latest
    command: --docker
    ports:
      - 80:80
      - 443:443
    labels:
      - "traefik.enable=true"
      - "traefik.backend=dashboard"
      - "traefik.frontend.rule=Host:traef.hakase-labs.io"
      - "traefik.port=8080"
    networks:
      - traefiknet
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.toml:/traefik.toml
      - ./acme.json:/acme.json
    container_name: traefik
    restart: always

Lưu và thoát.

Tạo và cấu hình dịch vụ Ghost

Sau khi định cấu hình proxy ngược traefik, chúng ta sẽ tạo cấu hình dịch vụ ghost chính.

Chi tiết cấu hình mà chúng tôi muốn tạo.

  • Chúng tôi sẽ sử dụng ghost v1 và phiên bản docker Alpine nhỏ.
  • Chúng tôi sẽ gắn thư mục nội dung ghost vào thư mục cục bộ có tên ‘blog’.
  • Dịch vụ ghost sẽ chạy trên port mặc định với tên miền “gho.hakase-labs.io”, cấu hình thông qua nhãn docker.
  • Dịch vụ ghost sẽ sử dụng hai mạng docker, nội bộ và traefiknet.
  • Chúng tôi đang định cấu hình chi tiết cơ sở dữ liệu MySQL từ cấu hình vùng chứa mysql.
  • Và bản ghost sẽ được khởi động khi bộ chứa traefik và MySQL hoạt động.

Tạo một thư mục mới có tên ‘blog’ và chỉnh sửa tệp ‘docker-compose.yml’.

mkdir -p blog/
vim docker-compose.yml

Dán cấu hình bên dưới.

  ghost:
    image: ghost:1-alpine
    restart: always
    ports:
      - 2368
    volumes:
      - ./blog:/var/lib/ghost/content
    labels:
      - "traefik.enabled=true"
      - "traefik.backend=ghost"
      - "traefik.frontend.rule=Host:gho.hakase-labs.io"
      - "traefik.docker.network=traefiknet"
      - "traefik.port=2368"
    networks:
      - internal
      - traefiknet
    environment:
      database__client: mysql
      database__connection__host: mysql
      database__connection__user: ghost
      database__connection__password: ghostdbpass
      database__connection__database: ghostdb
    container_name: ghost
    depends_on:
      - mysql
      - traefik

networks:
  traefiknet:
    external: true
  internal:
    external: false

Lưu và thoát.

Và bây giờ chúng ta đã có đầy đủ thư mục và cấu hình như hình bên dưới.

tree

Bước 5 – Triển khai Ghost với MySQL và Traefik

Để xây dựng và chạy tất cả dịch vụ ghost stack, chúng ta có thể sử dụng lệnh bên dưới.

docker-compose up -d

Khi hoàn tất, hãy kiểm tra tất cả các dịch vụ đang chạy.

docker-compose ps

Và sau đây là kết quả.

Nếu bạn gặp lỗi, hãy kiểm tra nhật ký vùng chứa bằng các lệnh bên dưới.

docker-compose logs mysql
docker-compose logs traefik
docker-compose logs ghost

Ngăn xếp ma với MySQL và proxy ngược Traefik đã hoạt động.

Bước 6 – Kiểm tra

Mở bảng điều khiển Traefik bằng URL của nó, URL của tôi là  http://traef.hakase-labs.io/

Đăng nhập bằng người dùng và mật khẩu trên tệp ‘traefik.toml’.

Và sau đây là bảng điều khiển Traefik.

Để cài đặt Ghost, hãy nhập URL ghost trên thanh địa chỉ, của tôi là  http://gho.hakase-labs.io/

Và bạn sẽ có được trang chủ ma quái.

Bây giờ hãy truy cập trang quản trị để thiết lập và định cấu hình người dùng quản trị viên mới. URL của tôi là: http://gho.hakase-labs.io/admin/

Nhấp vào nút màu xanh lá cây để tạo người dùng quản trị mới.

Nhập chi tiết người dùng, mật khẩu, email và nhấp lại vào nút màu xanh lá cây.

Để mời thành viên hoặc người dùng mới, hãy nhấp vào liên kết ‘Tôi sẽ thực hiện việc này sau..’.

Bây giờ bạn sẽ nhận được Bảng điều khiển Ghost.

Và sau khi tạo bài viết mẫu sẽ có kết quả như sau.

Quá trình cài đặt blog ma với cơ sở dữ liệu MySQL và Traefik Reverse Proxy trên môi trường Docker đã hoàn tất thành công.

Tài liệu tham khảo

Đăng ký liền tay Nhận Ngay Bài Mới

Subscribe ngay

Cám ơn bạn đã đăng ký !

Lỗi đăng ký !

Add Comment

Click here to post a comment