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ọn | Tác dụng |
|---|---|
--force | Vượ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-backup | Bỏ 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 trongnative/sites, các ch ứng chỉ đã cấp, tệp vùng DNS, và tệphitechcloud.configcủ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ước | Trước đây | Hiện nay |
|---|---|---|
| Kiểm tra cổng | Cổ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 động | Cổ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/hitechcloud | Dừng lại và nêu tên các tệp đã thay đổi, trừ khi có --force |
| Thông tin đăng nhập | Thiế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ạy | Mậ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 MySQL | ALTER 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ông | Chỉ đặ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.cnf | Ghi lại ở mọi lần chạy | Chỉ 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 định | cp -a đè lên tệp của người vận hành | Sao 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.json | Bả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ừ |
hitechcloudcli | rm -rf xoá luôn tệp aliases.txt được sinh ra và các script ImunifyAV | rsync --delete với cùng danh sách loại trừ mà quy trình triển khai dùng |
panel.env, admin.env | Ghi lại toàn bộ, xoá mọi thứ người vận hành đã thêm | Hợp nhất: các khoá của chúng tôi được đặt, mọi thứ khác được giữ nguyên |
| Unit systemd | Ghi đè ở mọi lần chạy | Chỉ ghi khi khác, giữ lại bản cũ |
| Tệp chạy của panel | Bả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ạp | Khởi động lại khi tệp chạy trên đĩa thực sự thay đổi |
| Redis | Khởi động lại ở mọi lần chạy, làm mất mọi phiên đăng nhập panel | Chỉ 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ứ hai | Từ chối đoán khi không đọc được bảng |
| Tài khoản hosting | Chỉ kiểm tra /etc/passwd | Kiể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ủ web | Lỗi chỉ là cảnh báo | Gâ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 web | Khô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
/homehay các cơ sở dữ liệu riêng của khách hàng. Hãy dùnghitechcloudcli user-backupcho những thứ đó. --forcetắ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ó.