Page 1 of 1

OpenKM on QNAP via Docker

PostPosted:Fri May 12, 2023 5:52 pm
by amer1
Hi everyone,

I started using a DMS in 2009. I migrated to OpenKM in 2017. I had been running OpenKM on a VM with 4G of memory for the last 6 years. My VMWare ESXi server is getting old and I need to replace it.

I decided to go small footprint via a 2-bay NAS. I picked the QNAP TS-262 since it had an Intel processor and same amount of memory I always gave OpenKM. This was my first NAS. However, it is Linux based and I was confident enough with my Linux skills to make it work somehow.

It turned out to be a smooth process. So much so, I thought I would post my notes for others if needed. The following is what I did.

For a new or factory reset unit, I accessed the NAS via a web browser and started the "Smart Start Installation".

Once logged in, opening "Storage and Snapshots", the welcome wizard gives choices of "storage pool and thick/thin volume" or "static volume". A "static volume" is easier on memory, so I canceled the default wizard and clicked "New Volume" and picked "Traditional Configuration" and followed the wizard for RAID 1.

From "Control Panel"->"Privelege"->"Users", using "Advanced Settings"->"Home Folder", I enabled home folders for the new volume.

Via "Control Panel"->"Network and File Services"->"Telnet / SSH", I enabled SSH by checking "Allow SSH Connection"

I opened "App Center" and after the wizard I then used the search in upper right to find "mariadb".

I installed "MariaDB 5" and when ready, opened it and configured via wizard. I made note of the root password.

I searched for and installed "Container Station". When ready, I open it and configure via wizard.

Using my favorite SSH client, I connected to the QNAP using the ID I created during the "Smart Start Installation". I switched to admin/root account via:
Code: Select all
sudo -i
I selected "Q" and respond "Y" for command prompt.

I needed a home for the admin account, using command:
Code: Select all
mkdir $HOME
I configureed "MariaDB 5" using "vi". Hitting "i" for insert then to save and quit, hitting the esc key and typing ":wq":
Code: Select all
vi /etc/config/my.cnf
Found and edited the "default-storage-engine" to be:
Code: Select all
default-storage-engine = innodb
Found the "[client]" section and added the line:
Code: Select all
default-character-set = utf8
Found the "[mysqld]" section and added the lines:
Code: Select all
character-set-server = utf8
collation-server = utf8_general_ci
Saved the file and quit. Restarted MariaDB via:
Code: Select all
/etc/init.d/mariadb5.sh stop; /etc/init.d/mariadb5.sh start
Entered the MariaDB console via:
Code: Select all
DEF_VOL=$(/sbin/getcfg SHARE_DEF defVolMP -f /etc/config/def_share.info)
$DEF_VOL/.qpkg/MariaDB5/bin/mysql -h localhost -u root -p
Checked the DB engine via:
Code: Select all
show engines;
InnoDB should be default with all features as "YES".

Created the OpemKM database via:
Code: Select all
CREATE DATABASE okmdb DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_bin;
Created the openkm account. Edited the password in the following command. Note the network location because containers run in a different subnet.
Code: Select all
CREATE USER openkm@'10.0.%' IDENTIFIED BY 'MyPassword';
Granted the account full access to the DB and exited via:
Code: Select all
GRANT ALL ON okmdb.* TO openkm@'10.0.%' WITH GRANT OPTION;
exit;
Pulled down the latest OpenKM image via:
Code: Select all
$DEF_VOL/.qpkg/container-station/bin/docker pull openkm/openkm-ce:latest
Created a container that forwards the NAS port 1080 to the container's port 8080.
Code: Select all
$DEF_VOL/.qpkg/container-station/bin/docker create --name openkm-ce-1 -p 1080:8080 openkm/openkm-ce
Got the local OpenKM config files and made a backup copy.
Code: Select all
cd ~
$DEF_VOL/.qpkg/container-station/bin/docker cp openkm-ce-1:/opt/tomcat/OpenKM.cfg OpenKM.cfg 
$DEF_VOL/.qpkg/container-station/bin/docker cp openkm-ce-1:/opt/tomcat/conf/server.xml server.xml
mkdir originals
cp * originals
ls -l originals
Edited the config file and commented (via #) out H2 and un-commented MySQL5. Make sure the "hibernate.hbm2ddl" line says "create".
Code: Select all
vi OpenKM.cfg
Edited the server file and commented (via <!-- and ..>) out the H2 driver and un-commented the MySQL driver. Replace localhost with the name or ip address of the NAS and edit the password for openkm.
Code: Select all
vi server.xml
Copy the config files back to the container via:
Code: Select all
$DEF_VOL/.qpkg/container-station/bin/docker cp OpenKM.cfg openkm-ce-1:/opt/tomcat/OpenKM.cfg 
$DEF_VOL/.qpkg/container-station/bin/docker cp server.xml openkm-ce-1:/opt/tomcat/conf/server.xml 
Start the container:
Code: Select all
$DEF_VOL/.qpkg/container-station/bin/docker start openkm-ce-1
Kept the SSH session open should I needed to make any corrections. I returned to the web page.

I open "Container Station" and clicked "openkm-ce-1" to open it. I could see the console messages.

If no issues, I accessed OpenKM via:

http://IPorDNSofNAS:1080

Once working, I opened settings for the "openkm-ce-1" container and enabled "Auto Start".

I was done!

Backups can be performed by these commands (modifying path and password as needed):
Code: Select all
DEF_VOL=$(/sbin/getcfg SHARE_DEF defVolMP -f /etc/config/def_share.info)
OPENKMDEST=$DEF_VOL/homes/shared/openkm
$DEF_VOL/.qpkg/container-station/bin/docker stop openkm-ce-1
rm -r $OPENKMDEST/repository
$DEF_VOL/.qpkg/container-station/bin/docker cp openkm-ce-1:/opt/tomcat/repository $OPENKMDEST
$DEF_VOL/.qpkg/MariaDB5/bin/mysqldump -h localhost -u root --password='MyPassword' okmdb > $OPENKMDEST/okmdb.sql
$DEF_VOL/.qpkg/container-station/bin/docker start openkm-ce-1
If anyone has any ideas for improvements or additions, please comment.

I wish to thank the OpenKM team for all their work and dedication over the years.

Amer1

Re: OpenKM on QNAP via Docker

PostPosted:Thu May 25, 2023 6:24 pm
by jllort
You are welcome amer1.