Migration to Docker & Rcstack
1. Decide on components use
By default, RhodeCode stack uses Redis and Postgres. We recommend using those in Docker as things like backup/restore are much easier, and possible to run by our installer
If you plan to use your own redis or DB, disable those services in :file:`.custom/docker-compose-services.override.yaml` by setting replicas: 0
see: :ref:`configuration-of-components`
Select your DB type by commenting postgres or mysql db in :file:`.custom/docker-compose-services.override.yaml` For Sqlite, disable both DB types.
Note
Selecting your own Redis, DB etc would require pointing to those instance inside .ini config files. By default rcstack is configured to talk to docker based addresses of those services.
2. bootstrap the environment for rcstack
./rcstack init
During the install/configure phase pick corresponding edition (ce/ee) transfer your license-token, and domain used in previous setup.
Then ensure 4.28.0 version is set for proper migration
./rcstack cli set-image 4.28.0
4. launch services stack
Launch the service stack with Database and all required services
./rcstack stack services up -d
Check the status of service stack by checking the status command
./rcstack status Running hostname: https://code.rhodecode.com CONTAINER ID NAMES IMAGE STATUS PORTS 5746f723d892 rc_cluster_services-channelstream-1 channelstream/channelstream:0.7.1 Up About a minute (healthy) 8000/tcp bef9599eef0c rc_cluster_services-database-1 postgres:14.9 Up About a minute (healthy) 5432/tcp addf574b6f1c rc_cluster_services-elasticsearch-1 elasticsearch:6.8.23 Up About a minute (healthy) 9200/tcp, 9300/tcp 9f89816cc6dc rc_cluster_services-nginx-errors-1 nginx:1.25.2 Up About a minute 80/tcp 1c8e90e8ab7d rc_cluster_services-nginx-statics-1 nginx:1.25.2 Up About a minute (health) 80/tcp fcb8378cd506 rc_cluster_services-redis-1 redis:7.0.12 Up About a minute (healthy) 6379/tcp
5. make a db dump
Note
Run this only if docker-based DB is selected. Skip otherwise
create a backup of your existing database, so it can be migrated to docker instance. Place the backup file into :file:`.custom/db_dump`
# For MySQL DBs $ mysqldump -u <uname> -p <pass> rhodecode_db_name > .custom/db_dump/mysql-db-backup.sql # For PostgreSQL DBs $ PGPASSWORD=<pass> pg_dump --inserts -U <uname> -h localhost rhodecode_db_name > .custom/db_dump/postgresql-db-backup.sql # For SQLite $ sqlite3 rhodecode.db ‘.dump’ > .custom/db_dump/sqlite-db-backup.sql
6. restore db
Note
Run this only if docker-based DB is selected. Skip otherwise
Cleanup previous db created by init script, and re-create it. Restore the database into docker container running DB. Run the ./rcstack cli db command:
./rcstack cli db attaching pg_data under: /var/lib/postgresql/data attaching $PWD/.custom/db_dump under: /var/rc-data-dump restore dump: \i /var/rc-data-dump/your_dump.sql psql (14.9 (Debian 14.9-1.pgdg120+1)) Type "help" for help. rhodecode=# \connect template1 template1=# drop database rhodecode; template1=# create database rhodecode; template1=# \connect rhodecode rhodecode=# \i /var/rc-data-dump/postgresql-db-backup.sql
This will restore the previously stored DB dump into new dockerized DB.
7. move data into docker storage
Step one is to move the required components to the :file:`.custom/storage` directory inside the docker compose stack. This directory is mounted later on so data can be copied over into docker storage engine volumes.
Note
The tarball cache can be omitted since RhodeCode uses a new system which is not compatible with older release
Note
The path for artifacts can be found inside the old .ini file and DB
#artifacts, %(here)s is current location of old .ini file file_store.storage_path = %(here)s/data/file_store
7.1. Copy artifacts into docker shared dir
mv -v .rccontrol/enterprise-1/data/file_store .custom/storage/
7.2. Copy gists into docker shared dir
mv -v /home/rhodecode/repos/.gist .custom/storage/repos/.gist
7.3. Copy repositories into docker shared dir
mv -v /home/rhodecode/repos .custom/storage/
Once that is done, we can now move from the host directory into docker storage engine volumes.
./rcstack cli storage attaching rc_datavolume under: /vol/datavolume attaching rc_reposvolume under: /vol/repovolume attaching $PWD/.custom/storage under: /vol/backupvolume root@a27697d13f44:/vol#
7.4. Move artifacts
root@a27697d13f44:/vol# mv /vol/backupvolume/repos/* /vol/repovolume/
7.5. Move gists
root@a27697d13f44:/vol# mv /vol/backupvolume/repos/.rc_gist_store /vol/repovolume/.rc_gist_store
7.6. Move repositories
# defined in rhodecode.ini as file_store.storage_path = /path/to/artifacts root@a27697d13f44:/vol# mv /vol/backupvolume/artifacts/* /vol/repovolume/
7.7 Make sure proper permissions are set on the storage files, group/user is 999
root@a27697d13f44:/vol# chown -R 999:999 /vol/repovolume
8. Ensure other old services are stopped
At this point we're going to run the whole stack, because the router binds to some of the common ports, we need to make sure old db/nginx are stopped before we proceed.
It's also important to stop running RhodeCode services.
This is where a first downtime of previously ran setup would occur.
9. Start complete stack
./rcstack stack all up -d
10. Fix DB paths
Docker internally changed the paths used before, he're a way to change it using ishell. But this can be also adjusted in the UI
./rcstack cli ishell
ui1 = RhodeCodeUi.query().filter(RhodeCodeUi.ui_key=='usercache').scalar() ui2 = RhodeCodeUi.query().filter(RhodeCodeUi.ui_key=='store_location').scalar() ui3 = RhodeCodeUi.query().filter(RhodeCodeUi.ui_key=='/').scalar() ui1.ui_value = '/var/opt/rhodecode_repo_store/.cache/largefiles' ui2.ui_value = '/var/opt/rhodecode_repo_store/.cache/lfs_store' ui3.ui_value = '/var/opt/rhodecode_repo_store' Session().add(ui1);Session().commit() Session().add(ui2);Session().commit() Session().add(ui3);Session().commit()
11. Adjust SVN Proxy
When migrating from 4.X to 5.0.X:
Go to the VCS config from the :menuselection:`Admin --> Settings --> VCS`
- Select Proxy subversion HTTP requests checkbox
- Enter http://svn:8090 into Subversion HTTP Server URL
- Click the Generate Apache Config button. This is an important step to ensure the apache file gets updates for 5.X changes
When migrating from 4.X to 5.1.X+:
Go to the VCS config from the :menuselection:`Admin --> Settings --> VCS`
- Apache proxy URL is configured via :file:`config/_shared/rhodecode.ini` file since 5.1 release
- Click the Generate Apache Config button. This is an important step to ensure the apache file gets updates for 5.X changes
12. Run full remap & rescan
From RhodeCode web-interface, the last step is to run a full remap & rescan action.
- From the RhodeCode Web interface, open :menuselection:`Admin --> Settings --> Remap and rescan`
- Select :guilabel:`Invalidate cache for all repositories` to ensure we cleanup old caches from previous installs
- Click :guilabel:`Rescan Repositories` action
SSL Certificates
- see: :ref:`configuration-of-ssl-certificates`