참조
https://docs.microsoft.com/ko-kr/dotnet/core/linux-prerequisites?tabs=netcore2x
https://docs.microsoft.com/en-us/aspnet/core/publishing/apache-proxy
Linux에서 .NET Core의 필수 구성 요소 설치 - .Net Core SDK 설치
CentOS 설치 내용 요약
1. 시스템에서 .NET Core의 이전 미리 보기 버전을 제거하세요.
2. Microsoft 서명 키를 등록합니다.
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
3. Microsoft 제품 피드를 추가합니다.
sudo sh -c 'echo -e "[packages-microsoft-com-p rod]\nname=packages-microsoft-com-prod \nbaseurl=https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc"; > /etc/yum.repos.d/dotnetdev.repo'
4. .NET Core SDK를 설치합니다.
sudo yum update sudo yum install libunwind libicu sudo yum install dotnet-sdk-2.0.0
5. PATH에 dotnet 추가
export PATH=$PATH:$HOME/dotnet
6. dotnet --version 명령을 실행하여 설치 성공을 증명합니다.
dotnet --version
Apache 설정 확인
[root@api-test conf]# vi /usr/local/apache/conf/extra/httpd-vhosts.conf START .net core virturalHost ProxyPreserveHost On ProxyPass / http://127.0.0.1:5000/ ProxyPassReverse / http://127.0.0.1:5000/ ServerAdmin test@test.com ServerName netcore.test.com ErrorLog "logs/netcore.test.com-error_log" CustomLog "logs/netcore.test.com-access_log" common END .net core
kestrel 서비스 셋팅 및 실행
[root@api-test home]# vi /etc/systemd/system/kestrel-netcore.service [Unit] Description=.NET Web API Application running on CentOS 7 [Service] WorkingDirectory=/home/websvc/netcore.test.com ExecStart=/usr/bin/dotnet /home/websvc/netcore.test.com/dotnetCoreSample.dll Restart=always Restart service after 10 seconds if dotnet service crashes RestartSec=10 SyslogIdentifier=dotnet-netcore User=websvc Environment=ASPNETCORE_ENVIRONMENT=Production [Install] WantedBy=multi-user.target [root@api-test home]# systemctl enable kestrel-netcore.service Created symlink from /etc/systemd/system/multi-user.target.wants/kestrel-netcore.service to /etc/systemd/system/kestrel-netcore.service. [root@api-test home]# systemctl start kestrel-netcore.service [root@api-test home]# systemctl enable kestrel-netcore.service Created symlink from /etc/systemd/system/multi-user.target.wants/kestrel-netcore.service to /etc/systemd/system/kestrel-netcore.service. [root@api-test home]# systemctl start kestrel-netcore.service [root@api-test home]# systemctl status kestrel-netcore.service ● kestrel-netcore.service - netcore.test.com .NET Web API Application running on CentOS 7 Loaded: loaded (/etc/systemd/system/kestrel-netcore.service; enabled; vendor preset: disabled) Active: active (running) since 금 2017-11-03 15:53:42 KST; 17min ago Main PID: 21576 (dotnet) CGroup: /system.slice/kestrel-netcore.service └─21576 /usr/bin/dotnet /home/websvc/netcore.test.com/dotnetCoreSample.dll 11월 03 15:53:44 api-test dotnet-netcore[21576]: info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1] 11월 03 15:53:44 api-test dotnet-netcore[21576]: Request starting HTTP/1.1 GET http://netcore.test.com/home/index 11월 03 15:53:44 api-test dotnet-netcore[21576]: info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1] 11월 03 15:53:44 api-test dotnet-netcore[21576]: Executing action method netcore.api.Controllers.HomeController.Index (dotnetCoreSample) with arguments ((null)) - ModelState is Valid 11월 03 15:53:44 api-test dotnet-netcore[21576]: info: Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.ViewResultExecutor[1] 11월 03 15:53:44 api-test dotnet-netcore[21576]: Executing ViewResult, running view at path /Views/Home/Index.cshtml. 11월 03 15:53:44 api-test dotnet-netcore[21576]: info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2] 11월 03 15:53:44 api-test dotnet-netcore[21576]: Executed action dotnetCoreSample.Controllers.HomeController.Index (dotnetCoreSample) in 48.6915ms 11월 03 15:53:44 api-test dotnet-netcore[21576]: info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2] 11월 03 15:53:44 api-test dotnet-netcore[21576]: Request finished in 139.6463ms 200 text/html; charset=utf-8
오류가 나는 경우 점검사항
1. 아래 주석 해제 처리
[root@api-test home]# vi /usr/local/apache/conf/httpd.conf ... LoadModule proxy_http_module modules/mod_proxy_http.so ...
2. ExecStart=/usr/bin/dotnet /home/websvc/netcore.test.com/dotnetCoreSample.dll 에 있는 내용 실제 실행해본다.
[root@api-test home]# /usr/bin/dotnet /home/websvc/netcore.test.com/dotnetCoreSample.dll info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0] User profile is available. Using '/root/.aspnet/DataProtection-Keys' as key repository; keys will not be encrypted at rest. warn: Microsoft.AspNetCore.Server.Kestrel[0] Unable to bind to http://localhost:5000 on the IPv6 loopback interface: 'Error -99 EADDRNOTAVAIL address not available'. Hosting environment: Production Content root path: /usr/local/apache/conf Now listening on: http://localhost:5000 Application started. Press Ctrl+C to shut down.
3. 아파치 로그 확인으로 오류 원인 확인
[root@api-test logs]# tail -5000f /usr/local/apache/logs/netcore.test.com-error_log
==> 오류 원인 확인
첫번째 오류 -> LoadModule proxy_http_module modules/mod_proxy_http.so 주석 제거후 해결
[Fri Nov 03 13:41:17.536279 2017] [proxy:warn] [pid 17437:tid 140528444241664] [client 118.128.33.118:50659] AH01144: No protocol handler was valid for the URL /favicon.ico (scheme 'http'). If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.
두번째 오류 ->
[root@api-test home]# /usr/share/dotnet /home/websvc/netcore.test.com/dotnetCoreSample.dll -bash: /usr/share/dotnet: 디렉터리입니다
[root@api-test conf]# /usr/bin/dotnet /home/websvc/netcore.test.com/dotnetCoreSample.dll