【Ubuntu, RHEL】Linux環境でのプロキシ設定まとめ

# はじめに
**社内ネットワーク**等、インターネット接続に**プロキシ**を通す必要がある環境では、正しく設定をしないと各種ツールが動作しません。

特にLinuxはツール毎にプロキシ設定が必要な場合が多く、逐次調べていると大きく時間をロスしてしまいます。

そこで、このような**プロキシ環境でLinuxの各種ツールを利用する方法**を、Debian系（Ubuntu等）、Red Hat系（RHEL、Amazon Linux等）での手法に分けてまとめたいと思います。

# プロキシ設定が必要なツール

よく使う以下のツール類にプロキシを適用する手順を紹介します

- ブラウザ
- 環境変数
- パッケージ管理ツール(apt, yum)
- curl
- wget
- Git
- Docker
- Python環境構築

## ブラウザ
Ubuntu20.04のブラウザでの設定例を紹介します (他OSでもデスクトップ環境が存在するものであればほぼ同様の設定が存在するはずです)

・「有線 接続済み」→有線設定→「ネットワークプロキシ」で「手動」を選択し、

`HTTP Proxy`に`http://プロキシのアドレス`と`ポート番号`(一般的に8080)を
`HTTPS Proxy`に`http://プロキシのアドレス`※と`ポート番号`(一般的に8080)
を記載する

※HTTPSプロキシも"http"で始まる場合が多いので注意

・FireFoxを開き、Google検索でインターネットに接続できればOK

## 環境変数

以下のコマンドで環境変数のプロキシを設定できます。
これにより環境変数からプロキシ情報を読み取るツールが使用できるようになります (大文字を使うツールと小文字を使うツールが存在するので、両方入れておくと無難です)

```bash
export http_proxy="http://プロキシのアドレス:ポート番号"
export https_proxy="http://プロキシのアドレス:ポート番号"
export HTTP_PROXY="http://プロキシのアドレス:ポート番号"
export HTTPS_PROXY="http://プロキシのアドレス:ポート番号"
```

上記だけではシェルを再起動すると環境変数が無効になってしまうので、以下コマンドで`.bashrc`に登録することで再起動後もスタートアップで環境変数に登録できます (nanoやviで編集してもOKです)

```bash
echo 'export http_proxy="http://プロキシのアドレス:ポート番号"' >> ~/.bashrc
echo 'export https_proxy="http://プロキシのアドレス:ポート番号"' >> ~/.bashrc
echo 'export HTTP_PROXY="http://プロキシのアドレス:ポート番号"' >> ~/.bashrc
echo 'export HTTPS_PROXY="http://プロキシのアドレス:ポート番号"' >> ~/.bashrc
```

・以下のコマンドでプロキシ内容が表示されれればOKです

```console
printenv http_proxy https_proxy HTTP_PROXY HTTPS_PROXY
```

## パッケージ管理ツール
パッケージ管理ツールはDebian系OS (Ubuntu, Debian, Raspberry Pi OS等)とRed Hat系OS (RHEL, CentOS, Amazon Linux等)で異なるため、それぞれ解説します

なお、現在のOSでは後述のapt.confやyum.confを設定しなくとも、上で設定した環境変数から自動で読み込んでくれる場合が多いようです ([参考](https://qiita.com/sachioksg/items/289e40d69382b1d09811))。本項は念のため設定する程度の認識で良いでしょう。

### Debian系

Debian系ではaptをパッケージ管理に使うので、そのプロキシ設定が必要です

#### ・apt

以下のコマンドでapt.confを開きます

```bash
sudo nano /etc/apt/apt.conf
```

以下を記載してctrl+Xで保存します

```bash
Acquire::http::Proxy "http://プロキシのアドレス:ポート番号";
Acquire::https::Proxy "http://プロキシのアドレス:ポート番号";
```

・以下コマンドでaptでパッケージをアップグレードできればOKです

```bash
sudo apt update
sudo apt upgrade
```

### Red Hat系
Red Hat系ではyumをパッケージ管理に使うので、そのプロキシ設定が必要です

#### ・yum

以下のコマンドでyum.confを開きます

```bash
sudo nano /etc/yum.conf
```

以下を記載してctrl+Xで保存します

```bash
proxy=http://プロキシのアドレス:ポート番号
```

・以下コマンドでyumでパッケージをアップデートできればOK

```bash
sudo yum update
```

## curl
curlはHTTPリクエスト等でデータを取得するツールで、多くの他ツールが間接的に利用しているため、プロキシ設定が必要となる場合が多いです。以下方法で設定します。

・curlが入っていなければ、以下コマンドでcurlをインストールします

```bash:Debian系の場合
sudo apt install curl
```

```bash:Red Hat系の場合
sudo yum install curl
```

・以下のコマンドで.curlrcを開きます

```console
sudo nano ~/.curlrc
```

・以下を記載してctrl+Xで保存します

```console
proxy=http://プロキシのアドレス:ポート番号
```

・以下で天気予報が帰ってくればOKです

```console
curl wttr.in/Tokyo
```

## wgetのプロキシ設定
wgetもcurlと類似した ([curlとの差はこちら参照](https://red-full-moon.com/wget-or-curl/))HTTPリクエスト等でデータを取得するツールで、多くの他ツールが間接的に利用しているため、プロキシ設定が必要となる場合が多いです。以下方法で設定します。

・以下のコマンドで.wgetrcを開きます

```console
sudo nano ~/.wgetrc
```

・以下を記載してctrl+Xで保存

```console
http_proxy=http://プロキシのアドレス:ポート番号
https_proxy=http://プロキシのアドレス:ポート番号
```

## Gitのプロキシ設定
今やプログラミングで必須と言える構成管理ツールであるGitですが、GitHubやGitLab等のリモートリポジトリとの連携にプロキシ設定が必要となります。以下方法で設定します。

・gitが入っていなければ、以下コマンドでgitをインストールします

```bash:Debian系の場合
sudo apt install git
```

```bash:Red Hat系の場合
sudo yum install git
```

・以下のコマンドでリモートリポジトリへのアクセス時はプロキシ経由となるようにします

```bash
git config --global http.proxy http://プロキシのアドレス:ポート番号
git config --global https.proxy http://プロキシのアドレス:ポート番号
```

・以下コマンドで、設定したプロキシが表示されれば成功です

```console
git config --global -l
```

※なお、設定によってはアクセストークンが必要となる事もあるので以下参照下さい

https://qiita.com/ponsuke0531/items/4fe191b7bed03342cff2#github%E3%81%AE2%E6%AE%B5%E9%9A%8E%E8%AA%8D%E8%A8%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E5%A0%B4%E5%90%88


## Docker
Gitと同様にモダンな開発では必須とも言えるDockerですが、インターネット経由でpullする際にプロキシ設定が必要となります。以下方法で設定します。

・下記コマンドでdockerスタートアップ時の設定(systemd)を開きます

```bash
sudo mkdir /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
```

・開かれたファイルに下記を追記して保存します

```bash
[Service]
Environment = 'http_proxy=http://プロキシのアドレス:ポート番号' 'https_proxy=http://プロキシのアドレス:ポート番号'
```

・下記コマンドでDockerクライアントを設定します

```bash
mkdir ~/.docker
nano ~/.docker/config.json
```

・開かれたファイルに下記を記載します
（=の右側は実際のプロキシを記載）

```bash
{
  "proxies": {
    "default": {
      "httpProxy": "http://プロキシのアドレス:ポート番号",
      "httpsProxy": "http://プロキシのアドレス:ポート番号"
    }
  }
}
```

・以下コマンドでDockerを再起動します

```bash
systemctl daemon-reload
systemctl restart docker
```

・以下コマンドで docker pullできれば (Hello Worldが表示されれば)成功です

```bash
docker pull hello-world
```

## Python環境構築

Pythonに関しては、以下の記事をご参照下さい

https://qiita.com/c60evaporator/items/7a757134d028a7734118