自己ホスティング Web コンテンツは、中小企業、事業主、非営利組織、および個人に適しています。
自己ホストできる人に実際の制限はありませんが、プライバシーを重視するグループは直接利益を得て、すぐに結果を確認できます.中小企業は、現在のすべての暗号化およびセキュリティ プロトコル、特に PCI 仕様に準拠した完全に機能するシステムを手に入れることができます。
セルフホスティングが有益である理由はたくさんありますが、その一部を次に示します。
この記事は Web サーバー ホスティングに関するものです。電子メール ホスティングに興味がある場合は、自分の電子メール サーバーを自己ホストするに関する記事をお読みください。
サーバーに完全修飾ドメイン名 (FQDN) があり、 /etc/hosts
ファイルに短い名前ではなく FQDN を指すサーバーの IP があることを確認してください。これは、FQDN がないと機能しない OpenDKIM などの一部のツールの要件です。
FQDN が正しく設定されているかどうかをテストするには、次を実行します。
# hostname -f server.example.tld
サーバー名のみが表示され、FQDN が表示されない場合は、systemd hostnamectl
コマンドを使用して FQDN を設定します。
# hostnamectl set-hostname server.example.tld
最初のステップは、いくつかの基本的なパッケージをインストールすることです。パッケージ マネージャーを使用します。
EL8/EL9 の新しいバージョンの dnf:
# dnf install php php-cli php-pdo php-mbstring epel-release unzip wget
EL7 の yum:
# yum install php php-cli php-pdo php-mbstring epel-release unzip wget
Fedora の場合、パッケージはわずかに異なります。
# dnf install php php-cli php-pdo php-mbstring unzip wget
2 番目のステップでは、Aetolos 仮想ホスティング コントロール パネルをインストールします。これは、構成ファイルのみを生成し、システムにその他の変更を加えません。
# 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
最新の開発コードは、git リポジトリからダウンロードできます。
git クローン 'https://gitlab.com/noumenia/aetolos.git'
次に、サーバーが提供するサービスを選択します。 status パラメーターを指定して Aetolos を実行し、利用可能なすべてのサービスを把握します。
# ~/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 | | | | +---------+--------------+---------+------------+--------------+
これは自己ホスト Web サーバーになるため、Web ホスティングの完全な機能セットを提供するサービスを有効にします。
DKIM 署名付きの電子メール用に別のサーバーがある場合は、このサーバーでも OpenDKIM を有効にする必要があります。次に、適切な署名のためにサーバー間でキーを共有します。
これらのサービスを Aetolos で有効にしましょう。
# ~/aetolos/aetolos --enable=apache # ~/aetolos/aetolos --enable=dehydrated # ~/aetolos/aetolos --enable=mariadb
ここで、status パラメーターを指定して Aetolos を再実行し、次の表を確認します。
+---------+--------------+---------+------------+--------------+ | 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 | | | | +---------+--------------+---------+------------+--------------+
ほとんどのサービスがdead
と表示されている SystemD 列に注意してください。これらのサービスはまだ構成/開始していないため、これは問題ではありません。
最後に、Aetolos セットアップを実行して、必要な RPM パッケージをインストールし、すべての構成ファイルを生成します。 --verbose
パラメーターを追加して詳細出力を表示することをお勧めします。
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
警告に従って、Let's Encrypt のメール アドレスを追加します。
# ~/aetolos/aetolos --verbose --module=dehydrated [email protected]
他のサービスとは異なり、Aetolos が仮想ホストと対応するデータベース権限を追加するには、MariaDB を開始して動作させる必要があります。それでは、MariaDB を有効にして起動しましょう。
# systemctl --now enable mariadb
この時点で、次を実行して MariaDB インスタンスを保護できます。
/usr/bin/mysql_secure_installation
これには、root のログイン詳細を含む/root/.my.cnf
ファイルも作成する必要があります。
[client] default-character-set="utf8mb4" user="root" password='the_password_set_in_the_previous_step'
これで、仮想ホストを好きなだけ (またはサーバーが処理できる数だけ) 追加する準備が整いました。
コマンドを実行する前に、どの仮想ホストが接頭辞サブドメインを持つかを考えるのに少し時間がかかる場合があります。www サブドメイン (www.example.tld) を持つ example.tld のようなドメインがある場合もあれば、そうしたくない場合もあります。電子メール アドレスを最上位ドメイン ([email protected] ではなく [email protected]) にのみ含める必要があるため、プレフィックスを使用します。
例として、3 つの仮想ホストを追加します。そのうちの 2 つはサブドメインなしです。
# ~/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
すべての仮想ホストを一覧表示できるようになりました。
# ~/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 | +----+---------------------+--------------+-------------+----------------+--------+--------------+
各仮想ホストは、独自のユーザー/グループの所有権を持つ、独自のホーム ディレクトリ内に分離されて「ライブ」するため、/home を見てみましょう。
# 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
Aetolos コマンドで変更を行った後、関連するすべてのサービス (Apache、PHP-FPM、Dehydred など) の新しい構成ファイルを生成する必要があります。したがって、Aetolos セットアップを最後にもう一度実行します。
# ~/aetolos/aetolos --setup
この時点で、すべてのサービスが同じ自己署名証明書を使用するため、手動で脱水を実行してすべての仮想ホスト証明書を収集するのに適した時期です。 Aetolos は ACME プロトコルと HTTP ポート 80 経由のドメイン検証を使用するため、最初に Apache サーバーを起動してこれらのリクエストを処理します。
# systemctl start httpd # ~/dehydrated/dehydrated --cron --config /root/dehydrated/config --keep-going # systemctl stop httpd # ~/aetolos/aetolos --setup
これで、すべてのサービスを有効にして開始できます。
# 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].
各仮想ホストには独自の Apache サービスがあることに気付くでしょう。これは systemd によって提供される機能であり、仮想ホストを個別の systemd サービスに定義することができます。 --now
パラメーターは、すべてのサービスを開始します。
Web サイトのホスティングに使用されるアーキテクチャについては、特に言及する必要があります。セキュリティ上の理由から、各仮想ホストは独自の/home
ディレクトリに格納された UNIX アカウント内に分離されています。パブリック Web コンテンツは、 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 はカスタム変更なしでサーバーを構成しました。すべての変更はデフォルトの構成ファイルで行われます。サーバーから Aetolos を削除して手動で変更を続行するか、将来仮想ホストを追加する場合に備えて Aetolos を保持することができます。
pexels の Manuel Geissinger による記事の写真