fix: create data dir with 777 perms + handle in code
All checks were successful
Deploy / build-and-deploy (push) Successful in 1m48s

This commit is contained in:
2026-06-14 21:55:30 +03:00
parent 931553906f
commit b34a009eb0
3 changed files with 59 additions and 56 deletions

View File

@@ -31,8 +31,9 @@ jobs:
- name: Copy files to server
run: |
ssh root@barabingo 'mkdir -p /opt/barabingo/data /opt/barabingo/uploads'
scp /tmp/barabingo.tar.gz docker-compose.yml root@barabingo:/opt/barabingo/
- name: Deploy on server
run: |
ssh root@barabingo 'cd /opt/barabingo && docker load < barabingo.tar.gz && docker compose down --remove-orphans 2>/dev/null; docker compose up -d && rm -f barabingo.tar.gz && docker image prune -f'
ssh root@barabingo 'chmod 777 /opt/barabingo/data /opt/barabingo/uploads && cd /opt/barabingo && docker load < barabingo.tar.gz && docker compose down --remove-orphans 2>/dev/null; docker compose up -d && rm -f barabingo.tar.gz && docker image prune -f'

View File

@@ -20,7 +20,7 @@ COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
RUN mkdir -p /app/data && chown nextjs:nodejs /app/data
RUN mkdir -p /app/data /app/public/uploads && chmod 777 /app/data /app/public/uploads
USER nextjs

View File

@@ -2,18 +2,23 @@ import Database from "better-sqlite3";
import { drizzle } from "drizzle-orm/better-sqlite3";
import * as schema from "./schema";
import path from "path";
import fs from "fs";
const DB_PATH = path.join(process.cwd(), "data", "bingo.db");
const DB_DIR = path.join(process.cwd(), "data");
const DB_PATH = path.join(DB_DIR, "bingo.db");
function getDb() {
const sqlite = new Database(DB_PATH);
sqlite.pragma("journal_mode = WAL");
sqlite.pragma("foreign_keys = ON");
return sqlite;
}
try {
fs.mkdirSync(DB_DIR, { recursive: true, mode: 0o777 });
} catch {}
function initDatabase(sqlite: Database.Database) {
sqlite.exec(`
const sqlite = (() => {
const s = new Database(DB_PATH);
s.pragma("journal_mode = WAL");
s.pragma("foreign_keys = ON");
return s;
})();
sqlite.exec(`
CREATE TABLE IF NOT EXISTS users (
id TEXT PRIMARY KEY,
nickname TEXT UNIQUE NOT NULL,
@@ -54,11 +59,8 @@ function initDatabase(sqlite: Database.Database) {
);
CREATE UNIQUE INDEX IF NOT EXISTS idx_campaign_item_pos ON bingo_items(campaign_id, grid_index);
CREATE UNIQUE INDEX IF NOT EXISTS idx_unique_mark ON marks(campaign_id, item_id);
`);
`);
try { sqlite.exec("ALTER TABLE bingo_items ADD COLUMN sound_url TEXT"); } catch {}
}
try { sqlite.exec("ALTER TABLE bingo_items ADD COLUMN sound_url TEXT"); } catch {}
const sqlite = getDb();
initDatabase(sqlite);
export const db = drizzle(sqlite, { schema });