【作業メモ】Sakura VPSの CentOS7.x をLaravelのWebサーバーとして利用する
今回は、Sakura VPSのCentOS7環境にnginx, php, php-fpmなどのミドルウェアをインストールした際の作業ログを残しておきたいと思います。
[ 目次 ]
はじめに
こんにちは、香港に住んでいるWEBデベロッパーのなかむ(@nakanakamu0828)です。
久しぶりにCentOS7で商用環境の構築を行いました。Dockerなどモダンなコンテナ環境を利用するわけでもなく、ミドルウェアをインストールし基本となるサーバーの設定を行っています。
そんな作業ログを残しておきたいと思います。
環境はSakuraのVPSで、CentOS7にLaravel用のWebサーバーを構築していきます。
DBサーバーは別途MySQLサーバーが用意されているので、今回の構築作業からは除外します。
環境 | バージョン |
---|---|
サービス | Sakura VPS |
OS | CentOS Linux release 7.6.1810 (Core) |
カーネル | 3.10.0-327.36.3.el7.x86_64 |
nginx | 1.15.8 |
PHP | 7.3.1 |
php-fpm | v3.3.1 |
rootユーザーでログイン
初期はrootユーザーしか用意されていません。
$ ssh root@xxx.xxx.xxx.xxx
passwordはSakuraの管理画面からOSインストール時に設定したものを使います。
yumを更新
# yum update -y
ホスト名を設定
# vi /etc/sysconfig/network
HOSTNAME=[host name]
# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
↓
127.0.0.1 [host name] localhost localhost.localdomain localhost4 localhost4.localdomain4
Bashプロンプト設定
プロンプトの設定をカスタマイズすることでどのサーバーにアクセスしているかわかりやすくしています。
# vi /etc/profile.d/prompt.sh
export NICKNAME=[name]
set_ps1() {
local _PS1
if [ $UID = 0 ] ; then
#root
_PS1="\[\033[1;31m\][\u@\h \W]#\[\033[0m\] "
else
_PS1="[\e[1;32m\u\e[00m@\e[1;32m\h\e[00m \e[1;33m\w\e[00m] (\e[1;34m$1\e[00m)\n$ "
fi
export PS1=$_PS1
}
set_ps1 "[name]"
MariaDB インストール
DBサーバーは別になるためクライアントのみインストールします。
接続のテストや直接SQLコマンドを実行できるようにする為です。
# vi /etc/yum.repos.d/mariadb.repo
# MariaDB 10.1 CentOS repository list - created 2016-01-06 10:34 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
enabled=1
# yum -y install MariaDB-devel MariaDB-client
Git インストール
# yum -y install git
ユーザー作成
今回は一般ユーザーとしてdevelopユーザーを作ることを想定しています。
# useradd develop
# su - develop
$ ssh-keygen -t rsa -b 2048
$ mv .ssh/id_rsa.pub .ssh/authorized_keys
$ # rootに戻る
$ exit
ローカルPCからdevelopユーザーにアクセスするためには、ローカルPCの公開鍵をdevelopユーザーの~/.ssh/authorized_keys
に追加します。
$ echo "keykeykey" >> ~/.ssh/authorized_keys
sudoの設定
developユーザーで、root権限の作業がしたくなる場合もあるのでsudoを設定しておきます。
# visudo
%develop ALL=(ALL) NOPASSWD: ALL
今回は全ての権限をsudoで与えてしまいましたが、セキュリティを考慮して適した設定を行なってください。
SSHポート変更
SSHのポートを変更して、22ポートに接続してくる輩を防ぎましょう。
# cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.org
# vi /etc/ssh/sshd_config
# # 今回は2222ポートに変更
Port 22
↓
Port 2222
# systemctl restart sshd
SSHのrootログイン拒否
外部からrootユーザーに直接ログインできないようにします
# vi /etc/ssh/sshd_config
# # 79行目:パスワード認証不可に変更
PasswordAuthentication no
# # 83行目:no になっていることを確認
ChallengeResponseAuthentication no
# # 110行目:yes になっていることを確認
UsePAM yes
# systemctl restart sshd
ファイアーウォール設定
以下ポートへの外部アクセスを許可します。
Protocol | Port |
---|---|
ssh | 2222 |
http | 80 |
https | 443 |
# firewall-cmd --list-all
# sshはポートを変更したので修正
# firewall-cmd --permanent --remove-service=ssh
# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-2222.xml
# vi /etc/firewalld/services/ssh-2222.xml
<port protocol="tcp" port="22"/>
↓
<port protocol="tcp" port="2222"/>
# firewall-cmd --permanent --add-service=ssh-2222
# firewall-cmd --reload
# # http, httpsへのアクセスを追加
# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --permanent --zone=public --add-service=https
# firewall-cmd --reload
nginx インストール
# vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1
# yum -y --enablerepo=nginx install nginx
php73 インストール
# yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
# yum remove php*
# yum install --enablerepo=remi,remi-php73 php php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt php-mysqlnd php-fpm
# vi /etc/php-fpm.d/www.conf
user = nginx
group = nginx
listen.owner = nginx
listen.group = nginx
listen.mode = 0666
;listen = 127.0.0.1:9000
listen = /var/run/php-fpm.sock;
composer インストール
$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php composer-setup.php
$ php -r "unlink('composer-setup.php');"
$ su -
# # rootユーザーでmvする
# mv composer.phar /usr/local/bin/composer
# exit
$ # composerコマンドが利用できるようになります
$ composer
Nginxでbasic認証
# htpasswd -c /etc/nginx/.htpasswd username
New password: password
Re-type new password: password
Adding password for user username
nginxの設定ファイルに以下を追加
server {
・・・・
location / {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
最後に
今回はLaravelのWebサーバーの基本となるミドルウェアを中心に作業をまとめました。
実際は、
- Let's Encryptのインストール
- nginxのhttp2での接続設定(SSL対応)
- Laravelのセットアップ
- ウィルス対策ソフトのインストール
なども行っているのですが、別の記事として今後まとめていければと思います!
追記(2019/1/29)
いつもウィルス対策ソフトは、ClamAV を利用しています。
CentOS7へclamavインストール(epelリポジトリ使用) の記事を参考にさせてもらっています。
皆さんも参考にしてみてください🙇🏻