目的
ローカル環境で開発していたLaravelのプロジェクトをVPSに乗せるための準備です。
OSバージョン
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS"
Nginxのインストール
$ sudo apt update
$ sudo apt install nginx
インストールが完了して、ブラウザ上からホスト名でアクセスすると以下のページが表示されると思います。
セキュリティ設定
ufwによるファイアウォール設定
Ubuntu 18.04ではファイアウォールパッケージとしてufw
(Uncomplicated Firewall)がインストールされています。
SSH(22)とHTTP(80)、HTTPS(443)のNginxへの接続を許可します。
$ sudo ufw allow 'Nginx HTTP'
$ sudo ufw allow 'Nginx HTTPS'
$ sudo ufw enable
ufw
コマンドに関しては下記の記事が大変参考になりました。
ufw
コマンドの使い方 https://qiita.com/hana_shin/items/a630871dce209cff04f3
fail2banでアクセス制限設定
ufw
と一緒にサーバへの攻撃をモニターして、保護してくれるfail2ban
も導入します。
こちらはインストールして、サービスを起動するだけでOKです。
$ sudo apt install fail2ban
$ sudo service fail2ban start
Nginxの設定
nginx.conf
Nginxの設定ファイルであるnginx.conf
を修正します。
$ sudo vim /etc/nginx/nginx.conf
-
user
をwww-dataからsshのログインユーザに変更します -
server_token
のコメントアウトを外します - 必要があれば
client_max_body_size
を追加します
これはnginxがPOSTの最大サイズを設定するための項目です(デフォルトは1MB)
fastcgi_params
NginxでPHPを動かすためにはfastcgi_params
も修正します。
fastcgi_params
を開いて、末尾に下記を追加します。
$ sudo vim /etc/nginx/fastcgi_params
↓追加します
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
↑追加します
追加したら構文チェックのために下記を実行します
問題なければ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
$ sudo service nginx restart
PHP 7.4 のインストール
Ubuntu18.04でPHP 7.4をインストールするにはondrej/php
レポジトリを追加する必要があります
$ sudo apt install software-properties-common
$ sudo add-apt-repository ppa:ondrej/php
追加できたら一度リポジトリ一覧を更新し、モジュールと一緒にPHP 7.4をインストールします
$ sudo apt update
$ sudo apt install php7.4-fpm php7.4-common php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-curl php7.4-gd php7.4-imagick php7.4-cli php7.4-dev php7.4-imap php7.4-mbstring php7.4-opcache php7.4-soap php7.4-zip unzip -y
php 7.4およびモジュールが正しくインストールされているか下記コマンドで確認します
$ php -v
$ php-fpm7.4 -v
$ php -m
$ sudo vim /etc/php/7.4/fpm/pool.d/www.conf
user = username
group = username
listen.owner = username
listen.group = username
変更できたらphp-fpmの構文チェック、再起動を行います
$ sudo php-fpm7.4 -t
$ sudo service php7.4-fpm restart
NginxでPHPを実行する
sites-available/default
sites-available/default
を開いて、下記のように修正します。
indexにindex.phpを追加します
index index.php index.html index.htm index.nginx-debian.html;
location ~ .php$ {の記述があれば閉じ括弧も含めてコメントアウトを外します
なければ追加してください
location ~ \.php$ {
}
括弧内に# fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;のような記述があれば以下のように書き換えてコメントアウトを外します
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
最後に括弧内にinclude fastcgi_params;
を追加します
設定例
index index.php index.html index.htm index.nginx-debian.html;
...略...
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
# With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
}
/var/www/htmlにindex.php
を作成します。
<?php
phpinfo();
ここまでできたらnginxを再起動させてブラウザ上からホスト名でアクセスします。
$ sudo nginx -t
$ sudo service nginx restart
親の顔より見た(?)画面が表示されましたね!
MySQL 5.7 のインストール
aptコマンドでインストールします。
$ sudo apt install mysql-server
次のコマンドでMySQLのセキュリティ設定を行います。
$ sudo mysql_secure_installation
設定方法は下記URLが参考になります。
https://weblabo.oscasierra.net/mysql-57-init-setup/
rootパスワードが設定できたらDBとユーザを作成します。
※'DATABASE_NAME'、'YOUR_NAME'、'YOUR_PASSWORD'には任意の値を適宜書き換えてください
$ mysql -u root -p
mysql> CREATE DATABASE 'DATABASE_NAME';
mysql> CREATE USER 'YOUR_NAME'@'localhost' IDENTIFIED BY 'YOUR_PASSWORD';
mysql> GRANT ALL PRIVILEGES ON DATABASE_NAME.* TO 'your_name'@'localhost';
作成できたら 設定したユーザとパスワードでMySQLサーバにアクセスできるか確認しましょう。
mysql> exit;
$ mysql -u 'YOUR_NAME' -p
最後に、index.phpを以下のように変更し、PHPでMySQL接続確認を行います。
<?php
define('DB_HOST', 'localhost');
define('DB_USER', 'YOUR_NAME');
define('DB_PASSWORD', 'YOUR_PASSWORD');
define('DB_NAME', 'DATABASE_NAME');
// エラー表示設定:通知系以外全て表示
error_reporting(E_ALL & ~E_NOTICE);
try {
$dbh = new PDO('mysql:'.DB_NAME.';'.DB_HOST, DB_USER, DB_PASSWORD);
print('接続しました。');
}
catch(PDOException $e){
print('ERROR:'.$e->getMessage());
exit;
}
以下の画面が表示されたら、ミドルウェアのセットアップ完了です。お疲れ様でした
参考ページ:
https://www.cloudbooklet.com/install-php-7-4-on-ubuntu/
https://stackoverflow.com/questions/25591040/nginx-serves-php-files-as-downloads-instead-of-executing-them
https://teratail.com/questions/137445