Disculpa...
Le decía a Pedro si necesitaba ayuda para hacer el tuto con su docker-base...
Pero, así a grandes rasgos..
# add custom Dockerfile
mkdir custom
echo > custom/Dockerfile << EOF
FROM tecnativa/odoo-base
MAINTAINER Me <linu...@gmail.com>
EOF
¿Para qué haces eso?
Ahí, lo que tienes que tener cuidado es que el docker base sea el mismo tag (versión) que tengas definido en el .env file
# XXX Base version must match $ODOO_VERSION in .env file
FROM tecnativa/odoo-base:9.0
Por ejemplo, ese, ahí tengo una 9.0 en el .env.
¿Y esto otro?
# make sure permissions are right
chown -R odoo:odoo odoo/auto
chmod -R ug+rwX odoo/auto
# put it in .bashrc
export UID GID="$(id -g $USER)" UMASK="$(umask)"
# add user to docker group (otherwise ti can't connect to docker's socket)
useradd -a -G docker odoo
yo utilizo mi usuario local, que está agregado al grupo de docker; vamos, tienes que tener un usuario que tenga permisos para ejecutar docker, ni más, ni menos.
Después, veo este error:
odoo_1 | INFO:docker-odoo-base:Linking all addons from /opt/odoo/custom/src/addons.yaml in /opt/odoo/auto/addons
odoo_1 | Traceback (most recent call last):
odoo_1 | File "/opt/odoo/common/entrypoint.d/40-addons-link", line 26, in <module>
odoo_1 | os.symlink(src, dst)
Me da a mi que tienes algo mal en el ./odoo/custom/src/addons.yaml, o en el ./odoo/custom/src/repos.yaml;
Los pasos, muy resumidos, son estos:
## Simple steps to use the Tecnativa/docker-odoo-base.
### Init the project.
```
cd myproject
ln -s devel.yaml docker-compose.yml
chown -R $USER:1000 odoo/auto
chmod -R ug+rwX odoo/auto
export UID="$(id -u $USER)" GID="$(id -g $USER)" UMASK="$(umask)"
docker-compose build --pull
docker-compose -f setup-devel.yaml run --rm odoo
docker-compose up.
```
Que son:
1) Clonas el scaffolding al directorio que quieras
2) Vas a ese directorio
3) creas enlace simbólico del archivo devel.yaml a docker-compose-yml; esto te lo puedes ahorrar si ejecutas docker-compose con la opción -f (file)
4) das permisos a tu usuario sobre los directorios
5) exportas variables de entorno (a mi esto en Linux Mint / Ubuntu no me tira, pero tampoco me da problmeas)
Ahora viene la parte interesante...
6) en el docker build, lo que haces es crearte una imagen propia, a partir de la imagen base de Tecnativa, y de la configuración que tengas en los archivos que hay en ./odoo/custom/dependencies; que son varios, y hacen diferentes cosas; mírate el Dockerfile del base, para saber qué hacen exactamente. Pero, muy en resumen, cogen las dependencias que tengas definidas en cuanto a paquetes apt, paquetes npm, paquetes pip.. Y las instala.
7) ahora, ejecuta una instancia de la imagen odoo que has creado, y lo único que haces es clonar los repositorios que tengas definidos en el ./odoo/custom/src/repos.yaml; que es un archivo de git-aggregator, que es lo que usa para ese clonado.
8) arranca todo el stack; no recuerdo si los enlaces simbólicos a los módulos que tienes definidos ./odoo/custom/src/addons.yaml los crea en el arranque, o los crea en el paso anterior; mira los scripts que tiene el docker base.
Personalmente, yo lo tengo en un archivo Makefile, y después hago "make ..."; algo así:
build:
docker-compose build --pull
setup:
docker-compose -f setup-devel.yaml run --rm odoo
run:
docker-compose up -d
up: run
down:
docker-compose down
start:
docker-compose start
stop:
docker-compose stop
pause:
docker-compose pause
tail-odoo:
docker-compose logs -f --tail 10 odoo
tail-services:
docker-compose logs -f --tail 10
inspect-db:
docker-compose run --rm odoo psql
restart-odoo:
docker-compose restart -t0 odoo
restart-odoo-prod:
docker-compose restart odoo https
default: run
y después, hago make build, make up, make....; para mi es más cómodo, pero bueno, para gustos, los colores.
¿Por qué no te crea la base devel?; pues, no lo tengo muy claro; prueba a usar el docker de forma "estándar"; y una vez te arranque, pues ya puedes empezar a plantearte más cosas.
Como comentario, en el devel.yaml (que es el docker-compose.yaml, que has hecho un ln), tienes estas variables de entorno:
environment:
ADMIN_PASSWORD: admin
PGDATABASE: "testpsodoo"
PYTHONOPTIMIZE: ""
# You want demo data for development
WITHOUT_DEMO: "false"
Una es el nombre de la base de datos; yo, cuando hago una instalación nueva, borro la que crea por defecto, y creo una nueva, para que me salte el asistente; pero tú ahí lo que puedes hacer es borrar la que te crea por defecto (por defecto tiene de nombre "devel", si no recuerdo mal), importar la exportación del Odoo que quieres migrar, ponerle el nombre que quieras, y ese mismo nombre ponerlo ahí.
Eso te lo va a guardar en un volumen docker; si te fijas, en ese mismo archivo:
(al final); y en el servicio odoo, tienes:
volumes:
- ./odoo/custom:/opt/odoo/custom:ro,z
- ./odoo/auto/addons:/opt/odoo/auto/addons:rw,z
Que son directorios de "fuera", vamos, se "ven" directamente en el filesystem (eso es una cuestión al gusto, puedes clonar en un volumen docker, que es la práctica recomendada, además).
Pero el servicio db:
db:
hostname: "db.testpsodoo.odoo.localhost"
container_name: "testpsodoo_odoo_db"
extends:
file: common.yaml
service: db
networks:
testpsodoo_odoo_demo_network:
ipv4_address: 172.21.107.102
extiende de common.yaml:
db:
image: postgres:${DB_VERSION}-alpine
environment:
POSTGRES_USER: "$DB_USER"
POSTGRES_PASSWORD: "$DB_PASSWORD"
volumes:
- db:/var/lib/postgresql/data:z
fíjate; usa el filestore db, que es un volumen docker.
en el caso del servicio odoo, que extiende también de common.yaml, tienes, en el common.yaml:
odoo:
build:
context: ./odoo
args:
CONFIG_BUILD: "false"
environment:
ADMIN_PASSWORD: "$ODOO_ADMIN_PASSWORD"
PGPASSWORD: "$DB_PASSWORD"
PGUSER: "$DB_USER"
PROXY_MODE: "$ODOO_PROXY_MODE"
PYTHONOPTIMIZE: 2
tty: true
volumes:
- filestore:/var/lib/odoo:z
labels:
traefik.docker.network: "inverseproxy_shared"
traefik.enable: "true"
traefik.frontend.passHostHeader: "true"
traefik.longpolling.port: "8072"
traefik.port: "8069"
Usa el volumen docker "filestore", para guardar archivos, etc.
todos los labels traefik, son para usar con el servidor web traefik (bueno, más bien es un proxy inverso exclusivamente); si quieres usarlo con nginx u otros, todo eso no te vale para nada.
Como no veo nada que sea "delicado" o "sensible" en lo que publicas, y lo que pongo, puede ser de ayuda a más gente, lo voy a publicar directamente en el grupo.
Saludos.