diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
index d6493eaf2..2c79a2104 100644
--- a/.github/workflows/docker.yml
+++ b/.github/workflows/docker.yml
@@ -3,14 +3,14 @@ name: Docker Image
on:
push:
paths:
- - docker/dockerfile
- - docker/docker-compose*.yml
+ - docker/dockerfile
+ - docker/docker-compose*.yml
jobs:
build:
runs-on: ubuntu-22.04
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v2
- - name: Build a Docker image able to run yeswiki
- run: docker build -f docker/dockerfile -t yeswiki/yeswiki .
+ - name: Build a Docker image able to run yeswiki
+ run: export UID=$(id -u) && export GID=$(id -g) && docker build -f docker/dockerfile -t yeswiki/yeswiki .
diff --git a/.github/workflows/phpunit-php73.yml b/.github/workflows/phpunit-php73.yml
index 65d0bfea2..c8b795530 100644
--- a/.github/workflows/phpunit-php73.yml
+++ b/.github/workflows/phpunit-php73.yml
@@ -4,23 +4,23 @@ on:
workflow_dispatch:
inputs:
logLevel:
- description: 'Log level'
+ description: "Log level"
required: true
- default: 'warning'
+ default: "warning"
tags:
- description: 'Tags'
+ description: "Tags"
push:
- branches: [ doryphore, ectoplasme ]
+ branches: [doryphore, ectoplasme]
paths:
- - 'composer.lock'
- - '*.php'
- - '.github/workflows/*.yml'
+ - "composer.lock"
+ - "*.php"
+ - ".github/workflows/*.yml"
pull_request:
- branches: [ doryphore, doryphore-dev, ectoplasme ]
+ branches: [doryphore, doryphore-dev, ectoplasme]
paths:
- - 'composer.lock'
- - '*.php'
- - '.github/workflows/*.yml'
+ - "composer.lock"
+ - "*.php"
+ - ".github/workflows/*.yml"
env:
DB_NAME: yeswiki_test
@@ -30,85 +30,87 @@ jobs:
runs-on: ubuntu-22.04
steps:
- - uses: actions/checkout@v2
- - uses: shivammathur/setup-php@v2
- with:
- php-version: '7.3'
- extensions: mysqli
- tools: composer:v2
- env:
- fail-fast: true
-
- - name: Validate composer.json and composer.lock
- run: composer validate --strict
-
- - name: Install dependencies
- run: composer install --prefer-dist --no-progress
-
- - name: Configures and starts Apache
- run: |
- echo "
- ServerName localhost
- DocumentRoot ${{ github.workspace }}
-
-
- Options FollowSymLinks MultiViews ExecCGI
- AllowOverride All
- Require all granted
-
- " | sudo tee /etc/apache2/sites-enabled/000-default.conf
- sudo chown www-data:www-data -R ${{ github.workspace }}
- sudo apt update
- sudo apt install --no-install-recommends --assume-yes libapache2-mod-php7.3
- sudo a2enmod php7.3
- sudo /etc/init.d/apache2 start
-
- - name: Set up MySQL
- run: |
- sudo /etc/init.d/mysql start
- mysql -e 'CREATE DATABASE ${{ env.DB_NAME }};' -uroot -proot
-
- - name: Append current user in www-data group
- run: |
- sudo usermod -aG www-data $USER
-
- - name: Set cache folder writable
- run: sudo chmod -R 0777 ${{ github.workspace }}/cache
-
- - name: Set private folder for archive (and clean previous files)
- run: |
- sudo mkdir -p ${{ github.workspace }}/private/archives
- sudo chown www-data:www-data -R ${{ github.workspace }}/private/archives
- sudo chmod -R 0777 ${{ github.workspace }}/private/archives
- sudo ls ${{ github.workspace }}/private/archives/* && sudo rm ${{ github.workspace }}/private/archives/* || true
-
- - run: curl http://localhost
-
- - name: Setup Wiki
- run: |
- curl --silent --fail --show-error \
- -F "config[default_language]=fr" \
- -F "config[wakka_name]=MyTestWiki" \
- -F "config[root_page]=PagePrincipale" \
- -F "config[base_url]=http://localhost/?" \
- -F "config[mysql_host]=localhost" \
- -F "config[mysql_database]=${{ env.DB_NAME }}" \
- -F "config[mysql_user]=root" \
- -F "config[mysql_password]=root" \
- -F "config[table_prefix]=yeswiki_" \
- -F "config[allow_raw_html]=1" \
- -F "config[archive][privatePath]=${{ github.workspace }}/private/archives" \
- -F "admin_name=ActionTest" \
- -F "admin_password=ActionTestPassword" \
- -F "admin_password_conf=ActionTestPassword" \
- -F "admin_email=test@example.com" \
- -F "submit=Continue" \
- "http://localhost/?PagePrincipale&installAction=install"
-
- - name: Set wakka.config.php writable
- run: |
- sudo chown www-data:www-data ${{ github.workspace }}/wakka.config.php
- sudo chmod 0777 ${{ github.workspace }}/wakka.config.php
-
- - name: Run test suite
- run: composer test
+ - uses: actions/checkout@v2
+ - uses: shivammathur/setup-php@v2
+ with:
+ php-version: "7.3"
+ extensions: mysqli
+ tools: composer:v2
+ env:
+ fail-fast: true
+
+ - name: Validate composer.json and composer.lock
+ run: composer validate --strict
+
+ - name: Install dependencies
+ run: composer install --prefer-dist --no-progress
+
+ - name: Configures and starts Apache
+ run: |
+ echo "
+ ServerName localhost
+ DocumentRoot ${{ github.workspace }}
+
+
+ Options FollowSymLinks MultiViews ExecCGI
+ AllowOverride All
+ Require all granted
+
+ " | sudo tee /etc/apache2/sites-enabled/000-default.conf
+ sudo chown www-data:www-data -R ${{ github.workspace }}
+ sudo apt update
+ sudo apt install --no-install-recommends --assume-yes libapache2-mod-php7.3
+ sudo a2enmod php7.3
+ sudo /etc/init.d/apache2 start
+
+ - name: Set up MySQL
+ run: |
+ sudo /etc/init.d/mysql start
+ mysql -e 'CREATE DATABASE ${{ env.DB_NAME }};' -uroot -proot
+
+ - name: Append current user in www-data group
+ run: |
+ sudo usermod -aG www-data $USER
+
+ - name: Set cache folder writable
+ run: |
+ sudo mkdir -p ${{ github.workspace }}/cache
+ sudo chmod -R 0777 ${{ github.workspace }}/cache
+
+ - name: Set private folder for archive (and clean previous files)
+ run: |
+ sudo mkdir -p ${{ github.workspace }}/private/archives
+ sudo chown www-data:www-data -R ${{ github.workspace }}/private/archives
+ sudo chmod -R 0777 ${{ github.workspace }}/private/archives
+ sudo ls ${{ github.workspace }}/private/archives/* && sudo rm ${{ github.workspace }}/private/archives/* || true
+
+ - run: curl http://localhost
+
+ - name: Setup Wiki
+ run: |
+ curl --silent --fail --show-error \
+ -F "config[default_language]=fr" \
+ -F "config[wakka_name]=MyTestWiki" \
+ -F "config[root_page]=PagePrincipale" \
+ -F "config[base_url]=http://localhost/?" \
+ -F "config[mysql_host]=localhost" \
+ -F "config[mysql_database]=${{ env.DB_NAME }}" \
+ -F "config[mysql_user]=root" \
+ -F "config[mysql_password]=root" \
+ -F "config[table_prefix]=yeswiki_" \
+ -F "config[allow_raw_html]=1" \
+ -F "config[archive][privatePath]=${{ github.workspace }}/private/archives" \
+ -F "admin_name=ActionTest" \
+ -F "admin_password=ActionTestPassword" \
+ -F "admin_password_conf=ActionTestPassword" \
+ -F "admin_email=test@example.com" \
+ -F "submit=Continue" \
+ "http://localhost/?PagePrincipale&installAction=install"
+
+ - name: Set wakka.config.php writable
+ run: |
+ sudo chown www-data:www-data ${{ github.workspace }}/wakka.config.php
+ sudo chmod 0777 ${{ github.workspace }}/wakka.config.php
+
+ - name: Run test suite
+ run: composer test
diff --git a/INSTALL.md b/INSTALL.md
index 5d97fdebd..f2dbc469b 100755
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -23,15 +23,4 @@ Detailed instructions are available [in the official doc](https://yeswiki.net/?d
## Installation through Docker
-First you need to install docker and docker-compose:
-
-Run `docker-compose up` in the root folder to install and launch the containers
-
-Then go to .
-In the setup, you will need to provide following configuration for MySQL server:
-
-- **Host: db**
-- Login: root
-- Password: root
-
-You can see/modify the created tables by going to:
+Instructions can be found [here](./docker/README.md)
diff --git a/cache/README.md b/cache/README.md
deleted file mode 100644
index c53f60bce..000000000
--- a/cache/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# Cache directory
-
-The folder `cache` contains image thumbs and not permanent content.
-You can delete its content without risks (in theory).
-
diff --git a/docker/README.md b/docker/README.md
index 6e24b3f0d..7ecab1bc8 100644
--- a/docker/README.md
+++ b/docker/README.md
@@ -1,26 +1,90 @@
# Docker usage
-## Build image
+This directory contain 2 dockerfiles and 2 docker-compose. One of each for dev and the other for production.
-```bash
+## Dev
+
+The dev docker-compose contain the following images :
+
+ - yeswiki-app: This image have only a php-fpm process and mount the directory in the container to be able to develop locally
+ - yeswiki-db : a mysql (mariadb seems to not work properly currently) accessible from yeswiki with domaine name `yeswiki-db`
+ - yeswiki-web : a nginx reverse-proxy. configuration can be found on nginx.conf file. Accessible on `localhost:8085`
+ - myadmin : phpmyadmin accessible on `localhost:8086`
+ - mail : container to intercept email send by yeswiki. Webmail is accessible on `localhost:1080`.You have to set the following in `wakka.config.php`
+ ```
+'contact_mail_func' => 'smtp',
+'contact_smtp_host' => 'mail',
+'contact_smtp_port' => '1025',
+ ```
+### How-To
+
+> [!]info
+> all commands have to be launched from docker directory
+
+To be able to develop locally without messing up with users and permissions, the dev dockerfile uses the same user and group as computer user.
+You need to create a file called `.env` within the `docker` directory with the following content :
+```
+UID="YOUR_USER_ID" # can be found with id -u
+GID="YOUR_USER_GID" # can be found with id -g
+```
+
+Then you can build the container with the following command :
+```
docker compose build
```
-## Launch image
+Once done, you can start containers :
+```
+docker compose up
+# or docker compose up -d if you want to detach from terminal
+```
+
+It should take some time for the first launch, it will perform `compose install` and `yarn install`.
+Then yeswiki will be accessible at [localhost:8085](http://localhost:8085),
+ phpmyadmin at [localohost:8086](http://localhost:8086) and mailcatcher at [localhost:1080](http://localhost:1080).
+
+Once on the install page, use the following values :
+
+- **Mysql server host** : yeswiki-db
+- **MYSQL database name** : yeswiki (can be found in yeswiki.secret)
+- **MYSQL username** : yeswiki (can be found in yeswiki.secret)
+- **MYSQL password** : password (can be found in yeswiki.secret)
-- `docker compose up -d`
-- yeswiki should be accessible at `localhost:8085`
+> [!]tips
+> if you have a previous developpement installation you may need to change value accordingly in the wakka.config.php
-## Dev version
+## reinitialize yeswiki repo from dev
-- allow www-data to right local directory
- This version should map the local repository to your docker container.
-- `docker compose up -f docker-compose-dev.yml`
+docker create and populates the following folders files :
-## Remove all docker images and volumes
+- vendor (for php dependencies)
+- node_modules (for yarn dependencies)
+- wakka.config.php
+- cache
+- tools/bazar/vendor/
-```bash
-docker compose stop
-docker compose rm
-docker volume rm yeswiki yeswiki-db
+It should be enough to remove the `wakka.config.php` file
+
+## Remove database
+
+- remove containers (stopping container doesn't remove them)
+```
+docker compose down
+```
+- remove docker volume (containing database files)
+```
+docker volume rm yeswiki-db
+```
+
+## updating php or yarn dependency
+
+You can simply restart container with the following command :
+```
+docker compose restart
+```
+
+If you want to update php or yarn dependency without restarting everything, you can do the following commands.
+```
+docker compose exec yeswiki-app composer install
+docker compose exec yeswiki-app yarn install
```
diff --git a/docker/docker-compose-dev.yml b/docker/docker-compose-prod.yml
similarity index 96%
rename from docker/docker-compose-dev.yml
rename to docker/docker-compose-prod.yml
index 6aa8c46a7..f0a4cfe7c 100644
--- a/docker/docker-compose-dev.yml
+++ b/docker/docker-compose-prod.yml
@@ -1,8 +1,8 @@
-version: "3.7"
-
volumes:
yeswiki-db:
name: yeswiki-db
+ yeswiki:
+ name: yeswiki
networks:
yeswiki:
diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml
index f77fbdca4..b96ec4f49 100644
--- a/docker/docker-compose.yml
+++ b/docker/docker-compose.yml
@@ -1,47 +1,68 @@
-version: "3.7"
-
volumes:
yeswiki-db:
name: yeswiki-db
- yeswiki:
- name: yeswiki
networks:
yeswiki:
services:
- yeswiki-app:
- build:
- context: ..
- dockerfile: ./docker/dockerfile
- container_name: yeswiki
- volumes:
- - yeswiki:/var/www/html
- depends_on:
- - yeswiki-db
- env_file: ./yeswiki.secrets
- networks:
- - yeswiki
+ yeswiki-app:
+ build:
+ context: ..
+ dockerfile: ./docker/dockerfile
+ args:
+ UID: "${UID:-1000}"
+ GID: "${UIS:-1000}"
+ container_name: yeswiki
+ volumes:
+ - ..:/var/www/html
+ depends_on:
+ - yeswiki-db
+ env_file: ./yeswiki.secrets
+ user: "${UID}:${UID}"
+ command: /var/www/html/docker/entrypoint.sh
+ networks:
+ - yeswiki
- yeswiki-db:
- image: mysql:latest
- container_name: yeswiki-db
- volumes:
- - yeswiki-db:/var/lib/mysql
- env_file: ./yeswiki.secrets
- networks:
- - yeswiki
- restart: unless-stopped
+ yeswiki-db:
+ image: mysql:latest
+ container_name: yeswiki-db
+ volumes:
+ - yeswiki-db:/var/lib/mysql
+ env_file: ./yeswiki.secrets
+ networks:
+ - yeswiki
+
+ yeswiki-web:
+ image: nginx:alpine
+ container_name: yeswiki-web
+ volumes:
+ - ..:/var/www/html:ro
+ - ./nginx.conf:/etc/nginx/nginx.conf:ro
+ ports:
+ - "8085:80"
+ depends_on:
+ - yeswiki-app
+ - myadmin
+ networks:
+ - yeswiki
+
+ myadmin:
+ image: phpmyadmin:latest
+ container_name: myadmin
+ env_file: ./yeswiki.secrets
+ environment:
+ PMA_HOST: yeswiki-db
+ PMA_PORT: 3306
+ ports:
+ - "8086:80"
+ networks:
+ - yeswiki
- yeswiki-web:
- image: nginx:alpine
- container_name: yeswiki-web
- volumes:
- - yeswiki:/var/www/html:ro
- - ./nginx.conf:/etc/nginx/nginx.conf:ro
- ports:
- - "8085:80"
- depends_on:
- - yeswiki-app
- networks:
- - yeswiki
+ mail:
+ image: maildev/maildev
+ container_name: mail
+ ports:
+ - "1080:1080"
+ networks:
+ - yeswiki
diff --git a/docker/dockerfile b/docker/dockerfile
index d264e6a3b..adcece541 100644
--- a/docker/dockerfile
+++ b/docker/dockerfile
@@ -1,34 +1,28 @@
-# download composer dependencies
-FROM composer:2.1.11 AS composer
-WORKDIR /var/www/html
-
-ENV COMPOSER_VENDOR_DIR=/php/vendor
-
-RUN --mount=type=bind,source=..,target=.,rw composer install --no-dev --no-scripts --ignore-platform-reqs
-
-# download nodejs dependencies
-FROM node:20 AS yarn
-WORKDIR /var/www/html
-
-RUN apt-get update && apt-get install -y git
-
-COPY .. .
+# Yeswiki dev image
+FROM php:8.2-fpm
-RUN yarn install
+RUN apt-get update && apt-get install -y libpng-dev libzlcore-dev libzip-dev git unzip && \
+ rm -rf /var/lib/apt/lists/*
+RUN docker-php-ext-install mysqli gd zip
-# Yeswiki image
-FROM php:8.2-fpm
+COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
-RUN apt-get update && apt-get install -y libpng-dev libzlcore-dev libzip-dev && \
- rm -rf /var/lib/apt/lists/*
+ARG UID
-RUN docker-php-ext-install mysqli gd zip
+ARG GID
-COPY . /var/www/html/
+RUN groupadd -g "${GID}" yeswiki \
+ && useradd --no-log-init --create-home -u "${UID}" -g "${GID}" -G www-data yeswiki
-COPY --from=composer /php/vendor /var/www/html/vendor/
-COPY --from=yarn /var/www/html/node_modules/ /var/www/html/node_modules/
+USER yeswiki
-RUN chown -R www-data:www-data /var/www/html/
+RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash && \
+ export NVM_DIR="$HOME/.nvm" && \
+ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \
+ echo 'export NVM_DIR="/home/yeswiki/.nvm"' >> $HOME/.bashrc && \
+ echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> $HOME/.bashrc && \
+ nvm install 20 && \
+ nvm alias default 20 && \
+ corepack enable
diff --git a/docker/dockerfile-prod b/docker/dockerfile-prod
new file mode 100644
index 000000000..d264e6a3b
--- /dev/null
+++ b/docker/dockerfile-prod
@@ -0,0 +1,34 @@
+
+# download composer dependencies
+FROM composer:2.1.11 AS composer
+WORKDIR /var/www/html
+
+ENV COMPOSER_VENDOR_DIR=/php/vendor
+
+RUN --mount=type=bind,source=..,target=.,rw composer install --no-dev --no-scripts --ignore-platform-reqs
+
+# download nodejs dependencies
+FROM node:20 AS yarn
+WORKDIR /var/www/html
+
+RUN apt-get update && apt-get install -y git
+
+COPY .. .
+
+RUN yarn install
+
+
+# Yeswiki image
+FROM php:8.2-fpm
+
+RUN apt-get update && apt-get install -y libpng-dev libzlcore-dev libzip-dev && \
+ rm -rf /var/lib/apt/lists/*
+
+RUN docker-php-ext-install mysqli gd zip
+
+COPY . /var/www/html/
+
+COPY --from=composer /php/vendor /var/www/html/vendor/
+COPY --from=yarn /var/www/html/node_modules/ /var/www/html/node_modules/
+
+RUN chown -R www-data:www-data /var/www/html/
diff --git a/docker/dockerfile_test.yml b/docker/dockerfile_test.yml
new file mode 100644
index 000000000..c80a08a7e
--- /dev/null
+++ b/docker/dockerfile_test.yml
@@ -0,0 +1,27 @@
+# download composer dependencies
+FROM composer:2.1.11 AS composer
+WORKDIR /var/www/html
+
+COPY .. .
+
+RUN composer install --no-dev --no-scripts --ignore-platform-reqs
+
+# download nodejs dependencies
+FROM node:20 AS yarn
+WORKDIR /var/www/html
+
+RUN apt-get update && apt-get install -y git
+
+COPY --from=composer /var/www/html /var/www/html
+
+RUN yarn install
+
+
+# Yeswiki image
+FROM php:8.2-fpm
+
+RUN apt-get update && apt-get install -y libpng-dev libzlcore-dev libzip-dev && \
+ rm -rf /var/lib/apt/lists/*
+
+RUN docker-php-ext-install mysqli gd zip
+COPY --from=yarn --chown=www-data:www-data /var/www/html /var/www/html
diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh
new file mode 100755
index 000000000..bcbedc333
--- /dev/null
+++ b/docker/entrypoint.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+cd /var/www/html
+composer install
+source /home/yeswiki/.nvm/nvm.sh
+nvm use 20
+corepack enable
+yarn install
+php-fpm
diff --git a/docker/nginx.conf b/docker/nginx.conf
index 9e07f36a6..34743edbf 100644
--- a/docker/nginx.conf
+++ b/docker/nginx.conf
@@ -28,13 +28,11 @@ http {
set_real_ip_from 192.168.0.0/16;
real_ip_header X-Real-IP;
- #gzip on;
upstream php-handler {
server yeswiki-app:9000;
}
-
server {
listen 80;
@@ -112,4 +110,6 @@ http {
access_log off;
}
}
+
}
+
diff --git a/docs/fr/dev.md b/docs/fr/dev.md
index b149921f6..ae9068b4a 100644
--- a/docs/fr/dev.md
+++ b/docs/fr/dev.md
@@ -5,12 +5,19 @@
!> Des bases de programmation vous seront nécessaire pour suivre ces étapes
## Installer yeswiki dans un environnement de développement local
+
### Sur des machines linux base Debian
+
### Par docker
-## Utilisation du dossier `custom`
+Les informations détaillées sont disponibles dans le [README.md du dossier docker](../../docker/README.md).
-[voir en anglais](../en/dev.md)
+En résumé depuis la racine du code source de YesWiki :
+`cd docker && UID=$(id -u) && GID=$(id -g) && docker compose build && docker compose up`
+
+Si tout s'est bien passé vous devriez pouvoir accèder a la post-installation de YesWiki sur
+
+## Utilisation du dossier `custom`