Amazon Linux 2023 にプロキシサーバーを設定して、Rust アプリケーションを動作させるまでの一連の流れを説明しています。
EC2 や Lightsail のサーバーのホスト名はデフォルトで ip-xxx-xxx-xxx-xxxという形になっています。 それを任意のホスト名に変更します。
sudo hostnamectl set-hostname 新しいホスト名
sudo systemctl restart systemd-hostnamed
# 再ログイン後、設定したホスト名になっています。
sudo nano /etc/nanorc
# 次の行を追加
set linenumbers
このコーナーでは、データベースとして SQLite を使っています。
# apt の更新
sudo dnf update
sudo dnf upgarade
sudo dnf autoremove
# SQLite のインストール
sudo dnf install sqlite
sudo dnf install sqlite-devel
# Rust のインストール
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
1 と入力してエンター
sudo dnf install cargo
cargo --version
cargo 1.90.0
sudo dnf install httpd
# httpd の設定をファイルを編集します。
sudo nano /etc/httpd/conf/httpd.conf
149行目:Options Indexes FollowSymLinks を Options FollowSymLinks に変更する。
156行目:AllowOverride None を AllowOverrid All に変更する。
169行目:DirectoryIndex index.html を DirectoryIndex index.html index.cgi index.php に変更する。
ファイルの最後に:ServerTokens Prod という行を追加する。
# httpd を開始します。
sudo systemctl start httpd
# httpd を自動起動するようにします。
sudo systemctl enable httpd
# ブラウザで IP アドレスにアクセスすると、It works! と表示されます。
# Amazon Linux 2023 はデフォルトでプロキシサーバーが有効になっています。
# プロキシサーバの設定
sudo nano /etc/httpd/conf/httpd.conf
<Location "/tera">
ProxyPass http://0.0.0.0:8080
ProxyPassReverse http://0.0.0.0:8080
</Location>
<Location "/askama">
ProxyPass http://0.0.0.0:3000
ProxyPassReverse http://0.0.0.0:3000
</Location>
# 設定を有効にします。
sudo systemctl restart httpd
Amazon Linux 2023 は、デフォルトで SSH がインストールされています。
sudo apt install git
git clone https://github.com/ユーザー名/tera_proxy.git
mv tera_proxy tera
cd tara
carog build --release
nohup ./target/release/tera &
# IP アドレス/tara、もしくはURL/tera で表示されます。
cd ..
git clone https://github.com/ユーザー名/askama_proxy.git
mv askama_proxy askama
cd askama
cargo build --release
nohup ./tatget/release/askama &
# IP アドレス/askama、もしくはURL/askama で表示されます。
index ページを作り替えます。
sudo nano /var/www/html/index.html <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Home</title> <link rel="stylesheet" href="/tera/static/style.css"> </head> <body> <div class="container"> <h1>Home</h1> <div><a href="/tera"><button>Tera</button></a></div> <div><a href="/askama"><button>Askama</button></a></div> <!-- <div><a href="/task/public"><button>Task</button></a></div> <div><a href="/bbs/public"><button>BBS</button></a></div> <div><a href="/ledger/public"><button>Ledger</button></a></div> <div><a href="/cart/public"><button>Amazoness</button></a></div> --> </div> </body> </html>
サイトに認証機能をつけます。
sudo nano /var/www/html/.htaccess
AuthUserFile /var/www/html/.htpasswd
AuthGroupFile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
Require valid-user
パスワードは、 htpasswdファイル生成(作成) で作ります。
sudo nano /var/www/html/.htpasswd
先ほどコピーした文字列をそのままペーストします。
httpd.con も変更します。
sudo nano /etc/httpd/conf/httpd.conf
<Location "/">
AuthType Basic
AuthName "Basic Authentication"
AuthUserFile /var/www/html/.htpasswd
Require user your_name
</Location>
# 設定を有効にします
sudo systemctl restart httpd
ブラウザを再起動してアクセスすると認証パネルが表示されると思います。
それでも表示されない場合は、ブラウザをリロードすれば認証パネルが表示されると思います。
# データの送信
scp -i .ssh/xxx.pem todo.db ユーザー名@xxx.xxx.xxx.xxx:~/tera
scp -i .ssh/xxx.pem test.db ユーザー名@xxx.xxx.xxx.xxx:~/askama
# データの取得
csp -i .ssh/xxx.pem ユーザー名@xxx.xxx.xxx.xxx.:~/tara/todo.db .
csp -i .ssh/xxx.pem ユーザー名@xxx.xxx.xxx.xxx.:~/askama/test.db .
# ルーターのグローバル IP アドレスを調べる
curl httpbin.org/ip
# URL の IP アドレスを確認する
nslookup example.com
# ホスト名を変更する
sudo hostnamectl set-hostname 新しいホスト名
reboot
# 再起動後、ターミナルを開くと新しいホスト名になっています。
# 都合により再起動できない場合は次のようにします。
sudo systemctl restart systemd-hostnamed
# ターミナルを一度閉じて、もう一度開くとホスト名が変更されています。
# アプリケーションのアンインストール(設定や環境なども完全に削除する)
sudo apt purge xxxx