CentOS7にLaravelを構成するまでの簡易マニュアル
- 2020.02.29
- php備忘録
- CSS, HTML, Laravel, Laravel設定, MySQL, PHP, サイトとコピー, スクリプト備忘録, テーブル設計, ユーザー認証, 更新, 自作システム
CentOS7にLaravelを構成するまでの簡易マニュアル
Dockerの上の構築に着手したため需要は半減しましたがメモとして記載します。
Dockerではなく、chef / puppet / ansible あたりを使うときにはこれをリストにして登録すれば使える様です。
CentOS7初期設定
ユーザーの追加
rootでログインした状態で
1 |
# useradd ユーザー名 |
パスワードを聞いてこないので自分から作りに行く。
1 |
# passwd ユーザー名 |
パスワードを聞いてくる。2回同じ値を記入
1 |
password: password |
記載後 successfully が出てくれば完了
個人ユーザをwheelグループに参加させる。
sudoの許可
1 |
# usermod -G wheel ユーザー名 |
vimで login.defs を開き編集
1 |
# vim /etc/login.defs |
開いた画面の最後にSUになれるユーザーの限定を追記
1 2 3 |
//Vimで開いた /etc/login.defs の最後に追記 ・・・・ SU_WHEEL_ONLY yes |
/etc/pam.d/su をVimで開く
1 |
# vim /etc/pam.d/su |
6行目辺りのコメントアウトを外す
1 2 3 |
#auth required pam_wheel.so use_uid ↓ auth required pam_wheel.so use_uid |
ROOTのSSHログイン防止
1 |
# vim /etc/ssh/sshd_config |
39行目辺りの次の項目を変更
1 2 3 |
#PermitRootLogin yes ↓ PermitRootLogin no |
selinuxを無効設定
1 |
# vim /etc/selinux/config |
SELINUXの起動状態を修正する
1 2 3 |
SELINUX=enforcing ↓ SELINUX=disabled |
※さくらのCentOS7インストールでは初期値が【disabled】になっている様子
一旦サーバーを再起動
1 |
# reboot |
bash-completionパッケージのインストール
1 |
$ sudo yum install bash-completion |
インストールできたか確認
1 |
$ yum list installed | grep bash-completion |
bash-completion.noarch 1:2.1-6.el7 @base の様に出てきたら導入完了
※さくらのCentOS7インストールでは自動的にインストールされている様子
firewalld の設定
ファイヤーフォールを起動
1 |
$ sudo systemctl start firewalld |
設定されているファイアウォールを確認する
1 |
$ sudo firewall-cmd --list-all |
※初期値は dhcpv6-client ssh のみだと思われる。
http、https、pop3、pop3s、smtp、smtps、ftp、3306、8000ポートを許可する
1 2 3 4 5 6 7 8 9 |
$ sudo firewall-cmd --add-service=http --permanent $ sudo firewall-cmd --add-service=https --permanent $ sudo firewall-cmd --add-service=pop3 --permanent $ sudo firewall-cmd --add-service=pop3s --permanent $ sudo firewall-cmd --add-service=smtp --permanent $ sudo firewall-cmd --add-service=smtps --permanent $ sudo firewall-cmd --add-service=ftp --permanent $ sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent //MYSQL用のポート $ sudo firewall-cmd --zone=public --add-port=8000/tcp --permanent //Laravel用のポート |
–permanentを付ける事で恒久化する。一時的に開放したいときはこれを外せばOK。
設定が終わったら念のためサービスを再読込
1 |
$ sudo firewall-cmd --reload |
設定の反映を確認
1 |
$ sudo firewall-cmd --list-all |
※注意:さくらのサーバーの場合、Serverのコンソール画面で設定されているパケットフィルタで開いてない場合は出ていかない。
間違えて設定して削除するとき
1 |
$ sudo firewall-cmd --remove-port=3606/tcp |
firewallの自動起動設定
1 2 3 4 |
$ sudo systemctl enable firewalld.service //現状の確認は下コマンド $ sudo systemctl is-enabled firewalld //結果がenabledならOK |
日本語ロケールの設定
在のロケールの確認
1 |
$ localectl status |
下の状態だと英語のロケールになっている
1 2 3 |
System Locale: LANG=C VC Keymap: jp X11 Layout: jp |
ロケールの変更
1 |
$ sudo localectl set-locale LANG=ja_JP.utf8 |
$ localectl status して【 System Locale: LANG=ja_JP.utf8 】だったら成功
Apacheの設定
Apacheのインストール
1 |
$ sudo yum -y install httpd |
Apacheの起動
1 |
$ sudo systemctl start httpd |
確認したかったら以下のコマンドで
1 |
$ sudo systemctl status httpd |
Apacheの自動起動を設定
1 |
$ sudo systemctl enabled httpd.service |
※解除したいときは【systemctl disable サービス名.service】
remiレポジトリの追加
PHP5.4系が無い事を確認
1 |
$ sudo yum list installed | grep php |
パッケージ情報が返ってきたら削除
1 |
$ sudo yum remove php*//PHPパッケージ |
remiレポジトリの設定
1 |
$ sudo yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm |
インストール成功の確認
1 2 3 |
$ cd /etc/yum.repos.d/ $ ls //※ファイルがあればOK |
remiレポジトリの追加の確認
1 |
$ sudo yum -y install --enablerepo=remi,remi-php73 php php-devel php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql |
インストールされたPackageの確認
1 |
$ yum list installed | grep php |
PHPの初期設定
行う事は下の4点
- 最低限のセキュリティ設定
- アップロードサイズの変更(2Mから20MBへ)
- タイムゾーンの設定
- マルチバイト対応(日本語対応)
念のため初期値のバックアップ
1 |
$ sudo cp -p /etc/php.ini /etc/php.ini.org |
設定変更
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
$ sudo vim /etc/php.ini ---------- //アップロードサイズの変更(2Mから20MBへ) #693行目 post_max_size = 8M ⇒ post_max_size = 20M #845行目 upload_max_filesize = 2M ⇒ upload_max_filesize = 20M //タイムゾーンアウト時間の変更 #873行目 default_socket_timeout = 60 ⇒ default_socket_timeout = 240 //タイムゾーンの設定 #922行目 ;date.timezone = ⇒ date.timezone ="Asia/Tokyo" //マルチバイト対応(日本語対応) #1535行目 ;mbstring.language = Japanese ⇒ mbstring.language = Japanese #1542行目 ;mbstring.internal_encoding = ⇒ mbstring.internal_encoding = UTF-8 #1550行目 ;mbstring.http_input = ⇒ UTF-8 #1560行目 ;mbstring.http_output = ⇒ mbstring.http_output = pass #1568行目 ;mbstring.encoding_translation = Off ⇒ mbstring.encoding_translation = On #1573行目 ;mbstring.detect_order = auto ⇒ mbstring.detect_order = auto #1578行目 ;mbstring.substitute_character = none ⇒ mbstring.substitute_character = none ---------- |
採用を適応させるためService再起動
1 |
$ sudo systemctl restart httpd |
httpd側にphpがモジュールとして組み込まれていることを確認
1 |
$ sudo httpd -M | grep php |
php7_module (shared) が返されたら成功
MySQLのインストールと設定
MySQLのインストール
MariaDBのライブラリの消去
1 |
$ sudo yum remove mariadb-libs |
MySQLのインストール
1 2 |
$ sudo rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm $ sudo yum install -y mysql-community-server |
サービスの起動と永続化
1 2 |
$ sudo systemctl start mysqld.service $ sudo systemctl enable mysqld.service |
rootの初期パスワードを確認
1 |
$ sudo grep password /var/log/mysqld.log |
下の様に出てくる
1 2 |
2020-02-21T03:27:54.841071Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: BmeQr<bsV0Ia |
上のコマンドで出てきたrootのパスワード(BmeQr<bsV0Ia)を控えて変更
1 |
$ sudo mysql_secure_installation |
パスワードを登録すると会順に5つの質問が出てくるので解答する。
1 2 3 4 5 |
# 変更したパスワード(ROOT)を確定するか |y(確定して次へ) # 匿名ユーザ( anonymous user )を削除するか |y(Success.と表示され削除完了) # リモートから root ユーザでログイン禁止 |y(Success.と表示され禁止設定完了) # test データベースの削除をするか |y(Success.と表示され削除完了) # 権限テーブルをリロードして変更を有効化 |y(Success.と表示され権限テーブルの変更を有効化) |
MySQLの認証方法を変更
MySQLにログイン
1 |
$ mysql -u root -p |
パスワードを聞かれるので先程変更したパスワードを記載してログイン
ROOTの認証方法を変更
1 |
mysql> alter user 'root'@'localhost' identified with mysql_native_password by 'New_P@ssw0rd!'; |
今後作成するユーザーの方法も変更
1 |
$ sudo vim /etc/my.cnf |
[mysqld]内に以下の内容を追記
1 2 3 4 |
default_authentication_plugin=mysql_native_password //ポートを変更する時 port = 3330 |
MySQLに新規ユーザーとデータベースを登録
mysqlにrootでログインする
1 |
$ mysql -u root -p //※エンター後パスを記載してログイン |
ユーザーを追加
1 2 3 4 5 6 7 8 9 10 |
//同一サーバー内でログイン可能 create user 'user01'@'localhost' identified by 'password'; create user 'user01'@'127.0.0.1' identified by 'password'; //外部からのアクセス可能 create user 'user01'@'外部サーバーのIPアドレス' identified by 'password'; create user 'user01'@'外部サーバーのドメイン名' identified by 'password'; //どこからでもアクセス可能 create user 'user01'@'%' identified by 'password'; |
データベースの作成
1 |
CREATE DATABASE データベース名; |
権限の設定
1 2 3 4 5 6 7 8 |
//全てのデータベースへのアクセスを許可 grant All on *.* to 'user01'@'localhost'; //データベース【sample】へのアクセスを許可 grant All on sample.* to 'user01'@'localhost'; //データベース【sample】の中のテーブル【test】へのみアクセスを許可 grant All on sample.test to 'user01'@'localhost'; |
Laravelの場合、.envなどでDataBaseへアクセスする際のユーザー名の設定がある。
この設定したuser名のユーザーを作成し適切な権限を与えてあげれば接続エラーは発生しない。
phpMyAdminのインストール
1 |
$ sudo yum --enablerepo=remi-php73 install phpmyadmin |
phpMyAdminの設定を行う ※アクセス先とWEBでのアクセス許可を行う
1 |
$ sudo vim /etc/httpd/conf.d/phpMyAdmin.conf |
アクセス先の変更(phpMyAdmin.conf内の8行目あたり)
1 2 3 4 5 |
Alias /phpMyAdmin /usr/share/phpMyAdmin Alias /phpmyadmin /usr/share/phpMyAdmin ↓ Alias /php_my_admin_3948375823 /usr/share/phpMyAdmin #Alias /phpmyadmin /usr/share/phpMyAdmin |
変更前の設定ではhttp://【IP/Domain】/phpMyAdmin と http://【IP/Domain】/phpmyadmin で phpMyAdminが呼び出される。
この2つのアドレスは不正アクセスが非常に多いアドレスの為、絶対に変更が必要。
避けるべきURLについてはこちらをご参照ください ⇒ phpMyAdminを狙ったと思われる不正アクセスURL(攻撃対象URL)を晒します。
上の例では標準アドレスのアクセスでは404エラーとなり http://【IP/Domain】/php_my_admin_3948375823 でのアクセスへ変更している。
不正アクセス対策なので値は何でもよいが、推測されやすいものだけは避ける事。(以下:例)
Alias /php/my/admin/access/database /usr/share/phpMyAdmin ⇒ URL:http://【IP/Domain】/php/my/admin/access/database
phpMyAdmin.conf のその他設定変更
1 |
$ sudo vim /etc/httpd/conf.d/phpMyAdmin.conf |
変更は設置の環境に合わせて行う。
以下の内容はCentOS7+SSL未設定の時の例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<Directory /usr/share/phpMyAdmin/> AddDefaultCharset UTF-8 # SSLRequireSSL <IfModule mod_authz_core.c> # Apache 2.4 # <RequireAny> # Require ip 127.0.0.1 # Require ip ::1 # </RequireAny> Require all granted </IfModule> <IfModule !mod_authz_core.c> # Apache 2.2 Order Deny,Allow Deny from All Allow from 127.0.0.1 Allow from ::1 </IfModule> </Directory> <Directory /usr/share/phpMyAdmin/setup/> <IfModule mod_authz_core.c> # Apache 2.4 Require local # <RequireAny> # Require ip 127.0.0.1 # Require ip ::1 # </RequireAny> </IfModule> <IfModule !mod_authz_core.c> # Apache 2.2 Order Deny,Allow Deny from All Allow from 127.0.0.1 Allow from ::1 </IfModule> </Directory> |
CentOS7+SSL設定の時の例は以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<Directory /usr/share/phpMyAdmin/> AddDefaultCharset UTF-8 SSLRequireSSL <IfModule mod_authz_core.c> # Apache 2.4 Require all granted </IfModule> <IfModule !mod_authz_core.c> # Apache 2.2 Order Deny,Allow Deny from All Allow from 127.0.0.1 Allow from ::1 </IfModule> </Directory> <Directory /usr/share/phpMyAdmin/setup/> <IfModule mod_authz_core.c> # Apache 2.4 Require local </IfModule> <IfModule !mod_authz_core.c> # Apache 2.2 Order Deny,Allow Deny from All Allow from 127.0.0.1 Allow from ::1 </IfModule> </Directory> |
別サーバーに元データがある時のデータベース移動
元サーバー(mysqldumpの後) から 新規サーバー(| sshの後)の 指定のDB(user2、password2)にテーブルをコピーする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ mysqldump -u user2 -ppassword2 -n database01 | ssh user01@サーバーIP mysql -u user2 -ppassword2 database01 -P ポート番号 //以下条件の時の記述例 # HostサーバーのMySQLログインID:user01 # HostサーバーのMySQLログインパスワード:password01 # Hostサーバーのコピーしたいデータベース:DataBase01 # コピー先サーバーのIPアドレス:192.168.1.10 # コピー先サーバーのログインID:USER02 # コピー先サーバーのログインパスワード:PASSWORD02 # コピー先サーバーのMySQLログインID:user2 # コピー先サーバーのMySQLログインパスワード:password2 # コピー先サーバーのコピー先データベース:DataBase02 # コピー先サーバーのMySQLポート:3306 $ mysqldump -u user01 -ppassword01 -n DataBase01 | ssh USER02@192.168.1.10 mysql -u user2 -ppassword2 DataBase02 -P 3306 |
構築している状況によっては、パスワードまで含めてワンライナーで記載する事を怒られるときがある。
その場合は-p の後を空白にし、都度パスワードを入れていく方式をとる。
上の例の場合は、SSHの接続パスワードは聞かれるので打ち込みログイン処理をする。
※注意:コピー先サーバーからのアクセス(輸入)ではなくコピー元からのアクセス(輸出)であるため、コピー先のポート開放を忘れない事。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
と出てきてDBがコピーできない時。
SSH接続の【接続先サーバー情報(フィンガープリント)】が変わっている為これが邪魔してSSH接続が出来ない状態。
フィンガープリントを削除する事で想定の動きになる。
1 |
$ ssh-keygen -R 【接続するサーバーのIP】 |
HOST(コピー元)の DBへの新規サーバーからのアクセスを許可する
コピー元の特定のDBへのアクセスを許可する場合はコピー元での設定が必要。
※ユーザー作成時に ‘user名’@’%’ で作成している場合はどこからのアクセスも許可するため不要。
まずmysqlにログイン
1 |
mysql -u ユーザー名 -p |
ログイン後、ユーザーの追加と権限設定
1 2 |
create user '【ユーザー名'@'【新規サーバーのIP】' identified by '【ログインパスワード】'; grant All on sales_app_announce.* to '【ユーザー名】'@'【新規サーバーのIP】'; |
Laravelインストールと設定
Laravelの動作にはcomposerが必須となるため、まずcomposerを入れる。
Composerのインストール
ダウンロードして名称変更・移動
1 2 |
$ sudo curl -sS https://getcomposer.org/installer | php $ sudo mv composer.phar /usr/local/bin/composer |
Laravelのインストール
zipをインストール
1 |
$ sudo yum install -y zip unzip |
システムの共通場所へ移動する。(インストールするための準備)
1 |
$ cd /var/www/html |
保管場所はどこでもよい。
後で httpd.confで指示すればドキュメントルートに設定できるのでわかりやすい場所であれば問題ない。
ただし、homeの自分のディレクトリ内 cd ~ だと別のユーザーから見る事が出来ず、システム修正に他者の力を借りる事が出来ないのでココだけは避ける。
自分で作る場合はパーミッションを 777でフォルダを用意する。
※後で775に変えても良いが777出ないと権限エラーが発生する
1 2 |
$ sudo mkdir -m 777 html $ cd html |
Laravelプロジェクトの作成
1 |
$ composer create-project laravel/laravel /var/www/html/プロジェクト名 |
Laravelプロジェクトの起動:これで8000ポートで動く
1 2 |
$ cd /var/www/html/プロジェクト名 $ nohup php artisan serve --host 0.0.0.0 > out.log 2> err.log < /dev/null & |
http://サーバーIPアドレス:8000 へアクセスして初期画面が表示されるか確認する。
作成済みファイル(システム)のコピー
作成済みのLaravelデータがある場合は、Folder全体をそのまま新しいサーバーへコピーする。
コンソールを利用して他サーバから情報をコピー ※新規サーバー内での処理
1 2 3 4 5 |
//コピー先フォルダへ移動 $ cd /var/www/html/プロジェクト名/ //コピー実行 $ sudo scp -pr user01@コピー元IPアドレス:/var/www/html/プロジェクト名/ ./ |
※中途半端にデータの移動を実行するとエラーが多発し動かないので注意
うまくいかなかったらやり直し
1 2 |
//ディレクトリの削除 $ sudo rm -r /var/www/html/プロジェクト名 |
httpd.confの修正
設定を変更して80番でLaravelを稼働させる
1 |
$ sudo vim /etc/httpd/conf/httpd.conf |
以降変更箇所
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//86行目 ServerAdmin(連絡先メールアドレス)を変更 ServerAdmin ****@***.*** //メールアドレスを変更 //119行目 DocumentRootを変更 DocumentRoot "/var/www/html/プロジェクト名/public" //123行目を変更 <Directory "/var/www/html/プロジェクト名/public"> //131行目を変更 <Directory "/var/www/html/プロジェクト名/public"> //247行目を変更 ScriptAlias /cgi-bin/ "/var/www/html/cgi-bin/" //255行目を変更 <Directory "/var/www/html//cgi-bin/"> //末尾を変更 IncludeOptional /etc/httpd/conf.d/*.conf |
Apacheを再起動
1 |
$ sudo systemctl restart httpd |
ファイルの権限設定をする
この設定をしないと、logへの書き込みやキャッシュでエラーが発生するので忘れない事
権限グループを作りApacheを含めた必要なユーザーをこのグループに所属させる。
グループの作成
1 |
$ sudo groupadd PROJECT_NAME |
グループにユーザーを所属
1 2 3 |
$ sudo gpasswd -a user01 PROJECT_NAME $ sudo gpasswd -a apache PROJECT_NAME $ sudo gpasswd -a USER02 PROJECT_NAME //外部から接続するユーザー |
プロジェクトのディレクトリに移動
1 |
cd /var/www/html/PROJECT_NAME |
ファイルのとフォルダのパーミッションを統一
1 2 |
$ sudo find ./ -type d -exec chmod 755 {} \; $ sudo find ./ -type f -exec chmod 644 {} \; |
storageとbootstrap/cacheの所有グループを変更
1 2 |
$ sudo chown -R :PROJECT_NAME ./storage $ sudo chown -R :PROJECT_NAME ./bootstrap/cache |
既存のディレクトリ・ファイルに対して変更
1 2 3 4 |
$ sudo find ./storage -type d -exec chmod 775 {} \; $ sudo find ./storage -type f -exec chmod 664 {} \; $ sudo find ./bootstrap/cache -type d -exec chmod 775 {} \; $ sudo find ./bootstrap/cache -type f -exec chmod 664 {} \; |
SGIDを設定し、誰がどう作成しようが、storage とbootstrap/cache に作成されたファイル・ディレクトリの所有グループをPROJECT_NAMEにする
1 2 |
$ sudo find ./storage -type d -exec chmod g+s {} \; $ sudo gfind ./bootstrap/cache -type d -exec chmod g+s {} \; |
ACLのデフォルト設定し、storageとbootstrap/cacheの配下に新規ファイルやディレクトリが作られるとき、ディレクトリは775に、ファイルは664に自動的に設定してくれるように設定
1 2 |
$ sudo setfacl -R -d -m g::rwx ./storage $ sudo setfacl -R -d -m g::rwx ./bootstrap/cache |
サーバーを再起動して設定を適応
1 |
$ sudo reboot |
In trustedproxy.php line 66: Undefined class constant ‘HEADER_CLIENT_IP’ 対策
composer.jsonの値がLaravelと異なる事が原因で上記エラーが発生している。
コピー元のcomposer.jsonでコピー先を上書きし、その後 composer updateで修正。
#変更される箇所
“php”: “>=7.1.3”,
“fideloper/proxy”: “^4.0”,
“laravel/framework”: “5.7.*”,
“laravel/tinker”: “~1.0”,
Class ‘Intervention\Image\ImageServiceProvider’ not found 対策
画像エフェクトのプラグインが入っていないために発生している。
プラグインをインストールして終了
1 |
$ composer require intervention/image |
他にもプラグインが足りない時同様【 Class ‘Intervention\~~~~’ not found】のエラーが発生するので、その都度対応する。
うまく起動しない時のcacheクリア
特に移動直後は【./bootstrap/cache/config.php】の影響などで起動しない時が多い。
その時はまず、キャッシュクリアを試す。
プロジェクトのディレクトリに移動
1 |
cd /var/www/html/PROJECT_NAME |
すべてのcacheを削除
1 2 3 4 5 6 7 8 |
$ php artisan optimize:clear //個別に削除する場合は以下のコマンド $ php artisan clear-compiled $ php artisan config:clear $ php artisan route:clear $ php artisan cache:clear $ php artisan view:clear |
viewを除くすべてのcacheを作成
1 2 3 4 5 |
$ php artisan optimize //個別に作成するときは以下のコマンド $ php artisan config:cache $ php artisan route:cache |
Viewのcacheを作成
1 |
$ php artisan view:cach |
カーボンのインストール
使っている所でしかエラーが出ないため忘れがちになるが忘れない事。
使っていない場合は無視してよい。
1 |
$ composer require nesbot/carbon |
参考サイト
https://www.rem-system.com/centos-httpd-php73/
まとめ
Server立ち上げからLaravelのコピーまで、とりあえずこれで一通り可能です。
Dockerでの構築の場合はちょっと変わってくるため現在修行中。
-
前の記事
phpMyAdminを狙ったと思われる不正アクセスURL(攻撃対象URL)を晒します。 2020.02.29
-
次の記事
Laravel:Base table or view not found: 1146 Table ‘DataBase.staff’ doesn’t exist の罠 2020.03.02
コメントを残す