Bagaimana Anda melakukan depoys situs web IIS produksi?

15

Jadi, tidak yakin apakah ini pertanyaan Stack Overflow atau Server Fault. Jika saya memiliki situs web .NET yang ingin saya gunakan untuk lingkungan produksi, apa cara terbaik untuk melakukannya. Haruskah saya mengemasnya sebagai MSI & instal? Gunakan nant untuk mendorong file yang diperlukan ke atas. Hanya FTP file yang menggunakan Beyond Compare?

Bagaimana Anda menyebarkan kode produksi? Ini adalah kasus khusus Windows yang saya cari di sini.

Glenn Slaven
sumber

Jawaban:

15

IIS mendukung penyebaran xcopy sehingga hanya menyalin file yang harus Anda butuhkan kecuali Anda memiliki persyaratan khusus.

Salah satu cara untuk melakukannya adalah skrip sederhana yang menggunakan ROBOCOPY untuk menyalin file baru ke server.

Jika situsnya besar dan ini terlalu lama, gunakan sistem kontrol versi. Saya suka Mercurial untuk tujuan ini, walaupun Anda harus berhati-hati bahwa file konfigurasi sistem kontrol versi tidak berakhir dilayani oleh publik. Menyebarkan kemudian hanyalah masalah melakukan perubahan dan kemudian memeriksa versi terbaru di server. Selain menjadi efisien, ini memungkinkan rollback cepat (jika Anda menandai versi bagus terakhir) jika Anda terbaru dan terbesar memiliki bug showstopper.

Untuk meminimalkan waktu henti, Anda dapat meminta skrip menyalin file ke direktori baru dan kemudian dengan cepat mengganti nama direktori, atau mengubah tempat IIS menunjuk ke direktori baru.

Joel Spolsky
sumber
1
Sistem kontrol versi menarik, tetapi untuk situs web yang memerlukan kompilasi, mungkin tidak berjalan dengan baik. Kecuali jika versi yang dikompilasi disimpan di bawah kontrol versi tentu saja.
Jonathon Watney
1
Saya tidak pernah berpikir untuk mengeluarkan sistem kontrol sumber dalam produksi. Tentu saja ketukan yang menarik harus menyimpan banyak file zip tambahan.
JoshBerke
Saya melakukan ini sepanjang waktu dengan Subversion. Di Apache Anda akan menggunakan mod_rewrite untuk memastikan pengguna tidak dapat mengakses direktori .svn. Menggunakan kontrol versi untuk penyebaran jelas merupakan cara yang harus ditempuh.
Luke
13

Pertimbangkan untuk menggunakan Alat Penerapan Web dari Microsoft. Itu secara khusus dirancang untuk membantu menyebarkan aplikasi web dan pembaruan untuk aplikasi-aplikasi web tersebut untuk menghasilkan server web IIS 6 dan 7 dan melakukan pekerjaan dengan lebih baik daripada MSI (Windows Installer), IMHO.

Biasanya Anda menggunakannya dengan mengatur situs "master emas" di suatu tempat dan kemudian memberi tahu alat untuk mengemas perubahan dari sana. Kemudian akan melihat server target untuk penyebaran dan membuat perubahan yang diperlukan untuk membuatnya terlihat seperti master emas (yang berguna untuk pembaruan selanjutnya). Ini sangat berguna jika Anda menggunakan lebih dari satu server web (yaitu sebuah peternakan), dan memiliki dukungan untuk menyebarkan lebih dari sekadar file (juga dapat menangani membuat perubahan registri, menggunakan sertifikat, basis data SQL, dll).

Erv Walter
sumber
+ tak terhingga. Alat ini adalah penyelamat dan membebaskan seluruh departemen (a la tsilb) untuk mengatasi masalah yang lebih menarik.
Portman
4

Saya akan meneruskan jawaban Joel dengan menyarankan server Integrasi Berkelanjutan mengambil perubahan Anda dari sistem kontrol sumber Anda. Kemudian akan membangun proyek. Kemudian minta xcopy output dari build ke folder baru. Anda kemudian dapat melakukan beberapa perubahan konfigurasi cepat (web.config dan app.config). Voila, siap untuk Xcopy!

Lihat CruiseControl.NET

p.campbell
sumber
3

Apa yang saya lakukan di perusahaan saya sebelumnya, yang pada dasarnya adalah situs lelang / e-niaga di mana kami tidak bisa mengizinkan banyak downtime:

  • Ambil versi build versi zip dari versi / rilis untuk digunakan di server build
  • Uji di server pementasan yang memiliki salinan basis data produksi dan memiliki versi perangkat lunak yang sama dengan perangkat lunak produksi. Uji bahwa semuanya berjalan lancar. Jika tidak memulai kembali penyebaran server pementasan (tapi pertama-tama pulihkan cadangan).
  • Jika semuanya berjalan dengan baik: salin skrip build dan peningkatan database ke server produksi ke folder lokal. Ambil cadangan spesifik dari database dan file ASP.NET (kalau-kalau ada yang salah). Persiapkan semuanya sehingga saya hanya perlu mengklik enter untuk meluncurkan skrip pemutakhiran dan penyalinan file basis data (perhatikan bahwa saya dapat membuat skrip untuk ini). Lalu luncurkan semuanya. Ini biasanya dalam hitungan detik dan pengguna tidak akan menyadari bahwa ada downtime.

Ada banyak hal lucu untuk dilakukan sebagai pengembang web. Tetapi ini adalah bagian terpenting dari pekerjaan saya.

Michael
sumber
1

oh ya ampun, di tempat kerja kami memiliki seluruh tim untuk ini. Mereka memiliki alat in-house yang mengeluarkan server dari cluster / farm, menerbitkan file, menjalankan NUnits, dan menambahkannya kembali ke cluster / farm. Mereka melakukan ini untuk masing-masing 16 server. Butuh berjam-jam. Kita semua bahkan tidak memiliki "lihat-lihat akses".

Untuk proyek pribadi saya, saya menerbitkan dari VS2005 langsung ke server web saya. Agak keamanannya kurang ketat.

tsilb
sumber