ウェブサイト検索

Rocky Linux 9にPrestaShopをインストールする方法


Rocky Linux 9にPrestaShopをインストールする方法

このページで

  1. 前提条件
  2. ステップ1 - ファイアウォールを設定する
  3. ステップ2 - Nginxをインストールする
  4. ステップ3 - PHPと拡張機能をインストールする
  5. ステップ4 - Percona MySQLサーバーをインストールする
  6. ステップ5 - Percona MySQLサーバーの構成
  7. ステップ6 - プレスタショップのダウンロード
  8. ステップ7 - SSLをインストールする
  9. ステップ8 - SELinuxの設定
  10. ステップ9 - PHP-FPMを設定する
  11. ステップ10 - Nginxを設定する
  12. ステップ11 - プレスタショップをインストールする
  13. ステップ12 - プレスタショップの更新
  14. 結論

PrestaShopは、Symfony PHPフレームワークを使用して書かれたオープンソースのeコマースWebアプリケーションです。製品を販売し、支払いを受け取り、関連するすべての側面を管理するためのオンラインストアの設計、構築、ホスティングを可能にします。300,000以上のサイトで使用されており、最も人気のあるeコマースプラットフォームの1つです。さらに機能を拡張するモジュールをサポートしており、さまざまな高品質のテーマを使用してカスタマイズすることができます。カスタマイズ可能なテンプレート、安全な決済ゲートウェイ、在庫管理、検索エンジンのランキングを最適化するためのSEOに優しいツールを提供しています。

このチュートリアルでは、Rocky Linux 9サーバーにPrestashopをインストールする方法を学びます。

前提条件

    最低1GBのRAMを搭載したRocky Linux 9を実行しているサーバー。

    sudo権限を持つ非ルートユーザー。

    prestashop.example.comのような完全修飾ドメイン名(FQDN)があなたのサーバーを指しています。

    Amazon SESやMailgunのようなメールサービスのSMTPアカウント。

    すべてが更新されています。

    sudo dnf update
    

    チュートリアルとPrestashopを実行するには、いくつかの必須パッケージが必要です。そのいくつかはすでにサーバーにインストールされている場合もあります。

    sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-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 9には古いバージョンの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 -y

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

nginx -v
nginx version: nginx/1.24.0

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

sudo systemctl enable nginx --now

サービスの状態を確認してください。

sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
     Active: active (running) since Sat 2023-11-25 10:58:03 UTC; 5s ago
       Docs: http://nginx.org/en/docs/
    Process: 4220 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 4222 (nginx)
      Tasks: 2 (limit: 10841)
     Memory: 1.9M
        CPU: 9ms
     CGroup: /system.slice/nginx.service
             ??4222 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??4223 "nginx: worker process"

ウェブブラウザでサーバーのIPアドレスを開いてください。サーバーが稼働していることを意味する次のページが表示されるはずです。

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

Rocky Linux 9はデフォルトでPHP 8.1を搭載しています。最新のPHPバージョンを常に使用したい場合や、複数のPHPバージョンをインストールしたい場合は、REMIリポジトリを使用する必要があります。

最初のステップはEpelリポジトリを取得することです。

sudo dnf install epel-release -y

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

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

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

dnf module list php -y
Name    Stream              Profiles                                      Summary
php     8.1                 common [d], devel, minimal                    PHP scripting language

Remi's Modular repository for Enterprise Linux 9 - x86_64
Name    Stream              Profiles                                      Summary
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
php     remi-8.2            common [d], devel, minimal                    PHP scripting language
php     remi-8.3            common [d], devel, minimal                    PHP scripting language

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

デフォルトのバージョンは8.1です。このチュートリアルを書く時点で、PrestashopはPHP 8.1に対応しています。したがって、RemiのPHP 8.1リポジトリを有効にしてください。

sudo dnf module reset php -y
sudo dnf module enable php:remi-8.1

Prestashopに必要なPHPとその拡張機能をインストールしてください。

sudo dnf install php php-bcmath php-cli php-curl php-common \
    php-fpm php-gd php-gmp php-intl php-mbstring \
    php-mysql php-opcache php-xml php-zip -y

インストールされているPHPのバージョンを確認してください。

php --version
PHP 8.1.26 (cli) (built: Nov 21 2023 21:53:48) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.1.26, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.26, Copyright (c), by Zend Technologies

PHP-FPMサービスを有効にして開始します。

sudo systemctl enable php-fpm --now

サービスの状態を確認してください。

sudo systemctl status php-fpm
? php-fpm.service - The PHP FastCGI Process Manager
     Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; preset: disabled)
     Active: active (running) since Sat 2023-11-25 12:54:31 UTC; 2s ago
   Main PID: 6160 (php-fpm)
     Status: "Ready to handle connections"
      Tasks: 6 (limit: 10841)
     Memory: 15.2M
        CPU: 56ms
     CGroup: /system.slice/php-fpm.service
             ??6160 "php-fpm: master process (/etc/php-fpm.conf)"
             ??6161 "php-fpm: pool www"
             ??6162 "php-fpm: pool www"
             ??6163 "php-fpm: pool www"
             ??6164 "php-fpm: pool www"
             ??6165 "php-fpm: pool www"

ステップ4 - Percona MySQLサーバーをインストールする

PrestashopはデータストレージにMySQLデータベースサーバーを必要とします。しかし、MySQLをインストールする代わりに、Percona MySQLサーバーをインストールします。これはMySQLの代替として機能し、より多くの機能とセキュリティを提供します。

最初のステップは、Rocky Linux の Percona リリースリポジトリをインストールすることです。

sudo dnf install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm

以下のエラーが表示された場合、安全に無視して先に進むことができます。これはインストールには影響しません。GPGキーは後でインポートされます。

error: can't create transaction lock on /var/lib/rpm/.rpm.lock (Resource temporarily unavailable)
error: /etc/pki/rpm-gpg/RPM-GPG-KEY-Percona: key 1 import failed.

リポジトリがインストールされたら、次のコマンドを実行してMySQL 8.0のためにPercona Serverリポジトリを設定します。

percona-release setup ps80

上記のコマンドは、デフォルトのMySQLモジュールを無効にするかどうかを尋ねています。続行するにはyを入力してください。これにより、MySQLインストーラーモジュールが無効になり、Percona MySQLモジュールが有効になります。

MySQL 8.0用のPercona Serverをインストールします。

sudo dnf -y install percona-server-server

これにより、今必要な基本パッケージであるPercona ServerとMySQL用のクライアントがインストールされます。

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

mysql --version
mysql  Ver 8.0.34-26 for Linux on x86_64 (Percona Server (GPL), Release 26, Revision 0fe62c85)

MySQLサービスを開始します。

sudo systemctl start mysqld

MySQLサービスの状態を確認してください。

sudo systemctl status mysqld
? mysqld.service - MySQL Server
     Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; preset: disabled)
     Active: active (running) since Sun 2023-11-26 06:25:37 UTC; 7s ago
       Docs: man:mysqld(8)
             http://dev.mysql.com/doc/refman/en/using-systemd.html
    Process: 6522 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
   Main PID: 6598 (mysqld)
     Status: "Server is operational"
      Tasks: 39 (limit: 10841)
     Memory: 486.8M
        CPU: 8.131s
     CGroup: /system.slice/mysqld.service
             ??6598 /usr/sbin/mysqld

Nov 26 06:25:28 prestashop.example.com systemd[1]: Starting MySQL Server...
Nov 26 06:25:37 prestashop.example.com systemd[1]: Started MySQL Server.

Perconaはインストール中に一時的なルートパスワードを生成します。次のコマンドを使用してそのパスワードを取得してください。

sudo grep "temporary password" /var/log/mysqld.log
2023-11-26T06:25:33.316696Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: (sDeLSgjs7pI

MySQLシェルにログインします。

sudo mysql -u root -p

MySQLのセキュリティセットアップウィザードを実行します。

sudo mysql_secure_installation

プロンプトが表示されたら、ルートパスワードを入力してください。

Securing the MySQL server deployment.

Enter password for user root:

パスワードが一時的であるため、すでに期限が切れており、新しいルートパスワードを設定するように求められます。ルートアカウントのために強力なパスワードを選択してください。パスワードは、現在のパスワードポリシーの要件を満たす必要があります。つまり、小文字の文字、大文字の文字、数字、特殊文字を含む必要があります。

The existing password for the user account root has expired. Please set a new password.

New password:

Re-enter new password:

次に、パスワードの強度が表示され、変更するかどうか尋ねられます。Nを入力して続行します。

The 'validate_password' component is installed on the server.
The subsequent steps will run with the existing configuration
of the component.
Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : N

 ... skipping.

Yを入力して匿名ユーザーを削除します。

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.

Yをタイプしてリモートでのrootログインを無効にします。

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Success.

Yを入力してテストデータベースを削除します。

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


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.

最後に、特権テーブルを再読み込みするにはNと入力してください。

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シェルにログインしたい場合は、次のコマンドを使用し、プロンプトが表示されたときにrootパスワードを入力してください。

sudo mysql -u root -p

次のMySQLシェルプロンプトが表示されます。

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 8.0.34-26 Percona Server (GPL), Release 26, Revision 0fe62c85

Copyright (c) 2009-2023 Percona LLC and/or its affiliates
Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

exitと入力してシェルを終了してください。

ステップ5 - Percona MySQLサーバーの構成

MySQLシェルにログインします。

sudo mysql -u root -p

Prestashopのインストール用に新しいMySQLデータベース、データベースユーザー、およびパスワードを作成してください。

mysql> CREATE DATABASE prestashop COLLATE utf8mb4_general_ci;
mysql> CREATE USER 'prestauser'@'localhost' IDENTIFIED BY 'Your_password2';
mysql> GRANT ALL PRIVILEGES ON prestashop.* TO 'prestauser'@'localhost';

prestashop、prestauser、およびyourpasswordをお好みの資格情報に置き換えてください。強力なパスワードを選択し、上記のパスワードポリシーに従っていることを確認してください。

権限をフラッシュして、現在のセッションに保存されていることを確認します。

mysql> FLUSH PRIVILEGES;

MySQLシェルを終了します。

mysql> exit

ステップ6 - プレスタショップのダウンロード

Prestashopのためのディレクトリを作成します。

sudo mkdir /var/www/html/prestashop -p

Prestashopには、ブランド付きの基本版とブランドなしの版の2つのバージョンがあります。ブランド付きの版はPrestashopのウェブサイトから入手でき、ブランドなしの版はGitHubのリポジトリから入手できます。この2つのバージョンの違いは、ブランド付きの版には、決済処理機能やプロモーションおよびSEOのためのFacebookおよびGoogleモジュール、Prestashopとの接続や分析目的のためのさまざまな他のモジュールが追加されている点です。

基本版は、ブランドなしのバージョンの後にリリースされます。したがって、このチュートリアルを書いている時点で、入手可能な基本版の最新バージョンは8.1.1であり、非ブランド版は8.1.2です。私たちのチュートリアルでは、基本的なブランド版を使用します。望む場合は、非ブランド版を使用することもできます。両方のバージョンのインストールプロセスはまったく同じです。

次のコマンドを使用して最新バージョンをダウンロードしてください。

cd /tmp
wget https://assets.prestashop3.com/dst/edition/corporate/8.1.1/prestashop_edition_basic_version_8.1.1.zip

Prestashopのダウンロードページに訪問し、メールアドレスを入力してファイルをダウンロードすることでリンクを取得できます。無印のバージョンはPrestashopのGitHubリリースページから入手できます。

ダウンロードしたアーカイブを解凍します。

unzip prestashop_*.zip

このアーカイブには、すべてのファイルを含むprestashop.zipという名前の別のzipファイルがあります。ファイルをPrestashopディレクトリに抽出してください。

sudo unzip prestashop.zip -d /var/www/html/prestashop

Prestashopディレクトリの所有者をnginxユーザーに変更します。

sudo chown -R nginx: /var/www/html/prestashop

ステップ7 - SSLをインストールする

SSL証明書を生成するためにCertbotをインストールする必要があります。そのためにSnapdパッケージインストーラーを使用します。Rocky Linuxにはそれが含まれていないため、Snapdインストーラーをインストールします。動作するためにはEPEL(Enterprise Linuxのための追加パッケージ)リポジトリが必要ですが、ステップ3で既にインストールしたため、直接進むことができます。

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

sudo dnf install -y snapd

スナップサービスを有効にして開始します。

sudo systemctl enable snapd --now

Snapコアパッケージをインストールし、Snapdのバージョンが最新であることを確認してください。

sudo snap install core && sudo snap refresh core

Snapdが動作するために必要なリンクを作成してください。

sudo ln -s /var/lib/snapd/snap /snap
echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

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

sudo snap install --classic certbot

次のコマンドを使用して、Certbot コマンドが /usr/bin ディレクトリへのシンボリックリンクを作成することで実行できることを確認してください。

sudo ln -s /snap/bin/certbot /usr/bin/certbot

Certbotが正しく機能しているか確認してください。

certbot --version
certbot 2.7.4

次のコマンドを実行してSSL証明書を生成します。

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

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

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

sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Certbotの更新スケジューラーサービスを確認してください。

sudo systemctl list-timers

snap.certbot.renew.serviceが実行されるようにスケジュールされたサービスの1つとして見つかります。

NEXT                        LEFT           LAST                        PASSED      UNIT                      ACTIVATES     
---------------------------------------------------------------------------------------------------------------------------               
Sun 2023-11-26 17:12:40 UTC 1h 34min left Sun 2023-11-26 15:25:36 UTC 12min ago    dnf-makecache.timer       dnf-makecache.service
Sun 2023-11-26 17:48:00 UTC 2h 10min left -                           -            snap.certbot.renew.timer  snap.certbot.renew.service
Mon 2023-11-27 00:00:00 UTC 8h left       Sun 2023-11-26 00:00:00 UTC 15h ago      logrotate.timer           logrotate.service

プロセスのドライランを実行して、SSLの更新が正常に機能しているか確認してください。

sudo certbot renew --dry-run

エラーが見当たらなければ、すべて準備完了です。あなたの証明書は自動的に更新されます。

ステップ8 - SELinuxを設定する

Prestashopのファイルセキュリティコンテキストを変更します。

sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/prestashop(/.*)?"

方針を適用してください。

sudo restorecon -Rv /var/www/html/prestashop/

NginxがMariaDBへのアクセスを許可するようにポリシーを適用してください。

sudo setsebool -P httpd_can_network_connect_db 1

外部ホストへの接続を許可する政策を適用します。これはメールを送信するために必要です。

sudo setsebool -P httpd_can_network_connect 1

MariaDB 10.11を使用すると、SELinuxがPHP-FPMのMariaDBへの接続を妨げるという別の問題に直面します。これはSELinuxモジュールをインストールすることで解決できます。最初のステップは、タイプ強制ファイルを作成することです。

ホームディレクトリにmy-phpfpm.teというファイルを作成し、編集のために開いてください。

cd ~
nano my-phpfpm.te

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

module my-phpfpm 1.0;

require {
        type unconfined_service_t;
        type httpd_t;
        type httpd_sys_content_t;
        class dir write;
        class unix_stream_socket connectto;
}

#============= httpd_t ==============

#!!!! This avc is allowed in the current policy
allow httpd_t httpd_sys_content_t:dir write;

#!!!! This avc is allowed in the current policy
allow httpd_t unconfined_service_t:unix_stream_socket connectto;

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

次のステップは、次のコマンドを使用してポリシーモジュールに変換することです。コマンド内のファイル名を変更しないでください。そうしないと、動作しません。モジュールの名前はmy-phpfpmで、ファイル名もモジュール名と同じである必要があります。

sudo checkmodule -M -m -o my-phpfpm.mod my-phpfpm.te

次に、ポリシーモジュールをコンパイルしてポリシーパッケージを作成する必要があります。

sudo semodule_package -o my-phpfpm.pp -m my-phpfpm.mod

最後のステップは、semodule コマンドを使用してポリシーパッケージを読み込むことであり、これにより使用されるポリシーがインストールされます。

sudo semodule -i my-phpfpm.pp

ステップ9 - PHP-FPMを設定する

php.iniを編集するために開いてください。

sudo nano /etc/php.ini

ファイルのアップロードサイズを設定するには、upload_max_filesize と post_max_size 変数の値を変更します。この値は、Prestashopにアップロードできるファイルのサイズを決定します。デフォルトでは10MBに設定されており、これがPHPで設定する値です。

sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 16M/' /etc/php.ini
sudo sed -i 's/post_max_size = 8M/post_max_size = 16M/' /etc/php.ini

サーバーのリソースと要件に応じて、PHPのメモリ制限を設定してください。

sudo sed -i 's/memory_limit = 128M/memory_limit = 256M/' /etc/php.ini

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

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

PHPプロセスのUnixユーザー/グループをnginxに設定する必要があります。ファイル内のuser=apacheおよびgroup=apacheの行を見つけて、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
...

ファイル内の listen.owner=nobody、listen.group=nobody、listen.mode=0660 の行を見つけ、コメントを外した後に以下のように変更してください。

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions. The owner
; and group can be specified either by name or by their numeric IDs.
; Default Values: user and group are set as the running user
;                 mode is set to 0660
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

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

PHP-fpmプロセスを再起動してください。PHPサービスを再起動する前にNginxがインストールされていることを確認してください。さもなければ、nginxグループが見つからないため失敗します。

sudo systemctl restart php-fpm

PHPセッションディレクトリのグループをNginxに変更します。

sudo chgrp -R nginx /var/lib/php/session

ステップ10 - Nginxを設定する

ファイル /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と入力します。

/etc/nginx/conf.d/prestashop.conf ファイルを作成して編集のために開きます。

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

以下のコードを貼り付けてください。prestashop.example.com をあなたのドメイン名に置き換えます。client_max_body_size の値を 10MB に設定してください。これは Prestashop のデフォルトのファイルアップロードサイズと同じです。これは以前に PHP で設定したのと同じ値です。

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    # [EDIT] Your domain name(s) go here.
    server_name prestashop.example.com;

    # [EDIT] Path to your domain Nginx logs.
    access_log /var/log/nginx/prestashop.access.log;
    error_log /var/log/nginx/prestashop.error.log;

    # [EDIT] Path to your SSL certificates (take a look at Certbot https://certbot.eff.org).
    ssl_certificate      /etc/letsencrypt/live/prestashop.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/prestashop.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/prestashop.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;

    # [EDIT] Path to your PrestaShop directory.
    root /var/www/html/prestashop;

    index index.php;

    # This should match the `post_max_size` and/or `upload_max_filesize` settings
    # in your php.ini.
    client_max_body_size 16M;

    # Redirect 404 errors to PrestaShop.
    error_page 404 /index.php?controller=404;

    # HSTS (Force clients to interact with your website using HTTPS only).
    # For enhanced security, register your site here: https://hstspreload.org/.
    # WARNING: Don't use this if your site is not fully on HTTPS!
    # add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" preload; always;

    # [EDIT] If you are using multiple languages.
    # rewrite ^/fr$ /fr/ redirect;
    # rewrite ^/fr/(.*) /$1;

    # Images.
    rewrite ^/(\d)(-[\w-]+)?/.+\.jpg$ /img/p/$1/$1$2.jpg last;
    rewrite ^/(\d)(\d)(-[\w-]+)?/.+\.jpg$ /img/p/$1/$2/$1$2$3.jpg last;
    rewrite ^/(\d)(\d)(\d)(-[\w-]+)?/.+\.jpg$ /img/p/$1/$2/$3/$1$2$3$4.jpg last;
    rewrite ^/(\d)(\d)(\d)(\d)(-[\w-]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$1$2$3$4$5.jpg last;
    rewrite ^/(\d)(\d)(\d)(\d)(\d)(-[\w-]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6.jpg last;
    rewrite ^/(\d)(\d)(\d)(\d)(\d)(\d)(-[\w-]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7.jpg last;
    rewrite ^/(\d)(\d)(\d)(\d)(\d)(\d)(\d)(-[\w-]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8.jpg last;
    rewrite ^/(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(-[\w-]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9.jpg last;
    rewrite ^/c/([\w.-]+)/.+\.jpg$ /img/c/$1.jpg last;

    # AlphaImageLoader for IE and FancyBox.
    rewrite ^images_ie/?([^/]+)\.(gif|jpe?g|png)$ js/jquery/plugins/fancybox/images/$1.$2 last;

    # Web service API.
    rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last;

    # Installation sandbox.
    rewrite ^(/install(?:-dev)?/sandbox)/.* /$1/test.php last;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    # [EDIT] Replace 'admin-dev' in this block with the name of your admin directory.
    location /admin-dev/ {
        if (!-e $request_filename) {
            rewrite ^ /admin-dev/index.php last;
        }
    }

    # .htaccess, .DS_Store, .htpasswd, etc.
    location ~ /\. {
        deny all;
    }

    # Source code directories.
    location ~ ^/(app|bin|cache|classes|config|controllers|docs|localization|override|src|tests|tools|translations|var|vendor)/ {
        deny all;
    }

    # vendor in modules directory.
    location ~ ^/modules/.*/vendor/ {
        deny all;
    }

    # Prevent exposing other sensitive files.
    location ~ \.(log|tpl|twig|sass|yml)$ {
        deny all;
    }

    # Prevent injection of PHP files.
    location /img {
        location ~ \.php$
        { deny all; }
    }

    location /upload {
        location ~ \.php$
        { deny all; }
    }

    # enable browser caching
    location ~* \.(?:css|eot|gif|ico|jpe?g|otf|png|ttf|woff2?)$ {
        expires 1M;
        add_header Cache-Control "public";
    }

    location ~ [^/]\.php(/|$) {
        # Split $uri to $fastcgi_script_name and $fastcgi_path_info.
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;

        # Ensure that the requested PHP script exists before passing it
        # to the PHP-FPM.
        try_files $fastcgi_script_name =404;

        # Environment variables for PHP.
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $request_filename;

        fastcgi_index index.php;

        fastcgi_keep_conn on;
        fastcgi_read_timeout 30s;
        fastcgi_send_timeout 30s;

        # Uncomment these in case of long loading or 502/504 errors.
        # fastcgi_buffer_size 256k;
        # fastcgi_buffers 256 16k;
        # fastcgi_busy_buffers_size 256k;

        # [EDIT] Connection to PHP-FPM unix domain socket.
        fastcgi_pass unix:/run/php-fpm/www.sock;
    }

    # enable gzip compression
    gzip on;
    gzip_disable "msie6";

    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_min_length 1000;
    gzip_types
        application/atom+xml
        application/geo+json
        application/javascript
        application/json
        application/ld+json
        application/manifest+json
        application/rdf+xml
        application/rss+xml
        application/x-javascript
        application/xhtml+xml
        application/xml
        font/eot
        font/otf
        font/ttf
        image/svg+xml
        text/css
        text/javascript
        text/plain
        text/xml;
}

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

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

Nginxの設定を確認してください。

sudo nginx -t

Nginxサーバーを再起動します。

sudo systemctl restart nginx

ステップ11 - プレスタショップをインストールする

ブラウザでURL https://prestashop.example.com にアクセスすると、次のインストーラー画面が表示されます。

次へをクリックして、次のページに進んでください。

プレスタショップライセンスが表示されます。ライセンスに同意するには、上記の利用規約に同意しますボタンにチェックを入れ、次へをクリックして進んでください。

次に、店舗に関する情報を共有するよう求められます。店舗に名前、国、タイムゾーン、店舗の種類を付け、SSLオプションを有効にしてください。また、アカウント名、メールアドレス、店舗へのログイン用パスワードを入力してください。完了したら次へをクリックします。

次に、ショップにデモ製品を追加するかどうか尋ねられます。それらが必要ない場合は「いいえ」を選択してください。また、「すべてのモジュールをインストールする」というオプションを選択するか、インストールしたいモジュールを選ぶことができます。完了したら「次へ」をクリックしてください。

次に、ステップ5で作成したデータベースの資格情報を入力します。他のオプションはそのままにしておいてください。接続を確認するためにテストデータベースオプションをクリックしてください。

データベースへの接続が成功したら、次のページに進むために次へをクリックしてください。

ここでは、Prestashopのインストールの進捗を見ることができます。完了すると、自動的に次のページが開きます。

店舗を管理ボタンをクリックして、管理ダッシュボードを開き、店舗の設定を行います。

ここでは、ショップを管理してセキュリティを向上させる前に、installディレクトリを削除することについて警告が表示されます。SSHを介してサイトに再ログインし、次のコマンドを実行してください。

sudo rm -rf /var/www/html/petrashop/install

インストーラーの最終ページに戻り、URLを再度開いてください。管理ページのURLがランダム化されていることに気づくでしょう。これはセキュリティを向上させるためです。Prestashopの各インストールは異なる管理URLを取得します。私たちのチュートリアルでは、生成されたリンクはhttps://prestashop.example.com/admin705saygwpwquwnhixx1です。次のログインページが表示されます。

アカウントの資格情報を入力し、ログインボタンをクリックしてダッシュボードにアクセスしてください。

プレスタショップのデフォルトインストールのストアページは次のようになります。

ここからPrestashopの使用を開始できます。

ステップ12 - プレスタショップの更新

Prestashopを更新する方法はいくつかありますが、最も簡単なのは内蔵のアップグレードアシスタントモジュールを使用することです。あなたのPrestashopインストールには、このモジュールが含まれています。

最初のステップは、ストアをメンテナンスモードにすることです。管理ページの左メニューから設定 >> ショップパラメータ >> 一般オプションをクリックします。ページでメンテナンスタブに切り替えます。

ストアを無効にし、私のIPを追加ボタンをクリックして、メンテナンス用のIPアドレスを追加してください。これにより、ストアがメンテナンス中でもアクセスできるようになります。終了したら、保存ボタンをクリックしてください。

次に、管理パネルの左側から改善 >> モジュール >> モジュールマネージャーオプションを選択して、モジュールマネージャーページを開きます。

そこに行ったら、1-Click Upgradeモジュールをインストールボタンをクリックしてインストールします。インストールが完了したら、設定ボタンをクリックして、アップグレードを実行する前に設定を行う新しいページを開きます。

ページの最初の部分では、アップグレード前のいくつかのチェックがリストされています。アップグレードを実行する前に、すべてのチェックが満たされている必要があります。

最初の設定では、実行したいアップグレードの種類を選択できます。私たちは基本版8.1.1を使用しているため、8.1.2のオープンソース版がアップグレード用に利用可能です。マイナー/メジャーブランチにとどまることが推奨されます。

ページをスクロールダウンして、バックアップオプションに移動してください。ここで、ファイル、データベース、および画像をバックアップするためにPrestashopを選択できます。これらの機能は実験的ですが、それでも含めるべきです。

次に、保持したいものとアップグレードしたいもののオプションを選択してください。

各セクションの保存ボタンをクリックしてオプションを保存してください。満足したら、同じページの今すぐPrestashopをアップグレード!ボタンをクリックしてショップをアップグレードします。アップグレードが何らかの理由で失敗した場合、ロールバックするチャンスが与えられます。

結論

これで、Rocky Linux 9 サーバーに Prestashop をインストールする方法を学んだチュートリアルは終了です。質問がある場合は、下のコメントに投稿してください。

関連記事: