Project

General

Profile

Actions

Docker Upgrade - Ubuntu 22-04

New docker container

It is recommended to create a new docker container with the new typo3 docker branch ubuntu22 instead of upgrading an existing one.
How to clone the specific branch:

git clone -b ubuntu22 https://git.math.uzh.ch/typo3/typo3-docker.git

Upgrading from T3 V10 to V11 - keeping pages and tt_content. Use following querys to select the T3 V11 compatible columns and export them for your new T3 instance:

SELECT uid, pid, tstamp, crdate, cruser_id, deleted, hidden, starttime, endtime,
    fe_group, sorting, rowDescription, editlock, sys_language_uid, l10n_parent,
    l10n_source, l10n_state, t3_origuid, l10n_diffsource, t3ver_oid, t3ver_wsid,
    t3ver_state, t3ver_stage, perms_userid, perms_groupid, perms_user, perms_group,
    perms_everybody, title, slug, doktype, TSconfig, is_siteroot, php_tree_stop, url,
    shortcut, shortcut_mode, subtitle, layout, target, media, lastUpdated, keywords,
    cache_timeout, cache_tags, newUntil, description, no_search, SYS_LASTCHANGED,
    abstract, module, extendToSubpages, author, author_email, nav_title, nav_hide,
    content_from_pid, mount_pid, mount_pid_ol, l18n_cfg, fe_login_mode, backend_layout,
    backend_layout_next_level, tsconfig_includes, categories FROM pages;

SELECT uid, rowDescription, pid, tstamp, crdate, cruser_id, deleted, hidden,
    starttime, endtime, fe_group, sorting, editlock, sys_language_uid,
    l18n_parent, l10n_source, l10n_state, t3_origuid, l18n_diffsource,
    t3ver_oid, t3ver_wsid, t3ver_state, t3ver_stage, CType, header,
    header_position, bodytext, bullets_type, uploads_description,
    uploads_type, assets, image, imagewidth, imageorient, imagecols,
    imageborder, media, layout, frame_class, cols, space_before_class,
    space_after_class, records, pages, colPos, subheader, header_link,
    image_zoom, header_layout, list_type, sectionIndex, linkToTop,
    file_collections, filelink_size, filelink_sorting,
    filelink_sorting_direction, target, date, `recursive`, imageheight,
    pi_flexform, accessibility_title, accessibility_bypass,
    accessibility_bypass_text, selected_categories, category_field,
    table_class, table_caption, table_delimiter, table_enclosure,
    table_header_position, table_tfoot, categories FROM tt_content;

Upgrading existing docker

Manual to upgrade an existing docker container and setting up websocket server.

Caution: The used websocket port 8090 in this manual is only an example. Please use a port number which is not already used from others on the same server.

1. At least Ubuntu 22.04 needs to be installed in docker container. (Usually done inside Dockerfile.nginx):
FROM ubuntu:22.04

1.1 Add the following to the top of your docker file (after FROM ubuntu:22.04) if it does not already exist. It defines the timezone configurations for the ubuntu 22.04 installation:
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
    apt-get install -y tzdata && \
    ln -fs /usr/share/zoneinfo/Europe/Zurich /etc/localtime && \
    dpkg-reconfigure --frontend noninteractive tzdata

1.2(optional) If you are using wkhtmltopdf 0.12.6-1, you will need to manually install libssl1.1 in the docker file before wkhtmltopdf is installed. Reason: libssl1.1 is no longer included in Ubuntu 22.04:
# Manually install libssl1.1
RUN wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.0g-2ubuntu4_amd64.deb
RUN dpkg -i libssl1.1_1.1.0g-2ubuntu4_amd64.deb

1.3 Change all path entries which has *7.4* to *8.1* in files Dockerfile.nginx, docker-compose.yml and default.conf (docker/sites-available/) 

2. Best practice is to expose the websocket port in the dockerfile (Dockerfile.nginx), it should be added before the services start, example: 
EXPOSE 8090
CMD service php8.1-fpm start && service ssh start && nginx

3. Add new websocket port (8090) to nginx webserver in Dockerfile, example:
  nginx:
    image: webserver
    build: 
      dockerfile: Dockerfile.nginx
    ports:
      - "46301:46301" 
      - "51301:51301" 
      - "44909:22" 
      - "8090:8090"         <------ Websocket port

4. nginx config file adjustments, add following proxy:
    location /ws {
        proxy_pass http://mydomain:8090;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }

4.1 apache ssl config file:
  Modules:
  sudo a2enmod proxy
  sudo a2enmod proxy_wstunnel

  # Enable the necessary proxy modules for websocket
  ProxyRequests Off
  ProxyPreserveHost On
  ProxyPass /ws ws://localhost:8090
  ProxyPassReverse /ws ws://localhost:8090

5.(optional) If you upgrade your docker from an older version of ubuntu, your xdebug configuration may not work anymore. 
Adjustments are needed in the .ini file (99-math.ini), replace the existing xdebug configuration with this one:
# New xdebug 3 version:
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.client_port = 51301               <------------- Here should stay your xDebug port!
xdebug.discover_client_host = 1
xdebug.max_nesting_level = 400
#xdebug.log=/var/log/apache2/xdebug.log

6. Start/Restart (Build first time) the docker container.

7. Set the configured websocket port and websocket url in QFQ Config, examples:
websocketPort: 8090
websocketUrl: ws://mydomain:46301/ws

8. If websocketPort is set in qfq config, the websocket server should start automatically the first time a web page with qfq content is loaded.

9. If you are upgrading the qfq extension (new with FE Chat) in an already existing project, then you need to add the new enum value chat to the column type from the FormElement table.

Debugging when using a browser on a laptop

With this settings

xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.client_port = 51301               <------------- Here should stay your xDebug port!
xdebug.discover_client_host = 1
xdebug.max_nesting_level = 400

xdebug assumes that PhpStorm runs on the same machine as the browser and gets the IP address from the HTTP header. This is due to xdebug.discover_client_host=1. If the browser runs on a different machine, then we have to tell xdebug where PhpStorm is located:
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.client_port = 51301               <------------- Here should stay your xDebug port!
xdebug.client_host = 192.168.133.210     <------------- assuming PhpStorm runs on tl10; use 192.168.133.20X for tlX with X=1,...,9
xdebug.max_nesting_level = 400

Drawback: you have to update 99-math.ini configuration file each time your tl-agent changes...

Updated by Carsten Rose 20 days ago · 22 revisions