asp.net core 의 리눅스 서버호스팅하기
1. OS 및 아파치 서버 준비
2. asp.net core 설치
- Microsoft 키를 등록
$ sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
- 닷넷 sdk 설치 및 확인
sudo yum install dotnet-sdk-3.1
3. 프로젝트 배포 파일을 리눅스 서버로 복사
- 프로젝트 파일 publish(게시) 하여 배포파일 생성 (게시방법은 폴더 프로필, 배포모드 자체 포함 으로 진행)
- 해당 경로에 배포된 파일 리눅스 서버로 이동
파일질라를 이용해서 /home/opc/ 하위디렉토리로 배포파일 복사
cp 명령어를 통해 "/var/www/프로젝트명" 으로 복사
- Startup.cs 에 아래 내용 추가
// using Microsoft.AspNetCore.HttpOverrides;
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
4. 아파치 구성 및 확인
- conf 구성 파일 생성
/etc/httpd/conf.d/프로젝트명.conf 로 파일을 생성
<VirtualHost *:*>
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}e
</VirtualHost>
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5000/
ProxyPassReverse / http://127.0.0.1:5000/
ServerName www.example.com
ServerAlias *.example.com
ErrorLog /var/www/app-error.log
CustomLog /var/www/app-access.log common
</VirtualHost>
*아파치(80 포트) 요청이 들어오면 127.0.0.1:5000 으 전달
- 아파치 설정파일 확인 및 아파치 재시작
여기까지 이상이 없으면 정상적으로 호스팅 하는것을 볼 수 있다.
OS 서버 IP 로 접속 확인
5. Kestrel 서비스 구성하기
- 서비스 파일 생성
sudo nano /etc/systemd/system/kestrel-프로젝트명.service
[Unit]
Description=asp.net core Service
[Service]
WorkingDirectory=/var/www/프로젝트
ExecStart=/usr/bin/dotnet /var/www/프로젝트/프로젝트.dll
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-campview
User=apache
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
- 서비스 시작 및 상태
sudo systemctl enable 서비스명
sudo systemctl start 서비스명
sudo systemctl status 서비스명
[TroubleShooting]
* 아래와 같은 오류가 발생시
A fatal error was encountered. The library 'libhostpolicy.so' required to execute the application was not found in '/app/'.
Failed to run as a self-contained app.
publish 폴더에 "프로젝트명.runtimeconfig.json"
프로젝트명.runtimeconfig.json 파일에서 "includedFrameworks" 부분 "framework" 로 변경 (파일이 없으면 만들어 넣어준다.)
* https 로 리다이렉트 되는 문제로 접속이 불가
1. Startup.cs 에서 app.UseHttpsRedirection() 주석처리
2. launchSettings.json 의 applicationUrl 에서 https://localhost:5001; 를 삭제
* 서비스 실행시 오류
$ sudo systemctl start httpd.service
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.
아래 명령어 실행하여 해결
$ getenforce
$ setenforce 0
$ systemctl start httpd.service
https://www.edureka.co/community/67382/httpd-service-failed-because-control-process-exited-error
'Server > linux' 카테고리의 다른 글
[linux] 리눅스 FTP 서버 설치(vsftpd) (0) | 2022.09.23 |
---|---|
[linux] 리눅스 명령어 cp (파일이나 디렉토리 복사) (0) | 2022.09.21 |
[linux] 리눅스 명령어 mkdir, rmdir, rm (파일이나 디렉토리 생성, 삭제) (0) | 2022.08.30 |
[linux] 리눅스 명령어 sudo, su (0) | 2022.08.24 |
[linux] 리눅스 CentOS7 아파치(apache) 웹서버 설치하기 (0) | 2022.02.25 |