ウェブサイト検索

Rocky Linux 8にNginxとLet's Encrypt SSLを使用してNEOS CMSをインストールする方法


Rocky Linux 8にNginxとLet's Encrypt SSLを使用してNEOS CMSをインストールする方法

このページで

  1. 前提条件
  2. ステップ1 - ファイアウォールを設定する
  3. ステップ2 - Nginxをインストールする
  4. ステップ3 - PHPと拡張機能をインストールする
  5. ステップ4 - MySQLサーバーのインストールと設定
  6. ステップ5 - Composerをインストールする
  7. ステップ6 - Neos CMSをインストールする
  8. ステップ7 - SELinuxの権限を設定する
  9. ステップ8 - SSLのインストールと設定
  10. ステップ9 - NginxとPHPを設定する

    1. PHP-FPMを設定する
    2. Nginxを設定する
  11. ステップ10 - Neosのインストールを完了する
  12. 結論

Neosは、コードを書く必要なく簡単に複雑なウェブサイトを構築できる無料でオープンソースのコンテンツ管理システム(CMS)です。それを使って、ブログ、ニュースウェブサイト、ポートフォリオページ、または企業のウェブサイトを作成できます。インライン編集、単一インストールで複数のウェブサイトをサポート、組み込みのSEOツール、人間が読みやすいURL、プラグインマネージャー、デバイスプレビュー、複数のテンプレートをサポートするなど、豊富な機能を提供しています。また、REST API、JSON、GraphQL、oEmbedなどの現代の技術をサポートしています。

このチュートリアルでは、Rocky Linux 8 OSを実行しているサーバーにNeos CMSをインストールする方法を学びます。

前提条件

    Rocky Linux 8を実行しているサーバー。

    非ルートのsudoユーザー。

    すべてが最新であることを確認してください。

    sudo dnf update
    

    基本的なユーティリティパッケージをインストールします。中にはすでにインストールされているものもあります。

    sudo dnf install wget curl nano unzip yum-utils -y
    

ステップ1 - ファイアウォールを設定する

最初のステップはファイアウォールを設定することです。Rocky LinuxはFirewalldファイアウォールを使用しています。ファイアウォールのステータスを確認してください。

sudo firewall-cmd --state
running

ファイアウォールは異なるゾーンで動作し、パブリックゾーンは私たちが使用するデフォルトのゾーンです。ファイアウォールでアクティブなすべてのサービスとポートをリストアップしてください。

sudo firewall-cmd --permanent --list-services

次の出力を表示する必要があります。

cockpit dhcpv6-client ssh

HTTPおよびHTTPSポートを許可します。

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

ファイアウォールの状態を再確認してください。

sudo firewall-cmd --permanent --list-services

あなたは似たような出力を見るべきです。

cockpit dhcpv6-client http https ssh

変更を有効にするためにファイアウォールを再読み込みしてください。

sudo firewall-cmd --reload

ステップ2 - Nginxをインストールする

Rocky Linuxは古いバージョンのNginxを出荷しています。最新のバージョンをインストールするには、公式のNginxリポジトリをダウンロードする必要があります。

公式のNginxリポジトリを作成するために、/etc/yum.repos.d/nginx.repoファイルを作成して開いてください。

sudo nano /etc/yum.repos.d/nginx.repo

そのコードをそこに貼り付けてください。

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Ctrl + X を押してファイルを保存し、プロンプトが表示されたら Y を入力します。

Nginxをインストールします。

sudo dnf install nginx

インストールを確認してください。

nginx -v
nginx version: nginx/1.20.2

Nginxサービスを有効にして開始します。

sudo systemctl enable nginx --now

ステップ3 - PHPと拡張機能をインストールする

私たちのチュートリアルのために、Remiのリポジトリを使用して最新バージョンのPHPをインストールする必要があります。最初のステップは、Epelリポジトリを取得することです。

sudo dnf install epel-release

次に、Remiリポジトリをインストールします。

sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

利用可能なPHPストリームを確認してください。

dnf module list php -y
Last metadata expiration check: 0:00:12 ago on Fri 03 Dec 2021 09:39:32 AM UTC.
Rocky Linux 8 - AppStream
Name                Stream                 Profiles                                 Summary
php                 7.2 [d]                common [d], devel, minimal               PHP scripting language
php                 7.3                    common [d], devel, minimal               PHP scripting language
php                 7.4                    common [d], devel, minimal               PHP scripting language

Remi's Modular repository for Enterprise Linux 8 - x86_64
Name                Stream                 Profiles                                 Summary
php                 remi-7.2               common [d], devel, minimal               PHP scripting language
php                 remi-7.3               common [d], devel, minimal               PHP scripting language
php                 remi-7.4               common [d], devel, minimal               PHP scripting language
php                 remi-8.0               common [d], devel, minimal               PHP scripting language
php                 remi-8.1               common [d], devel, minimal               PHP scripting language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

デフォルトのバージョンは7.2です。RemiのPHP 8.0リポジトリを有効にします。

sudo dnf module reset php
sudo dnf module enable php:remi-8.0

次に、Neosに必要なPHPとその拡張機能をImageMagickと一緒にインストールします。

sudo dnf install php-fpm php-mbstring php-xml php-curl php-mysqlnd php-zip php-cli php-imagick ImageMagick php-intl

インストールを確認してください。

php --version
PHP 8.0.14 (cli) (built: Dec 16 2021 03:01:07) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.14, Copyright (c) Zend Technologies

ステップ4 - MySQLサーバーのインストールと設定

私たちはデータを保存するためにMySQLデータベースを使用します。Rocky LinuxのAppstreamリポジトリにはMySQLの最新バージョンが含まれています。

MySQLをインストールします。

sudo dnf install mysql-server

MySQLサービスを有効にして起動します。

sudo systemctl enable mysqld --now

MySQLの安全なインストール。

sudo mysql_secure_installation

最初のステップでは、MySQLパスワードの強度をテストするために使用できるValidate Passwordプラグインをセットアップするかどうか尋ねられます。進むにはYを選択してください。次のステップではパスワードの検証レベルを選択するよう求められます。最も強力なレベルである2を選択してください。これにより、パスワードは少なくとも8文字で、大文字、小文字、数字、特殊文字が混在している必要があります。

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: Y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2

次のステップでは、ルートパスワードを選択するよう求められます。パスワード検証プラグインの要件を満たす強力なパスワードを選んでください。次のステップでは、選択したパスワードを使用するかどうかを尋ねられます。[y]を押して続行してください。

Please set the password for root here.

New password:

Re-enter new password:

Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y

次のプロンプトですべての匿名ユーザーとテストデータベースを削除し、rootログインを無効にし、新しく設定したルールを読み込むには、Yを押してからENTERキーを押してください。

...
Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.
...
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Success.
...
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
 - Dropping test database...
Success.
 - Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
...
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.
All done!

MySQLシェルに入ります。続行するには、ルートパスワードを入力してください。

mysql -u root -p

ユーザーneosを作成します。パスワードが事前に設定された要件を満たしていることを確認してください。

mysql> CREATE USER 'neos'@'localhost' IDENTIFIED BY 'Your_password2';

neosdbデータベースを作成します。

mysql> CREATE DATABASE neosdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

neosdb データベースにユーザー権限を付与します。

mysql> GRANT ALL PRIVILEGES ON neosdb.* TO 'neos'@'localhost';

シェルを出てください。

mysql> exit

ステップ5 - Composerをインストールする

ComposerはPHPの依存関係管理ツールであり、Neos CMSが動作するために必要です。

Composerのインストーラスクリプトをダウンロードします。

curl -sS https://getcomposer.org/installer -o composer-setup.php

インストーラーを確認するために以下のコマンドを実行してください。

HASH=`curl -sS https://composer.github.io/installer.sig`
echo $HASH
php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

上記のコマンドはインストーラーのハッシュ値を取得し、それをダウンロードしたスクリプトと照合します。インストーラーが安全に実行できる場合、次の出力が表示されるはずです。

Installer verified

Composerをインストールしてください。

sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

インストールを確認するには、そのバージョンをチェックしてください。

composer --version
Composer version 2.2.3 2021-12-31 12:18:53

ステップ6 - Neos CMSをインストールする

Neosをインストールするためのルートディレクトリを作成してください。

sudo mkdir -p /var/www/neos

ルートディレクトリの所有権を現在ログインしているユーザーに変更します。

sudo chown -R $USER:$USER /var/www/neos

ルートディレクトリに切り替えてください。

cd /var/www/neos

Composerを使用してNeosとその依存関係をインストールします。

composer create-project --no-dev neos/neos-base-distribution .

コマンドの最後にあるドットを忘れずに、Composerに現在のディレクトリにインストールするように指示してください。インストール中に以下の警告が表示されることがあります。続行するにはyを入力してください。それによってインストールは妨げられません。

 - Installing neos/composer-plugin (2.1.3): Extracting archive
neos/composer-plugin contains a Composer plugin which is currently not in your allow-plugins config. See https://getcomposer.org/allow-plugins
Do you trust "neos/composer-plugin" to execute code and wish to enable it now? (writes "allow-plugins" to composer.json) [y,n,d,?] y

  - Installing composer/package-versions-deprecated (1.11.99.4): Extracting archive
composer/package-versions-deprecated contains a Composer plugin which is currently not in your allow-plugins config. See https://getcomposer.org/allow-plugins
Do you trust "composer/package-versions-deprecated" to execute code and wish to enable it now? (writes "allow-plugins" to composer.json) [y,n,d,?] y

ルートディレクトリの所有権をnginxに変更します。

sudo ./flow core:setfilepermissions $USER nginx nginx

現在ログインしているユーザーをnginxグループに追加します。

sudo usermod -a -G nginx $USER

それでは、今回はここまでです。残りの設定は後で行います。

ステップ7 - SELinuxの権限を設定する

SELinuxのchconコマンドを使用して、/var/www/neosディレクトリから提供されるウェブコンテンツのファイルセキュリティコンテキストを変更します。

sudo chcon -t httpd_sys_content_t /var/www/neos -R
sudo chcon -t httpd_sys_rw_content_t /var/www/neos -R

Neos CMSのネットワーク接続を許可するためにSELinuxを設定します。

sudo setsebool -P httpd_can_network_connect on

ステップ8 - SSLのインストールと設定

Let's Encryptを使用してSSL証明書をインストールするには、Certbotツールをダウンロードする必要があります。CertbotをインストールするにはEpelリポジトリが必要ですが、チュートリアルの前の方でインストールしたのでこのステップは省略できます。

Certbotをインストールします。

sudo dnf install certbot

Nginxサーバーを停止してください。Certbotツールに干渉しますので。

sudo systemctl stop nginx

SSL証明書を生成する。

sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email  -d neos.example.com

上記のコマンドは、サーバーの/etc/letsencrypt/live/neos.example.comディレクトリに証明書をダウンロードします。

ディフィー・ヘルマン群証明書を生成します。

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Let's Encryptの自動更新のために、チャレンジ用のWebルートディレクトリを作成します。

sudo mkdir -p /var/lib/letsencrypt

SSLを更新するためにCronジョブを作成します。これは毎日実行され、証明書を確認して必要に応じて更新します。それに先立って、まずはファイル/etc/cron.daily/certbot-renewを作成し、編集のために開きます。

sudo nano /etc/cron.daily/certbot-renew

次のコードを貼り付けてください。

#!/bin/sh
certbot renew --cert-name neos.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Ctrl + X を押してファイルを保存し、促されたらYと入力します。

タスクファイルの権限を変更して、実行可能にします。

sudo chmod +x /etc/cron.daily/certbot-renew

ステップ9 - NginxとPHPの設定

PHP-FPMを設定する

/etc/php-fpm.d/www.confファイルを開いてください.

sudo nano /etc/php-fpm.d/www.conf

PHPプロセスのUnixユーザー/グループをnginxに設定する必要があります。ファイル内でuser=www-dataとgroup=www-dataの行を見つけて、それらをnginxに変更してください。

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...

Ctrl + X を押してファイルを保存し、促されたらYと入力します。

PHPサービスを開始してください。

sudo systemctl start php-fpm

Nginxを設定する

/etc/nginx/conf.d/neos.conf ファイルを作成して編集のために開いてください。

sudo nano /etc/nginx/conf.d/neos.conf

そのコードをそこに貼り付けてください。

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  neos.example.com;

    access_log  /var/log/nginx/neos.access.log;
    error_log   /var/log/nginx/neos.error.log;
    
    # SSL
    ssl_certificate      /etc/letsencrypt/live/neos.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/neos.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/neos.example.com/chain.pem;
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 8.8.8.8;

    root /var/www/neos/Web/;
    index index.php;
    
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # Pass PHP Scripts To FastCGI Server
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_pass unix:/run/php-fpm/www.sock; # Depends On The PHP Version
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param FLOW_REWRITEURLS  1;
	fastcgi_param FLOW_CONTEXT  Production;
    	fastcgi_param X-Forwarded-For $proxy_add_x_forwarded_for;
	fastcgi_param X-Forwarded-Port $proxy_port;
    	fastcgi_param REMOTE_ADDR $remote_addr;
	fastcgi_param REMOTE_PORT $remote_port;
    	fastcgi_param SERVER_ADDR $server_addr;
	fastcgi_param SERVER_NAME $http_host;
        fastcgi_read_timeout 300;
	fastcgi_buffer_size  128k;
    	fastcgi_buffers  256 16k;
	fastcgi_busy_buffers_size 256k;
    	fastcgi_temp_file_write_size 256k;
        include fastcgi_params;
        try_files $uri =404;
    }

    location ~ /_Resources/ {
   	access_log off;
	log_not_found off;
	expires max;

    	if (!-f $request_filename) {
    		rewrite "/_Resources/Persistent/([a-z0-9]{40})/.+\.(.+)" /_Resources/Persistent/$1.$2 break;
     		rewrite "/_Resources/Persistent(?>/[a-z0-9]{5}){8}/([a-f0-9]{40})/.+\.(.+)" /_Resources/Persistent/$1.$2 break;
    	}
    }
}

enforce HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  neos.example.com;
    return 301   https://$host$request_uri;
}

Nginxの設定に使用されるルートディレクトリは/var/www/neos/Web/であり、/var/www/neos/ではないことに注意してください。

作業が完了したら、Ctrl + Xを押してファイルを保存し、求められたときにYを入力してください。

ファイル /etc/nginx/nginx.conf を編集のために開いてください。

sudo nano /etc/nginx/nginx.conf

include /etc/nginx/conf.d/*.conf;の前に次の行を追加してください。

server_names_hash_bucket_size  64;

Ctrl + X を押してファイルを保存し、促されたらYと入力します。

Nginxの設定ファイルの構文を確認してください。

sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

新しい設定を有効にするためにNginxサービスを再起動してください。

sudo systemctl restart nginx

ステップ10 - Neosのインストールを完了する

ブラウザでURL https://neos.example.com を開くと、次の設定画面が表示されます。

設定に移動ボタンをクリックして進んでください。ログイン画面にリダイレクトされます。

ターミナルで次のコマンドを実行して、パスワードを取得してください。

cat /var/www/neos/Data/SetupPassword.txt
The setup password is:

SCPUYmmQ

After you successfully logged in, this file is automatically deleted for security reasons.
Make sure to save the setup password for later use.

パスワードを入力し、ログインをクリックして進んでください。NeosはPHP画像ライブラリを確認します。

次へ をクリックして続行します。データベースの認証情報を入力するように求められます。ステップ4で作成した認証情報を入力してください。認証情報が確認されると、画面に 接続が確立されました というメッセージが表示されます。

次へをクリックして進んでください。管理者アカウントの設定を求められます。あなたの詳細を記入してください。

次へをクリックして進んでください。次に、デモサイトをインポートするか、ゼロから作成するかを選択するよう求められます。ゼロから新しいサイトを作成したい場合は、両方のボックスに入力する必要があります。たとえば、ニュースサイトを作成する場合は、指定された通りにボックスに入力してください。ゼロから始める場合、サイトにはCSSがなく、自分で作成する必要があることを忘れないでください。

Package Name: Neos.HowtoForgeNews
Site Name: HowtoForgeNews

チュートリアルでは、デモサイトに留まります。デモサイトをインポートするには、すべてのフィールドを空白のままにしてください。

次へをクリックして続行します。セットアップ完了画面が表示されます。

バックエンドに移動ボタンをクリックして、コントロールパネルのログイン画面を開きます。ユーザー名とパスワードを入力し、ログインをクリックして管理パネルを開きます。

デモサイトをインポートしたので、最初のステップはお試しページを削除し、誰でもウェブサイトを編集する権限を持つバックエンドアカウントを設定できるようにすることです。

左のサイドバーからTry meページに切り替え、下のスクリーンショットで強調表示されたDeleteボタンをクリックしてください。

「公開 - ライブ」ボタンの右側にあるオレンジ色の矢印をクリックしてドロップダウンメニューを開き、すべて公開をクリックして変更を保存します。

あなたのNeos CMSインストールは使用準備が整いました。

結論

このチュートリアルでは、LEMPスタックを使用してRocky Linux 8ベースのサーバーにNeos CMSをインストールおよび設定しました。質問がある場合は、下のコメントに投稿してください。

関連記事: