پابلیش کردن برنامه های که با گو GO نوشته میشوند بر روی ویندوز سرور یکی از مشکلاتی بود که وقت زیادی گرفت برای اینکه بتونیم یه برنامه نوشته شده با GOرا در ویندوز سرور پابلیش کنی من این مراحل را انجام دادم
اول اینکه برنامه من در لینوکس نوشته شده و باید خروجی ویندوز ازش میگرفتم دستور خروجی ویندوز به این صورت است
GOOS=windows go build
بعد از اینکه این کار رو انجام بدین یه فایل exe در وشه برنامه به شما نشان داده خواهد این فایل رو م کپی کنیم و در پوشه ای که قرار است روی ویندوز سرور به عنوان پوشه مربوط به وب سایت یا همان API ما قرار بگیره جای گذاری کنیم.
ابتدا تست میکنیم که ایا برنامه به درستی اجرا میشود!! ابتدا CMD را اجرا میکنیم اجرایی را مثلا به این صورت وارد میکنیم C:\websites\myGoSite\app.exe برنامه ما با همان ادری و پورت اجرا خواهد شد
مثلا گر برنامه من روی پورت 9000 ساخته شده باشد در مرورگر ادرس یه به اینم صورت وارد میکنیم
http://localhost:9000/my-route
فایل ما اجرا شد
اگر همه چیز به درستی انجام شده باشد به مشکلی بر نخواهید خورد
اگر CMD ببندید دیگه پروژه ما اجرا نخواهد شد
برای اینکه بتوانیم در هر حال فایل پروژه اجرا شود و حتی در زمانی که ویندوز سرور ریستارت میشود این فایل به صورت اتوماتیک دوباره اجرا شود، لازم تا این فایل گو را در سرویس های ویندوز سرور بگنجانیم ، تا زمان ویندوز ریستارت میشود نیز این فایل به صورت خود به خود اجرا شود
برای این کار نرم افزار nssm که روی ویندوز سرور به استفاده کردم
این نرم افزار به این آدرس https://nssm.cc/download روی ویندوز سرور دانلود کنید( حجم آن کمتر از یک مگابایت است)
برای اجرا شدن این برنامه لازم است تا آدرس اجرای ویندوز مثلاً ۶۴ بیت آن را به فایل path ویندوز معرفی کنید (امیدوارم بدونی چه جوری انجام بدهید)
بعد از آن وقتی که فایل به path معرفی کردیم از طریق CMD آن را اجرا مکنیم و یک محیط گرافیکی مشاهده خواهد کرد
را اجرا کردیم آدرس فایل رو میگیریم و تنظیماتی رو که من براتون نوشتم رو مرحله به مرحله انجام میدیم
حالا وب سایت رو توی DNS تعریف میکنیم توی IIS هم سایت خودمان را تعریف میکنیم فقط یادمان باشد
تنظیمات application Pool به صورت زیر باشد
حال نوبت یه تنظیمات IIS هست که بهترین تنظیمات به اسن صورخ خواهد بود
- تنظیم رفع حساسیت به حروف کوچک و بزرگ
- نمظیم استفاده از SSL
- حذف slah (/) از اخر URL
برای این تنظیمات میتوانید از IIS استفاده کنید و یا فایل web.config را در کنار فایل exeایجاد کنید و این تنظیمات را در آن قرار دهید
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="LowerCaseRule1" stopProcessing="true">
<match url="[A-Z]" ignoreCase="false" />
<action type="Redirect" url="{ToLower:{URL}}" />
</rule>
<rule name="Reverse Proxy Rule" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://localhost:8080/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>