サーバーに、どこからでもアクセスしたいんや、、、
🎯 目的
以下の開発環境を実現することを目的とします。
- サーバー上にDockerで開発環境を構築
- VS Codeからリモート開発(Remote SSH)
- Tailscaleを使って外部ネットワークから安全にアクセス
- Python / Jupyter / Codex CLI を利用可能にする
🧠 全体構成
ネットワーク構成は以下の通りです。
[自分のPC] → VS Code + SSH → Tailscale → [サーバー] → Docker [開発コンテナ]
📦 使用技術
- Docker / Docker Compose: 環境の分離・管理
- Tailscale: VPN構築(メッシュネットワーク)
- VS Code Remote SSH: リモート開発
- Python / Jupyter: 開発言語・対話型環境
- Codex CLI: OpenAIのコード生成支援ツール
🛠 構築手順
1. プロジェクトディレクトリの作成
サーバーにSSH接続し、プロジェクト用のディレクトリを作成します。
mkdir -p ~/my-project
cd ~/my-project
2. ディレクトリ構成
以下のような構成でファイルを配置します。
my-project/
├── Dockerfile
├── docker-compose.yml
├── container-entrypoint.sh
├── smb.conf
├── requirements.txt
├── .env/
│ └── .env
└── .devcontainer/
└── devcontainer.json
3. Dockerfile の作成
Python 3.12をベースに、TailscaleやNode.js、Sambaなどをインストールします。
FROM python:3.12-slim-bookworm
WORKDIR /workspace
# 必要なパッケージのインストール
RUN apt-get update && apt-get install -y \
curl wget git build-essential samba iptables iproute2 \
&& curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
&& apt-get install -y nodejs \
&& curl -fsSL https://tailscale.com/install.sh | sh \
&& rm -rf /var/lib/apt/lists/*
# Pythonライブラリのインストール
RUN pip install --no-cache-dir --upgrade pip
COPY requirements.txt /tmp/
RUN pip install --no-cache-dir -r /tmp/requirements.txt
# Codex CLIのインストール
RUN npm install -g @openai/codex
# TailscaleとSambaの設定
RUN mkdir -p /var/run/tailscale /var/lib/tailscale
COPY container-entrypoint.sh /usr/local/bin/
COPY smb.conf /etc/samba/smb.conf
RUN chmod +x /usr/local/bin/container-entrypoint.sh
CMD ["/usr/local/bin/container-entrypoint.sh"]
4. docker-compose.yml の作成
コンテナの設定を記述します。
services:
dev-container:
container_name: my_dev_container
build: .
hostname: dev-workspace
volumes:
- ./tailscale_data:/var/lib/tailscale # Tailscaleの状態を保持
- .:/workspace # カレントディレクトリをマウント
env_file:
- .env/.env
cap_add:
- NET_ADMIN
- SYS_MODULE
devices:
- /dev/net/tun:/dev/net/tun
5. .env フォルダと環境変数の設定
Tailscaleの管理画面で生成したAuthKeyを記述します。
.env/.env
TS_AUTHKEY=tskey-xxxxxxxxxxxxxxxx # 自分のAuthKeyを入力
SMB_PASSWORD=your_password # Samba用のパスワード
6. エントリーポイントスクリプトの作成
コンテナ起動時にTailscaleを立ち上げるスクリプトです。
container-entrypoint.sh
#!/bin/bash
set -e
# Tailscaleデーモンの起動
tailscaled &
sleep 3
# Tailscaleへのログイン
if [ -n "$TS_AUTHKEY" ]; then
tailscale up --authkey="$TS_AUTHKEY" --ssh --hostname="dev-workspace"
fi
# Sambaの起動(必要に応じて)
smbd -D
# プロセスを維持
wait
🚀 コンテナの起動と確認
起動
cd ~/my-project
docker compose up -d --build
動作確認
コンテナが正常に動作し、Tailscaleにログインできているか確認します。
docker compose ps
docker logs my_dev_container
docker exec -it my_dev_container tailscale status
💻 ローカルPC(クライアント)側の設定
1. SSH接続確認
ローカルPCにもTailscaleをインストールし、コンテナに直接通信できるか確認します。
tailscale ping dev-workspace
ssh root@dev-workspace
2. SSH Config の設定
~/.ssh/config に以下の設定を追加して、VS Codeから接続しやすくします。
Host dev-server-ts
HostName dev-workspace
User root
3. VS Code から接続
- VS Codeで
Remote-SSH: Connect to Host...を選択。 -
dev-server-tsを選択して接続。 - フォルダを開くで
/workspaceを指定します。
🎉 完成
これで、外部ネットワークからでもサーバー上の隔離されたDocker環境へ、VS Codeを使って快適にアクセスできるようになります。
- 隔離環境: Dockerで環境を汚さない
- セキュア: TailscaleによりVPN経由で接続
- 利便性: VS Codeの強力な補完やCodex CLIが利用可能