Ada situasi ketika Anda perlu memperbaiki kasing yang rumit pada mesin jarak jauh, tetapi akses ke server hanya di bawah VPN dengan pembatasan port terbuka. Dalam artikel ini saya ingin berbagi dengan kolega saya sebuah "diskusi" kecil tentang topik debugging jarak jauh melalui SSH di bawah VPN untuk menghemat waktu yang berharga pada pengaturan. Saya menganggap misi tercapai jika pria ini berguna bagi seseorang.
SpoilerServer dikerahkan ke Ubuntu, masing-masing, selanjutnya semua pengaturan server akan berada di bawah Ubuntu. Pada mesin lokal - Mac, tetapi di sini kita hanya perlu klien SSH dan IDE dengan debugger untuk xdebug, sehingga pengaturannya relatif universal.
Pendahuluan
Jadi, ada server jauh di belakang sirkuit yang dilindungi. Di server di buruh pelabuhan, microservice dengan xdebug dihidupkan. Ada akses dari luar hanya melalui SSH dan via VPN.
Tujuan
Tujuan: untuk memulai debugging jarak jauh dari microservice secara lokal melalui xdebug.
Ayo pergi ...
1. Konfigurasikan sshd di server jauh
Hal pertama yang harus Anda perhatikan adalah Anda perlu mengkonfigurasi sshd di server sehingga memungkinkan Anda untuk menerima koneksi dari IP apa pun, bukan hanya 127.0.0.1. Secara default, opsi ini dinonaktifkan.
Di sinilah dibutuhkan root. Kami akan menganggap bahwa Anda memilikinya :-)
sudo echo "GatewayPorts yes" >> /etc/ssh/sshd_config sudo service ssh restart
2. Cari tahu alamat mesin host di jaringan buruh pelabuhan
Karena
xdebug berjalan di buruh pelabuhan dan menghubungkan dirinya ke mesin lokal (dan dalam kasus saya IP ini tidak menyelesaikan, karena itu adalah koneksi VPN), maka berguna untuk mengetahui IP dari mesin host pada jaringan buruh pelabuhan. Ini dapat dilakukan dengan menggunakan perintah (dijalankan di server):
ip -4 addr show docker0 | grep -Po 'inet \K[\d.]+'
Misalkan tim mengeluarkan "172.17.0.1"
3. Kami mendaftarkan IP host jarak jauh dalam pengaturan xdebug dalam wadah
Contoh pengganti melalui sed, tetapi Anda juga dapat menggunakan pena di editor, yang lebih nyaman untuknya:
sed -i 's/xdebug.remote_host=.*/xdebug.remote_host=172.17.0.1/' /usr/local/etc/php/conf.d/xdebug.ini
Tanpa meninggalkan kasir, kami meresepkan port "benar" untuk debugging. Dalam kasus saya, microservice dinaikkan pada sekelompok nginx & php-fpm dan
biasanya port 9000 sibuk di bawah php-fpm , dan oleh karena itu saya menggunakan port 9001 untuk debugging.
sed -i 's/xdebug.remote_port=.*/xdebug.remote_port=9001/' /usr/local/etc/php/conf.d/xdebug.ini
Patut diperiksa di sini bahwa debugging jarak jauh pada prinsipnya diaktifkan: "xdebug.remote_enable = 1"
grep xdebug.remote_enable /usr/local/etc/php/conf.d/xdebug.ini
Biasanya, pengaturan ini ditransfer ke Dockerfile atau dipasang melalui volume.
Semuanya sudah siap di server. Sekarang kita dipindahkan ke mesin lokal untuk membangun terowongan.4. Teruskan terowongan SSH ke server jarak jauh
Terowongan dimunculkan oleh perintah (dijalankan pada mesin lokal):
SSH -R 9001:0.0.0.0:9001 user@remote_server
Di tempat ini terdengar musik magis. Pengaturan utama selesai, maka hanya lingkungan debugging.
Pengaturan IDE
Biasanya saya menggunakan vscode, sehingga debugger melalui port listening dimulai tanpa masalah. Saya akan memberikan contoh konfigurasi untuk vscode (cukup tambahkan node ke launch.json):
{ "name": "Listen for XDebug", "type": "php", "request": "launch", "port": 9001, "cwd": "${workspaceFolder}", "pathMappings": { "/repo": "${workspaceRoot}" } },
"PathMappings" adalah aturan untuk memetakan direktori mesin lokal dan jarak jauh, di mana "/ repo" adalah direktori dengan kode debugged di buruh pelabuhan. Debugger harus dapat menavigasi file dan breakpoints.
PS Yah, ampun?
Jalankan netcat di mesin lokal dan dengarkan:
nc -l 9001
Jalankan skrip baris tunggal di buruh pelabuhan dan cetak:
php -r 'print("Hi!" . PHP_EOL);'
Di mesin lokal, kita akan melihat tanda-tanda panggilan xdebug:
<?xml version="1.0" encoding="iso-8859-1"?> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug"...
Hore! Semuanya sudah siap.
Sekarang Anda dapat men-debug kode favorit Anda pada mesin jarak jauh di IDE. Ada minus yang jelas dalam metode yang dijelaskan: konfigurasi ulang sshd di server. Mungkin ada cara yang lebih "tenang". Bagaimanapun, saya akan senang dengan komentar dan saran Anda.
Terima kasih atas perhatian anda!