# Caravane des ruralité Docker Environement (drupal api + vuejs client)
Caravane des ruralités powered by druapl 10 for the api and vuejs for the app (client) in docker environement (nginx, php:8.3-fpm+drush, mysql, phpmyadmin, redis, npm)
## Install docker
```
sudo pacman -S docker docker-compose docker-machine
```
start the docker service
```
sudo systemctl start docker
```
For all the following, DO NOT run docker or make commande as root or with sudo, use this setup: add your user to the docker user group, re-login, and restart docker.service.
https://wiki.archlinux.org/index.php/Docker#Installation
## Clone this repos
this will clone this repos (main docker environement), the drupal 9 based api source code (without sites/default folder nor mysq ddb) and the vuejs app source code.
```
git clone --recursive -o figli https://figureslibres.io/gitea/bachir/docker-caravane.git
```
submodules :
- https://figureslibres.io/gitea/bachir/drupal-caravane
- https://figureslibres.io/gitea/bachir/nuxt-caravane
## touch log file
```
touch log/nginx/error.log
touch log/nginx/caravane/error.log
```
### setup /sites/default/settings.php
```cp -r ressources/api/* api/src/web/sites/default/```
### get the sites/default/salt.txt file (if you don't have it, you don't)
### get the sites/default/files folder
rsync the files from you know where (if you don't, you don't) to api/src/web/sites/default/files/
## Mysql
Copy your-sql-dump.sql into ./ressources/caravane.sql
It will be automaticly imported into the mysql container db (only) on the first ```make up```
## Hosts and reverse proxy
add to your /etc/hosts :
```
127.0.0.1 dev.caravane.fr
127.0.0.1 dev.phpmyadmin.caravane.fr
```
configure your vhosts to add a reverse proxy that will redirect the dev.caravane.fr to our container
Apache
```apache
ServerName dev.caravane.fr
ProxyPass / http://127.0.0.1:8990/
ProxyPassReverse / http://127.0.0.1:8990/
ProxyRequests Off
ProxyPreserveHost On
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
```
```apache
ServerName dev.phpmyadmin.caravane.fr
ProxyPass / http://127.0.0.1:8991/
ProxyPassReverse / http://127.0.0.1:8991/
ProxyRequests Off
ProxyPreserveHost On
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
```
nginx
```nginx
server {
listen 80;
server_name dev.caravane.fr;
access_log off;
error_log /var/log/nginx/caravane/error.log error;
client_max_body_size 100m;
location / {
proxy_pass http://127.0.0.1:8990;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
}
}
server {
listen 80;
server_name dev.phpmyadmin.caravane.com;
location / {
proxy_pass http://127.0.0.1:8991;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
}
}
```
## Docker
### docker-compose pull
pull the latest image of services
```
make pull
```
### build
only before the first run (may take some time)
```
make build
```
/!\ DO NOT use ```docker-compose build```, it will faile
### run
then each time you want to launch the app
```
make up
```
Be aware that a first up, since the db is empty, it will be populated with your file db.sql. It may take some time depending of your db size.
## Drupal Composer install
Only at first up, finish to install drupal composer dependencies
```
make exec_api
composer install
```
## Visualize
You can now visit :
the app http://dev.caravane.fr
or the api http://dev.caravane.fr/api
on your browser
## Coding
### drush
you can access to drush by loging into the php container
```
make exec_api
```
once inside the php container in /var/www/html you can use drush as usual
## Updating code
```
git pull figli master
# then update all submodules
git submodule update --recursive --checkout
# or only one
git submodule update --checkout app/
# or
git submodule update --checkout api/
make api_maj_config
```
## Updating manualy mysql db
copy your db backup into the mysql container
```sh
sudo docker cp your-db-file.sql caravane_mysql_1:/root/
```
log into mysql container
```sh
make exec_mysql
```
once inside the mysql container you can use mysql command to drop then create and load the db with your file
```
mysql -uroot -pcaravane
> drop database caravane;
> create database caravane;
> exit;
mysql -uroot -pcaravane caravane < your-db-file.sql
```
## Makefile
DO NOT use directly docker or docker-compose to run this instance
use make instead like ```make up```
```makefile
pull:
docker-compose pull
build:
docker-compose build --build-arg USER_UID=$(USER_UID) --build-arg USER_UNAME=$(USER_UNAME) --build-arg USER_GID=$(USER_GID) --build-arg USER_GNAME=$(USER_GNAME)
buildnc:
docker-compose build --no-cache --build-arg USER_UID=$(USER_UID) --build-arg USER_UNAME=$(USER_UNAME) --build-arg USER_GID=$(USER_GID) --build-arg USER_GNAME=$(USER_GNAME)
downbuildup: down build up
up:
docker-compose up -d
ps:
docker-compose ps
logs:
docker-compose logs -f
api_maj_config: api_crd api_composer_install api_updb api_cim api_cr
api_crd:
docker exec caravane_api_1 /bin/bash -c "drush cache-clear drush"
api_cr:
docker exec caravane_api_1 /bin/bash -c "drush cr"
api_updb:
docker exec caravane_api_1 /bin/bash -c "drush updb -y"
api_cim:
docker exec caravane_api_1 /bin/bash -c "drush config-import -y"
api_composer_install:
docker exec caravane_api_1 /bin/bash -c "composer install --no-dev"
down:
docker-compose down
exec_api:
docker exec -it caravane_api_1 bash
exec_app:
docker exec -it caravane_app_1 sh
restart_app:
docker-compose restart app
exec_mysql:
docker exec -it caravane_mysql_1 bash
```