Compare commits
1 Commits
main
...
features/d
| Author | SHA1 | Date |
|---|---|---|
|
|
60985c9923 | 3 months ago |
8 changed files with 177 additions and 28 deletions
@ -1,9 +1,8 @@ |
|||
FROM node:21-alpine3.20 |
|||
FROM nginx:latest |
|||
|
|||
WORKDIR /app |
|||
COPY package*.json ./ |
|||
RUN npm install |
|||
COPY . . |
|||
EXPOSE 5173 |
|||
CMD ["npm", "run", "dev"] |
|||
COPY ./dist/ /usr/share/nginx/html |
|||
|
|||
COPY ./default.conf /etc/nginx/conf.d/ |
|||
COPY ./nginx-* /etc/nginx/ssl/ |
|||
|
|||
EXPOSE 80:80 |
|||
@ -0,0 +1,68 @@ |
|||
server { |
|||
server_name localhost; |
|||
listen 80; |
|||
|
|||
return 301 https://$host$request_uri; |
|||
} |
|||
|
|||
server { |
|||
server_name localhost; |
|||
listen 443 ssl; |
|||
|
|||
root /usr/share/nginx/html; |
|||
index index.html index.htm; |
|||
|
|||
# Allow large file uploads for videos (up to 500MB) |
|||
client_max_body_size 500M; |
|||
|
|||
ssl_certificate /etc/nginx/ssl/nginx-selfsigned.crt; |
|||
ssl_certificate_key /etc/nginx/ssl/nginx-selfsigned.key; |
|||
|
|||
ssl_protocols TLSv1.2 TLSv1.3; |
|||
ssl_ciphers HIGH:!aNULL:!MD5; |
|||
|
|||
# API routes - proxy to backend (MUST come before static file rules) |
|||
location /api/ { |
|||
# Handle preflight OPTIONS requests |
|||
if ($request_method = 'OPTIONS') { |
|||
add_header 'Access-Control-Allow-Origin' '$http_origin' always; |
|||
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always; |
|||
add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, X-Requested-With' always; |
|||
add_header 'Access-Control-Allow-Credentials' 'true' always; |
|||
add_header 'Access-Control-Max-Age' 1728000 always; |
|||
add_header 'Content-Type' 'text/plain; charset=utf-8' always; |
|||
add_header 'Content-Length' 0 always; |
|||
return 204; |
|||
} |
|||
|
|||
proxy_pass http://localhost:8000; |
|||
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_set_header Origin $http_origin; |
|||
proxy_buffering off; |
|||
|
|||
# CORS headers for actual requests |
|||
add_header 'Access-Control-Allow-Origin' '$http_origin' always; |
|||
add_header 'Access-Control-Allow-Credentials' 'true' always; |
|||
|
|||
# Also set timeout for large uploads |
|||
proxy_read_timeout 300s; |
|||
proxy_send_timeout 300s; |
|||
} |
|||
|
|||
# Static assets - NO CACHING for development |
|||
location ~* ^/(?!api/).*\.(js|css|png|jpg|jpeg|gif|ico|svg)$ { |
|||
add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0"; |
|||
add_header Pragma "no-cache"; |
|||
add_header Expires "0"; |
|||
try_files $uri =404; |
|||
} |
|||
|
|||
# Handle React Router - all other routes should serve index.html |
|||
location / { |
|||
add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0"; |
|||
try_files $uri $uri/ /index.html; |
|||
} |
|||
} |
|||
@ -0,0 +1,23 @@ |
|||
-----BEGIN CERTIFICATE----- |
|||
MIID5zCCAs+gAwIBAgIUXzNzqa/12lyIcoxXf+v371J3fWkwDQYJKoZIhvcNAQEL |
|||
BQAwgYIxCzAJBgNVBAYTAkZSMREwDwYDVQQIDAhOb3JtYW5keTENMAsGA1UEBwwE |
|||
Q2FlbjERMA8GA1UECgwIRnJhbWluZm8xFTATBgNVBAMMDFNhY2hhIEdVRVJJTjEn |
|||
MCUGCSqGSIb3DQEJARYYc2FjaGEuZ3VlcmluQHN1cGluZm8uY29tMB4XDTI1MDcy |
|||
MTEzMzgwMVoXDTI2MDcyMTEzMzgwMVowgYIxCzAJBgNVBAYTAkZSMREwDwYDVQQI |
|||
DAhOb3JtYW5keTENMAsGA1UEBwwEQ2FlbjERMA8GA1UECgwIRnJhbWluZm8xFTAT |
|||
BgNVBAMMDFNhY2hhIEdVRVJJTjEnMCUGCSqGSIb3DQEJARYYc2FjaGEuZ3Vlcmlu |
|||
QHN1cGluZm8uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvLg7 |
|||
nR0UqRZ7UadhI8jrUjRMV1SZj+ljxEnV6tDOVMsvafsym1MhDZHb+cyv8769yqPv |
|||
CKtIOQKhMH0PkSqau8szNlF1Tg/1UzT+Mkd4zvLvGE5+aW/oDMg7E2LMJZuCyO4X |
|||
9SzWDVA5+b1QFIw6vvb3mCkUOtVDkOFreBBwryZKcWJ0b8o1hT60oB2wr18P14j0 |
|||
0C2/TmHMtim0o4r3gKGvpatqt1fXJo0UlYOwTvfMrYhu2VHqsQ2qP7ocazXEWt5u |
|||
Alf1vNPkAenF0ZV/2UiaL41Q8GMoV1enDP7k7/qfgXvta/hOeYnLtmv5Qpi4XiWz |
|||
xKjSukTUD2sRtSX+YQIDAQABo1MwUTAdBgNVHQ4EFgQUVj9KtmjLFy4xWzkNI9Kq |
|||
NAxNsfUwHwYDVR0jBBgwFoAUVj9KtmjLFy4xWzkNI9KqNAxNsfUwDwYDVR0TAQH/ |
|||
BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAGpUPMoF/ASIqOOfX5anDtaPvnslj |
|||
DuEVbU7Uoyc4EuSD343DPV7iMUKoFvVLPxJJqMLhSo3aEGJyqOF6q3fvq/vX2VE7 |
|||
9MhwS1t2DBGb5foWRosnT1EuqFU1/S0RJ/Y+GNcoY1PrUES4+r7zqqJJjwKOzneV |
|||
ktUVCdKl0C1gtw6W4Ajxse3fm9DNLxnZZXbyNqn+KbI8QdO0xSEl+gyiycvPu/NT |
|||
+EesdlFoYjO7gdA8dXkmu+Z7R61MYhE9Zvyop5KVMqgU8/Ym04UUWjWQYWWLMyuu |
|||
bxngE4XNEI5fhg+0e/I25xJJ9wVV/ZNAF4+XOylHz/CmU8V/SPKuGXBGHg== |
|||
-----END CERTIFICATE----- |
|||
@ -0,0 +1,28 @@ |
|||
-----BEGIN PRIVATE KEY----- |
|||
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC8uDudHRSpFntR |
|||
p2EjyOtSNExXVJmP6WPESdXq0M5Uyy9p+zKbUyENkdv5zK/zvr3Ko+8Iq0g5AqEw |
|||
fQ+RKpq7yzM2UXVOD/VTNP4yR3jO8u8YTn5pb+gMyDsTYswlm4LI7hf1LNYNUDn5 |
|||
vVAUjDq+9veYKRQ61UOQ4Wt4EHCvJkpxYnRvyjWFPrSgHbCvXw/XiPTQLb9OYcy2 |
|||
KbSjiveAoa+lq2q3V9cmjRSVg7BO98ytiG7ZUeqxDao/uhxrNcRa3m4CV/W80+QB |
|||
6cXRlX/ZSJovjVDwYyhXV6cM/uTv+p+Be+1r+E55icu2a/lCmLheJbPEqNK6RNQP |
|||
axG1Jf5hAgMBAAECggEAAj+hmDRx6jafAAf67sqi3ZgEGEmBkXNeeLGBTPc/qhxd |
|||
ip6krTELnz8TE26RG5LYXzslasUNrn42nIImvBT5ZkcjcosKpWfEqQEAjc1PQovC |
|||
9eyKnKfw4TpUvvmiveT4T98vCYEOOqHE0/WTdlOoaBY/f+sZKQYu+1NMtAjFcg2r |
|||
vVqwsZb5vGyh7CKmIHZnz3UP8P+7G5digiNRne18pGnE2oTnSoQ3/QIqUWBs69DS |
|||
k5ew+CSyTLiUFFnMnE4adwyg6wAud5fBlzowF6UF2agToX7pxEaGxGvpBGG034kk |
|||
1UXaB/d5YwcsBeH+x5cNMLKZy4zqjoxEEW31Q466NQKBgQDtKk1R/slpTpRqvtBT |
|||
NC7InvjcCBXkXttylQHJRN9glqhmflEOe8iMW1/qRwBPlQgK1wq/sXySanVv2+gO |
|||
JGq8XNRLbHyG3YRyshdnJHP1HoWQE0uedD/rfqgkNaW5S1IvHrD7Q7tOvCrF+KbS |
|||
612pmIgNVzn+inafDXPhMZc4pQKBgQDLtQGAu2eK58ewndyL8+7+VHZSTEtKpt+h |
|||
G/U/ccv+6NGqdxI5YUkrJ7k6vV81VeRMvmN9uUS/i8znORFQmm6noRVkhXytwW5B |
|||
HXq2co4WRvv9b/XqcqS0GSYVPJ1u4YNH6lvtDZ4UWPyBzYl700GdHrGa+erT44yL |
|||
tnibHx9GDQKBgFW1J+Qt85O+9hvtgVPQU+fkq4K42VCCh0PNXavi2+cICyufEqPt |
|||
T/iJPQxpRE9+SD3CoPvNpHs1ReN60U3rEzenRIFNX2NNwoPAoHyBy/YVZac/keBd |
|||
mov8Zb9QM+fWtIiaytLDE3nMvph017T5ogucN+66SxcV6vBn6CzFwySRAoGAcUf2 |
|||
Tv1ohkGAtgIDrLx5cmvL5NZSpHAKOpDOoHqLA/W66v4OX2RviRUtF7JJ6OIb9GWH |
|||
9Fl8Fr0KtKbyrw1CbevRdrYY8JN52bIoFJ+9zjupVHXXnookd5boq7SqpAe6ttpo |
|||
RnplJ1GZEiIXy4lemp6AC/vhD/YhqWxOw4zaGl0CgYBslhqVt5F0EHf94p7NrCuY |
|||
hNHKHaNaULYP0VXKefQamt/ssDuktqb6DNSIvx2rbbB5+33nTlLTya67gimY1lKt |
|||
WeNB33/yBkCjfSP/J5UDD9mE/oPLt3vAOkOUgMCfp2IpC2Wez1QGqLHS260zpotP |
|||
VpgalHuSWtn8D4nO2pk1hg== |
|||
-----END PRIVATE KEY----- |
|||
@ -0,0 +1,8 @@ |
|||
FROM nginx:latest |
|||
|
|||
COPY ../frontend/dist/ /usr/share/nginx/html |
|||
|
|||
COPY ./default.conf /etc/nginx/conf.d |
|||
|
|||
EXPOSE 80:80 |
|||
|
|||
Loading…
Reference in new issue