mirror of
https://github.com/ajnart/homarr.git
synced 2025-11-13 17:05:47 +01:00
🚧 Improve dockerfile and start script and fix permission issue by adding new user with permission to read / write to /data folder
This commit is contained in:
30
Dockerfile
30
Dockerfile
@@ -1,6 +1,11 @@
|
||||
FROM node:20.5-slim
|
||||
WORKDIR /app
|
||||
|
||||
ARG UID=1001
|
||||
ARG GID=1001
|
||||
RUN groupadd -g $GID homarr-group
|
||||
RUN useradd -r -u $UID -g $GID homarr
|
||||
|
||||
# Define node.js environment variables
|
||||
ARG PORT=7575
|
||||
|
||||
@@ -18,17 +23,30 @@ COPY .next/standalone ./
|
||||
COPY .next/static ./.next/static
|
||||
COPY ./scripts/run.sh ./scripts/run.sh
|
||||
COPY ./drizzle ./drizzle
|
||||
|
||||
COPY ./drizzle/migrate ./migrate
|
||||
COPY ./tsconfig.json ./migrate/tsconfig.json
|
||||
|
||||
RUN mkdir /data
|
||||
COPY ./src/migrate.ts ./src/migrate.ts
|
||||
RUN chown -R homarr:homarr-group /data
|
||||
|
||||
# Install dependencies
|
||||
RUN apt-get update -y && apt-get install -y openssl wget
|
||||
|
||||
# Required for migration
|
||||
# Move node_modules to temp location to avoid overwriting
|
||||
RUN mv node_modules _node_modules
|
||||
RUN rm package.json
|
||||
RUN yarn add typescript ts-node dotenv drizzle-orm@0.28.6 better-sqlite3@8.6.0 @types/better-sqlite3
|
||||
RUN mv node_modules node_modules_migrate
|
||||
|
||||
# Install dependencies for migration
|
||||
RUN cp ./migrate/package.json ./package.json
|
||||
RUN yarn
|
||||
|
||||
# Copy better_sqlite3 build for current platform
|
||||
RUN cp /app/node_modules/better-sqlite3/build/Release/better_sqlite3.node /app/_node_modules/better-sqlite3/build/Release/better_sqlite3.node
|
||||
|
||||
# Copy node_modules for migration to migrate folder for migration script
|
||||
RUN mv node_modules ./migrate/node_modules
|
||||
# Copy temp node_modules of app to app folder
|
||||
RUN mv _node_modules node_modules
|
||||
|
||||
# Expose the default application port
|
||||
@@ -43,4 +61,8 @@ ENV NEXTAUTH_SECRET NOT_IN_USE_BECAUSE_JWTS_ARE_UNUSED
|
||||
HEALTHCHECK --interval=10s --timeout=5s --start-period=5s --retries=3 \
|
||||
CMD wget --no-verbose --tries=1 --spider http://localhost:${PORT} || exit 1
|
||||
|
||||
USER homarr
|
||||
|
||||
CMD ["sh", "./scripts/run.sh"]
|
||||
|
||||
# TEMPORARY: "db:migrate": "ts-node ./migrate.ts ../drizzle"
|
||||
@@ -5,6 +5,9 @@ import dotenv from 'dotenv';
|
||||
import { drizzle } from 'drizzle-orm/better-sqlite3';
|
||||
import { migrate } from 'drizzle-orm/better-sqlite3/migrator';
|
||||
|
||||
// TODO: Remove
|
||||
// const migrationsFolder = process.argv[2] ?? './drizzle';
|
||||
|
||||
dotenv.config({ path: __dirname + '/../.env' });
|
||||
|
||||
const sqlite = new Database(process.env.DATABASE_URL!.replace('file:', ''));
|
||||
@@ -12,7 +15,7 @@ const sqlite = new Database(process.env.DATABASE_URL!.replace('file:', ''));
|
||||
const db = drizzle(sqlite);
|
||||
|
||||
const migrateDatabase = async () => {
|
||||
await migrate(db, { migrationsFolder: './drizzle' });
|
||||
await migrate(db, { migrationsFolder: '../drizzle' });
|
||||
};
|
||||
|
||||
migrateDatabase();
|
||||
13
drizzle/migrate/package.json
Normal file
13
drizzle/migrate/package.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"scripts": {
|
||||
"db:migrate": "ts-node ./migrate.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/better-sqlite3": "^7.6.7",
|
||||
"better-sqlite3": "8.6.0",
|
||||
"drizzle-orm": "^0.28.6",
|
||||
"dotenv": "^16.3.1",
|
||||
"ts-node": "^10.9.1",
|
||||
"typescript": "^5.2.2"
|
||||
}
|
||||
}
|
||||
@@ -24,7 +24,7 @@
|
||||
"test:coverage": "SKIP_ENV_VALIDATION=1 vitest run --coverage",
|
||||
"docker:build": "turbo build && docker build . -t homarr:local-dev",
|
||||
"docker:start": "docker run -p 7575:7575 --name homarr-development homarr:local-dev",
|
||||
"db:migrate": "ts-node src/migrate.ts"
|
||||
"db:migrate": "ts-node drizzle/migrate/migrate.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@auth/drizzle-adapter": "^0.3.2",
|
||||
@@ -232,4 +232,4 @@
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,28 +2,11 @@
|
||||
|
||||
echo "Exporting hostname..."
|
||||
export NEXTAUTH_URL_INTERNAL="http://$HOSTNAME:7575"
|
||||
rm -rf _node_modules
|
||||
mv node_modules _node_modules
|
||||
rm -rf node_modules
|
||||
mv node_modules_migrate node_modules
|
||||
|
||||
echo "Migrating database..."
|
||||
yarn ts-node src/migrate.ts & PID=$!
|
||||
cd ./migrate; yarn db:migrate & PID=$!
|
||||
# Wait for migration to finish
|
||||
wait $PID
|
||||
|
||||
echo "Reverting to production node_modules..."
|
||||
# Copy specific sqlite3 binary to node_modules
|
||||
cp /app/node_modules/better-sqlite3/build/Release/better_sqlite3.node /app/_node_modules/better-sqlite3/build/Release/better_sqlite3.node
|
||||
|
||||
# Remove node_modules and copy cached node_modules
|
||||
rm -rf node_modules_migrate
|
||||
mv node_modules node_modules_migrate
|
||||
rm -rf node_modules
|
||||
mv _node_modules node_modules
|
||||
|
||||
cp ./temp_package.json package.json
|
||||
cp ./temp_yarn.lock yarn.lock
|
||||
|
||||
echo "Starting production server..."
|
||||
node /app/server.js
|
||||
@@ -7152,7 +7152,7 @@ __metadata:
|
||||
rss-parser: ^3.12.0
|
||||
sabnzbd-api: ^1.5.0
|
||||
sass: ^1.56.1
|
||||
ts-node: latest
|
||||
ts-node: ^10.9.1
|
||||
turbo: ^1.10.12
|
||||
typescript: 5.1.6
|
||||
uuid: ^9.0.0
|
||||
@@ -11590,7 +11590,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ts-node@npm:latest":
|
||||
"ts-node@npm:^10.9.1":
|
||||
version: 10.9.1
|
||||
resolution: "ts-node@npm:10.9.1"
|
||||
dependencies:
|
||||
|
||||
Reference in New Issue
Block a user