0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSLでWebアプリ用にUbuntu Server 20.04+プロキシの疑似本番環境を作成した話

Posted at

はじめに

アルバイトにて、プロキシ環境下で動くUbuntu Server 20.04上にWebアプリを構築することになったので、
WSLを用いてUbuntu Server 20.04を動かし、Squidを使ってホストのWindowsをプロキシ化することで疑似的に本番環境を再現した

TL; DR

  1. ホストWindowsをSquidを使ってプロキシ化
  2. WSLへ使いたいディストリビューション(Ubuntu Server 20.04)をカスタムインポート
  3. Ubuntu Server 20.04インスタンス上で環境構築

1. ホストWindowsのプロキシ化

WSL上で動くUbuntu ServerのプロキシをホストWindowsに担ってもらうことにしており、
プロキシの作成にはSquid for Windowsを利用した

1. Squidのインストール

こちらSQUID FOR WINDOWSからsquid.msiをダウンロードしインストール

2. プロキシの設定と起動

Squidでは基本的なプロキシ設定はデフォルトではC:\Squid\etc\squid\squid.confに記述されている

今回は特に設定はせずデフォルトのまま使用した

2. WSLへのUbuntu Server 20.04のカスタムインポート

WSLではMicrosoft Storeにあるディストリビューションを利用する事が多いが、
今回のUbuntu Server 20.04はMicrosoft Storeでは提供されていないため、
カスタムインポートという形で追加する必要がある

ここをみると、カスタムインポートでは

  1. Docker Desktopを通じて当該ディストリビューションのtarファイルを入手
  2. tarファイルをWSLにインポート
    という流れがオーソドックスなものらしかったので、それを実行した

1. Docker Desktopを利用したtarファイルの入手

以下の作業はWSLのUbuntuインスタンスのbashで実行した

また、Ubuntuインスタンスでdockerコマンドを利用できる必要があるため、
こちらを参考に、WSL Integrationを当該インスタンスで有効にした

加えて、今回はUbuntu Server 20.04のファイルが欲しかったため、こちらを参考にコンテナを作成し、これを利用した

流れは以下の通り

ubuntuイメージをpull

docker image pull ubuntu

ubuntuイメージからコンテナを作成して標準入力に入る

docker run -it --name wsl_export ubuntu

コンテナにUbuntu Server用パッケージをインストール

apt-get update && apt-get install -y ubuntu-server

この際、ロケール等を聞かれるので自分の環境に合わせて設定した

コンテナを終了

exit

コンテナをマウントされたCドライブにtarファイルとしてエクスポート

docker export wsl_export > /mnt/c/temp/ubuntu_server_20_04.tar

この場合では、WSLを実行しているホスト(Windows)のCドライブ直下にtempというフォルダが作られ、その中にubuntu_server_20_04.tarという名前でtarファイルが作成される

コンテナをクリーンアップ

docker rm wsl_export

2. tarファイルをWSLにインポート

tarファイルが手に入ったので、ホスト(Windows)のPowershellを管理者権限で開き、以下のコマンドでWSLにディストリビューションをインポートした

なせか、デフォルトのディレクトリで以下のコマンドを実行すると
Error code: Wsl/ERROR_FILE_NOT_FOUND
となったので、C:\tempにcdしたうえで以下のコマンドを実行した

実行後にインポートしたtarファイルと同階層にインポートしたインスタンスの仮想HDD(vhdxファイル)が作成されるため、きれいに管理する場合はtarファイルを動かしてからインポートしたほうがいい
(インポート後にvhdxファイルを移動する方法もある)

 wsl --import UbuntuServer20.04 C:\temp .\ubuntu_server_20_04.tar

3. Ubuntu Server 20.04インスタンス上で環境構築

サーバ用の設定は同僚にAnsibleでほとんど自動化してもらったので、今回説明するのは情報収集に時間がかかった以下の3つ

  • ユーザ設定
  • 各種基本パッケージのインストール
  • ホストWindowsのSquidプロキシへの接続

ユーザ設定

使用しているUbuntu ServerインスタンスはDockerコンテナをもとに生成したものなので、基本的なパッケージしか入っておらずsudoコマンドが無く、rootユーザしか登録されていない
そのため、sudoコマンドのインストールとユーザ設定が必要になる

sudoコマンドのインストール

apt update
apt install sudo

rootユーザのパスワード設定

sudo passwd root

ユーザの追加とsudo権限の付与

sudo adduser hoge
sudo gpasswd -a hoge sudo

デフォルトユーザの変更

今のままだとインスタンスに接続したとき毎回rootで入ってしまうので、
デフォルトユーザを/etc/wsl.confに以下を記述し設定する

[user]
default=hoge

各種基本パッケージのインストール

hwclockパッケージのインストール

sudo apt-get install util-linux-extra

ufwパッケージのインストール

sudo apt -y install ufw

cronパッケージのインストール

sudo apt install -y cron

ホストWindowsのSquidプロキシへの接続

WSL2のネットワーク環境はこちらに書いてあるように、デフォルトでは
仮想ネットワークアダプタ(Hyper-Vでは仮想スイッチと呼ぶ)を利用した内部ネットワークであり、
簡単に言うと、仮想的にホストWindowsとWSLインスタンスがスイッチングハブで接続されているようなもので、
ホストWindowsとインスタンスは別々のローカルIPアドレスを使用して接続している

ホストのローカルIPアドレスの確認

ip route show | grep -i default | awk '{ print $3}'

proxy設定

こちらを参照に.bash_profileファイルを作成・編集しsource .bash_profileてシェルスクリプトを実行し環境変数を設定した

proxy="server ip"
export http_proxy="http://$proxy"
export https_proxy="$http_proxy"

設定が正常に行えていれば、curlなどでhttp通信をした時、
ホスト側のSquidのログファイル(デフォルトではC:\Squid\var\log\squid\access.log)にログが記載される

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?