サーバ構築で勉強になったことメモ
>>前提
・OS: AmazonLinux2 minimum10GBらしい
・開発環境: PHP7/Laravel6/MariaDB10.5/Apache2.4
■AmazonLinux2にMariaDBのインストール
最新の安定版ということなので10.5.4が使いたくて。下記を参考に。
[Amazon WorkSpaces]AmazonLinux2にMariaDB10.3インストール - Qiita
新規で下記ファイルを作成
sudo vi /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
んでインストール
sudo yum install MariaDB-server MariaDB-client -y
■Laravel入れるときにずっこけ~のメモリ不足⇒すわっぽんした
メモリ不足でLaravelインストール、composer update失敗 - Qiita
# sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
# sudo chmod 600 /swapfile
# sudo mkswap /swapfile
# sudo swapon /swapfile
# free -m
total used free shared buff/cache available
Mem: 983 69 75 0 838 770
Swap: 2047 0 2047 ←これが増えたらおk
■Laravelで既存のテーブルからModelを作成
・Modelsフォルダ作成
・ここを参考に
Laravel 5.5 既存のデータベースからモデルを一発で逆生成した手順 – oki2a24
$ composer require krlove/eloquent-model-generator --dev
$ php artisan krlove:generate:model Admin --table-name=admin --namespace=App\\Models --output-path=/var/www/html/funya/app/Models
てきなかんじ。
⇒のちに、こんなエラーが。
InvalidArgumentException : Database connection [other-connection] not configured.
at /var/www/html/jamboree/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php:152
これ、「config/eloquent_model_generator.php」の「connection」の設定があかんかったらしく。
記事を参考にother-connectionにしちゃったんだけど、mysqlが正しかった。まぁそりゃそうだよね。ここは接続名を書くところっす。
■apache起動してもページが見れなかったとき確認したこと
・各種.confが正しいか
/etc/httpd/conf/httpd.conf またはそこから読み込んでいるconf
/etc/httpd/conf.d の なんとか.conf(vhosts.confとかvirtual.conf など)
・サーバ見れるのか
Windowsコマンドプロンプトで nslookup [ipアドレス]
・ポート80が動いているか
ターミナルコンソールで lsof -i:80
netstat -nap でも可
https://www.softel.co.jp/blogs/linux/archives/53
・AWS側でポート80を開いているか
(管理者に確認)
■開発するための権限設定
・どうしてもテキストエディタで編集したい、viはきびい
⇒WinSCPなどで開いて編集できるようにしたい
⇒ec2-userで触れるようにしなきゃ
・参考にしたとこ
Linuxの基礎知識 - アクセス権まわりについて - Qiita
ファイルやディレクトリのパーミッションを一括で置換したい - Qiita
・ec2-userをapacheグループに追加
usermod -aG GROUPS USER
・ファイル作成時のデフォルト所有グループは、フォルダのグループを継承
# find /var/www/html/funya -type d -exec chmod 2775 {} +
# find /var/www/html/funya -type f -exec chmod 0664 {} +
# umask 0002
※Laravelの場合これもやった
chmod 755 artisan
■WinSCPでファイル編集はできるけどパーミッションだなんだと怒られ
WinSCPで"パーミッション/タイムスタンプの設定中にエラーが発生しました"について調べてみた - Qiita
「WinSCP」で「パーミッション/タイムスタンプの設定中にエラー」「Permission denied」とメッセージが表示される | 情強ツールズ.com
タイムスタンプの変更が、touchなどではなく、
権限変更も伴うコマンド、preserveなどで行われているらしい。
オプション>環境設定>転送
デフォルト>編集>パーミッションエラーを無視する にチェック!
■MariaDBにテストデータを入れようとして文字化けして怒られ
なんかしらんけど勝手に文字化けした上にこっちが起こられる始末~~~~
MySQL Incorrect string value: の解決策 | テクニカルノート
【MySQL】INSERT INTOで「Incorrect string value」エラーが表示された時の解決方法|たのしいWeb
・DBのcharasetをutf8に設定
SHOW VARIABLES LIKE 'character_set%';
vi /etc/my.cnf
[mysqld]
character-set-server=utf8
[client]
default-character-set=utf8
・各テーブルのcharasetをutf8に設定
すでにcreateしたテーブルには下記SQLを実行。
ALTER TABLE table CONVERT TO CHARACTER SET utf8;
ワイの場合はEclipceでER図を作っているので、
そっちのテーブル定義に「CHARACTER SET utf8」を追記してdrop-create。。
・mysqlとapacheを再起動 systemctl restart mysqlとhttpd
■LaravelのEloquentでデータ取得…あれ?!ま~だ文字化けてる
・↑でやったcharasetの設定が生きてるか確認。
・Laravelのcharasetがutf8か確認
config/database.php がそうなってなかったので下記変更
'charset' => 'utf8mb4', ⇒ 'charset' => 'utf8',
'collation' => 'utf8mb4_unicode_ci', ⇒ 'collation' => 'utf8mb4_unicode_ci',
・そもそもDBに入ってる値が文字化けてないか確認
まじで文字化けてたので、Insertしなおし。。
■CentOSで検証環境を作った時、firewalldを触った
Laravelのインストールまでして、ページが見れなかったので、80を開けた
CentOS 7 firewalld よく使うコマンド - Qiita
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload
CentOSでページは動いた…けど…
■logの書き込みに失敗している?
「The stream or file "/var/www/html/funya/storage/logs/laravel.log" could not be opened」とか怒られた(´・ω・`)
ワイの場合原因はSELinuxだったみたいで。「setenforce 0」したらいけた。
状態確認は「getenforce」で。(Enforcing/Permissive)
■DBのdriverでエラーを起こしている?
「could not find driver」とかまぁた怒られてDB関わるとこ動かん(´・ω・`)
調べたらこんなのが。。
【Laravel】CentOSのLAMP環境でcould not find driver - suzu6
# sudo yum -y install --enablerepo=remi,remi-php74 php-mysqlnd
■動くけどレイアウト崩れが激しい…
画面が白いよう…(´;ω;`) まさにここみたいな状態なので、npm系とわかった。
Laravel6.5 ログイン(login)画面と登録画面(register)画面のレイアウトの崩れを修正 - Qiita
laravelでnpm run devを実行すると「cross-env: not found」というエラーが出る件対応したった - Qiita
・上記を参考にコマンドを打つ。再インストールされてるだけだとおもうけど。。
npm run watch
npm install webpack
npm install
・また、「npm install」した際に「run~」と出てくるコマンドを実行
npm fund(37 packages are~~run `npm fund` for details と出ていた)
npm audit fix(found 1 low severity~~run `npm audit fix` to fix… と出ていた)
もしかしたらfundは関係ないかもだけど、auditは更新系なので重要。
■Cent検証環境にPCのエクスプローラでアクセスできるようにSambaを入れる
・ユーザ追加
useradd smbuser
passwd smbuser
・インストール
yum install samba samba3-winbind samba3-utils
smbd -V
smbpasswd -a smbuser
・SELinux無効化
setenforce 0
getenforce
・Samba設定ファイル修正
vi /etc/samba/smb.conf
※[homes] に追加
path = /var/www/html/funya/
・ファイアウォール設定
firewall-cmd --zone=public --add-service=samba --permanent
firewall-cmd --reload
・Samba再起動
systemctl restart smb
systemctl status smb
⇒\\192.168.xx.xxにアクセスすると、pathに指定したフォルダがみれる!