プログラミングとか英語とか

アプリ開発が趣味

http://profile.hatena.ne.jp/smcmmyr/

zohoサーバーを使ったlaravelのメール設定

一回諦めたけど、諦めきれなくて再チャレンジして成功したので投稿します。備忘録

 

何故メール設定がエラーだったか

 

①DNSのレコード設定が未完了だった

原因不明ですが、zohoサイドでTXTレコードの設定だけ完了されていなく、これが認証できない理由だったようです。

 

②.envの書きかた

.env

この通りです。USERNAMEとFROM_ADDRESSは同じものとする。zohoさんで作ったドメインメールです。

そして、PASSWORDはzohoさんで生成してもらったアプリ専用パスワードを入れます。

 

 

サーバ構築手順書 ubunutu22

1.adduser

2..ssh以下で scp 鍵の名前_rsa.pub username@IP:~/

3.ログインしてmkdir .ssh

4.chmod 700 .ssh

5.cat 鍵の名前_rsa.pub >> .ssh/authorized_keys

6.rm 鍵の名前_rsa.pub

7.chmod 600 .ssh/authorized_keys

8.exitして公開鍵でログインしてみる -i~/.ssh/鍵の名前_rsa.pub

9.rootに移動

10.cp /etc/ssh/sshd_config /etc/ssh/sshd_config.old

11.vim /etc/ssh/sshd_config PORT ROOTLOGIN PASSOWORDの三点

sudo ufw allow 変えた番号 (80 443も)

sudo ufw enable

sudo ufw status numeredで確認

12.systemctl restart ssh.service

ログインし直して確認する

///////////////////////////////////////////////////////////////
// Ubuntu22.04 server create manual
//  php:8.1.2
//  apache:2.4.52
//  mysql:8.0.29
//  laravel:9.13.0
//  composer:2.2.6
//  npm:8.5.1
///////////////////////////////////////////////////////////////
---------------------------------------------------------------
【Ubuntu update】

root下で
sudo apt update -y
sudo apt upgrade -y
---------------------------------------------------------------
【php install】
sudo apt install php -y
sudo apt install php8.1-dom -y
sudo apt install php-curl -y
---------------------------------------------------------------
【composer install】

 

gpasswd -a ユーザー名 sudo
sudo apt install composer -y
---------------------------------------------------------------
【npm install】
sudo apt install npm -y
---------------------------------------------------------------
【mysql install】
sudo apt install php8.1-mysql
sudo apt install mysql-server -y
【mysql setting】
sudo mysql -uroot -p
--> no pass
//////////////////////////////////////////////////////////////
// task in mysql
//////////////////////////////////////////////////////////////
CREATE DATABASE laravel;
CREATE USER 'dbuser'@'localhost' IDENTIFIED BY 'Password_000';
GRANT ALL ON laravel.* TO 'dbuser'@'localhost';
FLUSH PRIVILEGES;
exit;
//////////////////////////////////////////////////////////////
---------------------------------------------------------------
【laravel project create】
cd /var/www/html
sudo composer create-project laravel/laravel AppName
cd AppName
sudo chmod -R 777 ./storage
【env file edit】
sudo vi .env
-->DB_USERNAME = dbuser
-->DB_USERNAME = Password_000
sudo php artisan migrate
---------------------------------------------------------------
【apache setting】アプリ名注意!
sudo vi /etc/apache2/sites-available/000-default.conf
//before//////////////////////////////////////////////////////
        DocumentRoot /var/www/html
//////////////////////////////////////////////////////////////
-->
//after///////////////////////////////////////////////////////
        DocumentRoot /var/www/html/AppName/public
        <Directory /var/www/html/AppName/public>
                AllowOverride All
        </Directory>
//////////////////////////////////////////////////////////////
sudo a2enmod rewrite

exit

 

laravel画面が出るか確認

1./var/www/html/下で sudo git clone https://username@github.......

2.sudo chown -R user:user ./で書き込み権限を付与

3..新しいディレクトリ下でcomposer install

エラーが出たら指示通り--ignore-XXを付けてインストール

4.sudo vi .env
-->DB_USERNAME = dbuserとは異なる名前を付ける

-->DB_USERNAME = Password_000

5.php artisan key:generate

6.php artisan migrate
7.php artisan config:cache

※おかしいとき、systemctl status apache2.serviceでApacheの確認

sudo apt install certbot python3-certbot-apache

cd /etc/apache2/sites-availableして以下にオリジナル.confを

cp 000-default.conf オリジナル.conf

ServerName your_domain
    ServerAlias www.your_domain

sudo service apache2 restart

sudo certbot --apache

 

以下、ファイル変更後はsshと繋げたローカルのVScodeでいつものpushまでして、サーバの対象フォルダ下でgit pullすればOK

※npm install や runなど以外は全てローカルでする

 

一応

php artisan storage:link

Too few arguments to function

laravel8利用。Too few arguments to functionのエラーメッセージが出た時の対応例です。

public function uploadpic(Request $request,$id)

では引数が少ないということですが、何を足せばいいか分からず代わりに$id を取ったら解決しました。

このfunctionでは、idではなくアップロードした画像が$requestであり、$idとは異なるからなんでしょうかね。なんでも、(Request $request, $id)を入れる癖をそろそろ辞めたいですね。

異なるデータテーブルでのデータの利用

laravel8です。コントローラー内で異なるデータテーブルのデータを利用するときの書き方の一例です。

①を書かずに、②に$request->user_nameを入れればいけると思ったのですが、これではデータが取得出来ませんでした。

①を書くことで、新たな変数$tspointがWordテーブルから必要なデータを取得してくれています。そして、$tspointが出来たことで次の行でUserテーブルとWordテーブルと組み合わせて利用できるようになります。

変数、大事ですね!

radioボタンとtextを同じカラムにする

Laravel8です。入力エリアでradioボタンとtext入力を同じカラムに入れたいときの対応例です。

こんな感じで、この二つを同じカラム入れます。

blade画面

この二点を同じカラムに入れるのですが、radioボタンとtextを異なるnameとidに変える必要があります。

Controller画面

もちろん、バリデーションに追加します。そして、ここでDBへの渡し方がポイントです。

        $word->test_name = $request->test_type.$request->test_name;

"."を使うことで二つのデータを結合してくれます。(初めて使ったかも)

セレクトボックスを使ったデータの渡し方

laravel8 です。登録画面に都道府県のプルダウンセレクトメニュー(select box)を作ったときのおさらいです。

①ここでデータテーブルに入れるカラム名を指定します。

②よって、この$keyと$valueはここだけの仮の変数なので、①と重ならないように気を付けてください。

③渡したい変数をここに入れます。

成功です!

$idの使い方・取得(laravel8)

laravel8で作成中。コントローラー内functionでよく使う$id。使い方の一例です。

        $word = Word::find($id);

このコードで$idで受け取ったid番号に紐づいたモデル名Word内にあるデータをfind(採択?)します。このコードを書くことで、以下で$word->が機能します。