5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Minecraftサーバープラグインを安全にリモートデバッグする方法

Posted at

何がしたいのか

PaperやSpigotサーバーで動かすプラグインをリモートサーバーでデバックしながら開発したい。

デバッグとは

実行中のプログラムを止めて変数の中身を見たり、プログラムの変更内容を動的に切り替えることができるようになります。

なぜリモート?

VPSなどのリモートでサーバーを起動する、ぼく的メリットは2つあります。

他の開発者にリアルタイムで開発状況を見てもらえる

ローカルでサーバーを立てる場合でも不可能ではありませんが、ポート開放など環境を整えるのが面倒

低スペックパソコンに優しい

マイクラ鯖ソフトのリソースの使用量は凄まじく、特に8GBのノートパソコンなどではメモリ不足で開発効率が悪くなります。クライアント複数起動なんてもってのほか...

やり方

jvm引数

jarを実行する時に引数にこれをつける

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

IntellijIDEAなどで接続

image.png

sshポートフォワーディング

上記のjvm引数を次のようにしてもいいのですが、これではアドレスとポート番号が分かれば誰でも接続出来てしまい、非常に危険です。

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005

エディタなどでアタッチする前にこのような引数を付けてssh接続しておきます。接続先は、サーバーを起動している場所です。

ssh -L 5005:localhost:5005 <username>@<remote-host>

すると、localhost:5005でデバッグ起動中の鯖にリモートデバッグ接続できるようになります。

Dockerでサーバーを起動している場合

jvm引数のaddressはjdk9以上ではポートしか指定していないと、デフォルトでローカルホストのみになるそうです。
dockerホストから接続できるよう0.0.0.0を付けます。

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005

ホストの5005番に接続が来た時、サーバーを起動しているコンテナに繋がるように、dockerでもポートフォワーディングしておきます。加えて、127.0.0.1を付けることで外部からは接続できないようにしておきます。

-p 127.0.0.1:5005:5005

dockerのjvm引数の設定がよくわからなかったので、こちらを確認してみてください。

参考

5
4
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
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?