Project

General

Profile

Upgrade 2204 » History » Version 16

Enis Nuredini, 09.01.2024 14:04

1 14 Carsten Rose
{{toc}}
2
3
4 2 Enis Nuredini
h1. Docker Upgrade - Ubuntu 22-04
5 1 Enis Nuredini
6
h2. New docker container
7
8 9 Enis Nuredini
It is recommended to create a new docker container with the new typo3 docker branch *ubuntu22* instead of upgrading an existing one. 
9 1 Enis Nuredini
How to clone the specific branch:
10
<pre>
11
git clone -b ubuntu22 https://git.math.uzh.ch/typo3/typo3-docker.git
12
</pre>
13
14
h2. Upgrading existing docker
15
16 10 Enis Nuredini
Manual to upgrade an existing docker container and setting up websocket server.
17 7 Enis Nuredini
18 8 Enis Nuredini
*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.
19 1 Enis Nuredini
<pre>
20
1. At least Ubuntu 22.04 needs to be installed in docker container. (Usually done inside Dockerfile.nginx):
21
FROM ubuntu:22.04
22
23
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:
24
ENV DEBIAN_FRONTEND=noninteractive
25
RUN apt-get update && \
26
    apt-get install -y tzdata && \
27
    ln -fs /usr/share/zoneinfo/Europe/Zurich /etc/localtime && \
28
    dpkg-reconfigure --frontend noninteractive tzdata
29
30
31 3 Enis Nuredini
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:
32 1 Enis Nuredini
# Manually install libssl1.1
33
RUN wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.0g-2ubuntu4_amd64.deb
34
RUN dpkg -i libssl1.1_1.1.0g-2ubuntu4_amd64.deb
35
36 15 Enis Nuredini
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/) 
37
38 4 Enis Nuredini
2. Best practice is to expose the websocket port in the dockerfile (Dockerfile.nginx), it should be added before the services start, example: 
39 1 Enis Nuredini
EXPOSE 8090
40
CMD service php8.1-fpm start && service ssh start && nginx
41
42
43
3. Add new websocket port (8090) to nginx webserver in Dockerfile, example:
44
  nginx:
45
    image: webserver
46
    build: 
47
      dockerfile: Dockerfile.nginx
48
    ports:
49
      - "46301:46301"
50
      - "51301:51301"
51
      - "44909:22"
52
      - "8090:8090"         <------ Websocket port
53
54
4. nginx config file adjustments, add following proxy:
55
	location /ws {
56
        proxy_pass http://mydomain:8090;
57
        proxy_http_version 1.1;
58
        proxy_set_header Upgrade $http_upgrade;
59
        proxy_set_header Connection "upgrade";
60
        proxy_set_header Host $host;
61
    }
62
63 5 Enis Nuredini
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:
64 1 Enis Nuredini
# New xdebug 3 version:
65
xdebug.mode = debug
66
xdebug.start_with_request = yes
67 16 Enis Nuredini
xdebug.client_port = 51301               <------------- Here should stay your xDebug port!
68 1 Enis Nuredini
xdebug.discover_client_host = 1
69
xdebug.max_nesting_level = 400
70
#xdebug.log=/var/log/apache2/xdebug.log
71
72
73
6. Start/Restart (Build first time) the docker container.
74
75
7. Set the configured websocket port and websocket url in QFQ Config, examples:
76
websocketPort: 8090
77
websocketUrl: ws://mydomain:46301/ws
78
79
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.
80 12 Enis Nuredini
</pre>
81 11 Enis Nuredini
82 13 Enis Nuredini
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.