도커 설치 내용 추가 밎 SQL 설정 버그 해결 및 영상 생성 front단 Timeout 제거
parent
f5e7fba363
commit
9994944813
27
Dockerfile
27
Dockerfile
|
|
@ -2,11 +2,14 @@ FROM ubuntu:24.04
|
|||
|
||||
WORKDIR /app
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
ENV NODE_ENV=production
|
||||
|
||||
# 시스템 패키지 설치
|
||||
RUN apt-get update && apt-get install -y \
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get install -y software-properties-common && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get install -y \
|
||||
curl \
|
||||
wget \
|
||||
gnupg \
|
||||
|
|
@ -21,18 +24,32 @@ RUN apt-get update && apt-get install -y \
|
|||
ffmpeg \
|
||||
nodejs \
|
||||
nginx \
|
||||
chromium \
|
||||
chromium-browser \
|
||||
certbot \
|
||||
python3-certbot-nginx \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN pip install requests cryptography flask flask_cors python-dotenv Pillow --break-system-packages
|
||||
RUN apt-get install -y wget
|
||||
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - && \
|
||||
sh -c 'echo "deb https://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
|
||||
RUN apt update && apt install google-chrome-stable -y
|
||||
|
||||
RUN pip install requests cryptography flask flask_cors python-dotenv Pillow --break-system-packages --ignore-installed
|
||||
|
||||
# Node.js 및 npm 설치
|
||||
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
|
||||
apt-get install -y nodejs && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN apt-get update && apt-get install -y fonts-noto-cjk\
|
||||
ca-certificates fonts-liberation libasound2t64 libatk-bridge2.0-0 libatk1.0-0 \
|
||||
libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 \
|
||||
libglib2.0-0 libgtk-3-0 libnspr4 libnss3 libpango-1.0-0 libpangocairo-1.0-0 \
|
||||
libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 \
|
||||
libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 lsb-release \
|
||||
wget xdg-utils
|
||||
|
||||
# 포트 개방
|
||||
EXPOSE 3000 3001
|
||||
|
||||
|
|
|
|||
|
|
@ -241,7 +241,7 @@ const ResultPlayer: React.FC<ResultPlayerProps> = ({ assets, onReset, autoPlay =
|
|||
const pollJobStatus = async (jobId: string) => {
|
||||
const token = localStorage.getItem('token');
|
||||
let pollCount = 0;
|
||||
const maxPolls = 180; // 최대 3분 (1초 간격)
|
||||
const maxPolls = 600; // 최대 3분 (1초 간격)
|
||||
|
||||
const poll = async () => {
|
||||
if (pollCount >= maxPolls) {
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -50,6 +50,7 @@
|
|||
"clsx": "^2.1.1",
|
||||
"concurrently": "^9.2.1",
|
||||
"postcss": "^8.5.6",
|
||||
"puppeteer": "^24.33.0",
|
||||
"tailwind-merge": "^3.4.0",
|
||||
"tailwindcss": "^3.4.18",
|
||||
"tailwindcss-animate": "^1.0.7",
|
||||
|
|
|
|||
|
|
@ -634,6 +634,7 @@ db.serialize(() => {
|
|||
user_id INTEGER,
|
||||
business_name TEXT,
|
||||
details TEXT,
|
||||
final_video_path TEXT,
|
||||
createdAt DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY(user_id) REFERENCES users(id)
|
||||
)`);
|
||||
|
|
|
|||
|
|
@ -2154,8 +2154,9 @@ async function processRenderQueue() {
|
|||
|
||||
// Puppeteer 녹화
|
||||
const browser = await puppeteer.launch({
|
||||
executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || '/usr/bin/google-chrome-stable',
|
||||
headless: 'new',
|
||||
args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-web-security']
|
||||
args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-web-security','--disable-dev-shm-usage', '--disable-gpu']
|
||||
});
|
||||
|
||||
const page = await browser.newPage();
|
||||
|
|
@ -2397,8 +2398,9 @@ app.post('/render', authenticateToken, async (req, res) => {
|
|||
|
||||
// 3. Puppeteer로 영상 녹화
|
||||
const browser = await puppeteer.launch({
|
||||
executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || '/usr/bin/google-chrome-stable',
|
||||
headless: 'new',
|
||||
args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-web-security']
|
||||
args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-web-security','--disable-dev-shm-usage', '--disable-gpu']
|
||||
});
|
||||
|
||||
const page = await browser.newPage();
|
||||
|
|
@ -7726,6 +7728,7 @@ app.post('/api/admin/sync/pensions', authenticateToken, requireAdmin, async (req
|
|||
|
||||
// 모든 기타 요청은 React 앱으로 전달 (SPA 라우팅 지원)
|
||||
app.get('*', (req, res) => {
|
||||
console.log("unknown req : ", req)
|
||||
res.sendFile(path.join(__dirname, '../dist/index.html'));
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ const LibraryView: React.FC<LibraryViewProps> = ({
|
|||
const [uploadPlatform, setUploadPlatform] = useState<'youtube' | 'instagram' | null>(null);
|
||||
|
||||
const filteredItems = items.filter(item =>
|
||||
item.businessName.toLowerCase().includes(searchQuery.toLowerCase())
|
||||
item.businessName?.toLowerCase().includes(searchQuery.toLowerCase())
|
||||
);
|
||||
|
||||
// YouTube 업로드
|
||||
|
|
|
|||
|
|
@ -13,14 +13,18 @@ services:
|
|||
- ./local-data:/app/local-data
|
||||
environment:
|
||||
- NODE_ENV=development
|
||||
- DEBIAN_FRONTEND=noninteractive
|
||||
- PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
|
||||
- PUPPETEER_EXECUTABLE_PATH=/usr/bin/google-chrome-stable
|
||||
|
||||
working_dir: /app/data
|
||||
restart: unless-stopped
|
||||
stdin_open: true
|
||||
tty: true
|
||||
command: >
|
||||
bash -c "
|
||||
npm install -g --silent
|
||||
cd server && npm install -g --silent
|
||||
npm install -g --silent --legacy-peer-deps
|
||||
cd server && npm install -g --silent --legacy-peer-deps
|
||||
cd ../
|
||||
./start.sh
|
||||
"
|
||||
|
|
|
|||
Loading…
Reference in New Issue