paint-brush
男に固執し、独自のWebサーバーをセルフホストする@theselfhoster
1,571 測定値
1,571 測定値

男に固執し、独自のWebサーバーをセルフホストする

George Papadakis13m2023/02/20
Read on Terminal Reader

長すぎる; 読むには

中小企業、事業主、非営利団体、個人向けの自己ホスティング電子メール。自己ホストできる人に実際の制限はありませんが、プライバシーを重視するグループは直接利益を得て、すぐに結果を確認できます.中小企業は、現在のすべての暗号化およびセキュリティ プロトコル、特に PCI 仕様に準拠した完全に機能するシステムを手に入れることができます。
featured image - 男に固執し、独自のWebサーバーをセルフホストする
George Papadakis HackerNoon profile picture
0-item
1-item

このガイドは誰を対象としていますか?

自己ホスティング Web コンテンツは、中小企業、事業主、非営利組織、および個人に適しています。


自己ホストできる人に実際の制限はありませんが、プライバシーを重視するグループは直接利益を得て、すぐに結果を確認できます.中小企業は、現在のすべての暗号化およびセキュリティ プロトコル、特に PCI 仕様に準拠した完全に機能するシステムを手に入れることができます。

なぜセルフホスティングなのか?

セルフホスティングが有益である理由はたくさんありますが、その一部を次に示します。


  • プライバシー
  • 強化されたセキュリティ
  • カスタマイズ
  • 低コスト

メールホスティング

この記事は Web サーバー ホスティングに関するものです。電子メール ホスティングに興味がある場合は、自分の電子メール サーバーを自己ホストするに関する記事をお読みください。

前提条件

  • インターネットにアクセスできる、専用または仮想の新しいサーバー
  • RHEL ベースの Linux ディストリビューション: Alma、Rocky、Oracle、または Fedora Server
  • ルートアクセス

サーバーのホスト名

サーバーに完全修飾ドメイン名 (FQDN) があり、 /etc/hostsファイルに短い名前ではなく FQDN を指すサーバーの IP があることを確認してください。これは、FQDN がないと機能しない OpenDKIM などの一部のツールの要件です。


FQDN が正しく設定されているかどうかをテストするには、次を実行します。


 # hostname -f server.example.tld


サーバー名のみが表示され、FQDN が表示されない場合は、systemd hostnamectlコマンドを使用して FQDN を設定します。

 # hostnamectl set-hostname server.example.tld

ステップ 1 - 必要なパッケージ

最初のステップは、いくつかの基本的なパッケージをインストールすることです。パッケージ マネージャーを使用します。


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 のインストール

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'

ステップ 3 - サービスを有効にする

次に、サーバーが提供するサービスを選択します。 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 ホスティングの完全な機能セットを提供するサービスを有効にします。


  • ACME リクエストに応答するための Web サーバーである Apache
  • Let's Encrypt 証明書の bash スクリプトである Dehydred
  • MariaDB、データベース


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 列に注意してください。これらのサービスはまだ構成/開始していないため、これは問題ではありません。

ステップ 4 - セットアップ

最後に、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]

MariaDB を開始する

他のサービスとは異なり、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

TLS 証明書

この時点で、すべてのサービスが同じ自己署名証明書を使用するため、手動で脱水を実行してすべての仮想ホスト証明書を収集するのに適した時期です。 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 による記事の写真