mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-28 14:15:24 +00:00
feat: dev:all runner for web, electron and docker with plugin hot reload, termix-plugin dev
This commit is contained in:
1 parent
49fc241e06
commit
ec80a8ef8d
24 files changed
+1848
-44
No files matched your search
@@ -0,0 +1,109 @@
|
||||
export const NETWORK = "termix-dev";
|
||||
export const APP_CONTAINER = "termix-dev";
|
||||
export const APP_IMAGE = "termix:dev";
|
||||
|
||||
/** Side containers dev:all can run. hostPort is what the local backend uses. */
|
||||
export const SERVICES = {
|
||||
postgres: {
|
||||
container: "termix-dev-postgres",
|
||||
image: "postgres:16",
|
||||
hostPort: 55432,
|
||||
port: 5432,
|
||||
env: {
|
||||
POSTGRES_USER: "termix",
|
||||
POSTGRES_PASSWORD: "termix",
|
||||
POSTGRES_DB: "termix",
|
||||
},
|
||||
volume: ["termix-dev-postgres", "/var/lib/postgresql/data"],
|
||||
// Over TCP, so the server that only runs during first-time setup does
|
||||
// not count as ready.
|
||||
ready: ["pg_isready", "-h", "127.0.0.1", "-U", "termix", "-d", "termix"],
|
||||
},
|
||||
mysql: {
|
||||
container: "termix-dev-mysql",
|
||||
image: "mysql:8",
|
||||
hostPort: 33306,
|
||||
port: 3306,
|
||||
env: { MYSQL_ROOT_PASSWORD: "termix", MYSQL_DATABASE: "termix" },
|
||||
volume: ["termix-dev-mysql", "/var/lib/mysql"],
|
||||
ready: ["mysqladmin", "ping", "-h", "127.0.0.1", "-uroot", "-ptermix"],
|
||||
},
|
||||
guacd: {
|
||||
container: "termix-dev-guacd",
|
||||
image: "guacamole/guacd:1.6.0",
|
||||
hostPort: 4822,
|
||||
port: 4822,
|
||||
env: {},
|
||||
volume: null,
|
||||
ready: null,
|
||||
},
|
||||
};
|
||||
|
||||
function envArgs(env) {
|
||||
return Object.entries(env).flatMap(([key, value]) => [
|
||||
"-e",
|
||||
`${key}=${value}`,
|
||||
]);
|
||||
}
|
||||
|
||||
export function serviceRunArgs(service) {
|
||||
return [
|
||||
"run",
|
||||
"-d",
|
||||
"--name",
|
||||
service.container,
|
||||
"--network",
|
||||
NETWORK,
|
||||
"-p",
|
||||
`${service.hostPort}:${service.port}`,
|
||||
...envArgs(service.env),
|
||||
...(service.volume
|
||||
? ["-v", `${service.volume[0]}:${service.volume[1]}`]
|
||||
: []),
|
||||
service.image,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Environment that points a backend at the side containers. inDocker means
|
||||
* the backend runs in the dev network and reaches them by name.
|
||||
*/
|
||||
export function serviceEnv(options, inDocker) {
|
||||
const env = {};
|
||||
const address = (service) =>
|
||||
inDocker
|
||||
? `${service.container}:${service.port}`
|
||||
: `127.0.0.1:${service.hostPort}`;
|
||||
if (options.db === "postgres") {
|
||||
env.DATABASE_DIALECT = "postgres";
|
||||
env.DATABASE_URL = `postgres://termix:termix@${address(SERVICES.postgres)}/termix`;
|
||||
} else if (options.db === "mysql") {
|
||||
env.DATABASE_DIALECT = "mysql";
|
||||
env.DATABASE_URL = `mysql://root:termix@${address(SERVICES.mysql)}/termix`;
|
||||
}
|
||||
if (options.guacd) {
|
||||
const guacd = SERVICES.guacd;
|
||||
env.GUACD_HOST = inDocker ? guacd.container : "127.0.0.1";
|
||||
env.GUACD_PORT = String(inDocker ? guacd.port : guacd.hostPort);
|
||||
}
|
||||
return env;
|
||||
}
|
||||
|
||||
export function appRunArgs({ port, env, dataMount, pluginsDir }) {
|
||||
return [
|
||||
"run",
|
||||
"-d",
|
||||
"--name",
|
||||
APP_CONTAINER,
|
||||
"--network",
|
||||
NETWORK,
|
||||
"-p",
|
||||
`${port}:8080`,
|
||||
...envArgs({ PORT: "8080", NODE_ENV: "development", ...env }),
|
||||
"-v",
|
||||
`${dataMount}:/app/data`,
|
||||
"-v",
|
||||
`${pluginsDir}:/app/dist/plugins`,
|
||||
APP_IMAGE,
|
||||
];
|
||||
}
|
||||
Reference in new issue
Block a user