Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
オンプレソロプレイ
Search
SuperHotDog
September 03, 2024
0
69
オンプレソロプレイ
SuperHotDog
September 03, 2024
Tweet
Share
More Decks by SuperHotDog
See All by SuperHotDog
post-training
superhotdogcat
3
500
研究室紹介用スライド: Unified Memoryを活⽤した効率的な計算⽅法を考えよう
superhotdogcat
0
74
大規模モデル計算の裏に潜む 並列分散処理について
superhotdogcat
1
37
CUDAを触ろう
superhotdogcat
0
85
GemmaでRAG を作ろう
superhotdogcat
1
400
Featured
See All Featured
BBQ
matthewcrist
87
9.5k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
12
970
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.1k
Navigating Team Friction
lara
183
15k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Music & Morning Musume
bryan
46
6.3k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
Designing for Performance
lara
604
68k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Transcript
オンプレソロプレイ Raspberry Pi Web Server制作
お前誰だよ ・高橋淳一郎 ・所属: 東京大学工学部電子情報工学科 ・GitHub: SuperHotDogCat ・X: @takanas0517 ・研究分野としてはHPC, ML
・最近MLのPaperも書きました ・将来的にはR&D職につきたいなと...
余談: 本日の没案 ・自作コンパイラ, git, Web browser, OS(1000行), コンテナランタイム, ・旧版Binary Hacksの好きな話:
printf(“Hello World!\n”)実行ファイルの軽量化... ・サーバーサイドエンジニアなのでビールサーバーを立てた話 ・しょっぱなから飛ばしてもアレなので皆さんに身近なWeb server構築に関する話をして いきます ・クラウドをいじっていた時, EC2やCompute Engineがどっかのパソコンを借りてssh接 続しとるな~~という感覚があり, 自分でも作ってみたいなという気持ちがあったので今回 作った話を紹介します。
何故今更Web serverを自分で作るのか...? ソフトウェアの世界は抽象化の積み重ねによって進歩してきました。抽象化 は低レイヤの複雑な部分を隠蔽し、より生産性、安全性の高い方法でプロ グラミングする手段を開発者に提供します。 しかし 低レイヤの技術を完全に忘れてプログラミングできるかというと、そうもいき ません。性能をとことん追求したい 、信頼性をできるだけ高めたい 、ときお
り発生する「謎のエラー」を解決したい 、といった場面では低いレイヤに降 りていく必要に迫られます。残念ながら、抽象化は万全ではないためです。 from Binary Hacks
モチベ ・クラウドでよくねという意見も, あると思う ・抽象化された普段何気なく使っているソフトウェアやサービスの本質的な理解にはレイ ヤーを下に下に下って抽象化の度合いを下げたところから作り直すことが良いという考 えが自分の中にはある。 ・なので作る, ぶっちゃけ理由としてはそれだけ
今回作る構成(AWSでの例) 大学の研究室のネットワークを 使って制作 左のEC2がウェブサーバーとし て機能, 右のRDSも実態として はDBサーバーとして実装す る。 ところでこのままだとDBが丸見 えなのでよくない(改善点)
用意する物 ・Raspberry Pi 5×2 ・micro SDカード32GB×2 ・給電器(なるべくまともなものを‼) ・覚えていて欲しいこととしては給電がかなり大事なこと, 100均で安く済ませようと買っ た電源ではまともに動かない,
300円程度の損失でこれを学ぶことになる ・OSはUbuntu Serverを使用
完成図 DB Web server
ネットワーク構築 これ
ネットワーク構築 ・Raspberry Pi ImagerでのInstall時に最初から 接続するWifiを指定した。
誤魔化された気がする人のために もしWifiを設定できなかったら, どうする? 1. nmcliを使う<-そもそもこれが入ってないLinuxだったらできない 2. 有線で繋いて必要なネットワークパッケージあたりをインストールする 3. /etc/wpa_supplicant/wpa_supplicant.confを編集して接続する
作業開始 SSH接続 もしくは キーボードとモニターで直接作業
初期設定 ・net-tools, network-managerをいれる(この先networkの設定がしやすいように) ・(macでの作業)route get defaultでdefault gatewayを取得 ・/etc/dhcpcd.confを修正しsolidなipに
/etc/dhcpcd.confを修正しsolidなipに interface wlan0<-ifconfigで得たネットワークインターフェース static ip_address=10.10.1.xx<-接続したraspberry piのip static routers=10.10.1.1<-default gateway static
domain_name_servers=10.10.1.1<-default gateway
ここまででできたもののクラウドでの例 固定IPのインスタンスが作れた
Webサーバー構築 これ
役割再確認 DB Web server
作業開始 SSH接続 もしくは キーボードとモニターで直接作業 Web server
Web serverの作り方 実は数行で終わる sudo apt -y install apache2 # apacheのインストール
sudo systemctl status apache2 # web serverが起動しているかどうか見る
Webサーバー構築 Web serverとして動き出した Raspberry Piにmacからの接続テスト ブラウザに今回のRaspberry PiのIPア ドレスを打ち込むと無事Apacheのペー ジが表示された。
curl Webサーバーは、Webサイトの コンテンツ(HTMLページ、画像、 動画、CSS、JavaScriptなど)を ユーザーに提供する役割を果た すサーバーです。 curlとか打ってみるとしっかり HTMLを返してくれており, web serverとして機能していることが
わかる。
sudo lsof -i -n -P sudo lsof -i -Pでネットワーク接続と受け入れ準備のあるポート番号を調べる デフォルトだとこんな感じ
sudo lsof -i -n -P sshd(ssh接続を受け入れる常駐プログラム)を起動してみる sudo systemctl start sshでいける
sudo lsof -i -n -P apacheを起動した状態だと80 portがlistenされている。同一ネットワーク内ならHTTP通 信でWebページを表示することができる
Webサーバー構築 これ
役割再確認 DB Web server
作業開始 SSH接続 もしくは キーボードとモニターで直接作業 DB server
DB構築 ・sudo apt install mysql-server # インストール ・sudo mysql_secure_installation #
MySQLの初期設定 ・sudo systemctl status mysql # 動いているか確認 ・CREATE DATABASE web DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; ・CREATE USER 'web'@'%' IDENTIFIED BY 'Password@12345'; # ユーザー作成 ・GRANT ALL ON web.* TO 'web'@'%'; # 権限付与
・SELECT user, host FROM mysql.user; +-------------------------+-----------+ | user | host
| +-------------------------+-----------+ | web | % | | debian-sys-maint | localhost | | mysql.infoschema | localhost | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +--------------------------+-----------+ ヨシ sudo systemctl enable mysqしておくと再起動時に自動でdbが立ち上がります
dbにリモートアクセス ・/etc/mysql/mysql.conf.d/mysqld.cnfのbind addressを書き換える # Instead of skip-networking the default is
now to listen only on # localhost which is more compatible and is not less secure. bind-address = 0.0.0.0 これをしないと外からのアクセスができない
dbにリモートアクセス Web serverからDBにアクセスする mysql -h 10.10.2.243 -pを行うと, 実際に接続できることが確認できた
Webサーバー構築完成‼
改善点 ・DBサーバーを踏み台サーバー以外から入れないようにする, NATも追加する ・ロードバランサーでアクセスを分散させる機能をつける ・Claudflare Tunnelを使って外からアクセスできるようにする Raspberry Piは小さくてお手軽にいろんなインフラ遊びができるので是非遊んでみてく ださい