paint-brush
Gắn bó với người đàn ông và tự lưu trữ máy chủ web của riêng bạntừ tác giả@theselfhoster
1,571 lượt đọc
1,571 lượt đọc

Gắn bó với người đàn ông và tự lưu trữ máy chủ web của riêng bạn

từ tác giả George Papadakis13m2023/02/20
Read on Terminal Reader

dài quá đọc không nổi

Email tự lưu trữ cho các công ty vừa và nhỏ, chủ doanh nghiệp, tổ chức phi lợi nhuận và cá nhân. Không có giới hạn thực sự đối với những người có thể tự lưu trữ, nhưng các nhóm có ý thức về quyền riêng tư sẽ được hưởng lợi trực tiếp và thấy kết quả ngay lập tức. Các công ty vừa và nhỏ sẽ có được một hệ thống hoạt động đầy đủ, tuân thủ tất cả các giao thức mã hóa và bảo mật hiện tại, đặc biệt là thông số kỹ thuật PCI.
featured image - Gắn bó với người đàn ông và tự lưu trữ máy chủ web của riêng bạn
George Papadakis HackerNoon profile picture
0-item
1-item

hướng dẫn này dành cho ai?

Nội dung web tự lưu trữ phù hợp với các công ty vừa và nhỏ, chủ doanh nghiệp, tổ chức phi lợi nhuận và cá nhân.


Không có giới hạn thực sự đối với những người có thể tự lưu trữ, nhưng các nhóm có ý thức về quyền riêng tư sẽ được hưởng lợi trực tiếp và thấy kết quả ngay lập tức. Các công ty vừa và nhỏ sẽ có được một hệ thống hoạt động đầy đủ, tuân thủ tất cả các giao thức mã hóa và bảo mật hiện tại, đặc biệt là thông số kỹ thuật PCI.

Tại sao tự lưu trữ?

Có rất nhiều lý do tại sao tự lưu trữ có lợi, đây là một số lý do:


  • Sự riêng tư
  • Bảo mật nâng cao
  • tùy biến
  • Giá rẻ

lưu trữ email

Bài viết này nói về lưu trữ máy chủ web, nếu bạn quan tâm đến lưu trữ email, vui lòng đọc bài viết về Tự lưu trữ máy chủ email của riêng bạn .

điều kiện tiên quyết

  • Một máy chủ mới, chuyên dụng hoặc ảo, có truy cập internet
  • Bản phân phối Linux dựa trên RHEL: Máy chủ Alma, Rocky, Oracle hoặc Fedora
  • truy cập gốc

tên máy chủ

Vui lòng đảm bảo máy chủ của bạn có tên miền đủ điều kiện (FQDN) và tệp /etc/hosts có IP của máy chủ trỏ tới FQDN chứ không phải tên viết tắt. Đây là yêu cầu đối với một số công cụ như OpenDKIM, công cụ này sẽ không hoạt động nếu không có FQDN.


Để kiểm tra xem FQDN của bạn đã được thiết lập đúng chưa, hãy chạy:


 # hostname -f server.example.tld


Nếu bạn chỉ thấy tên máy chủ chứ không phải FQDN thì hãy sử dụng lệnh systemd hostnamectl để đặt FQDN của bạn:

 # hostnamectl set-hostname server.example.tld

Bước 1 - Các gói cần thiết

Bước đầu tiên là cài đặt một số gói cơ bản, sử dụng trình quản lý gói của bạn:


dnf cho các phiên bản EL8/EL9 mới hơn:

 # dnf install php php-cli php-pdo php-mbstring epel-release unzip wget


hay cho EL7:

 # yum install php php-cli php-pdo php-mbstring epel-release unzip wget


đối với Fedora, các gói hơi khác một chút:

 # dnf install php php-cli php-pdo php-mbstring unzip wget

Bước 2 - Cài đặt Aetolos

Trong bước thứ hai, chúng tôi sẽ cài đặt bảng điều khiển lưu trữ ảo Aetolos, bảng này chỉ tạo các tệp cấu hình và không thực hiện bất kỳ sửa đổi nào khác đối với hệ thống:


 # wget -O /root/master.zip 'https://gitlab.com/noumenia/aetolos/-/archive/master/aetolos-master.zip' # unzip /root/master.zip -d /root/ # mv /root/aetolos-master /root/aetolos # rm -rf /root/master.zip

Mã phát triển mới nhất có thể được tải xuống từ kho git:

bản sao git 'https://gitlab.com/noumenia/aetolos.git'

Bước 3 - Kích hoạt dịch vụ

Bây giờ là lúc chọn những dịch vụ mà máy chủ sẽ cung cấp. Chạy Aetolos với tham số trạng thái để có ý tưởng về tất cả các dịch vụ có sẵn:

 # ~/aetolos/aetolos --status +---------+--------------+---------+------------+--------------+ | Enabled | Module | SystemD | Repository | Dependencies | +---------+--------------+---------+------------+--------------+ | [ ] | apache | | | | | [ ] | clamav | | epel | postfix | | [ ] | dehydrated | | | | | [ ] | dovecot | | | | | [ ] | haproxy | | | | | [ ] | mariadb | | | | | [ ] | mtasts | | | apache | | [ ] | nsd | | epel | | | [ ] | opendkim | | epel | postfix | | [ ] | opendmarc | | epel | postfix | | [✓] | php | | | | | [ ] | postfix | | | | | [ ] | postgrey | | epel | postfix | | [ ] | spamassassin | | | postfix | | [✓] | virtualhost | | | | +---------+--------------+---------+------------+--------------+

Vì đây sẽ là một máy chủ web tự lưu trữ, chúng tôi sẽ kích hoạt các dịch vụ cung cấp cho chúng tôi bộ tính năng hoàn chỉnh để lưu trữ web:


  • Apache, một máy chủ web để đáp ứng các yêu cầu ACME
  • Mất nước, một tập lệnh bash cho chứng chỉ Let's Encrypt
  • MariaDB, cơ sở dữ liệu


Nếu bạn có một máy chủ riêng dành cho email có chữ ký DKIM, thì bạn cũng nên bật OpenDKIM trong máy chủ này. Sau đó chia sẻ khóa giữa các máy chủ để ký hợp lệ.


Hãy kích hoạt các dịch vụ này với Aetolos:

 # ~/aetolos/aetolos --enable=apache # ~/aetolos/aetolos --enable=dehydrated # ~/aetolos/aetolos --enable=mariadb


Bây giờ chúng ta có thể chạy lại Aetolos với status tham số để xem bảng sau:

 +---------+--------------+---------+------------+--------------+ | Enabled | Module | SystemD | Repository | Dependencies | +---------+--------------+---------+------------+--------------+ | [✓] | apache | dead | | | | [ ] | clamav | | epel | postfix | | [✓] | dehydrated | | | | | [ ] | dovecot | | | | | [ ] | haproxy | | | | | [✓] | mariadb | dead | | | | [ ] | mtasts | | | apache | | [ ] | nsd | | epel | | | [ ] | opendkim | | epel | postfix | | [ ] | opendmarc | | epel | postfix | | [✓] | php | dead | | | | [ ] | postfix | | | | | [ ] | postgrey | | epel | postfix | | [ ] | spamassassin | | | postfix | | [✓] | virtualhost | | | | +---------+--------------+---------+------------+--------------+

Lưu ý cột SystemD hiển thị hầu hết các dịch vụ là dead . Đây không phải là vấn đề vì chúng tôi chưa định cấu hình/khởi động các dịch vụ đó.

Bước 4 - Thiết lập

Cuối cùng, chúng tôi có thể chạy thiết lập Aetolos để cài đặt các gói RPM cần thiết và tạo tất cả các tệp cấu hình. Chúng tôi muốn xem đầu ra dài dòng với tham số --verbose bổ sung.

Bạn sẽ nhận thấy một cảnh báo về tập lệnh bị mất nước, cảnh báo này cho chúng tôi biết địa chỉ email đăng ký cho Let's Encrypt


 # ~/aetolos/aetolos --verbose --setup [DEBUG] Check running system [DEBUG] Detected: AlmaLinux 8.7 (Stone Smilodon) [DEBUG] Check system memory [DEBUG] Detected: 460MiB [DEBUG] Check CPU cores [DEBUG] Detected: 2 [DEBUG] Check proxy [DEBUG] Loading Aetolos configuration [DEBUG] Starting operating system setup [DEBUG] Checking repository dependencies [DEBUG] Checking package dependencies [DEBUG] Installing package: php-fpm [DEBUG] Checking SELinux requirements [DEBUG] SELinux: enable httpd_can_network_connect [DEBUG] SELinux: enable httpd_can_sendmail [DEBUG] SELinux: enable httpd_read_user_content [DEBUG] SELinux: enable httpd_enable_homedirs [DEBUG] SELinux: enable httpd_home_tmp_aetolos.pp [DEBUG] Checking certificate requirements [DEBUG] Generating a self-signed certificate [DEBUG] Certificate: /etc/pki/tls/certs/localhost.crt [DEBUG] Fullchain: /etc/pki/tls/certs/localhost.fullchain [DEBUG] Key: /etc/pki/tls/private/localhost.key [DEBUG] Checking ACME client [DEBUG] Downloading ACME client: dehydrated 0.7.1 [DEBUG] Installing ACME client under: /root/dehydrated/ [WARNING] ACME registration email set to: postmaster [WARNING] Please change the ACME registration email by executing: '/root/aetolos/aetolos --verbose --module=dehydrated --registration-email=new-email' [DEBUG] Checking module dependencies [DEBUG] Save configuration: apache [DEBUG] Writing to file: /etc/httpd/conf/httpd.conf [DEBUG] Writing to file: /etc/httpd/conf.d/ssl.conf [DEBUG] Writing to file: /etc/sysconfig/htcacheclean [INFO] System memory: 460MB [INFO] Allocate 50% of system memory to MariaDB: 230MB [INFO] 70% of the above usage goes to total thread memory: 161MB [INFO] The rest 30% goes to server buffers: 69MB [INFO] MariaDB memory per connection: 18MB [INFO] MariaDB max connections: 10 [INFO] MariaDB temporary table size: 16MB [INFO] MariaDB query cache: 16MB [INFO] Allocate 40% of system memory to Apache/PHP-FPM: 184MB [INFO] Estimated average number of connections per CPU core: 9 [INFO] Apache StartServers: 1 [INFO] Apache ServerLimit: 2 [INFO] Apache ThreadsPerChild: 18 [INFO] Apache MinSpareThreads: 18 [INFO] Apache ThreadLimit: 22 [INFO] Apache MaxRequestWorkers: 36 [INFO] Apache maximum number of concurrent connections: 108 [DEBUG] Writing to file: /etc/logrotate.d/httpd [DEBUG] Save configuration: dehydrated [DEBUG] Writing to file: /root/dehydrated/config [DEBUG] Writing to file: /root/dehydrated/hook.sh [DEBUG] Writing to file: /etc/pki/letsencrypt/domains.txt [DEBUG] Writing to file: /etc/cron.daily/dehydrated.cron [DEBUG] Save configuration: mariadb [DEBUG] Writing to file: /etc/systemd/system/mariadb.service.d/limitnofile.conf [DEBUG] Writing to file: /etc/my.cnf.d/mariadb-server.cnf [DEBUG] Save configuration: php [DEBUG] Writing to file: /etc/php.ini [DEBUG] Writing to file: /etc/php.d/10-opcache.ini [DEBUG] Save configuration: virtualhost [DEBUG] Writing to file: /etc/tmpfiles.d/hometmp.conf [DEBUG] Reloading systemd


Theo cảnh báo, chúng tôi thêm một địa chỉ email cho Let's Encrypt:

 # ~/aetolos/aetolos --verbose --module=dehydrated [email protected]

Bắt đầu MariaDB

Không giống như các dịch vụ khác, MariaDB cần được bắt đầu và hoạt động để Aetolos thêm máy chủ ảo và các quyền cơ sở dữ liệu tương ứng. Vì vậy, hãy kích hoạt và khởi động MariaDB:

 # systemctl --now enable mariadb


Tại thời điểm này, chúng tôi có thể bảo mật phiên bản MariaDB bằng cách chạy:

 /usr/bin/mysql_secure_installation


Điều này yêu cầu bạn cũng tạo tệp /root/.my.cnf với các chi tiết đăng nhập cho root:

 [client] default-character-set="utf8mb4" user="root" password='the_password_set_in_the_previous_step'

Thêm máy chủ ảo

Bây giờ chúng tôi đã sẵn sàng để thêm bao nhiêu máy chủ ảo tùy thích (hoặc bao nhiêu máy chủ có thể xử lý).


Trước khi chạy bất kỳ lệnh nào, chúng tôi có thể dành một giây để suy nghĩ máy chủ ảo nào sẽ có tên miền phụ tiền tố, đôi khi chúng tôi có thể có một tên miền như example.tld với tên miền phụ www (www.example.tld), những lần khác chúng tôi có thể không muốn sử dụng tiền tố vì chúng tôi chỉ muốn địa chỉ email của mình ở miền trên cùng ([email protected] chứ không phải [email protected]).


Ví dụ: chúng tôi sẽ thêm ba máy chủ ảo, hai trong số chúng không có tên miền phụ:

 # ~/aetolos/aetolos --verbose --module=virtualhost --add-virtualhost=example1.tld --no-prefix [DEBUG] Verify domain: example1.tld [DEBUG] Add virtual host: example1.tld # ~/aetolos/aetolos --verbose --module=virtualhost --add-virtualhost=example2.tld --no-prefix [DEBUG] Verify domain: example2.tld [DEBUG] Add virtual host: example2.tld # ~/aetolos/aetolos --verbose --module=virtualhost --add-virtualhost=example3.tld [DEBUG] Verify domain: example3.tld [DEBUG] Add virtual host: example3.tld


Bây giờ chúng tôi có thể liệt kê tất cả các máy chủ ảo:

 # ~/aetolos/aetolos --module=virtualhost --list-virtualhosts +----+---------------------+--------------+-------------+----------------+--------+--------------+ | ID | Timestamp | Virtual host | System user | MariaDB prefix | Parked | Prefix alias | +----+---------------------+--------------+-------------+----------------+--------+--------------+ | 1 | 2023-01-10 08:51:36 | example1.tld | example1tld | example1 | [ ] | | | 2 | 2023-01-10 08:51:40 | example2.tld | example2tld | example2 | [ ] | | | 3 | 2023-01-10 08:51:45 | example3.tld | example3tld | example3 | [ ] | www | +----+---------------------+--------------+-------------+----------------+--------+--------------+


Mỗi máy chủ ảo sẽ “sống” bị cô lập trong thư mục chính của chính nó, với quyền sở hữu nhóm/người dùng riêng, vì vậy hãy xem /home của chúng tôi:

 # ls -la /home total 0 drwxr-xr-x. 5 root root 63 Jan 20 10:51 . dr-xr-xr-x. 17 root root 224 Dec 21 2021 .. drwx--x--x. 8 example1tld example1tld 159 Jan 10 08:51 example1tld drwx--x--x. 8 example2tld example2tld 159 Jan 10 08:51 example2tld drwx--x--x. 8 example3tld example3tld 159 Jan 10 08:51 example3tld

Cài đặt

Sau khi chúng tôi thực hiện các sửa đổi bằng lệnh Aetolos, chúng tôi cần tạo các tệp cấu hình mới cho tất cả các dịch vụ có liên quan (Apache, PHP-FPM, Dehydrated, v.v.). Do đó, chúng tôi thực hiện thiết lập Aetolos lần cuối.


 # ~/aetolos/aetolos --setup

chứng chỉ TLS

Tại thời điểm này, tất cả các dịch vụ sẽ sử dụng cùng một chứng chỉ tự ký, do đó, đây là thời điểm tốt để chạy khử nước theo cách thủ công để thu thập tất cả các chứng chỉ máy chủ ảo. Vì Aetolos sử dụng giao thức ACME với xác thực tên miền qua cổng HTTP 80, nên trước tiên chúng tôi khởi động máy chủ Apache của mình để phục vụ các yêu cầu đó.


 # systemctl start httpd # ~/dehydrated/dehydrated --cron --config /root/dehydrated/config --keep-going # systemctl stop httpd # ~/aetolos/aetolos --setup

Dịch vụ

Bây giờ chúng tôi có thể kích hoạt và bắt đầu tất cả các dịch vụ.


 # systemctl --now enable httpd [email protected] [email protected] [email protected] mariadb php-fpm Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /usr/lib/systemd/system/[email protected]. Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /usr/lib/systemd/system/[email protected]. Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /usr/lib/systemd/system/[email protected].


Bạn sẽ nhận thấy rằng mỗi máy chủ ảo có dịch vụ Apache riêng, đây là một tính năng do systemd cung cấp và cho phép chúng tôi xác định các máy chủ ảo thành các dịch vụ systemd riêng biệt. Tham số --now sẽ bắt đầu tất cả các dịch vụ.

Kiến trúc

Cần có đề cập đặc biệt về kiến trúc được sử dụng để lưu trữ các trang web. Vì lý do bảo mật, mỗi máy chủ ảo được cách ly trong các tài khoản unix được lưu trữ trong thư mục /home của riêng chúng. Nội dung web công cộng phải được lưu trữ trong thư mục public_html .


 /home/example1tld -> virtual host home /home/example1tld/etc -> email accounts /home/example1tld/mail -> email storage /home/example1tld/public_html -> web content /home/example1tld/www -> symbolic link to public_html /home/example1tld/tmp -> temp directory

Aetolos

Tại thời điểm này, Aetolos đã cấu hình máy chủ mà không có bất kỳ sửa đổi tùy chỉnh nào, tất cả các thay đổi được thực hiện trên các tệp cấu hình mặc định. Chúng tôi có thể xóa Aetolos khỏi máy chủ và tiếp tục sửa đổi theo cách thủ công hoặc chúng tôi có thể giữ lại Aetolos trong trường hợp chúng tôi muốn thêm nhiều máy chủ ảo hơn trong tương lai.

Tín dụng

Ảnh bài viết của Manuel Geissinger từ pexels