Wiki source code of Deploying on Ubuntu 22.04

Version 9.2 by D Tim Cummings on 2023/11/13 11:56

Show last authors
1 These are the steps used to set up a WebObjects deployment environment on Ubuntu 22.04 with Java 17. It does not install WebObjects or any frameworks because it is assumed they are bundled with any apps you deploy. Change the environment variables in the first step if you want different install location or different user that will run the WebObjects applications.  Regardless, you will have to at least change SERVER_NAME and SERVER_IP which are only examples and ones you would never use in practice.
2
3 == Set environment variables for your configuration to be used in following scripts ==
4
5 For example
6
7 {{code}}
8 export SERVER_NAME=woserver.example.com
9 export SERVER_IP=172.5.4.3
10 export WEBOBJECTS_GROUP=webobjects
11 export WEBOBJECTS_USER=webobjects
12 export NEXT_ROOT=/opt/webobjects
13 export URL_PART=apps
14 {{/code}}
15
16 The default behaviour is for URL_PART to be "cgi-bin". I prefer to use "apps" in my WebObjects URLs.
17
18 == Install Java 17 ==
19
20 {{code}}
21 sudo apt install openjdk-17-jdk-headless
22 {{/code}}
23
24 At time of writing this was build 17.0.8.1+1-Ubuntu-0ubuntu122.04.
25
26 == Add user and group ==
27
28 {{code}}
29 sudo groupadd $WEBOBJECTS_GROUP
30 sudo useradd -m -g $WEBOBJECTS_GROUP -s /bin/bash $WEBOBJECTS_USER
31 echo -e "export NEXT_ROOT=$NEXT_ROOT" | sudo tee /home/$WEBOBJECTS_USER/.bash_profile
32 {{/code}}
33
34 (% class="auto-cursor-target" %)
35 == Create directories ==
36
37 {{code}}
38 sudo mkdir -p /var/log/webobjects
39 sudo mkdir -p /etc/WebObjects/wotaskd
40 sudo mkdir -p /etc/WebObjects/JavaMonitor
41 {{/code}}
42
43 == Create configuration files ==
44
45 {{code}}
46 echo -e "\
47 WEBOBJECTS_GROUP=$WEBOBJECTS_GROUP\n\
48 WEBOBJECTS_USER=$WEBOBJECTS_USER\n\
49 NEXT_ROOT=$NEXT_ROOT\n\
50 JAVA_MONITOR_ARGS=\"-WOPort 56789\"\n\
51 WEBOBJECTS_URL=\n\
52 " | sudo tee /etc/default/webobjects
53
54 echo -e "\
55 er.extensions.WOHostUtilities.localhostips=($SERVER_IP)\n\
56 WOHost=$SERVER_IP\n\
57 " | sudo tee /etc/WebObjects/Properties
58
59 echo -e "WOHost=$SERVER_IP" | sudo tee /etc/WebObjects/wotaskd
60 echo -e "WOHost=$SERVER_IP" | sudo tee /etc/WebObjects/JavaMonitor
61 {{/code}}
62
63 (% class="auto-cursor-target" %)
64 == Set permissions ==
65
66 {{code}}
67 sudo chown -R $WEBOBJECTS_USER:$WEBOBJECTS_GROUP /var/log/webobjects
68 sudo chown -R $WEBOBJECTS_USER:$WEBOBJECTS_GROUP /etc/WebObjects
69 {{/code}}
70
71 (% class="auto-cursor-target" %)
72 == Install wotaskd and javamonitor from project wonder ==
73
74 {{code}}
75 sudo mkdir -p $NEXT_ROOT/Local/Library/WebObjects/JavaApplications
76 cd $NEXT_ROOT/Local/Library/WebObjects/JavaApplications
77
78 sudo wget https://jenkins.wocommunity.org/job/Wonder7/lastSuccessfulBuild/artifact/Root/Roots/wotaskd.tar.gz
79 sudo tar zpxf wotaskd.tar.gz
80 sudo rm wotaskd.tar.gz
81
82 sudo wget https://jenkins.wocommunity.org/job/Wonder7/lastSuccessfulBuild/artifact/Root/Roots/JavaMonitor.tar.gz
83 sudo tar zpxf JavaMonitor.tar.gz
84 sudo rm JavaMonitor.tar.gz
85
86 sudo chown -R $WEBOBJECTS_USER:$WEBOBJECTS_GROUP $NEXT_ROOT/Local
87 sudo mkdir -p $NEXT_ROOT/bin
88 cd $NEXT_ROOT/bin
89 sudo ln -s $NEXT_ROOT/Local/Library/WebObjects/JavaApplications/wotaskd.woa/wotaskd
90 sudo ln -s $NEXT_ROOT/Local/Library/WebObjects/JavaApplications/JavaMonitor.woa/JavaMonitor javamonitor
91
92 # Fix wotaskd and javamonitor to work with Java 17 if not already
93 sudo sed -i '2s/= $/= --add-exports=java.base/sun.security.action=ALL-UNNAMED/' $NEXT_ROOT/Local/Library/WebObjects/JavaApplications/wotaskd.woa/Contents/UNIX/UNIXClassPath.txt
94 sudo sed -i '2s/= $/= --add-exports=java.base/sun.security.action=ALL-UNNAMED/' $NEXT_ROOT/Local/Library/WebObjects/JavaApplications/javamonitor.woa/Contents/UNIX/UNIXClassPath.txt
95 {{/code}}
96
97 (% class="auto-cursor-target" %)
98 == Create services for wotaskd and javamonitor ==
99
100 {{code}}
101 echo -e "\
102 [Unit]\n\
103 Description=WebObjects/Wonder wotaskd\n\
104 Documentation=https://wiki.wocommunity.org/display/documentation/Wonder+JavaMonitor+and+wotaskd\n\
105 AssertPathExists=/var/log/webobjects\n\
106 AssertPathExists=$NEXT_ROOT/Local/Library/WebObjects/JavaApplications/wotaskd.woa\n\
107 After=network.target\n\
108 [Service]\n\
109 User=$WEBOBJECTS_USER\n\
110 Group=$WEBOBJECTS_GROUP\n\
111 Environment=NEXT_ROOT=$NEXT_ROOT\n\
112 Environment="JVM_OPTIONS=-Xms32m -Xmx64m -XX:NewSize=2m"\n\
113 ExecStart=$NEXT_ROOT/Local/Library/WebObjects/JavaApplications/wotaskd.woa/wotaskd -WOPort 1085 -Xms32m -Xmx64m >> /var/log/webobjects/wotaskd.log 2>&1\n\
114 Restart=on-failure\n\
115 RestartSec=5\n\
116 [Install]\n\
117 WantedBy=multi-user.target\n\
118 " | sudo tee /lib/systemd/system/wotaskd.service
119
120 echo -e "\
121 [Unit]\n\
122 Description=WebObjects/Wonder JavaMonitor\n\
123 Documentation=https://wiki.wocommunity.org/display/documentation/Wonder+JavaMonitor+and+wotaskd\n\
124 AssertPathExists=/var/log/webobjects\n\
125 AssertPathExists=$NEXT_ROOT/Local/Library/WebObjects/JavaApplications/JavaMonitor.woa\n\
126 After=wotaskd.service\n\
127 [Service]\n\
128 User=$WEBOBJECTS_USER\n\
129 Group=$WEBOBJECTS_GROUP\n\
130 Environment=NEXT_ROOT=$NEXT_ROOT\n\
131 Environment="JVM_OPTIONS=-Xms32m -Xmx64m -XX:NewSize=2m"\n\
132 ExecStart=$NEXT_ROOT/Local/Library/WebObjects/JavaApplications/JavaMonitor.woa/JavaMonitor -WOPort 56789 -Xms32m -Xmx64m >> /var/log/webobjects/javamonitor.log 2>&1\n\
133 Restart=on-failure\n\
134 RestartSec=5\n\
135 [Install]\n\
136 WantedBy=multi-user.target\n\
137 " | sudo tee /lib/systemd/system/javamonitor.service
138
139 sudo systemctl daemon-reload
140
141 sudo systemctl enable wotaskd
142 sudo systemctl start wotaskd
143 sudo systemctl status wotaskd
144
145 sudo systemctl start javamonitor
146 sudo systemctl status javamonitor
147 {{/code}}
148
149 (% class="auto-cursor-target" %)
150 == Install Apache HTTP Server (MPM prefork) ==
151
152 {{code}}
153 sudo apt install apache2 make apache2-dev
154 sudo a2dismod mpm_event
155 sudo a2enmod mpm_prefork
156 sudo a2enmod expires
157 sudo a2enmod ssl
158 sudo a2enmod rewrite
159
160 # Add ServerName to conf to avoid configtest errors
161 echo "ServerName $SERVER_NAME" | sudo tee /etc/apache2/conf-available/server-name.conf
162 sudo a2enconf server-name
163
164 # Install WebObjects adaptor
165 git clone https://github.com/wocommunity/wonder.git
166 cd wonder/Utilities/Adaptors
167 sed -i '107s/CGI Apache2.2/Apache2.4/' make.config
168 sed -i '9s/MACOS/LINUX/' make.config
169 make
170 cd Apache2.4
171 sudo apxs -i -a -n WebObjects mod_WebObjects.la
172 sudo cp apache.conf /etc/apache2/mods-available/WebObjects.conf
173 sudo sed -i "7s/^LoadModule/# LoadModule/" /etc/apache2/mods-available/WebObjects.conf
174 sudo sed -i "15,18s/cgi-bin/$URL_PART/" /etc/apache2/mods-available/WebObjects.conf
175 sudo sed -i "38s/localhost/$SERVER_IP/" /etc/apache2/mods-available/WebObjects.conf
176 sudo a2enmod WebObjects
177
178 # Create Apache virtual host
179 sudo mkdir -p /var/www/$SERVER_NAME
180 sudo ln -s $NEXT_ROOT/Local/Library/WebServer/Documents/WebObjects /var/www/$SERVER_NAME/WebObjects
181
182 echo -e "\
183 <VirtualHost *:80>\n\
184 ServerName $SERVER_NAME\n\
185 DocumentRoot /var/www/$SERVER_NAME\n\
186 <Directory />\n\
187 Require all denied\n\
188 </Directory>\n\
189 <Directory /var/www/$SERVER_NAME/>\n\
190 Options Indexes FollowSymLinks MultiViews\n\
191 AllowOverride None\n\
192 Require all granted\n\
193 </Directory>\n\
194 <IfModule mod_expires.c>\n\
195 ExpiresActive On\n\
196 ExpiresByType text/html "access 5 minutes"\n\
197 </IfModule>\n\
198 ErrorLog ${APACHE_LOG_DIR}/error_apps_$SERVER_NAME.log\n\
199 CustomLog ${APACHE_LOG_DIR}/access_apps_$SERVER_NAME.log combined\n\
200 </VirtualHost>\n\
201 " | sudo tee /etc/apache2/sites-available/$SERVER_NAME.conf
202
203 sudo a2ensite $SERVER_NAME.conf
204
205 sudo apachectl configtest
206 sudo systemctl restart apache2
207 {{/code}}
208
209 (% class="auto-cursor-target" %)
210 == Troubleshooting ==
211
212 {{code}}
213 # To test WOAdaptorInfo edit /etc/apache2/mods-available/WebObjects.conf and uncomment
214 WebObjectsAdminUsername public
215
216 #restart apache2
217 sudo systemctl restart apache2
218
219 #check in browser
220 http://woserver.example.com/apps/WebObjects/WOAdaptorInfo
221
222 #to turn on woadaptor logging
223 touch /tmp/logWebObjects
224
225 #might need to mkdir for adaptor logging
226 mkdir /Library
227 chown $WEBOBJECTS_USER:$WEBOBJECTS_GROUP /Library
228 {{/code}}
229
230 (% class="auto-cursor-target" %)
231 \\