Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
2376616
✨ Update Environment Configuration and Logger Setup
BrightkyEfoo Apr 27, 2025
99e96aa
✨ Update Deployment Workflow to Include Environment Variable Setup
BrightkyEfoo Apr 27, 2025
8b22083
✨ Update Docker and Deployment Configuration
BrightkyEfoo Apr 27, 2025
a92b70e
✨ Update Docker Configuration and Remove Unused Files
BrightkyEfoo Apr 29, 2025
b5a59c8
🗑️ Remove Environment File
BrightkyEfoo Apr 29, 2025
9296838
🗑️ Remove Deployment Workflow for Development Environment
BrightkyEfoo Apr 29, 2025
f53b4f8
🗑️ Remove Deployment Workflow for Development Environment
BrightkyEfoo Apr 29, 2025
0d2c413
✨ Update Deployment Workflow to Include Branch Triggers
BrightkyEfoo Apr 29, 2025
952c2cb
✨ Update Deployment Workflow to Include Environment Specification
BrightkyEfoo Apr 29, 2025
b40a26e
✨ Update Deployment Workflow to Change Port Configuration
BrightkyEfoo Apr 29, 2025
8918754
✨ Update Deployment Workflow to Change MySQL Port Configuration
BrightkyEfoo Apr 29, 2025
c8ca2eb
✨ Update Docker Compose Configuration for Environment Variables
BrightkyEfoo Apr 29, 2025
16109c2
✨ Update Docker Compose and Deployment Workflow for Environment Varia…
BrightkyEfoo Apr 29, 2025
68ef796
✨ Update MySQL Port Configuration in Docker Compose
BrightkyEfoo Apr 29, 2025
9b74f8c
✨ Refactor Docker Configuration and Update Memory Bank
BrightkyEfoo Apr 29, 2025
d05af60
✨ Update Docker Configuration and .gitignore
BrightkyEfoo Apr 29, 2025
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
8 changes: 8 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
build
node_modules
.env
.git
.gitignore
.dockerignore
.github
.vscode
12 changes: 9 additions & 3 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,12 @@ DB_PORT=3306
DB_USER=root
DB_PASSWORD=root
DB_DATABASE=app
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
GITHUB_CALLBACK_URL=
GITHUB_CLIENT_ID=e
GITHUB_CLIENT_SECRET=e
GITHUB_CALLBACK_URL=e
DB_CONNECTION=mysqle
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=
MYSQL_DB_NAME=javascript_cm
109 changes: 109 additions & 0 deletions .github/workflows/deploy.dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
name: Déploiement sur VPS (dev)



on:
push:
branches: [main, develop]
pull_request:
branches: [main, develop]
workflow_dispatch:

env:
APP_NAME: ${{ github.event.repository.name }}.dev
APP_PATH: /home/apps/${{ github.event.repository.name }}.dev
DATABASE_NAME: javascript_cm

jobs:
deploy:
runs-on: ubuntu-latest
environment: dev
steps:
- name: Vérifier le code
uses: actions/checkout@v4

- name: Créer le dossier de l'application sur le VPS
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.VPS_USERNAME }}
key: ${{ secrets.VPS_SSH_KEY }}
port: ${{ secrets.VPS_PORT }}
script: |
mkdir -p ${{ env.APP_PATH }}
cd ${{ env.APP_PATH }}
if [ -d "app" ]; then
rm -rf app
fi
mkdir -p app

- name: Ecrire le fichier .env
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.VPS_USERNAME }}
key: ${{ secrets.VPS_SSH_KEY }}
port: ${{ secrets.VPS_PORT }}
script: |
cd ${{ env.APP_PATH }}/app
echo "NODE_ENV=production" > .env
echo "APP_NAME=${{ env.APP_NAME }}" >> .env
echo "APP_PATH=${{ env.APP_PATH }}" >> .env
echo "TZ=UTC" >> .env
echo "PORT=3333" >> .env
echo "HOST=0.0.0.0" >> .env
echo "LOG_LEVEL=INFO" >> .env
echo "APP_KEY=onsklvmesdlvmnrsdmvlrks" >> .env
echo "SESSION_DRIVER=cookie" >> .env
echo "DB_CONNECTION=mysql" >> .env
echo "DB_HOST=mysql" >> .env
echo "DB_PORT=3307" >> .env
echo "DB_USER=root" >> .env
echo "DB_PASSWORD=root" >> .env
echo "DB_DATABASE=${{ env.DATABASE_NAME }}" >> .env
echo "MYSQL_HOST=mysql" >> .env
echo "MYSQL_PORT=3307" >> .env
echo "MYSQL_USER=root" >> .env
echo "MYSQL_PASSWORD=root" >> .env
echo "MYSQL_DB_NAME=${{ env.DATABASE_NAME }}" >> .env
echo "MYSQL_DATABASE=${{ env.DATABASE_NAME }}" >> .env
echo "GITHUB_CLIENT_ID=github_client_id" >> .env
echo "GITHUB_CLIENT_SECRET=github_client_secret" >> .env
echo "GITHUB_CALLBACK_URL=http://0.0.0.0:3333/auth/github/callback" >> .env

- name: Copier les fichiers de l'application
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.VPS_USERNAME }}
key: ${{ secrets.VPS_SSH_KEY }}
port: ${{ secrets.VPS_PORT }}
source: "."
target: "${{ env.APP_PATH }}/app"
strip_components: 0

- name: Mettre Ă  jour le docker-compose avec le nom de l'application
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.VPS_USERNAME }}
key: ${{ secrets.VPS_SSH_KEY }}
port: ${{ secrets.VPS_PORT }}
script: |
cd "${{ env.APP_PATH }}/app"
sed -i "1s/^/name: ${{ env.APP_NAME }}\n/" compose.yaml

- name: Construire et démarrer les conteneurs Docker
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.VPS_USERNAME }}
key: ${{ secrets.VPS_SSH_KEY }}
port: ${{ secrets.VPS_PORT }}
script: |
cd "${{ env.APP_PATH }}/app"
docker compose -f compose.yaml down || true
docker compose -f compose.yaml build --no-cache
docker compose -f compose.yaml up -d

docker system prune -f
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,4 @@ yarn-error.log

# Platform specific
.DS_Store
memory-bank/
8 changes: 8 additions & 0 deletions adonisrc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,14 @@ export default defineConfig({
pattern: 'resources/views/**/*.edge',
reloadServer: false,
},
{
pattern: 'resources/images/**/*',
reloadServer: false,
},
{
pattern: 'resources/**/*.{png,jpg,jpeg,gif,svg,ico}',
reloadServer: false,
},
{
pattern: 'public/**',
reloadServer: false,
Expand Down
71 changes: 71 additions & 0 deletions compose.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
services:
app:
build:
context: .
dockerfile: docker/node/Dockerfile
container_name: jscm-app
env_file:
- .env
ports:
- "${PORT}:3333"
environment:
- NODE_ENV=production
- DB_HOST=mysql
- DB_PORT=3306
- DB_DATABASE=${DB_DATABASE}
- DB_USERNAME=${DB_USERNAME}
- DB_PASSWORD=${DB_PASSWORD}
- PORT=${PORT}
- HOST=${HOST}
- LOG_LEVEL=${LOG_LEVEL}
- APP_KEY=${APP_KEY}
- SESSION_DRIVER=${SESSION_DRIVER}
- DB_CONNECTION=${DB_CONNECTION}
- GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID}
- GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET}
- GITHUB_CALLBACK_URL=${GITHUB_CALLBACK_URL}
- TZ=${TZ}
depends_on:
- mysql

mysql:
build:
context: .
dockerfile: docker/mysql/Dockerfile
container_name: jscm-mysql
env_file:
- .env
ports:
- "${MYSQL_PORT}:3306"
environment:
- MYSQL_ROOT_PASSWORD=${DB_PASSWORD}
- MYSQL_DATABASE=${DB_DATABASE}
- MYSQL_USER=${DB_USERNAME}
- MYSQL_PASSWORD=${DB_PASSWORD}
volumes:
- mysql_data:/var/lib/mysql

migrations:
build:
context: .
dockerfile: docker/node/Dockerfile
target: deps
container_name: jscm-migrations
env_file:
- .env
volumes:
- .:/app
- /app/node_modules
environment:
- NODE_ENV=development
- DB_HOST=mysql
- DB_PORT=3306
- DB_DATABASE=${DB_DATABASE}
- DB_USERNAME=${DB_USERNAME}
- DB_PASSWORD=${DB_PASSWORD}
depends_on:
- mysql
command: sh -c "node ace migration:run"

volumes:
mysql_data:
9 changes: 1 addition & 8 deletions config/logger.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import env from '#start/env'
import app from '@adonisjs/core/services/app'
import { defineConfig, targets } from '@adonisjs/core/logger'
import { defineConfig } from '@adonisjs/core/logger'

const loggerConfig = defineConfig({
default: 'app',
Expand All @@ -14,12 +13,6 @@ const loggerConfig = defineConfig({
enabled: true,
name: env.get('APP_NAME'),
level: env.get('LOG_LEVEL'),
transport: {
targets: targets()
.pushIf(!app.inProduction, targets.pretty())
.pushIf(app.inProduction, targets.file({ destination: 1 }))
.toArray(),
},
},
},
})
Expand Down
1 change: 1 addition & 0 deletions database/init.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
CREATE TABLE IF NOT EXISTS DATABASE javascript_cm;
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export default class extends BaseSchema {
table.text('excerpt').notNullable()
table.text('content').notNullable()
table.integer('user_id').unsigned().references('id').inTable('users').onDelete('CASCADE')
table.integer('author_id').unsigned().references('id').inTable('users').onDelete('CASCADE')
table.boolean('is_published').defaultTo(false)
table.timestamp('published_at').nullable()
table.timestamps(true, true)
Expand Down
17 changes: 0 additions & 17 deletions database/migrations/1736839410999_add_author_id_to_articles.ts

This file was deleted.

16 changes: 16 additions & 0 deletions docker/mysql/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
FROM mysql:8.0

# Créer le répertoire de travail
WORKDIR /app

# Copier le script d'initialisation
COPY docker/mysql/init.sh /docker-entrypoint-initdb.d/

# Donner les permissions d'exécution au script
RUN chmod +x /docker-entrypoint-initdb.d/init.sh

# Exposer le port MySQL
EXPOSE 3306

# Commande par défaut
CMD ["mysqld"]
12 changes: 12 additions & 0 deletions docker/mysql/init.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/bin/bash

# Attendre que MySQL soit prĂŞt
until mysql -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" -e "SELECT 1"; do
echo "Waiting for MySQL to be ready..."
sleep 2
done

# Créer la base de données si elle n'existe pas
mysql -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" -e "CREATE DATABASE IF NOT EXISTS $MYSQL_DATABASE;"

echo "Database initialization completed!"
31 changes: 31 additions & 0 deletions docker/node/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
FROM node:20.12.2-alpine3.18 AS base

# All deps stage
FROM base AS deps
WORKDIR /app
ADD package.json package-lock.json ./
RUN npm ci

# Production only deps stage
FROM base AS production-deps
WORKDIR /app
ADD package.json package-lock.json ./
RUN npm ci --omit=dev

# Build stage
FROM base AS build
WORKDIR /app
COPY --from=deps /app/node_modules /app/node_modules
ADD . .
RUN node ace build

# Production stage
FROM base
ENV NODE_ENV=production
WORKDIR /app
COPY --from=production-deps /app/node_modules /app/node_modules
COPY --from=build /app/build/ /app
COPY --from=build /app/resources/images /app/public/resources/images

EXPOSE 3333
CMD ["node", "bin/server.js"]