TIL2025年1月13日-ConohaVPS

環境構築

環境

  • CentOS Stream9
  • 512MB

 

ssh接続

  • 接続
ssh -i 1-13.pem root@IPアドレス

 

 

再構築のためホストが変わった警告がでます

  • WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
  • まずknown_hostsから削除(今回は再構築のため削除)します
ssh-keygen -R 160.251.234.68    

 

 

権限がないためkey-pairにアクセスできない警告がでます

  • WARNING: UNPROTECTED PRIVATE KEY FILE!
  • 600の権限をつけておきます
chmod 600 1-13.pem

 

 

 

laravelプロジェクトの構築★

 

アプリの作成

  • 自動でsqliteのデータベース作るので後ほど修正します
composer create-project --prefer-dist laravel/laravel coffee-laravel
cd coffee-laravel

 

mysqlに変更

  • ローカルのmysqlを使う設定に変更します
#.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=root
DB_PASSWORD=

 

  • ローカルのmysqlでデータベースを作ります
  • ※2回目からは違います!
mysql -u root -p
CREATE DATABASE laravel_db;
EXIT;

 

  • マイグレーションを実行します
php artisan migrate

 

アプリの起動確認

php artisan serve

 

 

 

サーバーの準備

インストール

#1.必要なパッケージをインストール
sudo dnf update -y
sudo dnf install -y epel-release
sudo dnf install -y nginx php php-fpm php-mysqlnd mariadb-server git unzip
#2.サービスを起動
sudo systemctl enable --now nginx
sudo systemctl enable --now php-fpm
sudo systemctl enable --now mariadb

 

 

mysqlの設定

sudo mysql_secure_installation

Enter current password for root (enter for none):enter

Switch to unix_socket authentication [Y/n]n

Change the root password? [Y/n]Y

New password:

Re-enter new password:

Remove anonymous users? [Y/n]Y

Disallow root login remotely? [Y/n]Y

Remove test database and access to it? [Y/n]Y

Reload privilege tables now? [Y/n]Y

 

 

 

プロジェクトの転送★

プロジェクトをサーバーにコピー

  • 大変時間がかかるので、githubからcloneしたほうが無難
scp -r -i ~/.ssh/24-7-13/1-13.pem ./coffee-laravel root@サーバーのipアドレス:/var/www/coffee-laravel

 

 

サーバー上で権限設定

sudo chown -R nginx:nginx /var/www/coffee-laravel
sudo chmod -R 775 /var/www/coffee-laravel/storage /var/www/coffee-laravel/bootstrap/cache

 

 

nginxの設定 *2回目からは違います!

sudo vim /etc/nginx/conf.d/coffee-laravel.conf

 

server {
    listen 80;
    server_name kkappservice.com www.kkappservice.com;

    root /var/www/coffee-laravel/public;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ .php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ /.ht {
        deny all;
    }
}

 

設定をテストして再起動します

sudo nginx -t
sudo systemctl restart nginx

 

 

Laravelの設定と動作確認

composerのインストール

cd /usr/local/bin
sudo curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

 

  • インストールの確認
composer --version

 

 

phpのアップデート

  • php8.2に変更します
  • レポジトリの更新
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpm
sudo dnf module reset php
sudo dnf module enable php:remi-8.2

 

  • php8.2をインストール
sudo dnf install -y php php-cli php-fpm php-mysqlnd php-xml php-json php-mbstring

 

  • インストールの確認
php -v

 

 

依存関係をインストール★

  • 2回目以降はバージョンの違いに注意が必要です。
cd /var/www/coffee-laravel
composer install

 

 

mysqlの確認

設定ファイル

/etc/my.cnf.d/mariadb-server.cnf

 

#bind-address=0.0.0.0

 

  • コメントアウトされていれば、デフォルトで127.0.0.1:3306です

 

パスワードの設定

sudo mysql -u root -p

 

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('password');
FLUSH PRIVILEGES;

 

 

.env ファイルのパスワード変更★

  • ※2回目からは違います!
#.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=root
DB_PASSWORD=your_password  # 新しいパスワードに変更

 

 

マイグレーション★

 

データベースの作成

  • ※2回目からは違います!
mysql -u root -p
CREATE DATABASE laravel_db;
EXIT;

 

 

環境ファイルの調整とキー生成

php artisan key:generate
php artisan migrate

 

 

サーバーの設定

port 80番の開放

# 許可されていないか確認
sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

# 80番を許可する
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
success

# 再読み込みする
sudo firewall-cmd --reload
success

# 80番が許可されているか確認
sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 80/tcp
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

 

 

PHP-FPM, nginxの設定確認

  • /etc/php-fpm.d/www.conf ファイルの listen 設定を確認します
listen = /run/php-fpm/www.sock

 

  • Nginx の設定ファイルを編集し、fastcgi_pass をソケットに変更します
fastcgi_pass unix:/run/php-fpm/www.sock;

 

  • 再起動します
sudo systemctl restart php-fpm
sudo systemctl restart nginx

 

 

権限の付与★

# storageディレクトリ全体に書き込み権限を与える
sudo chown -R nginx:nginx /var/www/coffee-laravel/storage

# storageディレクトリとそのサブディレクトリに適切なパーミッションを設定する
sudo chmod -R 775 /var/www/coffee-laravel/storage

# bootstrap/cacheのパーミッション
sudo chown -R nginx:nginx /var/www/coffee-laravel/bootstrap/cache
sudo chmod -R 775 /var/www/coffee-laravel/bootstrap/cache

 

 

laravelのキャッシュクリア

# Laravelのキャッシュをクリア
php artisan cache:clear
php artisan config:clear
php artisan view:clear
php artisan route:clear

# キャッシュを再生成
php artisan config:cache
php artisan route:cache
php artisan view:cache

 

 

再起動

sudo systemctl restart php-fpm

 

 

アプリにアクセス

http://サーバーのIPアドレス

 

 

 

2つ目のアプリをデプロイする

★がついているものを実行します

 

DNSはAレコードに前と同じIPアドレスを指定します。

  • 1台のサーバーで複数のアプリが動きます。

 

nginxの設定

sudo vim /etc/nginx/conf.d/pancake-laravel.conf

 

server {
    listen 80;
    server_name kadaikanriserviceapp.com www.kadaikanriserviceapp.com;

    root /var/www/coffee-laravel/public;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ .php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ /.ht {
        deny all;
    }
}

 

 

データベースの作成


mysql -u root -p
CREATE DATABASE pancake_laravel_db;
EXIT;

 

 

.envファイルの設定

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=pancake_laravel_db
DB_USERNAME=root
DB_PASSWORD=password

 

 

 

うまくいかないとき

ログファイル

  • Laravelのログは storage/logs/laravel.log に保存されます。
  • Nginxのエラーログは /var/log/nginx/error.log にあります。
  • PHP-FPMのエラーログは /var/log/php-fpm/www-error.log にあります。

ログファイルの手動生成

sudo touch /var/www/pancake-laravel/storage/logs/laravel.log
sudo chown nginx:nginx /var/www/pancake-laravel/storage/logs/laravel.log
sudo chmod 664 /var/www/pancake-laravel/storage/logs/laravel.log

 

  • 権限の付与を順番に実施します

 

 

SSL

certbotとnginx用プラグインのインストール

sudo dnf install epel-release
sudo dnf install certbot python3-certbot-nginx

 

 

DNSのCNAME追加

タイプ 名称 TTL
NS @ 3600 a.conoha-dns.com
NS @ 3600 b.conoha-dns.org
A @ 3600 サーバーのIPアドレス
CNAME www 3600 kadaikanriserviceapp.com

 

証明書の取得

sudo certbot --nginx -d kadaikanriserviceapp.com -d www.kadaikanriserviceapp.com

 

  • DNSが更新されるまで30分くらい時間がかかります

 

port443番の開放

 

# 443番を許可する
sudo firewall-cmd --zone=public --add-port=443/tcp --permanent
success

# 再読み込みする
sudo firewall-cmd --reload
success

# 80番が許可されているか確認
sudo firewall-cmd --list-all