IIS7 - Alat Penerapan Web - SetParam / SetParamFile untuk mengatur binding http dan https + Cert

8

kami saat ini menggunakan MS Web Deployment Tool untuk menyinkronkan situs web langsung dan beberapa WebServices dari kotak pentahapan ke dua server langsung.

Kotak pementasan meng-host situs pada IP apa saja pada port 17000, sedangkan dua server langsung seimbang dan memiliki IP berbeda untuk masing-masing.

Saat ini, saya menghasilkan dua paket terpisah untuk penyebaran - satu untuk setiap mesin - menggunakan operasi sinkronisasi dan menentukan parameter DestinationBinding sebagai berikut:

msdeploy -verb:sync 
  -source:WebServer,computerName=localhost
  -dest:package="machinename.zip"
  -setParam:type="DestinationBinding",scope="SiteName",value="ip_address:port:".

(Pisahkan beberapa baris untuk membuatnya lebih mudah dibaca!)

Saya menjalankan ini dua kali, dengan nama file target dan alamat ip yang berbeda untuk masing-masing dari dua mesin. Ketika datang ke penyebaran, saya cukup melakukan sinkronisasi dari setiap paket ke situs langsung masing-masing.

Saya tahu, saya tahu - saya harus bisa melakukannya dengan menghasilkan satu paket parameterised dan kemudian mungkin menggunakan switch SetParamFile untuk masing-masing dari dua Server - percayalah, saya ingin, tetapi dokumentasi tentang melakukan ini terus terang tidak ada

Sekarang saya perlu mengkonfigurasi dan menggunakan HTTP dan HTTPS yang mengikat untuk situs ini; termasuk juga sertifikat ssl yang akan digunakan.

Saya telah menambahkan SSL mengikat untuk situs pada kotak pementasan - yang menggunakan sertifikat pengembangan (yang perlu diganti - atau haruskah kotak pementasan menggunakan live cert?), Dan sekarang baris perintah di atas memiliki efek mengganti IP target pada entri http dan https.

Tampaknya saya tidak dapat menentukan beberapa binding ditambah informasi cert dalam nilai DestinationBinding di -setParam di atas, jadi siapa pun tahu bagaimana saya bisa melakukan ini?

Setiap bantuan sangat dihargai.

Andras Zoltan
sumber
1
mungkin Anda harus menambahkan msdeply sebagai tag. mungkin juga melompati ke stackoverflow.com karena ada sejumlah msdeploy
MikeJ
sekarang ada poin bagus :)
Andras Zoltan
Ya - saya memang memikirkan StackOverflow dulu; mengira bahwa ops tingkat rendah dari msdeploy lebih mungkin berguna untuk dukungan teknis / admin daripada pengembang. Jika saya tidak mendapatkan apa-apa di sini, mungkin saya akan membatalkan pertanyaan ini dan mengirimnya ke sana sebagai saran Anda. Selalu bisa berpendapat bahwa saya seorang pengembang, dan bukan seorang analis, dan jika saya perlu mengetahuinya, mungkin pengembang lain juga melakukannya!
Andras Zoltan

Jawaban:

7

Ok jadi saya sampai sejauh ini - saya tidak memposting ini sebagai edit untuk pertanyaan, dengan harapan bahwa meskipun ini tampaknya berada di jalur yang benar, mungkin ada cara yang lebih baik daripada apa yang telah saya kerjakan . Figur saya akan membiarkan demokrasi memutuskan!

Dengan menggunakan tautan ini, saya dapat mengetahui format file XML yang harus digunakan dengan setParamFilesaklar untuk msdeploy. Saya juga, di masa lalu, menemukan format untuk XML declareParamFile dengan menggunakan GUI yang tertanam dalam IIS setelah menginstal Web Deployment Tool.

Jadi, diberikan situs yang disebut 'SiteA', dengan dua entri yang mengikat dalam file applicationHost.config sebagai berikut:

<bindings>
  <binding protocol="http" bindingInformation="*:80:" />
  <binding protocol="https" bindingInformation="*:443:" />
</bindings>

(Yang berarti, secara khusus - alamat IP apa pun pada port 80 dan alamat IP apa pun pada port 443)

Sertifikat aktual yang digunakan tidak disimpan dalam applicationHost.Config, tetapi dalam konfigurasi untuk Http.sys (sesuai dengan artikel ini ). Ketika msdeploy menyiapkan sebuah paket untuk situs tersebut, ia akan menanamkan informasi itu - yang mungkin bukan berkah seperti yang saya sebutkan di bagian akhir.

Langkah pertama adalah mendeklarasikan file parameter xml yang akan kita gunakan untuk parameterkan satu paket untuk server live target:

<parameters>
  <!-- declare parameter for Http Binding -->
  <parameter name="SiteA-http" description="SiteA Http Binding">
    <parameterEntry kind="DestinationBinding" scope="SiteA" match=":80:" />
  </parameter>
  <!-- declare parameter for Https Binding -->
  <parameter name="SiteA-https" description="SiteA Https Binding">
    <parameterEntry kind="DestinationBinding" scope="SiteA" match=":443:" />
  </parameter>
</parameters>

Perhatikan nilai atribut 'match =' pada dua entri parameter dalam. Ini memastikan bahwa ikatan yang benar diganti. Ini adalah Regex (seperti yang dijelaskan dalam artikel technet ini ) yang memilih nilai-nilai pengikatan yang ada yang harus diubah dengan nilai parameter yang akan diteruskan dalam sekejap.

Kami menyimpan ini sebagai declareparameters.xml.

Dengan ini, kami sekarang dapat menghasilkan paket parameter, dari kotak pementasan kami, dari mana kami kemudian dapat menggunakan, menggunakan baris perintah ini (ini untuk 'gambar' seluruh IIS di mana SiteA kami hadir):

msdeploy -verb:sync 
  -source:WebServer,computerName=localhost
  -dest:package="parameterised.zip"
  -declareParamFile:declareparameters.xml

Jika situs web berada di server web yang berbeda, ganti 'localhost' dengan nama server web itu. Layanan Agen Penyebaran Web harus dijalankan pada mesin target agar ini berfungsi.

Sekarang, kami mendeklarasikan file parameter xml yang benar-benar akan memberikan nilai parameter untuk penyebaran ke server langsung:

<parameters>
  <setParameter name="SiteA-http" value="[fixedIPAddress]:80:"/>
  <setParameter name="SiteA-https" value="[fixedIPAddress]:443:"/>
</parameters>

Dan kita simpan itu sebagai

[targetServerName]parameters.xml

(dalam kasus saya, saya memiliki dua server target, sehingga masing-masing mendapatkan parameter sendiri xml dengan nama file yang berbeda, dan masing-masing IP yang sedikit berbeda).

Akhirnya, kita dapat melakukan penyebaran parameterised ke server target dengan baris perintah ini:

msdeploy -verb:sync 
  -source:package="parameterised.zip"
  -dest:WebServer,computerName="[targetServerName]"
  -setParamFile=[targetServerName]parameters.xml

Jadi sekarang kita dapat mengubah IP dari Http atau Https Binding dan, jika aslinya cukup berbeda, kita dapat membuat parameter jumlah setiap binding individual yang mungkin diperlukan untuk situs tersebut.

Sejauh ini ini memiliki satu kelemahan - jadi jawaban alternatif apa pun yang dihargai - konfigurasi SSL disalin dari mesin sumber ke dalam paket - yang berarti bahwa agar konfigurasi SSL di situs langsung menjadi benar pada penyebaran, baik mesin staging dan server langsung harus menggunakan sertifikat SSL yang persis sama.

Apa yang akan hebat adalah jika kotak pementasan dapat menggunakan sertifikat yang ditandatangani sendiri atau internal untuk pemeriksaan kewarasan, dan kemudian minta sertifikat SSL nyata diterapkan pada penyebaran yang sebenarnya - sekali lagi, parameter dari file XML.

Andras Zoltan
sumber
Ini akan tampak sebagai keterbatasan alat msdeploy - dan satu-satunya solusi adalah menulis skrip iis tambahan yang dapat dieksekusi oleh msdeploy. Script ini akan membungkus binding tambahan, dengan hal-hal sertifikat SSL. Ini adalah rasa malu yang luar biasa.
Andras Zoltan
0

Anda dapat mengganti nomor port dengan menambahkan saklar baris perintah -replace

msdeploy -verb: sync -source: WebServer, computerName = localhost -dest: package = "machinename.zip" -replace: objectName = binding, targetAttributeName = bindingInformation, match =: 443:, ganti =: 445:

Mariusz
sumber