Amazon Linux 2 で Nginx を介して Deno で動いているアプリケーションをうごかしてみたので、メモとして残しておきます。
前提
Amazon Linux 2 のインスタンスを作ってある
インバウンドルールで HTTP を許可してある
準備 以下の操作は、root アカウントで実施。
Nginx 導入 1 2 3 4 5 $ amazon-linux-extras install nginx1.12 $ which nginx /usr/sbin/nginx $ systemctl start nginx
/etc/nginx.conf を編集 Deno で unix ドメインソケットを使ってnginxと連携(失敗) で書いた /etc/nginx.conf の編集を実施。
/etc/conf.d/deno-app.conf を作成 /etc/conf.d/deno-app.conf 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 upstream deno_app_port { server localhost:3000; } server { listen 80 default_server; server_name _; proxy_set_header Host $host ; proxy_set_header X-Real-IP $remote_addr ; proxy_set_header X-Forwarded-Host $host :$server_port ; proxy_set_header X-Forwarded-Server $host ; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; root /root/testapp/public; location / { try_files $uri @deno_app; } location @deno_app { proxy_pass http://deno_app_port; } }
設定再読み込み
Deno インストール 1 2 3 4 5 6 7 8 9 $ curl -fsSL https://deno.land/x/install/install.sh | sh ######################################################################## 100.0% Archive: /root/.deno/bin/deno.zip inflating: /root/.deno/bin/deno Deno was installed successfully to /root/.deno/bin/deno Manually add the directory to your $HOME/.bash_profile (or similar) export DENO_INSTALL="/home/ec2-user/.deno" export PATH="$DENO_INSTALL/bin:$PATH" Run '/root/.deno/bin/deno --help' to get started
~/.bash_profile に以下を追記。
1 2 export DENO_INSTALL="/home/ec2-user/.deno" export PATH="$DENO_INSTALL /bin:$PATH "
以下コマンドで、再読み込み。
1 2 3 $ source ~/.bash_profile $ deno -V deno 1.15.2
アプリケーション app.ts を作成。
app.ts 1 2 3 4 5 import { listenAndServe } from "https://deno.land/std@0.112.0/http/server.ts" ;listenAndServe (":3000" , () => new Response ("Hello World\n" ));console .log ("http://localhost:3000/" );
実行 1 $ deno run --allow-net app.ts
ここまで実行して、 EC2インスタンスのパブリックホスト名でアクセスしてみると、Hello world
が返ってきます。
Ultra を動かしてみる 今度は Ultra を使ってみます。 環境設定はultra-init を使います。
1 2 3 4 5 6 deno run --allow-net --allow-write https://deno.land/x/ultra_init@0.0.1/cli.ts cd appmake dev
ここまで実行して、 EC2インスタンスのパブリックホスト名でアクセスしてみると、Hello world
の表示が返ってきます。
Unix ドメインソケットは、現在はどうなった? Deno で unix ドメインソケットを使ってnginxと連携(失敗) にて以前確認しました。 deno 1.15.2 でも確認してみます。
socket.ts 1 2 3 4 5 6 7 8 9 10 const listener = await Deno .listen ({ path : "tmp/deno.sock" , transport : "unix" , }); const conn = await listener.accept ();for await (const chunk of Deno .iter (conn)) { console .log (new TextDecoder ().decode (chunk)); }
こちらを実行してみると、リクエストの内容を拾いはできますが、今回はプログラムが終了するようになっていました。
1 2 3 4 5 6 7 8 9 10 11 12 $ deno run --unstable --allow-net --allow-read --allow-write app.ts Check file:///root/app/app.ts GET / HTTP/1.0 Host: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X-Real-IP: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X-Forwarded-Host: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X-Forwarded-Server: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X-Forwarded-For: XXXXXXXXXXXXXXXXXXXXXXXXXXX Connection: close Cache-Control: max-age=0 DNT: 1
また std/httpで提供されているライブラリには、socket の対応が無いので、サーバーアプリにまで繋げられない状況でした。
Ultra の実行サーバーとして、EC2を使えることを確認できました。 (まぁ、できるだろうという話ではあるのですが。)
ではでは。