Asp.net core iis 배포 어떻게 하고 계신가요?

안녕하세요.

서버1대일경우 배포시나리오를 어떻게 잡고 계신가요? (아마존, 애저 x )

과거에는 publish ftp 를 이용해서 배포를 했었는데요.
core 부터 프로세스 lock 때문에 많이 불편하네요.

현재는 원격에 배포1,배포2 폴더를 만들어서 번갈아 ftp 로 배포를 하고, iis 에서 root 폴더를 변경해서 배포를 하고 있습니다. ( 원격으로 들어가서 iis 변경해줘야 해서 불편하네요 )

서버가 1개 ~ n 개 든 좀 편하게 하고 싶은데요.


일단 젠킨스를 써볼까해서 젠킨스 설치해서 git 으로 pull 까지는 세팅을 했는데요. 처음하는거라 이것도 쉽지가 않네요. 기본 워크스페이스가 c 드라이브여서, d 로 변경해서 젠킨스 재기동 했더니… 젠킨스가 엉망진창이 되서 워크스페이스도 다시 기본으로 돌려놨습니다 ㅠ.ㅠ
젠킨스 빌드 성공한다 치더라도, 결국 배포폴더에 덮어 쓸때 프로세스 lock 는 동일하게 발생이 될거 같은데요.

혼자 다 하려니 쉽지가 않네요.

1개의 좋아요

저역시도 많은 고민을 했었는데요.
서버 1대의 경우 애매합니다. 비용이나 기타등등.
제가 사용하는 방법은 visual studio에서 docker image 빌드한후 로컬의 docker image를 원격에 업로드합니다. 원격에서 docker container를 restart해서 사용합니다. 간단한 사이트라 이렇게 처리합니다. 그리고, 네이버 클라우드의 private registry를 이용하기도 합니다. 이미지 전송시 속도가 무지 빠릅니다.

요즘은 도커가 젤 편합니다. 웹호스팅 개념도 필요없을 것 같기도 하구요. nginx로 프록시 처리도 좋구요.
리눅스 클라우드 서버에 nginx(lets encrypt 갱신) + mssql + asp.net core 이렇게 컨테이너 올려서 사용합니다.

4개의 좋아요

아직 도커는 시도를 못해봤습니다.

그리고 전 윈도우를 사랑해서 ㅠ.ㅠ ㅋㅋㅋ 돈들어도 윈도우서버를 사용해요.
(가끔 GUI 가 버벅이면;; 난감하지만요 )
장애 발생시 당황스러워서 콘솔에서 해결하기가 참 그래요 ㅠ.ㅠ …

3개의 좋아요

말씀하신 상황은 아무래도 가내수공업이 될 확률이 큰데, 윈도우 서버 자동화를 할 때는 PowerShell을 쓰는 것이 여러모로 편리한 것 같습니다. 다만 개발자의 관점에서 윈도우 서버를 보는 것과는 시각을 달리하고 익혀야 할 부분도 많아 러닝 커브가 센 편인게 단점인 것 같습니다.

제 경험에서 당시에 택했던 최선의 경험은 Web Platform Installer를 이용해서 IIS와 ASP.NET 설치를 자동화하고, PowerShell에 IIS 모듈, SQL Server DMO 모듈 (System.Data.SqlClient 만으로는 커버가 안되는 특수 기능을 쓰려면 필요했습니다.)을 로드해서 RDP로 스크립트를 실행했던 기억이 있습니다. 파일을 원활하게 배포할 수 있게하기 위해 여기에 덤으로 NAS를 이용해서 빌드 서버에서는 빌드 아티팩트를 NAS에 올렸고요.

그 외에도 한 서버가 아니라 설치형 솔루션으로 나가야 한다면, DB 버전 관리는 엔티티 프레임워크를 이용해서 오토 마이그레이션을 돌리는 것도 고려해야 할 것 같네요.

또, PowerShell DSC를 이용해서 자동화를 하거나, 아니면 IIS에서는 조금 거리를 두고 Self-hosted ASP.NET 방식으로 EXE 파일로 ASP.NET 서버를 만들어 배포하는 방법도 생각해볼 수 있다고 봅니다.

2개의 좋아요

윈도우 서버의 경우에도 요즈음은 리눅스처럼 보안을 강화할 목적으로 의도적으로 GUI를 뺀 코어 모드를 많이 사용합니다. 그런데 이걸 쓸 바에는 차라리 레퍼런스라도 많은 리눅스를 쓰는게 더 좋다고 이야기를 해서 좀 애매한 상황이 되었죠. ㅎㅎ

여담이지만 실무에서 윈도우 컨테이너와 윈도우 쿠버네티스를 만지기 때문에 자의 반 타의 반으로 코어 모드 윈도우 서버를 애용하고 있는 입장에서 확실히 코어 모드는 보안에 강점, 이점이 있는 것 같습니다.

2개의 좋아요

제가 문제에 대해 인지를 다 하지 못해서 드리는 질문일수도 있는데,
혹시 Azure Pipeline을 On-Premise로 사용 하는 방법은 없을까요?
단, Azure Devops (구 TFS)를 사용하신다는 전제 하에 ㅠㅠ

1개의 좋아요