raspberry piでnginxのwebサーバが立つまでの手順

webサーバーを壊してしまったので備忘録として0からraspberry piを使ってヘッドレスのNginx Webサーバを立ち上げるまでの手順を記します。パンツは履いたままで大丈夫です。

# 目次
[事前に用意するもの](#事前に用意するもの)
[1.CDカードにOSを焼く](#1cdカードにosを焼くraspberry-pi-osdebian11-bullseye)
[2.起動。](#2起動)
[3.SSHで接続](#3sshで接続)
[4.ユーザーの設定](#4ユーザーの設定)
[5.ipアドレスの固定](#5ipアドレスの固定)
[6.SSHを公開鍵認証に変更](#6sshを公開鍵認証に変更)
[7.Raspiファイアウォールの設定](#7raspiファイアウォールufwの設定)
[8.ルーターのポート開放](#8ssh用にルーターのポート開放)
[9.外部からSSH接続](#9外部からssh接続)
[10.ドメインの関連付け(myDNS)](#10ドメインの関連付けmydns)
[11.web鯖nginxの最新版導入(nginx-1.22.0)](#11web鯖nginxの最新版導入nginx-1220)
[12.SSL証明書発行(Let`s Encrypt)と自動更新](#12ssl証明書発行lets-encryptと自動更新)

:::note warn
手順を進めるにあたり、username、password、exampleはご自身の環境に合わせて変更してください。
:::

# 事前に用意するもの
- 本体 本記事ではraspberry pi 4 model B 8G(以下raspi)
- type C　ケーブル
- ACアダプター 15W以上(5V,3A)
- microSDカード
- microSDカードリーダー
- MobaXterm(ソフト)
- ルーター管理者権限
- 外部ネットワーク
- ドメイン
 
:::note info
[amazon 購入リンク紹介](#amazon-購入リンク)
用意するものが分からない場合やおすすめが気になる方はご活用ください。
:::


# 1.CDカードにOSを焼く(Raspberry pi OS　debian11 bullseye)
公式サイトから`Raspberry Pi Imager`をダウンロードおよびインストール。インストール中にSDカードをPCに接続。imagerにOSイメージが内包されているため、別途OSのダウンロードは不要。
https://www.raspberrypi.com/software/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/832106/1bd92160-ef5e-c4fd-ab8a-f48ddd8e0d42.png)
Imagerを起動し、OS、インストール先を選択。今回は`raspberry pi OS Lite(64-bit)`。右下の歯車からSSH、Wi-fi等の設定をして書き込むをクリックし全自動で完了する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/832106/18b7a0c9-4030-8e96-1d08-998f8a45c289.png)
2022年の4月にインストールの仕様が新しくなり、bootにファイルを書き込む的な操作は不要になった模様。従来通り、平文でファイルを書き込むとインストールがうまくいかないので注意。設定項目は下記の通り、設定したい項目にチェックを入れる。
- ホスト名
- SSHを有効化
    - パスワード認証を使う
    - 公開鍵認証のみを許可する
        - piのためのauthrized_keys
- ユーザー名とパスワードを設定する。
    - ユーザー名
    - パスワード
- Wi-Fiを設定する
    - SSID
    - パスワード
    - Wfiを使う国
- ロケールを設定する
    - タイムゾーン
    - キーボードレイアウト

インジケーターランプがおかしいなと思ったときはこちら

https://qiita.com/napspans/items/cb2737eadae48118f8c5


# 2.起動。
SDカードをRaspiに差し込み電源を接続する。この時、SDカードが少しはみ出てる状態になるが大丈夫、ちゃんと奥まで入っている。
電源投入後数分で初期起動が確立し、インストール時に設定したwifiに自動接続するため、同一LAN内のwinPCからpingコマンドでOSインストール時に設定したホストに撃って帰ってくればインストール成功。以前のデフォルトでは`raspberrypi.local`だった為、今回もこのまま設定をしている。画像ではなぜかipV6になってしまったがwin側でIPv6を有効にしていたらこうなる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/832106/ead211f4-cd23-676c-f5b5-ff5773ea3f5b.png)
### laspberrypi.localに繋がらない。
ここでつまずいた点として、windows10のバグでmDNSが正常に機能しないことがあり、`laspberrypi.local`にpingを撃っても名前解決されない場合がある。主環境ではwinを再起動することで一時解決したが、根本的な解決策はwinのアプデを待つことのようだ。解決しない場合このままではSSH接続ができないため、netscan.exe、ルーターの管理画面等でraspberry piのipアドレスを見つけてくる必要がある。ホスト名はあると便利だけど、ipアドレスがわかればなくても今回は困らない。

https://twitter.com/TakashiSasaki/status/1253546963405910019?s=20&t=weGKS7MxRoqoajGKpI5hdw

# 3.SSHで接続
インストールが確立したら、SSHクライアントからホストに接続する。接続設定はインストール時の記憶を参照。
MobaXtermの場合Session settinngsからSSHを選択し設定項目を入力。
`★Bookmark setting`のタブでセッション名にパスワード認証である旨を記載すると後々便利。
- Remote host : raspberrypi.local(繋がらない時はipベタ打ち)
- ☑specifi username : pi
- Port : 22
→OK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/832106/e680f08d-be25-9a99-6444-c5d56bd0a241.png)
ユーザーログインのパスワードが求められるため、入力してログインできれば接続完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/832106/ff44e5dd-c24c-c147-5227-d6833631cd6c.png)
OSバージョンの確認
```
pi@raspberrypi:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 11 (bullseye)
Release:        11
Codename:       bullseye
```

# 4.ユーザーの設定
### ①. rootユーザーにパスワードを設定
```
sudo passwd root
```
### ②. 常用ユーザーの追加(下記は"username"を追加)
```
sudo adduser username
```
### ③. piユーザーの権限確認
```
pi@raspberrypi:~ $ groups pi
pi : pi adm dialout cdrom sudo audio video plugdev games users input netdev pi spi gpio
```
### ④新たに追加したユーザーに権限をコピー
```
sudo usermod -G pi,adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,netdev,input,spi,gpio username
```
### ⑤コピーされた権限を確認
```
pi@raspberrypi:~ $ groups username
username : username adm dialout cdrom sudo audio video plugdev games users input netdev pi spi gpio
```
### ⑥piユーザーからフォルダをコピー
```
sudo cp -r /home/pi/* /home/username
```
### ⑦Raspi再起動
```
sudo reboot
```
この時にSSHの接続が切れるため、再接続する前にMobaXetermのssh設定からユーザーをpiからusernameに変更するし再接続する。

### ⑧自動ログインの解除
```
sudo raspi-config
```
1 System Options → S5 Boot / Auto Login → B1 Consoleでエンターし、rebootされる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/832106/eae6b98b-ddd7-e300-c5d7-74230fa049dd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/832106/b9c00f8a-1f9f-58ed-fa91-f3cecc8142f2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/832106/ca5fcbfd-9f30-aa9c-b535-1004ae68438a.png)

### ⑨piユーザーの削除
```
sudo userdel -r pi
```
### ⑩削除されたか確認
```
username@raspberrypi:~ $ id -a pi
id: ‘pi’: no such user
```

①～⑩の詳細は下記記事参照
> 「買ったらまず実施！RaspberryPiのセキュリティ対策 - 手順」- Qiita

https://qiita.com/c60evaporator/items/ebe9c6e8a445fed859dc#%E6%89%8B%E9%A0%86

# 5.ipアドレスの固定
### wi-fiの設定にidを振る
```
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
```
インストール時にwifi接続設定を行った場合は下記設定が記述されているので{}内に`priority`と`id_str`を追記する。priorityはいわゆる優先度でほかのネットワークがない場合は1でよい。id_strはタグでipアドレスを固定するときに使用できる。ダブルクォーテーションの中に自由に設定する。
```
update_config=1
network={
        ssid="Wifi5G"
        psk=2aee2d9814471e7ba806f59f509393d329f2e66096214acd0b23cb7b0195b5
        priority=1
        id_str="Home"
}
```
ちなみに、このファイルに同様の形式で記述すれば他のwifiを追加することも可能です。複数network設定がある場合にはpriorityの低い順に優先接続されます。

### 固定IPの設定
```
sudo nano /etc/dhcpcd.conf
```
このファイルには接続するネットワークのip設定が記述されています。コメントアウトでいろいろなことが書いていますが、`# Example static IP configuration:`のコメントの下部あたりに下記の設定を追記します。

```
# static IP configuration:

interface wlan0
iface Home inet static
static ip_address=XXX.XXX.XXX.YYY/24
static routers=XXX.XXX.XXX.Z
static domain_name_servers=XXX.XXX.XXX.Z
```
`iface Home inet static`部分のHomeはwi-fi設定時の`id_str`の内容になります。
他のネットワークがある場合にはこの下に　iface example ～以降を追記すればwifi別で設定可能です。
動作テストとして、curlコマンドでインターネットにアクセスできているか確かめる。
```
username@raspberrypi:~ $ curl https://example.com
<!doctype html>
<html>
<head>
~~~~~~
</body>
</html>
```

IP固定について詳しくは下記ページ参照
> 「ラズパイで複数のネットワーク設定をする」- Qiita

https://qiita.com/hxbdy625/items/374394f3dff17bdaf843


# 6.SSHを公開鍵認証に変更
### ①winで公開鍵と秘密鍵を生成
cmdで書きコマンドを実行
```
ssh-keygen -t rsa -b 4096 -C "email@example.com"
```
ファイルの生成場所とパスフレーズが聞かれるので設定する。

### ②winからRaspiに`id_rsa.pub`を転送
Raspi側で`/home/username/`に`.ssh`フォルダを作成
この時sudo権限で作成するとハマるので注意
```
mkdir ~/.ssh
```
MobaXtermのナビゲーションウィンドウ等から、作成した`/home/username/.ssh`に`id_rsa.pub`を転送する。

### ③`id_rsa.pub`の内容を`authorized_keys`に追加
```
cd ~/.ssh/
cat id_rsa.pub >> authorized_keys
```
### ④パーミッションを変更
```
chmod 600 authorized_keys
chmod 700 ~/.ssh
```
### ⑤転送された公開鍵を削除する。
```
rm -vi ~/.ssh/id_rsa.pub
```
### ⑥公開鍵でssh接続確認
Mobaxterm等で新たにsshセッションを作成。host、username、portを同じにし、`advanced SSH settings`の`□Use Private key`にチェックをいれ、①で生成`id_rsa`を指定する。
`★Bookmark setting`のタブでセッション名に公開鍵接続である旨を記載すると⑨の確認で便利。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/832106/d8f6eedb-444f-363e-9dfb-8ead5a509b28.png)
OKを押して作成したセッションに接続できれば確認OK

### ⑦パスコード認証など、ssh認証設定の編集
**公開鍵での接続確認が終わるまで現在繋がっているSSHセッションを切断しないこと。** 最悪の場合、再インストールの刑です。
```
sudo nano /etc/ssh/sshd_config
```
下記項目がコメントアウトされているため修正または追記
```
/etc/ssh/sshd_config

PermitRootLogin no
PasswordAuthentication no
PermitEmptyPasswords no
```
sshサービスを再起動
```
sudo /etc/init.d/ssh restart
```
### ⑧公開鍵 **のみ** でアクセスできるか確認
⑦で作成したセッションで接続できることを確認し、「SSHで接続」の項で作成したセッションでは接続できなくなっていれば成功。両方接続できなければ、接続中のセッションからsshd_configの内容を再確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/832106/d7ca2f57-c248-1a79-25da-d76fa3d22250.png)

ここまでうまく事が進めばローカルのwinPCからraspiに公開鍵でssh接続できている。そのほかのセッション設定は削除してもよい。

詳細は下記参照
>「買ったらまず実施！RaspberryPiのセキュリティ対策 - ④SSHを公開鍵認証に変更」- Qiita

https://qiita.com/c60evaporator/items/ebe9c6e8a445fed859dc#ssh%E3%82%92%E5%85%AC%E9%96%8B%E9%8D%B5%E8%AA%8D%E8%A8%BC%E3%81%AB%E5%A4%89%E6%9B%B4

# 7.Raspiファイアウォールufwの設定
### ①aptの更新
```
sudo apt update && sudo apt upgrade
```
### ②ufwのインストール
```
sudo apt install ufw
```
### ③すべてのポートを拒否する。
```
sudo ufw default deny
```
### ④SSHポート22、http 80 https 443を開放
```
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
```
### ⑤IPv6の除外
```
sudo nano /etc/default/ufw
```
```
# /etc/default/ufw

IPV6=no
```
### ⑥ufwの起動
```
sudo ufw enable
```
### ⑦ufwのステータスの確認
```
username@raspberrypi:~ $ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
```

以上、ほかのポートも追加したい場合は④で別のポートを指定する。
詳細は下記参照。

https://raspida.com/firewall4raspbian-ufw

# 8.SSH用にルーターのポート開放
Buffalo製ルーターの場合で記載します。ルーター機能付きモデム、ONUの場合はそのキャリア製品のルーター設定から解放を行ってください。buffaloの場合デフォルト、ゲートウェイIPアドレスの`192.168.11.1`にアクセス・ログインし、詳細設定から
![コメント 2022-06-19 114802.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/832106/3b52da3d-063e-48d7-ad73-11b66f64a895.jpeg)
セキュリティ＞ポート変換
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/832106/57085e02-1b33-2e18-5534-0b780a132491.png)
LAN側IPは***5.ipアドレスの固定***で行ったRaspiのipを入力。LAN側ポートはSSHの22。プロトコルはTCPでポートは任意の番号を空ける。同様に、80、443も開けておく。

ポート開放設定が出来たら外部から見てポートが開いているか下記サイトで確認する。

https://www.cman.jp/network/support/port.html
# 9.外部からSSH接続

https://www.cman.jp/network/support/go_access.cgi

自分のWAN側IPアドレスを確認し設定したポートで、***6.SSHを公開鍵認証に変更***の[「⑥公開鍵でssh接続確認」](#公開鍵でssh接続確認)をテザリング等の外部ネットワークから接続する。

# 10.ドメインの関連付け(myDNS)
### myDNS.jpへip自動通知
本当は、`wget`のみでコマンドが通るか確認しますが、手順省略のため初めからcrontabに書き込みテストします。
```
crontab -e
```
```
*/3 * * * * wget -q -O /dev/null http://masterID:Password@ipv4.mydns.jp/login.html
```
↑3分毎にIP通知
masterIDとPaswordはメールで送られてきたmyDNS.jpのログイン情報に書き換えてください。

```
no crontab for napspans - using an empty one
crontab: installing new crontab
```
### ip更新確認
MyDNSのLogInfoからipが更新されたか確認する。

https://www.mydns.jp/members/#loginfo
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/832106/4cac6d5a-8727-eebd-748c-3e119464c4dc.png)
IPv4 UPDATE:が[9.外部からSSH接続](#9外部からssh接続)のIPと同一になっていればOK

### SSH接続確認
[9.外部からSSH接続](#9外部からssh接続)のhostをmyDNSで登録しているドメインに変更し、外部ネットワークからアクセスし、接続できるか確認する。

参考記事

https://qiita.com/napspans/items/6fd6531a4544ed07a761

# 11.web鯖nginxの最新版導入(nginx-1.22.0)
### ①依存パッケージのインストール
```
sudo apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring
```
### ②nginx署名鍵の取得、インポート
```
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
```
### ③鍵が正しいか確認
```
gpg --dry-run --quiet --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
```
```
出力内容
pub   rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
      573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
uid                      nginx signing key <signing-key@nginx.com>
```
pubのフィンガープリントが`573BFD6B3D8FBC641079A6ABF5BD827BD9BF62`であること。
### ④安定版nginxインポートのためのaptリポジトリ追加
```
username@raspberrypi:~ $ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/debian `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/debian bullseye nginx
```
nginx公式リポジトリの優先
```
username@raspberrypi:~ $ echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | sudo tee /etc/apt/preferences.d/99nginx
Package: *
Pin: origin nginx.org
Pin: release o=nginx
Pin-Priority: 900
```
### ⑤nginxインストール
```
sudo apt update
sudo apt install nginx
```
### ⑥nginxバージョン確認
```
username@raspberrypi:~ $ nginx -version
nginx version: nginx/1.22.0
```
### ⑦nginx設定ファイルの更新
```
sudo nano /etc/nginx/conf.d/default.conf
```
デフォルトで設定されている`server_name`を書き換え。
```
# /etc/nginx/conf.d/default.conf

server {
    listen       80;
    server_name  example.com;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

```
上書きしてサービスの再起動
```
sudo service nginx restart
```
### ⑧web接続テスト
設定したドメインに`http`でアクセスする。
ブラウザにドメインだけ入力するとデフォルトで`https`に接続されるため、確認。
Welcome to nginx!が表示されればインストール完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/832106/902cc972-ce8a-de83-4669-8c57990f3449.png)


参考記事(nginx公式ドキュメント)

https://nginx.org/en/linux_packages.html#Debian



# 12.SSL証明書発行(Let`s Encrypt)と自動更新
CertBot(Let`s Encryptのクライアント)をインストール
```
sudo apt install certbot python3-certbot-nginx
```
証明書の取得
```
sudo certbot --nginx -d example.com -d www.example.com
```
実行するとアカウントの作成のために、数点質問があるので答える。
ここでのメールアドレスには証明書の有効期限が切れそうになると通知が来る。また、3個目の質問は勧誘メールの同意なので注意。
```
napspans@raspberrypi:~ $ sudo certbot --nginx -d napspans.space -d www.napspans.space
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): example@email.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: n
Account registered.
```
アカウントが作成されると発行が進み、successする。
```
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://napspans.space
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/napspans.space/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/napspans.space/privkey.pem
   Your certificate will expire on 2022-09-18. To obtain a new or
   tweaked version of this certificate in the future, simply run
   certbot again with the "certonly" option. To non-interactively
   renew *all* of your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

```
[⑦nginx設定ファイルの更新](#nginx設定ファイルの更新)で更新したconfigファイルがcertbotによって追記される。

ブラウザから`https`でアクセスできるか確認する。

### 証明書の更新
```
sudo certbot renew
```
```
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/napspans.space.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not yet due for renewal

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
The following certificates are not due for renewal yet:
  /etc/letsencrypt/live/napspans.space/fullchain.pem expires on 2022-09-18 (skipped)
No renewals were attempted.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
```
実行結果では`skipped`と表示されますが、これは証明書の有効期限が残り30日以内でない場合負荷軽減のため更新しない仕様によるものであり正常動作です。
どうしても成功させてい場合は下記オプションで実行してください。
--force-renew
`証明書の有効期限の残りを無視して、過去に発行したすべての証明書を強制的に更新することができます。
ただし、すべての証明書の強制更新を毎日行うことは適切ではなく、Let's Encrypt 認証局のレート制限に引っかかってしまう恐れがあります。`

--dry-run
`テスト用オプション、実際に更新は行いません`

### 自動更新設定
```
sudo crontab -e
```
***ルート権限で***crontabに下記実行コマンドを追記する。
更新はsudoで行うためここ重要です。
[Linuxでの「Sudo crontab -e」と「crontab -e」の違い](https://www.web-dev-qa-db-ja.com/ja/linux/linux%E3%81%A7%E3%81%AE%E3%80%8Csudo-crontab-e%E3%80%8D%E3%81%A8%E3%80%8Ccrontab-e%E3%80%8D%E3%81%AE%E9%81%95%E3%81%84/830964348/)
```
0 0 1 * * sudo certbot renew && systemctl restart nginx
```

http://scrap.php.xdomain.jp/create_tool/cron_setting_tool/

このcrontabで本当に更新されるかは60日後に結果がわかります。
更新審されているかすぐに知りたい方は`--force-renew`オプションにてcrontabを毎時にし、翌日サイトの証明書を確認してみてください。

参考記事

https://qiita.com/napspans/items/56e5c1b48684a3f457ee

https://qiita.com/tmatsumot/items/aca49d99558d2646ef36

https://qiita.com/HeRo/items/f9eb8d8a08d4d5b63ee9

# 以上。まとめ
本記事は備忘録として記述しております。おま環の可能性がありますがご承知ください。お疲れ様でした。

# amazon 購入リンク

[ラズベリーパイ4 コンピューターモデルB 4GB](https://amzn.to/46ymUF6) 
30日間での最低価格 -20% ￥11,570 税込
[<img width = 200 src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/832106/01fa3915-5859-f174-4ee5-06b55ebf4ef5.png">](https://amzn.to/46ymUF6)


[スイッチ付き TypeC電源 3A ](https://amzn.to/3r9mtRt) 
価格:	￥1,169 税込
[<img width = 200 src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/832106/fe78c2be-372c-9d8d-9542-502f17689e51.png">](https://amzn.to/3r9mtRt)


[microSD 32GB サンディスク](https://amzn.to/44oRsYe)
￥1,241 税込
[<img width = 200 src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/832106/d4014178-96af-115e-f5cb-8ebd9275228f.png">](https://amzn.to/44oRsYe)

[microSD カードリーダー サンディスク](https://amzn.to/43bXEBI)
￥1,640 税込
[<img width = 200 src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/832106/261afb02-4621-3e1a-4ec8-e76d0769cc04.png">](https://amzn.to/43bXEBI)