fix: Expose ports for services
This commit is contained in:
		| @@ -527,7 +527,8 @@ | ||||
| 				<div class="grid grid-cols-2 items-center"> | ||||
| 					<label for="exposePort" class="text-base font-bold text-stone-100">Exposed Port</label> | ||||
| 					<input | ||||
| 						readonly={!$session.isAdmin} | ||||
| 						readonly={!$session.isAdmin && !isRunning} | ||||
| 						disabled={!$session.isAdmin || isRunning} | ||||
| 						name="exposePort" | ||||
| 						id="exposePort" | ||||
| 						bind:value={application.exposePort} | ||||
|   | ||||
| @@ -27,7 +27,6 @@ | ||||
| 	let loading = false; | ||||
| 	let loadingVerification = false; | ||||
| 	let dualCerts = service.dualCerts; | ||||
| 	let showExposePort = service.exposePort !== null; | ||||
|  | ||||
| 	async function handleSubmit() { | ||||
| 		loading = true; | ||||
| @@ -161,31 +160,20 @@ | ||||
| 					on:click={() => !isRunning && changeSettings('dualCerts')} | ||||
| 				/> | ||||
| 			</div> | ||||
| 			<div class="grid grid-cols-2 items-center"> | ||||
| 				<Setting | ||||
| 					isCenter={false} | ||||
| 					bind:setting={showExposePort} | ||||
| 					on:click={() => { | ||||
| 						showExposePort = !showExposePort; | ||||
| 						service.exposePort = undefined; | ||||
| 					}} | ||||
| 					title={$t('application.expose_a_port')} | ||||
| 					description="Expose a port to the host system" | ||||
| 				/> | ||||
| 			</div> | ||||
|  | ||||
| 			{#if showExposePort} | ||||
| 				<div class="grid grid-cols-2 items-center"> | ||||
| 					<label for="exposePort" class="text-base font-bold text-stone-100">Expose Port</label> | ||||
| 			<div class="grid grid-cols-2 items-center  px-10"> | ||||
| 				<label for="exposePort" class="text-base font-bold text-stone-100">Exposed Port</label> | ||||
| 				<input | ||||
| 						readonly={!$session.isAdmin} | ||||
| 					readonly={!$session.isAdmin && !isRunning} | ||||
| 					disabled={!$session.isAdmin || isRunning} | ||||
| 					name="exposePort" | ||||
| 					id="exposePort" | ||||
| 					bind:value={service.exposePort} | ||||
| 					placeholder="12345" | ||||
| 				/> | ||||
| 				<Explainer | ||||
| 					text={'You can expose your application to a port on the host system.<br><br>Useful if you would like to use your own reverse proxy or tunnel and also in development mode. Otherwise leave empty.'} | ||||
| 				/> | ||||
| 			</div> | ||||
| 			{/if} | ||||
|  | ||||
| 			{#if service.type === 'plausibleanalytics'} | ||||
| 				<PlausibleAnalytics bind:service {isRunning} {readOnly} /> | ||||
|   | ||||
| @@ -13,6 +13,7 @@ import { ErrorHandler, getServiceImage } from '$lib/database'; | ||||
| import { makeLabelForServices } from '$lib/buildPacks/common'; | ||||
| import type { ComposeFile } from '$lib/types/composeFile'; | ||||
| import type { Service, DestinationDocker, Prisma } from '@prisma/client'; | ||||
| import { getServiceMainPort } from '$lib/components/common'; | ||||
|  | ||||
| export const post: RequestHandler = async (event) => { | ||||
| 	const { teamId, status, body } = await getUserDetails(event); | ||||
| @@ -30,6 +31,7 @@ export const post: RequestHandler = async (event) => { | ||||
| 			destinationDockerId, | ||||
| 			destinationDocker, | ||||
| 			serviceSecret, | ||||
| 			exposePort, | ||||
| 			fider: { | ||||
| 				postgresqlUser, | ||||
| 				postgresqlPassword, | ||||
| @@ -48,6 +50,7 @@ export const post: RequestHandler = async (event) => { | ||||
| 		} = service; | ||||
| 		const network = destinationDockerId && destinationDocker.network; | ||||
| 		const host = getEngine(destinationDocker.engine); | ||||
| 		const port = getServiceMainPort('fider'); | ||||
|  | ||||
| 		const { workdir } = await createDirectories({ repository: type, buildId: id }); | ||||
| 		const image = getServiceImage(type); | ||||
| @@ -97,6 +100,7 @@ export const post: RequestHandler = async (event) => { | ||||
| 					volumes: [], | ||||
| 					restart: 'always', | ||||
| 					labels: makeLabelForServices('fider'), | ||||
| 					...(exposePort ? { ports: [`${exposePort}:${port}`] } : {}), | ||||
| 					deploy: { | ||||
| 						restart_policy: { | ||||
| 							condition: 'on-failure', | ||||
|   | ||||
| @@ -7,6 +7,7 @@ import { ErrorHandler, getServiceImage } from '$lib/database'; | ||||
| import { makeLabelForServices } from '$lib/buildPacks/common'; | ||||
| import type { ComposeFile } from '$lib/types/composeFile'; | ||||
| import type { Service, DestinationDocker, Prisma } from '@prisma/client'; | ||||
| import { getServiceMainPort } from '$lib/components/common'; | ||||
|  | ||||
| export const post: RequestHandler = async (event) => { | ||||
| 	const { teamId, status, body } = await getUserDetails(event); | ||||
| @@ -23,10 +24,12 @@ export const post: RequestHandler = async (event) => { | ||||
| 			destinationDockerId, | ||||
| 			destinationDocker, | ||||
| 			serviceSecret, | ||||
| 			exposePort, | ||||
| 			hasura: { postgresqlUser, postgresqlPassword, postgresqlDatabase } | ||||
| 		} = service; | ||||
| 		const network = destinationDockerId && destinationDocker.network; | ||||
| 		const host = getEngine(destinationDocker.engine); | ||||
| 		const port = getServiceMainPort('hasura'); | ||||
|  | ||||
| 		const { workdir } = await createDirectories({ repository: type, buildId: id }); | ||||
| 		const image = getServiceImage(type); | ||||
| @@ -65,6 +68,7 @@ export const post: RequestHandler = async (event) => { | ||||
| 					volumes: [], | ||||
| 					restart: 'always', | ||||
| 					labels: makeLabelForServices('hasura'), | ||||
| 					...(exposePort ? { ports: [`${exposePort}:${port}`] } : {}), | ||||
| 					deploy: { | ||||
| 						restart_policy: { | ||||
| 							condition: 'on-failure', | ||||
|   | ||||
| @@ -65,7 +65,7 @@ export const post: RequestHandler = async (event) => { | ||||
| 					networks: [network], | ||||
| 					volumes: [config.volume], | ||||
| 					restart: 'always', | ||||
| 					...(exposePort && { ports: [`${port}:${port}`] }), | ||||
| 					...(exposePort ? { ports: [`${exposePort}:${port}`] } : {}), | ||||
| 					labels: makeLabelForServices('minio'), | ||||
| 					deploy: { | ||||
| 						restart_policy: { | ||||
|   | ||||
| @@ -48,6 +48,7 @@ export const post: RequestHandler = async (event) => { | ||||
| 					environment: config.environmentVariables, | ||||
| 					restart: 'always', | ||||
| 					labels: makeLabelForServices('n8n'), | ||||
| 					...(exposePort ? { ports: [`${exposePort}:${port}`] } : {}), | ||||
| 					deploy: { | ||||
| 						restart_policy: { | ||||
| 							condition: 'on-failure', | ||||
|   | ||||
| @@ -135,7 +135,7 @@ COPY ./init-db.sh /docker-entrypoint-initdb.d/init-db.sh`; | ||||
| 					networks: [network], | ||||
| 					environment: config.plausibleAnalytics.environmentVariables, | ||||
| 					restart: 'always', | ||||
| 					...(exposePort && { ports: [`${port}:${exposePort}`] }), | ||||
| 					...(exposePort ? { ports: [`${exposePort}:${port}`] } : {}), | ||||
| 					depends_on: [`${id}-postgresql`, `${id}-clickhouse`], | ||||
| 					labels: makeLabelForServices('plausibleAnalytics'), | ||||
| 					deploy: { | ||||
| @@ -195,6 +195,7 @@ COPY ./init-db.sh /docker-entrypoint-initdb.d/init-db.sh`; | ||||
| 			} | ||||
| 		}; | ||||
| 		const composeFileDestination = `${workdir}/docker-compose.yaml`; | ||||
| 		console.log(JSON.stringify(composeFile, null, 2)); | ||||
| 		await fs.writeFile(composeFileDestination, yaml.dump(composeFile)); | ||||
| 		await asyncExecShell(`DOCKER_HOST=${host} docker compose -f ${composeFileDestination} pull`); | ||||
| 		await asyncExecShell( | ||||
|   | ||||
| @@ -159,7 +159,7 @@ export const post: RequestHandler = async (event) => { | ||||
| 					networks: [network], | ||||
| 					volumes: [], | ||||
| 					restart: 'always', | ||||
| 					...(exposePort ? { ports: [`${port}:${port}`] } : {}), | ||||
| 					...(exposePort ? { ports: [`${exposePort}:${port}`] } : {}), | ||||
| 					labels: makeLabelForServices('umami'), | ||||
| 					deploy: { | ||||
| 						restart_policy: { | ||||
|   | ||||
| @@ -78,7 +78,7 @@ export const post: RequestHandler = async (event) => { | ||||
| 					networks: [network], | ||||
| 					volumes: [config.volume, ...volumes], | ||||
| 					restart: 'always', | ||||
| 					...(exposePort ? { ports: [`${port}:${exposePort}`] } : {}), | ||||
| 					...(exposePort ? { ports: [`${exposePort}:${port}`] } : {}), | ||||
| 					labels: makeLabelForServices('vscodeServer'), | ||||
| 					deploy: { | ||||
| 						restart_policy: { | ||||
|   | ||||
| @@ -79,7 +79,7 @@ export const post: RequestHandler = async (event) => { | ||||
| 					volumes: [config.wordpress.volume], | ||||
| 					networks: [network], | ||||
| 					restart: 'always', | ||||
| 					...(exposePort ? { ports: [`${port}:${port}`] } : {}), | ||||
| 					...(exposePort ? { ports: [`${exposePort}:${port}`] } : {}), | ||||
| 					depends_on: [`${id}-mysql`], | ||||
| 					labels: makeLabelForServices('wordpress'), | ||||
| 					deploy: { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Andras Bacsai
					Andras Bacsai