Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding platformsh configuration files. #611

Merged
merged 1 commit into from
Jul 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
132 changes: 132 additions & 0 deletions .platform/applications.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
# Complete list of all available properties: https://docs.platform.sh/create-apps/app-reference.html

# This file describes an application. You can have multiple applications
# in the same project.

# The name of this app. Must be unique within a project.
- name: api
source:
root: api

variables:
env:
APP_ENV: 'prod'

dependencies:
php:
composer/composer: "^2"

# The type of the application to build.
type: php:8.1
build:
flavor: composer

runtime:
extensions:
- apcu
- pdo_pgsql
- sodium
- redis

# The relationships of the application with services or other applications.
# The left-hand side is the name of the relationship as it will be exposed
# to the application in the PLATFORM_RELATIONSHIPS variable. The right-hand
# side is in the form `<service name>:<endpoint name>`.
relationships:
database: "postgresql:postgresql"
opensearch: "opensearch:opensearch"
redis: "redis:redis"

# The configuration of app when it is exposed to the web .
web:
locations:
"/":
# The public directory of the app, relative to its root.
root: "public"
# The front-controller script to send non-static requests to.
passthru: "/index.php"

# The size of the persistent disk of the application (in MB).
disk: 2048

# The mounts that will be performed when the package is deployed.
mounts:
"/var/cache": "shared:files/cache"
"/var/log": "shared:files/log"
"/var/sessions": "shared:files/sessions"

# The hooks that will be performed when the package is deployed.
hooks:
build: |
bin/console lexik:jwt:generate-keypair --skip-if-exists --no-interaction
bin/console --env=prod assets:install --no-debug

deploy: |
bin/console --env=prod cache:clear
bin/console doctrine:migrations:migrate -n --allow-no-migration

# A unique name for the app. Must be lowercase alphanumeric characters. Changing the name destroys data associated
# with the app.
- name: admin

# Information on the app's source code and operations that can be run on it.
# More information: https://docs.platform.sh/create-apps/app-reference.html#source
source:
root: front

# The runtime the application uses.
# Complete list of available runtimes: https://docs.platform.sh/create-apps/app-reference.html#types
type: 'nodejs:18'

# The size of the persistent disk of the application (in MB). Minimum value is 128.
disk: 2048

# Mounts define directories that are writable after the build is complete. If set as a local source, disk property is required.
# More information: https://docs.platform.sh/create-apps/app-reference.html#mounts
mounts:
# Next.js will try to cache files, so it must be writeable.
'/.next':
source: local
source_path: 'next'

# The web key configures the web server running in front of your app.
# More information: https://docs.platform.sh/create-apps/app-reference.html#web
web:
# Commands are run once after deployment to start the application process.
# More information: https://docs.platform.sh/create-apps/app-reference.html#web-commands
commands:
# The command to launch your app. If it terminates, it’s restarted immediately.
#start: npx next start -p $PORT
start: yarn start

# Specifies a default set of build tasks to run. Flavors are language-specific.
# More information: https://docs.platform.sh/create-apps/app-reference.html#build
build:
flavor: none

# Installs global dependencies as part of the build process. They’re independent of your app’s dependencies and
# are available in the PATH during the build process and in the runtime environment. They’re installed before
# the build hook runs using a package manager for the language.
# More information: https://docs.platform.sh/create-apps/app-reference.html#dependencies
dependencies:
nodejs:
yarn: "^1.22.0"

# Hooks allow you to customize your code/environment as the project moves through the build and deploy stages
# More information: https://docs.platform.sh/create-apps/app-reference.html#hooks
hooks:
# The build hook is run after any build flavor.
# More information: https://docs.platform.sh/create-apps/hooks/hooks-comparison.html#build-hook
build: |
yarn
yarn install --frozen-lockfile --network-timeout 120000
yarn build
# Move committed files in soon-to-be mounts into temp directory.
chmod +x platformsh_handle_mounts.sh
./platformsh_handle_mounts.sh

# The deploy hook is run after the app container has been started, but before it has started accepting requests.
# More information: https://docs.platform.sh/create-apps/hooks/hooks-comparison.html#deploy-hook
deploy: |
# Move committed files from temp directory back into mounts.
./platformsh_handle_mounts.sh
83 changes: 83 additions & 0 deletions .platform/routes.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
https://{default}/:
cache:
cookies:
- '*'
default_ttl: 0
enabled: true
headers:
- Accept
- Accept-Language
ssi:
enabled: false
type: upstream
upstream: api:http

https://{default}/admin:
cache:
cookies:
- '*'
default_ttl: 0
enabled: true
headers:
- Accept
- Accept-Language
ssi:
enabled: false
type: upstream
upstream: admin:http

https://{default}/login:
cache:
cookies:
- '*'
default_ttl: 0
enabled: true
headers:
- Accept
- Accept-Language
ssi:
enabled: false
type: upstream
upstream: admin:http

https://{default}/_next:
cache:
cookies:
- '*'
default_ttl: 0
enabled: true
headers:
- Accept
- Accept-Language
ssi:
enabled: false
type: upstream
upstream: admin:http

https://{default}/locales:
cache:
cookies:
- '*'
default_ttl: 0
enabled: true
headers:
- Accept
- Accept-Language
ssi:
enabled: false
type: upstream
upstream: admin:http

https://{default}/images:
cache:
cookies:
- '*'
default_ttl: 0
enabled: true
headers:
- Accept
- Accept-Language
ssi:
enabled: false
type: upstream
upstream: admin:http
15 changes: 15 additions & 0 deletions .platform/services.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
postgresql:
type: postgresql:13
disk: 256

opensearch:
type: opensearch:2
disk: 256
configuration:
plugins:
- analysis-icu
- analysis-phonetic

redis:
type: redis-persistent:6.2
disk: 256
34 changes: 34 additions & 0 deletions api/.environment
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#############################################################################################
#### Platform.sh environment file.
#### THIS FILE IS USED ONLY WHEN DEPLOYING GALLY ON PLATFORM.SH
#############################################################################################

# Decode the built-in credentials object variable.
# export RELATIONSHIPS_JSON=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode)

# Set environment variables for OpenSearch
export ELASTICSEARCH_SCHEME=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".opensearch[0].scheme")
export ELASTICSEARCH_HOST=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".opensearch[0].host")
export ELASTICSEARCH_PORT=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".opensearch[0].port")

# Surface more common OpenSearch connection string variables for use in app.
export OPENSEARCH_USERNAME=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".opensearch[0].username")
export OPENSEARCH_PASSWORD=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".opensearch[0].password")

export ELASTICSEARCH_URL=$ELASTICSEARCH_SCHEME://$ELASTICSEARCH_HOST:$ELASTICSEARCH_PORT

# Set environment variables for Postgre
# DATABASE_URL="postgresql://api-platform:[email protected]:5432/api?serverVersion=13&charset=utf8"
export DB_SCHEME=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".database[0].service")
export DB_HOST=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".database[0].host")
export DB_PORT=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".database[0].port")
export DB_USERNAME=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".database[0].username")
export DB_PASSWORD=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".database[0].password")

export DATABASE_URL=$DB_SCHEME://$DB_USERNAME:$DB_PASSWORD@$DB_HOST:$DB_PORT/main?serverVersion=13

# Set environment variables for Redis
export REDIS_SERVER=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".redis[0].host")

export TRUSTED_HOSTS=^$PLATFORM_ENVIRONMENT-$PLATFORM_PROJECT.eu.platformsh.site$
export SERVER_NAME=$PLATFORM_ENVIRONMENT-$PLATFORM_PROJECT.eu.platformsh.site
6 changes: 6 additions & 0 deletions front/.environment
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#############################################################################################
#### Platform.sh environment file.
#### THIS FILE IS USED ONLY WHEN DEPLOYING GALLY ON PLATFORM.SH
#############################################################################################

export SERVER_NAME=api.$PLATFORM_ENVIRONMENT-$PLATFORM_PROJECT.eu.platformsh.site
68 changes: 68 additions & 0 deletions front/platformsh_handle_mounts.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#!/usr/bin/env bash

# This is a simple script for handling committed files and mounts on Platform.sh. Some application require write access to certain locations
# at runtime, and must be defined with mounts (https://docs.platform.sh/configuration/app/storage.html#mounts). One consequence of defining a
# location as a mount, however, is that when the location is mounted during the deploy hook, any files that may have been committed or modified
# during the build hook there will be overwritten by whatever exists in persistent storage for that environment.
#
# This script stages those files in a tmp directory (MOUNT_TMP) during the build hook, and then recopies them to their final location during the
# deploy hook to get around this. Call this script as the last line and first line in your build and deploy hooks, respectively.
#
# Limitations:
# - Does not yet handles nested mounts well (i.e. `/.next/cache`), so best to use its parent directory in your mount definition (`/.next`).

MOUNT_TMP=platformsh-mounts

# Hidden mounts require a preceding slash (i.e. `/.next`). This function just removes it to make the path work right.
# See: https://docs.platform.sh/configuration/app/storage.html#why-cant-i-mount-a-hidden-folder
clean_mount_defn(){
MOUNT=$1
if [[ ${MOUNT:0:1} == "/" ]] ; then echo "${MOUNT:1}"; else echo $MOUNT; fi
}

# During the build hook, this function moves files committed to the same directory as one defined in `.platform.app.yaml`
# as a mount to the tmp directory MOUNT_TMP.
stage_files() {
MOUNT=`clean_mount_defn $1`
# Create the tmp directory (MOUNT_TMP) on the first pass only. (/app/platformsh-mounts on Platform.sh)
if [ -d $PLATFORM_APP_DIR/$MOUNT_TMP ]; then
mkdir $PLATFORM_APP_DIR/$MOUNT_TMP
fi
# Duplicate the mount directory in MOUNT_TMP.
mkdir -p $PLATFORM_APP_DIR/$MOUNT_TMP/$MOUNT-tmp
# Move its files.
mv $PLATFORM_APP_DIR/$MOUNT/* $PLATFORM_APP_DIR/$MOUNT_TMP/$MOUNT-tmp
}

# During the deploy hook, this function moves files committed to the same directory as one defined in `.platform.app.yaml`
# away from the tmp directory MOUNT_TMP back into their original location, which is now a mount with write-access at
# deploy time.
restore_files() {
MOUNT=`clean_mount_defn $1`
if [ -d $PLATFORM_APP_DIR/$MOUNT_TMP/$MOUNT-tmp ]; then
# Clean up files in mount so it's up to date with what we're moving over.
rm -r $PLATFORM_APP_DIR/$MOUNT/*
# Restore the directory's files.
cp -r $PLATFORM_APP_DIR/$MOUNT_TMP/$MOUNT-tmp/* $PLATFORM_APP_DIR/$MOUNT
fi
}

# Main function
run() {
# Use PLATFORM_APPLICATION environment variable and jq to find all user-defined mounts.
MOUNTS=$(echo $PLATFORM_APPLICATION | base64 --decode | jq '.mounts | keys')
for mount in $(echo "${MOUNTS}" | jq -r '.[]'); do
_jq() {
# Build hook. The $PLATFORM_BRANCH environment variable is not available in build containers.
if [ -z "${PLATFORM_BRANCH}" ]; then
stage_files $mount
# Deploy hook.
else
restore_files $mount
fi
}
echo $(_jq)
done
}

run
Loading