Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 16 additions & 2 deletions .github/workflows/dev-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,14 +71,28 @@ jobs:
source: "./docs/infra-config/config.alloy"
target: "/home/${{ secrets.DEV_USERNAME }}/solid-connection-dev/"

- name: Run docker compose
- name: Copy nginx config to remote
uses: appleboy/scp-action@master
with:
host: ${{ secrets.DEV_HOST }}
username: ${{ secrets.DEV_USERNAME }}
key: ${{ secrets.DEV_PRIVATE_KEY }}
source: "./docs/infra-config/nginx.dev.conf"
target: "/home/${{ secrets.DEV_USERNAME }}/solid-connection-dev/nginx"
rename: "default.conf"

- name: Run docker compose and apply nginx config
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.DEV_HOST }}
username: ${{ secrets.DEV_USERNAME }}
key: ${{ secrets.DEV_PRIVATE_KEY }}
script_stop: true
script: |
sudo cp /home/${{ secrets.DEV_USERNAME }}/solid-connection-dev/nginx/default.conf /etc/nginx/conf.d/default.conf
sudo nginx -t
sudo nginx -s reload

cd /home/${{ secrets.DEV_USERNAME }}/solid-connection-dev
docker compose down
docker compose -f docker-compose.dev.yml down
docker compose -f docker-compose.dev.yml up -d --build
18 changes: 16 additions & 2 deletions .github/workflows/prod-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,14 +71,28 @@ jobs:
source: "./docs/infra-config/config.alloy"
target: "/home/${{ secrets.USERNAME }}/solid-connect-server/"

- name: Run docker compose
- name: Copy nginx config to remote
uses: appleboy/scp-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.PRIVATE_KEY }}
source: "./docs/infra-config/nginx.prod.conf"
target: "/home/${{ secrets.USERNAME }}/solid-connection-prod/nginx"
rename: "default.conf"

- name: Run docker compose and apply nginx config
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.PRIVATE_KEY }}
script_stop: true
script: |
sudo cp /home/${{ secrets.USERNAME }}/solid-connection-prod/nginx/default.conf /etc/nginx/conf.d/default.conf
sudo nginx -t
sudo nginx -s reload

cd /home/${{ secrets.USERNAME }}/solid-connect-server
docker compose down
docker compose -f docker-compose.prod.yml down
docker compose -f docker-compose.prod.yml up -d --build
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
server {
listen 80;
server_name api.stage.solid-connection.com;
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

인증서 관련 문제가 발생했어서 추가했습니다.


# http를 사용하는 경우 주석 해제
# location / {
Expand All @@ -17,9 +18,10 @@ server {

server {
listen 443 ssl;
server_name api.stage.solid-connection.com;

ssl_certificate /etc/letsencrypt/live/api.solid-connection.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.solid-connection.com/privkey.pem;
ssl_certificate /etc/letsencrypt/live/api.stage.solid-connection.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.stage.solid-connection.com/privkey.pem;
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

stage 서버이고, 실제로 stage 이름을 가지는 디렉터리 및 인증서가 존재합니다.

client_max_body_size 10M;

ssl_protocols TLSv1.2 TLSv1.3;
Expand All @@ -31,10 +33,13 @@ server {
ssl_stapling_verify on;

location / {
proxy_pass http://solid-connection-server:8080;
proxy_pass http://localhost:8080;
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

docker-compose.dev.yml 에서 network_mode: host 가 설정되어 있습니다. Nginx와 도커 컨테이너가 같은 네트워크를 공유하게 되므로, localhost 로 변경합니다.

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WebSocket Handshake 관련 설정입니다

}
}
}
36 changes: 36 additions & 0 deletions docs/infra-config/nginx.prod.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
server {
listen 80;
server_name api.solid-connection.com;

location / {
return 301 https://$host$request_uri;
}
}

server {
listen 443 ssl;
server_name api.solid-connection.com;

ssl_certificate /etc/letsencrypt/live/api.solid-connection.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.solid-connection.com/privkey.pem;
client_max_body_size 10M;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on; # 클라이언트 보다 서버의 암호화 알고리즘을 우선하도록 설정
ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256";
ssl_session_cache shared:SSL:10m; # SSL 세션 캐시 설정
ssl_session_timeout 10m;
ssl_stapling on; # OCSP 스테이플링 활성화
ssl_stapling_verify on;

location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@
import org.springframework.web.socket.sockjs.client.WebSocketTransport;

@TestContainerSpringBootTest
@DisplayName("WebSocket/STOMP 통합 테스트")
class WebSocketStompIntegrationTest {
@DisplayName("WebSocket Handshake 테스트")
class WebSocketHandshakeTest {

@LocalServerPort
private int port;
Expand All @@ -47,7 +47,7 @@ class WebSocketStompIntegrationTest {

@BeforeEach
void setUp() {
this.url = String.format("ws://localhost:%d/connect", port);
this.url = String.format("http://localhost:%d/connect", port);
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

웹소켓 핸드셰이크 시 ws가 아니라 https 프로토콜을 사용합니다. 단, SSL 관련 설정이 없기에, http로 임시로 변경합니다.

List<Transport> transports = List.of(new WebSocketTransport(new StandardWebSocketClient()));
this.stompClient = new WebSocketStompClient(new SockJsClient(transports));
this.stompClient.setMessageConverter(new MappingJackson2MessageConverter());
Expand Down
Loading