Feature #1961
closedInstallation via Docker
Description
It is now possible to install OpenAtlas via Docker, see docker-compose.yml and /install/Dockerfile.
We tested it, but it is still experimental and feedback is as always welcome.
Updated by Alexander Watzinger almost 2 years ago
- Status changed from Closed to In Progress
- Making it work without errors, maybe let someone else test it too
- Document in INSTALL.md, we may have to rewrite the top part too or at least mention that we don't advise (for now) to use docker installation for production servers
Updated by Enric Rodellas almost 2 years ago
- Windows 10
- WSL 2 activated
- Docker Desktop (from Microsoft) installed
- PyCharm for get some debug
- cd to repository of openatlas
- docker compose up -d
With some trouble, but not not attributable to developers. Caused by git, that convert LF to CRLF, and that is cause that scripts like SQLs and entrypoint.sh are not well interpreted inside linux docker.
I need to:- repeat all proces and trust
- try export and import process
- try upgrade process
I would like decide directory or place of installation. In my context (git in Windows) has intalled postgres database in 'data' directory inside repo of git
Take in acoount that I'm not an expert in dockers, and I understand the concept, but I'm not a master of dockers
Updated by Enric Rodellas almost 2 years ago
Agghh !!
I wanted to be sure that I could reproduce setup.
I have stopped services, deleted db created before. But no success.
When I try to repeat:
C:\Users\rodellas\GITHUBenricapbes\OpenAtlas> docker compose up -d
I got:
/var/www/openatlas / 2023-02-12T20:11:33.637401000Z psql: error: could not connect to server: Connection refused 2023-02-12T20:11:33.637430600Z Is the server running on host "postgres" (172.19.0.2) and accepting 2023-02-12T20:11:33.637436900Z TCP/IP connections on port 5432?
Updated by Enric Rodellas almost 2 years ago
If after previous execution of 'docker compose' I add
- OVERWRITE_DATABASE=TRUE
in docker-compose.yaml in environment of services of openatlas and rexecute service openatlas.
After this web and db runs perfectly
Updated by Bernhard Koschiček-Krombholz almost 2 years ago
- Description updated (diff)
I was on holiday and couldn't response in time, sorry.
I'm very happy, that you could make it run so far. I will write an installation notice in this week.
For your info, the OVERWRITE_DATABASE variable is there for the first run to install the database on the postgis container. There is a script (install/check_database.sh), which looks if there is a database running and everything is set up. If a database is running, but there is no OpenAtlas database installed and OVERWRITE_DATABASE is TRUE, it will install the basic database.
Keep in mind, that everything is in an experimental state, and we didn't test it enough to use it as a production service. Also, as you noticed with the SQL Backup, not everything is thought through right now.
And big thanks for your effort to set it up, get it running and your important feedback!
Updated by Bernhard Koschiček-Krombholz almost 2 years ago
Enric Rodellas wrote:
I would like decide directory or place of installation. In my context (git in Windows) has intalled postgres database in 'data' directory inside repo of git
I found no way to do this via variables, but you can play around with the postgis volumes in docer-compose.yml:
volumes:
- ./data/db:/var/lib/postgresql/data
This ./data/db part is the path where the database is stored, just add an absolute path, where you want it to install.
Updated by Bernhard Koschiček-Krombholz almost 2 years ago
- Description updated (diff)
Updated by Bernhard Koschiček-Krombholz almost 2 years ago
- Description updated (diff)
Updated composer file and install.md.
At the ./install.md is a new Section at the bottom for Docker. There is also a way to install OpenAtlas with an existing dump (e.g. if you exported another database with "Export SQL").
But keep in mind, our Docker installation is NOT tested and proven for productive services.
Updated by Bernhard Koschiček-Krombholz almost 2 years ago
- Status changed from In Progress to Closed
Updated by Bernhard Koschiček-Krombholz almost 2 years ago
- Target version changed from 7.12.0 to 7.11.0
Updated by Enric Rodellas almost 2 years ago
- Target version changed from 7.11.0 to 7.12.0
Bernhard,
When I execute
docker compose up --detach
openatlas docker is stopped and I see log (Docker Desktop):
2023-02-16 21:42:07 /var/www/openatlas / 2023-02-16 21:42:08 Database does not exist 2023-02-16 21:42:08 Install necessary postgres extensions 2023-02-16 21:42:08 psql: error: could not connect to server: Connection refused 2023-02-16 21:42:08 Is the server running on host "postgres" (172.22.0.2) and accepting 2023-02-16 21:42:08 TCP/IP connections on port 5432? 2023-02-16 21:42:08 psql: error: could not connect to server: Connection refused 2023-02-16 21:42:08 Is the server running on host "postgres" (172.22.0.2) and accepting 2023-02-16 21:42:08 TCP/IP connections on port 5432?
My environment: Windows 10, WSL2, Docker Desktop, Pycharm, Powershell
If I rexecute, I got
2023-02-16 21:42:07 /var/www/openatlas / 2023-02-16 21:42:08 Database does not exist 2023-02-16 21:42:08 Install necessary postgres extensions 2023-02-16 21:42:08 psql: error: could not connect to server: Connection refused 2023-02-16 21:42:08 Is the server running on host "postgres" (172.22.0.2) and accepting 2023-02-16 21:42:08 TCP/IP connections on port 5432? 2023-02-16 21:42:08 psql: error: could not connect to server: Connection refused 2023-02-16 21:42:08 Is the server running on host "postgres" (172.22.0.2) and accepting 2023-02-16 21:42:08 TCP/IP connections on port 5432? 2023-02-16 21:47:42 ERROR: relation "web.settings" does not exist 2023-02-16 21:47:42 LINE 1: SELECT 1 FROM openatlas.web.settings 2023-02-16 21:47:42 ^ 2023-02-16 21:47:42 check_database.sh: line 24: OVERWRITE_DATABASE: unbound variable 2023-02-16 21:49:52 ERROR: relation "web.settings" does not exist 2023-02-16 21:49:52 LINE 1: SELECT 1 FROM openatlas.web.settings 2023-02-16 21:49:52 ^ 2023-02-16 21:49:52 check_database.sh: line 24: OVERWRITE_DATABASE: unbound variable 2023-02-16 21:47:42 /var/www/openatlas / 2023-02-16 21:47:42 Database already exists 2023-02-16 21:49:52 /var/www/openatlas / 2023-02-16 21:49:52 Database already exists
Updated by Bernhard Koschiček-Krombholz almost 2 years ago
- Target version changed from 7.12.0 to 7.11.0
Hi Enric,
Did you delete or rebuild your old image? In the newest develop version I deleted the variable OVERWRITE_DATABASE, that is why I think you are starting an old image.
Frist try to remove your old openatlas image. With
docker images
you see all your images and then delete the openatlas-openatlas image with
docker rmi <your-image-id>
If you have installed the necessary PyCharm Plugins (Docker), you can do it on the PyCharm GUI.
If this not work, you can do a rebuild.
docker compose up openatlas --detach --build
This should only rebuild openatlas.
Additionally, both containers are not lightweight, they need some time (like 5–10 seconds) to start. So it is normal, that the openatlas container need a restart because the postgis container need some time to get running.
Hope this helps.
Updated by Bernhard Koschiček-Krombholz almost 2 years ago
Andi and I rewrote the script. Please pull the newest develop version and run
docker compose up --detach --build
Everything should be rebuilt, and your database should not be overwritten.
Updated by Enric Rodellas almost 2 years ago
Bernard,
I don't get recovered my last dump following instructions uncommenting
# Uncomment to import SQL dump - ./files/export/dump.sql:/docker-entrypoint-initdb.d/dump.sql
and assuring (berfore executing) that ./files/export/dump.sql is last dump
Updated by Enric Rodellas almost 2 years ago
I think would be very useful to add some external port to acces to database. Specially for adminsitrative tasks.
I test:
ports: - "25432:5432"
inside postgres section
Updated by Bernhard Koschiček-Krombholz almost 2 years ago
Enric Rodellas wrote:
I don't get recovered my last dump following instructions uncommenting
With the last commit, I forgot to write a comment, that the installation scripts above has to be commented out. And you have to delete the /data/db folder or change the path of the variable:
./data/db:/var/lib/postgresql/data
Because, the scripts won't run if a database exists.
So to import a dump you have to do following steps:
- Delete or rename database path (e.g. ./data/db_dump:/var/lib/postgresql/data)
- Comment out installation scripts
# - ./install/extensions.sql:/docker-entrypoint-initdb.d/dump.sql # - ./install/1_structure.sql:/docker-entrypoint-initdb.d/1_structure.sql # - ./install/2_data_model.sql:/docker-entrypoint-initdb.d/2_data_model.sql # - ./install/3_data_web.sql:/docker-entrypoint-initdb.d/3_data_web.sql # - ./install/4_data_type.sql:/docker-entrypoint-initdb.d/4_data_type.sql
- Uncomment path to dump script
./files/export/dump.sql:/docker-entrypoint-initdb.d/dump.sql
- run docker compose up --detach --build
If the dump is quite large, it will take some time, and it may be, that you have to restart the postgis container.
Enric Rodellas wrote:
I think would be very useful to add some external port to acces to database. Specially for adminsitrative tasks.
I test:
[...]inside postgres section
Yes and no. For debugging reason, yes. But I don't know you this will interfere with other installation processes (e.g. kubernetes). I wrote it in the composer file and commented it.
In my point of view, the composer file is the file, where the user can and should add personal installation options. This is the place to customize your installation and therefore, I don't want to fill it up with things, that are not necessarily needed. It will soon get bloated.
Updated by Enric Rodellas almost 2 years ago
Bernhard,
Thank you very much for your notes.
I have carefully followed your instructions, ( but I can't initialize the database with the Dump file. In the process a Postgres BD is initialized, but does not create any of the openatlas tables and finally launch an error.
I comment and uncomment:
volumes: - ./data/db:/var/lib/postgresql/data # Installation of an empty database #- ./install/extensions.sql:/docker-entrypoint-initdb.d/dump.sql #- ./install/1_structure.sql:/docker-entrypoint-initdb.d/1_structure.sql #- ./install/2_data_model.sql:/docker-entrypoint-initdb.d/2_data_model.sql #- ./install/3_data_web.sql:/docker-entrypoint-initdb.d/3_data_web.sql #- ./install/4_data_type.sql:/docker-entrypoint-initdb.d/4_data_type.sql # Import dump (comment install section above out) - ./files/export/dump.sql:/docker-entrypoint-initdb.d/dump.sql
And this is the log in openatlas docker:
2023-02-22 18:56:04 Traceback (most recent call last): 2023-02-22 18:56:04 File "/var/www/openatlas/install/upgrade/database_upgrade.py", line 50, in <module> 2023-02-22 18:56:04 settings = Settings.get_settings(cursor) 2023-02-22 18:56:04 File "/var/www/openatlas/openatlas/database/settings.py", line 14, in get_settings 2023-02-22 18:56:04 cursor.execute("SELECT name, value FROM web.settings;") 2023-02-22 18:56:04 File "/usr/lib/python3/dist-packages/psycopg2/extras.py", line 146, in execute 2023-02-22 18:56:04 return super(DictCursor, self).execute(query, vars) 2023-02-22 18:56:04 psycopg2.errors.UndefinedTable: relation "web.settings" does not exist 2023-02-22 18:56:04 LINE 1: SELECT name, value FROM web.settings; 2023-02-22 18:56:04 ^
Updated by Bernhard Koschiček-Krombholz almost 2 years ago
Your dump file is named dump.sql and is in the folder ./files/export/ (this is in the OpenAtlas directory)?
The only way I get this error message is, that my dump.sql file doesn't exist.
So to import an SQL dump, please do the following things:
docker compose down
- Delete or rename (if you want to keep it) the database folder. In your case ./data/db/
- Move the dumped SQL file to ./files/export/.
- Either rename the .sql file to dump.sql or change this path to your filename - ./files/export/ dump.sql :/docker-entrypoint-initdb.d/dump.sql
docker compose up -d
If everything went well, the services should start automatically. We implemented a health check (in the develop branch, not main), so the openatlas-openatlas-1 container will not start, if the openatlas-postgres-1 container is unhealthy (not ready)
If the error still occurs, I can only ask for you dump file, so I can check if everything is ok with it.