Une place pour une véritable innovation. Partagez vos propres utilitaires créés avec la communauté Manjaro.
Questions et discussions sur la programmation et le codage.
Répondre

LAMP avec docker

#1Messageil y a 4 ans

:bjr:

Manjaro n'est pas adapté pour faire du développement web coté serveur
Une méthode "simple" est d'utiliser docker : nous pouvons choisir notre version de php ou de mysql ce qui permet une compatibilité beaucoup plus grande avec notre hébergeur.

Je vous propose un petit script a adapter pour créer son petit serveur lamp rapidement
Il va utiliser docker-compose, ce qui permet une grande souplesse d'utilisation

dockerweb.sh (ps: ne pas le lancer avec sudo !)

#!/usr/bin/bash

DIR="$HOME/dockers/"
project="${1:-project}"
#phpver="${2:-'7.2'}"

[ -e "${DIR}/${project}" ] || {
    mkdir -v -p "${DIR}/${project}/www"
    mkdir -v -p "${DIR}/${project}/mysql"
    [ -e "${DIR}/${project}/www/index.php" ] || echo -e "<?php\n  phpinfo();" > "${DIR}/${project}/www/index.php"
}
cd "${DIR}/${project}"
pwd

pkg=($(pacman -Qq docker-compose 2>/dev/null));
if [[  "${pkg[0]}" != "docker-compose" ]]; then
    echo "installation de docker compose..."
    sudo pacman -Si docker-compose
    sudo usermod -aG docker $USER
fi

echo "démarrage de docker..."
sudo systemctl start docker

gen_config() # file_name
{
echo "Génération du fichier de configuration $1"
cat << "EOF" > "$1"
version: '3.7'

services:
    web:
        #container_name: webserver
        image: webdevops/php-apache:7.2
        #https://dockerfile.readthedocs.io/en/latest/content/DockerImages/dockerfiles/php-apache.html#
        ports:
            - "80:80"
        volumes:
            - ./www:/app
        links:
            - sql9:sql9
        domainname: phpbb.local
        environment:
            PHP_MEMORY_LIMIT: 640M
            PHP_DISPLAY_ERRORS: 1
            PHP_MAX_EXECUTION_TIME: 600
            APPLICATION_GID: 1000
        extra_hosts:
            - "web.local:127.0.0.1"

    sql9:
        image: mysql:5.5
        volumes:
            - ./mysql:/var/lib/mysql
        ports:
            - "3306:3306"
        environment:
            MYSQL_ROOT_PASSWORD: root
            MYSQL_DATABASE: root
            MYSQL_USER: demo
            MYSQL_PASSWORD: demo

    myadmin:
        image: phpmyadmin/phpmyadmin
        ports:
            - "8080:80"
        links:
            - sql9:sql9
        environment:
            PMA_HOST: sql9
            PMA_USER: root
            PMA_PASSWORD: root
EOF
}

if [ ! -e "${DIR}/${project}/www/docker-compose.yml" ]; then
    gen_config "docker-compose.yml"
fi

echo "phpmyadmin à : http://localhost:8080/  (login:root pass: root)"
echo "site web à http://localhost/"

docker-compose up
Que va faire ce script ?
Si un projet n'existe pas encore il va le créer dans notre HOME avec cette arborescence

~/dockers
└── project1
    ├── docker-compose.yml
    ├── mysql
    └── www
        └── index.php
Ensuite il va lancer LAMP avec une commande "docker-compose up" - la première fois, il va créer l'image, cela devrait prendre quelques minutes. Mais les prochaines fois, le serveur est lancé en quelques secondes.
Donc ce script n'a rien de magique ou d'obligatoire , il crée une arborescence et uniquement un fichier de configuration ; opération tout à fait faisable manuellement.

----

L'accés à phpmyadmin est : http://localhost:8080/
L'accès au site web est http://localhost

----

Avec docker, pour lancer à nouveau le serveur, on se déplace dans le répertoire du projet (cd ~/dockers/projet1/) et on lance la commande docker-compose up

Toute la "magie" est dans le fichier docker-compose.yml, il est possible de le modifier pour adapter sa configuration

LAMP avec docker

#2Messageil y a 4 ans

Bon, j'ai quand même une erreur que je n'arrive pas è résoudre.

éDIT : j'ai installé docker et docker-compose. Bien que j'ai lu dans le script que celui-ci avait les commandes pour les installer, il m'avait renvoyé une première erreur comme quoi docker n'était pas installé ni lancé.
Je l'ai donc installé puisj'ai lancé le service. Le script m'a renvoyé une seconde erreur, me disant que docker avait besoin de docker-compose, je l'ai donc installé aussi.
Puis, j'ai obtenu cette dernière erreur, mais là, je suis bloqué...

Apache2 était démarré, je l'ai donc stoppé et malgré cela, j'ai ce retour du script :

[bruno@bruno Scripts]$ ./dockerweb.sh 
/home/bruno/dockers/project
démarrage de docker...
Génération du fichier de configuration docker-compose.yml
phpmyadmin à : http://localhost:8080/  (login:root pass: root)
site web à http://localhost/
ERROR: Couldn't connect to Docker daemon at http+docker://localhost - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.
Une idée ?

LAMP avec docker

#3Messageil y a 4 ans

1) il faut installer uniquement le paquet docker-compose, le paquet docker est une dépendance donc installé automatiquement avec.
Pour lancer la commande docker-compose, il faut que le service systemd docker soit lancé

2) d’après ton erreur, je suppose que ton port 80 est déjà occupé :
- tu as sans doute déjà un apache (ou autre) qui tourne sur ta machine :saispas:

si tu désires avoir les 2 serveurs web sur ta machine :roll: alors il faut changer de port dans le fichier de configuration docker-compose.yml

LAMP avec docker

#4Messageil y a 4 ans

Bon,

J'ai stoppé le service httpd.

Dans ton script, j'ai modifié les ports pour tout mettre sur le 81. (je ne sais quel autre ports utiliser :desole: )

Voici le script modifié. Dis-moi, s'il te plaît si j'ai commis une erreur car même avec celui-ci, le script me renvoie la même erreur :

#!/usr/bin/bash

DIR="$HOME/dockers/"
project="${1:-project}"
#phpver="${2:-'7.2'}"

[ -e "${DIR}/${project}" ] || {
    mkdir -v -p "${DIR}/${project}/www"
    mkdir -v -p "${DIR}/${project}/mysql"
    [ -e "${DIR}/${project}/www/index.php" ] || echo -e "<?php\n  phpinfo();" > "${DIR}/${project}/www/index.php"
}
cd "${DIR}/${project}"
pwd

pkg=($(pacman -Qq docker-compose 2>/dev/null));
if [[  "${pkg[0]}" != "docker-compose" ]]; then
    echo "installation de docker compose..."
    sudo pacman -Si docker-compose
    sudo usermod -aG docker $USER
fi

echo "démarrage de docker..."
sudo systemctl start docker

gen_config() # file_name
{
echo "Génération du fichier de configuration $1"
cat << "EOF" > "$1"
version: '3.7'

services:
    web:
        #container_name: webserver
        image: webdevops/php-apache:7.2
        #https://dockerfile.readthedocs.io/en/latest/content/DockerImages/dockerfiles/php-apache.html#
        ports:
            - "81:81"
        volumes:
            - ./www:/app
        links:
            - sql9:sql9
        domainname: phpbb.local
        environment:
            PHP_MEMORY_LIMIT: 640M
            PHP_DISPLAY_ERRORS: 1
            PHP_MAX_EXECUTION_TIME: 600
            APPLICATION_GID: 1000
        extra_hosts:
            - "web.local:127.0.0.1"

    sql9:
        image: mysql:5.5
        volumes:
            - ./mysql:/var/lib/mysql
        ports:
            - "3306:3306"
        environment:
            MYSQL_ROOT_PASSWORD: root
            MYSQL_DATABASE: root
            MYSQL_USER: demo
            MYSQL_PASSWORD: demo

    myadmin:
        image: phpmyadmin/phpmyadmin
        ports:
            - "8181:81"
        links:
            - sql9:sql9
        environment:
            PMA_HOST: sql9
            PMA_USER: root
            PMA_PASSWORD: root
EOF
}

if [ ! -e "${DIR}/${project}/www/docker-compose.yml" ]; then
    gen_config "docker-compose.yml"
fi

echo "phpmyadmin à : http://localhost:9090/  (login:root pass: root)"
echo "site web à http://localhost/"

docker-compose up
J'ai modifié le fichier docker-compose.yml pour le diriger vers 127.0.0.1:81

version: '3.7'

services:
    web:
        #container_name: webserver
        image: webdevops/php-apache:7.2
        #https://dockerfile.readthedocs.io/en/latest/content/DockerImages/dockerfiles/php-apache.html#
        ports:
            - "81:81"
        volumes:
            - ./www:/app
        links:
            - sql9:sql9
        domainname: phpbb.local
        environment:
            PHP_MEMORY_LIMIT: 640M
            PHP_DISPLAY_ERRORS: 1
            PHP_MAX_EXECUTION_TIME: 600
            APPLICATION_GID: 1000
        extra_hosts:
            - "web.local:127.0.0.1"

    sql9:
        image: mysql:5.5
        volumes:
            - ./mysql:/var/lib/mysql
        ports:
            - "3306:3306"
        environment:
            MYSQL_ROOT_PASSWORD: obelix6603
            MYSQL_DATABASE: root
            MYSQL_USER: bruno
            MYSQL_PASSWORD: obelix6603

    myadmin:
        image: phpmyadmin/phpmyadmin
        ports:
            - "8181:81"
        links:
            - sql9:sql9
        environment:
            PMA_HOST: sql9
            PMA_USER: root
            PMA_PASSWORD: root
J'ai commis des errurs ?

LAMP avec docker

#5Messageil y a 4 ans

obelix1502 a écrit : il y a 4 ans J'ai stoppé le service httpd.
Pourquoi faire compliqué ? :lol:
Si tu as fermé apache, tu n'as PAS à rediriger les ports !

De plus ce que tu écris est faut :

image: phpmyadmin/phpmyadmin
        ports:
            - "8181:81"
Tu rediriges le port dans docker 81 ver le port 8181 de ta machine
De plus le port phpmyadmin/nginx dans docker est 80 non 81 : quel mélange

image: webdevops/php-apache:7.2
        ports:
            - "81:81"
Tu rediriges le port dans docker 81 ver le port 81 de ta machine (qui est déjà utilisé par phpmyadmin !!!!!)
De plus le port apache dans docker est 80 non 81 : quel mélange

apache et phpmyadmin utilisent tous les 2 le port 80 dans le conteneur docker !
Il est possible de rediriger le port 80 des conteneurs docker vers un port de notre machine hôte avec :
- "port_de_ma_machine:80"
doc: https://docs.docker.com/compose/compose ... t-syntax-1


Comme dit dans le message précédent, on ne change les ports "machine" (80 et 8080) qui si nous avons déjà des services sur notre machine qui les utilise déjà

LAMP avec docker

#6Messageil y a 4 ans

On avance.

Tout va bien jusqu'ici :

ERROR: for project_sql9_1  Cannot start service sql9: driver failed programming external connectivity on endpoint project_sql9_1 (f8f2c82870be3aec818262463bb049eb93d91b5c86b1fa538d285288b727f731): Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use

ERROR: for sql9  Cannot start service sql9: driver failed programming external connectivity on endpoint project_sql9_1 (f8f2c82870be3aec818262463bb049eb93d91b5c86b1fa538d285288b727f731): Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use
ERROR: Encountered errors while bringing up the project.
Alors là je ne comprends pluis, j'ai stoppé tous les ervives auparant...

LAMP avec docker

#7Messageil y a 4 ans

l'erreur n'est pas claire ?
obelix1502 a écrit : il y a 4 ans ERROR: for sql9 Cannot start service sql9: ... Error starting userland proxy: listen tcp 0.0.0.0 : 3306: bind: address already in use
Alors là je ne comprends pluis, j'ai stoppé tous les ervives auparant...
Pourtant il dit le contraire, il ne peut monter le service mysql sur ta machine hôte car le port 3306 est occupé :wink:
Répondre