1/ télécharger l'image : khanat-*-*-server-debian-stretch.zip voir : https://git.khaganat.net/khaganat/mmorpg_khanat/khanat-server-docker/pipelines
2/ ajouter l'image dans docker
unzip khanat-647e9a2-567-server-debian-stretch.zip # si extension .tar.gz zcat khanat-debian-server.tar.gz | docker import - opennel/servercontainer_debian_stretch_x86_64 ## si extension .tar.bz2 # bunzip2 khanat-debian-server.tar.bz2 # cat khanat-debian-server.tar | docker import - opennel/servercontainer_debian_stretch_x86_64
3/ Démarrer l'image
docker run -it opennel/servercontainer_debian_stretch_x86_64 /opt/ext/servercontainer_launch_auto.sh --opennel-manager
Garder le terminal ouvert pour que le serveur soit actif. Il est possible d'envoyer les commandes depuis ce terminal. Un “exit” suffira pour arrêter le serveur.
Console:
Web : Home page
Web : OpenNel Manager
Web : OpenNel Manager - player connected
4/ Se connecter sur le serveur
Récupérer l'adresse ip :
docker inspect --format="{{ .NetworkSettings.IPAddress }}" $(docker ps -qf 'status=running' -f 'ancestor=opennel/servercontainer_debian_stretch_x86_64')
via ssh :
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no gameserver@$ipaddress
via http : http://ipaddress/
5/ Jouer
Télécharger le script prepare_environment_container_64.sh http://ipaddress/prepare_environment_container_64.sh
bash prepare_environment_container_64.sh (cd Khanat_Linux64; ./khanat_client)
Compilation et démarrage sous docker
L'objectif de compiler et démarrer un serveur sous docker et de permettre à tous de tester rapidement une fonctionnalité.
Pour ceux qui souhaite rapidement compiler et démarrer le serveur (en local) et le client. Voici les commandes afin d'avoir un système fonctionnel. (attention la phase de compilation peut etre longue [cela dépend de votre machine])
git clone https://git.khaganat.net/khaganat/mmorpg_khanat/khanat-server-docker.git git clone https://git.khaganat.net/khaganat/mmorpg_khanat/khanat-opennel-code.git git clone https://git.khaganat.net/khaganat/mmorpg_khanat/khanat-client-data.git git clone https://git.khaganat.net/khaganat/mmorpg_khanat/khanat-ressources.git git clone https://git.khaganat.net/khaganat/mmorpg_khanat/opennel-pymanager.git
khanat-server-docker/builder/debian/jessie/x86_64/build.sh -c -j 12 -a '-DWITH_SYMBOLS=ON'
Ce mode est plus fléxible, quand on recompile partiellement, ou que l'on modifie des donnée du jeux, la mise à jour est plus rapide.
khanat-server-docker/server/debian/jessie/i686/server-container.sh -r -b -k -w -c -n khanat-server-docker/server/debian/jessie/i686/server-container.sh -w -c
khanat-server-docker/server/debian/jessie/i686/server-container.sh -u -w -c -n khanat-server-docker/server/debian/jessie/i686/server-container.sh -w -c
Utile si l'on souhaite déboguer.
(il faut s'assurer que le serveur est bien actif)
khanat-server-docker/server/debian/jessie/x86_64/server-image.sh --ssh
#!/bin/bash declare IMAGEKHANATSERVER="opennel/servercontainer_debian_jessie_x86_64" mkdir -p $HOME/Public echo "$(date "+%Y/%m/%d %H:%M:%S") Get ip address server khanat" listcontainer="$(docker ps -qf 'status=running' -f 'ancestor='"${IMAGEKHANATSERVER}"'')" if [[ ${#listcontainer[@]} -eq 1 ]] then ipaddress=$(docker inspect --format="{{ .NetworkSettings.IPAddress }}" ${listcontainer[@]}) fi echo "$(date "+%Y/%m/%d %H:%M:%S") get client package" wget http://$ipaddress/client/smokey_linux64.tar.gz -O smokey_linux64.tar.gz echo "$(date "+%Y/%m/%d %H:%M:%S") clean old client" if [[ -d Khanat_Linux64 ]] then rm -rf Khanat_Linux64 || exit 2 fi echo "$(date "+%Y/%m/%d %H:%M:%S") install new client" #7z x -y $SRCKHANATCLIENT || exit 2 #7z x -y -oKhanat_Linux64 $SRCKHANATCLIENTDEBUG || exit 2 tar xvzf smokey_linux64.tar.gz || exit 2 echo "$(date "+%Y/%m/%d %H:%M:%S") configure client" sed -i 's/lirria.khaganat.net/'$ipaddress'/g' Khanat_Linux64/client_default.cfg echo -en "Client khanat installed & configured\nGo to Khanat_Linux64 directory and launch client\n" echo -en "(cd Khanat_Linux64;./khanat_client)\n"
./prepare_environment_container_64.sh (cd Khanat_Linux64; ./khanat_client)
Vous avez la possibilité de compiler toutes les versions et créer les serveurs types de serveur. et sauvegarder les images réalisé sur le serveur host.
khanat-server-docker/build_all.sh --clean --save-docker-images
khanat-server-docker/builder/debian/jessie/i686/build.sh -c -j 12 -a '-DWITH_SSE2=OFF' -a '-DWITH_SYMBOLS=ON'
Actuellement, nous avons besoin d'ajouter l'option '-DWITH_SSE2=OFF' dans la compilation pour corriger (temporaire) un problème pendant la phase de “build”.
khanat-server-docker/server/debian/jessie/i686/server-container.sh -r -b -k -w -c -n
khanat-server-docker/server/debian/jessie/i686/server-container.sh -u -w -c -n
khanat-server-docker/server/debian/jessie/i686/server-container.sh -w -c
khanat-server-docker/builder/debian/jessie/x86_64/build.sh -c -j 12 -a '-DWITH_SYMBOLS=ON'
khanat-server-docker/server/debian/jessie/x86_64/server-container.sh -r -b -k -w -c -n
khanat-server-docker/server/debian/jessie/x86_64/server-container.sh -u -w -c -n
khanat-server-docker/server/debian/jessie/x86_64/server-container.sh -w -c
Nous avons séparé en deux parties(chacune divisée en plusieurs étapes):
Pour l'étape SERVER nous avons deux méthodes possible :
BUILD :
SERVERIMAGE :
SERVERCONTAINER :
On doit récupérer tous les dépôts utilisés pour le serveur et les données. Pour cela, on crée un répertoire dédié :
mkdir -p khanat cd khanat git clone https://git.khaganat.net/khaganat/mmorpg_khanat/khanat-server-docker.git git clone https://git.khaganat.net/khaganat/mmorpg_khanat/khanat-opennel-code.git git clone https://git.khaganat.net/khaganat/mmorpg_khanat/khanat-client-data.git git clone https://git.khaganat.net/khaganat/mmorpg_khanat/khanat-ressources.git git clone https://git.khaganat.net/khaganat/mmorpg_khanat/opennel-pymanager.git cd ..
Première phase, la compilation des binaires du serveur :
khanat-server-docker/builder/debian/jessie/x86_64/build.sh -c -r -j 4 -a '-DWITH_SYMBOLS=ON'
Détail des options :
Quand on a déjà l'image docker de compilation [builder_khanat_debian_jessie_x86_64], on peut lancer uniquement la phase de compilation.
khanat-server-docker/builder/debian/jessie/x86_64/build.sh -c -j 4 -a '-DWITH_SYMBOLS=ON'
Log : khanat-code/code/build/builder_khanat_debian_jessie_x86_64/build.log
Donnée de compilation : khanat-code/code/build/builder_khanat_debian_jessie_x86_64
usage:khanat-server-docker/builder/debian/jessie/x86_64/build.sh [options] script to build under docker Step: 1) clean old build directory 2) create image builder 3) launch build under docker (launch script build-under-docker.sh) 4) remove docker container with state exited options: -h, --help : Show this help -d, --debug : Show debug message -r, --remove : Remove old build repository -f, --force-create-image : force to create docker image (use to build khanat) - default autodetec. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -a OPTS, --add-opts-cmake=OPTS : Adding options on cmake command (before build) -c, --clean-container : remove all container in state Exited -w, --clean-images-none : Remove images docker (with name 'none') -m OPTS, --add-opts-docker=OPTS : Adding options on docker command (when build) --only-build-server : adding option to build only server -p, --package : generate package --code-source=[DIR] : localization source OpenNel code Example : cd [root Khanat directory] ./build.sh -c -r -m '-m 20g' ./build.sh -c -r -j 4 -a '-DWITH_SYMBOLS=ON' -a '-DWITH_RYZOM_TOOLS=OFF' -a '-DWITH_NEL_TOOLS=OFF' -m '-m 20g' -d
Vous avez deux possibilités pour démarrer le serveur :
Génération des données pour le serveur et démarrage de celui-ci
Il détecte les étapes qu'il n'a pas faites et les exécute.
Attention, il ne vérifie pas s'il faut générer de nouveau les fichiers compressés contenant les ressources/binaires/données client
khanat-server-docker/server/debian/jessie/x86_64/server-image.sh -c -w
khanat-server-docker/server/debian/jessie/x86_64/server-image.sh -c -w -t -q -z -k
khanat-server-docker/server/debian/jessie/x86_64/server-image.sh -c -w -k
Affiche le log dans le terminal
khanat-server-docker/server/debian/jessie/x86_64/server-image.sh -c -w -k --start-khanat-with-full-log
Affiche le statut (au format Nagios ?)
khanat-server-docker/server/debian/jessie/x86_64/server-image.sh -c -w -k --start-khanat-with-watch-state
Il est possible de se connecter sur un serveur en ssh.
khanat-server-docker/server/debian/jessie/x86_64/server-image.sh --ssh
Attention, il faut avoir démarré le serveur avant d'exécuter cette commande.
Arrêter le serveur et effacer tous les containeurs
khanat-server-docker/server/debian/jessie/x86_64/server-image.sh -c -w -n -s
usage:dist/docker/server/debian/jessie/x86_64/server-image.sh [options] script to build under docker Step: 1) generate tar with khanat-ressources 2) generate tar with ryzom-ressources 3) create image basic server 4) create image khanat server 5) launch khanat server options: -h, --help : Show this help -d, --debug : Show debug message -b, --force-basic : Force create/recreate image basic server -t, --force-tar-ressources : Generate TAR.GZ for khanat-ressources (look directory ../khanat-ressources) -q, --force-tar-client-data : Generate TAR.GZ for khanat-client-data (look directory ../khanat-client-data) -z, --force-tar-ryzom-ressources : Generate TAR.GZ in data khanat-code -k, --force-khanat : Force create/recreate image khanat server -n, --no-launch-khanat : Doesn't launch khanat server -s, --stop-server : Stop server khanat -c, --clean-container-khanat : Remove old server khanat (stopped) -w, --clean-images-none : Remove images docker (with name 'none') -i, --show-ip-khanat-server : show ip address for khanat server (launch under docker) --option-docker-build=[STRING] : you can add option in "docker build" --opennel-code-dir=[DIR] : localization opennel-code --start-khanat-with-screen : [default] start khanat with screen --start-khanat-with-full-log : start server khanat and show full log --start-khanat-with-watch-state : start server khanat and show state (loop) --ssh : connect on khanat server (with ssh) [Exclusive action, can't execute other action] --client-version=[INTEGER] : version client khanat (we need to communicate with our server) Example : cd [root Khanat directory] ./server.sh ./server.sh -k ./server.sh --ssh
Pour utiliser le serveur, il faudra reconstruire le client (sans données externes), afin qu'il récupère le patch.
#!/bin/bash declare IMAGEKHANATSERVER="opennel/serverimage_debian_jessie_x86_64" mkdir -p $HOME/Public echo "$(date "+%Y/%m/%d %H:%M:%S") Get ip address server khanat" listcontainer="$(docker ps -qf 'status=running' -f 'ancestor='"${IMAGEKHANATSERVER}"'')" if [[ ${#listcontainer[@]} -eq 1 ]] then ipaddress=$(docker inspect --format="{{ .NetworkSettings.IPAddress }}" ${listcontainer[@]}) fi echo "$(date "+%Y/%m/%d %H:%M:%S") get client package" wget http://$ipaddress/client/smokey_linux64.tar.gz -O smokey_linux64.tar.gz echo "$(date "+%Y/%m/%d %H:%M:%S") clean old client" if [[ -d Khanat_Linux64 ]] then rm -rf Khanat_Linux64 || exit 2 fi echo "$(date "+%Y/%m/%d %H:%M:%S") install new client" #7z x -y $SRCKHANATCLIENT || exit 2 #7z x -y -oKhanat_Linux64 $SRCKHANATCLIENTDEBUG || exit 2 tar xvzf smokey_linux64.tar.gz || exit 2 echo "$(date "+%Y/%m/%d %H:%M:%S") configure client" sed -i 's/lirria.khaganat.net/'$ipaddress'/g' Khanat_Linux64/client_default.cfg echo -en "Client khanat installed & configured\nGo to Khanat_Linux64 directory and launch client\n" echo -en "(cd Khanat_Linux64;./khanat_client)\n"
./prepare_environment_image.sh (cd Khanat_Linux64; ./khanat_client)
Utiliser le compte tester pour se connecter dans le jeux (voir Se connecter sur l'administration khanat pour le détail du compte)
Il faut dans un premier temps récuperer l'IP du serveur khanat sous docker
Va chercher l’ID du container actif :
docker ps -qf 'status=running' -f 'ancestor=serverimage_khanat_debian_jessie_x86_64'
Méthode 1 : via le script server.sh
khanat-server-docker/server/debian/jessie/x86_64/server-image.sh -i
Méthode 2 : via une interrogation directe de docker
docker inspect --format="{{ .NetworkSettings.IPAddress }}" [ID du container]
server.sh
khanat-server-docker/server/debian/jessie/x86_64/server-image.sh --ssh
server.sh
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no gameserver@[ip khanat server]
On utilise l’adresse :
http://[Adresse ip server khanat sous docker]/phpmyadmin
compte | mot de passe |
---|---|
root | aucun |
On utilise l’adresse :
http://[Adresse ip server khanat sous docker]/ams/
compte | mot de passe | fonction |
---|---|---|
admin | admin | compte qui lance khanat serveur |
tester | tester | user |
compte | mot de passe | fonction | home |
---|---|---|---|
gameserver | khanat | compte qui gère tout (le serveur khanat & serveur patch) | /home/gameserver |
répertoire | fonction |
---|---|
/home/gameserver | Répertoire par défaut de gameserver (HOME) |
/home/gameserver/khanat | Répertoire de base du serveur khanat |
/home/gameserver/khanat/khanatweb | Répertoire de base pour la partie web service (hors patch serveur & phpmyadmin) |
/home/gameserver/patch_service | Répertoire de base pour le patch serveur |
Génération des données pour le serveur et démarrage de celui-ci
Il détecte les étapes qu'il n'a pas faites et les exécute.
Attention, il ne vérifie pas s'il faut générer de nouveau les fichiers compressés contenant les ressources/binaire/donnée client
khanat-server-docker/server/debian/jessie/x86_64/server-container.sh -c -w
khanat-server-docker/server/debian/jessie/x86_64/server-container.sh -r -c -w -b -k -g
khanat-server-docker/server/debian/jessie/x86_64/server-container.sh -r -c -w -g
khanat-server-docker/server/debian/jessie/x86_64/server-container.sh -c -w -u
Affiche la log dans le terminal
khanat-server-docker/server/debian/jessie/x86_64/server-container.sh -c -w -k --start-khanat-with-full-log
Affiche la status (format Nagios ?)
khanat-server-docker/server/debian/jessie/x86_64/server-container.sh -c -w -k --start-khanat-with-watch-state
Il est possible de se connecter sur un serveur en ssh.
khanat-server-docker/server/debian/jessie/x86_64/server-container.sh --ssh
Attention, il faut avoir démarré le serveur avant d'exécuter cette commande.
Arrêter le serveur et effacer tous les containers
khanat-server-docker/server/debian/jessie/x86_64/server-container.sh -c -w -n -s
usage:dist/docker/server/debian/jessie/x86_64/server-container.sh [options] script to build under docker Step: 1) create image basic server 2) create image khanat server 3) configure khagant server 4) launch khagant server options: -h, --help : Show this help -d, --debug : Show debug message -r, --remove : Remove directory data khanat -b, --force-basic : Force create/recreate image basic server -k, --force-khanat : Force create/recreate image khanat server -u, --update-data : generate a new patch (client & update server) -g, --configure-khanat : Force configure khanat server -n, --no-launch-khanat : Doesn't launch khanat server -s, --stop-server : Stop server khanat -c, --clean-container-khanat : Remove old server khanat (stopped) -w, --clean-images-none : Remove images docker (with name 'none') -i, --show-ip-khanat-server : show ip address for khanat server (launch under docker) --option-docker-build=[STRING] : you can add option in "docker build" --khanat-ressources-dir=[DIR] : localization khanat-ressources --khanat-client-data-dir=[DIR] : localization khanat-client-data --opennel-code-dir=[DIR] : localization opennel-code --start-khanat-with-screen : start with screen --start-khanat-with-khanat-log : start server khanat and show khanat log --start-khanat-with-full-log : start server khanat and show full log --start-khanat-with-watch-state : start server khanat and show state (loop) --start-khanat-with-watch-state-nagios : start server khanat and show state [nagios format] (loop) --start-khanat-with-bash-after : start server khanat and launch bash --start-with-manager : start khanat with manager --ssh : connect on khanat server (with ssh) [Exclusive action, can't execute other action] --client-version=[INTEGER] : version client khanat (we need to communicate with our server) Example : cd [root Khanat directory] ./server.sh ./server.sh -k ./server.sh --ssh
Pour utiliser le serveur, il faudra reconstruire le client (sans données externes), afin qu'il récupère le patch.
#!/bin/bash declare IMAGEKHANATSERVER="opennel/servercontainer_debian_jessie_x86_64" mkdir -p $HOME/Public echo "$(date "+%Y/%m/%d %H:%M:%S") Get ip address server khanat" listcontainer="$(docker ps -qf 'status=running' -f 'ancestor='"${IMAGEKHANATSERVER}"'')" if [[ ${#listcontainer[@]} -eq 1 ]] then ipaddress=$(docker inspect --format="{{ .NetworkSettings.IPAddress }}" ${listcontainer[@]}) fi echo "$(date "+%Y/%m/%d %H:%M:%S") get client package" wget http://$ipaddress/client/smokey_linux64.tar.gz -O smokey_linux64.tar.gz echo "$(date "+%Y/%m/%d %H:%M:%S") clean old client" if [[ -d Khanat_Linux64 ]] then rm -rf Khanat_Linux64 || exit 2 fi echo "$(date "+%Y/%m/%d %H:%M:%S") install new client" #7z x -y $SRCKHANATCLIENT || exit 2 #7z x -y -oKhanat_Linux64 $SRCKHANATCLIENTDEBUG || exit 2 tar xvzf smokey_linux64.tar.gz || exit 2 echo "$(date "+%Y/%m/%d %H:%M:%S") configure client" sed -i 's/lirria.khaganat.net/'$ipaddress'/g' Khanat_Linux64/client_default.cfg echo -en "Client khanat installed & configured\nGo to Khanat_Linux64 directory and launch client\n" echo -en "(cd Khanat_Linux64;./khanat_client)\n"
./prepare_environment_container.sh (cd Khanat_Linux64; ./khanat_client)
Utiliser le compte tester pour se connecter dans le jeux (voir Se connecter sur l'administration khanat pour le détail du compte).
En premier, il faut récupérer l'IP du serveur khanat sous docker.
Récupère l'ID du containeur actif
docker ps -qf 'status=running' -f 'ancestor=servercontainer_khanat_debian_jessie_x86_64'
Méthode 1 : via le script server.sh
khanat-server-docker/server/debian/jessie/x86_64/server-container.sh -i
Méthode 2 : via une interrogation de docker
docker inspect --format="{{ .NetworkSettings.IPAddress }}" [ID du container]
khanat-server-docker/server/debian/jessie/x86_64/server-container.sh --ssh
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no gameserver@[ip khanat server]
http://[Adresse IP server khanat sous docker]/phpmyadmin
compte | mot de passe |
---|---|
root | aucun |
http://[Adresse IP server khanat sous docker]/ams/
compte | mot de passe | fonction |
---|---|---|
admin | admin | compte qui lance khanat serveur |
tester | tester | user |
compte | mot de passe | fonction | home |
---|---|---|---|
gameserver | khanat | compte qui gère tout (le serveur khanat & serveur patch) | /home/gameserver |
1) Dans le containeur Docker :
répertoire | fonction |
---|---|
/home/gameserver | Répertoire par défaut de gameserver (HOME) |
/home/gameserver/khanat | Répertoire de base du serveur khanat |
/home/gameserver/khanat/khanatweb | Répertoire de base pour la partie web service (hors patch serveur & phpmyadmin) |
/home/gameserver/khanat/patch_service | Répertoire de base pour le patch serveur |
/home/gameserver/log | Répertoire de base pour les log |
/home/gameserver/databse | Répertoire de base pour la base de donnée |
2) Dans l'hôte
répertoire | fonction |
---|---|
build | Répertoire contenant tous les build |
build/builder_khanat_debian_jessie_x86_64 | Répertoire d'un build spécifique (à un OS, version) |
output | Répertoire contenant toutes les données de l'hote |
output/khanat_debian_jessie_x86_64 | Répertoire contenant les données de l'hote pour un OS & version spécifique |
df -h
Il doit rester de l'espace disque (pas de 100% utilisé)
docker ps -a docker rm 0d80f8c01701
docker images docker rmi e0b14f49be1f
ls khanat-code/output/khanat_debian_jessie_x86_64/ rm -rf khanat-code/output/khanat_debian_jessie_x86_64
docker version docker info docker search debian
Quelques commandes :
docker images
docker ps -a
docker inspect [id container]
docker stop [id container]
docker rm [id container]
docker rmi [id image]