Repository files navigation

Web

Web-facing tool/page development

Setting up an instance of TM's databases and web front end

The server should be running an instance of a MariaDB server (10.11.7 as of this writing) and the apache web server (2.4.59 as of this writing). The web server needs to have PHP enabled (version 7.4.30 as of this writing) with the mysqli, ctype, and json extensions, and mod_php74 to get the loadable module. The remaining instructions assume apache, MariaDB, and PHP are all working together properly. On FreeBSD, this involved installing the correct packages.

Note: the MySQL server needs to override the group_concat_max_len parameter to be the maximum length of any comma-separated list of users that might be returned by a GROUP_CONCAT. This is currently set to 10000 on the production server.

MySQL database

First, create the users needed for the database. Connect and authenticate as root to the MySQL server. Create passwords for an account that will have permission to administer the TM database that will be used for database updates and an account that will have only read permission that will be used by the web front end. In the example below, these use the TM default names "travmapadmin" and "travmap".

CREATE USER 'travmapadmin'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOURPASSWORDFORTHISUSER';
CREATE USER 'travmap'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOURPASSWORDFORTHISUSER';

To be able to update the database remotely by ssh, a file ~/.my.cnf can be created on the server with the password for travmapadmin:

[clienttmapadmin]
password = YOURPASSWORDFORTHISUSER

Be sure the permissions are 600, so only readable by the user.

Next, we create the database and give these users needed permissions.

CREATE DATABASE TravelMapping CHARACTER SET = 'utf8mb4';
GRANT SELECT ON `TravelMapping`.* TO 'travmap'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, REFERENCES ON `TravelMapping`.* TO 'travmapadmin'@'localhost';

If you have a TravelMapping-[timestamp].sql file (generated by the site update process), you can now try to use it to populate the TravelMapping database.

mysql --defaults-group-suffix=tmapadmin -u travmapadmin TravelMapping < TravelMapping-[timestamp].sql

Normally, the above will be run as part of the site update process but it is done here as a way to test the database setup.

The TM production server has two database instances so there's (almost) always a fully-populated one from which the site can run, even when the other is being updated. To do create the second, the above steps would be repeated for another database instance named TravelMappingCopy.

Web server files

The files in this Web repository should be placed in a directory served by the web server. We assume /home/www/tm and a vhosts entry that Apache uses to direct a URL to use files from this location. The updateserver.sh can help populate and later update this directory. Note that the fonts directory is not updated by this script, and those files will need to be transferred separately.

In addition to the files in the repository, the file lib/tm.conf needs to be created. This file contains eight lines:

Line 1: DB name (likely TravelMapping)
Line 2: DB read-only user (likely travmap)
Line 3: DB read-only user password
Line 4: DB hostname (likely localhost or 127.0.0.1)
Line 5: HERE map id
Line 6: HERE map code
Line 7: ThunderForest map key
Line 8: MapBox token

This file needs to be readable by the web server but should not be served by the web server. Configure Apache to ensure this. There are various ways to accomplish this. On the TM production server, this is done with this global directive in httpd.conf:

<Files "tm.conf*">
Require all denied
</Files>

Note that the wildcard match is needed, as tm.conf on the server is a symbolic link created by siteupdate.sh which points to either tm.conf.updating (during a site update that is affecting the primary database) or tm.conf.standard (when no site update is in progress, or when the primary database has finished being populated and the database copy is being updated).

Also create a file motd in the root directory of the server. This is the "message of the day" for TM.

Create a directory named cache in the shields directory. This needs to be writable by the web server.

TM's maps are provided by the Leaflet library, various options for map tiles come through leaflet-providers, and some of our waypoint markers (in HDX, so not part of a standalone TM installation) come from BeautifyMarker. The JS files for these should be placed into a location so they can be read by the code generated by tm_common_js in lib/tmphpfuncs.php.

Now test it out. Hopefully everything will work!

About

Web-facing tool/page development

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Web

Web-facing tool/page development

Setting up an instance of TM's databases and web front end

The server should be running an instance of a MariaDB server (10.11.7 as of this writing) and the apache web server (2.4.59 as of this writing). The web server needs to have PHP enabled (version 7.4.30 as of this writing) with the mysqli, ctype, and json extensions, and mod_php74 to get the loadable module. The remaining instructions assume apache, MariaDB, and PHP are all working together properly. On FreeBSD, this involved installing the correct packages.

Note: the MySQL server needs to override the group_concat_max_len parameter to be the maximum length of any comma-separated list of users that might be returned by a GROUP_CONCAT. This is currently set to 10000 on the production server.

MySQL database

First, create the users needed for the database. Connect and authenticate as root to the MySQL server. Create passwords for an account that will have permission to administer the TM database that will be used for database updates and an account that will have only read permission that will be used by the web front end. In the example below, these use the TM default names "travmapadmin" and "travmap".

CREATE USER 'travmapadmin'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOURPASSWORDFORTHISUSER';
CREATE USER 'travmap'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOURPASSWORDFORTHISUSER';

To be able to update the database remotely by ssh, a file ~/.my.cnf can be created on the server with the password for travmapadmin:

[clienttmapadmin]
password = YOURPASSWORDFORTHISUSER

Be sure the permissions are 600, so only readable by the user.

Next, we create the database and give these users needed permissions.

CREATE DATABASE TravelMapping CHARACTER SET = 'utf8mb4';
GRANT SELECT ON `TravelMapping`.* TO 'travmap'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, REFERENCES ON `TravelMapping`.* TO 'travmapadmin'@'localhost';

If you have a TravelMapping-[timestamp].sql file (generated by the site update process), you can now try to use it to populate the TravelMapping database.

mysql --defaults-group-suffix=tmapadmin -u travmapadmin TravelMapping < TravelMapping-[timestamp].sql

Normally, the above will be run as part of the site update process but it is done here as a way to test the database setup.

The TM production server has two database instances so there's (almost) always a fully-populated one from which the site can run, even when the other is being updated. To do create the second, the above steps would be repeated for another database instance named TravelMappingCopy.

Web server files

The files in this Web repository should be placed in a directory served by the web server. We assume /home/www/tm and a vhosts entry that Apache uses to direct a URL to use files from this location. The updateserver.sh can help populate and later update this directory. Note that the fonts directory is not updated by this script, and those files will need to be transferred separately.

In addition to the files in the repository, the file lib/tm.conf needs to be created. This file contains eight lines:

Line 1: DB name (likely TravelMapping)
Line 2: DB read-only user (likely travmap)
Line 3: DB read-only user password
Line 4: DB hostname (likely localhost or 127.0.0.1)
Line 5: HERE map id
Line 6: HERE map code
Line 7: ThunderForest map key
Line 8: MapBox token

This file needs to be readable by the web server but should not be served by the web server. Configure Apache to ensure this. There are various ways to accomplish this. On the TM production server, this is done with this global directive in httpd.conf:

<Files "tm.conf*">
Require all denied
</Files>

Note that the wildcard match is needed, as tm.conf on the server is a symbolic link created by siteupdate.sh which points to either tm.conf.updating (during a site update that is affecting the primary database) or tm.conf.standard (when no site update is in progress, or when the primary database has finished being populated and the database copy is being updated).

Also create a file motd in the root directory of the server. This is the "message of the day" for TM.

Create a directory named cache in the shields directory. This needs to be writable by the web server.

TM's maps are provided by the Leaflet library, various options for map tiles come through leaflet-providers, and some of our waypoint markers (in HDX, so not part of a standalone TM installation) come from BeautifyMarker. The JS files for these should be placed into a location so they can be read by the code generated by tm_common_js in lib/tmphpfuncs.php.

Now test it out. Hopefully everything will work!

About

Web-facing tool/page development

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Web

Web-facing tool/page development

Setting up an instance of TM's databases and web front end

The server should be running an instance of a MariaDB server (10.11.7 as of this writing) and the apache web server (2.4.59 as of this writing). The web server needs to have PHP enabled (version 7.4.30 as of this writing) with the mysqli, ctype, and json extensions, and mod_php74 to get the loadable module. The remaining instructions assume apache, MariaDB, and PHP are all working together properly. On FreeBSD, this involved installing the correct packages.

Note: the MySQL server needs to override the group_concat_max_len parameter to be the maximum length of any comma-separated list of users that might be returned by a GROUP_CONCAT. This is currently set to 10000 on the production server.

MySQL database

First, create the users needed for the database. Connect and authenticate as root to the MySQL server. Create passwords for an account that will have permission to administer the TM database that will be used for database updates and an account that will have only read permission that will be used by the web front end. In the example below, these use the TM default names "travmapadmin" and "travmap".

CREATE USER 'travmapadmin'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOURPASSWORDFORTHISUSER';
CREATE USER 'travmap'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOURPASSWORDFORTHISUSER';

To be able to update the database remotely by ssh, a file ~/.my.cnf can be created on the server with the password for travmapadmin:

[clienttmapadmin]
password = YOURPASSWORDFORTHISUSER

Be sure the permissions are 600, so only readable by the user.

Next, we create the database and give these users needed permissions.

CREATE DATABASE TravelMapping CHARACTER SET = 'utf8mb4';
GRANT SELECT ON `TravelMapping`.* TO 'travmap'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, REFERENCES ON `TravelMapping`.* TO 'travmapadmin'@'localhost';

If you have a TravelMapping-[timestamp].sql file (generated by the site update process), you can now try to use it to populate the TravelMapping database.

mysql --defaults-group-suffix=tmapadmin -u travmapadmin TravelMapping < TravelMapping-[timestamp].sql

Normally, the above will be run as part of the site update process but it is done here as a way to test the database setup.

The TM production server has two database instances so there's (almost) always a fully-populated one from which the site can run, even when the other is being updated. To do create the second, the above steps would be repeated for another database instance named TravelMappingCopy.

Web server files

The files in this Web repository should be placed in a directory served by the web server. We assume /home/www/tm and a vhosts entry that Apache uses to direct a URL to use files from this location. The updateserver.sh can help populate and later update this directory. Note that the fonts directory is not updated by this script, and those files will need to be transferred separately.

In addition to the files in the repository, the file lib/tm.conf needs to be created. This file contains eight lines:

Line 1: DB name (likely TravelMapping)
Line 2: DB read-only user (likely travmap)
Line 3: DB read-only user password
Line 4: DB hostname (likely localhost or 127.0.0.1)
Line 5: HERE map id
Line 6: HERE map code
Line 7: ThunderForest map key
Line 8: MapBox token

This file needs to be readable by the web server but should not be served by the web server. Configure Apache to ensure this. There are various ways to accomplish this. On the TM production server, this is done with this global directive in httpd.conf:

<Files "tm.conf*">
Require all denied
</Files>

Note that the wildcard match is needed, as tm.conf on the server is a symbolic link created by siteupdate.sh which points to either tm.conf.updating (during a site update that is affecting the primary database) or tm.conf.standard (when no site update is in progress, or when the primary database has finished being populated and the database copy is being updated).

Also create a file motd in the root directory of the server. This is the "message of the day" for TM.

Create a directory named cache in the shields directory. This needs to be writable by the web server.

TM's maps are provided by the Leaflet library, various options for map tiles come through leaflet-providers, and some of our waypoint markers (in HDX, so not part of a standalone TM installation) come from BeautifyMarker. The JS files for these should be placed into a location so they can be read by the code generated by tm_common_js in lib/tmphpfuncs.php.

Now test it out. Hopefully everything will work!

About

Web-facing tool/page development

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Web

Web-facing tool/page development

Setting up an instance of TM's databases and web front end

The server should be running an instance of a MariaDB server (10.11.7 as of this writing) and the apache web server (2.4.59 as of this writing). The web server needs to have PHP enabled (version 7.4.30 as of this writing) with the mysqli, ctype, and json extensions, and mod_php74 to get the loadable module. The remaining instructions assume apache, MariaDB, and PHP are all working together properly. On FreeBSD, this involved installing the correct packages.

Note: the MySQL server needs to override the group_concat_max_len parameter to be the maximum length of any comma-separated list of users that might be returned by a GROUP_CONCAT. This is currently set to 10000 on the production server.

MySQL database

First, create the users needed for the database. Connect and authenticate as root to the MySQL server. Create passwords for an account that will have permission to administer the TM database that will be used for database updates and an account that will have only read permission that will be used by the web front end. In the example below, these use the TM default names "travmapadmin" and "travmap".

CREATE USER 'travmapadmin'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOURPASSWORDFORTHISUSER';
CREATE USER 'travmap'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOURPASSWORDFORTHISUSER';

To be able to update the database remotely by ssh, a file ~/.my.cnf can be created on the server with the password for travmapadmin:

[clienttmapadmin]
password = YOURPASSWORDFORTHISUSER

Be sure the permissions are 600, so only readable by the user.

Next, we create the database and give these users needed permissions.

CREATE DATABASE TravelMapping CHARACTER SET = 'utf8mb4';
GRANT SELECT ON `TravelMapping`.* TO 'travmap'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, REFERENCES ON `TravelMapping`.* TO 'travmapadmin'@'localhost';

If you have a TravelMapping-[timestamp].sql file (generated by the site update process), you can now try to use it to populate the TravelMapping database.

mysql --defaults-group-suffix=tmapadmin -u travmapadmin TravelMapping < TravelMapping-[timestamp].sql

Normally, the above will be run as part of the site update process but it is done here as a way to test the database setup.

The TM production server has two database instances so there's (almost) always a fully-populated one from which the site can run, even when the other is being updated. To do create the second, the above steps would be repeated for another database instance named TravelMappingCopy.

Web server files

The files in this Web repository should be placed in a directory served by the web server. We assume /home/www/tm and a vhosts entry that Apache uses to direct a URL to use files from this location. The updateserver.sh can help populate and later update this directory. Note that the fonts directory is not updated by this script, and those files will need to be transferred separately.

In addition to the files in the repository, the file lib/tm.conf needs to be created. This file contains eight lines:

Line 1: DB name (likely TravelMapping)
Line 2: DB read-only user (likely travmap)
Line 3: DB read-only user password
Line 4: DB hostname (likely localhost or 127.0.0.1)
Line 5: HERE map id
Line 6: HERE map code
Line 7: ThunderForest map key
Line 8: MapBox token

This file needs to be readable by the web server but should not be served by the web server. Configure Apache to ensure this. There are various ways to accomplish this. On the TM production server, this is done with this global directive in httpd.conf:

<Files "tm.conf*">
Require all denied
</Files>

Note that the wildcard match is needed, as tm.conf on the server is a symbolic link created by siteupdate.sh which points to either tm.conf.updating (during a site update that is affecting the primary database) or tm.conf.standard (when no site update is in progress, or when the primary database has finished being populated and the database copy is being updated).

Also create a file motd in the root directory of the server. This is the "message of the day" for TM.

Create a directory named cache in the shields directory. This needs to be writable by the web server.

TM's maps are provided by the Leaflet library, various options for map tiles come through leaflet-providers, and some of our waypoint markers (in HDX, so not part of a standalone TM installation) come from BeautifyMarker. The JS files for these should be placed into a location so they can be read by the code generated by tm_common_js in lib/tmphpfuncs.php.

Now test it out. Hopefully everything will work!

About

Web-facing tool/page development

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Web

Web-facing tool/page development

Setting up an instance of TM's databases and web front end

The server should be running an instance of a MariaDB server (10.11.7 as of this writing) and the apache web server (2.4.59 as of this writing). The web server needs to have PHP enabled (version 7.4.30 as of this writing) with the mysqli, ctype, and json extensions, and mod_php74 to get the loadable module. The remaining instructions assume apache, MariaDB, and PHP are all working together properly. On FreeBSD, this involved installing the correct packages.

Note: the MySQL server needs to override the group_concat_max_len parameter to be the maximum length of any comma-separated list of users that might be returned by a GROUP_CONCAT. This is currently set to 10000 on the production server.

MySQL database

First, create the users needed for the database. Connect and authenticate as root to the MySQL server. Create passwords for an account that will have permission to administer the TM database that will be used for database updates and an account that will have only read permission that will be used by the web front end. In the example below, these use the TM default names "travmapadmin" and "travmap".

CREATE USER 'travmapadmin'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOURPASSWORDFORTHISUSER';
CREATE USER 'travmap'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOURPASSWORDFORTHISUSER';

To be able to update the database remotely by ssh, a file ~/.my.cnf can be created on the server with the password for travmapadmin:

[clienttmapadmin]
password = YOURPASSWORDFORTHISUSER

Be sure the permissions are 600, so only readable by the user.

Next, we create the database and give these users needed permissions.

CREATE DATABASE TravelMapping CHARACTER SET = 'utf8mb4';
GRANT SELECT ON `TravelMapping`.* TO 'travmap'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, REFERENCES ON `TravelMapping`.* TO 'travmapadmin'@'localhost';

If you have a TravelMapping-[timestamp].sql file (generated by the site update process), you can now try to use it to populate the TravelMapping database.

mysql --defaults-group-suffix=tmapadmin -u travmapadmin TravelMapping < TravelMapping-[timestamp].sql

Normally, the above will be run as part of the site update process but it is done here as a way to test the database setup.

The TM production server has two database instances so there's (almost) always a fully-populated one from which the site can run, even when the other is being updated. To do create the second, the above steps would be repeated for another database instance named TravelMappingCopy.

Web server files

The files in this Web repository should be placed in a directory served by the web server. We assume /home/www/tm and a vhosts entry that Apache uses to direct a URL to use files from this location. The updateserver.sh can help populate and later update this directory. Note that the fonts directory is not updated by this script, and those files will need to be transferred separately.

In addition to the files in the repository, the file lib/tm.conf needs to be created. This file contains eight lines:

Line 1: DB name (likely TravelMapping)
Line 2: DB read-only user (likely travmap)
Line 3: DB read-only user password
Line 4: DB hostname (likely localhost or 127.0.0.1)
Line 5: HERE map id
Line 6: HERE map code
Line 7: ThunderForest map key
Line 8: MapBox token

This file needs to be readable by the web server but should not be served by the web server. Configure Apache to ensure this. There are various ways to accomplish this. On the TM production server, this is done with this global directive in httpd.conf:

<Files "tm.conf*">
Require all denied
</Files>

Note that the wildcard match is needed, as tm.conf on the server is a symbolic link created by siteupdate.sh which points to either tm.conf.updating (during a site update that is affecting the primary database) or tm.conf.standard (when no site update is in progress, or when the primary database has finished being populated and the database copy is being updated).

Also create a file motd in the root directory of the server. This is the "message of the day" for TM.

Create a directory named cache in the shields directory. This needs to be writable by the web server.

TM's maps are provided by the Leaflet library, various options for map tiles come through leaflet-providers, and some of our waypoint markers (in HDX, so not part of a standalone TM installation) come from BeautifyMarker. The JS files for these should be placed into a location so they can be read by the code generated by tm_common_js in lib/tmphpfuncs.php.

Now test it out. Hopefully everything will work!

About

Web-facing tool/page development

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Web

Web-facing tool/page development

Setting up an instance of TM's databases and web front end

The server should be running an instance of a MariaDB server (10.11.7 as of this writing) and the apache web server (2.4.59 as of this writing). The web server needs to have PHP enabled (version 7.4.30 as of this writing) with the mysqli, ctype, and json extensions, and mod_php74 to get the loadable module. The remaining instructions assume apache, MariaDB, and PHP are all working together properly. On FreeBSD, this involved installing the correct packages.

Note: the MySQL server needs to override the group_concat_max_len parameter to be the maximum length of any comma-separated list of users that might be returned by a GROUP_CONCAT. This is currently set to 10000 on the production server.

MySQL database

First, create the users needed for the database. Connect and authenticate as root to the MySQL server. Create passwords for an account that will have permission to administer the TM database that will be used for database updates and an account that will have only read permission that will be used by the web front end. In the example below, these use the TM default names "travmapadmin" and "travmap".

CREATE USER 'travmapadmin'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOURPASSWORDFORTHISUSER';
CREATE USER 'travmap'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOURPASSWORDFORTHISUSER';

To be able to update the database remotely by ssh, a file ~/.my.cnf can be created on the server with the password for travmapadmin:

[clienttmapadmin]
password = YOURPASSWORDFORTHISUSER

Be sure the permissions are 600, so only readable by the user.

Next, we create the database and give these users needed permissions.

CREATE DATABASE TravelMapping CHARACTER SET = 'utf8mb4';
GRANT SELECT ON `TravelMapping`.* TO 'travmap'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, REFERENCES ON `TravelMapping`.* TO 'travmapadmin'@'localhost';

If you have a TravelMapping-[timestamp].sql file (generated by the site update process), you can now try to use it to populate the TravelMapping database.

mysql --defaults-group-suffix=tmapadmin -u travmapadmin TravelMapping < TravelMapping-[timestamp].sql

Normally, the above will be run as part of the site update process but it is done here as a way to test the database setup.

The TM production server has two database instances so there's (almost) always a fully-populated one from which the site can run, even when the other is being updated. To do create the second, the above steps would be repeated for another database instance named TravelMappingCopy.

Web server files

The files in this Web repository should be placed in a directory served by the web server. We assume /home/www/tm and a vhosts entry that Apache uses to direct a URL to use files from this location. The updateserver.sh can help populate and later update this directory. Note that the fonts directory is not updated by this script, and those files will need to be transferred separately.

In addition to the files in the repository, the file lib/tm.conf needs to be created. This file contains eight lines:

Line 1: DB name (likely TravelMapping)
Line 2: DB read-only user (likely travmap)
Line 3: DB read-only user password
Line 4: DB hostname (likely localhost or 127.0.0.1)
Line 5: HERE map id
Line 6: HERE map code
Line 7: ThunderForest map key
Line 8: MapBox token

This file needs to be readable by the web server but should not be served by the web server. Configure Apache to ensure this. There are various ways to accomplish this. On the TM production server, this is done with this global directive in httpd.conf:

<Files "tm.conf*">
Require all denied
</Files>

Note that the wildcard match is needed, as tm.conf on the server is a symbolic link created by siteupdate.sh which points to either tm.conf.updating (during a site update that is affecting the primary database) or tm.conf.standard (when no site update is in progress, or when the primary database has finished being populated and the database copy is being updated).

Also create a file motd in the root directory of the server. This is the "message of the day" for TM.

Create a directory named cache in the shields directory. This needs to be writable by the web server.

TM's maps are provided by the Leaflet library, various options for map tiles come through leaflet-providers, and some of our waypoint markers (in HDX, so not part of a standalone TM installation) come from BeautifyMarker. The JS files for these should be placed into a location so they can be read by the code generated by tm_common_js in lib/tmphpfuncs.php.

Now test it out. Hopefully everything will work!

About

Web-facing tool/page development

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Web

Web-facing tool/page development

Setting up an instance of TM's databases and web front end

The server should be running an instance of a MariaDB server (10.11.7 as of this writing) and the apache web server (2.4.59 as of this writing). The web server needs to have PHP enabled (version 7.4.30 as of this writing) with the mysqli, ctype, and json extensions, and mod_php74 to get the loadable module. The remaining instructions assume apache, MariaDB, and PHP are all working together properly. On FreeBSD, this involved installing the correct packages.

Note: the MySQL server needs to override the group_concat_max_len parameter to be the maximum length of any comma-separated list of users that might be returned by a GROUP_CONCAT. This is currently set to 10000 on the production server.

MySQL database

First, create the users needed for the database. Connect and authenticate as root to the MySQL server. Create passwords for an account that will have permission to administer the TM database that will be used for database updates and an account that will have only read permission that will be used by the web front end. In the example below, these use the TM default names "travmapadmin" and "travmap".

CREATE USER 'travmapadmin'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOURPASSWORDFORTHISUSER';
CREATE USER 'travmap'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOURPASSWORDFORTHISUSER';

To be able to update the database remotely by ssh, a file ~/.my.cnf can be created on the server with the password for travmapadmin:

[clienttmapadmin]
password = YOURPASSWORDFORTHISUSER

Be sure the permissions are 600, so only readable by the user.

Next, we create the database and give these users needed permissions.

CREATE DATABASE TravelMapping CHARACTER SET = 'utf8mb4';
GRANT SELECT ON `TravelMapping`.* TO 'travmap'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, REFERENCES ON `TravelMapping`.* TO 'travmapadmin'@'localhost';

If you have a TravelMapping-[timestamp].sql file (generated by the site update process), you can now try to use it to populate the TravelMapping database.

mysql --defaults-group-suffix=tmapadmin -u travmapadmin TravelMapping < TravelMapping-[timestamp].sql

Normally, the above will be run as part of the site update process but it is done here as a way to test the database setup.

The TM production server has two database instances so there's (almost) always a fully-populated one from which the site can run, even when the other is being updated. To do create the second, the above steps would be repeated for another database instance named TravelMappingCopy.

Web server files

The files in this Web repository should be placed in a directory served by the web server. We assume /home/www/tm and a vhosts entry that Apache uses to direct a URL to use files from this location. The updateserver.sh can help populate and later update this directory. Note that the fonts directory is not updated by this script, and those files will need to be transferred separately.

In addition to the files in the repository, the file lib/tm.conf needs to be created. This file contains eight lines:

Line 1: DB name (likely TravelMapping)
Line 2: DB read-only user (likely travmap)
Line 3: DB read-only user password
Line 4: DB hostname (likely localhost or 127.0.0.1)
Line 5: HERE map id
Line 6: HERE map code
Line 7: ThunderForest map key
Line 8: MapBox token

This file needs to be readable by the web server but should not be served by the web server. Configure Apache to ensure this. There are various ways to accomplish this. On the TM production server, this is done with this global directive in httpd.conf:

<Files "tm.conf*">
Require all denied
</Files>

Note that the wildcard match is needed, as tm.conf on the server is a symbolic link created by siteupdate.sh which points to either tm.conf.updating (during a site update that is affecting the primary database) or tm.conf.standard (when no site update is in progress, or when the primary database has finished being populated and the database copy is being updated).

Also create a file motd in the root directory of the server. This is the "message of the day" for TM.

Create a directory named cache in the shields directory. This needs to be writable by the web server.

TM's maps are provided by the Leaflet library, various options for map tiles come through leaflet-providers, and some of our waypoint markers (in HDX, so not part of a standalone TM installation) come from BeautifyMarker. The JS files for these should be placed into a location so they can be read by the code generated by tm_common_js in lib/tmphpfuncs.php.

Now test it out. Hopefully everything will work!

About

Web-facing tool/page development

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Web

Web-facing tool/page development

Setting up an instance of TM's databases and web front end

The server should be running an instance of a MariaDB server (10.11.7 as of this writing) and the apache web server (2.4.59 as of this writing). The web server needs to have PHP enabled (version 7.4.30 as of this writing) with the mysqli, ctype, and json extensions, and mod_php74 to get the loadable module. The remaining instructions assume apache, MariaDB, and PHP are all working together properly. On FreeBSD, this involved installing the correct packages.

Note: the MySQL server needs to override the group_concat_max_len parameter to be the maximum length of any comma-separated list of users that might be returned by a GROUP_CONCAT. This is currently set to 10000 on the production server.

MySQL database

First, create the users needed for the database. Connect and authenticate as root to the MySQL server. Create passwords for an account that will have permission to administer the TM database that will be used for database updates and an account that will have only read permission that will be used by the web front end. In the example below, these use the TM default names "travmapadmin" and "travmap".

CREATE USER 'travmapadmin'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOURPASSWORDFORTHISUSER';
CREATE USER 'travmap'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOURPASSWORDFORTHISUSER';

To be able to update the database remotely by ssh, a file ~/.my.cnf can be created on the server with the password for travmapadmin:

[clienttmapadmin]
password = YOURPASSWORDFORTHISUSER

Be sure the permissions are 600, so only readable by the user.

Next, we create the database and give these users needed permissions.

CREATE DATABASE TravelMapping CHARACTER SET = 'utf8mb4';
GRANT SELECT ON `TravelMapping`.* TO 'travmap'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, REFERENCES ON `TravelMapping`.* TO 'travmapadmin'@'localhost';

If you have a TravelMapping-[timestamp].sql file (generated by the site update process), you can now try to use it to populate the TravelMapping database.

mysql --defaults-group-suffix=tmapadmin -u travmapadmin TravelMapping < TravelMapping-[timestamp].sql

Normally, the above will be run as part of the site update process but it is done here as a way to test the database setup.

The TM production server has two database instances so there's (almost) always a fully-populated one from which the site can run, even when the other is being updated. To do create the second, the above steps would be repeated for another database instance named TravelMappingCopy.

Web server files

The files in this Web repository should be placed in a directory served by the web server. We assume /home/www/tm and a vhosts entry that Apache uses to direct a URL to use files from this location. The updateserver.sh can help populate and later update this directory. Note that the fonts directory is not updated by this script, and those files will need to be transferred separately.

In addition to the files in the repository, the file lib/tm.conf needs to be created. This file contains eight lines:

Line 1: DB name (likely TravelMapping)
Line 2: DB read-only user (likely travmap)
Line 3: DB read-only user password
Line 4: DB hostname (likely localhost or 127.0.0.1)
Line 5: HERE map id
Line 6: HERE map code
Line 7: ThunderForest map key
Line 8: MapBox token

This file needs to be readable by the web server but should not be served by the web server. Configure Apache to ensure this. There are various ways to accomplish this. On the TM production server, this is done with this global directive in httpd.conf:

<Files "tm.conf*">
Require all denied
</Files>

Note that the wildcard match is needed, as tm.conf on the server is a symbolic link created by siteupdate.sh which points to either tm.conf.updating (during a site update that is affecting the primary database) or tm.conf.standard (when no site update is in progress, or when the primary database has finished being populated and the database copy is being updated).

Also create a file motd in the root directory of the server. This is the "message of the day" for TM.

Create a directory named cache in the shields directory. This needs to be writable by the web server.

TM's maps are provided by the Leaflet library, various options for map tiles come through leaflet-providers, and some of our waypoint markers (in HDX, so not part of a standalone TM installation) come from BeautifyMarker. The JS files for these should be placed into a location so they can be read by the code generated by tm_common_js in lib/tmphpfuncs.php.

Now test it out. Hopefully everything will work!

About

Web-facing tool/page development

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages