그동안 플랫폼에 구애를 받지않는 Java 기반을 많이 활용하였는데, net core도 리눅스, 맥에서도 구동가능하여
우분투 환경에서 MSA 기반의 인증서버를 구현하여 보았다.
본 내용은 마이크로 소프트의 아래 링크를 참조하여 현재 프로젝트 상황에 맞게 수정하였다.
https://docs.microsoft.com/ko-kr/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-3.1
1. 환경
-NET Core 우분투 설치는 인터넷에 많이 나와있으므로 생략함
-Apache는 개발서버에 설치되어 있는 것을 활용하므로 설치 과정 문서는 생략함
2. 배포
– 비쥬얼 스튜디오 게시를 통해 게시된 폴더를 알집으로 압축하여 우분투에 FTP로 업로드.
– /home/idr/Service/Identity/Identity.WebApi 폴더에 압축을 풀어 배포
– unzip Identity.WebApi.zip -d Identity.WebApi
3. 프록시 서버구성
– 사용자가 Apache를 통해 요청을 하면 .net core의 Kestrel 서버로 전달해주기 위해서는 역방향 프록시 서버를 구성해야 함.
– 정뱡향 또는 역방향프록시에 대한 기술문서는 구글검색을 참고.
– 프로그램상 Startup.cs 파일에 아래와 같이 추가해 준다.
* 테스트해보니 아래처럼 안해도 동작은 한다.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { ... app.UseRouting(); // Apache 또는 IIS 역방향 프록시 // using Microsoft.AspNetCore.HttpOverrides;을 해야함 app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto }); }
4. Apache 구성
4.1 환경설정
cd /etc/apache2/sites-available vi identity.mbizok.com.conf
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME} ProxyPreserveHost On ProxyPass / http://127.0.0.1:6002/ ProxyPassReverse / http://127.0.0.1:6002/ ServerName identity.mbizok.com ServerAlias identity.mbizok.com ErrorLog /var/log/apache2/error-identity.mbizok.com.log CustomLog /var/log/apache2/access-identity.mbizok.com.log common
4.2 사이트활성화
a2ensite identity.mbizok.com.conf service apache2 restart
4.3 로그 확인
– 에러가 발생하여 로그 확인
systemctl status apache2.service 3m<94> 19 16:36:06 moramlinux apache2[19883]: AH00526: Syntax error on line 2 of /etc/apache2/sites-enabled/identity.mbizok.com.conf: 3m<94> 19 16:36:06 moramlinux apache2[19883]: Invalid command 'RequestHeader', perhaps misspelled or defined by a module not included in the server configuration
– 아파치 모듈 설치 및 아파치 재시작
a2enmod headers service apache2 restart
5. Kestrel 서비스
6002 포트로 도는 API 서버를 실행하기 위해 kestrel 서비스를 만들어야 함.
5.1 설정화일
vi /etc/systemd/system/kestrel-identity.mbizok.com.service
[Unit] Description= Identity Web Api [Service] WorkingDirectory=/home/idr/Service/Identity/Identity.WebApi ExecStart=/usr/bin/dotnet /home/idr/Service/Identity/Identity.WebApi/Identity.WebApi.dll --urls="http://127.0.0.1:6002" Restart=always # Restart service after 10 seconds if the dotnet service crashes: RestartSec=10 KillSignal=SIGINT SyslogIdentifier=dotnet-example User=idr Environment=ASPNETCORE_ENVIRONMENT=Production [Install] WantedBy=multi-user.target
5.2 서비스 활성화
systemctl enable kestrel-identity.mbizok.com.service
5.3 서비스 시작
systemctl start kestrel-identity.mbizok.com.service
5.4 서비스 상태확인
systemctl status kestrel-identity.mbizok.com.service