gikoha’s blog

個人的メモがわり

actix-web https サポート

  • ドメインの取得と httpsのサポート
    • まず OCI用に ドメインをfree/有料でゲットし OCIの public IP を設定し引けることを確認する
    • SSL については Let's Encrypt を使うこととした
      • 参考 https://certbot.eff.org/lets-encrypt/otherpip-webproduct

      • OCIの oracle linux 8.4 on aarch64 は snapが使えないので

        • sudo dnf install python3 augeas-libs
        • sudo python3 -m venv /opt/certbot/
        • sudo /opt/certbot/bin/pip install --upgrade pip
        • sudo /opt/certbot/bin/pip install certbot
        • sudo ln -s /opt/certbot/bin/certbot /usr/bin/certbot
      • これで certbot がインストールできたので 証明書を作る

        • sudo certbot certonly --standalone
          • Enter email address: hogehoge@gmail.com (メールアドレス)
          • Please read the Terms of Service: Y (同意しますか)
          • Would you be willing: N (キャンペーンメールはいらない)
          • Please enter the domain name: hogehoge.com
        • こうするとcertbotがサーバとなって自分で port 80 にアクセスして、Successfully received certificate と出る
          • (port 80にはアクセス可能としておき、一方apacheやnginxは走らせないように)
          • Certificate is saved at: /etc/letsencrypt/live/.../fullchain.pem
          • Key is saved at: /etc/letsencrypt/live/.../privkey.pem
        • /etc/letsencrypt/live/.. は rootしか読めないが、そもそも httpsポートへのbindが rootしかできないので、必然的にwebアプリは rootで動かす必要がある
      • とりあえずこれで pem はできた

      • actix webアプリを HTTPSに対応させる

        • Cargo.tomlを編集し、
         actix-web = { version = "3", features = ["openssl"] }
         openssl = "0.10"
        
        • serverのソースを編集

          • builder に let mut builder = SslAcceptor::mozilla_intermediate(SslMethod::tls()).unwrap(); builder .set_private_key_file("key.pem", SslFiletype::PEM) .unwrap(); builder.set_certificate_chain_file("cert.pem").unwrap();
          • こんな感じでbuilder を作り、HttpServer::new(...).bind のかわりに HttpServer::new(...).bind_openssl(,builder) とする
          • portは http 80ではなく https 443 に変更
        • ビルド環境のdockerにopenssl-devを追加

          • sudo dnf install -y openssl-devel
          • ビルド後 OCI環境に static, templatesとともに転送
        • OCIインスタンスhttps ポートを、イングレスルールの変更で開け、firewall-cmdでも開ける

          • sudo firewall-cmd --add-service=https --permanent --zone=public
          • 確認 sudo firewall-cmd --list-all
      • ビルド後、OCI内でroot権限でアプリを動かし、https://hogehoge.com/ にアクセス、うまく動いていることを確認。

      • rootで走らせると環境変数がちょっと変わったりする (NLS_LANG=) ので注意
      • rootで走らせるのいやだな: https://matope.hatenablog.com/entry/2014/09/28/031155