Chuyển tới nội dung chính
Version: 4.1

Cài đặt lại một máy chủ đang có khách hàng

INSTALL.sh được viết cho một máy trống. Trước đây, chạy lại nó trên một máy chủ đã có tài khoản hosting là không an toàn: nó tạo lại mật khẩu root của MySQL, chép đè cấu hình mặc định lên cấu hình của người vận hành, rm -rf các thư mục mà máy chủ đang chạy đã ghi dữ liệu vào, và — vì thấy chính panel của nó đang giữ cổng 2083 — thường từ chối khởi chạy luôn.

Giờ đây có thể chạy nó an toàn trên một máy chủ quan trọng, và nó sẽ nói trước những gì nó sắp làm.

Ba cách chạy​

bash INSTALL.sh --dry-run # report what would change; change nothing
bash INSTALL.sh --adopt # update an existing installation in place
bash INSTALL.sh --reinstall # re-run every step, keeping the data

Chạy bash INSTALL.sh không kèm tuỳ chọn trên một máy đã có HiTechCloud giờ sẽ dừng lại với thông báo lỗi nêu tên ba tuỳ chọn trên, thay vì coi máy đó là máy trống.

Các cờ khác:

Tuỳ chọnTác dụng
--forceVượt qua các lần từ chối: bản checkout có thay đổi cục bộ, hạ phiên bản, mật khẩu root MySQL không còn xác thực được. Hãy đọc lý do bị từ chối trước.
--no-backupBỏ qua bản sao lưu trước khi chạy. Trên máy chủ có dữ liệu khách hàng, điều này không được khuyến khích và lần chạy sẽ cảnh báo như vậy.

Bắt đầu bằng lần chạy thử​

bash INSTALL.sh --dry-run

Lần chạy này không thay đổi gì cả — không gói, không dịch vụ, không tệp. Nó báo cáo phiên bản, số tài khoản, website và cơ sở dữ liệu tìm thấy, mọi tệp cấu hình mà lần chạy thật sẽ tạo hoặc ghi lại, và bản diff hợp nhất của từng tệp sẽ bị thay thế. Chính bản báo cáo đó khiến việc chạy trình cài đặt trên máy chủ thật trở nên hợp lý.

Bản sao lưu trước khi chạy​

Trước khi --adopt hoặc --reinstall ghi bất cứ thứ gì, nó chạy hitechcloudcli server adopt để sao chép ba thứ mà một lần cài đặt lại không thể tạo lại:

  • cơ sở dữ liệu của panel — tài khoản, tên miền, website và gói dịch vụ, dưới dạng bản dump SQL nén. Mọi thứ khác trên máy chủ đều được suy ra từ nó; còn nó thì không suy ra được từ đâu cả.
  • /etc/hitechcloud — thông tin đăng nhập, bản ghi của từng website trong native/sites, các chứng chỉ đã cấp, tệp vùng DNS, và tệp hitechcloud.config của người vận hành.
  • danh sách tài khoản — mọi tài khoản hosting cùng uid và gid. Một tài khoản được tạo lại với uid khác sẽ khiến mọi tệp trong thư mục home của nó không thuộc về ai, và đây là lỗi khó khắc phục nhất.

Bản sao lưu được lưu tại /var/backups/hitechcloud/preflight-<timestamp>/, đường dẫn được in ra, và /var/backups/hitechcloud/latest trỏ tới bản mới nhất. Đặt biến HITECHCLOUD_BACKUP_ROOT để lưu ở nơi khác.

Nội dung của khách hàng — /home, các cơ sở dữ liệu MySQL của khách hàng, hàng đợi thư — cố ý không được sao chép: chúng quá lớn cho một tệp nén trước khi chạy, và trình cài đặt không ghi vào bất kỳ phần nào trong số đó. Thay vào đó, chúng được đếm, trước và sau.

Không mất gì​

Bản sao lưu có một tệp manifest.env chứa số lượng tài khoản, website, tên miền, cơ sở dữ liệu, vùng DNS, chứng chỉ và thư mục home như trước lần chạy. Cuối cùng, trình cài đặt đếm lại và so sánh:

hitechcloudcli server adopt --compare /var/backups/hitechcloud/latest/manifest.env

Một con số tăng lên nghĩa là có người đang dùng máy chủ trong lúc bạn làm việc. Một con số giảm sẽ khiến lần chạy thất bại và nêu rõ cái gì bị mất, nên "không mất gì" là điều bạn kiểm tra được chứ không phải điều phải giả định.

Bạn có thể chạy riêng lệnh này bất cứ lúc nào:

hitechcloudcli server adopt --survey # report only
hitechcloudcli server adopt --backup # take a backup, print its path

Khôi phục​

Mọi thứ lần chạy đã thay thế đều nằm trong thư mục sao lưu, dưới replaced/ theo đường dẫn gốc. Để quay lại xa hơn:

cd /var/backups/hitechcloud/latest
gzip -dc panel.sql.gz | mysql # the panel database
tar -C / -xzf etc-hitechcloud.tar.gz # /etc/hitechcloud
systemctl restart hitechcloud hitechadmin

Những gì đã thay đổi, và vì sao​

Mỗi mục dưới đây từng là một bước giả định máy chủ còn trống.

BướcTrước đâyHiện nay
Kiểm tra cổngCổng 2083 và 2087 do chính panel giữ bị tính là xung đột, nên trình cài đặt từ chối chạy trên mọi máy chủ đang hoạt độngCổng do hitechcloud và hitechadmin giữ được coi là của chính mình
Cập nhật kho mãgit reset --hard xoá các thay đổi cục bộ trong /opt/hitechcloudDừng lại và nêu tên các tệp đã thay đổi, trừ khi có --force
Thông tin đăng nhậpThiếu credentials.env nghĩa là một mật khẩu root MySQL mới trên cơ sở dữ liệu đang chạyMật khẩu đang dùng được khôi phục từ các tệp tuỳ chọn; nếu không có mật khẩu nào hoạt động, lần chạy từ chối
Mật khẩu root MySQLALTER USER ... || true, rồi mật khẩu mới được ghi vào tệp client dù lệnh có thành công hay khôngChỉ đặt khi chưa có hiệu lực, và được chứng minh là xác thực được trước khi ghi bất cứ thứ gì phụ thuộc vào nó
/root/.my.cnf, mysql.cnfGhi lại ở mọi lần chạyChỉ ghi khi nội dung khác; root xác thực qua socket không còn bị thêm dòng mật khẩu làm hỏng nó
Bộ tính năng, cấu hình mặc địnhcp -a đè lên tệp của người vận hànhSao chép qua bước so sánh, giữ lại nội dung cũ
hitechcloud.configĐược giữ cẩn thận, rồi vài dòng sau lại bị bản đi kèm ghi đèLoại khỏi cả hai lần sao chép
services.jsonBản đi kèm thay thế bản được tạo từ các unit trên máy này, khiến mọi dòng Services trong trang quản trị trở lại "Inactive"Được loại trừ
hitechcloudclirm -rf xoá luôn tệp aliases.txt được sinh ra và các script ImunifyAVrsync --delete với cùng danh sách loại trừ mà quy trình triển khai dùng
panel.env, admin.envGhi lại toàn bộ, xoá mọi thứ người vận hành đã thêmHợp nhất: các khoá của chúng tôi được đặt, mọi thứ khác được giữ nguyên
Unit systemdGhi đè ở mọi lần chạyChỉ ghi khi khác, giữ lại bản cũ
Tệp chạy của panelBản "latest" trên mirror được cài đè lên bản đang chạy, kể cả khi đó là hạ phiên bảnĐược chuẩn bị riêng, kiểm tra, và bị từ chối nếu cũ hơn bản đang chạy
Khởi động lại dịch vụenable --now không làm gì với một dịch vụ đang chạy, nên tệp chạy mới không bao giờ được nạpKhởi động lại khi tệp chạy trên đĩa thực sự thay đổi
RedisKhởi động lại ở mọi lần chạy, làm mất mọi phiên đăng nhập panelChỉ khởi động lại khi cấu hình của nó thay đổi
Tài khoản quản trịThiếu sqlite3 khiến số đếm thành 0 và thêm một quản trị viên thứ haiTừ chối đoán khi không đọc được bảng
Tài khoản hostingChỉ kiểm tra /etc/passwdKiểm tra cả bảng users của panel, nên một tài khoản tạo dở sẽ được báo cáo thay vì bị tạo trùng
Hosting nhiều máy chủ webLỗi chỉ là cảnh báoGây dừng trên máy chủ có website — một website không dựng lại được cấu hình là một website đang ngừng hoạt động
Cấu hình webKhông có gì kiểm tra sau đóCả hai cấu hình nginx đều được kiểm tra; nếu một trong hai bị từ chối, bộ cấu hình trước được khôi phục từ bản chụp và lần chạy dừng lại

Những gì nó vẫn sẽ không làm​

  • Nó không chuyển đổi lược đồ cơ sở dữ liệu của panel. Nó nạp lược đồ khi chưa có, và để nguyên lược đồ đã có.
  • Nó không sao lưu /home hay các cơ sở dữ liệu riêng của khách hàng. Hãy dùng hitechcloudcli user-backup cho những thứ đó.
  • --force tắt mọi lần từ chối nêu ở trên. Mỗi lần từ chối đều có lý do; hãy đọc thông báo trước khi dùng nó.