Cách triển khai và quản lý DNS của bạn bằng OctoDNS trên Ubuntu 18.04
OctoDNS là một công cụ cơ sở hạ tầng dưới dạng mã cho phép bạn triển khai và quản lý các vùng DNS của bạn bằng cách sử dụng các nguyên tắc phát triển phần mềm tiêu chuẩn, bao gồm kiểm soát version , thử nghiệm và triển khai tự động. OctoDNS được tạo ra bởi GitHub và được viết bằng Python.Sử dụng OctoDNS loại bỏ nhiều cạm bẫy của việc quản lý DNS thủ công, vì các file vùng được lưu trữ ở định dạng có cấu trúc ( YAML ). Điều này cho phép bạn triển khai đồng thời các vùng cho nhiều nhà cung cấp DNS, xác định lỗi cú pháp và tự động đẩy cấu hình DNS của bạn, giảm nguy cơ do lỗi do con người gây ra. Một cách sử dụng phổ biến khác của OctoDNS là đồng bộ hóa cấu hình DNS của bạn giữa các nhà cung cấp khác nhau, chẳng hạn như hệ thống thử nghiệm và production hoặc giữa môi trường trực tiếp và chuyển đổi dự phòng.
OctoDNS tương tự như DNSControl, là một công cụ tương đương được tạo bởi Stack Exchange và được viết bằng Go. Không giống như OctoDNS, DNSControl sử dụng ngôn ngữ cấu hình dựa trên JavaScript để xác định vùng DNS, cho phép bạn sử dụng các tính năng lập trình nâng cao như vòng lặp để chỉ định nhiều bản ghi tương tự trong cùng một vùng. Bài viết Cách triển khai và quản lý DNS của bạn bằng DNSControl trên Ubuntu 18.04 trình bày về cài đặt và cấu hình cơ bản của DNSControl.
Trong hướng dẫn này, bạn sẽ cài đặt và cấu hình OctoDNS, tạo cấu hình DNS cơ bản và bắt đầu triển khai các bản ghi DNS cho một nhà cung cấp trực tiếp. Là một phần của hướng dẫn này, ta sẽ sử dụng DigitalOcean làm nhà cung cấp DNS mẫu. Nếu bạn muốn sử dụng một nhà cung cấp khác , cách cài đặt rất giống nhau. Khi hoàn tất, bạn có thể quản lý và kiểm tra cấu hình DNS của bạn trong một môi trường offline , an toàn, sau đó tự động triển khai nó vào version production .
Yêu cầu
Trước khi bắt đầu hướng dẫn này, bạn cần những thứ sau:
- Một server Ubuntu 18.04 được cài đặt bằng cách thực hiện theo Cài đặt server ban đầu với Ubuntu 18.04 , bao gồm một user không phải root có quyền sudo và firewall được bật để chặn các cổng không cần thiết.
your-server-ipv4-address
vàyour-server-ipv6-address
đề cập đến địa chỉ IP của server mà bạn đang lưu trữ trang web hoặc domain của bạn . - Tên domain được đăng ký đầy đủ với DNS được lưu trữ bởi nhà cung cấp được hỗ trợ . Hướng dẫn này sẽ sử dụng
your-domain
xuyên suốt và DigitalOcean làm nhà cung cấp dịch vụ. - Khóa API DigitalOcean (Mã truy cập cá nhân) với quyền đọc và ghi. Để tạo một mã, hãy truy cập Cách tạo mã truy cập cá nhân .
Khi đã sẵn sàng những thứ này, hãy đăng nhập vào server của bạn với quyền là user không phải root của bạn để bắt đầu.
Bước 1 - Cài đặt OctoDNS
OctoDNS được phân phối dưới dạng gói pip Python và chạy trong Môi trường ảo Python ( virtualenv
), vì vậy bạn sẽ bắt đầu bước này bằng cách cài đặt các gói cần thiết cho việc này. virtualenv
là một môi trường Python cô lập có thể có các thư viện và cấu hình riêng, tách biệt với cài đặt Python trên toàn hệ thống chính. Python và virtualenv
có sẵn trong repository mặc định của Ubuntu, giúp bạn có thể cài đặt bằng các công cụ quản lý gói thông thường.
Bắt đầu bằng cách cập nhật index gói local để phản ánh mọi thay đổi ngược dòng mới:
- sudo apt update
Sau đó, cài đặt gói python
và virtualenv
:
- sudo apt install python virtualenv
Sau khi xác nhận cài đặt, apt
sẽ download và cài đặt Python, virtualenv
và tất cả các phụ thuộc của chúng.
Tiếp theo, bạn sẽ tạo các folder cần thiết cho OctoDNS, nơi lưu trữ cấu hình DNS và chương trình của bạn. Bắt đầu bằng cách tạo các folder ~/octodns
và ~/octodns/config
:
- mkdir ~/octodns ~/octodns/config
Bây giờ chuyển sang ~/octodns
:
- cd ~/octodns
Tiếp theo, bạn cần tạo Môi trường ảo Python — một môi trường Python biệt lập với các thư viện và cấu hình riêng để chạy OctoDNS trong:
- virtualenv env
Kích hoạt môi trường của bạn bằng lệnh sau:
- source env/bin/activate
Điều này sẽ xuất ra một cái gì đó tương tự như sau:
OutputRunning virtualenv with interpreter /usr/bin/python2 New python executable in /home/user/octodns/env/bin/python2 Also creating executable in /home/user/octodns/env/bin/python Installing setuptools, pkg_resources, pip, wheel...done.
Dấu nhắc Bash shell của bạn bây giờ cũng sẽ có tiền tố là tên của môi trường ảo. Điều này cho thấy rằng bạn hiện đang hoạt động trong virtualenv
:
(env) user@digitalocean:~/octodns$
Nếu bạn muốn thoát virtualenv
, bạn có thể sử dụng lệnh deactivate
bất kỳ lúc nào. Tuy nhiên, bạn nên ở lại virtualenv
của bạn để tiếp tục với hướng dẫn này.
Đến đây bạn đã cài đặt và cấu hình Python và virtualenv
, bạn có thể cài đặt OctoDNS. OctoDNS được phân phối dưới dạng gói pip Python, là công cụ quản lý gói tiêu chuẩn cho các gói và thư viện Python.
Bạn có thể cài đặt gói pip OctoDNS bằng lệnh sau trong virtualenv
của bạn :
- pip install octodns
Sau khi hoàn tất, bạn có thể kiểm tra version đã cài đặt đảm bảo rằng mọi thứ đang hoạt động:
- octodns-sync --version
Đầu ra của bạn sẽ trông giống như sau:
OutputoctoDNS 0.9.6
Nếu bạn octodns-sync: command not found
lỗi octodns-sync: command not found
hãy kiểm tra kỹ xem bạn vẫn ở trong virtualenv
của bạn .
Đến đây bạn đã cài đặt OctoDNS, bạn có thể tạo các file cấu hình cần thiết để kết nối OctoDNS với nhà cung cấp DNS của bạn để cho phép nó áp dụng các thay đổi đối với bản ghi DNS của bạn.
Bước 2 - Cấu hình OctoDNS
Trong bước này, bạn sẽ tạo các file cấu hình cần thiết cho OctoDNS và kết nối nó với nhà cung cấp DNS của bạn để nó có thể bắt đầu áp dụng các thay đổi trực tiếp đối với bản ghi DNS của bạn.
Lưu ý: Hướng dẫn này sẽ tập trung vào cài đặt ban đầu của OctoDNS; tuy nhiên để sử dụng cho mục đích production , bạn nên lưu trữ cấu hình OctoDNS của bạn trong hệ thống kiểm soát version (VCS) như Git . Những ưu điểm của điều này bao gồm kiểm soát version đầy đủ, tích hợp với CI / CD để thử nghiệm, triển khai quay lại liên tục, v.v.
Trước tiên, bạn cần cấu hình file config.yaml
, file này xác định các vùng DNS cho OctoDNS quản lý và cho phép nó xác thực với nhà cung cấp DNS của bạn và áp dụng các thay đổi .
Định dạng của config.yaml
hơi khác một chút tùy thuộc vào nhà cung cấp DNS mà bạn đang sử dụng. Vui lòng xem danh sách Nhà cung cấp được Hỗ trợ trong tài liệu chính thức của OctoDNS để tìm cấu hình cho nhà cung cấp của bạn . Khi xem siêu liên kết này, chi tiết cấu hình được trình bày dưới dạng comment mã trong mã Python thực cho nhà cung cấp của bạn, được liên kết trong cột 'Nhà cung cấp' của bảng. Một khi bạn đã tìm thấy mã Python cho nhà cung cấp của bạn, chẳng hạn như cloudflare.py
hoặc route53.py
, những comment mã có liên quan có thể tìm thấy trực thuộc class
ProviderName Provider
. Ví dụ:
class Route53Provider(BaseProvider): ''' AWS Route53 Provider route53: class: octodns.provider.route53.Route53Provider # The AWS access key id access_key_id: # The AWS secret access key secret_access_key: # The AWS session token (optional) # Only needed if using temporary security credentials session_token:
Di chuyển vào folder ~/octodns/config
:
- cd ~/octodns/config
Sau đó, tạo và mở config.yaml
để chỉnh sửa:
- nano config.yaml
Thêm cấu hình config.yaml
mẫu cho nhà cung cấp DNS của bạn vào file . Nếu bạn đang sử dụng DigitalOcean làm nhà cung cấp DNS của bạn , bạn có thể sử dụng các cách sau:
--- providers: config: class: octodns.provider.yaml.YamlProvider directory: ./config default_ttl: 300 enforce_order: True digitalocean: class: octodns.provider.digitalocean.DigitalOceanProvider token: your-digitalocean-oauth-token zones: your-domain.: sources: - config targets: - digitalocean
Tệp này cho OctoDNS biết nhà cung cấp DNS nào bạn muốn nó kết nối và vùng DNS nào nó sẽ quản lý cho những nhà cung cấp đó.
Bạn cần cung cấp một số hình thức xác thực cho nhà cung cấp DNS của bạn . Đây thường là khóa API hoặc mã thông báo OAuth.
Nếu bạn không muốn lưu trữ mã thông báo truy cập của bạn ở dạng văn bản thuần túy trong file cấu hình, thay vào đó bạn có thể chuyển nó dưới dạng biến môi trường khi chương trình chạy. Để làm điều này, bạn nên sử dụng token:
sau token:
dòng thay thế trong config.yaml
:
token: env/DIGITALOCEAN\_OAUTH\_TOKEN
Sau đó, trước khi chạy OctoDNS, hãy đặt biến môi trường có liên quan thành mã thông báo truy cập của bạn và OctoDNS sẽ đọc nó từ đó khi chạy:
- export DIGITALOCEAN\_OAUTH\_TOKEN=your-digitalocean-oauth-token
Cảnh báo: Mã thông báo này sẽ cấp quyền truy cập vào account nhà cung cấp DNS của bạn, vì vậy bạn nên bảo vệ nó như password . Ngoài ra, hãy đảm bảo nếu bạn đang sử dụng hệ thống kiểm soát version , thì file chứa mã thông báo sẽ bị loại trừ (ví dụ: sử dụng .gitignore
) hoặc được mã hóa an toàn theo một cách nào đó.
Nếu bạn đang sử dụng DigitalOcean làm nhà cung cấp DNS của bạn , bạn có thể sử dụng mã thông báo OAuth bắt buộc trong cài đặt account DigitalOcean mà bạn đã tạo như một phần của yêu cầu .
Nếu bạn có nhiều nhà cung cấp DNS khác nhau — ví dụ: đối với nhiều domain hoặc vùng DNS được ủy quyền — bạn có thể xác định tất cả những nhà cung cấp này trong cùng một file config.yaml
.
Bạn đã cài đặt file cấu hình OctoDNS ban đầu để cho phép chương trình xác thực với nhà cung cấp DNS của bạn và áp dụng các thay đổi . Tiếp theo, bạn sẽ tạo cấu hình cho các vùng DNS của bạn .
Bước 3 - Tạo file cấu hình DNS
Trong bước này, bạn sẽ tạo một file cấu hình DNS ban đầu, file này sẽ chứa các bản ghi DNS cho domain hoặc vùng DNS được ủy quyền của bạn.
Mỗi vùng DNS mà bạn muốn quản lý bằng OctoDNS có file riêng của nó, ví dụ: your-domain .yaml
. Trong file này, các bản ghi DNS cho vùng được xác định bằng YAML .
Để bắt đầu, hãy chuyển vào folder ~/octodns/config
:
- cd ~/octodns/config
Sau đó, tạo và mở your-domain .yaml
để chỉnh sửa:
- nano your-domain.yaml
Thêm cấu hình mẫu sau vào file :
--- '': - type: A value: your-server-ipv4-address www: - type: A value: your-server-ipv4-address
Tệp mẫu này xác định vùng DNS cho your-domain
với hai bản ghi A
, trỏ đến địa chỉ IPv4 mà bạn đang lưu trữ domain hoặc trang web của bạn . Một bản ghi A
dành cho domain root (ví dụ domain your-domain
) và bản ghi còn lại dành cho domain phụ www
(ví dụ: www. your-domain
).
Sau khi hoàn tất, hãy lưu file .
Bạn đã cài đặt file cấu hình vùng DNS cơ bản cho OctoDNS, với hai bản ghi A
cơ bản trỏ đến địa chỉ IPv4 của domain hoặc trang web . Tiếp theo, bạn sẽ mở rộng file với một số bản ghi DNS hữu ích.
Bước 4 - Nhập file cấu hình DNS của bạn
Tiếp theo, bạn có thể điền vào file cấu hình DNS với một tập hợp các bản ghi DNS thực tế cho trang web hoặc dịch vụ của bạn , sử dụng ngôn ngữ cấu hình có cấu trúc YAML.
Không giống như các file vùng BIND truyền thống, nơi các bản ghi DNS được ghi ở định dạng thô, từng dòng, các bản ghi DNS trong OctoDNS được định nghĩa là các khóa và khóa con YAML với một số giá trị liên quan, như được trình bày ngắn gọn trong Bước 3.
Khóa cấp cao nhất thường là 'name'
, về cơ bản là định danh bản ghi. www
, subdomain1
và mail
là tất cả các ví dụ về 'name'
DNS. Trong tháng 10, có hai tên sử dụng đặc biệt là ''
cho bản ghi root (thường được gọi là @
) và '*'
cho bản ghi ký tự đại diện. Giá trị bắt buộc của mỗi khóa (bản ghi DNS) là type
. Điều này xác định loại bản ghi DNS bạn đang xác định trong khóa cấp cao nhất YAML đó. Một type
tồn tại cho mỗi loại bản ghi DNS tiêu chuẩn, bao gồm A
, AAAA
, MX
, TXT
, NS
, CNAME
, v.v. Danh sách đầy đủ các loại bản ghi có sẵn có trong phần Bản ghi của tài liệu OctoDNS.
Các giá trị cho bản ghi DNS của bạn được xác định trực tiếp dưới dạng giá trị cho khóa cấp cao nhất (nếu bạn chỉ có một giá trị) hoặc dưới dạng danh sách (nếu bạn có nhiều giá trị, ví dụ: nhiều địa chỉ IP hoặc địa chỉ MX).
Ví dụ: để xác định một giá trị duy nhất, bạn có thể sử dụng cấu hình sau:
'www': type: A value: 203.0.113.1
Ngoài ra, để xác định nhiều giá trị cho một bản ghi:
'www': type: A values: - 203.0.113.1 - 203.0.113.2
Cú pháp để cài đặt bản ghi DNS hơi khác nhau đối với từng loại bản ghi. Sau đây là một số ví dụ cho các loại bản ghi phổ biến nhất:
A
profile :
Mục đích: Để trỏ đến địa chỉ IPv4.
Cú pháp:
'name': type: A value: ipv4-address
Thí dụ:
'www': type: A value: your-server-ipv4-address
Hồ sơ AAAA
:
Mục đích: Để trỏ đến địa chỉ IPv6.
Cú pháp:
'name': type: AAAA value: ipv6-address
Thí dụ:
'www': type: AAAA value: your-server-ipv6-address
CNAME
:
Mục đích: Để đặt domain / domain phụ của bạn thành alias của domain khác.
Cú pháp:
'name': type: CNAME value: fully-qualified-domain-name
Thí dụ:
'www': type: CNAME value: www.example.org
Bản ghi MX
:
Mục đích: Để chuyển hướng email đến các server / địa chỉ cụ thể.
Cú pháp:
'name': type: MX value: exchange: mail-server preference: priority-value
Lưu ý một dấu vết .
phải được bao gồm nếu có bất kỳ dấu chấm nào trong giá trị MX.
Thí dụ:
'': type: MX value: exchange: mail.your-domain. preference: 10
Bản ghi TXT
:
Mục đích: Để thêm văn bản thuần túy tùy ý, thường được sử dụng cho các cấu hình không có loại bản ghi chuyên dụng của riêng chúng.
Cú pháp:
'name': type: TXT value: content
Thí dụ:
'': type: TXT value: This is a TXT record.
Để bắt đầu thêm bản ghi DNS cho domain của bạn hoặc vùng DNS được ủy quyền, hãy chỉnh sửa file cấu hình DNS của bạn:
- cd ~/octodns/config
- nano your-domain.yaml
Tiếp theo, bạn có thể bắt đầu điền vùng DNS của bạn bằng cú pháp được mô tả trong danh sách trước đó, cũng như phần Bản ghi của tài liệu chính thức về OctoDNS.
Để tham khảo, khối mã ở đây chứa cấu hình mẫu đầy đủ cho cài đặt DNS ban đầu:
--- '': - type: A value: your-server-ipv4-address - type: AAAA value: your-server-ipv6-address - type: MX value: exchange: mail.your-domain. preference: 10 - type: TXT value: v=spf1 -all _dmarc: type: TXT value: v=DMARC1\; p=reject\; rua=mailto:abuse@your-domain\; aspf=s\; adkim=s\; mail: - type: A value: your-server-ipv4-address - type: AAAA value: your-server-ipv6-address www: - type: A value: your-server-ipv4-address - type: AAAA value: your-server-ipv6-address
Khi bạn đã hoàn tất cấu hình DNS ban đầu, hãy lưu file .
Trong bước này, bạn cài đặt file cấu hình DNS ban đầu, chứa các bản ghi DNS của bạn. Tiếp theo, bạn sẽ kiểm tra cấu hình và triển khai nó.
Bước 5 - Kiểm tra và triển khai cấu hình DNS của bạn
Trong bước này, bạn sẽ chạy kiểm tra cú pháp local trên cấu hình DNS của bạn , sau đó áp dụng các thay đổi đối với server / nhà cung cấp DNS trực tiếp.
Đầu tiên, chuyển vào folder octodns
của bạn:
- cd ~/octodns
Kiểm tra kỹ xem bạn vẫn đang hoạt động trong Python virtualenv
của bạn bằng cách tìm tên của nó trước dấu nhắc Bash của bạn:
(env) user@digitalocean:~/octodns$
Tiếp theo, sử dụng lệnh octodns-validate
để kiểm tra cú pháp của (các) file cấu hình của bạn. Bạn cần chỉ định đường dẫn đến file cấu hình của bạn :
- octodns-validate --config=./config/config.yaml
Nếu cú pháp YAML của file cấu hình DNS của bạn chính xác, OctoDNS sẽ trả về mà không có kết quả .
Nếu bạn thấy lỗi hoặc cảnh báo trong kết quả của bạn , OctoDNS sẽ cung cấp chi tiết về lỗi và vị trí nằm trong file YAML của bạn.
Tiếp theo, bạn có thể thực hiện đẩy nhanh cấu hình DNS, cấu hình này sẽ xuất ra những thay đổi nào sẽ được thực hiện mà không thực sự thực hiện chúng:
- octodns-sync --config=./config/config.yaml
Điều này sẽ tạo ra một kết quả tương tự như sau:
Output******************************************************************************** * your-domain. ******************************************************************************** * digitalocean (DigitalOceanProvider) * Create <ARecord A 300, mail.your-domain., ['your-server-ipv4-address']> (config) * Create <AaaaRecord AAAA 300, mail.your-domain., ['your-server-ipv6-address']> (config) * Create <TxtRecord TXT 300, your-domain., ['v=spf1 -all']> (config) * Create <AaaaRecord AAAA 300, your-domain., ['your-server-ipv6-address']> (config) * Create <ARecord A 300, your-domain., ['your-server-ipv4-address']> (config) * Create <ARecord A 300, www.your-domain., ['your-server-ipv4-address']> (config) * Create <MxRecord MX 300, your-domain., [''10 mail.your-domain.'']> (config) * Create <TxtRecord TXT 300, _dmarc.your-domain., ['v=DMARC1\; p=reject\; rua=mailto:abuse@your-domain\; aspf=s\; adkim=s\;']> (config) * Create <AaaaRecord AAAA 300, www.your-domain., ['your-server-ipv6-address']> (config) * Summary: Creates=9, Updates=0, Deletes=0, Existing Records=2 ********************************************************************************
Cảnh báo: Lệnh tiếp theo sẽ áp dụng các thay đổi trực tiếp đối với bản ghi DNS của bạn và có thể là các cài đặt khác. Hãy đảm bảo bạn đã chuẩn bị cho việc này, bao gồm cả việc backup cấu hình DNS hiện tại của bạn, cũng như đảm bảo bạn có phương tiện để khôi phục nếu cần.
Cuối cùng, bạn có thể áp dụng các thay đổi đối với nhà cung cấp DNS trực tiếp của bạn :
- octodns-sync --config=./config/config.yaml --doit
Lưu ý: Trong một số trường hợp, OctoDNS sẽ từ chối áp dụng các thay đổi nếu nó đang thực hiện một số điều chỉnh đáng kể. Đây là một tính năng bảo vệ tự động để ngăn chặn các cấu hình sai ngẫu nhiên. Nếu gặp phải sự từ chối này, bạn có thể chạy lại octodns-sync
bằng cách sử dụng --force
chọn --force
, nhưng hãy đảm bảo bạn đã sẵn sàng làm như vậy.
Bạn sẽ thấy một kết quả giống như kết quả chạy khô trước đó trong bước này, nhưng với việc bổ sung một thứ tương tự như sau:
Output2019-07-07T23:17:27 INFO DigitalOceanProvider[digitalocean] apply: making changes 2019-07-07T23:17:30 INFO Manager sync: 9 total changes
Bây giờ, nếu bạn kiểm tra cài đặt DNS cho domain của bạn trong console DigitalOcean, bạn sẽ thấy các thay đổi.
Bạn cũng có thể kiểm tra việc tạo bản ghi bằng cách chạy truy vấn DNS cho domain / vùng được ủy quyền của bạn. Bạn sẽ thấy rằng các bản ghi đã được cập nhật tương ứng:
- dig +short your-domain
Bạn sẽ thấy kết quả hiển thị địa chỉ IP và bản ghi DNS liên quan từ vùng của bạn đã được triển khai bằng OctoDNS. Bản ghi DNS có thể mất một khoảng thời gian để phổ biến, vì vậy bạn có thể cần đợi và chạy lại lệnh này.
Trong bước cuối cùng này, bạn đã chạy kiểm tra cú pháp local của file cấu hình DNS, sau đó triển khai nó tới nhà cung cấp DNS trực tiếp của bạn và kiểm tra xem các thay đổi đã được thực hiện thành công chưa.
Kết luận
Trong bài viết này, bạn đã cài đặt OctoDNS và triển khai cấu hình DNS cho một nhà cung cấp trực tiếp. Như vậy, bạn có thể quản lý và kiểm tra các thay đổi cấu hình DNS của bạn trong một môi trường an toàn, offline trước khi triển khai chúng vào version production .
Nếu bạn muốn khám phá thêm chủ đề này, OctoDNS được thiết kế để tích hợp vào đường dẫn CI / CD của bạn, cho phép bạn chạy các thử nghiệm chuyên sâu và kiểm soát nhiều hơn việc triển khai đến production . Bạn cũng có thể xem xét việc tích hợp OctoDNS vào quy trình xây dựng / triển khai cơ sở hạ tầng của bạn , cho phép bạn triển khai các server và thêm chúng vào DNS hoàn toàn tự động.
Nếu bạn muốn tiến xa hơn với OctoDNS, các bài viết DigitalOcean sau cung cấp một số bước tiếp theo thú vị để giúp tích hợp OctoDNS vào quy trình quản lý thay đổi và triển khai cơ sở hạ tầng của bạn:
- Giới thiệu về Tích hợp, Phân phối và Triển khai Liên tục
- So sánh công cụ CI / CD: Jenkins, GitLab CI, Buildbot, Drone và Concourse
- Bắt đầu với Quản lý cấu hình
Các tin liên quan
Cách thiết lập hệ thống bàn trợ giúp với OTRS trên Ubuntu 18.042019-06-28
Cách triển khai và quản lý DNS của bạn bằng DNSControl trên Ubuntu 18.04
2019-06-26
Cách cấu hình Cụm Galera với MariaDB trên server Ubuntu 18.04
2019-06-20
Cách backup thư mục lớn với Unison trên Ubuntu 18.04
2019-05-21
Cách tạo một cụm Kubernetes bằng Kubeadm trên Ubuntu 18.04
2019-04-24
Cách tạo một cụm Kubernetes bằng Kubeadm trên Ubuntu 16.04
2019-04-24
Cách tạo một cụm Kubernetes bằng Kubeadm trên Ubuntu 18.04
2019-04-24
Cách tạo một cụm Kubernetes bằng Kubeadm trên Ubuntu 16.04
2019-04-24
Cách cài đặt và cấu hình Zabbix để giám sát an toàn server từ xa trên Ubuntu 18.04
2019-04-18
Cách cài đặt Anaconda trên Ubuntu 18.04 [Quickstart]
2019-04-18