3.5.0
Bản phát hành di chuyển sang Rust. Hai panel và CLI giữ mọi URL, mẫu, đường dẫn cấu hình và đầu ra mà chúng có trong 3.4.0; điều thay đổi là ai trả lời. Hai tệp nhị phân mới, hitechcloud-rustpanel và hitechcloud-rustadmin, là bắt buộc từ phiên bản này, phần lớn hitechcloudcli giờ chạy trong hitechcloud-rustcli (149 tập lệnh bị gỡ), và bộ giám sát sức khoẻ sentinel là một chương trình Rust.
Mọi thứ trong bản phát hành này được chuyển từng tuyến hoặc từng lệnh một và so sánh với bản triển khai cũ trên một máy chủ thật - cùng các byte trên đường truyền, cùng các tệp trên đĩa - trước khi mã cũ được cho nghỉ. Các lỗi mà phép so sánh đó lộ ra được liệt kê dưới Fixed on the way.
Được dựng từ HiTechCloud-Panel #68–#114, hitechcloudcli #16–#52, hitechcloudadmin #6–#24 và sentinel #1.
Các panel đã chuyển như thế nào (#74, #86, #100–#102, admin #6, #12, #14, #19, #20)
- Mỗi panel Go khởi động bản song sinh Rust của nó và giám sát nó (khởi động lại với khoảng nghỉ tăng dần khi nó thoát, dừng cùng panel). Bản song sinh lắng nghe trên một socket unix chỉ root truy cập được -
/run/hitechcloud/rustpanel.sockcho panel người dùng,/run/hitechcloud/rustadmin.sockcho admin - và in ra các tuyến nó trả lời (hitechcloud-rustpanel routes,hitechcloud-rustadmin routes). - Máy chủ Go vẫn là cửa trước: TLS, phiên, token CSRF, giấy phép, các cổng tính năng và, trên admin, các kiểm tra vai trò đều chạy trong Go. Chỉ sau khi
RequireLogin/RequireAPI/RequireAdmin(và, với API JWT của admin, lớp bọc API trong cùng) đã cho một yêu cầu đi qua thì nó mới được proxy tới bản song sinh cùng danh tính của người gọi trong các tiêu đềX-HiTech-*; các bản sao của chính máy khách về các tiêu đề đó bị bỏ. Mọi tuyến admin mà bản song sinh liệt kê đều khai báo cổng nó cần (session,session-admin,api-token,api-owner-or-admin:<param>,api-admin,api-superadmin,+enterprise), Go kiểm tra lại cổng đó trước khi chuyển tiếp, và một bài kiểm thử trong kho admin thất bại với bất kỳ tuyến nào khai báo cổng yếu hơn lớp bọc Go mà nó nhận bàn giao. - Các trang HTML được bản song sinh kết xuất từ cùng các mẫu mà panel Go nhúng (
internal/web/templates,internal/webtemplates): bản song sinh mang một bộ máy tương thíchtext/templatecủa Go với thoát ngữ cảnh củahtml/template, các danh mục.pogotext, và nhận ngôn ngữ, token CSRF và các thông báo flash đang chờ từ Go cho các tuyến trang. Một bài kiểm thử Go kết xuất mỗi trang đã chuyển qua cả hai bộ máy từ cùng một fixture và đòi hỏi cùng các byte; điều đó cũng đúng với mọi phản hồi JSON (thứ tự trường struct, số thực nguyên,nullcho slice nil, thoát<). - Các POST form tới bản song sinh cùng phần thân của chúng (Go đệm tới 8 MiB sau kiểm tra CSRF và phát lại nó; các thân lớn hơn và các tải multipart
/api/được truyền thẳng), các thông báo flash đi cả hai chiều dưới dạng JSON base64 để văn bản không phải ASCII sống sót, một tuyến của bản song sinh kết thúc bằng/chỉ khớp đường dẫn đó chứ không phải cây con của nó, và một trình xử lý của bản song sinh có thể trả một yêu cầu về Go (X-Hitech-Pass). Các nâng cấp WebSocket, luồng chunked và tải multipart được proxy không đổi (đã chứng minh trên terminal web, nhật ký dịch vụ và tải tệp lên). - Không gì phụ thuộc vào bản song sinh lúc chạy: với
RUSTPANEL=offhoặcRUSTADMIN=offtrong tệp môi trường của panel (/etc/hitechcloud/hitechcloud/conf/panel.env,/etc/hitechcloud/hitechadmin/config/admin.env), hoặc khi một bản song sinh đang ngừng, mọi tuyến đều do Go phục vụ đúng như trong 3.4.0. Một bản song sinh thất bại trước khi ghi được một byte sẽ được trình xử lý Go trả lời cho yêu cầu đó. Các tuyến có nửa Rust chỉ bao phủ native stack không được đưa ra trên một máy chủ stack Docker.
Panel người dùng - hitechcloud-rustpanel, 271 tuyến
- API JSON và chỉ đọc (#75 –#78, #80, #82, #84):
/json/system/hosting/*,/json/services,/json/mysql-size,/json/directory-size, và các tuyến đọc của/api/*- tài khoản, hosting, thông tin máy chủ, tên miền, DNS, email, FTP và các kết nối FTP, cron job, thống kê, giới hạn gửi, inode, mức dùng đĩa, sao lưu, công cụ website, DNSSEC và kiểm tra sức khoẻ, widget bảng điều khiển, trình cài tự động, chuyển tiếp cổng, chặn IP, DNS động, sửa quyền, plugin. - Trang (#86, #88, #89, #91, #93–#95, #98, #104): thông tin máy chủ, mức sử dụng và lịch sử sử dụng, chặn IP, sửa quyền, công cụ website, hotlink, các trình khám phá inode và mức dùng đĩa, FTP và các trang con của nó, cron job, khoá SSH, hộp thư kèm mới/bí danh/xoá/catch-all/kết nối thiết bị, tài khoản, tên miền, danh sách vùng DNS, thùng rác, sao lưu, PHP mặc định, PHP theo từng tên miền, thông tin PHP và bộ chọn phần mở rộng, website, multiweb, triển khai git, DNS động, giám sát, bảng điều khiển, dịch vụ, mọi trang GET của MySQL, bộ công cụ WordPress, các trình cài runtime (Node.js, Python, Ruby, Java, PHP), VPN, trình quản lý tiến trình và chẩn đoán mạng.
- Ghi (#100, #105, #109, #111, #112): các POST của khoá SSH, tài khoản FTP, chặn IP và hotlink; tên miền (mới, xoá, tạm ngưng, bỏ tạm ngưng, docroot, chuyển hướng), bản ghi và vùng DNS, công cụ website (bảo vệ, trang lỗi, kiểu MIME, HTTP/3); mô-đun MySQL (xoá cơ sở dữ liệu, người dùng, mật khẩu, gán, gỡ, tối ưu/sửa chữa, trình hướng dẫn, truy cập từ xa và danh sách truy cập của nó); capitalize, vhost, tách/gỡ/xoá website, DNS động, sửa quyền, lưu/sửa/xoá cron job, PHP mặc định, dấu bảng điều khiển; và các tuyến ghi JWT
POST/DELETE /api/account/favorites,PUT /api/account/language,DELETE /api/account/sessions/{token},/api/ftptạo/xoá/vá,/api/ssh-keys,/api/cronsgồmraw,/api/ip-blocker,/api/fix-permissions,/api/dynamic-dns. - Luồng (#101): nhật ký dịch vụ (widget trang và API dưới dạng NDJSON) và terminal web qua WebSocket.
- Trình quản lý tệp (#106): các trang, mọi thao tác đọc và mọi thao tác ghi - tải lên multipart truyền thẳng, tải xuống, sửa, đổi tên, sao chép, di chuyển, xoá, quyền, nén và giải nén, wget - trong phiên và trong API.
- Ứng dụng (#108, #110): các trang cài đặt, ngày sao lưu, nhật ký và bảo trì của Joomla, Drupal, PrestaShop, OpenCart, Nextcloud, Moodle, MediaWiki, DokuWiki, Flarum, phpBB, Matomo, OJS, SofaWiki và TinyPhotoGallery từ một bảng dùng chung; trung tâm trình cài tự động; danh sách bộ công cụ Joomla; thống kê GoAccess; JSON traceroute; API PHP X-Ray qua một máy khách FastCGI với bộ phân tích slow-log;
/plugins; trang ImunifyAV; chat trực tiếp (cả chín tuyến); trang trình hướng dẫn sao lưu, trạng thái và tạo; trình quét mã độc gồm cả lần quét truyền thẳng của nó; trang và API cấu hình máy chủ web native.
Panel admin - hitechcloud-rustadmin, 180 tuyến
- JSON và REST API (admin #6–#13, #18): ảnh chụp hệ thống và tài nguyên, hoạt động người dùng và hoạt động kết hợp, nhóm IP và IP khả dụng, nhật ký hoạt động và đăng nhập của người dùng, phiên bản PHP mặc định, tệp sao lưu, chuyển giao, trạng thái/peer/IP của ứng dụng, engine web, trạng thái di chuyển, livechat, trạng thái xuất người dùng, đầu dò sống còn; API JWT với các cổng được khai báo - whoami, người dùng, gói, tên miền, ip, mức sử dụng, chi tiết gói và tài khoản, cron/tiến trình/swap/múi giờ/nút của máy chủ, thông tin giấy phép, báo cáo hỗ trợ, số liệu, SSH, di chuyển, bộ tính năng, quản trị viên, hộp thư và hàng đợi, điều khiển dịch vụ, cài đặt, công tắc bảo mật, thông báo, mức dùng đĩa, mẫu vùng và tệp, sao lưu, trạng thái Packages & Apps, các peer WireGuard, livechat, trạng thái xuất.
- Trang (admin #14–#16, #22, #24): mức sử dụng tài nguyên, gói, thông báo, cài đặt (danh sách chung, ngôn ngữ, mirror, Caddy và số liệu của nó, các phiên bản PHP, cập nhật, mô-đun), bảo mật (gồm mã độc), máy chủ (cron, swap, múi giờ, tiến trình, địa chỉ IP, reboot, di chuyển, SSH và cấu hình SSH, nút, cơ sở dữ liệu, lịch sử tài nguyên, ứng dụng, strace/kill tiến trình), sao lưu, giấy phép, mẫu, bảng điều khiển, người dùng, tên miền, Packages & Apps, quản trị viên, email (relay, giới hạn gửi, hàng đợi và xem thư), đại lý.
- Ghi (admin #17, #19, #20, #22, #24): ghi API cho gói, tài khoản và thông báo; các form phiên cho thông báo, múi giờ, bộ nhớ, mẫu vùng, mã tuỳ chỉnh, PHP, blacklist, basic auth, cron, gói, tài khoản, phát sóng, sửa gói, tên miền, nhóm IP; relay email/giới hạn gửi/hành động hàng đợi và hành động hàng loạt; cài đặt ngôn ngữ/mirror/Caddy/các phiên bản PHP/tuỳ chọn cập nhật; quét mã độc; hành động/cấu hình/khoá/cài đặt SSH; nút; kill cơ sở dữ liệu/giới hạn/đăng nhập một lần phpMyAdmin; đổi kích thước/bỏ swap; hành động tiến trình. Các tuyến cần giấy phép Enterprise chỉ bàn giao sau
RequireEnterprise(session-admin+enterprise).
CLI - hitechcloud-rustcli, 171 lệnh
Mỗi lệnh giống hệt từng byte so với tập lệnh nó thay thế trên native stack (stdout, stderr, mã thoát, các tệp, unit và bảng kết quả); hitechcloud-rustcli ported liệt kê cái gì chạy ở đâu, và hitechcloudcli/rustcli/MIGRATION.md có một hàng cho mỗi lệnh với những gì đã được xác minh.
- Các tập lệnh bị gỡ (#16–#21, #23–#26, #29–#39, #42, #45, #46, #49, #51):
config,user-login,port,version,api,license,locale,phpmyadmin,backup,admin,domain,docker,imunify,proxy,repair,report,dev,faq,patch,waf,enterprise,dns-cluster;ftp-*(list, users, connections, logs, delete, password, path, add);plan-*(list, create, edit, delete, usage, emailpro, apply),ip-pool,db-limits;user-*(list, loginlog, quota, suspend, unsuspend, rename, block_ip, delete, limit, change_plan, password, email, 2fa, varnish, ip, snapshot, backup, restore, backupset, check, transfer);domains-*(user, whoowns, all, suspend, unsuspend, docroot, varnish, ssl, dns, add, delete, edit, hsts, stats, update_ns, dnssec);email-*(quotas, sendlimit, webmail, setup, manage, server, ratelimit);websites-*(all, user, vulnerability, secure, pagespeed, wp_autodownload, scan);php-domain,php-default;gitdeploy-*(list, key, setup, deploy, poll, remove);toolkit-*(harden, wp, joomla, laravel, nodejs, ruby, inventory);files-*(fix_permissions, purge_trash, calculate_resellers_storage);cache-forget_features;server-repair,server-logrotate,server-migrate;compliance-retention,compliance-run;docker-*(autostart, backup, collect_stats, images, logs, limits);mssql-db,mssql-remote; và các lệnh native stacknative-http3,-redirect,-hotlink,-errorpages,-mimetypes,-protect,-event,-litespeed,-mailusage,-memcached,-resolver,-mailforward,-movedomain,-varnish(status/enable/disable/restart/show/site/rebuild/sync gia nhập purge/warm),-healthcheck,-usage,-sslstore,-firewall,-meet. - Các lệnh native stack mà tập lệnh bàn giao (#41, #43, #46, #48–#51):
native-vhostvànative-engine(bộ kết xuất website cho nginx, Apache và OpenLiteSpeed, gồm các nhánh TLS, force-HTTPS, HSTS và tạm ngưng),native-ssl(chứng chỉ trên native stack: tự ký, Let's Encrypt qua acme.sh, triển khai, gỡ, autossl),native-dns(add, delete, list, show, check, reload, tidy, authoritative, set-address, publish-dkim, publish-ds; tlsa/bimi/spf-*/consolidate/backfill tạm ở lại trong shell),native-mail(install, sync, branding, check, status, domains, dkim, arc, identity, tls, hostname, test, webmail-master),native-service,native-restricted-shell,native-cache,native-search. Tập lệnh mỏng vẫn còn vì các tập lệnh khác, unit systemd hoặc acme.sh gọi nó theo đường dẫn; nó exec tệp nhị phân, vàHITECHCLOUD_NATIVE_SHELL=1ép thân shell để so sánh. - Vẫn là shell: ba mươi thân
native/*(dnssec, docker, install, mailautoconfig, mailpolicy, mailrelay, webmail, migrate, mongodb, mssql, mysql84, postgres, pgadmin, phpmyadmin, multiweb, php, user, …) cùnguser/add.sh,db.sh,sentinel.shvàupdate.sh. hitechcloudcli updatelấy các bản song sinh Rust của panel khi một bản phát hành công bố chúng và giữ các tệp nhị phân panel trước đó dưới dạng<binary>.prev(#27, #40);MIGRATION.mdghi tài liệu các tuyến của bản song sinh panel và các quy tắc trung thực (#28).
Sentinel
- Bộ giám sát sức khoẻ (
integrations/sentinel) là một chương trình Rust (sentinel #1); quy trình phát hành build nó bằng cargo (#97).
Fixed on the way
Việc chuyển so sánh mọi lệnh và tuyến với bản triển khai cũ trên một máy chủ thật, điều đã lộ ra các lỗi được sửa ở cả hai phía:
domains-dns,/api/domains(has_dns_zone), danh sách tên miền và DNS động đọc/etc/bind/zonescủa container stack trên các máy chủ native, nên không vùng nào từng được tìm thấy ở đó (#26, #82).- API FTP trả lời 503 trên mọi máy chủ native - nó hỏi podman về một container thay vì hỏi systemd về
pure-ftpd(#76). /api/emailsvà API bí danh phân tích sai* login ( used / limit )(quota_limit: "(");email-setupchưa bao giờ làm mớiemails.ymlcủa tài khoản (một biến có phạm vi bên trong một hàm) và thoát 0 sau một lỗi (#82, cli #29).- Trang Remote access của MySQL hiển thị một cổng trống (
@@portkhông dấu); JSON của IP-blocker mã hoá không có địa chỉ thành[]trong khi slice nil của Go lànull. user-limit --showluôn báo inactive (SIGPIPE dướipipefail);files-fix_permissions --allbị crash trongjq;backup --destinationkhông có giá trị lặp mãi;domains-update_nsghi các bản ghi NS phía trên$TTL(một vùng mànamedtừ chối);toolkit-laravelgọi một hàm không xác định;reportcủa admin chạy các bộ thu thập mà không có thư viện stack và báo các mục command not found (cli #32–#39).- phpMyAdmin trả lời 502 trên một máy chủ có PHP-FPM theo từng tài khoản (master của bản phân phối mất các pool hệ thống của nó);
native-fpm repairchỉ lại nó và include được giữ từ nay (cli #22). native-user deletechưa bao giờ gỡ các đăng nhập FTP của tài khoản khỏiusers.list(cli #18) vàuser-deleteđể lại quy tắc sudoers jail của tài khoản (cli #46).native-dns addchưa bao giờ ghi bản ghi TXT xác minh website mà trang khả năng gửi thư kiểm tra - nó gọi một hàm không xác định, và bash chỉ in command not found (cli #50).- Một website mới bỏ qua phiên bản PHP Selector của chủ sở hữu và lấy mặc định của máy chủ (cli #52).
- Các lần gia hạn
native-ssltừ cron của acme.sh có thể bỏ qua việc kết xuất lại vhost: các tập lệnh lại gọivhost.shtheo đường dẫn, vìPATHcủa cron không có bộ điều phối (cli #47). plan-create/plan-edittừ chối dạng đã lưu1 GBcủadisk_limit, vàPATCH /api/plans/{id}không có tên làm trống tên của gói (cli #44, admin #21).?output=jsoncủa trangsettings/modulesmã hoá không có plugin thành[]trong khi slice nil của Go lànull(admin #23); trạng tháidb-limitsđược phân tích thànhactive) ===(admin #24);formatInodescủa admin kết xuất0cho các hàng gói thật (admin #22).- Các thông báo flash có văn bản không phải ASCII (các dòng
✖của CLI, văn bản tiếng Việt) bị bỏ lặng lẽ khi bàn giao; giờ chúng đi dưới dạng JSON base64 (#100, admin #24). - Tăng cường WordPress trên nginx ghi các quy tắc mà engine không nạp được (cli #23, #24).
Ghi chú cho người vận hành
hitechcloudcli updatecài cả hai bản song sinh cùng các tệp nhị phân panel và giữ các tệp nhị phân panel trước đó dưới dạng<binary>.prev;version/3.5.0/UPDATE.shđồng bộ lại cây CLI (gỡ các tập lệnh đã nghỉ), lấy một bản song sinh bị thiếu hoặc cũ, kiểm tra từng bản trả lờiroutes, khởi đ ộng lại cả hai panel, thăm dò:2083/healthzvà:2087/login, và đặt lại các tệp nhị phân trước đó nếu một panel không lên.- Các bản song sinh là các tệp nhị phân musl tĩnh và chạy trên các máy chủ glibc 2.28 (AlmaLinux 8) cũng như các bản phân phối hiện tại.
- Nhật ký: các bản song sinh ghi vào các tệp nhật ký riêng của panel (
/var/log/hitechcloud/user/panel.log,/var/log/hitechcloud/admin/admin.log), một dòng cho mỗi lần khởi động (RUSTPANEL - … serving N routes on …). INSTALL.shtừ chối hoàn tất nếu thiếu cả hai bản song sinh; các unit panel kiểm tra tệp nhị phân của bản song sinh có tồn tại trước khi khởi động trừ khi bản song sinh được tắt.- Bộ kiểm thử đầu-cuối (
test-native-stack.sh) cho mỗi sandbox một bộ điều phốihitechcloudcliđể các tập lệnh gọi nhau qua nó chạy được trong CI (#107). - Không có gì để di chuyển trong cơ sở dữ liệu, các tệp cấu hình hay các mẫu.