문제 상황
Firebase 프로젝트와 Spring Boot 서버를 연결하기 위한 json 설정 파일을
외부에 노출하지 않고 Github Actions로 배포하는 방법이 필요
(일단 해당 json 파일은 gitignore 한 상태)
시도 1.
json 파일의 내용을 Github Secrets에 저장해두고,
application-secret.yml을 만들 듯 Github Actions yml 설정 파일에서 json 파일을 만들기
- name: Make FirebaseServiceAccountKey.json
run: |
touch ./src/main/resources/firebaseServiceAccountKey.json
echo "${{ secrets.FIREBASE_SERVICE_ACCOUNT_KEY }}" > ./src/main/resources/firebaseServiceAccountKey.json
결과 1.
json 파일이 만들어지긴 했으나, 내용에서 큰따옴표가 다 사라짐 (Firebase 설정 안됨)
// 원한 파일 내용
{
"name": "Tom"
}
// 결과 파일 내용
{
name: Tom
}
시도 2.
json 파일 내용을 base64로 암호화하여 Github Secrets에 저장해두고,
이를 복호화하면서 json 파일을 생성하는 Github Actions yml 코드 작성하기
- name: Make FirebaseServiceAccountKey.json
run: |
touch ./src/main/resources/firebaseServiceAccountKey.json
echo $ACCOUNT_KEY | base64 -d >> ./src/main/resources/firebaseServiceAccountKey.json
env:
ACCOUNT_KEY: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_KEY }}
결과 2.
큰 따옴표까지 잘 들어간 json 파일이 서버에 생성되었으나, 여전히 Firebase 설정이 안됨
시도 3.
[성공한 방법] json 파일 내용을 base64로 암호화하여 application-secret.yml 파일에 저장해두고,
이를 복호화하면서 InputStream으로 읽어오는 Java 코드 작성하기
# application-secret.yml
firebase:
service-account: base64로 암호화한 결과
// FirebaseConfig.java
@Configuration
public class FirebaseConfig {
@Value("${firebase.service-account}")
private String serviceAccountBase64;
@PostConstruct
public void init() {
try {
// FileInputStream serviceAccount = new FileInputStream("src/main/resources/firebaseServiceAccountKey.json");
InputStream serviceAccount = new ByteArrayInputStream(getBase64DecodeBytes(serviceAccountBase64));
FirebaseOptions options = FirebaseOptions.builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount)).build();
FirebaseApp.initializeApp(options);
} catch (Exception e) {
e.printStackTrace();
}
}
private static byte[] getBase64DecodeBytes(String input) {
return Base64.decodeBase64(input);
}
}
따로 json 파일을 저장하지 않고도 Firebase 설정 성공 !!
'Cloud | CICD > Deploy' 카테고리의 다른 글
[React] 클라이언트 배포 : Vercel편 (0) | 2023.05.15 |
---|---|
[React & Spring Boot] 클라이언트 배포(2) : Nginx, EC2 (0) | 2023.05.05 |
[React & Spring Boot] 클라이언트 배포(1) : Route 53, EC2 (0) | 2023.05.05 |
[React] EC2 인스턴스에 React 프로젝트 배포 (0) | 2023.05.03 |
[Cors] Cors 에러 삽질 기록 (0) | 2023.03.07 |