AWS EC2 nginx + php + postgresql

参考サイト

↑ phpinfo.php を作成した後、sudo systemctl restart nginx すること。

【詰まったこと】EC2側からRDS側にアクセスできなくて困った

RDS側のセキュリティグループのインバウンドルールにルールを追加するといけた。追加するのは、ソースにEC2側のセキュリティグループを足せばいい。

【プチ詰まり】psql の指定の方法がわからなかった

$ psql --host=DB_instance_endpoint --port=port --username=master_user_name --password --dbname=database_name

こんな感じでいけるっぽい。

【プチ詰まり】pdo_pgsql がない

上の記事にあるように yum でインストールしてあげる必要がある。

yum install -y  php-devel
yum install -y  php-gd
yum install -y  php-intl
yum install -y  php-json
yum install -y  php-mbstring
yum install -y  php-mcrypt
yum install -y  php-pdo
yum install -y  php-pgsql

【プチ詰まり】php の PDO でエラーが出る

Error :SQLSTATE[08006] [7] could not translate host name "***.rds.amazonaws.com" to address: Name or service not known

こんなエラーがでる。

→ 【解決】単純にURL間違ってた。。。

【プチ詰まり】composer のパス

/usr/local/bin/composer がパスなので、root だと実行パスにない状態となる。 root では /usr/local/bin/composer を指定すること。

【プチ詰まり】.env を導入したい

【小ネタ】

【プチ詰まり】sessionが機能しない

色々みてると、ファイルに権限がないことが原因だった。

Amazon Linux 2 の場合は /var/lib/php/session になってた。ただ、グループが apache になってたので、 nginx に変更したら動いた。

postgresqlの設定

Debian への PostgreSQLインストールから新規DB作成まで

https://debimate.jp/2020/03/20/%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%EF%BC%9Adebian-10buster-%E3%81%ABpostgresql-11%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%80%81%E6%96%B0%E8%A6%8Fdb%E3%82%92/

PHPの拡張ライブラリ pdo_pgsql のインストール

https://symfoware.blog.fc2.com/blog-entry-2307.html

php.ini の変更

/etc/php/7.3/cgi/php.ini を修正

;extension=pdo_mysql
;extension=pdo_oci
;extension=pdo_odbc
extension=pdo_pgsql ←ここのコメントを外す
;extension=pdo_sqlite
;extension=pgsql
;extension=shmop

PostgreSQL の PRIMARY_KEY の話

https://qiita.com/nuko_yokohama/items/7d0d5525bcefaa3332ce

Nginx + PHP + Debian 10

あらまし

Debian 10 に nginx と PHP をインストールしてみる。

nginx のインストール

Debian 10 (buster) - Web サーバ Nginx 構築(Nginx 公式リポジトリ使用)! - mk-mode BLOG

ユーザー権限でやってうまくいかなかった。root権限でやれって書いてあった。

あと、ufw っていうツールが入ってなかったので、それは別途インストールした。

PHP

Debian 10 (buster) - PHP インストール(Nginx と連携)! - mk-mode BLOG

phpinfo.php を nginx のドキュメントルート /usr/share/nginx/html に配置し、localhost/phpinfo.php にアクセスしても FIle not found が表示される。 test.html を 同ディレクトリに配置した場合はちゃんと表示される。

↑ドキュメントルートを /var/www/html に変えてみる

↑File not found の対処法。その前にエラーログの場所がわからなかった。  → エラーログの場所はconfファイル(/etc/nginx/nginx.conf) に記載があり、/var/log/nginx/error.log だった。

nginx と PHP-FPM の仕組みをちゃんと理解しながら PHP の実行環境を構築する - Qiita

nginx $document_root$fastcgi_script_name と $request_filename の違い - Qiita

【2021/2/4 現在 未解決】

【2021/2/5 追記 - 解決】

nginx の設定が悪かった。

/etc/nginx/conf.d/default.conf でのドキュメントルートの設定を location / ... の下に書いていて、location ~ \.php$ ... の下ではドキュメントルートが未設定の状態となっていたようだ。

あと、phpファイルのプレフィックス<?php じゃないとだめっぽい?

server {
    root   /var/www/html; #← ドキュメントルートはここに書く

    location / {
        # root /var/www/html; # ← 当初はここに書いていた
        index  index.html index.htm;
    }

    location ~ \.php$ {
        # ここでは別のドキュメントルート設定となっていた。
    }

参考サイト

SSH接続

前提

Debian は Virtual Box に入ってるものとします。

以下のURLの通りに設定したがホストからはつながらなかった

https://www.mk-mode.com/blog/2019/10/11/debian-10-ssh-installation/#

解決

Debian 側のファイアウォールでポートを開けてなかった。root権限で以下を実行するといけた。

ufw allow 9999/tcp

参考サイト

https://linuxhint.com/fix_connection_refused_ubuntu/

Virtual Box で Debian を入れて NAT + VirtualBox Host-Only Network の環境を構築する

前提

Debian は Virtual Box に入ってるものとします。

以下のURLの通りに設定するとOK

https://qiita.com/muniere/items/878837964f3b11fb7663

詰まったところ

NATをVirtualBox Host-Only Network にするとホストとゲストでの通信はできるようになるが、ゲストから外が見れなくなる。

VirtualBox Host-Only Network をセカンドネットワークにするとネットワークインターフェースは認識されているが、IPが設定されていなかった。

/etc/network/interfaces を編集するのね。

※ インターフェースカード名は ip a で表示されている項目と合わせること

Ubuntu の場合

2021/4/19 追記

Ubuntu でやったらIPアドレスを設定するところで詰まったので追記

Ubuntu 18.04(on VirtualBox) ホストOSからの通信 - Qiita

/etc/netplan/00-installer-config.yaml 設定を入れる必要がある。

2023/6/17 追記

上記のリンクの通りにやろうと思ったらプチはまりした。

Virtual Box のほうでネットワークカードを2枚にする必要がある。

初めの1枚は外部接続用。

もう一枚をホスト・ゲスト間の通信用として使う。

ESP32+ILI9341 パラレル通信描画

以下のブログを参考に

ILI9341 + ESP32 (Parallel)

以下のコードを動かす

#include <WiFi.h>
#include "SPI.h"
#include "TFT_eSPI.h"

TFT_eSPI tft = TFT_eSPI();       // Invoke custom library

void setup() {
  tft.init();
  tft.setRotation(1);

  Serial.begin(115200);
  delay(100);
  
  tft.fillScreen(TFT_RED);
}

static uint32_t c = 0;

void loop()
{
  static int s = 0;
  static unsigned long old_time;
  old_time = millis();

  int box = 32;
  
  // put your main code here, to run repeatedly:
  tft.setRotation(1);
  int x, y;
  for(int j = 0;j < 64;j++) {
    x = random(0, 320);
    y = random(0, 240);
    tft.fillRect(x, y, box, box, c);
    tft.drawRect(x, y, box, box, ~c);
    c++;
  }

  Serial.print((float)1/(millis()-old_time)*1000);
  Serial.println(" fps");
}

50 fps くらいで描画される。けど、占有するピン数が多い。速度とピン数はトレードオフ