Merge branch 'main' into main
This commit is contained in:
		@@ -1,7 +1,7 @@
 | 
			
		||||
{
 | 
			
		||||
	"name": "coolify",
 | 
			
		||||
	"description": "An open-source & self-hostable Heroku / Netlify alternative.",
 | 
			
		||||
	"version": "2.4.0",
 | 
			
		||||
	"version": "2.4.1",
 | 
			
		||||
	"license": "AGPL-3.0",
 | 
			
		||||
	"scripts": {
 | 
			
		||||
		"dev": "docker-compose -f docker-compose-dev.yaml up -d && cross-env NODE_ENV=development & svelte-kit dev",
 | 
			
		||||
 
 | 
			
		||||
@@ -159,6 +159,7 @@ export function generateDatabaseConfiguration(database) {
 | 
			
		||||
			// url: `psql://${dbUser}:${dbUserPassword}@${id}:${isPublic ? port : 5432}/${defaultDatabase}`,
 | 
			
		||||
			privatePort: 5432,
 | 
			
		||||
			environmentVariables: {
 | 
			
		||||
				POSTGRESQL_POSTGRES_PASSWORD: rootUserPassword,
 | 
			
		||||
				POSTGRESQL_PASSWORD: dbUserPassword,
 | 
			
		||||
				POSTGRESQL_USERNAME: dbUser,
 | 
			
		||||
				POSTGRESQL_DATABASE: defaultDatabase
 | 
			
		||||
 
 | 
			
		||||
@@ -138,7 +138,7 @@ export async function stopDatabase(database) {
 | 
			
		||||
	return everStarted;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export async function updatePasswordInDb(database, user, newPassword) {
 | 
			
		||||
export async function updatePasswordInDb(database, user, newPassword, isRoot) {
 | 
			
		||||
	const {
 | 
			
		||||
		id,
 | 
			
		||||
		type,
 | 
			
		||||
@@ -157,9 +157,15 @@ export async function updatePasswordInDb(database, user, newPassword) {
 | 
			
		||||
				`DOCKER_HOST=${host} docker exec ${id} mysql -u ${rootUser} -p${rootUserPassword} -e \"ALTER USER '${user}'@'%' IDENTIFIED WITH caching_sha2_password BY '${newPassword}';\"`
 | 
			
		||||
			);
 | 
			
		||||
		} else if (type === 'postgresql') {
 | 
			
		||||
			if (isRoot) {
 | 
			
		||||
				await asyncExecShell(
 | 
			
		||||
					`DOCKER_HOST=${host} docker exec ${id} psql postgresql://postgres:${rootUserPassword}@${id}:5432/${defaultDatabase} -c "ALTER role postgres WITH PASSWORD '${newPassword}'"`
 | 
			
		||||
				);
 | 
			
		||||
			} else {
 | 
			
		||||
				await asyncExecShell(
 | 
			
		||||
					`DOCKER_HOST=${host} docker exec ${id} psql postgresql://${dbUser}:${dbUserPassword}@${id}:5432/${defaultDatabase} -c "ALTER role ${user} WITH PASSWORD '${newPassword}'"`
 | 
			
		||||
				);
 | 
			
		||||
			}
 | 
			
		||||
		} else if (type === 'mongodb') {
 | 
			
		||||
			await asyncExecShell(
 | 
			
		||||
				`DOCKER_HOST=${host} docker exec ${id} mongo 'mongodb://${rootUser}:${rootUserPassword}@${id}:27017/admin?readPreference=primary&ssl=false' --eval "db.changeUserPassword('${user}','${newPassword}')"`
 | 
			
		||||
 
 | 
			
		||||
@@ -165,7 +165,7 @@ export async function configureServiceType({ id, type }) {
 | 
			
		||||
			}
 | 
			
		||||
		});
 | 
			
		||||
	} else if (type === 'ghost') {
 | 
			
		||||
		const defaultEmail = `${cuid()}@coolify.io`;
 | 
			
		||||
		const defaultEmail = `${cuid()}@example.com`;
 | 
			
		||||
		const defaultPassword = encrypt(generatePassword());
 | 
			
		||||
		const mariadbUser = cuid();
 | 
			
		||||
		const mariadbPassword = encrypt(generatePassword());
 | 
			
		||||
 
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
	$: databaseUrl = generateUrl();
 | 
			
		||||
 | 
			
		||||
	function generateUrl() {
 | 
			
		||||
		return browser
 | 
			
		||||
		return (databaseUrl = browser
 | 
			
		||||
			? `${database.type}://${
 | 
			
		||||
					databaseDbUser ? databaseDbUser + ':' : ''
 | 
			
		||||
			  }${databaseDbUserPassword}@${
 | 
			
		||||
@@ -59,7 +59,7 @@
 | 
			
		||||
							: window.location.hostname
 | 
			
		||||
						: database.id
 | 
			
		||||
			  }:${isPublic ? database.publicPort : privatePort}/${databaseDefault}`
 | 
			
		||||
			: 'Loading...';
 | 
			
		||||
			: 'Loading...');
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	async function changeSettings(name) {
 | 
			
		||||
@@ -200,7 +200,7 @@
 | 
			
		||||
					name="url"
 | 
			
		||||
					readonly
 | 
			
		||||
					disabled
 | 
			
		||||
					value={publicLoading || loading ? 'Loading...' : databaseUrl}
 | 
			
		||||
					value={publicLoading || loading ? 'Loading...' : generateUrl()}
 | 
			
		||||
				/>
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
 
 | 
			
		||||
@@ -21,6 +21,19 @@
 | 
			
		||||
			bind:value={database.defaultDatabase}
 | 
			
		||||
		/>
 | 
			
		||||
	</div>
 | 
			
		||||
	<div class="grid grid-cols-2 items-center">
 | 
			
		||||
		<label for="rootUser" class="text-base font-bold text-stone-100"
 | 
			
		||||
			>Root (postgres) User Password</label
 | 
			
		||||
		>
 | 
			
		||||
		<CopyPasswordField
 | 
			
		||||
			disabled={!isRunning}
 | 
			
		||||
			readonly={!isRunning}
 | 
			
		||||
			placeholder="Generated automatically after start"
 | 
			
		||||
			id="rootUserPassword"
 | 
			
		||||
			name="rootUserPassword"
 | 
			
		||||
			bind:value={database.rootUserPassword}
 | 
			
		||||
		/>
 | 
			
		||||
	</div>
 | 
			
		||||
	<div class="grid grid-cols-2 items-center">
 | 
			
		||||
		<label for="dbUser" class="text-base font-bold text-stone-100">User</label>
 | 
			
		||||
		<CopyPasswordField
 | 
			
		||||
 
 | 
			
		||||
@@ -68,9 +68,9 @@ export const post: RequestHandler = async (event) => {
 | 
			
		||||
		const database = await db.getDatabase({ id, teamId });
 | 
			
		||||
		if (isRunning) {
 | 
			
		||||
			if (database.dbUserPassword !== dbUserPassword) {
 | 
			
		||||
				await updatePasswordInDb(database, dbUser, dbUserPassword);
 | 
			
		||||
				await updatePasswordInDb(database, dbUser, dbUserPassword, false);
 | 
			
		||||
			} else if (database.rootUserPassword !== rootUserPassword) {
 | 
			
		||||
				await updatePasswordInDb(database, rootUser, rootUserPassword);
 | 
			
		||||
				await updatePasswordInDb(database, rootUser, rootUserPassword, true);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		await db.updateDatabase({
 | 
			
		||||
 
 | 
			
		||||
@@ -44,12 +44,15 @@ export const post: RequestHandler = async (event) => {
 | 
			
		||||
		const { workdir } = await createDirectories({ repository: type, buildId: id });
 | 
			
		||||
		const image = getServiceImage(type);
 | 
			
		||||
		const domain = getDomain(fqdn);
 | 
			
		||||
		const isHttps = fqdn.startsWith('https://');
 | 
			
		||||
		const config = {
 | 
			
		||||
			ghost: {
 | 
			
		||||
				image: `${image}:${version}`,
 | 
			
		||||
				volume: `${id}-ghost:/bitnami/ghost`,
 | 
			
		||||
				environmentVariables: {
 | 
			
		||||
					url: fqdn,
 | 
			
		||||
					GHOST_HOST: domain,
 | 
			
		||||
					GHOST_ENABLE_HTTPS: isHttps ? 'yes' : 'no',
 | 
			
		||||
					GHOST_EMAIL: defaultEmail,
 | 
			
		||||
					GHOST_PASSWORD: defaultPassword,
 | 
			
		||||
					GHOST_DATABASE_HOST: `${id}-mariadb`,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user