Tinny Docker, deploy website PHP (Laravel, WordPress) chỉ với 1 Click

Hi các anh em chắc đã khá lâu rồi tui mới viết lại blog, xém nữa là quên mất cái password để đăng nhập, ahihi.

Không dài dòng như Hải Phòng, thì như tựa đề đã nêu, hôm nay chúng ta sẽ cùng nhau đi qua một tutorial nhỏ nhỏ “làm sao để deploy website PHP hay đặc biệt là WordPress chỉ với một cú click”.

Trước khi nhảy vô chi tiết của tutorial thì cách em làm ơn hãy git clone cái repo này về trước cái nào:
https://github.com/phamphihungbk/tinny-docker

Giải thích một tẹo về các thư mục của repo của tui như sau:

  • Config: nơi mà chúng ta sẽ khai báo các thông tin kết nối như DB, S3, bla…bla.
  • Deployment: nơi chứa Terraform script dùng để tương tác với Service Provider (ở đây mình dùng Digital Ocean).
  • Environment: nơi chứa Dockerfile để build docker instance.
  • Web: nơi chúng ta sẽ bỏ source code của web vào.

Một số commands có trong repo:

Vì repo dùng chung cho cả NodeJs và PHP website, nên nếu để chạy NodeJS thì các anh em cần phải ngâm cứu thêm trong repo nhé. Bài viết này mình chỉ liệt kê những thứ liên quan đến PHP thôi.

  • make build-php: build nginx, php-fpm, phpmyadmin và mysql image
  • make up-php: sau khi build xong image các anh em chạy command này để start container
  • make down: run trong trường hợp muốn stop container
  • make create-db: để tạo DB bằng SQL statement trong foler environment/mysql/docker-entrypoint-initdb.d
  • make terraform-validate: chạy để check terraform config có đúng chưa
  • make terraform-init: chạy để cài đặt những package cần thiết cho terraform
  • make terraform-plan: hiển thị thông tin về instance sẽ tạo trên digital ocean
  • make terraform-apply: sau khi run command này terraform bắt đầu sẽ connect với Digital Ocean qua API để tạo mới droplet
>>  Wordpress - Cài Đặt PHPUnit Cho Wordpress

Config một số thông tin cần thiết:

Trước khi dùng Terraform để tạo một droplet mới trên Digital Ocean, điều kiện cần và đủ là các anh em phải điền thông tin cần thiết cho Terraform script trong deployment/variables.tf

#Access Token get from Digital Ocean Account
variable "do_token" {
  type = string
  default = "điền thông tin API account của các anh em vào đây"
}

#Define name of ssh key on Digital Ocean account
variable "name_public_key" {
  type = string
  default = "điền tên public key trong tài khoản Digital Ocean nhớ là tên nhé"
}

#Private from your machine to have connection with created droplet
variable "private_key" {
  type = string
  default = "đường dẫn đến private key trong laptop"
}

Làm sao để cấu hình được thông tin droplet mà mình cần thì các anh em chỉ cần chỉnh phần Droplet Info trong file variables.tf luôn nhé

#Droplet info
variable "droplet" {
  type = object({
    name = string
    region = string
    size = string
    backups = bool
  })
  default = {
    name = "Tên droplet"
    region = "vị trí data center"
    size = "size của droplet ở mình sài size này s-2vcpu-2gb"
    backups = false (có backup thì chuyển thành true)
  }
}

#Define name of image will install for Droplet
variable "image_name" {
  type = string
  default = "tên của image dùng để cài cho droplet ở đây mình sử dụng  centos-7-x64" 
}

Về riêng phần image_name nếu các anh em muốn xem list các image sẵn có của Digital Ocean thì mình khuyên dùng curl lên api của nó để xem nhé

curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer your-api-token" "https://api.digitalocean.com/v2/images?page=1&per_page=20&type=distribution"

Thay your-api-token bằng token của các anh em rồi run trên terminal sẽ ra nhé.

Sau khi config đầy đủ thông tin cho Terraform thì các anh em chỉ cần run make terraform-init đợi một tí Terraform cài xong các package cần thiết rồi sau đó run make terraform-apply và ngồi xem thành quả nhé.

>>  Cài Đặt CWP Trên VPS Chạy Linux Centos 7.x

Và đừng quên bỏ source code WordPress vào trong folder web nhé. Mình đã config sẵn file wp-config.php load thông tin từ env rồi nên các anh em chỉ cần update thông tin trong file env.prod thôi là được rồi.

Một số thông tin phụ:

Làm sao để đổi tên database được? mình không thích dùng tinny-docker-db

Trong trường hợp các anh em không thích tên db ở trên hoặc muốn tạo nhiều db cùng lúc thì có thể đổi lại trong file SQL ở folder environment/mysql/docker-entrypoint-initdb.d này nhé. Sau khi đổi nhớ cập nhật trong file .env trong folder config nhé.

config db info new

Mình có thể dùng nó làm môi trường phát triển ở local được không ?

Trong folder config mình có chia ra hai file env.localenv.prod, trong trường hợp các anh em muốn code ở local thôi thì chỉ cần chỉnh thông tin connect trong file env.local.

Sau đó run make build-php để build docker image ở local, sau đó run make up-php để start container cho local và cùng đừng quên run make create-db để tạo db cho local nhé.

Làm sao để load website ở local được?

Điều đầu tiên các anh em cần thêm hai tên miền bên dưới trong local host

admin.tinny-docker.local và tinny-docker.local

Nó sẽ như vầy:

local host

  • admin.tinny-docker.local: dùng để truy cập phpmyadmin để quản lý DB
  • tinny-docker.local: dùng để truy cập website chính

Thì chung quy nó cũng chỉ có nhiêu đó thôi, nếu các anh em có thắc mắc nào khác thì cứ để lại bình luận bên dưới cho tui nhé. Tui sẽ giải đáp vào một ngày không xa.

Xin chào các đồng chí tôi là Phạm Phi Hùng, tác giả của blog Hung Pham Dev Web Tôi là một Front-end Developer, kiêm writer, quay phim dạo, sửa máy dạo và làm một số ngành nghề khác nữa

Site Footer