🌊
ホスト上で動いているcode-serverにnginxでリバプロ
ホスト上で動いているcode-serverにnginxでリバプロ
- 以前にcode-serverとnginx、両方コンテナで作ってリバプロ構成した
- その後、code-serverのコンテナ内のdocker設定で詰まり、ホスト直接稼働に戻した
- docker outside of dockerでやろうとしたがcoderユーザにdocker実行権限をデフォルトで付けられなかった
- newgrp dockerすれば動くのだが、、、
- https://blog.nijohando.jp/post/docker-in-docker-docker-outside-of-docker/
- docker outside of dockerでやろうとしたがcoderユーザに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