Skip to content

Commit 1a2fa1a

Browse files
committed
add PullPreview
1 parent ac72e14 commit 1a2fa1a

File tree

6 files changed

+173
-0
lines changed

6 files changed

+173
-0
lines changed

.github/workflows/pullpreview.yml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
name: PullPreview
2+
3+
on:
4+
pull_request:
5+
types: [ labeled, unlabeled, synchronize, closed, reopened ]
6+
7+
jobs:
8+
deploy-staging-environment:
9+
permissions:
10+
contents: read # to fetch code (actions/checkout)
11+
deployments: write # to delete deployments
12+
pull-requests: write # to remove labels
13+
statuses: write # to create commit status
14+
15+
name: Deploy PullPreview staging environment
16+
# https://github.com/cybex-gmbh/github-workflows/blob/main/.github/workflows/pullpreview.yml
17+
uses: cybex-gmbh/github-workflows/.github/workflows/pullpreview.yml@main
18+
with:
19+
PULLPREVIEW_ADMINS: jheusinger, gael-connan-cybex, holyfabi, lupinitylabs, mszulik
20+
INSTANCE_TYPE: nano
21+
secrets:
22+
ENV_VARS: |
23+
APP_KEY="${{ secrets.PULLPREVIEW_APP_KEY }}"
24+
SEED_USER_NAME="${{ secrets.PULLPREVIEW_USER_NAME }}"
25+
SEED_USER_EMAIL="${{ secrets.PULLPREVIEW_USER_EMAIL }}"
26+
SEED_USER_PASSWORD="${{ secrets.PULLPREVIEW_USER_PASSWORD }}"
27+
PULLPREVIEW_BASIC_AUTH: ${{ secrets.PULLPREVIEW_BASIC_AUTH }}
28+
PULLPREVIEW_AWS_ACCESS_KEY_ID: ${{ secrets.PULLPREVIEW_AWS_ACCESS_KEY_ID }}
29+
PULLPREVIEW_AWS_SECRET_ACCESS_KEY: ${{ secrets.PULLPREVIEW_AWS_SECRET_ACCESS_KEY }}

compose.pullpreview.yml

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
services:
2+
app:
3+
container_name: ${COMPOSE_PROJECT_NAME}
4+
build:
5+
context: .
6+
dockerfile: ./docker/webdevops/Dockerfile
7+
networks:
8+
- traefik
9+
- internal
10+
depends_on:
11+
mysql:
12+
condition: service_healthy
13+
traefik:
14+
condition: service_started
15+
environment:
16+
PULLPREVIEW: true
17+
PULLPREVIEW_FIRST_RUN: ${PULLPREVIEW_FIRST_RUN}
18+
APP_URL: https://${PULLPREVIEW_PUBLIC_DNS}
19+
WORKERS_AMOUNT: ${WORKERS_AMOUNT:-0}
20+
volumes:
21+
- 'app-storage:/var/www/html/storage'
22+
- '.env:/var/www/html/.env'
23+
labels:
24+
- 'traefik.enable=true'
25+
- 'traefik.http.routers.${COMPOSE_PROJECT_NAME}.rule=Host(`${PULLPREVIEW_PUBLIC_DNS}`)'
26+
- 'traefik.http.routers.${COMPOSE_PROJECT_NAME}.tls=true'
27+
- 'traefik.http.routers.${COMPOSE_PROJECT_NAME}.tls.certresolver=production'
28+
mysql:
29+
image: 'mysql/mysql-server:8.0'
30+
container_name: laravel-multi-factor-mysql-1
31+
ports:
32+
- '3306:3306'
33+
environment:
34+
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
35+
MYSQL_ROOT_HOST: "%"
36+
MYSQL_DATABASE: '${DB_DATABASE}'
37+
MYSQL_USER: '${DB_USERNAME}'
38+
MYSQL_PASSWORD: '${DB_PASSWORD}'
39+
MYSQL_ALLOW_EMPTY_PASSWORD: 1
40+
volumes:
41+
- 'mysql:/var/lib/mysql'
42+
networks:
43+
- internal
44+
healthcheck:
45+
test: [ "CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}" ]
46+
retries: 3
47+
timeout: 5s
48+
traefik:
49+
image: traefik:mimolette
50+
container_name: ${COMPOSE_PROJECT_NAME}-traefik
51+
ports:
52+
- '80:80'
53+
- '443:443'
54+
environment:
55+
TRAEFIK_GLOBAL_SENDANONYMOUSUSAGE: false
56+
TRAEFIK_LOG: true
57+
TRAEFIK_LOG_FILEPATH: '/logs/traefik.log'
58+
TRAEFIK_LOG_LEVEL: DEBUG
59+
TRAEFIK_API: false
60+
TRAEFIK_CERTIFICATESRESOLVERS_PRODUCTION: true
61+
TRAEFIK_CERTIFICATESRESOLVERS_PRODUCTION_ACME_EMAIL: '[email protected]'
62+
TRAEFIK_CERTIFICATESRESOLVERS_PRODUCTION_ACME_CASERVER: 'https://acme-v02.api.letsencrypt.org/directory'
63+
TRAEFIK_CERTIFICATESRESOLVERS_PRODUCTION_ACME_STORAGE: '/letsencrypt/acme.json'
64+
TRAEFIK_CERTIFICATESRESOLVERS_PRODUCTION_ACME_HTTPCHALLENGE: true
65+
TRAEFIK_CERTIFICATESRESOLVERS_PRODUCTION_ACME_HTTPCHALLENGE_ENTRYPOINT: web
66+
TRAEFIK_ENTRYPOINTS_WEB: true
67+
TRAEFIK_ENTRYPOINTS_WEB_ADDRESS: ':80'
68+
TRAEFIK_ENTRYPOINTS_WEB_HTTP: true
69+
TRAEFIK_ENTRYPOINTS_WEB_HTTP_REDIRECTIONS_ENTRYPOINT_TO: websecure
70+
TRAEFIK_ENTRYPOINTS_WEB_HTTP_REDIRECTIONS_ENTRYPOINT_SCHEME: https
71+
TRAEFIK_ENTRYPOINTS_WEBSECURE: true
72+
TRAEFIK_ENTRYPOINTS_WEBSECURE_ADDRESS: ':443'
73+
TRAEFIK_PROVIDERS_DOCKER: true
74+
TRAEFIK_PROVIDERS_DOCKER_EXPOSEDBYDEFAULT: false
75+
TRAEFIK_PROVIDERS_DOCKER_NETWORK: traefik
76+
volumes:
77+
- /var/run/docker.sock:/var/run/docker.sock:ro
78+
- ./storage/letsencrypt:/letsencrypt
79+
- ./storage/logs:/logs
80+
- ./.htpasswd:/.htpasswd:ro
81+
networks:
82+
- traefik
83+
84+
networks:
85+
internal:
86+
internal: true
87+
traefik:
88+
name: traefik
89+
90+
volumes:
91+
app-storage:
92+
driver: local
93+
mysql:
94+
driver: local
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#!/usr/bin/env bash
2+
3+
php /var/www/html/artisan migrate --force

docker/webdevops/Dockerfile

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
FROM webdevops/php-nginx:8.4
2+
3+
WORKDIR /var/www/html/
4+
5+
ENV WEB_DOCUMENT_ROOT /var/www/html/public
6+
7+
# Timeout for the post update script in minutes.
8+
LABEL com.centurylinklabs.watchtower.lifecycle.post-update-timeout="1440"
9+
# Watchtower will run this script after restarting the updated container.
10+
LABEL com.centurylinklabs.watchtower.lifecycle.post-update="/var/www/html/docker/shared/watchtower/post-update.sh"
11+
12+
COPY . ../package
13+
COPY exampleApp/composer.json exampleApp/composer.lock ./
14+
RUN composer install --no-interaction --no-dev --no-scripts
15+
16+
COPY --chown=application:application exampleApp ./
17+
18+
RUN chmod 755 ./docker/webdevops/entryfile.sh ./storage
19+
20+
RUN apt update
21+
RUN apt install -y default-mysql-client
22+
23+
ENTRYPOINT ["/var/www/html/docker/webdevops/entryfile.sh"]

docker/webdevops/entryfile.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/usr/bin/env bash
2+
3+
if ${PULLPREVIEW:-false}; then
4+
php /var/www/html/artisan migrate --force
5+
su -c "php /var/www/html/artisan key:generate --force" application
6+
7+
if ${PULLPREVIEW_FIRST_RUN:-false}; then
8+
php /var/www/html/artisan db:seed --force
9+
fi
10+
fi
11+
12+
exec /entrypoint supervisord "$@"
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/usr/bin/env bash
2+
3+
if ${PULLPREVIEW:-false}; then
4+
php /var/www/html/artisan migrate --force
5+
su -c "php /var/www/html/artisan key:generate --force" application
6+
7+
if ${PULLPREVIEW_FIRST_RUN:-false}; then
8+
php /var/www/html/artisan db:seed --force
9+
fi
10+
fi
11+
12+
exec /entrypoint supervisord "$@"

0 commit comments

Comments
 (0)