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
67
オンプレソロプレイ
SuperHotDog
September 03, 2024
Tweet
Share
More Decks by SuperHotDog
See All by SuperHotDog
研究室紹介用スライド: Unified Memoryを活⽤した効率的な計算⽅法を考えよう
superhotdogcat
0
64
大規模モデル計算の裏に潜む 並列分散処理について
superhotdogcat
0
34
CUDAを触ろう
superhotdogcat
0
79
GemmaでRAG を作ろう
superhotdogcat
1
370
Featured
See All Featured
Bash Introduction
62gerente
609
210k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.2k
Embracing the Ebb and Flow
colly
84
4.5k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.3k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
4 Signs Your Business is Dying
shpigford
182
21k
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.6k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.1k
Facilitating Awesome Meetings
lara
50
6.2k
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は小さくてお手軽にいろんなインフラ遊びができるので是非遊んでみてく ださい