🌊

ホスト上で動いているcode-serverにnginxでリバプロ

2021/08/17に公開

ホスト上で動いているcode-serverにnginxでリバプロ

  • 以前にcode-serverとnginx、両方コンテナで作ってリバプロ構成した
  • その後、code-serverのコンテナ内のdocker設定で詰まり、ホスト直接稼働に戻した
  • ということでホスト上で直接code-serverを動かして、そこにnginxでリバプロを組みなおす

設定

  • ホスト上で直接code-serverを動かす
shell
# ubuntu18.04
curl -fsSL https://code-server.dev/install.sh | sh
sudo systemctl enable --now code-server@$USER
# $HOME/.config/code-server/config.ymlに書いてある設定で動く

# $USERがログアウトしてもプロセス終了しないようにする
# 参考 https://harpyja.daemon.asia/wiki/Unix/systemd-continue-user-service
# /etc/systemd/logind.conf
KilluserProcesses=no

# ログイン時でなくサーバー起動時にユーザーサービスを開始する
loginctl enable-linger <user>
  • nginxをコンテナで動かす
docker-compose.yml
version: '3'
services:
  nginx:
    image: nginx
    ports:
      - '9000:80'
    volumes:
      - ./server.conf:/etc/nginx/conf.d/default.conf
  • nginxに渡すconfigはこう
server.conf
# $http_upgrade の値と $connection_upgrade の値をmapping
# $http_upgrade が空の時以外は $connection_upgradeは upgradeになる
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server{
  listen       80; # dockerで9000ポートにmapping
  server_name  example.com;

  location / {
    proxy_set_header Host $host;  # Host headerを送信元の情報にする
    proxy_pass    http://172.17.0.1:8080;  # HOSTのcode-serverに転送 172.17.0.1はdockerネットワークIPアドレス
    proxy_set_header Upgrade $http_upgrade;  
    proxy_set_header Connection upgrade;  # 送信元にコネクションを維持するか伝える
    proxy_set_header Accept-Encoding gzip;
  }
}
  • docker-compose up -d して http://example.com:9000 にアクセスして完了

Discussion