Quick Guide)
1. 톰캣 서비스 파일 수정: sudo nano /etc/systemd/system/multi-user.target.wants/tomcat9.service
2. 쓰기 폴더 추가: ReadWritePaths=/var/opt/upload/
3. 폴더 권한 수정: sudo chown -R tomcat:tomcat /var/opt/upload/
4. units를 재 로드: sudo systemctl daemon-reload
5. 톰캣 서비스 재 기동: sudo systemctl restart tomcat9
Ubuntu 18.04 이상에서 tomcat을 apt install tomcat9으로 설치한 경우, 서비스로 등록되고 시스템에서 관리하도록 설정이됩니다.
1. 파일 업로드 대상 폴더 정의
starseed@myserver:/etc/systemd/system/multi-user.target.wants$ sudo nano tomcat9.service
하기와 같이 톰캣에서 업로드할 폴더를 설정합니다.
ReadWritePaths=/var/opt/upload/
#
# Systemd unit file for Apache Tomcat
#
[Unit]
Description=Apache Tomcat 9 Web Application Server
Documentation=https://tomcat.apache.org/tomcat-9.0-doc/index.html
After=network.target
RequiresMountsFor=/var/log/tomcat9 /var/lib/tomcat9
[Service]
# Configuration
Environment="CATALINA_HOME=/usr/share/tomcat9"
Environment="CATALINA_BASE=/var/lib/tomcat9"
Environment="CATALINA_TMPDIR=/tmp"
Environment="JAVA_OPTS=-Djava.awt.headless=true"
# Lifecycle
Type=simple
ExecStartPre=+/usr/libexec/tomcat9/tomcat-update-policy.sh
ExecStart=/bin/sh /usr/libexec/tomcat9/tomcat-start.sh
SuccessExitStatus=143
Restart=on-abort
# Logging
SyslogIdentifier=tomcat9
# Security
User=tomcat
Group=tomcat
PrivateTmp=yes
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
CacheDirectory=tomcat9
CacheDirectoryMode=750
ProtectSystem=strict
ReadWritePaths=/etc/tomcat9/Catalina/
ReadWritePaths=/var/lib/tomcat9/webapps/
ReadWritePaths=/var/log/tomcat9/
ReadWritePaths=/var/opt/upload/ # <== 여기를 추가함
[Install]
WantedBy=multi-user.target
2. 파일 업로드 폴더 설정
starseed@myserver:/var/opt$ sudo chown -R tomcat:tomcat upload
3. Java 소스 - 파일 업로드 - 예
@PostMapping("/post")
public String write(@RequestParam("file") MultipartFile files, BoardDto boardDto){
try{
if( !files.isEmpty() ) {
String origFilename = files.getOriginalFilename();
String filename = new MD5Generator(origFilename).toString();
String savePath = "/var/opt/upload/";
if (!new File(savePath).exists()) {
try {
new File(savePath).mkdir();
} catch (Exception ex) {
ex.printStackTrace();
}
}
String filePath = savePath + filename;
files.transferTo(new File(filePath));
FileDto fileDto = new FileDto();
fileDto.setOrigFilename(origFilename);
fileDto.setFilename(filename);
fileDto.setFilePath(filePath);
Long fileId = fileService.saveFile(fileDto);
boardDto.setFileId(fileId);
}
boardService.savePost(boardDto);
} catch (Exception ex) {
ex.printStackTrace();
}
return "redirect:/";
}
4. Java 소스 - 파일 다운로드 - 예
@GetMapping("/download/{fileId}")
public ResponseEntity<Resource> fileDownload(@PathVariable("fileId") Long fileId) throws IOException {
FileDto fileDto = fileService.getFile(fileId);
Path path = Paths.get(fileDto.getFilePath());
Resource resource = new InputStreamResource(Files.newInputStream(path));
return ResponseEntity.ok()
.contentType(MediaType.parseMediaType("application/octet-stream"))
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + fileDto.getOrigFilename() + "\"")
.body(resource);
}
5. log의 확인
stdout과 stderr 정보를 확인하는 방법
https://www.loggly.com/ultimate-guide/using-journalctl/
journalctl -u tomcat9.service -n 1100 --since "1 hour ago"
기본 로그 파일 생성 장소
/va/log/tomcat9/
[Ubuntu 20.04] GPU 모니터링 (0) | 2021.08.12 |
---|---|
[WiFi] WiFi 비밀 번호 확인 (윈도우즈 10) (0) | 2021.08.10 |
[마우스 키보드 공유] 리눅스와 윈도우즈에서 마우스와 키보드를 공유 (0) | 2021.07.29 |
[개발 영어]height의 발음은 "하이트" (0) | 2021.07.08 |
댓글 영역