it-swarm-id.com

Hal-hal sysadmin apa yang harus diketahui oleh setiap programmer?

Sebagai seorang programmer, kita cenderung menerima begitu saja sysadmin. Beberapa kali saya tanpa sysadmin yang baik benar-benar membuat saya menghargai apa yang Anda lakukan. Ketika kita berkelana ke lingkungan tanpa sysadmin, kata-kata bijak apa yang bisa Anda berikan kepada kami?

96
Nathan DeWitt

Saya akan mulai dengan:

  1. Selal memiliki semacam sistem cadangan. Bahkan lebih baik jika memiliki sejarah.
  2. Pertimbangkan satu-satunya poin kegagalan dan bagaimana menghadapinya jika mereka gagal.
  3. Bergantung pada jumlah komputer yang terlibat, mencari cara untuk membuat dan membuat gambar standar di seluruh komputer akan membuat hidup semua orang lebih mudah - tidak ada "itu bekerja pada saya" karena mereka memiliki program ini dan itu yang biasanya tidak diinstal.
  4. Dokumentasikan semuanya, jika hanya karena Anda akan lupa bagaimana Anda mengatur sesuatu.
  5. Mengikuti pembaruan keamanan.
70
Chealion

<masukkan disclaimer pos besar di sini>

Beberapa di antaranya telah dikatakan sebelumnya, tetapi perlu diulang.

Dokumentasi:

  • Dokumentasikan semuanya. Jika Anda tidak memilikinya, instal wiki di bawah radar, tetapi pastikan Anda mencadangkannya. Mulailah dengan mengumpulkan fakta, dan suatu hari, gambaran besar akan terbentuk.

  • Buat diagram untuk setiap potongan logis dan tetap perbarui. Saya tidak bisa menghitung berapa kali peta jaringan atau diagram cluster yang akurat menyelamatkan saya.

  • Terus buat log untuk setiap sistem, meskipun itu hanya salin dan tempel perintah untuk cara membuatnya.

  • Saat membangun sistem Anda, instal dan konfigurasikan aplikasi Anda, ujilah itu berfungsi dan lakukan benchmarking Anda. Sekarang, bersihkan cakramnya. Serius. 'dd' megabyte pertama dari bagian depan disk atau menjadikan kotak itu tidak bisa di-boot. Jam terus berdetak: buktikan dokumentasi Anda dapat membuatnya kembali dari awal (atau, lebih baik lagi, buktikan kolega Anda tidak lebih dari dokumentasi Anda). Ini akan membentuk setengah dari rencana Pemulihan Bencana Anda.

  • Sekarang Anda memiliki paruh pertama rencana Pemulihan Bencana Anda, mendokumentasikan sisanya; cara mendapatkan status aplikasi Anda kembali (mengembalikan file dari tape, memuat ulang basis data dari dump), rincian vendor/dukungan, persyaratan jaringan, bagaimana dan di mana mendapatkan perangkat keras pengganti - apa pun yang dapat Anda pikirkan yang akan membantu membuat sistem Anda kembali.

Otomatisasi:

  • Otomatiskan sebanyak yang Anda bisa. Jika Anda harus melakukan sesuatu tiga kali, pastikan yang kedua dihabiskan untuk mengembangkan otomasi Anda sehingga yang ketiga sepenuhnya otomatis. Jika Anda tidak dapat mengotomatiskannya, dokumentasikan. Ada suite otomatisasi di luar sana - lihat apakah Anda dapat membuatnya berfungsi untuk Anda.

Pemantauan:

  • Instrumentasi aplikasi adalah emas murni. Mampu menonton transaksi yang melewati sistem membuat debugging dan pemecahan masalah jadi lebih mudah.

  • Buat tes end-to-end yang membuktikan tidak hanya bahwa aplikasi itu hidup, tetapi benar-benar melakukan apa yang seharusnya. Poin adalah milik Anda jika dapat didongkrak ke dalam sistem pemantauan untuk tujuan peringatan. Ini melayani tugas ganda; selain membuktikan bahwa aplikasi itu berfungsi, itu membuat peningkatan sistem secara signifikan lebih mudah (memantau laporan sistem hijau, pemutakhiran bekerja, waktu untuk pulang).

  • Patok tolok ukur, pantau, dan kumpulkan metrik untuk semua hal yang perlu dilakukan. Tolok ukur memberi tahu Anda kapan mengharapkan sesuatu akan mengeluarkan asap ajaib. Pemantauan memberi tahu Anda kapan ada. Metrik dan statistik memudahkan mendapatkan kit baru (dengan asap ajaib segar) melalui manajemen.

  • Jika Anda tidak memiliki sistem pemantauan, terapkan satu. Poin bonus jika Anda benar-benar melakukan jack tes end-to-end di atasnya.

Keamanan:

  • "chmod 777" (alias beri semua akses/hak istimewa) tidak pernah solusinya.

  • Berlangganan prinsip 'paling sedikit'; jika tidak diinstal, disalin, atau hidup di disk, itu tidak dapat dikompromikan. OS dan instalasi perangkat lunak "Kitchen sink" mungkin membuat hidup lebih mudah selama fase pembangunan, tetapi Anda akhirnya membayar untuk itu.

  • Ketahui untuk apa setiap port terbuka di server. Audit mereka sesering mungkin untuk memastikan tidak ada yang baru muncul.

  • Jangan mencoba membersihkan server yang dikompromikan; perlu dibangun kembali dari awal. Membangun kembali ke server cadangan dengan media yang baru diunduh, mengembalikan hanya data dari cadangan (karena binari dapat dikompromikan) atau mengkloning Host yang dikompromikan ke suatu tempat yang terisolasi untuk analisis sehingga Anda dapat membangun kembali pada kit yang sama. Ada mimpi buruk hukum yang menyeluruh di sekitar ini, jadi berbuat salah di sisi pelestarian jika Anda perlu mencari jalan hukum. (Catatan: IANAL).

Perangkat keras:

  • Jangan pernah berasumsi bahwa apa pun akan melakukan apa yang tertulis di kotak. Buktikan itu melakukan apa yang Anda butuhkan, kalau-kalau tidak. Anda akan mendapati diri Anda mengatakan "hampir berhasil" lebih sering daripada yang Anda harapkan.

  • Jangan berhemat pada manajemen perangkat keras jarak jauh. Konsol serial dan manajemen lampu harus dianggap wajib. Poin bonus untuk strip daya yang dikendalikan dari jarak jauh untuk saat-saat ketika Anda kehabisan pilihan.

(Di samping: Ada dua cara untuk memperbaiki masalah pada jam 3 pagi, yang satu melibatkan kehangatan, bekerja dengan laptop melalui VPN di piyama Anda, yang lain melibatkan jaket tebal dan perjalanan ke pusat data/kantor. Saya tahu yang mana yang saya gunakan lebih suka.)

Manajemen proyek:

  • Libatkan orang-orang yang akan mempertahankan sistem sejak hari pertama siklus hidup proyek. Waktu tunggu pada kit dan waktu otak dapat dan akan mengejutkan, dan tidak ada keraguan mereka akan (harus?) Memiliki standar atau persyaratan yang akan menjadi ketergantungan proyek.

  • Dokumentasi adalah bagian dari proyek. Anda tidak akan pernah punya waktu untuk menulis semuanya setelah proyek ditutup dan sistem telah pindah ke pemeliharaan, jadi pastikan itu dimasukkan sebagai upaya pada jadwal di awal.

  • Terapkan keusangan yang direncanakan ke dalam proyek sejak hari pertama, dan mulailah siklus refresh enam bulan sebelum hari dimatikan yang Anda tentukan dalam dokumentasi proyek.

Server memiliki masa hidup yang ditentukan ketika mereka cocok untuk digunakan dalam produksi. Akhir dari masa hidup ini biasanya didefinisikan sebagai setiap kali vendor mulai mengenakan biaya lebih banyak dalam pemeliharaan tahunan daripada biaya untuk menyegarkan kit, atau sekitar tiga tahun, mana yang lebih pendek. Setelah waktu ini, mereka bagus untuk lingkungan pengembangan/pengujian, tetapi Anda tidak harus bergantung pada mereka untuk menjalankan bisnis. Meninjau kembali lingkungan pada 2 1/2 tahun memberi Anda banyak waktu untuk melompati manajemen yang diperlukan dan simpanan keuangan untuk pemesanan kit baru dan untuk menerapkan migrasi yang lancar sebelum Anda mengirim kit lama ke vendor besar di angkasa.

Pengembangan:

  • Pastikan pengembangan dan sistem pementasan Anda menyerupai produksi. VM atau teknik virtualisasi lainnya (zona, LDOM, vservers) membuat klon produksi dunia nyata dalam segala hal tetapi kinerjanya mudah.

Cadangan

  • Data yang tidak Anda cadangkan adalah data yang tidak Anda inginkan. Ini adalah hukum abadi. Pastikan kenyataan Anda cocok dengan ini.

  • Cadangan lebih sulit daripada yang terlihat; beberapa file akan dibuka atau dikunci, sedangkan yang lain harus quiesced untuk memiliki harapan pemulihan, dan semua masalah ini perlu diatasi. Beberapa paket cadangan memiliki agen atau metode lain untuk menangani file yang terbuka/terkunci, paket lain tidak. Membuang basis data ke disk dan mencadangkannya dianggap sebagai satu bentuk "quiescing", tetapi itu bukan satu-satunya metode.

  • Cadangan tidak berharga kecuali diuji. Setiap beberapa bulan, tarik kaset acak dari arsip, pastikan itu benar-benar memiliki data di dalamnya, dan datanya konsisten.

Dan yang paling penting...

Pilih mode kegagalan Anda, atau Murphy akan ... dan Murphy tidak bekerja sesuai jadwal Anda.

Desain untuk kegagalan, mendokumentasikan titik lemah yang dirancang masing-masing sistem, apa yang memicu mereka dan bagaimana memulihkan. Ini akan membuat perbedaan ketika ada kesalahan.

44
Greg Work

Jangan menganggap itu mudah. Saya tahu banyak programmer yang berpikir bahwa hanya karena mereka dapat mengatur IIS atau Apache di sana kotak dev bahwa mereka dapat menjalankan pertanian web. Memahami apa pekerjaan yang terlibat dan melakukan penelitian dan perencanaan Anda, jangan ' Menurut saya pekerjaan sysadmin adalah hal mudah yang dapat Anda lakukan dalam 10 menit untuk menerapkan aplikasi Anda.

43
Sam Cogan
  • Sadarilah bahwa, baik atau buruk, banyak server dan/atau peralatan jaringan yang cenderung sangat mirip anak-anak dari keluarga kedua. Ini adalah bayi mereka. Mereka merawat mereka, membantu mereka ketika mereka sakit, dan memantau mereka dengan waspada untuk masalah. Ini seharusnya tidak seperti ini, tetapi setelah bertahun-tahun, sering kali adalah . Ingatlah hal ini saat Anda menyampaikan kepada mereka kekhawatiran Anda tentang peralatan yang tidak berkinerja baik atau sesuai harapan. Dan jika Anda mendapatkan balasan yang tidak Anda mengerti, cobalah memfilternya melalui pandangan dunia ini.
  • Berhubungan baik. Kedengarannya cheezy, tapi nilainya emas. Suatu hari, Anda akan membutuhkan bantuan khusus. Dan suatu hari, sysadmin itu akan dengan senang hati pergi keluar dari jalan mereka untuk membuat hidup sedikit lebih mudah bagi Anda, hanya sekali ini saja.
  • Hubungan kerja itu berjalan dua arah. Jika sysadmin sangat sibuk, dan Anda bisa membuat hidup sedikit lebih mudah dengan menulis skrip atau program kecil, maka lakukanlah! Mereka akan menghargainya lebih dari yang Anda tahu.
  • Sangat jelas. "Ini menyebalkan" tidak sejelas "memiliki koneksi jaringan yang terputus-putus sedikit mengganggu, ada kemungkinan Anda bisa melihatnya?"
  • Jika menurut Anda aplikasi Anda akan menskalakan, tanyakan kepada admin sebelumnya dengan asumsi ia akan. Mereka mungkin "melihat" sesuatu yang tidak Anda ketahui, atau tahu sesuatu tentang batas kinerja peralatan yang akan Anda gunakan.
  • Jika aplikasi Anda membutuhkan penyetelan, tetapi tampaknya itu bukan masalah kode, tanyakan dengan baik tentang kinerja server. Sysadmin merawat mesin-mesin mereka dengan perhatian penuh kasih dan tidak senang ketika mereka "sakit" atau "nakal". Bertanya dengan baik akan mengubah mesin yang sakit (atau memperbaikinya/diganti).
  • (seperti yang disebutkan di tempat lain) mendokumentasikan pengaturan yang Anda gunakan, dan mengapa Anda menggunakannya. Hanya memiliki "set kotak centang X" atau "batalkan file konfigurasi baris komentar Y" tidak membantu. Anda bisa mengatur opsi yang menghapus semua data Anda di reboot berikutnya untuk semua yang Anda tahu.
  • Jika Anda tidak punya waktu untuk mendokumentasikan pengaturan di atas kertas, cobalah untuk mendokumentasikannya di sistem jika memungkinkan. Dengan file konfigurasi, ini hampir menjadi praktik standar - setiap perubahan pengaturan harus di-datestamp, dengan inisial, efek yang diharapkan dari pengaturan itu, dan alasannya mengapa itu diubah (lihat poin sebelumnya). Kebiasaan kecil ini telah menyelamatkan bacon saya lebih dari sekali selama masa krisis. "Mengapa kita melakukan itu?" "Karena kita mengamanatkan kebijakan X, dan pengaturan Y memberi kita perilaku yang kita butuhkan untuk kebijakan X".
  • Bir. Atau Cola. Atau bahkan Air. Minuman selalu disambut. Menjadi seorang sysadmin adalah pekerjaan yang haus.
27
Avery Payne

Keamanan bukanlah renungan. Meskipun aplikasi yang diretas dapat membuat programmer terlihat tidak kompeten, itu (setidaknya) akhir pekan yang hilang dihabiskan untuk memverifikasi, membersihkan, dan/atau memulihkan dari cadangan untuk sysadmin.

Untuk itu, jangan perlakukan backup sebagai kontrol versi. Mereka untuk pemulihan bencana, dan tidak benar-benar dirancang untuk mengembalikan kode Anda karena Anda lupa apa yang Anda ubah.

Dan hentikan menyalahkan Pembaruan Windows secara membuta karena kode Anda rusak. Saya tidak peduli itu berhasil, katakan padaku mengapa itu tidak berfungsi sekarang - maka kita bisa melihat kesalahan siapa itu.

23
Mark Brackett

Cara men-debug masalah jaringan dan menonton program Anda berjalan dengan alat sysadmin. Sebagai seorang programmer yang memulai dalam administrasi sistem, saya kagum dengan betapa impotennya banyak programmer menjadi jaringan "berhenti begitu saja."

  • Wireshark, untuk menonton kode Anda berjalan dalam mode kotak-hitam, paket-per-paket
  • Alat untuk terhubung langsung ke layanan jaringan:
    • Telnet, netcat, atau socat untuk koneksi biasa lebih dari TCP atau UDP
    • OpenSSL untuk hal yang sama dengan enkripsi (petunjuk: coba openssl s_client -connect target-Host:port kadang-kadang), untuk menghubungkan secara manual ke layanan jaringan
  • Gali (dalam paket BIND 9) untuk resolusi nama debugging
  • Mampu memberi tahu bagian mana dari tumpukan jaringan yang gagal berdasarkan waktu dan karakteristik koneksi yang gagal
  • Kemungkinan HTTPFox dan/atau Firebug
17
jhs

Ketahui cara memecahkan masalah.

Sangat mudah untuk tidak bertanggung jawab (mis., Jaringan Anda menyembunyikan komunikasi saya dengan basis data). Ini mungkin kesalahan jaringan, tetapi Anda harus memiliki log aplikasi dengan kesalahan yang, menggunakan Google atau SO, dapat mengungkapkan masalah dalam konfigurasi aplikasi.

Semua orang suka menyalahkan perangkat keras, OS, atau jaringan, jadi jika Anda berlatih sedikit lebih rajin, Anda akan membuat sysadmin menjadi orang yang bahagia. Karena, jika tidak ada yang lain, Anda mungkin dapat mengarahkan mereka ke arah yang spesifik tentang apa yang mungkin salah (sebagai lawan dari mengatakan "jaringan Anda menyebalkan" atau sesuatu yang sama-sama membantu).

14
Milner

Dokumentasikan semua yang Anda bisa. Tidak dapat memberi tahu Anda berapa kali sysadmin terakhir berpikir akan lucu untuk tidak mendokumentasikan sesuatu untuk 'keamanan pekerjaan' atau seseorang yang hanya ingin masuk dan keluar. Sama seperti seorang programmer harus memberikan komentar yang baik, sysadmin harus mendokumentasikan. Diagram topologi juga bagus.

8
Terry

Rencana B.

Selalu miliki rencana pemulihan bencana saat merancang dan mengembangkan solusi. Kenali satu titik kegagalan yang dapat menyebabkan pemadaman.

7
spoulson

Dokumentasi: tidak perlu menjadi gila, tetapi bagaimana aplikasi bekerja, diagram yang menunjukkan bagaimana bit cocok dan cara untuk menguji setiap komponen ketika semuanya salah. Sampel data dan outputnya bagus.

Persyaratan: modul apa yang diandalkannya? Versi? OS?

Pemantauan: idealnya pengembang akan memasukkan informasi pemantauan dan tes dengan aplikasi.

Berbicara tentang pengemasan, KEMASAN! Tidak ada yang lebih buruk daripada "penyebaran" yang berarti memeriksa revisi baru file dari VCS dan menyalinnya ke sekelompok server. Terlalu sering programmer tidak menghargai kerumitan penggunaan perangkat lunak: ada alasan mengapa perangkat lunak versi, paket menjadi tulang punggung sebagian besar OS.

Jika seorang pengembang mendatangi saya dengan RPM yang diinstal pertama kali dengan dokumentasi yang ringkas, komprehensif, dan beberapa uji nagios, mereka akan menjadi sahabat baru saya.

6
markdrayton

Saya terkejut bahwa tidak ada dari 17 jawaban yang diberikan di sini sejauh ini termasuk apa pun tentang memastikan aplikasi Anda berjalan saat masuk sebagai pengguna standar.

Selain proses instalasi, aplikasi harus berjalan dengan baik ketika masuk dengan akun pengguna standar.

6
Bryan
  • berbicara dengan admin Anda baik secara formal maupun informal tentang apa yang Anda lakukan. Mereka biasanya akan tertarik dan dapat mengungkapkan dampak yang mungkin terjadi pada produksi sejak dini. Anda tidak harus setuju, tetapi membantu mengidentifikasi titik-titik masalah.
  • Tidak, Anda tidak dapat memiliki seluruh server untuk diri sendiri ... Jika perlu, ini adalah keputusan politik, terlepas dari seberapa teknis suara itu. Jika Anda ingin bekerja di bidang politik, silakan saja.
  • Perangkat keras produksi sering terlihat berbeda dari server pengembangan Anda, dan bahkan di dalam peternakan, spesifikasi pada mesin berbeda.
  • Pelajari bagaimana produksi diatur, karena Anda kemungkinan tidak dapat meniru di desktop Anda, melakukan ini mencegah Anda membuat asumsi yang buruk.
  • Hanya karena Anda dapat men-cache hal-hal di memori tidak berarti Anda harus, tunggu bottleneck terlebih dahulu (dalam pengujian unit atau pengujian kinerja pra-produksi)
  • jika Anda menempelkan data dalam basis data, pikirkan tentang bagaimana Anda dapat membagi data menjadi data hanya baca (yang dapat diskalakan secara horizontal) dan data baca-tulis (yang biasanya hanya berskala vertikal).
  • jika Anda menempelkan data dalam basis data, harus benar-benar menjadi RDBMS? ada sistem pasangan kunci-nilai lain di luar sana yang skalanya lebih baik (netcache).
  • dont think AJAX adalah solusi akhir semua, kelihatannya keren, tetapi membatasi kemungkinan pemantauan dan otomatisasi. Saya tidak mengatakan jangan menggunakannya, hanya berpikir dua kali.
4
ericslaw

OK ini sedikit mengomel tapi:

a) Ketika melakukan pengkodean, asumsikan bahwa infrastruktur yang mendasarinya bisa gagal, dan tidak berasal dari senang-senang selalu di daratan. Atau Google.

b) Kami mungkin tidak memiliki sumber daya untuk mengimplementasikan hal-hal seperti infrastruktur yang telah Anda baca, jadi santai saja pada kami ketika semuanya turun. Mungkin kita tahu apa yang perlu dilakukan, tetapi untuk alasan apa pun itu belum terjadi. Kami adalah mitra Anda!

c) Seperti jhs katakan di atas, akan sangat membantu jika Anda memiliki pengetahuan yang lewat dengan alat untuk memecahkan masalah infrastruktur, seperti ping, traceroute (atau menggabungkan keduanya - mtr), Dig, dll. Poin bonus besar untuk mengetahui tentang Wireshark.

d) Jika Anda memprogram komputer, Anda benar-benar harus tahu bagaimana ia terhubung ke jaringan dan dasar-dasarnya seperti dapat mengurai output dari ipconfig/all atau ifconfig. Anda harus dapat mengaktifkan dan menjalankan koneksi internet dengan bantuan minimal.

Kalau tidak, saya pikir Avery cukup berhasil. Devs yang melakukan sysadmin kecil bernilai emas! Tetapi sama-sama, sysadmin yang memahami bagaimana para dev mengerjakan berbagai hal (termasuk versi, dll.) Sangat penting di zaman dan zaman ini.

Sepertinya ini sedang mengudara saat ini, saya telah memperhatikan lebih banyak diskusi tentang hubungan dev/ops di blog - lihat

Keeping Twitter Twittering

Partitions and Warfare

ji Pertama dalam Operasi

4
Cawflands

Backup Backup Backup .... Uji cadangan .... Selalu siap untuk memutar kembali

4
trent

Ini mungkin berlaku hanya untuk pemrogram pemula, tetapi saya berurusan dengan beberapa hal pada setiap proyek dengan beberapa pemrogram.

  1. "Ini bekerja pada mesin saya" tidak pernah merupakan pernyataan yang valid. Merupakan tanggung jawab programmer untuk membuat program instalasi untuk digunakan di server, atau setidaknya mendokumentasikan setiap koneksi dan dll serta add-in yang akan diperlukan di server.

  2. (Saya sudah mendengar ini beberapa kali, jadi tolong jangan tertawa) Saya menjalankan exe di server dari mesin saya dan itu berfungsi. Tetapi, ketika saya menjalankannya di server (Citrix, Terminal Server, dll) tidak berfungsi. Tolong pahami dll dan ocx dan apa pun yang dibutuhkan oleh program Anda dan di mana serta bagaimana mereka terdaftar, dan bagaimana program Anda menggunakannya.

Ini mungkin tampak sederhana, tetapi saya menghadapinya terus-menerus.

Brian

4
Brian

Bahwa tidak ada satu kelompok atau fungsi yang 'lebih baik' dari yang lain dan tidak ada yang membutuhkan 'otak yang lebih besar' dari satu sama lain. Saya telah melihat kedua belah pihak mendapatkan semua prima-dona'ish di perusahaan lain - Anda semua berusaha untuk mencapai tujuan yang sama - fokus pada kesamaan ini dan bukan fakta bahwa Anda menggunakan alat yang berbeda.

3
Chopper3

Arsitek infrastruktur berubah menjadi programmer, mungkin ingin memutar kembali transaksi itu di masa depan :)

  1. Saling berbicara, awal dan sering. Tinjau desain dengan orang-orang yang akan mengelola infrastruktur yang akan digunakan aplikasi Anda (jika Anda tahu siapa yang akan menjadi).
  2. Kehilangan data nol adalah mungkin, tetapi ini adalah tanggung jawab yang dibagikan oleh pengembang dan sysadmin. Sekali lagi, berbicara satu sama lain dapat membantu di sini.
  3. Staf infrastruktur Anda seharusnya terlibat dalam menentukan persyaratan yang tidak fungsional.
  4. Atur bir (saat pekerjaan selesai) dan pizza (saat kami sedang bekerja). Entah bagaimana, kehadiran makanan semacam itu berdampak pada kemampuan kita untuk membuat 32 kotak cpu kecil kami yang bagus melakukan apa pun yang Anda inginkan :)
2

Sebagai seseorang yang telah menjadi admin sistem untuk pengembang, dan seorang pengembang sendiri, saran yang diberikan di sini bukan hanya emas, tetapi harus menjadi bagian dari dokumentasi perekrutan untuk pengembang baru untuk perusahaan di seluruh dunia.

Sesuatu yang belum saya lihat (belum) jelaskan adalah bahwa para pengembang benar-benar harus mengetahui produk yang akan mereka gunakan untuk membuat program yang mereka bayar. Jumlah waktu yang saya miliki untuk menjelaskan dan mengkonfigurasi server Apache, Eclipse dan Visual Studio menginstal, dan database pada mesin pengembang agak mengkhawatirkan.

2
canadiancreed