Compare commits
No commits in common. 'main' and 'gh-pages' have entirely different histories.
213 changed files with 17050 additions and 35866 deletions
@ -1,31 +0,0 @@
@@ -1,31 +0,0 @@
|
||||
*.log |
||||
*.pyc |
||||
environment |
||||
attic |
||||
|
||||
# gitea |
||||
d-gitea/data/ |
||||
d-gitea/custom/ |
||||
|
||||
# mediawiki |
||||
charlesreid1.wiki.conf |
||||
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/Bootstrap2.php |
||||
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/navbar.php |
||||
d-mediawiki/mediawiki/ |
||||
|
||||
# nginx |
||||
d-nginx-charlesreid1/conf.d/http.DOMAIN.conf |
||||
d-nginx-charlesreid1/conf.d/https.DOMAIN.conf |
||||
|
||||
# scripts dir |
||||
scripts/git_*_www.py |
||||
scripts/certbot/renew_charlesreid1_certs.sh |
||||
*.timer |
||||
*.service |
||||
|
||||
# misc |
||||
site |
||||
root.password |
||||
docker-compose.yml |
||||
*.zip |
||||
|
@ -1,3 +0,0 @@
@@ -1,3 +0,0 @@
|
||||
[submodule "mkdocs-material"] |
||||
path = mkdocs-material |
||||
url = https://github.com/charlesreid1/mkdocs-material |
@ -0,0 +1,651 @@
@@ -0,0 +1,651 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<!DOCTYPE html> |
||||
<html lang="en" class="no-js"> |
||||
<head> |
||||
|
||||
<meta charset="utf-8"> |
||||
<meta name="viewport" content="width=device-width,initial-scale=1"> |
||||
<meta http-equiv="x-ua-compatible" content="ie=edge"> |
||||
|
||||
|
||||
<link rel="canonical" href="https://pages.charlesreid1.com/pod-charlesreid1/Backups/"> |
||||
|
||||
|
||||
|
||||
<meta name="lang:clipboard.copy" content="Copy to clipboard"> |
||||
|
||||
<meta name="lang:clipboard.copied" content="Copied to clipboard"> |
||||
|
||||
<meta name="lang:search.language" content="en"> |
||||
|
||||
<meta name="lang:search.pipeline.stopwords" content="True"> |
||||
|
||||
<meta name="lang:search.pipeline.trimmer" content="True"> |
||||
|
||||
<meta name="lang:search.result.none" content="No matching documents"> |
||||
|
||||
<meta name="lang:search.result.one" content="1 matching document"> |
||||
|
||||
<meta name="lang:search.result.other" content="# matching documents"> |
||||
|
||||
<meta name="lang:search.tokenizer" content="[\s\-]+"> |
||||
|
||||
<link rel="shortcut icon" href=".."> |
||||
<meta name="generator" content="mkdocs-1.0.4, mkdocs-material-3.0.3"> |
||||
|
||||
|
||||
|
||||
<title>Backups - pod-charlesreid1</title> |
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/application.451f80e5.css"> |
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/application-palette.22915126.css"> |
||||
|
||||
|
||||
|
||||
|
||||
<meta name="theme-color" content="#2196f3"> |
||||
|
||||
|
||||
|
||||
<script src="../assets/javascripts/modernizr.1aa3b519.js"></script> |
||||
|
||||
|
||||
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin> |
||||
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono"> |
||||
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style> |
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/fonts/material-icons.css"> |
||||
|
||||
<link rel="stylesheet" href="../css/custom.css"> |
||||
|
||||
|
||||
</head> |
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-primary="blue" data-md-color-accent="blue"> |
||||
|
||||
<svg class="md-svg"> |
||||
<defs> |
||||
|
||||
|
||||
</defs> |
||||
</svg> |
||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> |
||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> |
||||
<label class="md-overlay" data-md-component="overlay" for="__drawer"></label> |
||||
|
||||
<a href="../#backups" tabindex="1" class="md-skip"> |
||||
Skip to content |
||||
</a> |
||||
|
||||
|
||||
<header class="md-header" data-md-component="header"> |
||||
<nav class="md-header-nav md-grid"> |
||||
<div class="md-flex"> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<a href="https://pages.charlesreid1.com/pod-charlesreid1" title="pod-charlesreid1" class="md-header-nav__button md-logo"> |
||||
|
||||
<i class="md-icon">dns</i> |
||||
|
||||
</a> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--stretch"> |
||||
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title"> |
||||
|
||||
|
||||
<span class="md-header-nav__topic"> |
||||
pod-charlesreid1 |
||||
</span> |
||||
<span class="md-header-nav__topic"> |
||||
Backups |
||||
</span> |
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
|
||||
|
||||
<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label> |
||||
|
||||
<div class="md-search" data-md-component="search" role="dialog"> |
||||
<label class="md-search__overlay" for="__search"></label> |
||||
<div class="md-search__inner" role="search"> |
||||
<form class="md-search__form" name="search"> |
||||
<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active"> |
||||
<label class="md-icon md-search__icon" for="__search"></label> |
||||
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1"> |
||||
 |
||||
</button> |
||||
</form> |
||||
<div class="md-search__output"> |
||||
<div class="md-search__scrollwrap" data-md-scrollfix> |
||||
<div class="md-search-result" data-md-component="result"> |
||||
<div class="md-search-result__meta"> |
||||
Type to start searching |
||||
</div> |
||||
<ol class="md-search-result__list"></ol> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
</div> |
||||
|
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<div class="md-header-nav__source"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="https://git.charlesreid1.com/docker/pod-charlesreid1" title="Go to repository" class="md-source" data-md-source=""> |
||||
|
||||
<div class="md-source__repository"> |
||||
pod-charlesreid1 |
||||
</div> |
||||
</a> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
</nav> |
||||
</header> |
||||
|
||||
<div class="md-container"> |
||||
|
||||
|
||||
|
||||
<main class="md-main"> |
||||
<div class="md-main__inner md-grid" data-md-component="container"> |
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation"> |
||||
<div class="md-sidebar__scrollwrap"> |
||||
<div class="md-sidebar__inner"> |
||||
<nav class="md-nav md-nav--primary" data-md-level="0"> |
||||
<label class="md-nav__title md-nav__title--site" for="__drawer"> |
||||
<a href="https://pages.charlesreid1.com/pod-charlesreid1" title="pod-charlesreid1" class="md-nav__button md-logo"> |
||||
|
||||
<i class="md-icon">dns</i> |
||||
|
||||
</a> |
||||
pod-charlesreid1 |
||||
</label> |
||||
|
||||
<div class="md-nav__source"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="https://git.charlesreid1.com/docker/pod-charlesreid1" title="Go to repository" class="md-source" data-md-source=""> |
||||
|
||||
<div class="md-source__repository"> |
||||
pod-charlesreid1 |
||||
</div> |
||||
</a> |
||||
|
||||
</div> |
||||
|
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href=".." title="Index" class="md-nav__link"> |
||||
Index |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested"> |
||||
|
||||
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2"> |
||||
|
||||
<label class="md-nav__link" for="nav-2"> |
||||
Services |
||||
</label> |
||||
<nav class="md-nav" data-md-component="collapsible" data-md-level="1"> |
||||
<label class="md-nav__title" for="nav-2"> |
||||
Services |
||||
</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_mediawiki/" title="Pod Service: MediaWiki" class="md-nav__link"> |
||||
Pod Service: MediaWiki |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_apachephp/" title="Pod Service: Apache/PHP" class="md-nav__link"> |
||||
Pod Service: Apache/PHP |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_mysql/" title="Pod Service: MySQL" class="md-nav__link"> |
||||
Pod Service: MySQL |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_phpmyadmin/" title="Pod Service: phpMyAdmin" class="md-nav__link"> |
||||
Pod Service: phpMyAdmin |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_nginx/" title="Pod Service: nginx" class="md-nav__link"> |
||||
Pod Service: nginx |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_pythonfiles/" title="Pod Service: Python File Server" class="md-nav__link"> |
||||
Pod Service: Python File Server |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_gitea/" title="Pod Service: Gitea" class="md-nav__link"> |
||||
Pod Service: Gitea |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
</ul> |
||||
</nav> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Running/" title="Running the Pod" class="md-nav__link"> |
||||
Running the Pod |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Volumes/" title="Volumes" class="md-nav__link"> |
||||
Volumes |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--active"> |
||||
|
||||
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc"> |
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link md-nav__link--active" for="__toc"> |
||||
Backups |
||||
</label> |
||||
|
||||
<a href="./" title="Backups" class="md-nav__link md-nav__link--active"> |
||||
Backups |
||||
</a> |
||||
|
||||
|
||||
<nav class="md-nav md-nav--secondary"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">Table of contents</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#krash-seed" title="Krash Seed" class="md-nav__link"> |
||||
Krash Seed |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#mysql-backuprestore-scripts" title="MySQL Backup/Restore Scripts" class="md-nav__link"> |
||||
MySQL Backup/Restore Scripts |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#mediawiki-backuprestore-scripts" title="MediaWiki Backup/Restore Scripts" class="md-nav__link"> |
||||
MediaWiki Backup/Restore Scripts |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#gitea-backuprestore-scripts" title="Gitea Backup/Restore Scripts" class="md-nav__link"> |
||||
Gitea Backup/Restore Scripts |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</ul> |
||||
|
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Ports/" title="Domains and Ports" class="md-nav__link"> |
||||
Domains and Ports |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Secrets/" title="Secrets" class="md-nav__link"> |
||||
Secrets |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
</ul> |
||||
</nav> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc"> |
||||
<div class="md-sidebar__scrollwrap"> |
||||
<div class="md-sidebar__inner"> |
||||
|
||||
<nav class="md-nav md-nav--secondary"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">Table of contents</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#krash-seed" title="Krash Seed" class="md-nav__link"> |
||||
Krash Seed |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#mysql-backuprestore-scripts" title="MySQL Backup/Restore Scripts" class="md-nav__link"> |
||||
MySQL Backup/Restore Scripts |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#mediawiki-backuprestore-scripts" title="MediaWiki Backup/Restore Scripts" class="md-nav__link"> |
||||
MediaWiki Backup/Restore Scripts |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#gitea-backuprestore-scripts" title="Gitea Backup/Restore Scripts" class="md-nav__link"> |
||||
Gitea Backup/Restore Scripts |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</ul> |
||||
|
||||
</nav> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<div class="md-content"> |
||||
<article class="md-content__inner md-typeset"> |
||||
|
||||
|
||||
|
||||
<h1 id="backups">Backups<a class="headerlink" href="#backups" title="Permanent link">¶</a></h1> |
||||
<h2 id="krash-seed">Krash Seed<a class="headerlink" href="#krash-seed" title="Permanent link">¶</a></h2> |
||||
<p>By competely containerizing charlesreid1.com, |
||||
all of the static files for running programs |
||||
come from docker container images, |
||||
and all configuration files |
||||
come from git repositories under version control at |
||||
<a href="https://git.charlesreid1.com/docker">git.charlesreid1.com/docker</a>.</p> |
||||
<p>That just leaves the core data for each service, |
||||
which is what the backup and restore scripts handle. |
||||
This service data consists of the following:</p> |
||||
<ul> |
||||
<li>MediaWiki MySQL database dump (.sql)</li> |
||||
<li>MediaWiki images directory (.tar.gz)</li> |
||||
<li>Gitea repository dump (.zip)</li> |
||||
<li>Gitea avatar images (.zip)</li> |
||||
</ul> |
||||
<p>These four files form a "krash seed" for charlesreid1.com.</p> |
||||
<h2 id="mysql-backuprestore-scripts">MySQL Backup/Restore Scripts<a class="headerlink" href="#mysql-backuprestore-scripts" title="Permanent link">¶</a></h2> |
||||
<p>To create a MySQL backup, use the <code>utils-mysql/dump_database.sh</code> script.</p> |
||||
<div class="codehilite"><pre><span></span>dump_database.sh script: |
||||
Dump a database to an .sql file |
||||
from the stormy_mysql container. |
||||
|
||||
./dump_database.sh <sql-dump-file> |
||||
|
||||
Example: |
||||
|
||||
./dump_database.sh /path/to/wikidb_dump.sql |
||||
</pre></div> |
||||
|
||||
|
||||
<h2 id="mediawiki-backuprestore-scripts">MediaWiki Backup/Restore Scripts<a class="headerlink" href="#mediawiki-backuprestore-scripts" title="Permanent link">¶</a></h2> |
||||
<div class="codehilite"><pre><span></span>backup_wikifiles.sh script: |
||||
Create a tar file containing wiki files |
||||
from the stormy_mw container |
||||
|
||||
./backup_wikifiles.sh <tar-file> |
||||
|
||||
Example: |
||||
|
||||
./backup_wikifiles.sh /path/to/wikifiles.tar.gz |
||||
</pre></div> |
||||
|
||||
|
||||
<h2 id="gitea-backuprestore-scripts">Gitea Backup/Restore Scripts<a class="headerlink" href="#gitea-backuprestore-scripts" title="Permanent link">¶</a></h2> |
||||
<h1 id="utilities">Utilities<a class="headerlink" href="#utilities" title="Permanent link">¶</a></h1> |
||||
<p>Utilities are kept in the <code>utils-*</code> folders.</p> |
||||
<h2 id="mysql-utilities">MySQL Utilities<a class="headerlink" href="#mysql-utilities" title="Permanent link">¶</a></h2> |
||||
<h2 id="mediawiki-utilities">MediaWiki Utilities<a class="headerlink" href="#mediawiki-utilities" title="Permanent link">¶</a></h2> |
||||
<h2 id="mysql-utilities_1">MySQL Utilities<a class="headerlink" href="#mysql-utilities_1" title="Permanent link">¶</a></h2> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article> |
||||
</div> |
||||
</div> |
||||
</main> |
||||
|
||||
|
||||
<footer class="md-footer"> |
||||
|
||||
<div class="md-footer-nav"> |
||||
<nav class="md-footer-nav__inner md-grid"> |
||||
|
||||
<a href="../Volumes/" title="Volumes" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev"> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> |
||||
<span class="md-flex__ellipsis"> |
||||
<span class="md-footer-nav__direction"> |
||||
Previous |
||||
</span> |
||||
Volumes |
||||
</span> |
||||
</div> |
||||
</a> |
||||
|
||||
|
||||
<a href="../Ports/" title="Domains and Ports" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next"> |
||||
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> |
||||
<span class="md-flex__ellipsis"> |
||||
<span class="md-footer-nav__direction"> |
||||
Next |
||||
</span> |
||||
Domains and Ports |
||||
</span> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i> |
||||
</div> |
||||
</a> |
||||
|
||||
</nav> |
||||
</div> |
||||
|
||||
<div class="md-footer-meta md-typeset"> |
||||
<div class="md-footer-meta__inner md-grid"> |
||||
<div class="md-footer-copyright"> |
||||
|
||||
<div class="md-footer-copyright__highlight"> |
||||
Copyright © 2018 <a href="https://charlesreid1.com">Charles Reid</a>, released under the <a href="https://opensource.org/licenses/MIT">MIT license</a> |
||||
</div> |
||||
|
||||
powered by |
||||
<a href="https://www.mkdocs.org">MkDocs</a> |
||||
and |
||||
<a href="https://squidfunk.github.io/mkdocs-material/"> |
||||
Material for MkDocs</a> |
||||
</div> |
||||
|
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
</footer> |
||||
|
||||
</div> |
||||
|
||||
<script src="../assets/javascripts/application.e72fd936.js"></script> |
||||
|
||||
<script>app.initialize({version:"1.0.4",url:{base:".."}})</script> |
||||
|
||||
<script src="../search/main.js"></script> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body> |
||||
</html> |
@ -1,19 +0,0 @@
@@ -1,19 +0,0 @@
|
||||
Copyright (c) 2018-2021 Charles Reid |
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
of this software and associated documentation files (the "Software"), to deal |
||||
in the Software without restriction, including without limitation the rights |
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
copies of the Software, and to permit persons to whom the Software is |
||||
furnished to do so, subject to the following conditions: |
||||
|
||||
The above copyright notice and this permission notice shall be included in all |
||||
copies or substantial portions of the Software. |
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
||||
SOFTWARE. |
@ -1,194 +0,0 @@
@@ -1,194 +0,0 @@
|
||||
include common.mk |
||||
|
||||
all: |
||||
@echo "no default make rule defined" |
||||
|
||||
help: |
||||
@echo "" |
||||
@echo "" |
||||
@echo "pod-charlesreid Makefile:" |
||||
@echo "" |
||||
@echo "" |
||||
@echo "This Makefile contains rules for setting up pod-charlesreid1" |
||||
@echo "" |
||||
@echo "make help: Get help" |
||||
@echo "" |
||||
@echo "--------------------------------------------------" |
||||
@echo " Templates:" |
||||
@echo "" |
||||
@echo "make templates: Render each .j2 template file in this and all subdirectories" |
||||
@echo " (uses environment variables to populate Jinja variables)" |
||||
@echo "" |
||||
@echo "make list-templates: List each .j2 template file that will be rendered by a 'make template' command" |
||||
@echo "" |
||||
@echo "make clean-templates: Remove each rendered .j2 template" |
||||
@echo "" |
||||
@echo "--------------------------------------------------" |
||||
@echo " Backups:" |
||||
@echo "" |
||||
@echo "make backups: Create backups of every service (wiki database, wiki files) in ~/backups" |
||||
@echo "" |
||||
@echo "make clean-backups: Remove files from ~/backups directory older than 30 days" |
||||
@echo "" |
||||
@echo "--------------------------------------------------" |
||||
@echo " MediaWiki:" |
||||
@echo "" |
||||
@echo "make mw-build-extensions Build the MediaWiki extensions directory" |
||||
@echo "" |
||||
@echo "make mw-fix-extensions Copy the built extensions directory into the MW container" |
||||
@echo "" |
||||
@echo "make mw-fix-localsettings Copy the LocalSettings.php file into the MW container" |
||||
@echo "" |
||||
@echo "make mw-fix-skins Copy the skins directory into the MW container" |
||||
@echo "" |
||||
@echo "--------------------------------------------------" |
||||
@echo " /www Directory:" |
||||
@echo "" |
||||
@echo "make clone-www: Create the /www directory structure for charlesreid1.com" |
||||
@echo "" |
||||
@echo "make pull-www: Update the contents of the /www directory structure for charlesreid1.com" |
||||
@echo "" |
||||
@echo "--------------------------------------------------" |
||||
@echo " Startup Services:" |
||||
@echo "" |
||||
@echo "make install: Install and start systemd service to run pod-charlesreid1." |
||||
@echo " Also install and start systemd service for pod-charlesreid1 backup services" |
||||
@echo " for each service (mediawiki/mysql) part of pod-charlesreid1." |
||||
@echo "" |
||||
@echo "make uninstall: Remove all systemd startup services and timers part of pod-charlesreid1" |
||||
@echo "" |
||||
|
||||
# Templates
|
||||
|
||||
templates: |
||||
@find * -name "*.service.j2" | xargs -I '{}' chmod 644 {} |
||||
@find * -name "*.timer.j2" | xargs -I '{}' chmod 644 {} |
||||
/home/charles/.pyenv/shims/python3 $(POD_CHARLESREID1_DIR)/scripts/apply_templates.py |
||||
|
||||
list-templates: |
||||
@find * -name "*.j2" |
||||
|
||||
clean-templates: |
||||
# sudo is required because bind-mounted gitea files end up owned by root. stupid docker. |
||||
sudo -E /home/charles/.pyenv/shims/python3 $(POD_CHARLESREID1_DIR)/scripts/clean_templates.py |
||||
|
||||
# Backups
|
||||
|
||||
backups: |
||||
$(POD_CHARLESREID1_DIR)/scripts/backups/wikidb_dump.sh |
||||
$(POD_CHARLESREID1_DIR)/scripts/backups/wikifiles_dump.sh |
||||
|
||||
clean-backups: |
||||
$(POD_CHARLESREID1_DIR)/scripts/clean_templates.sh |
||||
|
||||
# MediaWiki
|
||||
|
||||
mw-build-extensions: |
||||
$(POD_CHARLESREID1_DIR)/scripts/mw/build_extensions_dir.sh |
||||
|
||||
mw-fix-extensions: mw-build-extensions |
||||
$(POD_CHARLESREID1_DIR)/scripts/mw/build_extensions_dir.sh |
||||
|
||||
mw-fix-localsettings: |
||||
$(POD_CHARLESREID1_DIR)/scripts/mw/fix_LocalSettings.sh |
||||
|
||||
mw-fix-skins: |
||||
$(POD_CHARLESREID1_DIR)/scripts/mw/fix_skins.sh |
||||
|
||||
# /www Dir
|
||||
|
||||
clone-www: |
||||
/home/charles/.pyenv/shims/python3 $(POD_CHARLESREID1_DIR)/scripts/git_clone_www.py |
||||
|
||||
pull-www: |
||||
/home/charles/.pyenv/shims/python3 $(POD_CHARLESREID1_DIR)/scripts/git_pull_www.py |
||||
|
||||
install: |
||||
ifeq ($(shell which systemctl),) |
||||
$(error Please run this make command on a system with systemctl installed) |
||||
endif |
||||
@/home/charles/.pyenv/shims/python3 -c 'import botocore' || (echo "Please install the botocore library using python3 or pip3 binary"; exit 1) |
||||
@/home/charles/.pyenv/shims/python3 -c 'import boto3' || (echo "Please install the boto3 library using python3 or pip3 binary"; exit 1) |
||||
|
||||
sudo cp $(POD_CHARLESREID1_DIR)/scripts/pod-charlesreid1.service /etc/systemd/system/pod-charlesreid1.service |
||||
|
||||
sudo cp $(POD_CHARLESREID1_DIR)/scripts/backups/pod-charlesreid1-backups-aws.{service,timer} /etc/systemd/system/. |
||||
sudo cp $(POD_CHARLESREID1_DIR)/scripts/backups/pod-charlesreid1-backups-cleanolderthan.{service,timer} /etc/systemd/system/. |
||||
sudo cp $(POD_CHARLESREID1_DIR)/scripts/backups/pod-charlesreid1-backups-gitea.{service,timer} /etc/systemd/system/. |
||||
sudo cp $(POD_CHARLESREID1_DIR)/scripts/backups/pod-charlesreid1-backups-wikidb.{service,timer} /etc/systemd/system/. |
||||
sudo cp $(POD_CHARLESREID1_DIR)/scripts/backups/pod-charlesreid1-backups-wikifiles.{service,timer} /etc/systemd/system/. |
||||
|
||||
sudo cp $(POD_CHARLESREID1_DIR)/scripts/backups/canary/pod-charlesreid1-canary.{service,timer} /etc/systemd/system/. |
||||
sudo cp $(POD_CHARLESREID1_DIR)/scripts/certbot/pod-charlesreid1-certbot.{service,timer} /etc/systemd/system/. |
||||
|
||||
sudo cp $(POD_CHARLESREID1_DIR)/scripts/backups/10-pod-charlesreid1-rsyslog.conf /etc/rsyslog.d/. |
||||
|
||||
sudo chmod 664 /etc/systemd/system/pod-charlesreid1* |
||||
sudo systemctl daemon-reload |
||||
|
||||
sudo systemctl restart rsyslog |
||||
|
||||
sudo systemctl enable pod-charlesreid1 |
||||
sudo systemctl enable pod-charlesreid1-backups-wikidb.timer |
||||
sudo systemctl enable pod-charlesreid1-backups-wikifiles.timer |
||||
sudo systemctl enable pod-charlesreid1-backups-gitea.timer |
||||
sudo systemctl enable pod-charlesreid1-backups-aws.timer |
||||
sudo systemctl enable pod-charlesreid1-backups-cleanolderthan.timer |
||||
sudo systemctl enable pod-charlesreid1-canary.timer |
||||
sudo systemctl enable pod-charlesreid1-certbot.timer |
||||
|
||||
sudo systemctl start pod-charlesreid1-backups-wikidb.timer |
||||
sudo systemctl start pod-charlesreid1-backups-wikifiles.timer |
||||
sudo systemctl start pod-charlesreid1-backups-gitea.timer |
||||
sudo systemctl start pod-charlesreid1-backups-aws.timer |
||||
sudo systemctl start pod-charlesreid1-backups-cleanolderthan.timer |
||||
sudo systemctl start pod-charlesreid1-canary.timer |
||||
sudo systemctl start pod-charlesreid1-certbot.timer |
||||
|
||||
sudo chown syslog:syslog /var/log/pod-charlesreid1-backups-aws.service.log |
||||
sudo chown syslog:syslog /var/log/pod-charlesreid1-backups-cleanolderthan.service.log |
||||
sudo chown syslog:syslog /var/log/pod-charlesreid1-backups-gitea.service.log |
||||
sudo chown syslog:syslog /var/log/pod-charlesreid1-backups-wikidb.service.log |
||||
sudo chown syslog:syslog /var/log/pod-charlesreid1-backups-wikifiles.service.log |
||||
sudo chown syslog:syslog /var/log/pod-charlesreid1-canary.service.log |
||||
|
||||
uninstall: |
||||
ifeq ($(shell which systemctl),) |
||||
$(error Please run this make command on a system with systemctl installed) |
||||
endif |
||||
-sudo systemctl disable pod-charlesreid1 |
||||
-sudo systemctl disable pod-charlesreid1-backups-aws.timer |
||||
-sudo systemctl disable pod-charlesreid1-backups-cleanolderthan.timer |
||||
-sudo systemctl disable pod-charlesreid1-backups-gitea.timer |
||||
-sudo systemctl disable pod-charlesreid1-backups-wikidb.timer |
||||
-sudo systemctl disable pod-charlesreid1-backups-wikifiles.timer |
||||
-sudo systemctl disable pod-charlesreid1-canary.timer |
||||
-sudo systemctl disable pod-charlesreid1-certbot.timer |
||||
|
||||
# Leave the pod running! |
||||
# -sudo systemctl stop pod-charlesreid1 |
||||
|
||||
-sudo systemctl stop pod-charlesreid1-backups-aws.timer |
||||
-sudo systemctl stop pod-charlesreid1-backups-cleanolderthan.timer |
||||
-sudo systemctl stop pod-charlesreid1-backups-gitea.timer |
||||
-sudo systemctl stop pod-charlesreid1-backups-wikidb.timer |
||||
-sudo systemctl stop pod-charlesreid1-backups-wikifiles.timer |
||||
-sudo systemctl stop pod-charlesreid1-canary.timer |
||||
-sudo systemctl stop pod-charlesreid1-certbot.timer |
||||
|
||||
-sudo rm -f /etc/systemd/system/pod-charlesreid1.service |
||||
|
||||
-sudo rm -f /etc/systemd/system/pod-charlesreid1-backups-aws.{service,timer} |
||||
-sudo rm -f /etc/systemd/system/pod-charlesreid1-backups-cleanolderthan.{service,timer} |
||||
-sudo rm -f /etc/systemd/system/pod-charlesreid1-backups-gitea.{service,timer} |
||||
-sudo rm -f /etc/systemd/system/pod-charlesreid1-backups-wikidb.{service,timer} |
||||
-sudo rm -f /etc/systemd/system/pod-charlesreid1-backups-wikifiles.{service,timer} |
||||
-sudo rm -f /etc/systemd/system/pod-charlesreid1-canary.{service,timer} |
||||
-sudo rm -f /etc/systemd/system/pod-charlesreid1-certbot.{service,timer} |
||||
|
||||
sudo systemctl daemon-reload |
||||
|
||||
-sudo rm -f /etc/rsyslog.d/10-pod-charlesreid1-rsyslog.conf |
||||
-sudo systemctl restart rsyslog |
||||
|
||||
.PHONY: help |
@ -0,0 +1,930 @@
@@ -0,0 +1,930 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<!DOCTYPE html> |
||||
<html lang="en" class="no-js"> |
||||
<head> |
||||
|
||||
<meta charset="utf-8"> |
||||
<meta name="viewport" content="width=device-width,initial-scale=1"> |
||||
<meta http-equiv="x-ua-compatible" content="ie=edge"> |
||||
|
||||
|
||||
<link rel="canonical" href="https://pages.charlesreid1.com/pod-charlesreid1/Ports/"> |
||||
|
||||
|
||||
|
||||
<meta name="lang:clipboard.copy" content="Copy to clipboard"> |
||||
|
||||
<meta name="lang:clipboard.copied" content="Copied to clipboard"> |
||||
|
||||
<meta name="lang:search.language" content="en"> |
||||
|
||||
<meta name="lang:search.pipeline.stopwords" content="True"> |
||||
|
||||
<meta name="lang:search.pipeline.trimmer" content="True"> |
||||
|
||||
<meta name="lang:search.result.none" content="No matching documents"> |
||||
|
||||
<meta name="lang:search.result.one" content="1 matching document"> |
||||
|
||||
<meta name="lang:search.result.other" content="# matching documents"> |
||||
|
||||
<meta name="lang:search.tokenizer" content="[\s\-]+"> |
||||
|
||||
<link rel="shortcut icon" href=".."> |
||||
<meta name="generator" content="mkdocs-1.0.4, mkdocs-material-3.0.3"> |
||||
|
||||
|
||||
|
||||
<title>Domains and Ports - pod-charlesreid1</title> |
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/application.451f80e5.css"> |
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/application-palette.22915126.css"> |
||||
|
||||
|
||||
|
||||
|
||||
<meta name="theme-color" content="#2196f3"> |
||||
|
||||
|
||||
|
||||
<script src="../assets/javascripts/modernizr.1aa3b519.js"></script> |
||||
|
||||
|
||||
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin> |
||||
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono"> |
||||
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style> |
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/fonts/material-icons.css"> |
||||
|
||||
<link rel="stylesheet" href="../css/custom.css"> |
||||
|
||||
|
||||
</head> |
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-primary="blue" data-md-color-accent="blue"> |
||||
|
||||
<svg class="md-svg"> |
||||
<defs> |
||||
|
||||
|
||||
</defs> |
||||
</svg> |
||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> |
||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> |
||||
<label class="md-overlay" data-md-component="overlay" for="__drawer"></label> |
||||
|
||||
<a href="../#domains-and-ports" tabindex="1" class="md-skip"> |
||||
Skip to content |
||||
</a> |
||||
|
||||
|
||||
<header class="md-header" data-md-component="header"> |
||||
<nav class="md-header-nav md-grid"> |
||||
<div class="md-flex"> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<a href="https://pages.charlesreid1.com/pod-charlesreid1" title="pod-charlesreid1" class="md-header-nav__button md-logo"> |
||||
|
||||
<i class="md-icon">dns</i> |
||||
|
||||
</a> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--stretch"> |
||||
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title"> |
||||
|
||||
|
||||
<span class="md-header-nav__topic"> |
||||
pod-charlesreid1 |
||||
</span> |
||||
<span class="md-header-nav__topic"> |
||||
Domains and Ports |
||||
</span> |
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
|
||||
|
||||
<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label> |
||||
|
||||
<div class="md-search" data-md-component="search" role="dialog"> |
||||
<label class="md-search__overlay" for="__search"></label> |
||||
<div class="md-search__inner" role="search"> |
||||
<form class="md-search__form" name="search"> |
||||
<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active"> |
||||
<label class="md-icon md-search__icon" for="__search"></label> |
||||
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1"> |
||||
 |
||||
</button> |
||||
</form> |
||||
<div class="md-search__output"> |
||||
<div class="md-search__scrollwrap" data-md-scrollfix> |
||||
<div class="md-search-result" data-md-component="result"> |
||||
<div class="md-search-result__meta"> |
||||
Type to start searching |
||||
</div> |
||||
<ol class="md-search-result__list"></ol> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
</div> |
||||
|
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<div class="md-header-nav__source"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="https://git.charlesreid1.com/docker/pod-charlesreid1" title="Go to repository" class="md-source" data-md-source=""> |
||||
|
||||
<div class="md-source__repository"> |
||||
pod-charlesreid1 |
||||
</div> |
||||
</a> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
</nav> |
||||
</header> |
||||
|
||||
<div class="md-container"> |
||||
|
||||
|
||||
|
||||
<main class="md-main"> |
||||
<div class="md-main__inner md-grid" data-md-component="container"> |
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation"> |
||||
<div class="md-sidebar__scrollwrap"> |
||||
<div class="md-sidebar__inner"> |
||||
<nav class="md-nav md-nav--primary" data-md-level="0"> |
||||
<label class="md-nav__title md-nav__title--site" for="__drawer"> |
||||
<a href="https://pages.charlesreid1.com/pod-charlesreid1" title="pod-charlesreid1" class="md-nav__button md-logo"> |
||||
|
||||
<i class="md-icon">dns</i> |
||||
|
||||
</a> |
||||
pod-charlesreid1 |
||||
</label> |
||||
|
||||
<div class="md-nav__source"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="https://git.charlesreid1.com/docker/pod-charlesreid1" title="Go to repository" class="md-source" data-md-source=""> |
||||
|
||||
<div class="md-source__repository"> |
||||
pod-charlesreid1 |
||||
</div> |
||||
</a> |
||||
|
||||
</div> |
||||
|
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href=".." title="Index" class="md-nav__link"> |
||||
Index |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested"> |
||||
|
||||
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2"> |
||||
|
||||
<label class="md-nav__link" for="nav-2"> |
||||
Services |
||||
</label> |
||||
<nav class="md-nav" data-md-component="collapsible" data-md-level="1"> |
||||
<label class="md-nav__title" for="nav-2"> |
||||
Services |
||||
</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_mediawiki/" title="Pod Service: MediaWiki" class="md-nav__link"> |
||||
Pod Service: MediaWiki |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_apachephp/" title="Pod Service: Apache/PHP" class="md-nav__link"> |
||||
Pod Service: Apache/PHP |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_mysql/" title="Pod Service: MySQL" class="md-nav__link"> |
||||
Pod Service: MySQL |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_phpmyadmin/" title="Pod Service: phpMyAdmin" class="md-nav__link"> |
||||
Pod Service: phpMyAdmin |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_nginx/" title="Pod Service: nginx" class="md-nav__link"> |
||||
Pod Service: nginx |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_pythonfiles/" title="Pod Service: Python File Server" class="md-nav__link"> |
||||
Pod Service: Python File Server |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_gitea/" title="Pod Service: Gitea" class="md-nav__link"> |
||||
Pod Service: Gitea |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
</ul> |
||||
</nav> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Running/" title="Running the Pod" class="md-nav__link"> |
||||
Running the Pod |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Volumes/" title="Volumes" class="md-nav__link"> |
||||
Volumes |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Backups/" title="Backups" class="md-nav__link"> |
||||
Backups |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--active"> |
||||
|
||||
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc"> |
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link md-nav__link--active" for="__toc"> |
||||
Domains and Ports |
||||
</label> |
||||
|
||||
<a href="./" title="Domains and Ports" class="md-nav__link md-nav__link--active"> |
||||
Domains and Ports |
||||
</a> |
||||
|
||||
|
||||
<nav class="md-nav md-nav--secondary"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">Table of contents</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#domains" title="Domains" class="md-nav__link"> |
||||
Domains |
||||
</a> |
||||
|
||||
<nav class="md-nav"> |
||||
<ul class="md-nav__list"> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#nginx-domain-handling" title="nginx domain handling" class="md-nav__link"> |
||||
nginx domain handling |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
</ul> |
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#ports" title="Ports" class="md-nav__link"> |
||||
Ports |
||||
</a> |
||||
|
||||
<nav class="md-nav"> |
||||
<ul class="md-nav__list"> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#overview" title="overview" class="md-nav__link"> |
||||
overview |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#nginx-ports" title="nginx ports" class="md-nav__link"> |
||||
nginx ports |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#mediawikiapache-ports" title="mediawiki/apache ports" class="md-nav__link"> |
||||
mediawiki/apache ports |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#phpmyadmin-ports" title="phpmyadmin ports" class="md-nav__link"> |
||||
phpmyadmin ports |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#mysql-ports" title="mysql ports" class="md-nav__link"> |
||||
mysql ports |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#gitea-ports" title="gitea ports" class="md-nav__link"> |
||||
gitea ports |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#python-file-server-ports" title="python file server ports" class="md-nav__link"> |
||||
python file server ports |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
</ul> |
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</ul> |
||||
|
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Secrets/" title="Secrets" class="md-nav__link"> |
||||
Secrets |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
</ul> |
||||
</nav> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc"> |
||||
<div class="md-sidebar__scrollwrap"> |
||||
<div class="md-sidebar__inner"> |
||||
|
||||
<nav class="md-nav md-nav--secondary"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">Table of contents</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#domains" title="Domains" class="md-nav__link"> |
||||
Domains |
||||
</a> |
||||
|
||||
<nav class="md-nav"> |
||||
<ul class="md-nav__list"> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#nginx-domain-handling" title="nginx domain handling" class="md-nav__link"> |
||||
nginx domain handling |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
</ul> |
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#ports" title="Ports" class="md-nav__link"> |
||||
Ports |
||||
</a> |
||||
|
||||
<nav class="md-nav"> |
||||
<ul class="md-nav__list"> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#overview" title="overview" class="md-nav__link"> |
||||
overview |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#nginx-ports" title="nginx ports" class="md-nav__link"> |
||||
nginx ports |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#mediawikiapache-ports" title="mediawiki/apache ports" class="md-nav__link"> |
||||
mediawiki/apache ports |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#phpmyadmin-ports" title="phpmyadmin ports" class="md-nav__link"> |
||||
phpmyadmin ports |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#mysql-ports" title="mysql ports" class="md-nav__link"> |
||||
mysql ports |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#gitea-ports" title="gitea ports" class="md-nav__link"> |
||||
gitea ports |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#python-file-server-ports" title="python file server ports" class="md-nav__link"> |
||||
python file server ports |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
</ul> |
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</ul> |
||||
|
||||
</nav> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<div class="md-content"> |
||||
<article class="md-content__inner md-typeset"> |
||||
|
||||
|
||||
|
||||
<h1 id="domains-and-ports">Domains and Ports<a class="headerlink" href="#domains-and-ports" title="Permanent link">¶</a></h1> |
||||
<h2 id="domains">Domains<a class="headerlink" href="#domains" title="Permanent link">¶</a></h2> |
||||
<p>There are three domains pointing to this server:</p> |
||||
<div class="codehilite"><pre><span></span>charlesreid1.com |
||||
charlesreid1.red |
||||
charlesreid1.blue |
||||
</pre></div> |
||||
|
||||
|
||||
<p>These are pointing to the server's IP address |
||||
using an A NAME DNS record.</p> |
||||
<p>There are also various subdomains set up |
||||
(www, git, files), all pointing to the |
||||
same location.</p> |
||||
<h3 id="nginx-domain-handling">nginx domain handling<a class="headerlink" href="#nginx-domain-handling" title="Permanent link">¶</a></h3> |
||||
<p>Nginx handles all of the domains by specifying |
||||
a different <code>domain_name</code> in each <code>server{}</code> block |
||||
of the nginx config files.</p> |
||||
<p>For example:</p> |
||||
<div class="codehilite"><pre><span></span>server { |
||||
listen 80; |
||||
listen [::]:80; |
||||
server_name charlesreid1.com; |
||||
... |
||||
} |
||||
|
||||
server { |
||||
listen 80; |
||||
listen [::]:80; |
||||
server_name charlesreid1.blue; |
||||
... |
||||
} |
||||
|
||||
server { |
||||
listen 80; |
||||
listen [::]:80; |
||||
server_name charlesreid1.red; |
||||
... |
||||
} |
||||
</pre></div> |
||||
|
||||
|
||||
<p>See the <code>conf.d</code> dir of |
||||
<a href="https://git.charlesreid1.com/docker/d-nginx-charlesreid1">d-nginx-charlesreid1</a>.</p> |
||||
<p>We will cover this in the nginx ports section, |
||||
but all http urls are redirected to https urls.</p> |
||||
<h2 id="ports">Ports<a class="headerlink" href="#ports" title="Permanent link">¶</a></h2> |
||||
<h3 id="overview">overview<a class="headerlink" href="#overview" title="Permanent link">¶</a></h3> |
||||
<p>The apache-mediawiki combination is running an apache service listening on port 8989. |
||||
This can be adjusted, but should be adjusted in the Dockerfile, <code>ports.conf</code>, and <code>wiki.conf</code>.</p> |
||||
<p>The apache service listens on all interfaces (hence <code>*:8989</code> in the apache conf file), |
||||
but there is no port mapping specified in <code>docker-compose.yml</code> so it does not listen |
||||
on any public interfaces.</p> |
||||
<p>Thus, the wiki is not publicly accessible via port 8989, but the wiki is available via port 8989 |
||||
to any container linked to, or connected to the same network as, the mediawiki apache container.</p> |
||||
<p>Meanwhile, the nginx container has a public interface listening on port 80 |
||||
and another listening on port 443. nginx listens for requests going to |
||||
the wiki, detected via the url resource prefix being <code>/w/</code> or <code>/wiki/</code>, |
||||
and acts as a reverse proxy, forwarding the requests to Apache.</p> |
||||
<p>The user transparently sees everything happening via port 80 or (preferrably) 443, |
||||
but on the backend nginx is passing along the URL request and returning the result.</p> |
||||
<p>Subdomains are served via reverse proxy on port 7777+. </p> |
||||
<p>The webhook server is a flask server listening on port 50000.</p> |
||||
<h3 id="nginx-ports">nginx ports<a class="headerlink" href="#nginx-ports" title="Permanent link">¶</a></h3> |
||||
<p>Also see <a href="../Service_nginx/">nginx service</a>.</p> |
||||
<p>Nginx has two main public-facing ports: |
||||
port 80 (HTTP) and port 443 (HTTPS).</p> |
||||
<p>All requests to <code>http://</code> urls go to port 80, |
||||
and all requests to <code>https://</code> urls go to port 443.</p> |
||||
<p>The server will automatically redirect all |
||||
requests to port 80 to port 443, turning all |
||||
http requests into https requests.</p> |
||||
<p>Nginx also exposes port 3000 and forwards it |
||||
along to <code>git.charlesreid1.com</code>. This is for |
||||
legacy reasons.</p> |
||||
<p>To work with MediaWiki, nginx must implement |
||||
rewrite rules: nginx listens for requests going |
||||
to wiki URLs (prefixed with <code>/w/</code> or <code>/wiki</code>) |
||||
and proxies those to the correct container.</p> |
||||
<h3 id="mediawikiapache-ports">mediawiki/apache ports<a class="headerlink" href="#mediawikiapache-ports" title="Permanent link">¶</a></h3> |
||||
<p>Also see <a href="../Service_mediawiki/">mediawiki service</a> |
||||
and <a href="../Service_apachephp/">apache/php service</a>.</p> |
||||
<p>The MediaWiki server runs on a PHP and Apache stack. |
||||
Inside the MediaWiki container, Apache listens on |
||||
port 8989. This port only connects to the nginx container, |
||||
so nginx is the only service that can connect to MediaWiki, |
||||
and only over port 8989.</p> |
||||
<p>This nginx-apache connection is not encrypted |
||||
because it happens on the same machine. </p> |
||||
<p>When the user connects to the wiki, for example at the url</p> |
||||
<div class="codehilite"><pre><span></span>https://charlesreid1.com/wiki/Nmap |
||||
</pre></div> |
||||
|
||||
|
||||
<p>the user's connection is with the nginx server. |
||||
The session is an https session happening over port 443 |
||||
and signed by nginx's certificates.</p> |
||||
<p>If the user goes to </p> |
||||
<div class="codehilite"><pre><span></span>http://charlesreid1.com/wiki/Nmap |
||||
</pre></div> |
||||
|
||||
|
||||
<p>on port 80, this is rewritten to</p> |
||||
<div class="codehilite"><pre><span></span>https://charlesreid1.com/wiki/Nmap |
||||
</pre></div> |
||||
|
||||
|
||||
<p>on port 443. In nginx, this is done with a 301:</p> |
||||
<div class="codehilite"><pre><span></span>server { |
||||
listen 80; |
||||
listen [::]:80; |
||||
server_name charlesreid1.com; |
||||
location / { |
||||
return 301 https://charlesreid1.com$request_uri; |
||||
} |
||||
} |
||||
</pre></div> |
||||
|
||||
|
||||
<p>Note that nginx plays the role of a central dispatcher |
||||
in the charlesreid1 pod - all containers connect to |
||||
nginx and only nginx, while nginx exposes each container |
||||
to the outside world via requests for various subdomains |
||||
being redirected to different ports.</p> |
||||
<h3 id="phpmyadmin-ports">phpmyadmin ports<a class="headerlink" href="#phpmyadmin-ports" title="Permanent link">¶</a></h3> |
||||
<p>Also see <a href="../Service_phpmyadmin/">phpmyadmin service</a>.</p> |
||||
<p>phpMyAdmin provides a web interface for MySQL databases.</p> |
||||
<p>This follows a similar pattern to the MediaWiki Apache container:</p> |
||||
<ul> |
||||
<li> |
||||
<p>The phpMyAdmin container is connected to the MySQL container |
||||
via the docker network created by the <code>docker-compose</code> command |
||||
(no container links needed)</p> |
||||
</li> |
||||
<li> |
||||
<p>The phpMyAdmin container runs an HTTP web interface available inside |
||||
the container on port 80. This service is exposed on port 80 on the |
||||
internal docker network only.</p> |
||||
</li> |
||||
<li> |
||||
<p>Since phpMyAdmin only listens on the Docker pod network for incoming |
||||
requests, all requests to phpMyAdmin must come through nginx via |
||||
reverse proxy. These are forwarded to port 80 of the phpMyAdmin container |
||||
on the back end.</p> |
||||
</li> |
||||
<li> |
||||
<p>We keep phpMyAdmin disabled on a regular basis, as it is not |
||||
heavily used and provides access to sensitive data and operations.</p> |
||||
</li> |
||||
</ul> |
||||
<p>To control access to phpMyAdmin, |
||||
configure the <a href="../Service_nginx/">nginx service</a> |
||||
to whitelist certain IPs to access |
||||
phpMyAdmin (or shut off all access).</p> |
||||
<h3 id="mysql-ports">mysql ports<a class="headerlink" href="#mysql-ports" title="Permanent link">¶</a></h3> |
||||
<p>Also see <a href="../Service_mysql/">mysql service</a>.</p> |
||||
<p>The MySQL container listens on port 3306 by default. |
||||
The container is only bound to the MediaWiki container, |
||||
so MediaWiki is the only service that can access MySQL.</p> |
||||
<h3 id="gitea-ports">gitea ports<a class="headerlink" href="#gitea-ports" title="Permanent link">¶</a></h3> |
||||
<p>Also see <a href="../Service_gitea/">gitea service</a>.</p> |
||||
<p>Requests for the subdomain <code>git.charlesreid1.com</code> |
||||
are redirected to port 3000 on the docker internal |
||||
container network, where gitea is listening.</p> |
||||
<p>Like the MediaWiki and phpMyAdmin containers, this follows |
||||
the same reverse proxy pattern:</p> |
||||
<ul> |
||||
<li>The nginx service handles front-end requests and |
||||
reverse proxies those rquests to gitea over the |
||||
internal docker container network.</li> |
||||
<li>Gitea listens to port 3000 and is bound to the |
||||
local docker network only.</li> |
||||
<li>Gitea does not implement HTTP on the back end; |
||||
nginx handles HTTPS with client on the front end.</li> |
||||
</ul> |
||||
<h3 id="python-file-server-ports">python file server ports<a class="headerlink" href="#python-file-server-ports" title="Permanent link">¶</a></h3> |
||||
<p>Also see <a href="../Service_pythonfiles/">python files service</a>.</p> |
||||
<p>We have a simple, lightweight Python HTTP server on port 8081 |
||||
on the Docker network. This container runs the following Python |
||||
command to start the server:</p> |
||||
<div class="codehilite"><pre><span></span>python -m http.server -b <bind-address> 8081 |
||||
</pre></div> |
||||
|
||||
|
||||
<p>This works because Python provides a built-in HTTP server |
||||
that, if no index.html file is present, will provide a |
||||
directory listing. This is as simple as it gets, |
||||
as far as file servers go.</p> |
||||
<p>This follows the same reverse proxy pattern:</p> |
||||
<ul> |
||||
<li> |
||||
<p>Python HTTP server listens for incoming requests |
||||
on port 8081 on the Docker network only. Client |
||||
requests are reverse proxied by <a href="https://git.charlesreid1.com/docker/d-nginx-charlesreid1">d-nginx-charlesreid1</a> |
||||
on the front end.</p> |
||||
</li> |
||||
<li> |
||||
<p>The server does not handle HTTPS, this is also |
||||
handled by the nginx container on the frontend.</p> |
||||
</li> |
||||
<li> |
||||
<p>The bind address and port of the Python HTTP server |
||||
are set in the command line. The <code><bind-address></code> |
||||
should be set to the name of the docker container image |
||||
(<code>stormy_files</code>).</p> |
||||
</li> |
||||
</ul> |
||||
<p>The command</p> |
||||
<div class="codehilite"><pre><span></span>python -m http.server -b stormy_files 8081 |
||||
</pre></div> |
||||
|
||||
|
||||
<p>listens on port 8081 inside the python file server |
||||
container <code>stormy_files</code> (the container itself).</p> |
||||
<p>The nginx server reverse-proxies requests for |
||||
<a href="https://files.charlesreid1.com">https://files.charlesreid1.com</a> |
||||
and forwards them to the container.</p> |
||||
<p>Note: this container can be expanded to a container |
||||
that serves multiple directories on multiple ports |
||||
by using twisted. See the |
||||
<a href="https://git.charlesreid1.com/docker/d-python-helium">d-python-helium</a> |
||||
repository for an example.</p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article> |
||||
</div> |
||||
</div> |
||||
</main> |
||||
|
||||
|
||||
<footer class="md-footer"> |
||||
|
||||
<div class="md-footer-nav"> |
||||
<nav class="md-footer-nav__inner md-grid"> |
||||
|
||||
<a href="../Backups/" title="Backups" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev"> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> |
||||
<span class="md-flex__ellipsis"> |
||||
<span class="md-footer-nav__direction"> |
||||
Previous |
||||
</span> |
||||
Backups |
||||
</span> |
||||
</div> |
||||
</a> |
||||
|
||||
|
||||
<a href="../Secrets/" title="Secrets" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next"> |
||||
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> |
||||
<span class="md-flex__ellipsis"> |
||||
<span class="md-footer-nav__direction"> |
||||
Next |
||||
</span> |
||||
Secrets |
||||
</span> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i> |
||||
</div> |
||||
</a> |
||||
|
||||
</nav> |
||||
</div> |
||||
|
||||
<div class="md-footer-meta md-typeset"> |
||||
<div class="md-footer-meta__inner md-grid"> |
||||
<div class="md-footer-copyright"> |
||||
|
||||
<div class="md-footer-copyright__highlight"> |
||||
Copyright © 2018 <a href="https://charlesreid1.com">Charles Reid</a>, released under the <a href="https://opensource.org/licenses/MIT">MIT license</a> |
||||
</div> |
||||
|
||||
powered by |
||||
<a href="https://www.mkdocs.org">MkDocs</a> |
||||
and |
||||
<a href="https://squidfunk.github.io/mkdocs-material/"> |
||||
Material for MkDocs</a> |
||||
</div> |
||||
|
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
</footer> |
||||
|
||||
</div> |
||||
|
||||
<script src="../assets/javascripts/application.e72fd936.js"></script> |
||||
|
||||
<script>app.initialize({version:"1.0.4",url:{base:".."}})</script> |
||||
|
||||
<script src="../search/main.js"></script> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body> |
||||
</html> |
@ -1,214 +0,0 @@
@@ -1,214 +0,0 @@
|
||||
# pod-charlesreid1 |
||||
|
||||
This repo contains a docker compose file |
||||
for running the charlesreid1.com site. |
||||
|
||||
## Services |
||||
|
||||
The services available through pod-charlesreid1 are: |
||||
|
||||
* mediawiki |
||||
* apache + php |
||||
* mysql |
||||
* phpmyadmin |
||||
* nginx (Let's Encrypt used offline for SSL certificates) |
||||
* python |
||||
* gitea |
||||
|
||||
## Links |
||||
|
||||
See the documentation site here: <https://pages.charlesreid1.com/pod-charlesreid1> |
||||
|
||||
Or visit [`docs/index.md`](/docs/index.md) |
||||
|
||||
Source code on git.charlesreid1.com: <https://git.charlesreid1.com/docker/pod-charlesreid1> |
||||
|
||||
Source code on github.com: <https://github.com/charlesreid1-docker/pod-charlesreid1> |
||||
|
||||
## Quick Start |
||||
|
||||
From your project directory, start up the pod: |
||||
|
||||
``` |
||||
$ docker-compose up |
||||
``` |
||||
|
||||
If you want to rebuild the images before starting them |
||||
(i.e., if you changed the Dockerfile and want to rebuild the |
||||
Docker image), use the `--build` flag: |
||||
|
||||
``` |
||||
$ docker-compose up --build |
||||
``` |
||||
|
||||
If you only want to rebuild the images without starting the |
||||
Docker pod, use the build verb: |
||||
|
||||
``` |
||||
$ docker-compose build |
||||
``` |
||||
|
||||
And finally, if you want to rebuild every container from scratch, |
||||
rather than using cached data (note that this may take a while), |
||||
add the `--no-cache` flag: |
||||
|
||||
``` |
||||
$ docker-compose build --no-cache |
||||
``` |
||||
|
||||
**IMPORTANT:** If you are not setting up the charlesreid1 pod using |
||||
ansible, you must also modify the contents of the following subdirectories |
||||
to render the templates in each submodule into usable configuration files. |
||||
|
||||
* `d-mediawiki/charlesreid1-config/` - contains MediaWiki extensions and configuration |
||||
files for MediaWiki. See <https://github.com/charlesreid1-docker/charlesreid1-wiki-config> |
||||
for details. |
||||
|
||||
* Build mediawiki extensions dir by running |
||||
`d-mediawiki/charlesreid1-config/build_extensions_dir.sh` |
||||
|
||||
* Render mediawiki config template (`LocalSettings.php`) by running |
||||
`d-mediawiki/charlesreid1-config/mediawiki/apply_templates.py` |
||||
|
||||
* Render apache config template (`charlesreid1.wiki.conf`) by running |
||||
`d-mediawiki/charlesreid1-config/apache/apply_templates.py` |
||||
|
||||
* `d-nginx-charlesreid1/conf.d` - contains templates for nginx config files, but are not |
||||
rendered until the render templates script is run. |
||||
|
||||
* Render nginx configuration file templates (`d-nginx-charlesreid1/conf.d/`) |
||||
by running `d-nginx-charlesreid1/apply_templates.py` |
||||
(note that this _should_ render templates into `d-nginx-charlesreid1/conf.d/` |
||||
but may actually render templates into `d-nginx-charlesreid1/conf.d_examples`, |
||||
in which case you need to copy the configuration files in the `conf.d_examples` |
||||
directory into the `conf.d` directory) |
||||
|
||||
|
||||
## Running |
||||
|
||||
See **[Running.md](docs/Running.md)** for info about running this docker pod: |
||||
|
||||
* Running the Docker Pod from Comand Line |
||||
* Running the Docker Pod as a Startup Service |
||||
* Workflow for Charlesreid1 Docker Pod Updates |
||||
* Restoring the Docker Pod from Backups |
||||
|
||||
|
||||
## Volumes |
||||
|
||||
See **[Volumes.md](docs/Volumes.md)** for info about data and volumes |
||||
used by this docker pod: |
||||
|
||||
* Persistent Data Volumes |
||||
* nginx |
||||
* nginx + lets encrypt ssl certificates |
||||
* nginx static content |
||||
* nginx bind-mounted files |
||||
* mysql |
||||
* mediawiki |
||||
* mediawiki data volume |
||||
* mediawiki bind-mounted files |
||||
* gitea |
||||
* gitea data volume |
||||
* gitea bind-mounted files |
||||
* python file server (pyfiles) |
||||
* pyfiles directory |
||||
|
||||
|
||||
## Backups |
||||
|
||||
There are a number of directories containing utility scripts - these are mostly |
||||
dedicated to creating backups of any non-version-controlled data inside the container. |
||||
|
||||
See **[Backups.md](docs/Backups.md)** for coverage of backup and utility scripts. |
||||
|
||||
`utils-backups` - backup utilities (for cron jobs) |
||||
|
||||
`utils-mw` - mediawiki backup utilities |
||||
|
||||
`utils-mysql` mysql backup utilities |
||||
|
||||
|
||||
## Domains and Ports |
||||
|
||||
See **[Domains and Ports.md](docs/Ports.md)** for info about top-level domain names |
||||
and ports used by this docker pod. |
||||
|
||||
The domains ports document covers: |
||||
|
||||
* Domains |
||||
* nginx domain handling |
||||
* Ports |
||||
* nginx ports |
||||
* mediawiki/apache ports |
||||
* phpmyadmin ports |
||||
* mysql ports |
||||
* gitea ports |
||||
* python file server ports |
||||
|
||||
|
||||
### Additional Port Info |
||||
|
||||
The apache-mediawiki combination is running an apache service listening on port 8989. |
||||
This can be adjusted, but should be adjusted in the Dockerfile, `ports.conf`, and `wiki.conf`. |
||||
|
||||
The apache service listens on all interfaces (hence `*:8989` in the apache conf file), |
||||
but there is no port mapping specified in `docker-compose.yml` so it does not listen |
||||
on any public interfaces. |
||||
|
||||
Thus, the wiki is not publicly accessible via port 8989, but the wiki is available via port 8989 |
||||
to any container linked to, or connected to the same network as, the mediawiki apache container. |
||||
|
||||
Meanwhile, the nginx container has a public interface listening on port 80 |
||||
and another listening on port 443. nginx listens for requests going to |
||||
the wiki, detected via the url resource prefix being `/w/` or `/wiki/`, |
||||
and acts as a reverse proxy, forwarding the requests to Apache. |
||||
|
||||
The user transparently sees everything happening via port 80 or (preferrably) 443, |
||||
but on the backend nginx is passing along the URL request and returning the result. |
||||
|
||||
Subdomains are served via reverse proxy on port 7777+. |
||||
|
||||
The webhook server is a flask server listening on port 5000. |
||||
|
||||
|
||||
## Secrets |
||||
|
||||
See **[Secrets.md](Secrets.md)** for more info about getting secrets like |
||||
passwords and sensitive files into various containers in the pod. |
||||
|
||||
The important bit: we use `root.password` to store the password, and pass it |
||||
into containers as an environment variable. Only this top-level pod-charlesreid1 |
||||
repo should use the file `root.password`. |
||||
|
||||
Details covered on the secrets page: |
||||
|
||||
* mysql database root password |
||||
* mediawiki mysql database root password |
||||
* gitea secret key and session id |
||||
* nginx ssl certificates |
||||
|
||||
|
||||
## Container-Specific Configuration Details |
||||
|
||||
Each container has a different way of getting |
||||
configuration files into the container. |
||||
In the following documents we cover |
||||
the specifics of each container. |
||||
|
||||
* [mediawiki](Service_mediawiki.md) |
||||
* [apache + php](Service_apachephp.md) |
||||
* [mysql](Service_mysql.md) |
||||
* [phpmyadmin](Service_phpmyadmin.md) |
||||
* [nginx + ssl](Service_nginx.md) |
||||
* [python](Service_pythonfiles.md) |
||||
* [gitea](Service_gitea.md) |
||||
|
||||
|
||||
## Links |
||||
|
||||
docker compose documentation: |
||||
|
||||
* [getting started](https://docs.docker.com/compose/gettingstarted/#step-4-build-and-run-your-app-with-compose) |
||||
* [set environment variables in containers](https://docs.docker.com/compose/environment-variables/#set-environment-variables-in-containers) |
||||
|
@ -0,0 +1,823 @@
@@ -0,0 +1,823 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<!DOCTYPE html> |
||||
<html lang="en" class="no-js"> |
||||
<head> |
||||
|
||||
<meta charset="utf-8"> |
||||
<meta name="viewport" content="width=device-width,initial-scale=1"> |
||||
<meta http-equiv="x-ua-compatible" content="ie=edge"> |
||||
|
||||
|
||||
<link rel="canonical" href="https://pages.charlesreid1.com/pod-charlesreid1/Running/"> |
||||
|
||||
|
||||
|
||||
<meta name="lang:clipboard.copy" content="Copy to clipboard"> |
||||
|
||||
<meta name="lang:clipboard.copied" content="Copied to clipboard"> |
||||
|
||||
<meta name="lang:search.language" content="en"> |
||||
|
||||
<meta name="lang:search.pipeline.stopwords" content="True"> |
||||
|
||||
<meta name="lang:search.pipeline.trimmer" content="True"> |
||||
|
||||
<meta name="lang:search.result.none" content="No matching documents"> |
||||
|
||||
<meta name="lang:search.result.one" content="1 matching document"> |
||||
|
||||
<meta name="lang:search.result.other" content="# matching documents"> |
||||
|
||||
<meta name="lang:search.tokenizer" content="[\s\-]+"> |
||||
|
||||
<link rel="shortcut icon" href=".."> |
||||
<meta name="generator" content="mkdocs-1.0.4, mkdocs-material-3.0.3"> |
||||
|
||||
|
||||
|
||||
<title>Running the Pod - pod-charlesreid1</title> |
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/application.451f80e5.css"> |
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/application-palette.22915126.css"> |
||||
|
||||
|
||||
|
||||
|
||||
<meta name="theme-color" content="#2196f3"> |
||||
|
||||
|
||||
|
||||
<script src="../assets/javascripts/modernizr.1aa3b519.js"></script> |
||||
|
||||
|
||||
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin> |
||||
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono"> |
||||
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style> |
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/fonts/material-icons.css"> |
||||
|
||||
<link rel="stylesheet" href="../css/custom.css"> |
||||
|
||||
|
||||
</head> |
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-primary="blue" data-md-color-accent="blue"> |
||||
|
||||
<svg class="md-svg"> |
||||
<defs> |
||||
|
||||
|
||||
</defs> |
||||
</svg> |
||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> |
||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> |
||||
<label class="md-overlay" data-md-component="overlay" for="__drawer"></label> |
||||
|
||||
<a href="../#running-the-charlesreid1-docker-pod" tabindex="1" class="md-skip"> |
||||
Skip to content |
||||
</a> |
||||
|
||||
|
||||
<header class="md-header" data-md-component="header"> |
||||
<nav class="md-header-nav md-grid"> |
||||
<div class="md-flex"> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<a href="https://pages.charlesreid1.com/pod-charlesreid1" title="pod-charlesreid1" class="md-header-nav__button md-logo"> |
||||
|
||||
<i class="md-icon">dns</i> |
||||
|
||||
</a> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--stretch"> |
||||
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title"> |
||||
|
||||
|
||||
<span class="md-header-nav__topic"> |
||||
pod-charlesreid1 |
||||
</span> |
||||
<span class="md-header-nav__topic"> |
||||
Running the Pod |
||||
</span> |
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
|
||||
|
||||
<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label> |
||||
|
||||
<div class="md-search" data-md-component="search" role="dialog"> |
||||
<label class="md-search__overlay" for="__search"></label> |
||||
<div class="md-search__inner" role="search"> |
||||
<form class="md-search__form" name="search"> |
||||
<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active"> |
||||
<label class="md-icon md-search__icon" for="__search"></label> |
||||
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1"> |
||||
 |
||||
</button> |
||||
</form> |
||||
<div class="md-search__output"> |
||||
<div class="md-search__scrollwrap" data-md-scrollfix> |
||||
<div class="md-search-result" data-md-component="result"> |
||||
<div class="md-search-result__meta"> |
||||
Type to start searching |
||||
</div> |
||||
<ol class="md-search-result__list"></ol> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
</div> |
||||
|
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<div class="md-header-nav__source"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="https://git.charlesreid1.com/docker/pod-charlesreid1" title="Go to repository" class="md-source" data-md-source=""> |
||||
|
||||
<div class="md-source__repository"> |
||||
pod-charlesreid1 |
||||
</div> |
||||
</a> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
</nav> |
||||
</header> |
||||
|
||||
<div class="md-container"> |
||||
|
||||
|
||||
|
||||
<main class="md-main"> |
||||
<div class="md-main__inner md-grid" data-md-component="container"> |
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation"> |
||||
<div class="md-sidebar__scrollwrap"> |
||||
<div class="md-sidebar__inner"> |
||||
<nav class="md-nav md-nav--primary" data-md-level="0"> |
||||
<label class="md-nav__title md-nav__title--site" for="__drawer"> |
||||
<a href="https://pages.charlesreid1.com/pod-charlesreid1" title="pod-charlesreid1" class="md-nav__button md-logo"> |
||||
|
||||
<i class="md-icon">dns</i> |
||||
|
||||
</a> |
||||
pod-charlesreid1 |
||||
</label> |
||||
|
||||
<div class="md-nav__source"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="https://git.charlesreid1.com/docker/pod-charlesreid1" title="Go to repository" class="md-source" data-md-source=""> |
||||
|
||||
<div class="md-source__repository"> |
||||
pod-charlesreid1 |
||||
</div> |
||||
</a> |
||||
|
||||
</div> |
||||
|
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href=".." title="Index" class="md-nav__link"> |
||||
Index |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested"> |
||||
|
||||
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2"> |
||||
|
||||
<label class="md-nav__link" for="nav-2"> |
||||
Services |
||||
</label> |
||||
<nav class="md-nav" data-md-component="collapsible" data-md-level="1"> |
||||
<label class="md-nav__title" for="nav-2"> |
||||
Services |
||||
</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_mediawiki/" title="Pod Service: MediaWiki" class="md-nav__link"> |
||||
Pod Service: MediaWiki |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_apachephp/" title="Pod Service: Apache/PHP" class="md-nav__link"> |
||||
Pod Service: Apache/PHP |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_mysql/" title="Pod Service: MySQL" class="md-nav__link"> |
||||
Pod Service: MySQL |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_phpmyadmin/" title="Pod Service: phpMyAdmin" class="md-nav__link"> |
||||
Pod Service: phpMyAdmin |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_nginx/" title="Pod Service: nginx" class="md-nav__link"> |
||||
Pod Service: nginx |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_pythonfiles/" title="Pod Service: Python File Server" class="md-nav__link"> |
||||
Pod Service: Python File Server |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_gitea/" title="Pod Service: Gitea" class="md-nav__link"> |
||||
Pod Service: Gitea |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
</ul> |
||||
</nav> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--active"> |
||||
|
||||
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc"> |
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link md-nav__link--active" for="__toc"> |
||||
Running the Pod |
||||
</label> |
||||
|
||||
<a href="./" title="Running the Pod" class="md-nav__link md-nav__link--active"> |
||||
Running the Pod |
||||
</a> |
||||
|
||||
|
||||
<nav class="md-nav md-nav--secondary"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">Table of contents</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#the-docker-compose-file" title="The Docker Compose File" class="md-nav__link"> |
||||
The Docker Compose File |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#running-charlesreid1-docker-pod-from-command-line" title="Running Charlesreid1 Docker Pod from Command Line" class="md-nav__link"> |
||||
Running Charlesreid1 Docker Pod from Command Line |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#running-charlesreid1-docker-pod-as-startup-service" title="Running Charlesreid1 Docker Pod as Startup Service" class="md-nav__link"> |
||||
Running Charlesreid1 Docker Pod as Startup Service |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#workflow-for-charlesreid1-docker-pod-updates" title="Workflow for Charlesreid1 Docker Pod Updates" class="md-nav__link"> |
||||
Workflow for Charlesreid1 Docker Pod Updates |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#restoring-docker-pod-from-backups" title="Restoring Docker Pod from Backups" class="md-nav__link"> |
||||
Restoring Docker Pod from Backups |
||||
</a> |
||||
|
||||
<nav class="md-nav"> |
||||
<ul class="md-nav__list"> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#mysql-restore" title="mysql restore" class="md-nav__link"> |
||||
mysql restore |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#mediawiki-restore" title="mediawiki restore" class="md-nav__link"> |
||||
mediawiki restore |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#gitea-restore" title="gitea restore" class="md-nav__link"> |
||||
gitea restore |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
</ul> |
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</ul> |
||||
|
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Volumes/" title="Volumes" class="md-nav__link"> |
||||
Volumes |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Backups/" title="Backups" class="md-nav__link"> |
||||
Backups |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Ports/" title="Domains and Ports" class="md-nav__link"> |
||||
Domains and Ports |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Secrets/" title="Secrets" class="md-nav__link"> |
||||
Secrets |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
</ul> |
||||
</nav> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc"> |
||||
<div class="md-sidebar__scrollwrap"> |
||||
<div class="md-sidebar__inner"> |
||||
|
||||
<nav class="md-nav md-nav--secondary"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">Table of contents</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#the-docker-compose-file" title="The Docker Compose File" class="md-nav__link"> |
||||
The Docker Compose File |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#running-charlesreid1-docker-pod-from-command-line" title="Running Charlesreid1 Docker Pod from Command Line" class="md-nav__link"> |
||||
Running Charlesreid1 Docker Pod from Command Line |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#running-charlesreid1-docker-pod-as-startup-service" title="Running Charlesreid1 Docker Pod as Startup Service" class="md-nav__link"> |
||||
Running Charlesreid1 Docker Pod as Startup Service |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#workflow-for-charlesreid1-docker-pod-updates" title="Workflow for Charlesreid1 Docker Pod Updates" class="md-nav__link"> |
||||
Workflow for Charlesreid1 Docker Pod Updates |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#restoring-docker-pod-from-backups" title="Restoring Docker Pod from Backups" class="md-nav__link"> |
||||
Restoring Docker Pod from Backups |
||||
</a> |
||||
|
||||
<nav class="md-nav"> |
||||
<ul class="md-nav__list"> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#mysql-restore" title="mysql restore" class="md-nav__link"> |
||||
mysql restore |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#mediawiki-restore" title="mediawiki restore" class="md-nav__link"> |
||||
mediawiki restore |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#gitea-restore" title="gitea restore" class="md-nav__link"> |
||||
gitea restore |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
</ul> |
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</ul> |
||||
|
||||
</nav> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<div class="md-content"> |
||||
<article class="md-content__inner md-typeset"> |
||||
|
||||
|
||||
|
||||
<h1 id="running-the-charlesreid1-docker-pod">Running the Charlesreid1 Docker Pod<a class="headerlink" href="#running-the-charlesreid1-docker-pod" title="Permanent link">¶</a></h1> |
||||
<p>This docker pod runs the main charlesreid1.com site. |
||||
To run the pod, use the <code>docker-compose</code> command.</p> |
||||
<h2 id="the-docker-compose-file">The Docker Compose File<a class="headerlink" href="#the-docker-compose-file" title="Permanent link">¶</a></h2> |
||||
<p>The <code>docker-compose.yml</code> file contains all the directives needed |
||||
to run a docker pod of containers that make Charlesreid1.com work.</p> |
||||
<p>Why use docker-compose instead of docker? |
||||
docker-compose is the preferred way to run multiple containers.</p> |
||||
<p><strong>Huh? Where's docker-compose.yml??</strong></p> |
||||
<p>Instead of a <code>docker-compose.yml</code> file, |
||||
you'll see a <code>docker-compose.fixme.yml</code> file. |
||||
You need to fix this YML file by hard-coding your |
||||
MYSQL password in the file.</p> |
||||
<p>(There is also a Jinja template, <code>docker-compose.yml.j2</code>, |
||||
usable with <a href="https://git.charlesreid1.com/charlesreid1/charlesreid1-ansible">charlesreid1-ansible</a>.)</p> |
||||
<p>See the steps below for using the "fixme" file.</p> |
||||
<p><a name="RunningCLI"></a></p> |
||||
<h2 id="running-charlesreid1-docker-pod-from-command-line">Running Charlesreid1 Docker Pod from Command Line<a class="headerlink" href="#running-charlesreid1-docker-pod-from-command-line" title="Permanent link">¶</a></h2> |
||||
<p>We start by covering how to run the docker pod from the command line.</p> |
||||
<p>First, set the MySQL password using a sed one-liner:</p> |
||||
<div class="codehilite"><pre><span></span>$ sed "s/REPLACEME/YoFooThisIsYourNewPassword/" docker-compose.fixme.yml > docker-compose.yml |
||||
</pre></div> |
||||
|
||||
|
||||
<p>Now you can run the container pod with</p> |
||||
<div class="codehilite"><pre><span></span>docker-compose up # interactive |
||||
docker-compose up -d # detached |
||||
</pre></div> |
||||
|
||||
|
||||
<p>or, if you want to rebuild all the containers before running up,</p> |
||||
<div class="codehilite"><pre><span></span>docker-compose up --build |
||||
</pre></div> |
||||
|
||||
|
||||
<p>If you just want to rebuild the containers,</p> |
||||
<div class="codehilite"><pre><span></span>docker-compose build |
||||
</pre></div> |
||||
|
||||
|
||||
<p>and this will rebuild the containers from scratch:</p> |
||||
<div class="codehilite"><pre><span></span>docker-compose build --no-cache |
||||
</pre></div> |
||||
|
||||
|
||||
<p><strong><em>WARNING:</em></strong> for large, complicated container images, |
||||
this command can take a very long time. |
||||
Use with care.)</p> |
||||
<p>You can restart all containers in a pod using the restart command:</p> |
||||
<div class="codehilite"><pre><span></span>docker-compose restart |
||||
</pre></div> |
||||
|
||||
|
||||
<p><strong><em>WARNING:</em></strong> this will <strong><em>NOT</em></strong> pick up changes to |
||||
Dockerfiles or to files that are mounted into the container. |
||||
This simply restarts the container using the same image |
||||
(in memory) that was previously running, <strong><em>without</em></strong> |
||||
getting an up-to-date container image.</p> |
||||
<p><a name="RunningService"></a></p> |
||||
<h2 id="running-charlesreid1-docker-pod-as-startup-service">Running Charlesreid1 Docker Pod as Startup Service<a class="headerlink" href="#running-charlesreid1-docker-pod-as-startup-service" title="Permanent link">¶</a></h2> |
||||
<p>If you want to run the pod as a startup service, |
||||
see the <code>scripts/</code> folder for a startup service |
||||
that can be used with systemd. This is also included |
||||
below:</p> |
||||
<p><strong><code>pod-charlesreid1.service:</code></strong></p> |
||||
<div class="codehilite"><pre><span></span>[Unit] |
||||
Description=charlesreid1 docker pod |
||||
Requires=docker.service |
||||
After=docker.service |
||||
|
||||
[Service] |
||||
Restart=always |
||||
ExecStart=/usr/local/bin/docker-compose -f /home/charles/codes/docker/pod-charlesreid1/docker-compose.yml up |
||||
ExecStop=/usr/local/bin/docker-compose -f /home/charles/codes/docker/pod-charlesreid1/docker-compose.yml stop |
||||
|
||||
[Install] |
||||
WantedBy=default.target |
||||
</pre></div> |
||||
|
||||
|
||||
<p>Now install the service to <code>/etc/systemd/system/pod-charlesreid1.servce</code>, |
||||
and activate it:</p> |
||||
<div class="codehilite"><pre><span></span>sudo systemctl enable pod-charlesreid1.service |
||||
</pre></div> |
||||
|
||||
|
||||
<p>Now you can start/stop the service with:</p> |
||||
<div class="codehilite"><pre><span></span>sudo systemctl (start|stop) pod-charlesreid1.service |
||||
</pre></div> |
||||
|
||||
|
||||
<p>NOTE: if you need to debug the containers, |
||||
or update any config files copied into the container, |
||||
be sure and stop the service before doing a |
||||
<code>docker-compose stop</code> or a <code>docker-compose up --build</code>, |
||||
otherwise the pod will continually respawn.</p> |
||||
<p><a name="Workflow"></a></p> |
||||
<h2 id="workflow-for-charlesreid1-docker-pod-updates">Workflow for Charlesreid1 Docker Pod Updates<a class="headerlink" href="#workflow-for-charlesreid1-docker-pod-updates" title="Permanent link">¶</a></h2> |
||||
<p>This section covers a workflow if you're updating the docker pod.</p> |
||||
<p>As noted above, a simple <code>docker-compose restart</code> won't pick up |
||||
changes in Dockerfiles or files mounted into the image, so |
||||
you often need to stop the containers and restart them after |
||||
rebuilding the container images.</p> |
||||
<p>However, if you update your files (particularly if you add a lot of new |
||||
apt packages), it can take a long time to build the containers. |
||||
This can result in a lot of downtime if you take the containers down |
||||
before rebuilding them.</p> |
||||
<p>To minimize downtime, use the following workflow:</p> |
||||
<ul> |
||||
<li>Run <code>docker-compose build</code> to rebuild the images, leaving the pod running (they are not affected)</li> |
||||
<li>Run <code>docker-compose down</code> to bring the pod down</li> |
||||
<li>Run <code>docker-compose up</code> to bring the pod up</li> |
||||
</ul> |
||||
<p>It may take a few seconds to bring the pod down, |
||||
and that will be your total amount of downtime.</p> |
||||
<p><a name="Backups"></a></p> |
||||
<h2 id="restoring-docker-pod-from-backups">Restoring Docker Pod from Backups<a class="headerlink" href="#restoring-docker-pod-from-backups" title="Permanent link">¶</a></h2> |
||||
<p>Also see <strong><a href="../Backups/">Backups.md</a></strong>.</p> |
||||
<p>Now that the pod is running, you probably need to seed it with data.</p> |
||||
<p>You will need two mediawiki restore files and two gitea restore files, |
||||
everything else comes from git.charlesreid1.com or github.com |
||||
(this will create a bootstrapping problem if you have no git.charlesreid1.com):</p> |
||||
<ul> |
||||
<li>MediaWiki database backup</li> |
||||
<li>MediaWiki files (images) backup</li> |
||||
<li>Gitea dump zip file</li> |
||||
<li>Gitea avatars zip file</li> |
||||
</ul> |
||||
<p>Now you can restore the database as follows:</p> |
||||
<ul> |
||||
<li>MySQL database restore scripts for MediaWiki are in <code>utils-mysql/</code> dir</li> |
||||
<li>MediaWiki image directory restore scripts are in <code>utils-mw/</code> dir</li> |
||||
<li>Gitea database and avatars come from backups using scripts in <code>utils-gitea/</code> dir</li> |
||||
</ul> |
||||
<h3 id="mysql-restore">mysql restore<a class="headerlink" href="#mysql-restore" title="Permanent link">¶</a></h3> |
||||
<p>To restore a database from a dump:</p> |
||||
<div class="codehilite"><pre><span></span>cd utils-mysql/ |
||||
./restore_database.sh /path/to/dump/wikidb.sql |
||||
</pre></div> |
||||
|
||||
|
||||
<p>The MySQL container must be running for this to work. |
||||
(You may need to adjust the MySQL container name in the script.)</p> |
||||
<h3 id="mediawiki-restore">mediawiki restore<a class="headerlink" href="#mediawiki-restore" title="Permanent link">¶</a></h3> |
||||
<p>To restore the MediaWiki images directory:</p> |
||||
<div class="codehilite"><pre><span></span>cd utils-mw/ |
||||
./restore_wikifiles.sh /path/to/wikifiles.tar.gz |
||||
</pre></div> |
||||
|
||||
|
||||
<h3 id="gitea-restore">gitea restore<a class="headerlink" href="#gitea-restore" title="Permanent link">¶</a></h3> |
||||
<p>The gitea container can be restored from a backup as follows:</p> |
||||
<div class="codehilite"><pre><span></span>cd utils-gitea/ |
||||
./restore_gitea.sh /path/to/gitea-dump.zip /path/to/gitea-avatars.zip |
||||
</pre></div> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article> |
||||
</div> |
||||
</div> |
||||
</main> |
||||
|
||||
|
||||
<footer class="md-footer"> |
||||
|
||||
<div class="md-footer-nav"> |
||||
<nav class="md-footer-nav__inner md-grid"> |
||||
|
||||
<a href="../Service_gitea/" title="Pod Service: Gitea" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev"> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> |
||||
<span class="md-flex__ellipsis"> |
||||
<span class="md-footer-nav__direction"> |
||||
Previous |
||||
</span> |
||||
Pod Service: Gitea |
||||
</span> |
||||
</div> |
||||
</a> |
||||
|
||||
|
||||
<a href="../Volumes/" title="Volumes" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next"> |
||||
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> |
||||
<span class="md-flex__ellipsis"> |
||||
<span class="md-footer-nav__direction"> |
||||
Next |
||||
</span> |
||||
Volumes |
||||
</span> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i> |
||||
</div> |
||||
</a> |
||||
|
||||
</nav> |
||||
</div> |
||||
|
||||
<div class="md-footer-meta md-typeset"> |
||||
<div class="md-footer-meta__inner md-grid"> |
||||
<div class="md-footer-copyright"> |
||||
|
||||
<div class="md-footer-copyright__highlight"> |
||||
Copyright © 2018 <a href="https://charlesreid1.com">Charles Reid</a>, released under the <a href="https://opensource.org/licenses/MIT">MIT license</a> |
||||
</div> |
||||
|
||||
powered by |
||||
<a href="https://www.mkdocs.org">MkDocs</a> |
||||
and |
||||
<a href="https://squidfunk.github.io/mkdocs-material/"> |
||||
Material for MkDocs</a> |
||||
</div> |
||||
|
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
</footer> |
||||
|
||||
</div> |
||||
|
||||
<script src="../assets/javascripts/application.e72fd936.js"></script> |
||||
|
||||
<script>app.initialize({version:"1.0.4",url:{base:".."}})</script> |
||||
|
||||
<script src="../search/main.js"></script> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body> |
||||
</html> |
@ -0,0 +1,628 @@
@@ -0,0 +1,628 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<!DOCTYPE html> |
||||
<html lang="en" class="no-js"> |
||||
<head> |
||||
|
||||
<meta charset="utf-8"> |
||||
<meta name="viewport" content="width=device-width,initial-scale=1"> |
||||
<meta http-equiv="x-ua-compatible" content="ie=edge"> |
||||
|
||||
|
||||
<link rel="canonical" href="https://pages.charlesreid1.com/pod-charlesreid1/Secrets/"> |
||||
|
||||
|
||||
|
||||
<meta name="lang:clipboard.copy" content="Copy to clipboard"> |
||||
|
||||
<meta name="lang:clipboard.copied" content="Copied to clipboard"> |
||||
|
||||
<meta name="lang:search.language" content="en"> |
||||
|
||||
<meta name="lang:search.pipeline.stopwords" content="True"> |
||||
|
||||
<meta name="lang:search.pipeline.trimmer" content="True"> |
||||
|
||||
<meta name="lang:search.result.none" content="No matching documents"> |
||||
|
||||
<meta name="lang:search.result.one" content="1 matching document"> |
||||
|
||||
<meta name="lang:search.result.other" content="# matching documents"> |
||||
|
||||
<meta name="lang:search.tokenizer" content="[\s\-]+"> |
||||
|
||||
<link rel="shortcut icon" href=".."> |
||||
<meta name="generator" content="mkdocs-1.0.4, mkdocs-material-3.0.3"> |
||||
|
||||
|
||||
|
||||
<title>Secrets - pod-charlesreid1</title> |
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/application.451f80e5.css"> |
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/application-palette.22915126.css"> |
||||
|
||||
|
||||
|
||||
|
||||
<meta name="theme-color" content="#2196f3"> |
||||
|
||||
|
||||
|
||||
<script src="../assets/javascripts/modernizr.1aa3b519.js"></script> |
||||
|
||||
|
||||
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin> |
||||
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono"> |
||||
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style> |
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/fonts/material-icons.css"> |
||||
|
||||
<link rel="stylesheet" href="../css/custom.css"> |
||||
|
||||
|
||||
</head> |
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-primary="blue" data-md-color-accent="blue"> |
||||
|
||||
<svg class="md-svg"> |
||||
<defs> |
||||
|
||||
|
||||
</defs> |
||||
</svg> |
||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> |
||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> |
||||
<label class="md-overlay" data-md-component="overlay" for="__drawer"></label> |
||||
|
||||
<a href="../#secrets" tabindex="1" class="md-skip"> |
||||
Skip to content |
||||
</a> |
||||
|
||||
|
||||
<header class="md-header" data-md-component="header"> |
||||
<nav class="md-header-nav md-grid"> |
||||
<div class="md-flex"> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<a href="https://pages.charlesreid1.com/pod-charlesreid1" title="pod-charlesreid1" class="md-header-nav__button md-logo"> |
||||
|
||||
<i class="md-icon">dns</i> |
||||
|
||||
</a> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--stretch"> |
||||
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title"> |
||||
|
||||
|
||||
<span class="md-header-nav__topic"> |
||||
pod-charlesreid1 |
||||
</span> |
||||
<span class="md-header-nav__topic"> |
||||
Secrets |
||||
</span> |
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
|
||||
|
||||
<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label> |
||||
|
||||
<div class="md-search" data-md-component="search" role="dialog"> |
||||
<label class="md-search__overlay" for="__search"></label> |
||||
<div class="md-search__inner" role="search"> |
||||
<form class="md-search__form" name="search"> |
||||
<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active"> |
||||
<label class="md-icon md-search__icon" for="__search"></label> |
||||
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1"> |
||||
 |
||||
</button> |
||||
</form> |
||||
<div class="md-search__output"> |
||||
<div class="md-search__scrollwrap" data-md-scrollfix> |
||||
<div class="md-search-result" data-md-component="result"> |
||||
<div class="md-search-result__meta"> |
||||
Type to start searching |
||||
</div> |
||||
<ol class="md-search-result__list"></ol> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
</div> |
||||
|
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<div class="md-header-nav__source"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="https://git.charlesreid1.com/docker/pod-charlesreid1" title="Go to repository" class="md-source" data-md-source=""> |
||||
|
||||
<div class="md-source__repository"> |
||||
pod-charlesreid1 |
||||
</div> |
||||
</a> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
</nav> |
||||
</header> |
||||
|
||||
<div class="md-container"> |
||||
|
||||
|
||||
|
||||
<main class="md-main"> |
||||
<div class="md-main__inner md-grid" data-md-component="container"> |
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation"> |
||||
<div class="md-sidebar__scrollwrap"> |
||||
<div class="md-sidebar__inner"> |
||||
<nav class="md-nav md-nav--primary" data-md-level="0"> |
||||
<label class="md-nav__title md-nav__title--site" for="__drawer"> |
||||
<a href="https://pages.charlesreid1.com/pod-charlesreid1" title="pod-charlesreid1" class="md-nav__button md-logo"> |
||||
|
||||
<i class="md-icon">dns</i> |
||||
|
||||
</a> |
||||
pod-charlesreid1 |
||||
</label> |
||||
|
||||
<div class="md-nav__source"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="https://git.charlesreid1.com/docker/pod-charlesreid1" title="Go to repository" class="md-source" data-md-source=""> |
||||
|
||||
<div class="md-source__repository"> |
||||
pod-charlesreid1 |
||||
</div> |
||||
</a> |
||||
|
||||
</div> |
||||
|
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href=".." title="Index" class="md-nav__link"> |
||||
Index |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested"> |
||||
|
||||
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2"> |
||||
|
||||
<label class="md-nav__link" for="nav-2"> |
||||
Services |
||||
</label> |
||||
<nav class="md-nav" data-md-component="collapsible" data-md-level="1"> |
||||
<label class="md-nav__title" for="nav-2"> |
||||
Services |
||||
</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_mediawiki/" title="Pod Service: MediaWiki" class="md-nav__link"> |
||||
Pod Service: MediaWiki |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_apachephp/" title="Pod Service: Apache/PHP" class="md-nav__link"> |
||||
Pod Service: Apache/PHP |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_mysql/" title="Pod Service: MySQL" class="md-nav__link"> |
||||
Pod Service: MySQL |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_phpmyadmin/" title="Pod Service: phpMyAdmin" class="md-nav__link"> |
||||
Pod Service: phpMyAdmin |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_nginx/" title="Pod Service: nginx" class="md-nav__link"> |
||||
Pod Service: nginx |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_pythonfiles/" title="Pod Service: Python File Server" class="md-nav__link"> |
||||
Pod Service: Python File Server |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_gitea/" title="Pod Service: Gitea" class="md-nav__link"> |
||||
Pod Service: Gitea |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
</ul> |
||||
</nav> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Running/" title="Running the Pod" class="md-nav__link"> |
||||
Running the Pod |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Volumes/" title="Volumes" class="md-nav__link"> |
||||
Volumes |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Backups/" title="Backups" class="md-nav__link"> |
||||
Backups |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Ports/" title="Domains and Ports" class="md-nav__link"> |
||||
Domains and Ports |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--active"> |
||||
|
||||
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc"> |
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link md-nav__link--active" for="__toc"> |
||||
Secrets |
||||
</label> |
||||
|
||||
<a href="./" title="Secrets" class="md-nav__link md-nav__link--active"> |
||||
Secrets |
||||
</a> |
||||
|
||||
|
||||
<nav class="md-nav md-nav--secondary"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">Table of contents</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#mysql-password" title="MySQL Password" class="md-nav__link"> |
||||
MySQL Password |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#nginx-ssl-certificates" title="Nginx SSL Certificates" class="md-nav__link"> |
||||
Nginx SSL Certificates |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</ul> |
||||
|
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
|
||||
</ul> |
||||
</nav> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc"> |
||||
<div class="md-sidebar__scrollwrap"> |
||||
<div class="md-sidebar__inner"> |
||||
|
||||
<nav class="md-nav md-nav--secondary"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">Table of contents</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#mysql-password" title="MySQL Password" class="md-nav__link"> |
||||
MySQL Password |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#nginx-ssl-certificates" title="Nginx SSL Certificates" class="md-nav__link"> |
||||
Nginx SSL Certificates |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</ul> |
||||
|
||||
</nav> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<div class="md-content"> |
||||
<article class="md-content__inner md-typeset"> |
||||
|
||||
|
||||
|
||||
<h1 id="secrets">Secrets<a class="headerlink" href="#secrets" title="Permanent link">¶</a></h1> |
||||
<h2 id="mysql-password">MySQL Password<a class="headerlink" href="#mysql-password" title="Permanent link">¶</a></h2> |
||||
<p>The MySQL password has to get into the MySQL |
||||
and MediaWiki containers. To do this, we |
||||
hard-code the MySQL password as an environment |
||||
variable in <code>docker-compose.yml</code>.</p> |
||||
<p>The file <code>docker-compose.fixme.yml</code> contains |
||||
the placeholder <code>REPLACEME</code> where the MySQL |
||||
password goes. </p> |
||||
<p>To create a <code>docker-compose.yml</code> |
||||
from <code>docker-compose.fixme.yml</code>:</p> |
||||
<div class="codehilite"><pre><span></span>$ sed "s/REPLACEME/YoFooThisIsYourNewPassword/" docker-compose.fixme.yml > docker-compose.yml |
||||
</pre></div> |
||||
|
||||
|
||||
<p>Great if you hard-code the password, but - |
||||
wasn't that the whole thing |
||||
we were trying to avoid?</p> |
||||
<p>Put the password into a file istead, |
||||
then grab the password from that file |
||||
and do a find/replace on the docker |
||||
compose file:</p> |
||||
<div class="codehilite"><pre><span></span>$ cat root.password |
||||
mysecretpassword |
||||
|
||||
$ sed "s/REPLACEME/`cat root.password`/" docker-compose.fixme.yml > docker-compose.yml |
||||
</pre></div> |
||||
|
||||
|
||||
<p>The <code>docker-compose.yml</code> file and <code>root.password</code> files are both ignored |
||||
by version control.</p> |
||||
<h2 id="nginx-ssl-certificates">Nginx SSL Certificates<a class="headerlink" href="#nginx-ssl-certificates" title="Permanent link">¶</a></h2> |
||||
<p>The other secrets we need to get into the container are |
||||
the SSL certificates for the nginx container.</p> |
||||
<p>To generate the SSL certificates using Let's Encrypt, |
||||
use the script in the <a href="https://git.charlesreid1.com/charlesreid1/certbot">certbot</a> |
||||
directory. These will be stored on the host machine |
||||
at <code>/etc/letsencrypt/live/example.com/*</code>.</p> |
||||
<p>To mount the certificates in the directory, |
||||
we bind-mount the entire <code>/etc/letsencrypt/</code> directory |
||||
into the container with the following line |
||||
in the docker-compose file:</p> |
||||
<div class="codehilite"><pre><span></span>services: |
||||
... |
||||
stormy_nginx: |
||||
... |
||||
volumes: |
||||
- "/etc/letsencrypt:/etc/letsencrypt" |
||||
... |
||||
</pre></div> |
||||
|
||||
|
||||
<p>Meanwhile, in the nginx configuration file |
||||
that's mounted into the container, we have |
||||
the following in the SSL server blocks |
||||
(see <a href="https://git.charlesreid1.com/docker/d-nginx-charlesreid1">docker/d-nginx-charlesreid1</a>):</p> |
||||
<div class="codehilite"><pre><span></span>server { |
||||
# https://charlesreid1.com |
||||
listen 443; |
||||
listen [::]:443; |
||||
server_name charlesreid1.com; |
||||
|
||||
ssl on; |
||||
ssl_certificate /etc/letsencrypt/live/charlesreid1.com/fullchain.pem; |
||||
ssl_certificate_key /etc/letsencrypt/live/charlesreid1.com/privkey.pem; |
||||
include /etc/letsencrypt/options-ssl-nginx.conf; |
||||
|
||||
... |
||||
} |
||||
</pre></div> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article> |
||||
</div> |
||||
</div> |
||||
</main> |
||||
|
||||
|
||||
<footer class="md-footer"> |
||||
|
||||
<div class="md-footer-nav"> |
||||
<nav class="md-footer-nav__inner md-grid"> |
||||
|
||||
<a href="../Ports/" title="Domains and Ports" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev"> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> |
||||
<span class="md-flex__ellipsis"> |
||||
<span class="md-footer-nav__direction"> |
||||
Previous |
||||
</span> |
||||
Domains and Ports |
||||
</span> |
||||
</div> |
||||
</a> |
||||
|
||||
|
||||
</nav> |
||||
</div> |
||||
|
||||
<div class="md-footer-meta md-typeset"> |
||||
<div class="md-footer-meta__inner md-grid"> |
||||
<div class="md-footer-copyright"> |
||||
|
||||
<div class="md-footer-copyright__highlight"> |
||||
Copyright © 2018 <a href="https://charlesreid1.com">Charles Reid</a>, released under the <a href="https://opensource.org/licenses/MIT">MIT license</a> |
||||
</div> |
||||
|
||||
powered by |
||||
<a href="https://www.mkdocs.org">MkDocs</a> |
||||
and |
||||
<a href="https://squidfunk.github.io/mkdocs-material/"> |
||||
Material for MkDocs</a> |
||||
</div> |
||||
|
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
</footer> |
||||
|
||||
</div> |
||||
|
||||
<script src="../assets/javascripts/application.e72fd936.js"></script> |
||||
|
||||
<script>app.initialize({version:"1.0.4",url:{base:".."}})</script> |
||||
|
||||
<script src="../search/main.js"></script> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body> |
||||
</html> |
@ -0,0 +1,633 @@
@@ -0,0 +1,633 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<!DOCTYPE html> |
||||
<html lang="en" class="no-js"> |
||||
<head> |
||||
|
||||
<meta charset="utf-8"> |
||||
<meta name="viewport" content="width=device-width,initial-scale=1"> |
||||
<meta http-equiv="x-ua-compatible" content="ie=edge"> |
||||
|
||||
|
||||
<link rel="canonical" href="https://pages.charlesreid1.com/pod-charlesreid1/Service_apachephp/"> |
||||
|
||||
|
||||
|
||||
<meta name="lang:clipboard.copy" content="Copy to clipboard"> |
||||
|
||||
<meta name="lang:clipboard.copied" content="Copied to clipboard"> |
||||
|
||||
<meta name="lang:search.language" content="en"> |
||||
|
||||
<meta name="lang:search.pipeline.stopwords" content="True"> |
||||
|
||||
<meta name="lang:search.pipeline.trimmer" content="True"> |
||||
|
||||
<meta name="lang:search.result.none" content="No matching documents"> |
||||
|
||||
<meta name="lang:search.result.one" content="1 matching document"> |
||||
|
||||
<meta name="lang:search.result.other" content="# matching documents"> |
||||
|
||||
<meta name="lang:search.tokenizer" content="[\s\-]+"> |
||||
|
||||
<link rel="shortcut icon" href=".."> |
||||
<meta name="generator" content="mkdocs-1.0.4, mkdocs-material-3.0.3"> |
||||
|
||||
|
||||
|
||||
<title>Pod Service: Apache/PHP - pod-charlesreid1</title> |
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/application.451f80e5.css"> |
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/application-palette.22915126.css"> |
||||
|
||||
|
||||
|
||||
|
||||
<meta name="theme-color" content="#2196f3"> |
||||
|
||||
|
||||
|
||||
<script src="../assets/javascripts/modernizr.1aa3b519.js"></script> |
||||
|
||||
|
||||
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin> |
||||
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono"> |
||||
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style> |
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/fonts/material-icons.css"> |
||||
|
||||
<link rel="stylesheet" href="../css/custom.css"> |
||||
|
||||
|
||||
</head> |
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-primary="blue" data-md-color-accent="blue"> |
||||
|
||||
<svg class="md-svg"> |
||||
<defs> |
||||
|
||||
|
||||
</defs> |
||||
</svg> |
||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> |
||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> |
||||
<label class="md-overlay" data-md-component="overlay" for="__drawer"></label> |
||||
|
||||
<a href="../#apache-php" tabindex="1" class="md-skip"> |
||||
Skip to content |
||||
</a> |
||||
|
||||
|
||||
<header class="md-header" data-md-component="header"> |
||||
<nav class="md-header-nav md-grid"> |
||||
<div class="md-flex"> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<a href="https://pages.charlesreid1.com/pod-charlesreid1" title="pod-charlesreid1" class="md-header-nav__button md-logo"> |
||||
|
||||
<i class="md-icon">dns</i> |
||||
|
||||
</a> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--stretch"> |
||||
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title"> |
||||
|
||||
|
||||
<span class="md-header-nav__topic"> |
||||
pod-charlesreid1 |
||||
</span> |
||||
<span class="md-header-nav__topic"> |
||||
Pod Service: Apache/PHP |
||||
</span> |
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
|
||||
|
||||
<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label> |
||||
|
||||
<div class="md-search" data-md-component="search" role="dialog"> |
||||
<label class="md-search__overlay" for="__search"></label> |
||||
<div class="md-search__inner" role="search"> |
||||
<form class="md-search__form" name="search"> |
||||
<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active"> |
||||
<label class="md-icon md-search__icon" for="__search"></label> |
||||
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1"> |
||||
 |
||||
</button> |
||||
</form> |
||||
<div class="md-search__output"> |
||||
<div class="md-search__scrollwrap" data-md-scrollfix> |
||||
<div class="md-search-result" data-md-component="result"> |
||||
<div class="md-search-result__meta"> |
||||
Type to start searching |
||||
</div> |
||||
<ol class="md-search-result__list"></ol> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
</div> |
||||
|
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<div class="md-header-nav__source"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="https://git.charlesreid1.com/docker/pod-charlesreid1" title="Go to repository" class="md-source" data-md-source=""> |
||||
|
||||
<div class="md-source__repository"> |
||||
pod-charlesreid1 |
||||
</div> |
||||
</a> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
</nav> |
||||
</header> |
||||
|
||||
<div class="md-container"> |
||||
|
||||
|
||||
|
||||
<main class="md-main"> |
||||
<div class="md-main__inner md-grid" data-md-component="container"> |
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation"> |
||||
<div class="md-sidebar__scrollwrap"> |
||||
<div class="md-sidebar__inner"> |
||||
<nav class="md-nav md-nav--primary" data-md-level="0"> |
||||
<label class="md-nav__title md-nav__title--site" for="__drawer"> |
||||
<a href="https://pages.charlesreid1.com/pod-charlesreid1" title="pod-charlesreid1" class="md-nav__button md-logo"> |
||||
|
||||
<i class="md-icon">dns</i> |
||||
|
||||
</a> |
||||
pod-charlesreid1 |
||||
</label> |
||||
|
||||
<div class="md-nav__source"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="https://git.charlesreid1.com/docker/pod-charlesreid1" title="Go to repository" class="md-source" data-md-source=""> |
||||
|
||||
<div class="md-source__repository"> |
||||
pod-charlesreid1 |
||||
</div> |
||||
</a> |
||||
|
||||
</div> |
||||
|
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href=".." title="Index" class="md-nav__link"> |
||||
Index |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--active md-nav__item--nested"> |
||||
|
||||
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2" checked> |
||||
|
||||
<label class="md-nav__link" for="nav-2"> |
||||
Services |
||||
</label> |
||||
<nav class="md-nav" data-md-component="collapsible" data-md-level="1"> |
||||
<label class="md-nav__title" for="nav-2"> |
||||
Services |
||||
</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_mediawiki/" title="Pod Service: MediaWiki" class="md-nav__link"> |
||||
Pod Service: MediaWiki |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--active"> |
||||
|
||||
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc"> |
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link md-nav__link--active" for="__toc"> |
||||
Pod Service: Apache/PHP |
||||
</label> |
||||
|
||||
<a href="./" title="Pod Service: Apache/PHP" class="md-nav__link md-nav__link--active"> |
||||
Pod Service: Apache/PHP |
||||
</a> |
||||
|
||||
|
||||
<nav class="md-nav md-nav--secondary"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">Table of contents</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#configuration-files-and-folders" title="Configuration Files and Folders" class="md-nav__link"> |
||||
Configuration Files and Folders |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#where-does-stuff-live" title="Where Does Stuff Live?" class="md-nav__link"> |
||||
Where Does Stuff Live? |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#getting-stuff-into-the-container" title="Getting Stuff Into The Container" class="md-nav__link"> |
||||
Getting Stuff Into The Container |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</ul> |
||||
|
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_mysql/" title="Pod Service: MySQL" class="md-nav__link"> |
||||
Pod Service: MySQL |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_phpmyadmin/" title="Pod Service: phpMyAdmin" class="md-nav__link"> |
||||
Pod Service: phpMyAdmin |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_nginx/" title="Pod Service: nginx" class="md-nav__link"> |
||||
Pod Service: nginx |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_pythonfiles/" title="Pod Service: Python File Server" class="md-nav__link"> |
||||
Pod Service: Python File Server |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_gitea/" title="Pod Service: Gitea" class="md-nav__link"> |
||||
Pod Service: Gitea |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
</ul> |
||||
</nav> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Running/" title="Running the Pod" class="md-nav__link"> |
||||
Running the Pod |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Volumes/" title="Volumes" class="md-nav__link"> |
||||
Volumes |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Backups/" title="Backups" class="md-nav__link"> |
||||
Backups |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Ports/" title="Domains and Ports" class="md-nav__link"> |
||||
Domains and Ports |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Secrets/" title="Secrets" class="md-nav__link"> |
||||
Secrets |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
</ul> |
||||
</nav> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc"> |
||||
<div class="md-sidebar__scrollwrap"> |
||||
<div class="md-sidebar__inner"> |
||||
|
||||
<nav class="md-nav md-nav--secondary"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">Table of contents</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#configuration-files-and-folders" title="Configuration Files and Folders" class="md-nav__link"> |
||||
Configuration Files and Folders |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#where-does-stuff-live" title="Where Does Stuff Live?" class="md-nav__link"> |
||||
Where Does Stuff Live? |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#getting-stuff-into-the-container" title="Getting Stuff Into The Container" class="md-nav__link"> |
||||
Getting Stuff Into The Container |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</ul> |
||||
|
||||
</nav> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<div class="md-content"> |
||||
<article class="md-content__inner md-typeset"> |
||||
|
||||
|
||||
|
||||
<h1 id="apache-php">Apache + PHP<a class="headerlink" href="#apache-php" title="Permanent link">¶</a></h1> |
||||
<p>This describes the container-specific |
||||
details of the Apache part of the |
||||
Apache-MediaWiki container.</p> |
||||
<p>Also see <a href="/Service_mediawiki.md">MediaWiki</a>.</p> |
||||
<h2 id="configuration-files-and-folders">Configuration Files and Folders<a class="headerlink" href="#configuration-files-and-folders" title="Permanent link">¶</a></h2> |
||||
<p>We have two Apache configuration files |
||||
to set up Apache:</p> |
||||
<ul> |
||||
<li><code>ports.conf</code> sets the port Apache listens on</li> |
||||
<li><code>wiki.conf</code> sets the <code><VirtualHost></code> block for the wiki</li> |
||||
</ul> |
||||
<h2 id="where-does-stuff-live">Where Does Stuff Live?<a class="headerlink" href="#where-does-stuff-live" title="Permanent link">¶</a></h2> |
||||
<p>The <code>ports.conf</code> and <code>wiki.conf</code> configuration files |
||||
live in the <code>d-mediawiki</code> submodule |
||||
(see <a href="https://git.charlesreid1.com/docker/d-mediawiki">docker/d-mediawiki</a> |
||||
on git.charlesreid1.com), |
||||
in the <code>charlesreid1-config</code> |
||||
sub-submodule (see <a href="https://git.charlesreid1.com/wiki/charlesreid1-config">wiki/charlesreid1-config</a> |
||||
on git.charlesreid1.com), |
||||
in the <code>apache/</code> directory.</p> |
||||
<p>See <a href="https://git.charlesreid1.com/wiki/charlesreid1-config">wiki/charlesreid1-config</a> |
||||
on git.charlesreid1.com.</p> |
||||
<h2 id="getting-stuff-into-the-container">Getting Stuff Into The Container<a class="headerlink" href="#getting-stuff-into-the-container" title="Permanent link">¶</a></h2> |
||||
<p>Unlike MediaWiki, Apache has a sane way |
||||
of separating the static program files |
||||
from the instance-specific configuration |
||||
files.</p> |
||||
<p>We bind-mount the directory containing |
||||
Apache <code>*.conf</code> files |
||||
into the container at |
||||
<code>/etc/nginx/conf.d</code> |
||||
via the following line |
||||
in the <a href="https://git.charlesreid1.com/docker/pod-charlesreid1/src/branch/master/docker-compose.fixme.yml">pod-charlesreid1 |
||||
docker-compose file</a>:</p> |
||||
<div class="codehilite"><pre><span></span>services: |
||||
... |
||||
stormy_nginx: |
||||
... |
||||
volumes: |
||||
- "./d-nginx-charlesreid1/conf.d:/etc/nginx/conf.d:ro" |
||||
</pre></div> |
||||
|
||||
|
||||
<p>That's it!</p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article> |
||||
</div> |
||||
</div> |
||||
</main> |
||||
|
||||
|
||||
<footer class="md-footer"> |
||||
|
||||
<div class="md-footer-nav"> |
||||
<nav class="md-footer-nav__inner md-grid"> |
||||
|
||||
<a href="../Service_mediawiki/" title="Pod Service: MediaWiki" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev"> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> |
||||
<span class="md-flex__ellipsis"> |
||||
<span class="md-footer-nav__direction"> |
||||
Previous |
||||
</span> |
||||
Pod Service: MediaWiki |
||||
</span> |
||||
</div> |
||||
</a> |
||||
|
||||
|
||||
<a href="../Service_mysql/" title="Pod Service: MySQL" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next"> |
||||
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> |
||||
<span class="md-flex__ellipsis"> |
||||
<span class="md-footer-nav__direction"> |
||||
Next |
||||
</span> |
||||
Pod Service: MySQL |
||||
</span> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i> |
||||
</div> |
||||
</a> |
||||
|
||||
</nav> |
||||
</div> |
||||
|
||||
<div class="md-footer-meta md-typeset"> |
||||
<div class="md-footer-meta__inner md-grid"> |
||||
<div class="md-footer-copyright"> |
||||
|
||||
<div class="md-footer-copyright__highlight"> |
||||
Copyright © 2018 <a href="https://charlesreid1.com">Charles Reid</a>, released under the <a href="https://opensource.org/licenses/MIT">MIT license</a> |
||||
</div> |
||||
|
||||
powered by |
||||
<a href="https://www.mkdocs.org">MkDocs</a> |
||||
and |
||||
<a href="https://squidfunk.github.io/mkdocs-material/"> |
||||
Material for MkDocs</a> |
||||
</div> |
||||
|
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
</footer> |
||||
|
||||
</div> |
||||
|
||||
<script src="../assets/javascripts/application.e72fd936.js"></script> |
||||
|
||||
<script>app.initialize({version:"1.0.4",url:{base:".."}})</script> |
||||
|
||||
<script src="../search/main.js"></script> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body> |
||||
</html> |
@ -0,0 +1,740 @@
@@ -0,0 +1,740 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<!DOCTYPE html> |
||||
<html lang="en" class="no-js"> |
||||
<head> |
||||
|
||||
<meta charset="utf-8"> |
||||
<meta name="viewport" content="width=device-width,initial-scale=1"> |
||||
<meta http-equiv="x-ua-compatible" content="ie=edge"> |
||||
|
||||
|
||||
<link rel="canonical" href="https://pages.charlesreid1.com/pod-charlesreid1/Service_gitea/"> |
||||
|
||||
|
||||
|
||||
<meta name="lang:clipboard.copy" content="Copy to clipboard"> |
||||
|
||||
<meta name="lang:clipboard.copied" content="Copied to clipboard"> |
||||
|
||||
<meta name="lang:search.language" content="en"> |
||||
|
||||
<meta name="lang:search.pipeline.stopwords" content="True"> |
||||
|
||||
<meta name="lang:search.pipeline.trimmer" content="True"> |
||||
|
||||
<meta name="lang:search.result.none" content="No matching documents"> |
||||
|
||||
<meta name="lang:search.result.one" content="1 matching document"> |
||||
|
||||
<meta name="lang:search.result.other" content="# matching documents"> |
||||
|
||||
<meta name="lang:search.tokenizer" content="[\s\-]+"> |
||||
|
||||
<link rel="shortcut icon" href=".."> |
||||
<meta name="generator" content="mkdocs-1.0.4, mkdocs-material-3.0.3"> |
||||
|
||||
|
||||
|
||||
<title>Pod Service: Gitea - pod-charlesreid1</title> |
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/application.451f80e5.css"> |
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/application-palette.22915126.css"> |
||||
|
||||
|
||||
|
||||
|
||||
<meta name="theme-color" content="#2196f3"> |
||||
|
||||
|
||||
|
||||
<script src="../assets/javascripts/modernizr.1aa3b519.js"></script> |
||||
|
||||
|
||||
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin> |
||||
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono"> |
||||
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style> |
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/fonts/material-icons.css"> |
||||
|
||||
<link rel="stylesheet" href="../css/custom.css"> |
||||
|
||||
|
||||
</head> |
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-primary="blue" data-md-color-accent="blue"> |
||||
|
||||
<svg class="md-svg"> |
||||
<defs> |
||||
|
||||
|
||||
</defs> |
||||
</svg> |
||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> |
||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> |
||||
<label class="md-overlay" data-md-component="overlay" for="__drawer"></label> |
||||
|
||||
<a href="../#gitea" tabindex="1" class="md-skip"> |
||||
Skip to content |
||||
</a> |
||||
|
||||
|
||||
<header class="md-header" data-md-component="header"> |
||||
<nav class="md-header-nav md-grid"> |
||||
<div class="md-flex"> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<a href="https://pages.charlesreid1.com/pod-charlesreid1" title="pod-charlesreid1" class="md-header-nav__button md-logo"> |
||||
|
||||
<i class="md-icon">dns</i> |
||||
|
||||
</a> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--stretch"> |
||||
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title"> |
||||
|
||||
|
||||
<span class="md-header-nav__topic"> |
||||
pod-charlesreid1 |
||||
</span> |
||||
<span class="md-header-nav__topic"> |
||||
Pod Service: Gitea |
||||
</span> |
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
|
||||
|
||||
<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label> |
||||
|
||||
<div class="md-search" data-md-component="search" role="dialog"> |
||||
<label class="md-search__overlay" for="__search"></label> |
||||
<div class="md-search__inner" role="search"> |
||||
<form class="md-search__form" name="search"> |
||||
<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active"> |
||||
<label class="md-icon md-search__icon" for="__search"></label> |
||||
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1"> |
||||
 |
||||
</button> |
||||
</form> |
||||
<div class="md-search__output"> |
||||
<div class="md-search__scrollwrap" data-md-scrollfix> |
||||
<div class="md-search-result" data-md-component="result"> |
||||
<div class="md-search-result__meta"> |
||||
Type to start searching |
||||
</div> |
||||
<ol class="md-search-result__list"></ol> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
</div> |
||||
|
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<div class="md-header-nav__source"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="https://git.charlesreid1.com/docker/pod-charlesreid1" title="Go to repository" class="md-source" data-md-source=""> |
||||
|
||||
<div class="md-source__repository"> |
||||
pod-charlesreid1 |
||||
</div> |
||||
</a> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
</nav> |
||||
</header> |
||||
|
||||
<div class="md-container"> |
||||
|
||||
|
||||
|
||||
<main class="md-main"> |
||||
<div class="md-main__inner md-grid" data-md-component="container"> |
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation"> |
||||
<div class="md-sidebar__scrollwrap"> |
||||
<div class="md-sidebar__inner"> |
||||
<nav class="md-nav md-nav--primary" data-md-level="0"> |
||||
<label class="md-nav__title md-nav__title--site" for="__drawer"> |
||||
<a href="https://pages.charlesreid1.com/pod-charlesreid1" title="pod-charlesreid1" class="md-nav__button md-logo"> |
||||
|
||||
<i class="md-icon">dns</i> |
||||
|
||||
</a> |
||||
pod-charlesreid1 |
||||
</label> |
||||
|
||||
<div class="md-nav__source"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="https://git.charlesreid1.com/docker/pod-charlesreid1" title="Go to repository" class="md-source" data-md-source=""> |
||||
|
||||
<div class="md-source__repository"> |
||||
pod-charlesreid1 |
||||
</div> |
||||
</a> |
||||
|
||||
</div> |
||||
|
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href=".." title="Index" class="md-nav__link"> |
||||
Index |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--active md-nav__item--nested"> |
||||
|
||||
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2" checked> |
||||
|
||||
<label class="md-nav__link" for="nav-2"> |
||||
Services |
||||
</label> |
||||
<nav class="md-nav" data-md-component="collapsible" data-md-level="1"> |
||||
<label class="md-nav__title" for="nav-2"> |
||||
Services |
||||
</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_mediawiki/" title="Pod Service: MediaWiki" class="md-nav__link"> |
||||
Pod Service: MediaWiki |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_apachephp/" title="Pod Service: Apache/PHP" class="md-nav__link"> |
||||
Pod Service: Apache/PHP |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_mysql/" title="Pod Service: MySQL" class="md-nav__link"> |
||||
Pod Service: MySQL |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_phpmyadmin/" title="Pod Service: phpMyAdmin" class="md-nav__link"> |
||||
Pod Service: phpMyAdmin |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_nginx/" title="Pod Service: nginx" class="md-nav__link"> |
||||
Pod Service: nginx |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_pythonfiles/" title="Pod Service: Python File Server" class="md-nav__link"> |
||||
Pod Service: Python File Server |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--active"> |
||||
|
||||
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc"> |
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link md-nav__link--active" for="__toc"> |
||||
Pod Service: Gitea |
||||
</label> |
||||
|
||||
<a href="./" title="Pod Service: Gitea" class="md-nav__link md-nav__link--active"> |
||||
Pod Service: Gitea |
||||
</a> |
||||
|
||||
|
||||
<nav class="md-nav md-nav--secondary"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">Table of contents</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#configuring-docker-container" title="Configuring Docker Container" class="md-nav__link"> |
||||
Configuring Docker Container |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#gitea-volumes" title="Gitea Volumes" class="md-nav__link"> |
||||
Gitea Volumes |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#gitea-ports" title="Gitea Ports" class="md-nav__link"> |
||||
Gitea Ports |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#gitea-configuration-files" title="Gitea Configuration Files" class="md-nav__link"> |
||||
Gitea Configuration Files |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#backups" title="Backups" class="md-nav__link"> |
||||
Backups |
||||
</a> |
||||
|
||||
<nav class="md-nav"> |
||||
<ul class="md-nav__list"> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#backing-up-gitea" title="Backing Up Gitea" class="md-nav__link"> |
||||
Backing Up Gitea |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#restoring-gitea" title="Restoring Gitea" class="md-nav__link"> |
||||
Restoring Gitea |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
</ul> |
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</ul> |
||||
|
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
|
||||
</ul> |
||||
</nav> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Running/" title="Running the Pod" class="md-nav__link"> |
||||
Running the Pod |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Volumes/" title="Volumes" class="md-nav__link"> |
||||
Volumes |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Backups/" title="Backups" class="md-nav__link"> |
||||
Backups |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Ports/" title="Domains and Ports" class="md-nav__link"> |
||||
Domains and Ports |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Secrets/" title="Secrets" class="md-nav__link"> |
||||
Secrets |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
</ul> |
||||
</nav> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc"> |
||||
<div class="md-sidebar__scrollwrap"> |
||||
<div class="md-sidebar__inner"> |
||||
|
||||
<nav class="md-nav md-nav--secondary"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">Table of contents</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#configuring-docker-container" title="Configuring Docker Container" class="md-nav__link"> |
||||
Configuring Docker Container |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#gitea-volumes" title="Gitea Volumes" class="md-nav__link"> |
||||
Gitea Volumes |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#gitea-ports" title="Gitea Ports" class="md-nav__link"> |
||||
Gitea Ports |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#gitea-configuration-files" title="Gitea Configuration Files" class="md-nav__link"> |
||||
Gitea Configuration Files |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#backups" title="Backups" class="md-nav__link"> |
||||
Backups |
||||
</a> |
||||
|
||||
<nav class="md-nav"> |
||||
<ul class="md-nav__list"> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#backing-up-gitea" title="Backing Up Gitea" class="md-nav__link"> |
||||
Backing Up Gitea |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#restoring-gitea" title="Restoring Gitea" class="md-nav__link"> |
||||
Restoring Gitea |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
</ul> |
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</ul> |
||||
|
||||
</nav> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<div class="md-content"> |
||||
<article class="md-content__inner md-typeset"> |
||||
|
||||
|
||||
|
||||
<h1 id="gitea">Gitea<a class="headerlink" href="#gitea" title="Permanent link">¶</a></h1> |
||||
<p>Gitea is a self-hosted Github clone. It is written in Go, and |
||||
provides a web interface and an API to interact with an instance |
||||
of a git server.</p> |
||||
<p>Gitea manages its own database, so to get data in and out of |
||||
Gitea, use its dump and load functionality (more below).</p> |
||||
<p>This page describes how the Gitea container is configured.</p> |
||||
<h2 id="configuring-docker-container">Configuring Docker Container<a class="headerlink" href="#configuring-docker-container" title="Permanent link">¶</a></h2> |
||||
<p>To run gitea, we use a stock Gitea container image. We set |
||||
several options in the docker configuration:</p> |
||||
<ul> |
||||
<li> |
||||
<p><code>USER_UID</code> and <code>USER_GID</code> are set to <code>1000</code> (this avoids some |
||||
problems with files that would otherwise be owned by root)</p> |
||||
</li> |
||||
<li> |
||||
<p>Set <code>restart: always</code> to restart the container when there |
||||
is a failure</p> |
||||
</li> |
||||
</ul> |
||||
<div class="codehilite"><pre><span></span> stormy_gitea: |
||||
image: gitea/gitea:latest |
||||
environment: |
||||
- USER_UID=1000 |
||||
- USER_GID=1000 |
||||
restart: always |
||||
</pre></div> |
||||
|
||||
|
||||
<h2 id="gitea-volumes">Gitea Volumes<a class="headerlink" href="#gitea-volumes" title="Permanent link">¶</a></h2> |
||||
<p>The Gitea container stores all of its data in <code>/data/</code> inside |
||||
the container.</p> |
||||
<p>When the container is launched, the <code>custom/</code> directory in |
||||
the <a href="https://git.charlesreid1.com/docker/d-gitea">docker/d-gitea</a> |
||||
repository is mounted to <code>/data/gitea/</code>, which is the directory |
||||
that contains the files that are used to control the way that |
||||
Gitea pages look. These contain HTML templates used to render |
||||
different views in Gitea and templates in <code>custom/</code> will override |
||||
the default Gitea page templates.</p> |
||||
<p>A docker volume named <code>stormy_gitea_data</code> is also created and |
||||
mounted at <code>/data/</code>. This is a persistent volume that will |
||||
survive even if the container is shut down.</p> |
||||
<div class="codehilite"><pre><span></span> volumes: |
||||
- "stormy_gitea_data:/data" |
||||
- "./d-gitea/custom/conf/app.ini:/data/gitea/conf/app.ini" |
||||
- "./d-gitea/custom/public:/data/gitea/public" |
||||
- "./d-gitea/custom/templates:/data/gitea/templates" |
||||
</pre></div> |
||||
|
||||
|
||||
<h2 id="gitea-ports">Gitea Ports<a class="headerlink" href="#gitea-ports" title="Permanent link">¶</a></h2> |
||||
<p>Gitea provides both SSH and HTTPS interfaces, as it has its own |
||||
built-in web server and SSH server, as well as git server.</p> |
||||
<p>The server that is hosting the Gitea container and this Docker |
||||
pod already has an SSH server listening on port 22, so Gitea |
||||
listens for SSH connections <em>externally</em> on port 222.</p> |
||||
<div class="codehilite"><pre><span></span> ports: |
||||
- "222:22" |
||||
</pre></div> |
||||
|
||||
|
||||
<p>Note that this <em>bypasses</em> our d-nginx-charlesreid1 nginx container |
||||
entirely and allows clients to connect to Gitea directly.</p> |
||||
<p>The Gitea server listens for HTTP/HTTPS connections on port |
||||
3000, but that is by default only listening on the internal |
||||
Docker network, which is exactly how we want it. We want all |
||||
HTTP and HTTPS traffic to be handled by the front-end d-nginx-charlesreid1 |
||||
container, and it will reverse-proxy HTTP/HTTPS requests to |
||||
the Gitea container.</p> |
||||
<h2 id="gitea-configuration-files">Gitea Configuration Files<a class="headerlink" href="#gitea-configuration-files" title="Permanent link">¶</a></h2> |
||||
<p><code>app.ini</code> is the name of the configuration file used by Gitea. |
||||
An <a href="https://git.charlesreid1.com/docker/d-gitea/src/branch/master/app.ini.sample">example <code>app.ini</code> configuration file</a> |
||||
is contained in the <a href="https://git.charlesreid1.com/docker/d-gitea">docker/d-gitea</a> |
||||
repository, as well as a script to |
||||
<a href="https://git.charlesreid1.com/docker/d-gitea/src/branch/master/make_app_ini.sh">make a configuration file</a>.</p> |
||||
<div class="codehilite"><pre><span></span> volumes: |
||||
- "stormy_gitea_data:/data" |
||||
- "./d-gitea/custom/conf/app.ini:/data/gitea/conf/app.ini" |
||||
</pre></div> |
||||
|
||||
|
||||
<h2 id="backups">Backups<a class="headerlink" href="#backups" title="Permanent link">¶</a></h2> |
||||
<h3 id="backing-up-gitea">Backing Up Gitea<a class="headerlink" href="#backing-up-gitea" title="Permanent link">¶</a></h3> |
||||
<h3 id="restoring-gitea">Restoring Gitea<a class="headerlink" href="#restoring-gitea" title="Permanent link">¶</a></h3> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article> |
||||
</div> |
||||
</div> |
||||
</main> |
||||
|
||||
|
||||
<footer class="md-footer"> |
||||
|
||||
<div class="md-footer-nav"> |
||||
<nav class="md-footer-nav__inner md-grid"> |
||||
|
||||
<a href="../Service_pythonfiles/" title="Pod Service: Python File Server" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev"> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> |
||||
<span class="md-flex__ellipsis"> |
||||
<span class="md-footer-nav__direction"> |
||||
Previous |
||||
</span> |
||||
Pod Service: Python File Server |
||||
</span> |
||||
</div> |
||||
</a> |
||||
|
||||
|
||||
<a href="../Running/" title="Running the Pod" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next"> |
||||
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> |
||||
<span class="md-flex__ellipsis"> |
||||
<span class="md-footer-nav__direction"> |
||||
Next |
||||
</span> |
||||
Running the Pod |
||||
</span> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i> |
||||
</div> |
||||
</a> |
||||
|
||||
</nav> |
||||
</div> |
||||
|
||||
<div class="md-footer-meta md-typeset"> |
||||
<div class="md-footer-meta__inner md-grid"> |
||||
<div class="md-footer-copyright"> |
||||
|
||||
<div class="md-footer-copyright__highlight"> |
||||
Copyright © 2018 <a href="https://charlesreid1.com">Charles Reid</a>, released under the <a href="https://opensource.org/licenses/MIT">MIT license</a> |
||||
</div> |
||||
|
||||
powered by |
||||
<a href="https://www.mkdocs.org">MkDocs</a> |
||||
and |
||||
<a href="https://squidfunk.github.io/mkdocs-material/"> |
||||
Material for MkDocs</a> |
||||
</div> |
||||
|
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
</footer> |
||||
|
||||
</div> |
||||
|
||||
<script src="../assets/javascripts/application.e72fd936.js"></script> |
||||
|
||||
<script>app.initialize({version:"1.0.4",url:{base:".."}})</script> |
||||
|
||||
<script src="../search/main.js"></script> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body> |
||||
</html> |
@ -0,0 +1,847 @@
@@ -0,0 +1,847 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<!DOCTYPE html> |
||||
<html lang="en" class="no-js"> |
||||
<head> |
||||
|
||||
<meta charset="utf-8"> |
||||
<meta name="viewport" content="width=device-width,initial-scale=1"> |
||||
<meta http-equiv="x-ua-compatible" content="ie=edge"> |
||||
|
||||
|
||||
<link rel="canonical" href="https://pages.charlesreid1.com/pod-charlesreid1/Service_mediawiki/"> |
||||
|
||||
|
||||
|
||||
<meta name="lang:clipboard.copy" content="Copy to clipboard"> |
||||
|
||||
<meta name="lang:clipboard.copied" content="Copied to clipboard"> |
||||
|
||||
<meta name="lang:search.language" content="en"> |
||||
|
||||
<meta name="lang:search.pipeline.stopwords" content="True"> |
||||
|
||||
<meta name="lang:search.pipeline.trimmer" content="True"> |
||||
|
||||
<meta name="lang:search.result.none" content="No matching documents"> |
||||
|
||||
<meta name="lang:search.result.one" content="1 matching document"> |
||||
|
||||
<meta name="lang:search.result.other" content="# matching documents"> |
||||
|
||||
<meta name="lang:search.tokenizer" content="[\s\-]+"> |
||||
|
||||
<link rel="shortcut icon" href=".."> |
||||
<meta name="generator" content="mkdocs-1.0.4, mkdocs-material-3.0.3"> |
||||
|
||||
|
||||
|
||||
<title>Pod Service: MediaWiki - pod-charlesreid1</title> |
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/application.451f80e5.css"> |
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/application-palette.22915126.css"> |
||||
|
||||
|
||||
|
||||
|
||||
<meta name="theme-color" content="#2196f3"> |
||||
|
||||
|
||||
|
||||
<script src="../assets/javascripts/modernizr.1aa3b519.js"></script> |
||||
|
||||
|
||||
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin> |
||||
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono"> |
||||
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style> |
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/fonts/material-icons.css"> |
||||
|
||||
<link rel="stylesheet" href="../css/custom.css"> |
||||
|
||||
|
||||
</head> |
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-primary="blue" data-md-color-accent="blue"> |
||||
|
||||
<svg class="md-svg"> |
||||
<defs> |
||||
|
||||
|
||||
</defs> |
||||
</svg> |
||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> |
||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> |
||||
<label class="md-overlay" data-md-component="overlay" for="__drawer"></label> |
||||
|
||||
<a href="../#mediawiki-configuration-details" tabindex="1" class="md-skip"> |
||||
Skip to content |
||||
</a> |
||||
|
||||
|
||||
<header class="md-header" data-md-component="header"> |
||||
<nav class="md-header-nav md-grid"> |
||||
<div class="md-flex"> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<a href="https://pages.charlesreid1.com/pod-charlesreid1" title="pod-charlesreid1" class="md-header-nav__button md-logo"> |
||||
|
||||
<i class="md-icon">dns</i> |
||||
|
||||
</a> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--stretch"> |
||||
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title"> |
||||
|
||||
|
||||
<span class="md-header-nav__topic"> |
||||
pod-charlesreid1 |
||||
</span> |
||||
<span class="md-header-nav__topic"> |
||||
Pod Service: MediaWiki |
||||
</span> |
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
|
||||
|
||||
<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label> |
||||
|
||||
<div class="md-search" data-md-component="search" role="dialog"> |
||||
<label class="md-search__overlay" for="__search"></label> |
||||
<div class="md-search__inner" role="search"> |
||||
<form class="md-search__form" name="search"> |
||||
<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active"> |
||||
<label class="md-icon md-search__icon" for="__search"></label> |
||||
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1"> |
||||
 |
||||
</button> |
||||
</form> |
||||
<div class="md-search__output"> |
||||
<div class="md-search__scrollwrap" data-md-scrollfix> |
||||
<div class="md-search-result" data-md-component="result"> |
||||
<div class="md-search-result__meta"> |
||||
Type to start searching |
||||
</div> |
||||
<ol class="md-search-result__list"></ol> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
</div> |
||||
|
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<div class="md-header-nav__source"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="https://git.charlesreid1.com/docker/pod-charlesreid1" title="Go to repository" class="md-source" data-md-source=""> |
||||
|
||||
<div class="md-source__repository"> |
||||
pod-charlesreid1 |
||||
</div> |
||||
</a> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
</nav> |
||||
</header> |
||||
|
||||
<div class="md-container"> |
||||
|
||||
|
||||
|
||||
<main class="md-main"> |
||||
<div class="md-main__inner md-grid" data-md-component="container"> |
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation"> |
||||
<div class="md-sidebar__scrollwrap"> |
||||
<div class="md-sidebar__inner"> |
||||
<nav class="md-nav md-nav--primary" data-md-level="0"> |
||||
<label class="md-nav__title md-nav__title--site" for="__drawer"> |
||||
<a href="https://pages.charlesreid1.com/pod-charlesreid1" title="pod-charlesreid1" class="md-nav__button md-logo"> |
||||
|
||||
<i class="md-icon">dns</i> |
||||
|
||||
</a> |
||||
pod-charlesreid1 |
||||
</label> |
||||
|
||||
<div class="md-nav__source"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="https://git.charlesreid1.com/docker/pod-charlesreid1" title="Go to repository" class="md-source" data-md-source=""> |
||||
|
||||
<div class="md-source__repository"> |
||||
pod-charlesreid1 |
||||
</div> |
||||
</a> |
||||
|
||||
</div> |
||||
|
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href=".." title="Index" class="md-nav__link"> |
||||
Index |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--active md-nav__item--nested"> |
||||
|
||||
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2" checked> |
||||
|
||||
<label class="md-nav__link" for="nav-2"> |
||||
Services |
||||
</label> |
||||
<nav class="md-nav" data-md-component="collapsible" data-md-level="1"> |
||||
<label class="md-nav__title" for="nav-2"> |
||||
Services |
||||
</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--active"> |
||||
|
||||
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc"> |
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link md-nav__link--active" for="__toc"> |
||||
Pod Service: MediaWiki |
||||
</label> |
||||
|
||||
<a href="./" title="Pod Service: MediaWiki" class="md-nav__link md-nav__link--active"> |
||||
Pod Service: MediaWiki |
||||
</a> |
||||
|
||||
|
||||
<nav class="md-nav md-nav--secondary"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">Table of contents</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#the-container" title="The Container" class="md-nav__link"> |
||||
The Container |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#configuration-files-and-folders" title="Configuration Files and Folders" class="md-nav__link"> |
||||
Configuration Files and Folders |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#where-does-stuff-live" title="Where Does Stuff Live?" class="md-nav__link"> |
||||
Where Does Stuff Live? |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#getting-stuff-into-the-container" title="Getting Stuff Into The Container" class="md-nav__link"> |
||||
Getting Stuff Into The Container |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#enabling-mediawiki-math" title="Enabling MediaWiki Math" class="md-nav__link"> |
||||
Enabling MediaWiki Math |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#updating-skin-or-localsettingsphp" title="Updating Skin or LocalSettings.php" class="md-nav__link"> |
||||
Updating Skin or LocalSettings.php |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#a-way-out-a-path-forward-a-glimmer-of-hope" title="A Way Out? A Path Forward? A Glimmer of Hope?" class="md-nav__link"> |
||||
A Way Out? A Path Forward? A Glimmer of Hope? |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#utilities" title="Utilities" class="md-nav__link"> |
||||
Utilities |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</ul> |
||||
|
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_apachephp/" title="Pod Service: Apache/PHP" class="md-nav__link"> |
||||
Pod Service: Apache/PHP |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_mysql/" title="Pod Service: MySQL" class="md-nav__link"> |
||||
Pod Service: MySQL |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_phpmyadmin/" title="Pod Service: phpMyAdmin" class="md-nav__link"> |
||||
Pod Service: phpMyAdmin |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_nginx/" title="Pod Service: nginx" class="md-nav__link"> |
||||
Pod Service: nginx |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_pythonfiles/" title="Pod Service: Python File Server" class="md-nav__link"> |
||||
Pod Service: Python File Server |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_gitea/" title="Pod Service: Gitea" class="md-nav__link"> |
||||
Pod Service: Gitea |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
</ul> |
||||
</nav> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Running/" title="Running the Pod" class="md-nav__link"> |
||||
Running the Pod |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Volumes/" title="Volumes" class="md-nav__link"> |
||||
Volumes |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Backups/" title="Backups" class="md-nav__link"> |
||||
Backups |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Ports/" title="Domains and Ports" class="md-nav__link"> |
||||
Domains and Ports |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Secrets/" title="Secrets" class="md-nav__link"> |
||||
Secrets |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
</ul> |
||||
</nav> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc"> |
||||
<div class="md-sidebar__scrollwrap"> |
||||
<div class="md-sidebar__inner"> |
||||
|
||||
<nav class="md-nav md-nav--secondary"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">Table of contents</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#the-container" title="The Container" class="md-nav__link"> |
||||
The Container |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#configuration-files-and-folders" title="Configuration Files and Folders" class="md-nav__link"> |
||||
Configuration Files and Folders |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#where-does-stuff-live" title="Where Does Stuff Live?" class="md-nav__link"> |
||||
Where Does Stuff Live? |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#getting-stuff-into-the-container" title="Getting Stuff Into The Container" class="md-nav__link"> |
||||
Getting Stuff Into The Container |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#enabling-mediawiki-math" title="Enabling MediaWiki Math" class="md-nav__link"> |
||||
Enabling MediaWiki Math |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#updating-skin-or-localsettingsphp" title="Updating Skin or LocalSettings.php" class="md-nav__link"> |
||||
Updating Skin or LocalSettings.php |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#a-way-out-a-path-forward-a-glimmer-of-hope" title="A Way Out? A Path Forward? A Glimmer of Hope?" class="md-nav__link"> |
||||
A Way Out? A Path Forward? A Glimmer of Hope? |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#utilities" title="Utilities" class="md-nav__link"> |
||||
Utilities |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</ul> |
||||
|
||||
</nav> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<div class="md-content"> |
||||
<article class="md-content__inner md-typeset"> |
||||
|
||||
|
||||
|
||||
<h1 id="mediawiki-configuration-details">MediaWiki Configuration Details<a class="headerlink" href="#mediawiki-configuration-details" title="Permanent link">¶</a></h1> |
||||
<p>This describes the container-specific |
||||
details of the MediaWiki part of the |
||||
Apache-MediaWiki container.</p> |
||||
<p>Also see <a href="/Service_apachephp.md">Apache + PHP</a>.</p> |
||||
<h2 id="the-container">The Container<a class="headerlink" href="#the-container" title="Permanent link">¶</a></h2> |
||||
<p>This is based on a MediaWiki container image |
||||
that runs MediaWiki, PHP, and Apache all in one |
||||
container.</p> |
||||
<p>The Apache server is reverse-proxied by nginx |
||||
in the final pod configuration.</p> |
||||
<h2 id="configuration-files-and-folders">Configuration Files and Folders<a class="headerlink" href="#configuration-files-and-folders" title="Permanent link">¶</a></h2> |
||||
<p>To set up the MediaWiki container, |
||||
we have to copy in the following files:</p> |
||||
<ul> |
||||
<li>One configuration file <code>LocalSettings.php</code></li> |
||||
<li>Two directories:<ul> |
||||
<li><code>extensions/</code></li> |
||||
<li><code>skins/</code></li> |
||||
</ul> |
||||
</li> |
||||
</ul> |
||||
<p>Both <code>LocalSettings.php</code> and <code>skins/</code> are |
||||
under version control.</p> |
||||
<p>The <code>extensions/</code> directory is assembled |
||||
from git repositories directly, |
||||
and so is not under version control.</p> |
||||
<h2 id="where-does-stuff-live">Where Does Stuff Live?<a class="headerlink" href="#where-does-stuff-live" title="Permanent link">¶</a></h2> |
||||
<p>The <code>LocalSettings.php</code> file and <code>skins/</code> folder |
||||
live in the <code>d-mediawiki</code> submodule |
||||
(see <a href="https://git.charlesreid1.com/docker/d-mediawiki">docker/d-mediawiki</a> |
||||
on git.charlesreid1.com), |
||||
in the <code>charlesreid1-config</code> |
||||
sub-submodule (see <a href="https://git.charlesreid1.com/wiki/charlesreid1-config">wiki/charlesreid1-config</a> |
||||
on git.charlesreid1.com), |
||||
in the <code>mediawiki/</code> directory.</p> |
||||
<p>That's also where the <code>extensions/</code> |
||||
directory goes. There is also |
||||
a script in the <a href="https://git.charlesreid1.com/wiki/charlesreid1-config">wiki/charlesreid1-config</a> |
||||
repo called <a href="https://git.charlesreid1.com/wiki/charlesreid1-config/src/branch/master/mediawiki/build_extensions_dir.sh"><code>build_extensions_dir.sh</code></a> |
||||
that clone copies of each MediaWiki extension.</p> |
||||
<p>Inside the MediaWiki container, |
||||
the live HTML directory is at |
||||
<code>/var/www/html/</code>. That is where |
||||
<code>LocalSettings.php</code>, <code>skins/</code>, and <code>extensions/</code> |
||||
live in the container.</p> |
||||
<p>The <code>/var/www/html/</code> directory is |
||||
marked as a <code>VOLUME</code> in the Dockerfile |
||||
and is the mount point for a |
||||
docker data volume, <code>stormy_mediawiki_data</code>.</p> |
||||
<p>See <a href="https://git.charlesreid1.com/wiki/charlesreid1-config">wiki/charlesreid1-config</a> |
||||
on git.charlesreid1.com.</p> |
||||
<h2 id="getting-stuff-into-the-container">Getting Stuff Into The Container<a class="headerlink" href="#getting-stuff-into-the-container" title="Permanent link">¶</a></h2> |
||||
<p>The configuration files mentioned above |
||||
(LocalSettings, skins, and extensions) |
||||
must be copied into the container at build time.</p> |
||||
<p>This is done in the MediaWiki Dockerfile - |
||||
see <a href="https://git.charlesreid1.com/docker/d-mediawiki">d-mediawiki</a>.</p> |
||||
<p>Why don't we bind-mount them into the container? |
||||
We will have problems mounting files to a directory |
||||
that is itself a mount point. Since <code>/var/www/html/</code> |
||||
is a mount point for the MediaWiki container's data volume, |
||||
to keep the wiki's files persistent, |
||||
we can't also bind-mount files at |
||||
<code>/var/www/html/.</code></p> |
||||
<p>Additionally, we have to change the permissions of |
||||
<code>LocalSettings.pp</code> to 600 and change the ownership |
||||
of all files in <code>/var/www/html/</code> to <code>www-data:www-data</code>, |
||||
the Apache web server user, so that it can |
||||
serve up the wiki.</p> |
||||
<p><code>LocalSettings.php</code> is copied into the container |
||||
at <code>/var/www/html/LocalSettings.php</code>.</p> |
||||
<p><code>skins/</code> is copied into the container at |
||||
<code>/var/www/html/skins/</code> (we use our own |
||||
customized theme, in the Bootstrap2 directory).</p> |
||||
<p><code>extensions/</code> is copied into the container |
||||
at <code>/var/www/html/extensions/</code> |
||||
(make sure you run <code>build_extensions_dir.sh</code> first!).</p> |
||||
<p><a href="https://git.charlesreid1.com/wiki/charlesreid1-config/src/branch/master/mediawiki/build_extensions_dir.sh"><code>build_extensions_dir.sh</code></a></p> |
||||
<h2 id="enabling-mediawiki-math">Enabling MediaWiki Math<a class="headerlink" href="#enabling-mediawiki-math" title="Permanent link">¶</a></h2> |
||||
<p>Note that we have one last task to complete, |
||||
and that is enabling the math extensions so that |
||||
we can add formulas to our wiki.</p> |
||||
<p>To do this, we have to add the following aptitude |
||||
packages to an <code>apt-get install</code> command in the |
||||
Dockerfile:</p> |
||||
<div class="codehilite"><pre><span></span>RUN apt-get update && \ |
||||
apt-get install -y build-essential \ |
||||
dvipng \ |
||||
ocaml \ |
||||
ghostscript \ |
||||
imagemagick \ |
||||
texlive-latex-base \ |
||||
texlive-latex-extra \ |
||||
texlive-fonts-recommended \ |
||||
texlive-lang-greek \ |
||||
texlive-latex-recommended |
||||
</pre></div> |
||||
|
||||
|
||||
<p>(Note: ocaml is a language required to make |
||||
<code>texvc</code>, covered below.)</p> |
||||
<p>Next, we need to shim a make command |
||||
into the container's entrypoint command, |
||||
before we run the Apache web server.</p> |
||||
<p>To enable equations and math, we need to make |
||||
a utility called <code>texvc</code> by running <code>make</code> in the |
||||
Math extension directory. </p> |
||||
<p>We modify the <code>CMD</code> directive in the Dockerfile, |
||||
which normally runs <code>apache2-foreground</code> |
||||
in the stock MediaWiki container.</p> |
||||
<p>Change the original <code>CMD</code> from this:</p> |
||||
<div class="codehilite"><pre><span></span>CMD apache2-foreground |
||||
</pre></div> |
||||
|
||||
|
||||
<p>to this:</p> |
||||
<div class="codehilite"><pre><span></span>CMD cd /var/www/html/extensions/Math/math && make && apache2-foreground |
||||
</pre></div> |
||||
|
||||
|
||||
<h2 id="updating-skin-or-localsettingsphp">Updating Skin or LocalSettings.php<a class="headerlink" href="#updating-skin-or-localsettingsphp" title="Permanent link">¶</a></h2> |
||||
<p>Note that if you update the MediaWiki skin |
||||
or the <code>LocalSettings.php</code> file, |
||||
you will need to rebuild the container |
||||
and restart it.</p> |
||||
<p>(It's a pain in the ass, but hard to avoid.)</p> |
||||
<p>Alternatively, you can use <code>docker cp</code> to |
||||
copy a new <code>LocalSettings.php</code> or |
||||
skins directory into the running |
||||
MediaWiki container. These changes |
||||
will be reflected immediately in the |
||||
wiki interface.</p> |
||||
<p>(Be careful with this method!!!)</p> |
||||
<p>Best of all possible worlds: |
||||
your <code>LocalSettings.php</code> |
||||
and <code>skins/</code> directory |
||||
is under version control, |
||||
as in <a href="https://git.charlesreid1.com/wiki/charlesreid1-config">wiki/charlesreid1-config</a> |
||||
on git.charlesreid1.com, |
||||
and can be updated with a |
||||
git push or git pull.</p> |
||||
<p>(This is not currently how |
||||
it is structured, as the |
||||
skin and <code>LocalSettings.php</code> |
||||
files are not under version |
||||
control in the container. |
||||
This would be difficult for |
||||
the same reason that it is |
||||
difficult to bind-mount |
||||
a file directly into |
||||
<code>/var/www/html</code> - because |
||||
it is also difficult |
||||
to have a particular |
||||
file under version control |
||||
when there are a |
||||
large number of other files |
||||
in that directory.)</p> |
||||
<h2 id="a-way-out-a-path-forward-a-glimmer-of-hope">A Way Out? A Path Forward? A Glimmer of Hope?<a class="headerlink" href="#a-way-out-a-path-forward-a-glimmer-of-hope" title="Permanent link">¶</a></h2> |
||||
<p>How might we fix this nested, nightarish mess?</p> |
||||
<p>A couple of things have to happen:</p> |
||||
<ul> |
||||
<li> |
||||
<p>Docker needs to provide better control over user ownership |
||||
and file permissions for bind-mounted directories. |
||||
There are some really ugly, hacky shims that are |
||||
required because the user permissions of everything |
||||
are buggered from the start.</p> |
||||
</li> |
||||
<li> |
||||
<p>MediaWiki needs to put user configuration files |
||||
into a configuration folder. For example, |
||||
<code>nginx</code> looks in a folder <code>/etc/nginx/</code> for |
||||
any and all configuration files. This allows |
||||
bind-mounting a configuration directory |
||||
to <code>/etc/nginx/</code> without complication. |
||||
Unfortunately, MediaWiki mixes site-specific user files |
||||
with generic, common-across-all-MediaWikis |
||||
php files, making it difficult to version-control |
||||
site-specific user files.</p> |
||||
</li> |
||||
</ul> |
||||
<h2 id="utilities">Utilities<a class="headerlink" href="#utilities" title="Permanent link">¶</a></h2> |
||||
<p>There are utilities for MediaWiki in <code>utils-mw</code>:</p> |
||||
<ul> |
||||
<li><a href="https://git.charlesreid1.com/docker/pod-charlesreid1/src/branch/master/utils-mw/backup_wikifiles.sh"><code>backup_wikifiles.sh</code></a> - back up wiki image files to a tarball from the <code>story_mw</code> container</li> |
||||
<li><a href="https://git.charlesreid1.com/docker/pod-charlesreid1/src/branch/master/utils-mw/restore_wikifiles.sh"><code>restore_wikifiles.sh</code></a> - restore backed up image files from a tarball into the <code>story_mw</code> container</li> |
||||
<li><a href="https://git.charlesreid1.com/docker/pod-charlesreid1/src/branch/master/utils-mw/update_wikidb.sh"><code>update_wikidb.sh</code></a> - one-time script to update the wiki database after a version bump</li> |
||||
</ul> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article> |
||||
</div> |
||||
</div> |
||||
</main> |
||||
|
||||
|
||||
<footer class="md-footer"> |
||||
|
||||
<div class="md-footer-nav"> |
||||
<nav class="md-footer-nav__inner md-grid"> |
||||
|
||||
<a href=".." title="Index" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev"> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> |
||||
<span class="md-flex__ellipsis"> |
||||
<span class="md-footer-nav__direction"> |
||||
Previous |
||||
</span> |
||||
Index |
||||
</span> |
||||
</div> |
||||
</a> |
||||
|
||||
|
||||
<a href="../Service_apachephp/" title="Pod Service: Apache/PHP" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next"> |
||||
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> |
||||
<span class="md-flex__ellipsis"> |
||||
<span class="md-footer-nav__direction"> |
||||
Next |
||||
</span> |
||||
Pod Service: Apache/PHP |
||||
</span> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i> |
||||
</div> |
||||
</a> |
||||
|
||||
</nav> |
||||
</div> |
||||
|
||||
<div class="md-footer-meta md-typeset"> |
||||
<div class="md-footer-meta__inner md-grid"> |
||||
<div class="md-footer-copyright"> |
||||
|
||||
<div class="md-footer-copyright__highlight"> |
||||
Copyright © 2018 <a href="https://charlesreid1.com">Charles Reid</a>, released under the <a href="https://opensource.org/licenses/MIT">MIT license</a> |
||||
</div> |
||||
|
||||
powered by |
||||
<a href="https://www.mkdocs.org">MkDocs</a> |
||||
and |
||||
<a href="https://squidfunk.github.io/mkdocs-material/"> |
||||
Material for MkDocs</a> |
||||
</div> |
||||
|
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
</footer> |
||||
|
||||
</div> |
||||
|
||||
<script src="../assets/javascripts/application.e72fd936.js"></script> |
||||
|
||||
<script>app.initialize({version:"1.0.4",url:{base:".."}})</script> |
||||
|
||||
<script src="../search/main.js"></script> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body> |
||||
</html> |
@ -0,0 +1,642 @@
@@ -0,0 +1,642 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<!DOCTYPE html> |
||||
<html lang="en" class="no-js"> |
||||
<head> |
||||
|
||||
<meta charset="utf-8"> |
||||
<meta name="viewport" content="width=device-width,initial-scale=1"> |
||||
<meta http-equiv="x-ua-compatible" content="ie=edge"> |
||||
|
||||
|
||||
<link rel="canonical" href="https://pages.charlesreid1.com/pod-charlesreid1/Service_mysql/"> |
||||
|
||||
|
||||
|
||||
<meta name="lang:clipboard.copy" content="Copy to clipboard"> |
||||
|
||||
<meta name="lang:clipboard.copied" content="Copied to clipboard"> |
||||
|
||||
<meta name="lang:search.language" content="en"> |
||||
|
||||
<meta name="lang:search.pipeline.stopwords" content="True"> |
||||
|
||||
<meta name="lang:search.pipeline.trimmer" content="True"> |
||||
|
||||
<meta name="lang:search.result.none" content="No matching documents"> |
||||
|
||||
<meta name="lang:search.result.one" content="1 matching document"> |
||||
|
||||
<meta name="lang:search.result.other" content="# matching documents"> |
||||
|
||||
<meta name="lang:search.tokenizer" content="[\s\-]+"> |
||||
|
||||
<link rel="shortcut icon" href=".."> |
||||
<meta name="generator" content="mkdocs-1.0.4, mkdocs-material-3.0.3"> |
||||
|
||||
|
||||
|
||||
<title>Pod Service: MySQL - pod-charlesreid1</title> |
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/application.451f80e5.css"> |
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/application-palette.22915126.css"> |
||||
|
||||
|
||||
|
||||
|
||||
<meta name="theme-color" content="#2196f3"> |
||||
|
||||
|
||||
|
||||
<script src="../assets/javascripts/modernizr.1aa3b519.js"></script> |
||||
|
||||
|
||||
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin> |
||||
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono"> |
||||
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style> |
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/fonts/material-icons.css"> |
||||
|
||||
<link rel="stylesheet" href="../css/custom.css"> |
||||
|
||||
|
||||
</head> |
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-primary="blue" data-md-color-accent="blue"> |
||||
|
||||
<svg class="md-svg"> |
||||
<defs> |
||||
|
||||
|
||||
</defs> |
||||
</svg> |
||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> |
||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> |
||||
<label class="md-overlay" data-md-component="overlay" for="__drawer"></label> |
||||
|
||||
<a href="../#mysql-configuration-details" tabindex="1" class="md-skip"> |
||||
Skip to content |
||||
</a> |
||||
|
||||
|
||||
<header class="md-header" data-md-component="header"> |
||||
<nav class="md-header-nav md-grid"> |
||||
<div class="md-flex"> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<a href="https://pages.charlesreid1.com/pod-charlesreid1" title="pod-charlesreid1" class="md-header-nav__button md-logo"> |
||||
|
||||
<i class="md-icon">dns</i> |
||||
|
||||
</a> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--stretch"> |
||||
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title"> |
||||
|
||||
|
||||
<span class="md-header-nav__topic"> |
||||
pod-charlesreid1 |
||||
</span> |
||||
<span class="md-header-nav__topic"> |
||||
Pod Service: MySQL |
||||
</span> |
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
|
||||
|
||||
<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label> |
||||
|
||||
<div class="md-search" data-md-component="search" role="dialog"> |
||||
<label class="md-search__overlay" for="__search"></label> |
||||
<div class="md-search__inner" role="search"> |
||||
<form class="md-search__form" name="search"> |
||||
<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active"> |
||||
<label class="md-icon md-search__icon" for="__search"></label> |
||||
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1"> |
||||
 |
||||
</button> |
||||
</form> |
||||
<div class="md-search__output"> |
||||
<div class="md-search__scrollwrap" data-md-scrollfix> |
||||
<div class="md-search-result" data-md-component="result"> |
||||
<div class="md-search-result__meta"> |
||||
Type to start searching |
||||
</div> |
||||
<ol class="md-search-result__list"></ol> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
</div> |
||||
|
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<div class="md-header-nav__source"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="https://git.charlesreid1.com/docker/pod-charlesreid1" title="Go to repository" class="md-source" data-md-source=""> |
||||
|
||||
<div class="md-source__repository"> |
||||
pod-charlesreid1 |
||||
</div> |
||||
</a> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
</nav> |
||||
</header> |
||||
|
||||
<div class="md-container"> |
||||
|
||||
|
||||
|
||||
<main class="md-main"> |
||||
<div class="md-main__inner md-grid" data-md-component="container"> |
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation"> |
||||
<div class="md-sidebar__scrollwrap"> |
||||
<div class="md-sidebar__inner"> |
||||
<nav class="md-nav md-nav--primary" data-md-level="0"> |
||||
<label class="md-nav__title md-nav__title--site" for="__drawer"> |
||||
<a href="https://pages.charlesreid1.com/pod-charlesreid1" title="pod-charlesreid1" class="md-nav__button md-logo"> |
||||
|
||||
<i class="md-icon">dns</i> |
||||
|
||||
</a> |
||||
pod-charlesreid1 |
||||
</label> |
||||
|
||||
<div class="md-nav__source"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="https://git.charlesreid1.com/docker/pod-charlesreid1" title="Go to repository" class="md-source" data-md-source=""> |
||||
|
||||
<div class="md-source__repository"> |
||||
pod-charlesreid1 |
||||
</div> |
||||
</a> |
||||
|
||||
</div> |
||||
|
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href=".." title="Index" class="md-nav__link"> |
||||
Index |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--active md-nav__item--nested"> |
||||
|
||||
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2" checked> |
||||
|
||||
<label class="md-nav__link" for="nav-2"> |
||||
Services |
||||
</label> |
||||
<nav class="md-nav" data-md-component="collapsible" data-md-level="1"> |
||||
<label class="md-nav__title" for="nav-2"> |
||||
Services |
||||
</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_mediawiki/" title="Pod Service: MediaWiki" class="md-nav__link"> |
||||
Pod Service: MediaWiki |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_apachephp/" title="Pod Service: Apache/PHP" class="md-nav__link"> |
||||
Pod Service: Apache/PHP |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--active"> |
||||
|
||||
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc"> |
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link md-nav__link--active" for="__toc"> |
||||
Pod Service: MySQL |
||||
</label> |
||||
|
||||
<a href="./" title="Pod Service: MySQL" class="md-nav__link md-nav__link--active"> |
||||
Pod Service: MySQL |
||||
</a> |
||||
|
||||
|
||||
<nav class="md-nav md-nav--secondary"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">Table of contents</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#the-container" title="The Container" class="md-nav__link"> |
||||
The Container |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#configuration-files-and-folders" title="Configuration Files and Folders" class="md-nav__link"> |
||||
Configuration Files and Folders |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#getting-stuff-into-the-container-how-to-seed-mysql" title="Getting Stuff Into The Container (How To Seed MySQL?)" class="md-nav__link"> |
||||
Getting Stuff Into The Container (How To Seed MySQL?) |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#utilities" title="Utilities" class="md-nav__link"> |
||||
Utilities |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</ul> |
||||
|
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_phpmyadmin/" title="Pod Service: phpMyAdmin" class="md-nav__link"> |
||||
Pod Service: phpMyAdmin |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_nginx/" title="Pod Service: nginx" class="md-nav__link"> |
||||
Pod Service: nginx |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_pythonfiles/" title="Pod Service: Python File Server" class="md-nav__link"> |
||||
Pod Service: Python File Server |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_gitea/" title="Pod Service: Gitea" class="md-nav__link"> |
||||
Pod Service: Gitea |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
</ul> |
||||
</nav> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Running/" title="Running the Pod" class="md-nav__link"> |
||||
Running the Pod |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Volumes/" title="Volumes" class="md-nav__link"> |
||||
Volumes |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Backups/" title="Backups" class="md-nav__link"> |
||||
Backups |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Ports/" title="Domains and Ports" class="md-nav__link"> |
||||
Domains and Ports |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Secrets/" title="Secrets" class="md-nav__link"> |
||||
Secrets |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
</ul> |
||||
</nav> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc"> |
||||
<div class="md-sidebar__scrollwrap"> |
||||
<div class="md-sidebar__inner"> |
||||
|
||||
<nav class="md-nav md-nav--secondary"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">Table of contents</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#the-container" title="The Container" class="md-nav__link"> |
||||
The Container |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#configuration-files-and-folders" title="Configuration Files and Folders" class="md-nav__link"> |
||||
Configuration Files and Folders |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#getting-stuff-into-the-container-how-to-seed-mysql" title="Getting Stuff Into The Container (How To Seed MySQL?)" class="md-nav__link"> |
||||
Getting Stuff Into The Container (How To Seed MySQL?) |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#utilities" title="Utilities" class="md-nav__link"> |
||||
Utilities |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</ul> |
||||
|
||||
</nav> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<div class="md-content"> |
||||
<article class="md-content__inner md-typeset"> |
||||
|
||||
|
||||
|
||||
<h1 id="mysql-configuration-details">MySQL Configuration Details<a class="headerlink" href="#mysql-configuration-details" title="Permanent link">¶</a></h1> |
||||
<p>This is the most important part of the MediaWiki |
||||
portion of the charlesreid1 pod. MediaWiki stores |
||||
all of the content of the MediaWiki server, |
||||
so the MediaWiki and MySQL containers must |
||||
communicate with one another.</p> |
||||
<h2 id="the-container">The Container<a class="headerlink" href="#the-container" title="Permanent link">¶</a></h2> |
||||
<p>The MySQL container is straightforward, |
||||
nothing fancy.</p> |
||||
<h2 id="configuration-files-and-folders">Configuration Files and Folders<a class="headerlink" href="#configuration-files-and-folders" title="Permanent link">¶</a></h2> |
||||
<p>We don't have an extensive MySQL configuration. |
||||
The container demostrates how to mount a configuration |
||||
file into the container, but this is optional.</p> |
||||
<p>See <a href="https://git.charlesreid1.com/docker/d-mysql/src/branch/master/run_super_mysql.sh#L17">this line</a> |
||||
of the run script in the <a href="https://git.charlesreid1.com/docker/d-mysql">docker/d-mysql</a> |
||||
repository.</p> |
||||
<h2 id="getting-stuff-into-the-container-how-to-seed-mysql">Getting Stuff Into The Container (How To Seed MySQL?)<a class="headerlink" href="#getting-stuff-into-the-container-how-to-seed-mysql" title="Permanent link">¶</a></h2> |
||||
<p>This section refers to scripts contained in |
||||
the <a href="https://git.charlesreid1.com/docker/pod-charlesreid1/src/branch/master/utils-mw"><code>utils-mysql/</code></a> |
||||
directory.</p> |
||||
<p>The MySQL data must come from a seed |
||||
(what we call a krash seed). This seed |
||||
consists of a prior backup of the MediaWiki |
||||
MySQL database, from which the database |
||||
can be restored.</p> |
||||
<p>There are both backup and restore scripts |
||||
in the repo under <a href="https://git.charlesreid1.com/docker/pod-charlesreid1/src/branch/master/utils-mysql"><code>utils-mysql/</code></a>.</p> |
||||
<p>The <a href="https://git.charlesreid1.com/docker/pod-charlesreid1/src/branch/master/utils-mysql/dump_database.sh"><code>dump_database.sh</code></a> |
||||
script will run the <code>mysqldump</code> tool to back up |
||||
all the databases in the container into a file |
||||
in <code>.sql</code> format.</p> |
||||
<p>These <code>.sql</code> files can be used to restore a |
||||
MySQL database using the <a href="https://git.charlesreid1.com/docker/pod-charlesreid1/src/branch/master/utils-mysql/restore_database.sh"><code>restore_database.sh</code></a> |
||||
script.</p> |
||||
<h2 id="utilities">Utilities<a class="headerlink" href="#utilities" title="Permanent link">¶</a></h2> |
||||
<p>There are utilities for MySQL in <code>utils-mysql</code>:</p> |
||||
<ul> |
||||
<li><a href="https://git.charlesreid1.com/docker/pod-charlesreid1/src/branch/master/utils-mysql/dump_database.sh"><code>dump_databases.sh</code></a> - create an <code>.sql</code> dump file from a database</li> |
||||
<li><a href="https://git.charlesreid1.com/docker/pod-charlesreid1/src/branch/master/utils-mysql/restore_database.sh"><code>restore_database.sh</code></a> - restore a database from an <code>.sql</code> dump file</li> |
||||
</ul> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article> |
||||
</div> |
||||
</div> |
||||
</main> |
||||
|
||||
|
||||
<footer class="md-footer"> |
||||
|
||||
<div class="md-footer-nav"> |
||||
<nav class="md-footer-nav__inner md-grid"> |
||||
|
||||
<a href="../Service_apachephp/" title="Pod Service: Apache/PHP" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev"> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> |
||||
<span class="md-flex__ellipsis"> |
||||
<span class="md-footer-nav__direction"> |
||||
Previous |
||||
</span> |
||||
Pod Service: Apache/PHP |
||||
</span> |
||||
</div> |
||||
</a> |
||||
|
||||
|
||||
<a href="../Service_phpmyadmin/" title="Pod Service: phpMyAdmin" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next"> |
||||
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> |
||||
<span class="md-flex__ellipsis"> |
||||
<span class="md-footer-nav__direction"> |
||||
Next |
||||
</span> |
||||
Pod Service: phpMyAdmin |
||||
</span> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i> |
||||
</div> |
||||
</a> |
||||
|
||||
</nav> |
||||
</div> |
||||
|
||||
<div class="md-footer-meta md-typeset"> |
||||
<div class="md-footer-meta__inner md-grid"> |
||||
<div class="md-footer-copyright"> |
||||
|
||||
<div class="md-footer-copyright__highlight"> |
||||
Copyright © 2018 <a href="https://charlesreid1.com">Charles Reid</a>, released under the <a href="https://opensource.org/licenses/MIT">MIT license</a> |
||||
</div> |
||||
|
||||
powered by |
||||
<a href="https://www.mkdocs.org">MkDocs</a> |
||||
and |
||||
<a href="https://squidfunk.github.io/mkdocs-material/"> |
||||
Material for MkDocs</a> |
||||
</div> |
||||
|
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
</footer> |
||||
|
||||
</div> |
||||
|
||||
<script src="../assets/javascripts/application.e72fd936.js"></script> |
||||
|
||||
<script>app.initialize({version:"1.0.4",url:{base:".."}})</script> |
||||
|
||||
<script src="../search/main.js"></script> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body> |
||||
</html> |
@ -0,0 +1,539 @@
@@ -0,0 +1,539 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<!DOCTYPE html> |
||||
<html lang="en" class="no-js"> |
||||
<head> |
||||
|
||||
<meta charset="utf-8"> |
||||
<meta name="viewport" content="width=device-width,initial-scale=1"> |
||||
<meta http-equiv="x-ua-compatible" content="ie=edge"> |
||||
|
||||
|
||||
<link rel="canonical" href="https://pages.charlesreid1.com/pod-charlesreid1/Service_phpmyadmin/"> |
||||
|
||||
|
||||
|
||||
<meta name="lang:clipboard.copy" content="Copy to clipboard"> |
||||
|
||||
<meta name="lang:clipboard.copied" content="Copied to clipboard"> |
||||
|
||||
<meta name="lang:search.language" content="en"> |
||||
|
||||
<meta name="lang:search.pipeline.stopwords" content="True"> |
||||
|
||||
<meta name="lang:search.pipeline.trimmer" content="True"> |
||||
|
||||
<meta name="lang:search.result.none" content="No matching documents"> |
||||
|
||||
<meta name="lang:search.result.one" content="1 matching document"> |
||||
|
||||
<meta name="lang:search.result.other" content="# matching documents"> |
||||
|
||||
<meta name="lang:search.tokenizer" content="[\s\-]+"> |
||||
|
||||
<link rel="shortcut icon" href=".."> |
||||
<meta name="generator" content="mkdocs-1.0.4, mkdocs-material-3.0.3"> |
||||
|
||||
|
||||
|
||||
<title>Pod Service: phpMyAdmin - pod-charlesreid1</title> |
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/application.451f80e5.css"> |
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/application-palette.22915126.css"> |
||||
|
||||
|
||||
|
||||
|
||||
<meta name="theme-color" content="#2196f3"> |
||||
|
||||
|
||||
|
||||
<script src="../assets/javascripts/modernizr.1aa3b519.js"></script> |
||||
|
||||
|
||||
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin> |
||||
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono"> |
||||
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style> |
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/fonts/material-icons.css"> |
||||
|
||||
<link rel="stylesheet" href="../css/custom.css"> |
||||
|
||||
|
||||
</head> |
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-primary="blue" data-md-color-accent="blue"> |
||||
|
||||
<svg class="md-svg"> |
||||
<defs> |
||||
|
||||
|
||||
</defs> |
||||
</svg> |
||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> |
||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> |
||||
<label class="md-overlay" data-md-component="overlay" for="__drawer"></label> |
||||
|
||||
<a href="../#phpmyadmin" tabindex="1" class="md-skip"> |
||||
Skip to content |
||||
</a> |
||||
|
||||
|
||||
<header class="md-header" data-md-component="header"> |
||||
<nav class="md-header-nav md-grid"> |
||||
<div class="md-flex"> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<a href="https://pages.charlesreid1.com/pod-charlesreid1" title="pod-charlesreid1" class="md-header-nav__button md-logo"> |
||||
|
||||
<i class="md-icon">dns</i> |
||||
|
||||
</a> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--stretch"> |
||||
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title"> |
||||
|
||||
|
||||
<span class="md-header-nav__topic"> |
||||
pod-charlesreid1 |
||||
</span> |
||||
<span class="md-header-nav__topic"> |
||||
Pod Service: phpMyAdmin |
||||
</span> |
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
|
||||
|
||||
<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label> |
||||
|
||||
<div class="md-search" data-md-component="search" role="dialog"> |
||||
<label class="md-search__overlay" for="__search"></label> |
||||
<div class="md-search__inner" role="search"> |
||||
<form class="md-search__form" name="search"> |
||||
<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active"> |
||||
<label class="md-icon md-search__icon" for="__search"></label> |
||||
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1"> |
||||
 |
||||
</button> |
||||
</form> |
||||
<div class="md-search__output"> |
||||
<div class="md-search__scrollwrap" data-md-scrollfix> |
||||
<div class="md-search-result" data-md-component="result"> |
||||
<div class="md-search-result__meta"> |
||||
Type to start searching |
||||
</div> |
||||
<ol class="md-search-result__list"></ol> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
</div> |
||||
|
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<div class="md-header-nav__source"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="https://git.charlesreid1.com/docker/pod-charlesreid1" title="Go to repository" class="md-source" data-md-source=""> |
||||
|
||||
<div class="md-source__repository"> |
||||
pod-charlesreid1 |
||||
</div> |
||||
</a> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
</nav> |
||||
</header> |
||||
|
||||
<div class="md-container"> |
||||
|
||||
|
||||
|
||||
<main class="md-main"> |
||||
<div class="md-main__inner md-grid" data-md-component="container"> |
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation"> |
||||
<div class="md-sidebar__scrollwrap"> |
||||
<div class="md-sidebar__inner"> |
||||
<nav class="md-nav md-nav--primary" data-md-level="0"> |
||||
<label class="md-nav__title md-nav__title--site" for="__drawer"> |
||||
<a href="https://pages.charlesreid1.com/pod-charlesreid1" title="pod-charlesreid1" class="md-nav__button md-logo"> |
||||
|
||||
<i class="md-icon">dns</i> |
||||
|
||||
</a> |
||||
pod-charlesreid1 |
||||
</label> |
||||
|
||||
<div class="md-nav__source"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="https://git.charlesreid1.com/docker/pod-charlesreid1" title="Go to repository" class="md-source" data-md-source=""> |
||||
|
||||
<div class="md-source__repository"> |
||||
pod-charlesreid1 |
||||
</div> |
||||
</a> |
||||
|
||||
</div> |
||||
|
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href=".." title="Index" class="md-nav__link"> |
||||
Index |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--active md-nav__item--nested"> |
||||
|
||||
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2" checked> |
||||
|
||||
<label class="md-nav__link" for="nav-2"> |
||||
Services |
||||
</label> |
||||
<nav class="md-nav" data-md-component="collapsible" data-md-level="1"> |
||||
<label class="md-nav__title" for="nav-2"> |
||||
Services |
||||
</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_mediawiki/" title="Pod Service: MediaWiki" class="md-nav__link"> |
||||
Pod Service: MediaWiki |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_apachephp/" title="Pod Service: Apache/PHP" class="md-nav__link"> |
||||
Pod Service: Apache/PHP |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_mysql/" title="Pod Service: MySQL" class="md-nav__link"> |
||||
Pod Service: MySQL |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--active"> |
||||
|
||||
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc"> |
||||
|
||||
|
||||
|
||||
|
||||
<a href="./" title="Pod Service: phpMyAdmin" class="md-nav__link md-nav__link--active"> |
||||
Pod Service: phpMyAdmin |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_nginx/" title="Pod Service: nginx" class="md-nav__link"> |
||||
Pod Service: nginx |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_pythonfiles/" title="Pod Service: Python File Server" class="md-nav__link"> |
||||
Pod Service: Python File Server |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_gitea/" title="Pod Service: Gitea" class="md-nav__link"> |
||||
Pod Service: Gitea |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
</ul> |
||||
</nav> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Running/" title="Running the Pod" class="md-nav__link"> |
||||
Running the Pod |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Volumes/" title="Volumes" class="md-nav__link"> |
||||
Volumes |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Backups/" title="Backups" class="md-nav__link"> |
||||
Backups |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Ports/" title="Domains and Ports" class="md-nav__link"> |
||||
Domains and Ports |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Secrets/" title="Secrets" class="md-nav__link"> |
||||
Secrets |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
</ul> |
||||
</nav> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc"> |
||||
<div class="md-sidebar__scrollwrap"> |
||||
<div class="md-sidebar__inner"> |
||||
|
||||
<nav class="md-nav md-nav--secondary"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</nav> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<div class="md-content"> |
||||
<article class="md-content__inner md-typeset"> |
||||
|
||||
|
||||
|
||||
<h1 id="phpmyadmin">phpMyAdmin<a class="headerlink" href="#phpmyadmin" title="Permanent link">¶</a></h1> |
||||
<p>This page describes the container-specific details |
||||
of the phpMyAdmin container.</p> |
||||
<p>phpMyAdmin provides a web interface for interacting with MySQL |
||||
databases and can be connected to the MySQL container to ensure |
||||
the backup/restore process proceeds smoothly.</p> |
||||
<p>This is run as a stock phpMyAdmin container - run script |
||||
is <a href="https://git.charlesreid1.com/docker/d-phpmyadmin/src/branch/master/run_stock_phpmyadmin.sh">here</a> |
||||
in the <a href="https://git.charlesreid1.com/docker/d-phpmyadmin">docker/d-phpmyadmin</a> |
||||
repository on git.charlesreid1.com.</p> |
||||
<p>The phpMyAdmin service is a web interface that is available |
||||
on port 80. The container should only be bound to the |
||||
Docker container network (default behavior). Then any |
||||
container on the network can reach the container's |
||||
phpMyAdmin service on port 80.</p> |
||||
<p>This allows the phpMyAdmin service to be made available at |
||||
a URL like <code>/phpMyAdmin</code> and have all requests reverse-proxied |
||||
by the nginx container and passed to port 80 on the back end.</p> |
||||
<p>The phpMyAdmin service can also be disabled/enabled by |
||||
commenting it out of the nginx configuration files containing |
||||
HTTPS rules for the charlesreid1.com domains.</p> |
||||
<p>See the configuration section of the <a href="../Service_nginx/">Nginx</a> |
||||
container page for more information about the nginx configuration |
||||
files.</p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article> |
||||
</div> |
||||
</div> |
||||
</main> |
||||
|
||||
|
||||
<footer class="md-footer"> |
||||
|
||||
<div class="md-footer-nav"> |
||||
<nav class="md-footer-nav__inner md-grid"> |
||||
|
||||
<a href="../Service_mysql/" title="Pod Service: MySQL" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev"> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> |
||||
<span class="md-flex__ellipsis"> |
||||
<span class="md-footer-nav__direction"> |
||||
Previous |
||||
</span> |
||||
Pod Service: MySQL |
||||
</span> |
||||
</div> |
||||
</a> |
||||
|
||||
|
||||
<a href="../Service_nginx/" title="Pod Service: nginx" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next"> |
||||
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> |
||||
<span class="md-flex__ellipsis"> |
||||
<span class="md-footer-nav__direction"> |
||||
Next |
||||
</span> |
||||
Pod Service: nginx |
||||
</span> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i> |
||||
</div> |
||||
</a> |
||||
|
||||
</nav> |
||||
</div> |
||||
|
||||
<div class="md-footer-meta md-typeset"> |
||||
<div class="md-footer-meta__inner md-grid"> |
||||
<div class="md-footer-copyright"> |
||||
|
||||
<div class="md-footer-copyright__highlight"> |
||||
Copyright © 2018 <a href="https://charlesreid1.com">Charles Reid</a>, released under the <a href="https://opensource.org/licenses/MIT">MIT license</a> |
||||
</div> |
||||
|
||||
powered by |
||||
<a href="https://www.mkdocs.org">MkDocs</a> |
||||
and |
||||
<a href="https://squidfunk.github.io/mkdocs-material/"> |
||||
Material for MkDocs</a> |
||||
</div> |
||||
|
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
</footer> |
||||
|
||||
</div> |
||||
|
||||
<script src="../assets/javascripts/application.e72fd936.js"></script> |
||||
|
||||
<script>app.initialize({version:"1.0.4",url:{base:".."}})</script> |
||||
|
||||
<script src="../search/main.js"></script> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body> |
||||
</html> |
@ -0,0 +1,532 @@
@@ -0,0 +1,532 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<!DOCTYPE html> |
||||
<html lang="en" class="no-js"> |
||||
<head> |
||||
|
||||
<meta charset="utf-8"> |
||||
<meta name="viewport" content="width=device-width,initial-scale=1"> |
||||
<meta http-equiv="x-ua-compatible" content="ie=edge"> |
||||
|
||||
|
||||
<link rel="canonical" href="https://pages.charlesreid1.com/pod-charlesreid1/Service_pythonfiles/"> |
||||
|
||||
|
||||
|
||||
<meta name="lang:clipboard.copy" content="Copy to clipboard"> |
||||
|
||||
<meta name="lang:clipboard.copied" content="Copied to clipboard"> |
||||
|
||||
<meta name="lang:search.language" content="en"> |
||||
|
||||
<meta name="lang:search.pipeline.stopwords" content="True"> |
||||
|
||||
<meta name="lang:search.pipeline.trimmer" content="True"> |
||||
|
||||
<meta name="lang:search.result.none" content="No matching documents"> |
||||
|
||||
<meta name="lang:search.result.one" content="1 matching document"> |
||||
|
||||
<meta name="lang:search.result.other" content="# matching documents"> |
||||
|
||||
<meta name="lang:search.tokenizer" content="[\s\-]+"> |
||||
|
||||
<link rel="shortcut icon" href=".."> |
||||
<meta name="generator" content="mkdocs-1.0.4, mkdocs-material-3.0.3"> |
||||
|
||||
|
||||
|
||||
<title>Pod Service: Python File Server - pod-charlesreid1</title> |
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/application.451f80e5.css"> |
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/application-palette.22915126.css"> |
||||
|
||||
|
||||
|
||||
|
||||
<meta name="theme-color" content="#2196f3"> |
||||
|
||||
|
||||
|
||||
<script src="../assets/javascripts/modernizr.1aa3b519.js"></script> |
||||
|
||||
|
||||
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin> |
||||
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono"> |
||||
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style> |
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/fonts/material-icons.css"> |
||||
|
||||
<link rel="stylesheet" href="../css/custom.css"> |
||||
|
||||
|
||||
</head> |
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-primary="blue" data-md-color-accent="blue"> |
||||
|
||||
<svg class="md-svg"> |
||||
<defs> |
||||
|
||||
|
||||
</defs> |
||||
</svg> |
||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> |
||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> |
||||
<label class="md-overlay" data-md-component="overlay" for="__drawer"></label> |
||||
|
||||
<a href="../#python-file-server" tabindex="1" class="md-skip"> |
||||
Skip to content |
||||
</a> |
||||
|
||||
|
||||
<header class="md-header" data-md-component="header"> |
||||
<nav class="md-header-nav md-grid"> |
||||
<div class="md-flex"> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<a href="https://pages.charlesreid1.com/pod-charlesreid1" title="pod-charlesreid1" class="md-header-nav__button md-logo"> |
||||
|
||||
<i class="md-icon">dns</i> |
||||
|
||||
</a> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--stretch"> |
||||
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title"> |
||||
|
||||
|
||||
<span class="md-header-nav__topic"> |
||||
pod-charlesreid1 |
||||
</span> |
||||
<span class="md-header-nav__topic"> |
||||
Pod Service: Python File Server |
||||
</span> |
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
|
||||
|
||||
<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label> |
||||
|
||||
<div class="md-search" data-md-component="search" role="dialog"> |
||||
<label class="md-search__overlay" for="__search"></label> |
||||
<div class="md-search__inner" role="search"> |
||||
<form class="md-search__form" name="search"> |
||||
<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active"> |
||||
<label class="md-icon md-search__icon" for="__search"></label> |
||||
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1"> |
||||
 |
||||
</button> |
||||
</form> |
||||
<div class="md-search__output"> |
||||
<div class="md-search__scrollwrap" data-md-scrollfix> |
||||
<div class="md-search-result" data-md-component="result"> |
||||
<div class="md-search-result__meta"> |
||||
Type to start searching |
||||
</div> |
||||
<ol class="md-search-result__list"></ol> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
</div> |
||||
|
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<div class="md-header-nav__source"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="https://git.charlesreid1.com/docker/pod-charlesreid1" title="Go to repository" class="md-source" data-md-source=""> |
||||
|
||||
<div class="md-source__repository"> |
||||
pod-charlesreid1 |
||||
</div> |
||||
</a> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
</nav> |
||||
</header> |
||||
|
||||
<div class="md-container"> |
||||
|
||||
|
||||
|
||||
<main class="md-main"> |
||||
<div class="md-main__inner md-grid" data-md-component="container"> |
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation"> |
||||
<div class="md-sidebar__scrollwrap"> |
||||
<div class="md-sidebar__inner"> |
||||
<nav class="md-nav md-nav--primary" data-md-level="0"> |
||||
<label class="md-nav__title md-nav__title--site" for="__drawer"> |
||||
<a href="https://pages.charlesreid1.com/pod-charlesreid1" title="pod-charlesreid1" class="md-nav__button md-logo"> |
||||
|
||||
<i class="md-icon">dns</i> |
||||
|
||||
</a> |
||||
pod-charlesreid1 |
||||
</label> |
||||
|
||||
<div class="md-nav__source"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="https://git.charlesreid1.com/docker/pod-charlesreid1" title="Go to repository" class="md-source" data-md-source=""> |
||||
|
||||
<div class="md-source__repository"> |
||||
pod-charlesreid1 |
||||
</div> |
||||
</a> |
||||
|
||||
</div> |
||||
|
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href=".." title="Index" class="md-nav__link"> |
||||
Index |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--active md-nav__item--nested"> |
||||
|
||||
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2" checked> |
||||
|
||||
<label class="md-nav__link" for="nav-2"> |
||||
Services |
||||
</label> |
||||
<nav class="md-nav" data-md-component="collapsible" data-md-level="1"> |
||||
<label class="md-nav__title" for="nav-2"> |
||||
Services |
||||
</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_mediawiki/" title="Pod Service: MediaWiki" class="md-nav__link"> |
||||
Pod Service: MediaWiki |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_apachephp/" title="Pod Service: Apache/PHP" class="md-nav__link"> |
||||
Pod Service: Apache/PHP |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_mysql/" title="Pod Service: MySQL" class="md-nav__link"> |
||||
Pod Service: MySQL |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_phpmyadmin/" title="Pod Service: phpMyAdmin" class="md-nav__link"> |
||||
Pod Service: phpMyAdmin |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_nginx/" title="Pod Service: nginx" class="md-nav__link"> |
||||
Pod Service: nginx |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--active"> |
||||
|
||||
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc"> |
||||
|
||||
|
||||
|
||||
|
||||
<a href="./" title="Pod Service: Python File Server" class="md-nav__link md-nav__link--active"> |
||||
Pod Service: Python File Server |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_gitea/" title="Pod Service: Gitea" class="md-nav__link"> |
||||
Pod Service: Gitea |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
</ul> |
||||
</nav> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Running/" title="Running the Pod" class="md-nav__link"> |
||||
Running the Pod |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Volumes/" title="Volumes" class="md-nav__link"> |
||||
Volumes |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Backups/" title="Backups" class="md-nav__link"> |
||||
Backups |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Ports/" title="Domains and Ports" class="md-nav__link"> |
||||
Domains and Ports |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Secrets/" title="Secrets" class="md-nav__link"> |
||||
Secrets |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
</ul> |
||||
</nav> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc"> |
||||
<div class="md-sidebar__scrollwrap"> |
||||
<div class="md-sidebar__inner"> |
||||
|
||||
<nav class="md-nav md-nav--secondary"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</nav> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<div class="md-content"> |
||||
<article class="md-content__inner md-typeset"> |
||||
|
||||
|
||||
|
||||
<h1 id="python-file-server">Python File Server<a class="headerlink" href="#python-file-server" title="Permanent link">¶</a></h1> |
||||
<p>This page describes how pod-charlesreid1 provides a lightweight |
||||
HTTP file server that is reverse-proxied by nginx to provide |
||||
a dead-simple file hosting service at <code>files.charlesreid1.com</code>.</p> |
||||
<p>We use an alpine container with Python 3 for a minimal image |
||||
size. Python comes with a simple HTTP server built-in that |
||||
will do the job for us, available through the <code>http.server</code> |
||||
module (or <code>SimpleHTTPServer</code> in Python 2):</p> |
||||
<div class="codehilite"><pre><span></span>python3 -m http.server 8081 |
||||
</pre></div> |
||||
|
||||
|
||||
<p>We expose this to port 8081 locally, making the service available |
||||
on the Docker network and therefore available to be reverse-proxied |
||||
by the nginx container.</p> |
||||
<p>Files to be served up are located in <code>/www/files/</code> on the host, |
||||
which is bind-mounted to <code>/files</code> in the container.</p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article> |
||||
</div> |
||||
</div> |
||||
</main> |
||||
|
||||
|
||||
<footer class="md-footer"> |
||||
|
||||
<div class="md-footer-nav"> |
||||
<nav class="md-footer-nav__inner md-grid"> |
||||
|
||||
<a href="../Service_nginx/" title="Pod Service: nginx" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev"> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> |
||||
<span class="md-flex__ellipsis"> |
||||
<span class="md-footer-nav__direction"> |
||||
Previous |
||||
</span> |
||||
Pod Service: nginx |
||||
</span> |
||||
</div> |
||||
</a> |
||||
|
||||
|
||||
<a href="../Service_gitea/" title="Pod Service: Gitea" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next"> |
||||
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> |
||||
<span class="md-flex__ellipsis"> |
||||
<span class="md-footer-nav__direction"> |
||||
Next |
||||
</span> |
||||
Pod Service: Gitea |
||||
</span> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i> |
||||
</div> |
||||
</a> |
||||
|
||||
</nav> |
||||
</div> |
||||
|
||||
<div class="md-footer-meta md-typeset"> |
||||
<div class="md-footer-meta__inner md-grid"> |
||||
<div class="md-footer-copyright"> |
||||
|
||||
<div class="md-footer-copyright__highlight"> |
||||
Copyright © 2018 <a href="https://charlesreid1.com">Charles Reid</a>, released under the <a href="https://opensource.org/licenses/MIT">MIT license</a> |
||||
</div> |
||||
|
||||
powered by |
||||
<a href="https://www.mkdocs.org">MkDocs</a> |
||||
and |
||||
<a href="https://squidfunk.github.io/mkdocs-material/"> |
||||
Material for MkDocs</a> |
||||
</div> |
||||
|
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
</footer> |
||||
|
||||
</div> |
||||
|
||||
<script src="../assets/javascripts/application.e72fd936.js"></script> |
||||
|
||||
<script>app.initialize({version:"1.0.4",url:{base:".."}})</script> |
||||
|
||||
<script src="../search/main.js"></script> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body> |
||||
</html> |
@ -0,0 +1,991 @@
@@ -0,0 +1,991 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<!DOCTYPE html> |
||||
<html lang="en" class="no-js"> |
||||
<head> |
||||
|
||||
<meta charset="utf-8"> |
||||
<meta name="viewport" content="width=device-width,initial-scale=1"> |
||||
<meta http-equiv="x-ua-compatible" content="ie=edge"> |
||||
|
||||
|
||||
<link rel="canonical" href="https://pages.charlesreid1.com/pod-charlesreid1/Volumes/"> |
||||
|
||||
|
||||
|
||||
<meta name="lang:clipboard.copy" content="Copy to clipboard"> |
||||
|
||||
<meta name="lang:clipboard.copied" content="Copied to clipboard"> |
||||
|
||||
<meta name="lang:search.language" content="en"> |
||||
|
||||
<meta name="lang:search.pipeline.stopwords" content="True"> |
||||
|
||||
<meta name="lang:search.pipeline.trimmer" content="True"> |
||||
|
||||
<meta name="lang:search.result.none" content="No matching documents"> |
||||
|
||||
<meta name="lang:search.result.one" content="1 matching document"> |
||||
|
||||
<meta name="lang:search.result.other" content="# matching documents"> |
||||
|
||||
<meta name="lang:search.tokenizer" content="[\s\-]+"> |
||||
|
||||
<link rel="shortcut icon" href=".."> |
||||
<meta name="generator" content="mkdocs-1.0.4, mkdocs-material-3.0.3"> |
||||
|
||||
|
||||
|
||||
<title>Volumes - pod-charlesreid1</title> |
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/application.451f80e5.css"> |
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/application-palette.22915126.css"> |
||||
|
||||
|
||||
|
||||
|
||||
<meta name="theme-color" content="#2196f3"> |
||||
|
||||
|
||||
|
||||
<script src="../assets/javascripts/modernizr.1aa3b519.js"></script> |
||||
|
||||
|
||||
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin> |
||||
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono"> |
||||
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style> |
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/fonts/material-icons.css"> |
||||
|
||||
<link rel="stylesheet" href="../css/custom.css"> |
||||
|
||||
|
||||
</head> |
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-primary="blue" data-md-color-accent="blue"> |
||||
|
||||
<svg class="md-svg"> |
||||
<defs> |
||||
|
||||
|
||||
</defs> |
||||
</svg> |
||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> |
||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> |
||||
<label class="md-overlay" data-md-component="overlay" for="__drawer"></label> |
||||
|
||||
<a href="../#volumes" tabindex="1" class="md-skip"> |
||||
Skip to content |
||||
</a> |
||||
|
||||
|
||||
<header class="md-header" data-md-component="header"> |
||||
<nav class="md-header-nav md-grid"> |
||||
<div class="md-flex"> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<a href="https://pages.charlesreid1.com/pod-charlesreid1" title="pod-charlesreid1" class="md-header-nav__button md-logo"> |
||||
|
||||
<i class="md-icon">dns</i> |
||||
|
||||
</a> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--stretch"> |
||||
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title"> |
||||
|
||||
|
||||
<span class="md-header-nav__topic"> |
||||
pod-charlesreid1 |
||||
</span> |
||||
<span class="md-header-nav__topic"> |
||||
Volumes |
||||
</span> |
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
|
||||
|
||||
<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label> |
||||
|
||||
<div class="md-search" data-md-component="search" role="dialog"> |
||||
<label class="md-search__overlay" for="__search"></label> |
||||
<div class="md-search__inner" role="search"> |
||||
<form class="md-search__form" name="search"> |
||||
<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active"> |
||||
<label class="md-icon md-search__icon" for="__search"></label> |
||||
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1"> |
||||
 |
||||
</button> |
||||
</form> |
||||
<div class="md-search__output"> |
||||
<div class="md-search__scrollwrap" data-md-scrollfix> |
||||
<div class="md-search-result" data-md-component="result"> |
||||
<div class="md-search-result__meta"> |
||||
Type to start searching |
||||
</div> |
||||
<ol class="md-search-result__list"></ol> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
</div> |
||||
|
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<div class="md-header-nav__source"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="https://git.charlesreid1.com/docker/pod-charlesreid1" title="Go to repository" class="md-source" data-md-source=""> |
||||
|
||||
<div class="md-source__repository"> |
||||
pod-charlesreid1 |
||||
</div> |
||||
</a> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
</nav> |
||||
</header> |
||||
|
||||
<div class="md-container"> |
||||
|
||||
|
||||
|
||||
<main class="md-main"> |
||||
<div class="md-main__inner md-grid" data-md-component="container"> |
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation"> |
||||
<div class="md-sidebar__scrollwrap"> |
||||
<div class="md-sidebar__inner"> |
||||
<nav class="md-nav md-nav--primary" data-md-level="0"> |
||||
<label class="md-nav__title md-nav__title--site" for="__drawer"> |
||||
<a href="https://pages.charlesreid1.com/pod-charlesreid1" title="pod-charlesreid1" class="md-nav__button md-logo"> |
||||
|
||||
<i class="md-icon">dns</i> |
||||
|
||||
</a> |
||||
pod-charlesreid1 |
||||
</label> |
||||
|
||||
<div class="md-nav__source"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="https://git.charlesreid1.com/docker/pod-charlesreid1" title="Go to repository" class="md-source" data-md-source=""> |
||||
|
||||
<div class="md-source__repository"> |
||||
pod-charlesreid1 |
||||
</div> |
||||
</a> |
||||
|
||||
</div> |
||||
|
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href=".." title="Index" class="md-nav__link"> |
||||
Index |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested"> |
||||
|
||||
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2"> |
||||
|
||||
<label class="md-nav__link" for="nav-2"> |
||||
Services |
||||
</label> |
||||
<nav class="md-nav" data-md-component="collapsible" data-md-level="1"> |
||||
<label class="md-nav__title" for="nav-2"> |
||||
Services |
||||
</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_mediawiki/" title="Pod Service: MediaWiki" class="md-nav__link"> |
||||
Pod Service: MediaWiki |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_apachephp/" title="Pod Service: Apache/PHP" class="md-nav__link"> |
||||
Pod Service: Apache/PHP |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_mysql/" title="Pod Service: MySQL" class="md-nav__link"> |
||||
Pod Service: MySQL |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_phpmyadmin/" title="Pod Service: phpMyAdmin" class="md-nav__link"> |
||||
Pod Service: phpMyAdmin |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_nginx/" title="Pod Service: nginx" class="md-nav__link"> |
||||
Pod Service: nginx |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_pythonfiles/" title="Pod Service: Python File Server" class="md-nav__link"> |
||||
Pod Service: Python File Server |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Service_gitea/" title="Pod Service: Gitea" class="md-nav__link"> |
||||
Pod Service: Gitea |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
</ul> |
||||
</nav> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Running/" title="Running the Pod" class="md-nav__link"> |
||||
Running the Pod |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--active"> |
||||
|
||||
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc"> |
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link md-nav__link--active" for="__toc"> |
||||
Volumes |
||||
</label> |
||||
|
||||
<a href="./" title="Volumes" class="md-nav__link md-nav__link--active"> |
||||
Volumes |
||||
</a> |
||||
|
||||
|
||||
<nav class="md-nav md-nav--secondary"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">Table of contents</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#persistent-data-volumes" title="Persistent Data Volumes" class="md-nav__link"> |
||||
Persistent Data Volumes |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#nginx" title="nginx" class="md-nav__link"> |
||||
nginx |
||||
</a> |
||||
|
||||
<nav class="md-nav"> |
||||
<ul class="md-nav__list"> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#nginx-lets-encrypt-ssl-certificates" title="nginx + lets encrypt ssl certificates" class="md-nav__link"> |
||||
nginx + lets encrypt ssl certificates |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#nginx-static-content" title="nginx static content" class="md-nav__link"> |
||||
nginx static content |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#nginx-bind-mounted-files" title="nginx bind-mounted files" class="md-nav__link"> |
||||
nginx bind-mounted files |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#other-nginx-bind-mounted-files" title="other nginx bind-mounted files" class="md-nav__link"> |
||||
other nginx bind-mounted files |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
</ul> |
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#mysql" title="mysql" class="md-nav__link"> |
||||
mysql |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#mediawiki" title="mediawiki" class="md-nav__link"> |
||||
mediawiki |
||||
</a> |
||||
|
||||
<nav class="md-nav"> |
||||
<ul class="md-nav__list"> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#mediawiki-data-volume" title="mediawiki data volume" class="md-nav__link"> |
||||
mediawiki data volume |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#mediawiki-bind-mounted-files" title="mediawiki bind-mounted files" class="md-nav__link"> |
||||
mediawiki bind-mounted files |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
</ul> |
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#gitea" title="gitea" class="md-nav__link"> |
||||
gitea |
||||
</a> |
||||
|
||||
<nav class="md-nav"> |
||||
<ul class="md-nav__list"> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#gitea-data-volume" title="gitea data volume" class="md-nav__link"> |
||||
gitea data volume |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#gitea-bind-mounted-files" title="gitea bind-mounted files" class="md-nav__link"> |
||||
gitea bind-mounted files |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
</ul> |
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#python-file-server" title="python file server" class="md-nav__link"> |
||||
python file server |
||||
</a> |
||||
|
||||
<nav class="md-nav"> |
||||
<ul class="md-nav__list"> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#pyfiles-directory" title="pyfiles directory" class="md-nav__link"> |
||||
pyfiles directory |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
</ul> |
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</ul> |
||||
|
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Backups/" title="Backups" class="md-nav__link"> |
||||
Backups |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Ports/" title="Domains and Ports" class="md-nav__link"> |
||||
Domains and Ports |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="../Secrets/" title="Secrets" class="md-nav__link"> |
||||
Secrets |
||||
</a> |
||||
</li> |
||||
|
||||
|
||||
</ul> |
||||
</nav> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc"> |
||||
<div class="md-sidebar__scrollwrap"> |
||||
<div class="md-sidebar__inner"> |
||||
|
||||
<nav class="md-nav md-nav--secondary"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">Table of contents</label> |
||||
<ul class="md-nav__list" data-md-scrollfix> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#persistent-data-volumes" title="Persistent Data Volumes" class="md-nav__link"> |
||||
Persistent Data Volumes |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#nginx" title="nginx" class="md-nav__link"> |
||||
nginx |
||||
</a> |
||||
|
||||
<nav class="md-nav"> |
||||
<ul class="md-nav__list"> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#nginx-lets-encrypt-ssl-certificates" title="nginx + lets encrypt ssl certificates" class="md-nav__link"> |
||||
nginx + lets encrypt ssl certificates |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#nginx-static-content" title="nginx static content" class="md-nav__link"> |
||||
nginx static content |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#nginx-bind-mounted-files" title="nginx bind-mounted files" class="md-nav__link"> |
||||
nginx bind-mounted files |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#other-nginx-bind-mounted-files" title="other nginx bind-mounted files" class="md-nav__link"> |
||||
other nginx bind-mounted files |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
</ul> |
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#mysql" title="mysql" class="md-nav__link"> |
||||
mysql |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#mediawiki" title="mediawiki" class="md-nav__link"> |
||||
mediawiki |
||||
</a> |
||||
|
||||
<nav class="md-nav"> |
||||
<ul class="md-nav__list"> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#mediawiki-data-volume" title="mediawiki data volume" class="md-nav__link"> |
||||
mediawiki data volume |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#mediawiki-bind-mounted-files" title="mediawiki bind-mounted files" class="md-nav__link"> |
||||
mediawiki bind-mounted files |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
</ul> |
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#gitea" title="gitea" class="md-nav__link"> |
||||
gitea |
||||
</a> |
||||
|
||||
<nav class="md-nav"> |
||||
<ul class="md-nav__list"> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#gitea-data-volume" title="gitea data volume" class="md-nav__link"> |
||||
gitea data volume |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#gitea-bind-mounted-files" title="gitea bind-mounted files" class="md-nav__link"> |
||||
gitea bind-mounted files |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
</ul> |
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#python-file-server" title="python file server" class="md-nav__link"> |
||||
python file server |
||||
</a> |
||||
|
||||
<nav class="md-nav"> |
||||
<ul class="md-nav__list"> |
||||
|
||||
<li class="md-nav__item"> |
||||
<a href="#pyfiles-directory" title="pyfiles directory" class="md-nav__link"> |
||||
pyfiles directory |
||||
</a> |
||||
|
||||
</li> |
||||
|
||||
</ul> |
||||
</nav> |
||||
|
||||
</li> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</ul> |
||||
|
||||
</nav> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<div class="md-content"> |
||||
<article class="md-content__inner md-typeset"> |
||||
|
||||
|
||||
|
||||
<h1 id="volumes">Volumes<a class="headerlink" href="#volumes" title="Permanent link">¶</a></h1> |
||||
<h2 id="persistent-data-volumes">Persistent Data Volumes<a class="headerlink" href="#persistent-data-volumes" title="Permanent link">¶</a></h2> |
||||
<p>docker-compose volumes are mostly persistent, but they can |
||||
be deleted relatively easily.</p> |
||||
<p>When you're using docker-compose, volumes are persistent |
||||
through both <code>docker-compose stop</code> and <code>docker-compose down</code> commands.</p> |
||||
<p>The <code>docker-compose down</code> command will destroy everything including networks |
||||
and mounted files, while <code>docker-compose stop</code> will just stop the containers.</p> |
||||
<p><strong><em>DANGER - DANGER - DANGER</em></strong></p> |
||||
<p>If you want to remove the volumes, use <code>docker-compose down -v</code>.</p> |
||||
<div class="codehilite"><pre><span></span>docker-compose down -v # DANGER!!! |
||||
</pre></div> |
||||
|
||||
|
||||
<p>To force removal of the volumes:</p> |
||||
<div class="codehilite"><pre><span></span>docker-compose down -v -f # DANGER!!! |
||||
</pre></div> |
||||
|
||||
|
||||
<p>To see the current list of docker volumes:</p> |
||||
<div class="codehilite"><pre><span></span>docker volume ls |
||||
</pre></div> |
||||
|
||||
|
||||
<p>You can also interact with the volumes individually |
||||
this way. Run <code>docker volume</code> for help.</p> |
||||
<hr /> |
||||
<h2 id="nginx">nginx<a class="headerlink" href="#nginx" title="Permanent link">¶</a></h2> |
||||
<p>The nginx service does not have any data volumes, |
||||
but has several static files that are bind-mounted. |
||||
Most importantly, nginx handles the SSL certificates |
||||
for all subdomains.</p> |
||||
<hr /> |
||||
<h3 id="nginx-lets-encrypt-ssl-certificates">nginx + lets encrypt ssl certificates<a class="headerlink" href="#nginx-lets-encrypt-ssl-certificates" title="Permanent link">¶</a></h3> |
||||
<p>Rather than fuss with getting the letsencrypt |
||||
docker image working, we made SSL certs by hand.</p> |
||||
<p>See <a href="https://git.charlesreid1.com/charlesreid1/certbot">git.charlesreid1.com/charlesreid1/certbot</a></p> |
||||
<p>Certbot will put the SSL certificates into |
||||
<code>/etc/letsencrypt/live/example.com</code>.</p> |
||||
<p>We bind-mount the entire <code>/etc/letsencrypt</code> directory |
||||
into the same location in the nginx container |
||||
(see this volumes line in <code>docker-compose.yml</code>):</p> |
||||
<div class="codehilite"><pre><span></span> - "/etc/letsencrypt:/etc/letsencrypt" |
||||
</pre></div> |
||||
|
||||
|
||||
<p>To renew certificates (every few months), just run the certbot script in the certbot repo.</p> |
||||
<h3 id="nginx-static-content">nginx static content<a class="headerlink" href="#nginx-static-content" title="Permanent link">¶</a></h3> |
||||
<p>The main site hosted by nginx (charlesreid1.com) is served up |
||||
from a directory of static content under version control.</p> |
||||
<p>This static content is bind-mounted and lives on the host |
||||
(no data volume is used for nginx).</p> |
||||
<p>On the host, static site contents are stored at <code>/www/</code> |
||||
with a directory structure and corresponding permissions |
||||
as follows:</p> |
||||
<div class="codehilite"><pre><span></span>/www/ # <-- owned by regular user |
||||
|
||||
charlesreid1.blue/ # <-- owned by regular user |
||||
charlesreid1.blue-src/ # <-- owned by regular user |
||||
<pelican files> |
||||
htdocs/ # <-- owned by www-data |
||||
<web site static contents> |
||||
|
||||
charlesreid1.red/ # <-- owned by regular user |
||||
charlesreid1.red-src/ # <-- owned by regular user |
||||
<pelican files> |
||||
htdocs/ # <-- owned by www-data |
||||
<web site static contents> |
||||
|
||||
charlesreid1.com/ |
||||
charlesreid1.com-src/ |
||||
<pelican files> |
||||
htdocs/ |
||||
<web site static contents> |
||||
|
||||
... |
||||
</pre></div> |
||||
|
||||
|
||||
<p>Each domain has its own directory, in which there is a source directory |
||||
(git repository containing pelican files) and an htdocs directory |
||||
(git repository containing live hosted static content).</p> |
||||
<p>These are mounted in the container at the same location. |
||||
See the volumes section of the nginx container:</p> |
||||
<div class="codehilite"><pre><span></span> - "/www/charlesreid1.blue/htdocs:/www/charlesreid1.blue/htdocs:ro" |
||||
- "/www/charlesreid1.red/htdocs:/www/charlesreid1.red/htdocs:ro" |
||||
- "/www/charlesreid1.com/htdocs:/www/charlesreid1.com/htdocs:ro" |
||||
</pre></div> |
||||
|
||||
|
||||
<p>The source and htdocs directories are separate branches of the same repo. |
||||
Each website has (TODO: will have) its own repository.</p> |
||||
<p>The <code>master</code> branch contains the source code for that repository, |
||||
mainly pelican files plus html/css/js.</p> |
||||
<p>The <code>pages</code> branch contains the static content to be hosted |
||||
by the nginx web server.</p> |
||||
<p>Ownership makes dealing with this stuff a pain in the ass. |
||||
The <code>htdocs</code> dir must be owned/updated by <code>www-data</code>, |
||||
so you need to update the git repo contents as that user:</p> |
||||
<div class="codehilite"><pre><span></span>sudo -H -u www-data git pull origin pages |
||||
</pre></div> |
||||
|
||||
|
||||
<h3 id="nginx-bind-mounted-files">nginx bind-mounted files<a class="headerlink" href="#nginx-bind-mounted-files" title="Permanent link">¶</a></h3> |
||||
<p>We bind-mount a directory <code>conf.d</code> containing |
||||
nginx configuration files into the container |
||||
at <code>/etc/nginx/conf.d</code>, which is where nginx |
||||
automatically looks for and loads configuration |
||||
files.</p> |
||||
<p>The custom nginx configuration files are split up |
||||
by protocol and subdomain, and can be found |
||||
in the <a href="https://git.charlesreid1.com/docker/d-nginx-charlesreid1">d-nginx-charlesreid1</a> |
||||
repository. From the <code>docker-compose.yml</code> file |
||||
nginx volumes directive:</p> |
||||
<div class="codehilite"><pre><span></span> - "./d-nginx-charlesreid1/conf.d:/etc/nginx/conf.d:ro" |
||||
</pre></div> |
||||
|
||||
|
||||
<h3 id="other-nginx-bind-mounted-files">other nginx bind-mounted files<a class="headerlink" href="#other-nginx-bind-mounted-files" title="Permanent link">¶</a></h3> |
||||
<p>The last remaining nginx file that is bind-mounted into the container |
||||
is <code>/etc/localtime</code>, which ensures our webserver's timestamps match |
||||
the host's. In the nginx volumes directive:</p> |
||||
<div class="codehilite"><pre><span></span> - "/etc/localtime:/etc/localtime:ro" |
||||
</pre></div> |
||||
|
||||
|
||||
<hr /> |
||||
<h2 id="mysql">mysql<a class="headerlink" href="#mysql" title="Permanent link">¶</a></h2> |
||||
<p>The MySQL database container is used by MediaWiki |
||||
and stores its data on disk in a data volume. |
||||
Inside the conatiner all MySQL data lives at</p> |
||||
<div class="codehilite"><pre><span></span>/var/lib/mysql |
||||
</pre></div> |
||||
|
||||
|
||||
<p>This is mapped to a data volume, <code>stormy_mysql_data</code>.</p> |
||||
<p>There is no custom configuration of the MySQL database |
||||
at this time, but to add a custom config file, |
||||
mount it in the container via bind-mounting |
||||
by adding this to the volumes section of |
||||
<code>docker-compose.yml</code>:</p> |
||||
<div class="codehilite"><pre><span></span> - "./d-mysql/krash.mysql.cnf:/etc/mysql/conf.d/krash.mysql.cnf" |
||||
</pre></div> |
||||
|
||||
|
||||
<hr /> |
||||
<h2 id="mediawiki">mediawiki<a class="headerlink" href="#mediawiki" title="Permanent link">¶</a></h2> |
||||
<h3 id="mediawiki-data-volume">mediawiki data volume<a class="headerlink" href="#mediawiki-data-volume" title="Permanent link">¶</a></h3> |
||||
<p>The MediaWiki container hosts all wiki files |
||||
from <code>/var/www/html</code> (in the MediaWiki container).</p> |
||||
<p>When the container is built from the Dockerfile, |
||||
most of the customized MediaWiki files are copied |
||||
into the data volume. These include:</p> |
||||
<ul> |
||||
<li><code>LocalSettings.php</code> - MediaWiki config file</li> |
||||
<li><code>skins/</code> directory</li> |
||||
<li><code>extensions/</code> directory</li> |
||||
</ul> |
||||
<p>MediaWiki files are kept under version control in the |
||||
<a href="https://git.charlesreid1.com/docker/d-mediawiki">d-mediawiki</a> |
||||
repo.</p> |
||||
<p>The MediaWiki container uses a data volume called |
||||
<code>stormy_mw_data</code>, which is mounted at <code>/var/www/html</code> |
||||
inside the container.</p> |
||||
<p>The docker-compose file takes care of creating the data volume.</p> |
||||
<h3 id="mediawiki-bind-mounted-files">mediawiki bind-mounted files<a class="headerlink" href="#mediawiki-bind-mounted-files" title="Permanent link">¶</a></h3> |
||||
<p>(TODO: ambiguous how skins dir is mounted; |
||||
copying skins into container in Dockerfile, |
||||
and bind-mounting bootstrap2 at runtime.)</p> |
||||
<p>MediaWiki skins are kept under version control |
||||
in the <a href="https://git.charlesreid1.com/docker/d-mediawiki">d-mediawiki</a> |
||||
repo.</p> |
||||
<p>The Bootstrap2 MediaWiki skin is bind-mounted into the container |
||||
at <code>/var/www/html/skins/Bootstrap2/</code>.</p> |
||||
<p>If you make changes to the skin or MediaWiki config files, |
||||
update the MediaWiki docker image as follows:</p> |
||||
<div class="codehilite"><pre><span></span>docker-compose build |
||||
docker-compose down |
||||
docker-compose up |
||||
</pre></div> |
||||
|
||||
|
||||
<hr /> |
||||
<h2 id="gitea">gitea<a class="headerlink" href="#gitea" title="Permanent link">¶</a></h2> |
||||
<h3 id="gitea-data-volume">gitea data volume<a class="headerlink" href="#gitea-data-volume" title="Permanent link">¶</a></h3> |
||||
<h3 id="gitea-bind-mounted-files">gitea bind-mounted files<a class="headerlink" href="#gitea-bind-mounted-files" title="Permanent link">¶</a></h3> |
||||
<hr /> |
||||
<h2 id="python-file-server">python file server<a class="headerlink" href="#python-file-server" title="Permanent link">¶</a></h2> |
||||
<h3 id="pyfiles-directory">pyfiles directory<a class="headerlink" href="#pyfiles-directory" title="Permanent link">¶</a></h3> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article> |
||||
</div> |
||||
</div> |
||||
</main> |
||||
|
||||
|
||||
<footer class="md-footer"> |
||||
|
||||
<div class="md-footer-nav"> |
||||
<nav class="md-footer-nav__inner md-grid"> |
||||
|
||||
<a href="../Running/" title="Running the Pod" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev"> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> |
||||
<span class="md-flex__ellipsis"> |
||||
<span class="md-footer-nav__direction"> |
||||
Previous |
||||
</span> |
||||
Running the Pod |
||||
</span> |
||||
</div> |
||||
</a> |
||||
|
||||
|
||||
<a href="../Backups/" title="Backups" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next"> |
||||
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> |
||||
<span class="md-flex__ellipsis"> |
||||
<span class="md-footer-nav__direction"> |
||||
Next |
||||
</span> |
||||
Backups |
||||
</span> |
||||
</div> |
||||
<div class="md-flex__cell md-flex__cell--shrink"> |
||||
<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i> |
||||
</div> |
||||
</a> |
||||
|
||||
</nav> |
||||
</div> |
||||
|
||||
<div class="md-footer-meta md-typeset"> |
||||
<div class="md-footer-meta__inner md-grid"> |
||||
<div class="md-footer-copyright"> |
||||
|
||||
<div class="md-footer-copyright__highlight"> |
||||
Copyright © 2018 <a href="https://charlesreid1.com">Charles Reid</a>, released under the <a href="https://opensource.org/licenses/MIT">MIT license</a> |
||||
</div> |
||||
|
||||
powered by |
||||
<a href="https://www.mkdocs.org">MkDocs</a> |
||||
and |
||||
<a href="https://squidfunk.github.io/mkdocs-material/"> |
||||
Material for MkDocs</a> |
||||
</div> |
||||
|
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
</footer> |
||||
|
||||
</div> |
||||
|
||||
<script src="../assets/javascripts/application.e72fd936.js"></script> |
||||
|
||||
<script>app.initialize({version:"1.0.4",url:{base:".."}})</script> |
||||
|
||||
<script src="../search/main.js"></script> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body> |
||||
</html> |
File diff suppressed because one or more lines are too long
@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
|
||||
/*! |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not |
||||
* use this file except in compliance with the License. You may obtain a copy |
||||
* of the License at: |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE |
||||
* DISTRIBUTED UNDER THE LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. |
||||
* SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING PERMISSIONS AND |
||||
* LIMITATIONS UNDER THE LICENSE. |
||||
*/@font-face{font-family:"Material Icons";font-style:normal;font-weight:400;src:local("Material Icons"),local("MaterialIcons-Regular"),url("specimen/MaterialIcons-Regular.woff2") format("woff2"),url("specimen/MaterialIcons-Regular.woff") format("woff"),url("specimen/MaterialIcons-Regular.ttf") format("truetype")} |
Binary file not shown.
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 521 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.6 KiB |
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@
@@ -0,0 +1 @@
|
||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,i,n;e.da=function(){this.pipeline.reset(),this.pipeline.add(e.da.trimmer,e.da.stopWordFilter,e.da.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.da.stemmer))},e.da.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.da.trimmer=e.trimmerSupport.generateTrimmer(e.da.wordCharacters),e.Pipeline.registerFunction(e.da.trimmer,"trimmer-da"),e.da.stemmer=(r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){var e,n,t,s=[new r("hed",-1,1),new r("ethed",0,1),new r("ered",-1,1),new r("e",-1,1),new r("erede",3,1),new r("ende",3,1),new r("erende",5,1),new r("ene",3,1),new r("erne",3,1),new r("ere",3,1),new r("en",-1,1),new r("heden",10,1),new r("eren",10,1),new r("er",-1,1),new r("heder",13,1),new r("erer",13,1),new r("s",-1,2),new r("heds",16,1),new r("es",16,1),new r("endes",18,1),new r("erendes",19,1),new r("enes",18,1),new r("ernes",18,1),new r("eres",18,1),new r("ens",16,1),new r("hedens",24,1),new r("erens",24,1),new r("ers",16,1),new r("ets",16,1),new r("erets",28,1),new r("et",-1,1),new r("eret",30,1)],o=[new r("gd",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1)],a=[new r("ig",-1,1),new r("lig",0,1),new r("elig",1,1),new r("els",-1,1),new r("løst",-1,2)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],u=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],c=new i;function l(){var e,r=c.limit-c.cursor;c.cursor>=n&&(e=c.limit_backward,c.limit_backward=n,c.ket=c.cursor,c.find_among_b(o,4)?(c.bra=c.cursor,c.limit_backward=e,c.cursor=c.limit-r,c.cursor>c.limit_backward&&(c.cursor--,c.bra=c.cursor,c.slice_del())):c.limit_backward=e)}this.setCurrent=function(e){c.setCurrent(e)},this.getCurrent=function(){return c.getCurrent()},this.stem=function(){var r,i=c.cursor;return function(){var r,i=c.cursor+3;if(n=c.limit,0<=i&&i<=c.limit){for(e=i;;){if(r=c.cursor,c.in_grouping(d,97,248)){c.cursor=r;break}if(c.cursor=r,r>=c.limit)return;c.cursor++}for(;!c.out_grouping(d,97,248);){if(c.cursor>=c.limit)return;c.cursor++}(n=c.cursor)<e&&(n=e)}}(),c.limit_backward=i,c.cursor=c.limit,function(){var e,r;if(c.cursor>=n&&(r=c.limit_backward,c.limit_backward=n,c.ket=c.cursor,e=c.find_among_b(s,32),c.limit_backward=r,e))switch(c.bra=c.cursor,e){case 1:c.slice_del();break;case 2:c.in_grouping_b(u,97,229)&&c.slice_del()}}(),c.cursor=c.limit,l(),c.cursor=c.limit,function(){var e,r,i,t=c.limit-c.cursor;if(c.ket=c.cursor,c.eq_s_b(2,"st")&&(c.bra=c.cursor,c.eq_s_b(2,"ig")&&c.slice_del()),c.cursor=c.limit-t,c.cursor>=n&&(r=c.limit_backward,c.limit_backward=n,c.ket=c.cursor,e=c.find_among_b(a,5),c.limit_backward=r,e))switch(c.bra=c.cursor,e){case 1:c.slice_del(),i=c.limit-c.cursor,l(),c.cursor=c.limit-i;break;case 2:c.slice_from("løs")}}(),c.cursor=c.limit,c.cursor>=n&&(r=c.limit_backward,c.limit_backward=n,c.ket=c.cursor,c.out_grouping_b(d,97,248)?(c.bra=c.cursor,t=c.slice_to(t),c.limit_backward=r,c.eq_v_b(t)&&c.slice_del()):c.limit_backward=r),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}),e.Pipeline.registerFunction(e.da.stemmer,"stemmer-da"),e.da.stopWordFilter=e.generateStopWordFilter("ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" ")),e.Pipeline.registerFunction(e.da.stopWordFilter,"stopWordFilter-da")}}); |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@
@@ -0,0 +1 @@
|
||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.jp=function(){this.pipeline.reset(),this.pipeline.add(e.jp.stopWordFilter,e.jp.stemmer),r?this.tokenizer=e.jp.tokenizer:(e.tokenizer&&(e.tokenizer=e.jp.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.jp.tokenizer))};var t=new e.TinySegmenter;e.jp.tokenizer=function(n){if(!arguments.length||null==n||null==n)return[];if(Array.isArray(n))return n.map(function(t){return r?new e.Token(t.toLowerCase()):t.toLowerCase()});for(var i=n.toString().toLowerCase().replace(/^\s+/,""),o=i.length-1;o>=0;o--)if(/\S/.test(i.charAt(o))){i=i.substring(0,o+1);break}return t.segment(i).filter(function(e){return!!e}).map(function(t){return r?new e.Token(t):t})},e.jp.stemmer=function(e){return e},e.Pipeline.registerFunction(e.jp.stemmer,"stemmer-jp"),e.jp.wordCharacters="一二三四五六七八九十百千万億兆一-龠々〆ヵヶぁ-んァ-ヴーア-ン゙a-zA-Za-zA-Z0-90-9",e.jp.stopWordFilter=function(t){if(-1===e.jp.stopWordFilter.stopWords.indexOf(r?t.toString():t))return t},e.jp.stopWordFilter=e.generateStopWordFilter("これ それ あれ この その あの ここ そこ あそこ こちら どこ だれ なに なん 何 私 貴方 貴方方 我々 私達 あの人 あのかた 彼女 彼 です あります おります います は が の に を で え から まで より も どの と し それで しかし".split(" ")),e.Pipeline.registerFunction(e.jp.stopWordFilter,"stopWordFilter-jp")}}); |
@ -0,0 +1 @@
@@ -0,0 +1 @@
|
||||
!function(e,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(e.lunr)}(this,function(){return function(e){e.multiLanguage=function(){for(var i=Array.prototype.slice.call(arguments),t=i.join("-"),r="",n=[],s=[],p=0;p<i.length;++p)"en"==i[p]?(r+="\\w",n.unshift(e.stopWordFilter),n.push(e.stemmer),s.push(e.stemmer)):(r+=e[i[p]].wordCharacters,n.unshift(e[i[p]].stopWordFilter),n.push(e[i[p]].stemmer),s.push(e[i[p]].stemmer));var o=e.trimmerSupport.generateTrimmer(r);return e.Pipeline.registerFunction(o,"lunr-multi-trimmer-"+t),n.unshift(o),function(){this.pipeline.reset(),this.pipeline.add.apply(this.pipeline,n),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add.apply(this.searchPipeline,s))}}}}); |
@ -0,0 +1 @@
@@ -0,0 +1 @@
|
||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,n,i;e.no=function(){this.pipeline.reset(),this.pipeline.add(e.no.trimmer,e.no.stopWordFilter,e.no.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.no.stemmer))},e.no.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.no.trimmer=e.trimmerSupport.generateTrimmer(e.no.wordCharacters),e.Pipeline.registerFunction(e.no.trimmer,"trimmer-no"),e.no.stemmer=(r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){var e,i,t=[new r("a",-1,1),new r("e",-1,1),new r("ede",1,1),new r("ande",1,1),new r("ende",1,1),new r("ane",1,1),new r("ene",1,1),new r("hetene",6,1),new r("erte",1,3),new r("en",-1,1),new r("heten",9,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",12,1),new r("s",-1,2),new r("as",14,1),new r("es",14,1),new r("edes",16,1),new r("endes",16,1),new r("enes",16,1),new r("hetenes",19,1),new r("ens",14,1),new r("hetens",21,1),new r("ers",14,1),new r("ets",14,1),new r("et",-1,1),new r("het",25,1),new r("ert",-1,3),new r("ast",-1,1)],o=[new r("dt",-1,-1),new r("vt",-1,-1)],s=[new r("leg",-1,1),new r("eleg",0,1),new r("ig",-1,1),new r("eig",2,1),new r("lig",2,1),new r("elig",4,1),new r("els",-1,1),new r("lov",-1,1),new r("elov",7,1),new r("slov",7,1),new r("hetslov",9,1)],a=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],m=[119,125,149,1],l=new n;this.setCurrent=function(e){l.setCurrent(e)},this.getCurrent=function(){return l.getCurrent()},this.stem=function(){var r,n,u,d,c=l.cursor;return function(){var r,n=l.cursor+3;if(i=l.limit,0<=n||n<=l.limit){for(e=n;;){if(r=l.cursor,l.in_grouping(a,97,248)){l.cursor=r;break}if(r>=l.limit)return;l.cursor=r+1}for(;!l.out_grouping(a,97,248);){if(l.cursor>=l.limit)return;l.cursor++}(i=l.cursor)<e&&(i=e)}}(),l.limit_backward=c,l.cursor=l.limit,function(){var e,r,n;if(l.cursor>=i&&(r=l.limit_backward,l.limit_backward=i,l.ket=l.cursor,e=l.find_among_b(t,29),l.limit_backward=r,e))switch(l.bra=l.cursor,e){case 1:l.slice_del();break;case 2:n=l.limit-l.cursor,l.in_grouping_b(m,98,122)?l.slice_del():(l.cursor=l.limit-n,l.eq_s_b(1,"k")&&l.out_grouping_b(a,97,248)&&l.slice_del());break;case 3:l.slice_from("er")}}(),l.cursor=l.limit,n=l.limit-l.cursor,l.cursor>=i&&(r=l.limit_backward,l.limit_backward=i,l.ket=l.cursor,l.find_among_b(o,2)?(l.bra=l.cursor,l.limit_backward=r,l.cursor=l.limit-n,l.cursor>l.limit_backward&&(l.cursor--,l.bra=l.cursor,l.slice_del())):l.limit_backward=r),l.cursor=l.limit,l.cursor>=i&&(d=l.limit_backward,l.limit_backward=i,l.ket=l.cursor,(u=l.find_among_b(s,11))?(l.bra=l.cursor,l.limit_backward=d,1==u&&l.slice_del()):l.limit_backward=d),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}}); |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@
@@ -0,0 +1 @@
|
||||
!function(r,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(r.lunr)}(this,function(){return function(r){r.stemmerSupport={Among:function(r,t,i,s){if(this.toCharArray=function(r){for(var t=r.length,i=new Array(t),s=0;s<t;s++)i[s]=r.charCodeAt(s);return i},!r&&""!=r||!t&&0!=t||!i)throw"Bad Among initialisation: s:"+r+", substring_i: "+t+", result: "+i;this.s_size=r.length,this.s=this.toCharArray(r),this.substring_i=t,this.result=i,this.method=s},SnowballProgram:function(){var r;return{bra:0,ket:0,limit:0,cursor:0,limit_backward:0,setCurrent:function(t){r=t,this.cursor=0,this.limit=t.length,this.limit_backward=0,this.bra=this.cursor,this.ket=this.limit},getCurrent:function(){var t=r;return r=null,t},in_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e<=s&&e>=i&&t[(e-=i)>>3]&1<<(7&e))return this.cursor++,!0}return!1},in_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e<=s&&e>=i&&t[(e-=i)>>3]&1<<(7&e))return this.cursor--,!0}return!1},out_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e>s||e<i)return this.cursor++,!0;if(!(t[(e-=i)>>3]&1<<(7&e)))return this.cursor++,!0}return!1},out_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e>s||e<i)return this.cursor--,!0;if(!(t[(e-=i)>>3]&1<<(7&e)))return this.cursor--,!0}return!1},eq_s:function(t,i){if(this.limit-this.cursor<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor+s)!=i.charCodeAt(s))return!1;return this.cursor+=t,!0},eq_s_b:function(t,i){if(this.cursor-this.limit_backward<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor-t+s)!=i.charCodeAt(s))return!1;return this.cursor-=t,!0},find_among:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=t[a],m=l;m<_.s_size;m++){if(n+l==u){f=-1;break}if(f=r.charCodeAt(n+l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){if(o>=(_=t[s]).s_size){if(this.cursor=n+_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n+_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},find_among_b:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit_backward,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=(m=t[a]).s_size-1-l;_>=0;_--){if(n-l==u){f=-1;break}if(f=r.charCodeAt(n-1-l)-m.s[_])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var m;if(o>=(m=t[s]).s_size){if(this.cursor=n-m.s_size,!m.method)return m.result;var b=m.method();if(this.cursor=n-m.s_size,b)return m.result}if((s=m.substring_i)<0)return 0}},replace_s:function(t,i,s){var e=s.length-(i-t),n=r.substring(0,t),u=r.substring(i);return r=n+s+u,this.limit+=e,this.cursor>=i?this.cursor+=e:this.cursor>t&&(this.cursor=t),e},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>r.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){var s=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=s),r<=this.ket&&(this.ket+=s)},slice_to:function(){return this.slice_check(),r.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return"function"==typeof r.update?r.update(function(r){return r.replace(t,"").replace(i,"")}):r.replace(t,"").replace(i,"")}}}}}); |
@ -0,0 +1 @@
@@ -0,0 +1 @@
|
||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,n,t;e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=(r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,t=new function(){var e,t,i=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],s=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],a=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],o=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],u=[119,127,149],m=new n;this.setCurrent=function(e){m.setCurrent(e)},this.getCurrent=function(){return m.getCurrent()},this.stem=function(){var r,n=m.cursor;return function(){var r,n=m.cursor+3;if(t=m.limit,0<=n||n<=m.limit){for(e=n;;){if(r=m.cursor,m.in_grouping(o,97,246)){m.cursor=r;break}if(m.cursor=r,m.cursor>=m.limit)return;m.cursor++}for(;!m.out_grouping(o,97,246);){if(m.cursor>=m.limit)return;m.cursor++}(t=m.cursor)<e&&(t=e)}}(),m.limit_backward=n,m.cursor=m.limit,function(){var e,r=m.limit_backward;if(m.cursor>=t&&(m.limit_backward=t,m.cursor=m.limit,m.ket=m.cursor,e=m.find_among_b(i,37),m.limit_backward=r,e))switch(m.bra=m.cursor,e){case 1:m.slice_del();break;case 2:m.in_grouping_b(u,98,121)&&m.slice_del()}}(),m.cursor=m.limit,r=m.limit_backward,m.cursor>=t&&(m.limit_backward=t,m.cursor=m.limit,m.find_among_b(s,7)&&(m.cursor=m.limit,m.ket=m.cursor,m.cursor>m.limit_backward&&(m.bra=--m.cursor,m.slice_del())),m.limit_backward=r),m.cursor=m.limit,function(){var e,r;if(m.cursor>=t){if(r=m.limit_backward,m.limit_backward=t,m.cursor=m.limit,m.ket=m.cursor,e=m.find_among_b(a,5))switch(m.bra=m.cursor,e){case 1:m.slice_del();break;case 2:m.slice_from("lös");break;case 3:m.slice_from("full")}m.limit_backward=r}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return t.setCurrent(e),t.stem(),t.getCurrent()}):(t.setCurrent(e),t.stem(),t.getCurrent())}),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}}); |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,17 +0,0 @@
@@ -1,17 +0,0 @@
|
||||
SHELL=/bin/bash |
||||
|
||||
ifeq ($(shell echo ${POD_CHARLESREID1_DIR}),) |
||||
$(error Environment variable POD_CHARLESREID1_DIR not defined. Please run "source environment" in the repo root directory before running make commands) |
||||
endif |
||||
|
||||
ifeq ($(shell test -d ${POD_CHARLESREID1_DIR} || echo "nope"), nope) |
||||
$(error Environment variable POD_CHARLESREID1_DIR points to a non-existent directory) |
||||
endif |
||||
|
||||
ifeq ($(shell which python3),) |
||||
$(error Please install python3) |
||||
endif |
||||
|
||||
ifeq ($(shell which aws),) |
||||
$(error Please install aws-cli) |
||||
endif |
@ -1,34 +0,0 @@
@@ -1,34 +0,0 @@
|
||||
# d-gitea |
||||
|
||||
This directory contains files for the gitea docker container |
||||
in the charlesreid1 docker pod. |
||||
|
||||
See [pod-charlesreid1](https://git.charlesreid1.com/docker/pod-charlesreid1). |
||||
|
||||
## Custom Directory |
||||
|
||||
The custom directory contains the gitea configuration file, plus any other |
||||
custom files Gitea might need. |
||||
|
||||
The `custom` directory is bind mounted to `/data/gitea` inside the container. |
||||
|
||||
## Data Directory |
||||
|
||||
The data directory contains any instance-specific gitea data. |
||||
|
||||
The data directory is bind-mounted to `/app/gitea/data` in the container. |
||||
|
||||
## Repository Drive |
||||
|
||||
Gitea stores all of its repositories in a separate drive that is at |
||||
`/gitea_repositories` on the host machine. |
||||
|
||||
The gitea repositories drive is bind-mounted to `/data/git/repositories` in the container. |
||||
|
||||
### Rendering app.ini Template |
||||
|
||||
The gitea configuration file is located at `custom/conf/app.ini`. |
||||
|
||||
The app.ini configuration file is not provided, only a template is provided. |
||||
Use the top-level pod-charlesreid1 Makefile and scripts to render templates. |
||||
Use the top-level environment file to set variable values. |
@ -1,106 +0,0 @@
@@ -1,106 +0,0 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||||
;; My Amazing Gitea Config File |
||||
;; |
||||
;; charles reid |
||||
;; march 2017 |
||||
;; https://github.com/go-gitea/gitea/blob/master/conf/app.ini |
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||||
|
||||
APP_NAME = {{ pod_charlesreid1_gitea_app_name }} |
||||
RUN_USER = git |
||||
RUN_MODE = prod |
||||
|
||||
[ui] |
||||
DEFAULT_THEME = arc-green |
||||
|
||||
[database] |
||||
DB_TYPE = sqlite3 |
||||
HOST = |
||||
NAME = |
||||
USER = |
||||
PASSWD = |
||||
SSL_MODE = disable |
||||
PATH = /data/gitea/gitea.db |
||||
|
||||
[repository] |
||||
ROOT = /data/git/repositories |
||||
PREFERRED_LICENSES = MIT License |
||||
|
||||
; This gets rid of the HTTP option to check out repos... |
||||
DISABLE_HTTP_GIT = false |
||||
|
||||
[server] |
||||
PROTOCOL = http |
||||
DOMAIN = git.{{ pod_charlesreid1_server_name }} |
||||
#CERT_FILE = /www/gitea/certs/cert.pem |
||||
#KEY_FILE = /www/gitea/certs/key.pem |
||||
SSH_DOMAIN = git.{{ pod_charlesreid1_server_name }} |
||||
HTTP_PORT = 3000 |
||||
HTTP_ADDR = 0.0.0.0 |
||||
ROOT_URL = https://git.{{ pod_charlesreid1_server_name }} |
||||
;ROOT_URL = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s/ |
||||
DISABLE_SSH = false |
||||
; port to display in clone url: |
||||
;SSH_PORT = 222 |
||||
; port for built-in ssh server to listen on: |
||||
SSH_LISTEN_PORT = 22 |
||||
OFFLINE_MODE = false |
||||
|
||||
; Upper level of template and static file path |
||||
; default is the path where Gitea is executed |
||||
;;;;STATIC_ROOT_PATH = /www/gitea/static |
||||
[mailer] |
||||
ENABLED = false |
||||
|
||||
[service] |
||||
REGISTER_EMAIL_CONFIRM = false |
||||
ENABLE_NOTIFY_MAIL = false |
||||
DISABLE_REGISTRATION = true |
||||
ENABLE_CAPTCHA = false |
||||
REQUIRE_SIGNIN_VIEW = false |
||||
|
||||
[picture] |
||||
DISABLE_GRAVATAR = true |
||||
ENABLE_FEDERATED_AVATAR = false |
||||
AVATAR_UPLOAD_PATH = /data/gitea/avatars |
||||
|
||||
[session] |
||||
PROVIDER = file |
||||
|
||||
[log] |
||||
MODE = file |
||||
; Either "Trace", "Debug", "Info", "Warn", "Error", "Critical", default is "Trace" |
||||
LEVEL = Info |
||||
ROOT_PATH = /data/gitea/log |
||||
|
||||
; For "file" mode only |
||||
[log.file] |
||||
LEVEL = |
||||
; This enables automated log rotate(switch of following options), default is true |
||||
LOG_ROTATE = true |
||||
; Max line number of single file, default is 1000000 |
||||
MAX_LINES = 1000000 |
||||
; Max size shift of single file, default is 28 means 1 << 28, 256MB |
||||
MAX_SIZE_SHIFT = 28 |
||||
; Segment log daily, default is true |
||||
DAILY_ROTATE = true |
||||
; Expired days of log file(delete after max days), default is 7 |
||||
MAX_DAYS = 7 |
||||
|
||||
[cron.archive_cleanup] |
||||
ENABLED = false |
||||
|
||||
[security] |
||||
INSTALL_LOCK = true |
||||
SECRET_KEY = {{ pod_charlesreid1_gitea_secretkey }} |
||||
MIN_PASSWORD_LENGTH = 6 |
||||
INTERNAL_TOKEN = {{ pod_charlesreid1_gitea_internaltoken }} |
||||
|
||||
[other] |
||||
SHOW_FOOTER_BRANDING = false |
||||
; Show version information about Gitea and Go in the footer |
||||
SHOW_FOOTER_VERSION = false |
||||
; Show time of template execution in the footer |
||||
SHOW_FOOTER_TEMPLATE_LOAD_TIME = false |
||||
|
||||
|
@ -1 +0,0 @@
@@ -1 +0,0 @@
|
||||
<h2>hallo werld dis is de geeeeeet tea</h2> |
@ -1,3 +0,0 @@
@@ -1,3 +0,0 @@
|
||||
<!-- |
||||
<a class="item" href="{{AppSubUrl}}/hello.html">Hello World</a> |
||||
--> |
@ -1,3 +0,0 @@
@@ -1,3 +0,0 @@
|
||||
{{template "base/head" .}} |
||||
<meta http-equiv="Refresh" content="0; url=/explore/repos" /> |
||||
{{template "base/footer" .}} |
@ -1,63 +0,0 @@
@@ -1,63 +0,0 @@
|
||||
FROM mediawiki:1.34 |
||||
|
||||
EXPOSE 8989 |
||||
|
||||
VOLUME ["/var/www/html"] |
||||
|
||||
# Install ImageMagick |
||||
# and math stuff mentioned by Math extension readme |
||||
RUN apt-get update && \ |
||||
apt-get install -y build-essential \ |
||||
dvipng \ |
||||
ocaml \ |
||||
ghostscript \ |
||||
imagemagick \ |
||||
texlive-latex-base \ |
||||
texlive-latex-extra \ |
||||
texlive-fonts-recommended \ |
||||
texlive-lang-greek \ |
||||
texlive-latex-recommended |
||||
|
||||
# Copy skins, config files, and other particulars into container |
||||
|
||||
# WARNING: DOCKER STUPIDITY AHEAD |
||||
# MediaWiki needs everything, everything, to be in one folder. |
||||
# Docker is totally incapable of mounting a file in a volume. |
||||
# I cannot update LocalSettings.php without clearing the cache. |
||||
# I cannot clear the cache without reinstalling all of latex. |
||||
# I can't bind-mount the skins dir, because then it's owned by root. |
||||
# I can't fix the fact that all bind-mounted dirs are owned by root, |
||||
# because I can only add commands in THIS DOCKERFILE. |
||||
# and when you run the commands in this dockerfile, |
||||
# YOU CANNOT SEE THE BIND-MOUNTED STUFF. |
||||
|
||||
# Extensions |
||||
COPY charlesreid1-config/mediawiki/extensions/EmbedVideo /var/www/html/extensions/EmbedVideo |
||||
COPY charlesreid1-config/mediawiki/extensions/Math /var/www/html/extensions/Math |
||||
COPY charlesreid1-config/mediawiki/extensions/ParserFunctions /var/www/html/extensions/ParserFunctions |
||||
COPY charlesreid1-config/mediawiki/extensions/SyntaxHighlight_GeSHi /var/www/html/extensions/SyntaxHighlight_GeSHi |
||||
RUN chown -R www-data:www-data /var/www/html/* |
||||
|
||||
# Skins |
||||
COPY charlesreid1-config/mediawiki/skins /var/www/html/skins |
||||
RUN chown -R www-data:www-data /var/www/html/skins |
||||
|
||||
# Settings |
||||
COPY charlesreid1-config/mediawiki/LocalSettings.php /var/www/html/LocalSettings.php |
||||
RUN chown -R www-data:www-data /var/www/html/LocalSettings* |
||||
RUN chmod 600 /var/www/html/LocalSettings.php |
||||
|
||||
# Apache conf file |
||||
COPY charlesreid1-config/apache/*.conf /etc/apache2/sites-enabled/ |
||||
RUN a2enmod rewrite |
||||
RUN service apache2 restart |
||||
|
||||
## make texvc |
||||
#CMD cd /var/www/html/extensions/Math && make && apache2-foreground |
||||
|
||||
# PHP conf file |
||||
# https://hub.docker.com/_/php/ |
||||
COPY php/php.ini /usr/local/etc/php/ |
||||
|
||||
# Start |
||||
CMD apache2-foreground |
@ -1,97 +0,0 @@
@@ -1,97 +0,0 @@
|
||||
# d-mediawiki |
||||
|
||||
This directory contains files used to run the MediaWiki container |
||||
for the charlesreid1.com wiki. The MediaWiki container consists of |
||||
a PHP-enabled Apache web server serving the MediaWiki application, |
||||
and storing data in a MySQL database (different container). |
||||
|
||||
See [pod-charlesreid1](https://git.charelsreid1.com/docker/pod-charlesreid1). |
||||
|
||||
## Directory Layout |
||||
|
||||
This directory contains `charlesreid1-config`, which has both |
||||
MediaWiki and Apache configuration files. |
||||
|
||||
## Creating Extensions Directory |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Summary |
||||
|
||||
This directory contains a Dockerfile that modifies the |
||||
official MediaWiki docker container. Before launching |
||||
the container, it specifies `/var/www/html` as a mounted volume, |
||||
and it copies `LocalSettings.php`, the MediaWiki config file, |
||||
from this repo into the container. |
||||
|
||||
See [d-mysql repo](https://charlesreid1.com:3000/docker/d-mysql). |
||||
|
||||
Also see [pod-charlesreid1](https://git.charlesreid1.com/docker/pod-charlesreid1.git) |
||||
for a working pod using this container. |
||||
|
||||
## Docker Compose |
||||
|
||||
To use this container as part of a pod, as with the charlesreid1.com wiki, |
||||
see [pod-charlesreid1-wiki](https://charlesreid1.com:3000/docker/pod-charlesreid1-wiki). |
||||
|
||||
## Troubleshooting |
||||
|
||||
If you are seeing 404s on every page you try, it may be because |
||||
your MediaWiki config file is set to redirect you to `/wiki/Main_Page` |
||||
but your web server is not set up to handle it. |
||||
|
||||
See [this lin](https://www.mediawiki.org/wiki/Manual:Short_URL) |
||||
and the guide for [apache](https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Short_URL/Apache) |
||||
and [nginx](https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Short_URL/Nginx). |
||||
|
||||
|
||||
## Updating Settings |
||||
|
||||
The LocalSettings.php file must be copied into the |
||||
container, because we will end up bind-mounting the |
||||
entire MediaWiki directory when the container is run |
||||
and we can't bind-mount a file inside a bind-mounted |
||||
directory. |
||||
|
||||
Thus, to update LocalSettings.php, skins, or extensions, |
||||
you will need to re-make the Docker container. |
||||
Use the make rules to remake the Docker container: |
||||
|
||||
``` |
||||
make clean |
||||
make build |
||||
make run |
||||
``` |
||||
|
||||
## Submodule |
||||
|
||||
The submodule `charlesreid1-config/` |
||||
contains configuration files for both |
||||
MediaWiki and Apache. |
||||
|
||||
See the [wiki/charlesreid1-config](https://git.charlesreid1.com/wiki/charlesreid1-config) |
||||
repo for details. |
||||
|
||||
To clone the submodule when you clone the repo, |
||||
include the `--recursive` flag: |
||||
|
||||
``` |
||||
git clone --recursive https://git.charlesreid1.com/docker/d-mediawiki.git |
||||
``` |
||||
|
||||
To check out the submodule after a shallow clone: |
||||
|
||||
``` |
||||
git submodule init |
||||
# or |
||||
git submodule update --init |
||||
``` |
||||
|
||||
To fetch changes to the submodule from the submodule's remote: |
||||
|
||||
``` |
||||
git submodule update --remote |
||||
``` |
||||
|
@ -1,30 +0,0 @@
@@ -1,30 +0,0 @@
|
||||
To update the MediaWiki skin: |
||||
|
||||
- See the long angry rant in the Dockerfile |
||||
- You have to rebuild the whole container. Yup, stupid. |
||||
- Rebuild the MW container while the docker pod is still running (won't effect the docker pod) |
||||
- When finished rebuilding the MW container, restart the docker pod. |
||||
|
||||
``` |
||||
# switch to main pod directory |
||||
cd ../ |
||||
|
||||
# rebuild all containers |
||||
docker-compose build |
||||
|
||||
# stop and start the pod |
||||
sudo service pod-charlesreid1 stop |
||||
sudo service pod-charlesreid1 start |
||||
``` |
||||
|
||||
To verify that the skin has correcty been installed, you can check |
||||
the skin file inside the container. First, get a shell in the container: |
||||
|
||||
``` |
||||
docker exec -it stormy_mw /bin/bash |
||||
``` |
||||
|
||||
Once inside the container, the main web directory is `/var/www/html/`, |
||||
so the skins should be in `/var/www/html/skins/`. You can use `cat` to |
||||
print the file to the screen and verify it is correct. |
||||
|
@ -1,11 +0,0 @@
@@ -1,11 +0,0 @@
|
||||
# charlesreid1-config |
||||
|
||||
Config and other site-specific files |
||||
for the charlesreid1.com wiki. |
||||
|
||||
The apache directory contains apache config files |
||||
for the apache server runing mediawiki. |
||||
|
||||
The mediawiki directory contains mediawiki |
||||
configuration files. |
||||
|
@ -1 +0,0 @@
@@ -1 +0,0 @@
|
||||
charlesreid1.wiki.conf |
@ -1,65 +0,0 @@
@@ -1,65 +0,0 @@
|
||||
ServerName {{ pod_charlesreid1_server_name }} |
||||
|
||||
Listen 8989 |
||||
|
||||
<VirtualHost *:8989> |
||||
# nginx reverse proxy |
||||
# talks to apache via 127.0.0.1 |
||||
# on port 8989 |
||||
|
||||
ServerAlias www.{{ pod_charlesreid1_server_name }} |
||||
|
||||
LogLevel warn |
||||
ServerAdmin {{ pod_charlesreid1_mediawiki_admin_email }} |
||||
DirectoryIndex index.html index.cgi index.php |
||||
|
||||
|
||||
ErrorLog ${APACHE_LOG_DIR}/error.log |
||||
CustomLog ${APACHE_LOG_DIR}/access.log combined |
||||
|
||||
|
||||
|
||||
AddHandler php5-script php |
||||
# PHP module settings: |
||||
<IfModule php5_module> |
||||
|
||||
# Add php type handler |
||||
AddType text/html php |
||||
|
||||
# Make index.php a default file |
||||
<IfModule dir_module> |
||||
DirectoryIndex index.html index.php |
||||
</IfModule> |
||||
|
||||
</IfModule> |
||||
|
||||
|
||||
|
||||
# ================= |
||||
# wiki |
||||
|
||||
Alias /wiki /var/www/html/index.php |
||||
Alias /w /var/www/html |
||||
|
||||
<Directory /var/www/html> |
||||
# |
||||
# http://www.mediawiki.org/wiki/Manual:Short_URL/Apache |
||||
# |
||||
|
||||
# Enable the rewrite engine |
||||
RewriteEngine On |
||||
|
||||
# Short url for wiki pages |
||||
RewriteRule ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/w/index.php [L] |
||||
|
||||
Options FollowSymLinks |
||||
AllowOverride None |
||||
Require all granted |
||||
|
||||
### # Rewrite / to main page |
||||
### RewriteRule ^/*$ %{DOCUMENT_ROOT}/w/index.php [L] |
||||
</Directory> |
||||
|
||||
|
||||
</VirtualHost> |
||||
|
@ -1,2 +0,0 @@
@@ -1,2 +0,0 @@
|
||||
LocalSettings.php |
||||
extensions |
@ -1,243 +0,0 @@
@@ -1,243 +0,0 @@
|
||||
<?php |
||||
$wgSitename = "charlesreid1"; |
||||
$wgMetaNamespace = "Charlesreid1"; |
||||
|
||||
# from http://www.mediawiki.org/wiki/Manual:Short_URL#Recommended_how-to_guide_.28setup_used_on_Wikipedia.29 |
||||
$wgScriptPath = "/w"; # Path to the actual files. This should already be there |
||||
$wgArticlePath = "/wiki/$1"; # Virtual path. This directory MUST be different from the one used in $wgScriptPath |
||||
$wgUsePathInfo = true; # Enable use of pretty URLs |
||||
|
||||
# Protect against web entry |
||||
if ( !defined( 'MEDIAWIKI' ) ) { |
||||
exit; |
||||
} |
||||
|
||||
## The protocol and server name to use in fully-qualified URLs |
||||
$wgServer = 'https://{{ pod_charlesreid1_server_name }}'; |
||||
$wgCanonicalServer = 'https://{{ pod_charlesreid1_server_name }}'; |
||||
|
||||
## The URL path to static resources (images, scripts, etc.) |
||||
$wgStylePath = "$wgScriptPath/skins"; |
||||
$wgResourceBasePath = $wgScriptPath; |
||||
|
||||
# The URL path to the logo. Make sure you change this from the default, |
||||
# or else you'll overwrite your logo when you upgrade! |
||||
$wgLogo = "$wgResourceBasePath/resources/assets/wiki.png"; |
||||
|
||||
# UPO means: this is also a user preference option |
||||
$wgEnableEmail = true; |
||||
$wgEmergencyContact = "charles@charlesreid1.com"; |
||||
$wgPasswordSender = "charles@charlesreid1.com"; |
||||
$wgEnableUserEmail = true; # UPO |
||||
$wgEnotifUserTalk = false; # UPO |
||||
$wgEnotifWatchlist = false; # UPO |
||||
$wgEmailAuthentication = true; |
||||
|
||||
# Database settings |
||||
$wgDBtype = "mysql"; |
||||
$wgDBserver = getenv('MYSQL_HOST'); |
||||
$wgDBname = getenv('MYSQL_DATABASE'); |
||||
$wgDBuser = getenv('MYSQL_USER'); |
||||
$wgDBpassword = getenv('MYSQL_PASSWORD'); |
||||
|
||||
# MySQL specific settings |
||||
$wgDBprefix = ""; |
||||
$wgDBTableOptions = "ENGINE=InnoDB, DEFAULT CHARSET=binary"; |
||||
$wgDBmysql5 = true; |
||||
|
||||
# Shared memory settings |
||||
$wgMainCacheType = CACHE_ACCEL; |
||||
$wgMemCachedServers = []; |
||||
|
||||
# To enable image uploads, make sure the 'images' directory |
||||
# is writable, then set this to true: |
||||
$wgEnableUploads = true; |
||||
$wgMaxUploadSize = 1024*1024*100; # 100 MB |
||||
# also set in php.ini |
||||
|
||||
$wgUseImageMagick = true; |
||||
$wgImageMagickConvertCommand = "/usr/bin/convert"; |
||||
|
||||
# InstantCommons allows wiki to use images from https://commons.wikimedia.org |
||||
$wgUseInstantCommons = false; |
||||
|
||||
# Allow specific file extensions |
||||
$wgStrictFileExtensions = false; |
||||
$wgFileExtensions[] = 'pdf'; |
||||
$wgFileExtensions[] = 'svg'; |
||||
$wgFileExtensions[] = 'mm'; |
||||
$wgFileExtensions[] = 'png'; |
||||
$wgFileExtensions[] = 'jpg'; |
||||
$wgFileExtensions[] = 'JPG'; |
||||
$wgFileExtensions[] = 'jpeg'; |
||||
$wgFileExtensions[] = 'py'; |
||||
|
||||
# Allow any file extensions, but print a warning if not in $wgFileExtensions[] |
||||
$wgCheckFileExtensions = false; |
||||
|
||||
# do not send pingback to https://www.mediawiki.org |
||||
$wgPingback = false; |
||||
|
||||
# If you use ImageMagick (or any other shell command) on a |
||||
# Linux server, this will need to be set to the name of an |
||||
# available UTF-8 locale |
||||
$wgShellLocale = "en_US.utf8"; |
||||
|
||||
# If you have the appropriate support software installed |
||||
# you can enable inline LaTeX equations: |
||||
$wgUseTeX = true; |
||||
$wgTexvc = "$IP/extensions/Math/math/texvc"; |
||||
#$wgTexvc = '/usr/bin/texvc'; |
||||
|
||||
# Set MathML as default rendering option |
||||
$wgDefaultUserOptions['math'] = 'mathml'; |
||||
$wgMathFullRestbaseURL = 'https://en.wikipedia.org/api/rest_'; |
||||
$wgMathMathMLUrl = 'https://mathoid-beta.wmflabs.org/'; |
||||
|
||||
# Site language code, should be one of the list in ./languages/data/Names.php |
||||
$wgLanguageCode = "en"; |
||||
|
||||
$wgSecretKey = getenv('MEDIAWIKI_SECRETKEY'); |
||||
|
||||
# Changing this will log out all existing sessions. |
||||
$wgAuthenticationTokenVersion = "1"; |
||||
|
||||
# Site upgrade key. Must be set to a string (default provided) to turn on the |
||||
# web installer while LocalSettings.php is in place |
||||
$wgUpgradeKey = "984c1d9858dabc27"; |
||||
|
||||
# No license info |
||||
$wgRightsPage = ""; |
||||
$wgRightsUrl = ""; |
||||
$wgRightsText = ""; |
||||
$wgRightsIcon = ""; |
||||
|
||||
# Alternative: |
||||
$wgEnableCreativeCommonsRdf = true; |
||||
$wgRightsPage = ""; |
||||
$wgRightsUrl = "http://creativecommons.org/licenses/by-nc-nd/3.0/us/"; |
||||
$wgRightsText = "Attribution-NonCommercial-NoDerivs 3.0 United States"; |
||||
$wgRightsIcon = "/w/skins/charlesmartinreid/cc.png"; |
||||
|
||||
# Path to the GNU diff3 utility. Used for conflict resolution. |
||||
$wgDiff3 = "/usr/bin/diff3"; |
||||
|
||||
# Boostrap2 skin: |
||||
wfLoadSkin( 'Bootstrap2' ); |
||||
require_once "$IP/skins/Bootstrap2/Bootstrap2.php"; |
||||
$wgDefaultSkin = 'Bootstrap2'; |
||||
$wgValidSkinNames['bootstrap2'] = 'Bootstrap2'; |
||||
|
||||
# Change to true for debugging |
||||
$wgShowExceptionDetails=false; |
||||
|
||||
# When you make changes to this configuration file, this will make |
||||
# sure that cached pages are cleared. |
||||
session_save_path("tmp"); |
||||
$wgCacheEpoch = max( $wgCacheEpoch, gmdate( 'YmdHis', @filemtime( __FILE__ ) ) ); |
||||
|
||||
############################################################ |
||||
############# Charles-Modified Settings #################### |
||||
|
||||
# Allow external images (to do this, simply insert the image's URL) |
||||
# http://url.for/some/image.png |
||||
# But these cannot be resized. |
||||
$wgAllowExternalImages = true; |
||||
|
||||
# Use ImageMagick |
||||
$wgUseImageMagic=true; |
||||
|
||||
# $wgAllowDisplayTitle - Allow the magic word { { DISPLAYTITLE: } } to override the title of a page. |
||||
$wgAllowdisplayTitle=true; |
||||
|
||||
# Log IP addresses in the recentchanges table. |
||||
$wgPutIPinRC=true; |
||||
|
||||
# Getting some weird "Error creating thumbnail: Invalid thumbnail parameters" messages w/ thumbnail |
||||
# http://www.gossamer-threads.com/lists/wiki/mediawiki/169439 |
||||
$wgMaxImageArea=64000000; |
||||
$wgMaxShellMemory=0; |
||||
|
||||
$wgFavicon="$wgScriptPath/favicon.ico"; |
||||
|
||||
###################### |
||||
# Edit permissions |
||||
|
||||
# only admin can edit |
||||
$wgGroupPermissions['*']['edit'] = false; |
||||
$wgGroupPermissions['user']['edit'] = false; |
||||
$wgGroupPermissions['sysop']['edit'] = true; |
||||
|
||||
# only admin can register new accounts |
||||
$wgGroupPermissions['*']['createaccount'] = false; |
||||
$wgGroupPermissions['user']['createaccount'] = false; |
||||
$wgGroupPermissions['sysop']['createaccount'] = true; |
||||
|
||||
# only admin can upload |
||||
$wgGroupPermissions['*']['upload'] = false; |
||||
$wgGroupPermissions['user']['upload'] = false; |
||||
$wgGroupPermissions['sysop']['upload'] = true; |
||||
|
||||
$wgGroupPermissions['*']['reupload'] = false; |
||||
$wgGroupPermissions['user']['reupload'] = false; |
||||
$wgGroupPermissions['sysop']['reupload'] = true; |
||||
|
||||
############################### |
||||
## GeSHi syntax highlighting/code extension |
||||
# https://github.com/wikimedia/mediawiki-extensions-SyntaxHighlight_GeSHi.git |
||||
|
||||
wfLoadExtension( 'SyntaxHighlight_GeSHi' ); |
||||
$wgSyntaxHighlightDefaultLang = "text"; |
||||
|
||||
############################## |
||||
# Parser functions |
||||
# http://www.mediawiki.org/wiki/Extension:ParserFunctions |
||||
# http://en.wikipedia.org/wiki/Template_talk:Navbox |
||||
|
||||
wfLoadExtension( 'ParserFunctions' ); |
||||
|
||||
############################################## |
||||
# Embed videos extension |
||||
# https://github.com/HydraWiki/mediawiki-embedvideo/ |
||||
# require_once("$IP/extensions/EmbedVideo/EmbedVideo.php"); |
||||
|
||||
wfLoadExtension( 'EmbedVideo' ); |
||||
|
||||
########################################### |
||||
# Math extension |
||||
# https://github.com/wikimedia/mediawiki-extensions-Math.git |
||||
|
||||
require_once "$IP/extensions/Math/Math.php"; |
||||
|
||||
############################################# |
||||
# Fix cookies crap |
||||
|
||||
session_save_path("/tmp"); |
||||
|
||||
############################################## |
||||
# Secure login |
||||
|
||||
$wgServer = "https://{{ pod_charlesreid1_server_name }}"; |
||||
$wgSecureLogin = true; |
||||
|
||||
################################### |
||||
# Raw html |
||||
|
||||
$wgRawHtml = true; |
||||
|
||||
# but also keep things locked down |
||||
$wgUseRCPatrol=true; |
||||
$wgNewUserLog=true; |
||||
|
||||
################################## |
||||
# Paths |
||||
|
||||
$wgUploadPath = "$wgScriptPath/images"; |
||||
$wgUploadDirectory = "$IP/images"; |
||||
$wgMathPath = "$wgUploadPath/math"; |
||||
$wgMathDirectory = "$wgUploadDirectory/math"; |
||||
$wgTmpDirectory = "$wgUploadDirectory/tmp"; |
||||
$wgLatexCommand = "/usr/bin/latex"; |
||||
#$wgUploadBaseUrl = false; # not sure about why this one too... |
||||
$wgVerifyMimeType = false; |
||||
#$wgDebugLogFile = "/var/log/apache2/wiki.log"; |
@ -1,18 +0,0 @@
@@ -1,18 +0,0 @@
|
||||
# mediawiki config files |
||||
|
||||
In the `LocalSettings.php` file, which needs to have the MySQL |
||||
account credentials, we have the following: |
||||
|
||||
``` |
||||
## Database settings |
||||
$wgDBtype = "mysql"; |
||||
$wgDBserver = getenv('MYSQL_HOST'); |
||||
$wgDBname = getenv('MYSQL_DATABASE'); |
||||
$wgDBuser = getenv('MYSQL_USER'); |
||||
$wgDBpassword = getenv('MYSQL_PASSWORD'); |
||||
``` |
||||
|
||||
This information comes from the environment. In our case, |
||||
this comes from a MediaWiki docker container (see the |
||||
[d-mediawiki](https://git.charlesreid1.com/docker/d-mediawiki) |
||||
repo.) |
@ -1,43 +0,0 @@
@@ -1,43 +0,0 @@
|
||||
import os, re, sys |
||||
from jinja2 import Environment, FileSystemLoader, select_autoescape |
||||
|
||||
""" |
||||
Apply Default Values to Jinja Templates |
||||
|
||||
|
||||
This script applies default values to |
||||
mediawiki LocalSettings.php file. |
||||
|
||||
The configuration templates are useful for Ansible, |
||||
but this is useful for experiments/one-offs. |
||||
|
||||
All configuration files are for charlesreid1.com |
||||
docker pod, nginx, and realted infrastructure. |
||||
""" |
||||
|
||||
|
||||
# Where templates live |
||||
TEMPLATEDIR = '.' |
||||
|
||||
# Where rendered templates will go |
||||
OUTDIR = '.' |
||||
|
||||
# Should existing files be overwritten |
||||
OVERWRITE = True |
||||
|
||||
env = Environment(loader=FileSystemLoader('.')) |
||||
|
||||
tfile = 'LocalSettings.php.j2' |
||||
rfile = 'LocalSettings.php' |
||||
|
||||
content = env.get_template(tfile).render({ |
||||
"server_name_default" : "charlesreid1.com" |
||||
}) |
||||
|
||||
# Write to file |
||||
if os.path.exists(rfile) and not OVERWRITE: |
||||
raise Exception("Error: file %s already exists!"%(rfile)) |
||||
else: |
||||
with open(rfile,'w') as f: |
||||
f.write(content) |
||||
|
@ -1,329 +0,0 @@
@@ -1,329 +0,0 @@
|
||||
<?php |
||||
# This file was automatically generated by the MediaWiki 1.30.0 |
||||
# installer. If you make manual changes, please keep track in case you |
||||
# need to recreate them later. |
||||
# |
||||
# See includes/DefaultSettings.php for all configurable settings |
||||
# and their default values, but don't forget to make changes in _this_ |
||||
# file, not there. |
||||
# |
||||
# Further documentation for configuration settings may be found at: |
||||
# https://www.mediawiki.org/wiki/Manual:Configuration_settings |
||||
|
||||
# Protect against web entry |
||||
if ( !defined( 'MEDIAWIKI' ) ) { |
||||
exit; |
||||
} |
||||
|
||||
## Uncomment this to disable output compression |
||||
# $wgDisableOutputCompression = true; |
||||
|
||||
$wgSitename = "charlesreid1"; |
||||
$wgMetaNamespace = "Charlesreid1"; |
||||
|
||||
# from http://www.mediawiki.org/wiki/Manual:Short_URL#Recommended_how-to_guide_.28setup_used_on_Wikipedia.29 |
||||
$wgScriptPath = "/w"; # Path to the actual files. This should already be there |
||||
$wgArticlePath = "/wiki/$1"; # Virtual path. This directory MUST be different from the one used in $wgScriptPath |
||||
$wgUsePathInfo = true; # Enable use of pretty URLs |
||||
|
||||
|
||||
## The protocol and server name to use in fully-qualified URLs |
||||
$wgServer = 'https://'; |
||||
$wgCanonicalServer = 'https://'; |
||||
|
||||
## The URL path to static resources (images, scripts, etc.) |
||||
$wgStylePath = "$wgScriptPath/skins"; |
||||
$wgResourceBasePath = $wgScriptPath; |
||||
|
||||
## The URL path to the logo. Make sure you change this from the default, |
||||
## or else you'll overwrite your logo when you upgrade! |
||||
$wgLogo = "$wgResourceBasePath/resources/assets/wiki.png"; |
||||
|
||||
## UPO means: this is also a user preference option |
||||
|
||||
$wgEnableEmail = true; |
||||
$wgEnableUserEmail = true; # UPO |
||||
|
||||
$wgEmergencyContact = "charles@charlesreid1.com"; |
||||
$wgPasswordSender = "charles@charlesreid1.com"; |
||||
|
||||
$wgEnotifUserTalk = false; # UPO |
||||
$wgEnotifWatchlist = false; # UPO |
||||
$wgEmailAuthentication = true; |
||||
|
||||
## Database settings |
||||
$wgDBtype = "mysql"; |
||||
$wgDBserver = getenv('MYSQL_HOST'); |
||||
$wgDBname = getenv('MYSQL_DATABASE'); |
||||
$wgDBuser = getenv('MYSQL_USER'); |
||||
$wgDBpassword = getenv('MYSQL_PASSWORD'); |
||||
|
||||
# MySQL specific settings |
||||
$wgDBprefix = ""; |
||||
|
||||
# MySQL table options to use during installation or update |
||||
$wgDBTableOptions = "ENGINE=InnoDB, DEFAULT CHARSET=binary"; |
||||
|
||||
# Experimental charset support for MySQL 5.0. |
||||
//$wgDBmysql5 = false; // new version |
||||
$wgDBmysql5 = true; // true on charlesreid1.com |
||||
|
||||
## Shared memory settings |
||||
$wgMainCacheType = CACHE_ACCEL; |
||||
$wgMemCachedServers = []; |
||||
|
||||
## To enable image uploads, make sure the 'images' directory |
||||
## is writable, then set this to true: |
||||
$wgEnableUploads = true; |
||||
$wgMaxUploadSize = 1024*1024*100; # 100 MB |
||||
# also set in php.ini |
||||
|
||||
$wgUseImageMagick = true; |
||||
$wgImageMagickConvertCommand = "/usr/bin/convert"; |
||||
|
||||
# InstantCommons allows wiki to use images from https://commons.wikimedia.org |
||||
$wgUseInstantCommons = false; |
||||
|
||||
# Allow specific file extensions |
||||
$wgStrictFileExtensions = false; |
||||
$wgFileExtensions[] = 'pdf'; |
||||
$wgFileExtensions[] = 'svg'; |
||||
$wgFileExtensions[] = 'mm'; |
||||
$wgFileExtensions[] = 'png'; |
||||
$wgFileExtensions[] = 'jpg'; |
||||
$wgFileExtensions[] = 'JPG'; |
||||
$wgFileExtensions[] = 'jpeg'; |
||||
$wgFileExtensions[] = 'py'; |
||||
|
||||
# Allow any file extensions, |
||||
# but print a warning if its not |
||||
# in $wgFileExtensions[] |
||||
$wgCheckFileExtensions = false; |
||||
|
||||
# do not send pingback to https://www.mediawiki.org |
||||
$wgPingback = false; |
||||
|
||||
# If you use ImageMagick (or any other shell command) on a |
||||
# Linux server, this will need to be set to the name of an |
||||
# available UTF-8 locale |
||||
//$wgShellLocale = "C.UTF-8"; // modern |
||||
$wgShellLocale = "en_US.utf8"; // charlesreid1.com version |
||||
|
||||
## Set $wgCacheDirectory to a writable directory on the web server |
||||
## to make your wiki go slightly faster. The directory should not |
||||
## be publically accessible from the web. |
||||
#$wgCacheDirectory = "$IP/cache"; |
||||
|
||||
## If you have the appropriate support software installed |
||||
## you can enable inline LaTeX equations: |
||||
$wgUseTeX = true; |
||||
$wgTexvc = "$IP/extensions/Math/math/texvc"; |
||||
//$wgTexvc = '/usr/bin/texvc'; |
||||
|
||||
$wgDefaultUserOptions['math'] = 0; //Always render eqns as .pngs |
||||
|
||||
# Site language code, should be one of the list in ./languages/data/Names.php |
||||
$wgLanguageCode = "en"; |
||||
|
||||
$wgSecretKey = getenv('MEDIAWIKI_SECRETKEY'); |
||||
|
||||
# Changing this will log out all existing sessions. |
||||
$wgAuthenticationTokenVersion = "1"; |
||||
|
||||
# Site upgrade key. Must be set to a string (default provided) to turn on the |
||||
# web installer while LocalSettings.php is in place |
||||
$wgUpgradeKey = "984c1d9858dabc27"; |
||||
|
||||
## no license info |
||||
$wgRightsPage = ""; |
||||
$wgRightsUrl = ""; |
||||
$wgRightsText = ""; |
||||
$wgRightsIcon = ""; |
||||
|
||||
# Alternative: |
||||
$wgEnableCreativeCommonsRdf = true; |
||||
$wgRightsPage = ""; # Set to the title of a wiki page that describes your license/copyright |
||||
$wgRightsUrl = "http://creativecommons.org/licenses/by-nc-nd/3.0/us/"; |
||||
$wgRightsText = "Attribution-NonCommercial-NoDerivs 3.0 United States"; |
||||
$wgRightsIcon = "/w/skins/charlesmartinreid/cc.png"; |
||||
# $wgRightsCode = "[license_code]"; # Not yet used |
||||
# |
||||
|
||||
# Path to the GNU diff3 utility. Used for conflict resolution. |
||||
$wgDiff3 = "/usr/bin/diff3"; |
||||
|
||||
## Default skin: you can change the default skin. Use the internal symbolic |
||||
## names, ie 'vector', 'monobook': |
||||
|
||||
|
||||
|
||||
# Boostrap2 skin: |
||||
wfLoadSkin( 'Bootstrap2' ); |
||||
require_once "$IP/skins/Bootstrap2/Bootstrap2.php"; |
||||
$wgDefaultSkin = 'Bootstrap2'; |
||||
|
||||
$wgValidSkinNames['bootstrap2'] = 'Bootstrap2'; |
||||
|
||||
|
||||
$wgShowExceptionDetails=false; |
||||
//$wgShowExceptionDetails = true; |
||||
//$wgShowDBErrorBacktrace = true; |
||||
//$wgShowSQLErrors = true; |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
$wgDiff3 = "/usr/bin/diff3"; |
||||
|
||||
# When you make changes to this configuration file, this will make |
||||
# sure that cached pages are cleared. |
||||
session_save_path("tmp"); |
||||
$wgCacheEpoch = max( $wgCacheEpoch, gmdate( 'YmdHis', @filemtime( __FILE__ ) ) ); |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
############################################################ |
||||
############# Charles-Modified Settings #################### |
||||
|
||||
|
||||
# Allow external images: |
||||
$wgAllowExternalImages = true; |
||||
# to do this, simply insert the image's URL: |
||||
#http://url.for/some/image.png |
||||
# But these cannot be resized. It's better to just put your own version into the wiki |
||||
|
||||
# Use ImageMagick |
||||
$wgUseImageMagic=true; |
||||
|
||||
# $wgAllowDisplayTitle - Allow the magic word { { DISPLAYTITLE: } } to override the title of a page. |
||||
$wgAllowdisplayTitle=true; |
||||
|
||||
# $wgPutIPinRC - Log IP addresses in the recentchanges table. |
||||
$wgPutIPinRC=true; |
||||
|
||||
# Getting some weird "Error creating thumbnail: Invalid thumbnail parameters" messages w/ thumbnail |
||||
# http://www.gossamer-threads.com/lists/wiki/mediawiki/169439 |
||||
$wgMaxImageArea=64000000; |
||||
$wgMaxShellMemory=0; |
||||
# Also: |
||||
# http://www.ipbwiki.com/forums/index.php?showtopic=812 |
||||
|
||||
$wgFavicon="$wgScriptPath/favicon.ico"; |
||||
|
||||
|
||||
|
||||
###################### |
||||
# Edit permissions |
||||
|
||||
# only admin can edit |
||||
$wgGroupPermissions['*']['edit'] = false; |
||||
$wgGroupPermissions['user']['edit'] = false; |
||||
$wgGroupPermissions['sysop']['edit'] = true; |
||||
|
||||
# only admin can register new accounts |
||||
$wgGroupPermissions['*']['createaccount'] = false; |
||||
$wgGroupPermissions['user']['createaccount'] = false; |
||||
$wgGroupPermissions['sysop']['createaccount'] = true; |
||||
|
||||
# only admin can upload |
||||
$wgGroupPermissions['*']['upload'] = false; |
||||
$wgGroupPermissions['user']['upload'] = false; |
||||
$wgGroupPermissions['sysop']['upload'] = true; |
||||
|
||||
$wgGroupPermissions['*']['reupload'] = false; |
||||
$wgGroupPermissions['user']['reupload'] = false; |
||||
$wgGroupPermissions['sysop']['reupload'] = true; |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
############################### |
||||
## GeSHi syntax highlighting/code extension |
||||
# |
||||
# https://github.com/wikimedia/mediawiki-extensions-SyntaxHighlight_GeSHi.git |
||||
# |
||||
require_once("$IP/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.php"); |
||||
$wgSyntaxHighlightDefaultLang = "text"; |
||||
|
||||
|
||||
|
||||
############################## |
||||
# Parser functions |
||||
# |
||||
# http://www.mediawiki.org/wiki/Extension:ParserFunctions |
||||
# http://en.wikipedia.org/wiki/Template_talk:Navbox |
||||
require_once( "$IP/extensions/ParserFunctions/ParserFunctions.php" ); |
||||
|
||||
|
||||
|
||||
|
||||
############################################## |
||||
# Embed videos extension |
||||
# https://github.com/HydraWiki/mediawiki-embedvideo/ |
||||
#require_once("$IP/extensions/EmbedVideo/EmbedVideo.php"); |
||||
wfLoadExtension( 'EmbedVideo' ); |
||||
|
||||
|
||||
|
||||
########################################### |
||||
## Math extension |
||||
# |
||||
# https://github.com/wikimedia/mediawiki-extensions-Math.git |
||||
# |
||||
require_once "$IP/extensions/Math/Math.php"; |
||||
|
||||
|
||||
|
||||
############################################# |
||||
## Fix cookies crap |
||||
session_save_path("/tmp"); |
||||
|
||||
############################################## |
||||
#### secure login |
||||
$wgServer = "https://"; |
||||
$wgSecureLogin = true; |
||||
|
||||
################################### |
||||
##### raw html |
||||
$wgRawHtml = true; |
||||
|
||||
# but also keep things locked down |
||||
|
||||
$wgUseRCPatrol=true; |
||||
$wgNewUserLog=true; |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
############################################## |
||||
## Because adding a new extension for every dumb little thing you want to do is dumb |
||||
|
||||
$wgRawHtml = true; |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
$wgUploadPath = "$wgScriptPath/images"; |
||||
$wgUploadDirectory = "$IP/images"; |
||||
$wgMathPath = "$wgUploadPath/math"; |
||||
$wgMathDirectory = "$wgUploadDirectory/math"; |
||||
$wgTmpDirectory = "$wgUploadDirectory/tmp"; |
||||
$wgLatexCommand = "/usr/bin/latex"; |
||||
#$wgUploadBaseUrl = false; #not sure about why this one too... |
||||
$wgVerifyMimeType = false; |
||||
|
||||
|
||||
# log |
||||
$wgDebugLogFile = "/var/log/apache2/wiki.log"; |
||||
|
@ -1,452 +0,0 @@
@@ -1,452 +0,0 @@
|
||||
<?php |
||||
/** |
||||
* Bootstrap2 MediaWiki skin |
||||
* |
||||
* @file Bootstrap2.php |
||||
*/ |
||||
|
||||
if( !defined( 'MEDIAWIKI' ) ) |
||||
die( -1 ); |
||||
|
||||
/** |
||||
* Inherit main code from SkinTemplate, set the CSS and template filter. |
||||
*/ |
||||
class SkinBootstrap2 extends SkinTemplate { |
||||
/** Using Bootstrap2 */ |
||||
var $skinname = 'Bootstrap2', |
||||
$stylename = 'Bootstrap2', |
||||
// -------- Start --------- |
||||
// making this true, to match the Dash style |
||||
$useHeadElement = true, |
||||
//$useHeadElement = false, |
||||
// -------- End --------- |
||||
// cmr 05/08/2014 |
||||
$template = 'Bootstrap2Template'; |
||||
|
||||
function setupSkinUserCss( OutputPage $out ) { |
||||
global $wgHandheldStyle; |
||||
|
||||
parent::setupSkinUserCss( $out ); |
||||
|
||||
// Append to the default screen common & print styles... |
||||
$out->addStyle( 'Bootstrap2/IE50Fixes.css', 'screen', 'lt IE 5.5000' ); |
||||
$out->addStyle( 'Bootstrap2/IE55Fixes.css', 'screen', 'IE 5.5000' ); |
||||
$out->addStyle( 'Bootstrap2/IE60Fixes.css', 'screen', 'IE 6' ); |
||||
$out->addStyle( 'Bootstrap2/IE70Fixes.css', 'screen', 'IE 7' ); |
||||
|
||||
$out->addStyle( 'Bootstrap2/rtl.css', 'screen', '', 'rtl' ); |
||||
|
||||
|
||||
$out->addStyle('Bootstrap2/bootstrap.css' ); |
||||
$out->addStyle('Bootstrap2/slate.css' ); |
||||
$out->addStyle('Bootstrap2/main.css' ); |
||||
$out->addStyle('Bootstrap2/dox.css' ); |
||||
|
||||
$out->addStyle('Bootstrap2/css/font-awesome.css'); |
||||
//$out->addStyle('Bootstrap2/cmr-bootstrap-cyborg.css'); |
||||
//$out->addStyle('Bootstrap2/cmr-bootstrap-cyborg-wiki.css'); |
||||
// |
||||
//$out->addStyle('Bootstrap2/bootstrap-cyborg.css' ); |
||||
//$out->addStyle('Bootstrap2/bootstrap-responsive-cyborg.css'); |
||||
|
||||
//$out->addStyle( 'Bootstrap2/main.css', 'screen' ); |
||||
} |
||||
} |
||||
|
||||
class Bootstrap2Template extends QuickTemplate { |
||||
var $skin; |
||||
|
||||
/** |
||||
* Template filter callback for Bootstrap2 skin. |
||||
* Takes an associative array of data set from a SkinTemplate-based |
||||
* class, and a wrapper for MediaWiki's localization database, and |
||||
* outputs a formatted page. |
||||
* |
||||
* @access private |
||||
*/ |
||||
function execute() { |
||||
global $wgRequest; |
||||
|
||||
$this->skin = $skin = $this->data['skin']; |
||||
$action = $wgRequest->getText( 'action' ); |
||||
|
||||
// -------- Start ------------ |
||||
// Adding the following line makes Geshi work |
||||
$this->html( 'headelement' ); |
||||
// Left this out because the [edit] buttons were becoming right-aligned |
||||
// Got around that behavior by changing shared.css |
||||
// -------- End ------------ |
||||
// cmr 01-10-2014 |
||||
|
||||
|
||||
|
||||
///////////////////////////// |
||||
// begin custom |
||||
// bootstrap content |
||||
|
||||
$get_override = 'True'; |
||||
$url_array = explode('/',$_SERVER['REQUEST_URI']); |
||||
array_shift($url_array); // remove first value as it's empty |
||||
|
||||
$p = "wiki"; |
||||
|
||||
// path, inside container |
||||
include('/var/www/html/skins/Bootstrap2/navbar.php'); |
||||
|
||||
?> |
||||
<!-- favicon --> |
||||
<link rel="shortcut icon" href="/favicon.ico"> |
||||
|
||||
<div class="container"> |
||||
|
||||
<!-- Row: Navigation bar for wiki --> |
||||
<div class="row"> |
||||
<nav class="wiki navbar navbar-default"> |
||||
|
||||
<div class="container-fixed"> |
||||
<div class="navbar-header"> |
||||
<a href="/wiki/" class="navbar-brand"> |
||||
{{ pod_charlesreid1_server_name }} wiki |
||||
</a> |
||||
</div> |
||||
<div> |
||||
<ul class="wiki nav navbar-nav"> |
||||
<?php |
||||
|
||||
/* |
||||
// Print debug information |
||||
echo "\n"; |
||||
echo "<!--"; |
||||
echo "\n"; |
||||
echo print_r($this->data['content_actions']); |
||||
echo "\n"; |
||||
echo "~~~~~~~~~"; |
||||
echo "\n"; |
||||
foreach($this->data['content_actions'] as $key => $tab) { |
||||
echo $key; |
||||
echo "\n"; |
||||
//echo print_r($tab); |
||||
echo $tab['href']; |
||||
echo "\n"; |
||||
echo "\n"; |
||||
echo "\n"; |
||||
} |
||||
echo "\n"; |
||||
echo "-->"; |
||||
echo "\n"; |
||||
*/ |
||||
|
||||
echo "\n"; |
||||
foreach($this->data['content_actions'] as $key => $tab) { |
||||
|
||||
if( in_array($key, array('nstab-main','edit','history','viewsource','delete','move'))) { |
||||
|
||||
echo '<li class="wiki'; |
||||
if( $tab['class'] ) { |
||||
echo ' '; |
||||
echo $tab['class']; |
||||
} |
||||
echo '" id="' . Sanitizer::escapeId( "ca-$key" ) . '">'; |
||||
echo '<a href="'; |
||||
echo htmlspecialchars($tab['href']); |
||||
echo '">'; |
||||
echo $tab['text']; |
||||
echo "</a>"; |
||||
echo "</li>"; |
||||
//echo '>'.htmlspecialchars($tab['text']).'</a></li>'; |
||||
echo "\n"; |
||||
|
||||
} |
||||
|
||||
} ?> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
|
||||
</nav> |
||||
</div> |
||||
|
||||
|
||||
<!-- Row: Page content for wiki --> |
||||
<div class="row"> |
||||
<div class="span10 offset1"> |
||||
|
||||
<!-- |
||||
========================= |
||||
Begin MediaWiki content |
||||
========================= |
||||
--> |
||||
|
||||
<div class="mw_content"> |
||||
|
||||
<div id="content" <?php $this->html("specialpageattributes") ?>> |
||||
|
||||
<!-- page title --> |
||||
<div class="page-header"> |
||||
<h1 id="firstHeading" class="firstHeading"> |
||||
<?php $this->html('title') ?> |
||||
</h1> |
||||
</div><!--div page-header--> |
||||
|
||||
<!-- pre-article stuff --> |
||||
<div id="bodyContent"> |
||||
<h3 id="siteSub"><?php $this->msg('tagline') ?></h3> |
||||
<div id="contentSub"<?php $this->html('userlangattributes') ?>><?php $this->html('subtitle') ?> |
||||
</div> |
||||
<?php |
||||
if($this->data['undelete']) { ?> |
||||
<div id="contentSub2"><?php $this->html('undelete') ?></div> |
||||
<?php |
||||
} |
||||
if($this->data['newtalk'] ) { ?> |
||||
<div class="usermessage"><?php $this->html('newtalk') ?></div> |
||||
<?php |
||||
} |
||||
?> |
||||
|
||||
<!-- article --> |
||||
|
||||
<!-- begin mediawiki content --> |
||||
<?php $this->html('bodytext') ?> |
||||
|
||||
<?php |
||||
if($this->data['catlinks']) { |
||||
$this->html('catlinks'); |
||||
} ?> |
||||
</div><!-- end bodyContent --> |
||||
|
||||
</div><!--div special page attributes--> |
||||
|
||||
</div><!--div mw content--> |
||||
<!-- |
||||
========================= |
||||
End MediaWiki content |
||||
========================= |
||||
--> |
||||
|
||||
</div><!--div span10 --> |
||||
</div><!--row--> |
||||
|
||||
<!-- |
||||
========================================================== |
||||
====================== Begin Wiki Footer ================= |
||||
========================================================== |
||||
--> |
||||
|
||||
</div> |
||||
|
||||
<?php |
||||
include('/var/www/html/skins/Bootstrap2/footer.php'); |
||||
?> |
||||
|
||||
<?php |
||||
} // end of execute() method |
||||
|
||||
/*************************************************************************************************/ |
||||
function searchBox() { |
||||
global $wgUseTwoButtonsSearchForm; |
||||
?> |
||||
<div id="p-search" class="portlet"> |
||||
<div id="searchBody" class="pBody"> |
||||
<form class="navbar-search pull-left" action="<?php $this->text('wgScript') ?>" id="searchform"> |
||||
<input type='hidden' name="title" value="<?php $this->text('searchtitle') ?>"/> |
||||
<?php |
||||
echo Html::input( 'search', |
||||
isset( $this->data['search'] ) ? $this->data['search'] : '', 'search', |
||||
array( |
||||
'id' => 'searchInput', |
||||
'class' => 'search-query', |
||||
'title' => $this->skin->titleAttrib( 'search' ), |
||||
'accesskey' => $this->skin->accesskey( 'search' ) |
||||
) ); ?> |
||||
|
||||
<!-- |
||||
<input type='submit' name="go" class="searchButton" id="searchGoButton" value="<?php $this->msg('searcharticle') ?>"<?php echo $this->skin->tooltipAndAccesskey( 'search-go' ); ?> /><?php if ($wgUseTwoButtonsSearchForm) { ?> |
||||
--> |
||||
<input type='submit' name="fulltext" class="btn btn-large" id="mw-searchButton" value="<?php $this->msg('searchbutton') ?>"<?php echo $this->skin->tooltipAndAccesskey( 'search-fulltext' ); ?> /><?php } else { ?> |
||||
|
||||
<div><a href="<?php $this->text('searchaction') ?>" rel="search"><?php $this->msg('powersearch-legend') ?></a></div><?php } ?> |
||||
|
||||
</form> |
||||
</div> |
||||
</div> |
||||
<?php |
||||
} |
||||
|
||||
/*************************************************************************************************/ |
||||
function personalTools() { |
||||
?> |
||||
<ul class="nav nav-list"> |
||||
<li class="nav-header"><?php $this->msg('personaltools') ?></li> |
||||
<?php |
||||
foreach($this->data['personal_urls'] as $key => $item) { |
||||
if( strcmp($key,"userpage") == 0 |
||||
|| strcmp($key,"preferences") == 0 |
||||
|| strcmp($key,"logout") == 0 ) { ?> |
||||
<li> <a href="<?php |
||||
echo htmlspecialchars($item['href']) ?>"<?php echo $skin->tooltipAndAccesskey('pt-'.$key) ?><?php |
||||
if(!empty($item['class'])) { ?> class="<?php |
||||
echo htmlspecialchars($item['class']) ?>"<?php } ?>><?php |
||||
echo htmlspecialchars($item['text']) ?></a></li> |
||||
<?php |
||||
} else { |
||||
} |
||||
} |
||||
// put a log in button |
||||
?> |
||||
<li><a href="/wiki/Special:UserLogin">Log in</a></li> |
||||
<?php |
||||
} |
||||
|
||||
/*************************************************************************************************/ |
||||
function toolbox() { |
||||
?> |
||||
<!-- |
||||
<div class="portlet" id="p-tb"> |
||||
<div class="pBody"> |
||||
--> |
||||
<ul class="nav nav-list"> |
||||
<li class="nav-header"><?php $this->msg('toolbox') ?></li> |
||||
<?php |
||||
/* |
||||
if($this->data['notspecialpage']) { ?> |
||||
<li id="t-whatlinkshere"><a href="<?php |
||||
echo htmlspecialchars($this->data['nav_urls']['whatlinkshere']['href']) |
||||
?>"<?php echo $this->skin->tooltipAndAccesskey('t-whatlinkshere') ?>><?php $this->msg('whatlinkshere') ?></a></li> |
||||
<?php |
||||
if( $this->data['nav_urls']['recentchangeslinked'] ) { ?> |
||||
<li id="t-recentchangeslinked"><a href="<?php |
||||
echo htmlspecialchars($this->data['nav_urls']['recentchangeslinked']['href']) |
||||
?>"<?php echo $this->skin->tooltipAndAccesskey('t-recentchangeslinked') ?>><?php $this->msg('recentchangeslinked-toolbox') ?></a></li> |
||||
<?php } |
||||
|
||||
} |
||||
|
||||
if( isset( $this->data['nav_urls']['trackbacklink'] ) && $this->data['nav_urls']['trackbacklink'] ) { ?> |
||||
<li id="t-trackbacklink"><a href="<?php |
||||
echo htmlspecialchars($this->data['nav_urls']['trackbacklink']['href']) |
||||
?>"<?php echo $this->skin->tooltipAndAccesskey('t-trackbacklink') ?>><?php $this->msg('trackbacklink') ?></a></li> |
||||
<?php } |
||||
if($this->data['feeds']) { ?> |
||||
<li id="feedlinks"><?php foreach($this->data['feeds'] as $key => $feed) { |
||||
?><a id="<?php echo Sanitizer::escapeId( "feed-$key" ) ?>" href="<?php |
||||
echo htmlspecialchars($feed['href']) ?>" rel="alternate" type="application/<?php echo $key ?>+xml" class="feedlink"<?php echo $this->skin->tooltipAndAccesskey('feed-'.$key) ?>><?php echo htmlspecialchars($feed['text'])?></a> |
||||
<?php } ?></li><?php |
||||
} |
||||
*/ |
||||
|
||||
|
||||
|
||||
// Upload files, and list all files |
||||
|
||||
if($this->data['nav_urls']['upload']) { |
||||
?><li id="t-<?php echo 'upload'; ?>"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['upload']['href']) |
||||
?>" <?php echo $this->skin->tooltipAndAccesskey('t-upload') ?>><?php $this->msg('upload') ?></a></li> |
||||
<?php |
||||
} |
||||
|
||||
|
||||
|
||||
// Special pages, and list all pages |
||||
|
||||
if( $this->data['nav_urls']['specialpages'] ) { |
||||
?><li id="t-<?php echo 'specialpages'; ?>"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['specialpages']['href']) |
||||
?>" <?php echo $this->skin->tooltipAndAccesskey('t-specialpages') ?>><?php $this->msg('specialpages') ?></a></li> |
||||
<?php |
||||
$element_name = 'all_pages'; |
||||
$element_title = 'List All Pages'; |
||||
$element_href = "/wiki/Special:AllPages"; |
||||
$this->data['nav_urls'][$element_name]['href'] = $element_href; |
||||
?> |
||||
<li id="t-<?php echo $element_name; ?>"><a href="<?php echo htmlspecialchars( $this->data['nav_urls'][$element_name]['href'] ) |
||||
?>" title="<?php echo $element_title ?>"><?php echo $element_title; ?></a></li> |
||||
<?php |
||||
} |
||||
|
||||
|
||||
|
||||
/* |
||||
foreach( array('contributions', 'log', 'blockip', 'emailuser') as $special ) { |
||||
|
||||
if($this->data['nav_urls'][$special]) { |
||||
?><li id="t-<?php echo $special ?>"><a href="<?php echo htmlspecialchars($this->data['nav_urls'][$special]['href']) |
||||
?>"<?php echo $this->skin->tooltipAndAccesskey('t-'.$special) ?>><?php $this->msg($special) ?></a></li> |
||||
<?php } |
||||
} |
||||
*/ |
||||
|
||||
/* |
||||
if(!empty($this->data['nav_urls']['print']['href'])) { ?> |
||||
<li id="t-print"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['print']['href']) |
||||
?>" rel="alternate"<?php echo $this->skin->tooltipAndAccesskey('t-print') ?>><?php $this->msg('printableversion') ?></a></li><?php |
||||
} |
||||
*/ |
||||
|
||||
if(!empty($this->data['nav_urls']['permalink']['href'])) { ?> |
||||
<li id="t-permalink"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['permalink']['href']) |
||||
?>"<?php echo $this->skin->tooltipAndAccesskey('t-permalink') ?>><?php $this->msg('permalink') ?></a></li><?php |
||||
} elseif ($this->data['nav_urls']['permalink']['href'] === '') { ?> |
||||
<li id="t-ispermalink"<?php echo $this->skin->tooltip('t-ispermalink') ?>><?php $this->msg('permalink') ?></li><?php |
||||
} |
||||
|
||||
//wfRunHooks( 'BootstrapTemplateToolboxEnd', array( &$this ) ); |
||||
wfRunHooks( 'BootstrapTemplateToolboxEnd', array( &$this ) ); |
||||
?> |
||||
</ul> |
||||
<!-- |
||||
</div> |
||||
</div> |
||||
--> |
||||
<?php |
||||
} |
||||
|
||||
/*************************************************************************************************/ |
||||
function languageBox() { |
||||
if( $this->data['language_urls'] ) { |
||||
?> |
||||
<div id="p-lang" class="portlet"> |
||||
<h5<?php $this->html('userlangattributes') ?>><?php $this->msg('otherlanguages') ?></h5> |
||||
<div class="pBody"> |
||||
<ul> |
||||
<?php foreach($this->data['language_urls'] as $langlink) { ?> |
||||
<li class="<?php echo htmlspecialchars($langlink['class'])?>"><?php |
||||
?><a href="<?php echo htmlspecialchars($langlink['href']) ?>"><?php echo $langlink['text'] ?></a></li> |
||||
<?php } ?> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
<?php |
||||
} |
||||
} |
||||
|
||||
/*************************************************************************************************/ |
||||
function customBox( $bar, $cont ) { |
||||
?> |
||||
<!-- |
||||
<div class='generated-sidebar portlet' id='<?php echo Sanitizer::escapeId( "p-$bar" ) ?>'<?php echo $this->skin->tooltip('p-'.$bar) ?>> |
||||
<div class='pBody'> |
||||
--> |
||||
|
||||
<?php if ( is_array( $cont ) ) { ?> |
||||
<ul class="nav nav-list"> |
||||
<li class="nav-header"><?php $out = wfMsg( $bar ); if (wfEmptyMsg($bar, $out)) echo htmlspecialchars($bar); else echo htmlspecialchars($out); ?></li> |
||||
<?php foreach($cont as $key => $val) { ?> |
||||
<li id="<?php echo Sanitizer::escapeId($val['id']) ?>"<?php |
||||
if ( $val['active'] ) { ?> class="active" <?php } |
||||
?>><a href="<?php echo htmlspecialchars($val['href']) ?>"<?php echo $this->skin->tooltipAndAccesskey($val['id']) ?>><?php echo htmlspecialchars($val['text']) ?></a></li> |
||||
<?php } ?> |
||||
</ul> |
||||
<?php } else { |
||||
# allow raw HTML block to be defined by extensions |
||||
print $cont; |
||||
} |
||||
?> |
||||
<!-- |
||||
</div> |
||||
</div> |
||||
--> |
||||
<?php |
||||
} |
||||
} // end of class |
||||
|
||||
|
@ -1,339 +0,0 @@
@@ -1,339 +0,0 @@
|
||||
GNU GENERAL PUBLIC LICENSE |
||||
Version 2, June 1991 |
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc., |
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
Everyone is permitted to copy and distribute verbatim copies |
||||
of this license document, but changing it is not allowed. |
||||
|
||||
Preamble |
||||
|
||||
The licenses for most software are designed to take away your |
||||
freedom to share and change it. By contrast, the GNU General Public |
||||
License is intended to guarantee your freedom to share and change free |
||||
software--to make sure the software is free for all its users. This |
||||
General Public License applies to most of the Free Software |
||||
Foundation's software and to any other program whose authors commit to |
||||
using it. (Some other Free Software Foundation software is covered by |
||||
the GNU Lesser General Public License instead.) You can apply it to |
||||
your programs, too. |
||||
|
||||
When we speak of free software, we are referring to freedom, not |
||||
price. Our General Public Licenses are designed to make sure that you |
||||
have the freedom to distribute copies of free software (and charge for |
||||
this service if you wish), that you receive source code or can get it |
||||
if you want it, that you can change the software or use pieces of it |
||||
in new free programs; and that you know you can do these things. |
||||
|
||||
To protect your rights, we need to make restrictions that forbid |
||||
anyone to deny you these rights or to ask you to surrender the rights. |
||||
These restrictions translate to certain responsibilities for you if you |
||||
distribute copies of the software, or if you modify it. |
||||
|
||||
For example, if you distribute copies of such a program, whether |
||||
gratis or for a fee, you must give the recipients all the rights that |
||||
you have. You must make sure that they, too, receive or can get the |
||||
source code. And you must show them these terms so they know their |
||||
rights. |
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and |
||||
(2) offer you this license which gives you legal permission to copy, |
||||
distribute and/or modify the software. |
||||
|
||||
Also, for each author's protection and ours, we want to make certain |
||||
that everyone understands that there is no warranty for this free |
||||
software. If the software is modified by someone else and passed on, we |
||||
want its recipients to know that what they have is not the original, so |
||||
that any problems introduced by others will not reflect on the original |
||||
authors' reputations. |
||||
|
||||
Finally, any free program is threatened constantly by software |
||||
patents. We wish to avoid the danger that redistributors of a free |
||||
program will individually obtain patent licenses, in effect making the |
||||
program proprietary. To prevent this, we have made it clear that any |
||||
patent must be licensed for everyone's free use or not licensed at all. |
||||
|
||||
The precise terms and conditions for copying, distribution and |
||||
modification follow. |
||||
|
||||
GNU GENERAL PUBLIC LICENSE |
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
||||
|
||||
0. This License applies to any program or other work which contains |
||||
a notice placed by the copyright holder saying it may be distributed |
||||
under the terms of this General Public License. The "Program", below, |
||||
refers to any such program or work, and a "work based on the Program" |
||||
means either the Program or any derivative work under copyright law: |
||||
that is to say, a work containing the Program or a portion of it, |
||||
either verbatim or with modifications and/or translated into another |
||||
language. (Hereinafter, translation is included without limitation in |
||||
the term "modification".) Each licensee is addressed as "you". |
||||
|
||||
Activities other than copying, distribution and modification are not |
||||
covered by this License; they are outside its scope. The act of |
||||
running the Program is not restricted, and the output from the Program |
||||
is covered only if its contents constitute a work based on the |
||||
Program (independent of having been made by running the Program). |
||||
Whether that is true depends on what the Program does. |
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's |
||||
source code as you receive it, in any medium, provided that you |
||||
conspicuously and appropriately publish on each copy an appropriate |
||||
copyright notice and disclaimer of warranty; keep intact all the |
||||
notices that refer to this License and to the absence of any warranty; |
||||
and give any other recipients of the Program a copy of this License |
||||
along with the Program. |
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and |
||||
you may at your option offer warranty protection in exchange for a fee. |
||||
|
||||
2. You may modify your copy or copies of the Program or any portion |
||||
of it, thus forming a work based on the Program, and copy and |
||||
distribute such modifications or work under the terms of Section 1 |
||||
above, provided that you also meet all of these conditions: |
||||
|
||||
a) You must cause the modified files to carry prominent notices |
||||
stating that you changed the files and the date of any change. |
||||
|
||||
b) You must cause any work that you distribute or publish, that in |
||||
whole or in part contains or is derived from the Program or any |
||||
part thereof, to be licensed as a whole at no charge to all third |
||||
parties under the terms of this License. |
||||
|
||||
c) If the modified program normally reads commands interactively |
||||
when run, you must cause it, when started running for such |
||||
interactive use in the most ordinary way, to print or display an |
||||
announcement including an appropriate copyright notice and a |
||||
notice that there is no warranty (or else, saying that you provide |
||||
a warranty) and that users may redistribute the program under |
||||
these conditions, and telling the user how to view a copy of this |
||||
License. (Exception: if the Program itself is interactive but |
||||
does not normally print such an announcement, your work based on |
||||
the Program is not required to print an announcement.) |
||||
|
||||
These requirements apply to the modified work as a whole. If |
||||
identifiable sections of that work are not derived from the Program, |
||||
and can be reasonably considered independent and separate works in |
||||
themselves, then this License, and its terms, do not apply to those |
||||
sections when you distribute them as separate works. But when you |
||||
distribute the same sections as part of a whole which is a work based |
||||
on the Program, the distribution of the whole must be on the terms of |
||||
this License, whose permissions for other licensees extend to the |
||||
entire whole, and thus to each and every part regardless of who wrote it. |
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest |
||||
your rights to work written entirely by you; rather, the intent is to |
||||
exercise the right to control the distribution of derivative or |
||||
collective works based on the Program. |
||||
|
||||
In addition, mere aggregation of another work not based on the Program |
||||
with the Program (or with a work based on the Program) on a volume of |
||||
a storage or distribution medium does not bring the other work under |
||||
the scope of this License. |
||||
|
||||
3. You may copy and distribute the Program (or a work based on it, |
||||
under Section 2) in object code or executable form under the terms of |
||||
Sections 1 and 2 above provided that you also do one of the following: |
||||
|
||||
a) Accompany it with the complete corresponding machine-readable |
||||
source code, which must be distributed under the terms of Sections |
||||
1 and 2 above on a medium customarily used for software interchange; or, |
||||
|
||||
b) Accompany it with a written offer, valid for at least three |
||||
years, to give any third party, for a charge no more than your |
||||
cost of physically performing source distribution, a complete |
||||
machine-readable copy of the corresponding source code, to be |
||||
distributed under the terms of Sections 1 and 2 above on a medium |
||||
customarily used for software interchange; or, |
||||
|
||||
c) Accompany it with the information you received as to the offer |
||||
to distribute corresponding source code. (This alternative is |
||||
allowed only for noncommercial distribution and only if you |
||||
received the program in object code or executable form with such |
||||
an offer, in accord with Subsection b above.) |
||||
|
||||
The source code for a work means the preferred form of the work for |
||||
making modifications to it. For an executable work, complete source |
||||
code means all the source code for all modules it contains, plus any |
||||
associated interface definition files, plus the scripts used to |
||||
control compilation and installation of the executable. However, as a |
||||
special exception, the source code distributed need not include |
||||
anything that is normally distributed (in either source or binary |
||||
form) with the major components (compiler, kernel, and so on) of the |
||||
operating system on which the executable runs, unless that component |
||||
itself accompanies the executable. |
||||
|
||||
If distribution of executable or object code is made by offering |
||||
access to copy from a designated place, then offering equivalent |
||||
access to copy the source code from the same place counts as |
||||
distribution of the source code, even though third parties are not |
||||
compelled to copy the source along with the object code. |
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program |
||||
except as expressly provided under this License. Any attempt |
||||
otherwise to copy, modify, sublicense or distribute the Program is |
||||
void, and will automatically terminate your rights under this License. |
||||
However, parties who have received copies, or rights, from you under |
||||
this License will not have their licenses terminated so long as such |
||||
parties remain in full compliance. |
||||
|
||||
5. You are not required to accept this License, since you have not |
||||
signed it. However, nothing else grants you permission to modify or |
||||
distribute the Program or its derivative works. These actions are |
||||
prohibited by law if you do not accept this License. Therefore, by |
||||
modifying or distributing the Program (or any work based on the |
||||
Program), you indicate your acceptance of this License to do so, and |
||||
all its terms and conditions for copying, distributing or modifying |
||||
the Program or works based on it. |
||||
|
||||
6. Each time you redistribute the Program (or any work based on the |
||||
Program), the recipient automatically receives a license from the |
||||
original licensor to copy, distribute or modify the Program subject to |
||||
these terms and conditions. You may not impose any further |
||||
restrictions on the recipients' exercise of the rights granted herein. |
||||
You are not responsible for enforcing compliance by third parties to |
||||
this License. |
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent |
||||
infringement or for any other reason (not limited to patent issues), |
||||
conditions are imposed on you (whether by court order, agreement or |
||||
otherwise) that contradict the conditions of this License, they do not |
||||
excuse you from the conditions of this License. If you cannot |
||||
distribute so as to satisfy simultaneously your obligations under this |
||||
License and any other pertinent obligations, then as a consequence you |
||||
may not distribute the Program at all. For example, if a patent |
||||
license would not permit royalty-free redistribution of the Program by |
||||
all those who receive copies directly or indirectly through you, then |
||||
the only way you could satisfy both it and this License would be to |
||||
refrain entirely from distribution of the Program. |
||||
|
||||
If any portion of this section is held invalid or unenforceable under |
||||
any particular circumstance, the balance of the section is intended to |
||||
apply and the section as a whole is intended to apply in other |
||||
circumstances. |
||||
|
||||
It is not the purpose of this section to induce you to infringe any |
||||
patents or other property right claims or to contest validity of any |
||||
such claims; this section has the sole purpose of protecting the |
||||
integrity of the free software distribution system, which is |
||||
implemented by public license practices. Many people have made |
||||
generous contributions to the wide range of software distributed |
||||
through that system in reliance on consistent application of that |
||||
system; it is up to the author/donor to decide if he or she is willing |
||||
to distribute software through any other system and a licensee cannot |
||||
impose that choice. |
||||
|
||||
This section is intended to make thoroughly clear what is believed to |
||||
be a consequence of the rest of this License. |
||||
|
||||
8. If the distribution and/or use of the Program is restricted in |
||||
certain countries either by patents or by copyrighted interfaces, the |
||||
original copyright holder who places the Program under this License |
||||
may add an explicit geographical distribution limitation excluding |
||||
those countries, so that distribution is permitted only in or among |
||||
countries not thus excluded. In such case, this License incorporates |
||||
the limitation as if written in the body of this License. |
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions |
||||
of the General Public License from time to time. Such new versions will |
||||
be similar in spirit to the present version, but may differ in detail to |
||||
address new problems or concerns. |
||||
|
||||
Each version is given a distinguishing version number. If the Program |
||||
specifies a version number of this License which applies to it and "any |
||||
later version", you have the option of following the terms and conditions |
||||
either of that version or of any later version published by the Free |
||||
Software Foundation. If the Program does not specify a version number of |
||||
this License, you may choose any version ever published by the Free Software |
||||
Foundation. |
||||
|
||||
10. If you wish to incorporate parts of the Program into other free |
||||
programs whose distribution conditions are different, write to the author |
||||
to ask for permission. For software which is copyrighted by the Free |
||||
Software Foundation, write to the Free Software Foundation; we sometimes |
||||
make exceptions for this. Our decision will be guided by the two goals |
||||
of preserving the free status of all derivatives of our free software and |
||||
of promoting the sharing and reuse of software generally. |
||||
|
||||
NO WARRANTY |
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY |
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN |
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES |
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED |
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS |
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE |
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, |
||||
REPAIR OR CORRECTION. |
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING |
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR |
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, |
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING |
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED |
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY |
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER |
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE |
||||
POSSIBILITY OF SUCH DAMAGES. |
||||
|
||||
END OF TERMS AND CONDITIONS |
||||
|
||||
How to Apply These Terms to Your New Programs |
||||
|
||||
If you develop a new program, and you want it to be of the greatest |
||||
possible use to the public, the best way to achieve this is to make it |
||||
free software which everyone can redistribute and change under these terms. |
||||
|
||||
To do so, attach the following notices to the program. It is safest |
||||
to attach them to the start of each source file to most effectively |
||||
convey the exclusion of warranty; and each file should have at least |
||||
the "copyright" line and a pointer to where the full notice is found. |
||||
|
||||
<one line to give the program's name and a brief idea of what it does.> |
||||
Copyright (C) <year> <name of author> |
||||
|
||||
This program is free software; you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation; either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License along |
||||
with this program; if not, write to the Free Software Foundation, Inc., |
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
||||
|
||||
Also add information on how to contact you by electronic and paper mail. |
||||
|
||||
If the program is interactive, make it output a short notice like this |
||||
when it starts in an interactive mode: |
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author |
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. |
||||
This is free software, and you are welcome to redistribute it |
||||
under certain conditions; type `show c' for details. |
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate |
||||
parts of the General Public License. Of course, the commands you use may |
||||
be called something other than `show w' and `show c'; they could even be |
||||
mouse-clicks or menu items--whatever suits your program. |
||||
|
||||
You should also get your employer (if you work as a programmer) or your |
||||
school, if any, to sign a "copyright disclaimer" for the program, if |
||||
necessary. Here is a sample; alter the names: |
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program |
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker. |
||||
|
||||
<signature of Ty Coon>, 1 April 1989 |
||||
Ty Coon, President of Vice |
||||
|
||||
This General Public License does not permit incorporating your program into |
||||
proprietary programs. If your program is a subroutine library, you may |
||||
consider it more useful to permit linking proprietary applications with the |
||||
library. If this is what you want to do, use the GNU Lesser General |
||||
Public License instead of this License. |
@ -1,67 +0,0 @@
@@ -1,67 +0,0 @@
|
||||
/* |
||||
** IE5.0 Fix Stylesheet |
||||
*/ |
||||
|
||||
#column-content { |
||||
margin: 0 !important; |
||||
float: none; |
||||
} |
||||
#column-content #content { |
||||
margin-top: 3em; |
||||
height: 1%; |
||||
} |
||||
#column-one { |
||||
position: absolute; |
||||
overflow: visible; |
||||
top: 0; |
||||
left: 0; |
||||
z-index: 3; |
||||
} |
||||
#footer { |
||||
margin: 0 0 0 13.6em; |
||||
} |
||||
|
||||
/* IE 5 & 5.5 interpret keyword sizes one off */ |
||||
body { font-size: xx-small; } |
||||
/* |
||||
** the edit tabs |
||||
*/ |
||||
#p-cactions li { |
||||
float: left; |
||||
padding-top: 0; |
||||
padding-bottom: 0 !important; |
||||
height: 0.9em; |
||||
} |
||||
#p-cactions li a { |
||||
display: block; |
||||
padding-bottom: 0.045em; |
||||
} |
||||
#p-cactions li.selected a { |
||||
padding-bottom: 0.17em; |
||||
} |
||||
#p-cactions li a:hover { |
||||
padding-bottom: 0.17em; |
||||
} |
||||
/* 5.0 doesn't like the background icon for external links and user */ |
||||
.link-external, |
||||
.external { |
||||
background: none; |
||||
padding: 0; |
||||
} |
||||
#p-personal ul { float: right } |
||||
#p-personal li { float: left } |
||||
li#pt-userpage, |
||||
li#pt-anonuserpage, |
||||
li#pt-login, |
||||
li#pt-logout { |
||||
background: none; |
||||
padding-left: none; |
||||
} |
||||
.visualClear { |
||||
width: 100%; |
||||
height: 0px; |
||||
padding:0; |
||||
margin: 0; |
||||
} |
||||
.firstHeading { margin-bottom: .3em; } |
||||
/*div{ border:1px solid Red !important;}*/ |
@ -1,88 +0,0 @@
@@ -1,88 +0,0 @@
|
||||
/* IE5.5/win- only fixes */ |
||||
|
||||
#column-content { |
||||
float: none; |
||||
margin-left: 0; |
||||
height: 1%; |
||||
} |
||||
#column-content #content { |
||||
position: relative; |
||||
z-index: 5; |
||||
margin-left: 12.2em; |
||||
margin-top: 3em; |
||||
height: 1%; |
||||
} |
||||
#column-one { |
||||
position: absolute; |
||||
top: 0; |
||||
left: 0; |
||||
z-index: 4; |
||||
width: 100%; |
||||
} |
||||
#footer { |
||||
margin-left: 13.6em; |
||||
border-left: 1px solid #fabd23; |
||||
} |
||||
|
||||
/*#bodyContent div, |
||||
#bodyContent pre { overflow: auto; }*/ |
||||
|
||||
#p-personal { padding-bottom: .1em; } |
||||
|
||||
body { font-size: xx-small; } |
||||
|
||||
/* WERELATE |
||||
#p-cactions { |
||||
width: 76% !important; |
||||
z-index: 3 !important; |
||||
float: none; |
||||
} |
||||
#p-cactions li { |
||||
padding-bottom: 0 !important; |
||||
border: none; |
||||
background-color: transparent; |
||||
cursor: default; |
||||
float: none !important; |
||||
} |
||||
#p-cactions li a { |
||||
display: inline-block !important; |
||||
vertical-align: top; |
||||
padding-bottom: 0; |
||||
border: solid #aaa; |
||||
border-width: 1px 1px 0; |
||||
} |
||||
#p-cactions li.selected a { |
||||
border-color: #fabd23; |
||||
padding-bottom: 0.17em; |
||||
} |
||||
#p-cactions li a:hover { |
||||
padding-bottom: 0.17em; |
||||
} |
||||
*/ |
||||
|
||||
#p-navigation a { |
||||
display: inline-block; |
||||
width: 100%; |
||||
} |
||||
.portlet { |
||||
overflow: hidden; |
||||
} |
||||
#bodyContent a.external { |
||||
background: url(external.png) center right no-repeat; |
||||
padding-right: 13px; |
||||
} |
||||
/* show the hand */ |
||||
#p-logo a, |
||||
#p-logo a:hover { |
||||
cursor: pointer; |
||||
} |
||||
.visualClear { |
||||
width: 90%; |
||||
height: 1px; |
||||
padding: 0; |
||||
margin: 0; |
||||
} |
||||
|
||||
#editform { |
||||
width: 100%; |
||||
} |
@ -1,125 +0,0 @@
@@ -1,125 +0,0 @@
|
||||
/* 6.0 - only fixes */ |
||||
/* content area */ |
||||
/* workaround for various ie float bugs */ |
||||
div#column-content { |
||||
float: none; |
||||
margin-left: 0; |
||||
height: 1%; |
||||
} |
||||
|
||||
div#column-content .mw-body { |
||||
margin-left: 12.2em; |
||||
margin-top: 3em; |
||||
height: 1%; |
||||
} |
||||
|
||||
.rtl div#column-content .mw-body { |
||||
margin-right: 12.2em; |
||||
margin-left: 0; |
||||
} |
||||
|
||||
div#column-one { |
||||
position: absolute; |
||||
top: 0; |
||||
left: 0; |
||||
z-index: 4; |
||||
} |
||||
|
||||
.rtl div#column-one { |
||||
left: auto; |
||||
right: 0; |
||||
} |
||||
|
||||
div#footer { |
||||
margin-left: 13.6em; |
||||
border-left: 1px solid #fabd23; |
||||
} |
||||
|
||||
.rtl div#footer { |
||||
margin-left: 0; |
||||
margin-right: 13.6em; |
||||
border-left: none; |
||||
border-right: 1px solid #fabd23; |
||||
} |
||||
|
||||
/* float/negative margin brokenness */ |
||||
* html div#footer { |
||||
margin-top: 0; |
||||
} |
||||
|
||||
* html div#column-content { |
||||
display: inline; |
||||
margin-bottom: 0; |
||||
} |
||||
|
||||
/* the tabs */ |
||||
|
||||
#p-cactions { |
||||
z-index: 3; |
||||
} |
||||
|
||||
#p-cactions li { |
||||
padding-bottom: 0 !important; |
||||
border: none; |
||||
background-color: transparent; |
||||
cursor: default; |
||||
float: none !important; |
||||
} |
||||
|
||||
#p-cactions li a { |
||||
display: inline-block !important; |
||||
vertical-align: top; |
||||
padding-bottom: 0; |
||||
border: solid #aaa; |
||||
border-width: 1px 1px 0; |
||||
} |
||||
|
||||
#p-cactions li.selected a { |
||||
border-color: #fabd23; |
||||
padding-bottom: 0.17em; |
||||
} |
||||
|
||||
#p-cactions li a:hover { |
||||
padding-bottom: 0.17em; |
||||
} |
||||
|
||||
#p-navigation a { |
||||
display: inline-block; |
||||
width: 100%; |
||||
} |
||||
|
||||
#portal-personaltools { |
||||
padding-bottom: 0.1em; |
||||
} |
||||
|
||||
.rtl a.feedlink { |
||||
background-position: right; |
||||
padding-right: 0; |
||||
padding-left: 16px; |
||||
} |
||||
|
||||
/* show the hand */ |
||||
#p-logo a, |
||||
#p-logo a:hover { |
||||
cursor: pointer; |
||||
} |
||||
|
||||
div.visualClear { |
||||
width: 100%; |
||||
line-height: 0; |
||||
} |
||||
|
||||
textarea { |
||||
width: 96%; |
||||
} |
||||
|
||||
#catlinks, |
||||
div.tright, |
||||
div.tleft { |
||||
position: relative; |
||||
} |
||||
|
||||
/* bug 12846 */ |
||||
body.rtl #preftoc a, body.rtl #preftoc a:active { |
||||
float: left; |
||||
} |
@ -1,96 +0,0 @@
@@ -1,96 +0,0 @@
|
||||
/* 7.0 - only fixes */ |
||||
/* content area */ |
||||
/* workaround for various ie float bugs */ |
||||
|
||||
/* This bit is needed to make links clickable... WTF */ |
||||
div#column-content .mw-body { |
||||
margin-left: 12.2em; |
||||
margin-top: 3em; |
||||
height: 1%; |
||||
} |
||||
|
||||
.rtl div#column-content .mw-body { |
||||
margin-right: 12.2em; |
||||
margin-left: 0; |
||||
} |
||||
|
||||
.rtl div#column-one { |
||||
/* For some reason it tries to inherit the padding-top into every div, |
||||
* and I can't figure out how to get it back off. |
||||
* Margin works correctly for this use, though. |
||||
*/ |
||||
padding-top: 0; |
||||
margin-top: 160px; |
||||
} |
||||
|
||||
/* These elements also have padding-left: 20px; in main.css, but in RTL mode this is flipped. |
||||
* That's good in normal browsers, but in IE7 it needs to not be flipped for some daft reason. |
||||
* Also clear the right margin (originally margin-left: 1em) |
||||
*/ |
||||
li#pt-userpage, li#pt-anonuserpage, li#pt-login { |
||||
padding-left: 20px; |
||||
margin-right: 0; |
||||
} |
||||
|
||||
.rtl a.feedlink { |
||||
background-position: right; |
||||
padding-right: 0; |
||||
padding-left: 16px; |
||||
} |
||||
|
||||
/* the tabs */ |
||||
|
||||
#p-cactions { |
||||
z-index: 3; |
||||
} |
||||
|
||||
#p-cactions li { |
||||
padding-bottom: 0 !important; |
||||
border: none; |
||||
background-color: transparent; |
||||
cursor: default; |
||||
float: none !important; |
||||
} |
||||
|
||||
#p-cactions li a { |
||||
display: inline-block !important; |
||||
vertical-align: top; |
||||
padding-bottom: 0; |
||||
border: solid #aaa; |
||||
border-width: 1px 1px 0; |
||||
} |
||||
|
||||
#p-cactions li.selected a { |
||||
border-color: #fabd23; |
||||
padding-bottom: 0.17em; |
||||
} |
||||
|
||||
#p-cactions li a:hover { |
||||
padding-bottom: 0.17em; |
||||
} |
||||
|
||||
#p-navigation a { |
||||
display: inline-block; |
||||
width: 100%; |
||||
} |
||||
|
||||
#portal-personaltools { |
||||
padding-bottom: 0.1em; |
||||
} |
||||
|
||||
textarea { |
||||
width: 96%; |
||||
} |
||||
|
||||
/* |
||||
#catlinks, |
||||
div.tright, |
||||
div.tleft { |
||||
position: relative; |
||||
} |
||||
*/ |
||||
|
||||
div#footer li { |
||||
/* Work around bug with inline <li> tags with right margins and nowrap */ |
||||
margin-right: 0; |
||||
} |
@ -1,18 +0,0 @@
@@ -1,18 +0,0 @@
|
||||
<footer id="contentinfo" class="body"> |
||||
<hr /> |
||||
<p style="text-align: center"> |
||||
<span class="fa-stack fa-lg"> |
||||
<i class="fa fa-square fa-stack-2x"></i> |
||||
<i class="fa fa-terminal fa-stack-1x fa-inverse"></i> |
||||
</span> |
||||
Made from the command line with vim by |
||||
<a href="http://charlesreid1.com">charlesreid1</a><br /> |
||||
with help from <a href="http://d3js.org">D3.js</a>, <a href="http://angularjs.org">Angular.js</a>, and <a href="http://getpelican.com">Pelican</a>. |
||||
</p> |
||||
|
||||
<script type="text/javascript" src="{{ SITEURL }}/theme/js/jquery-1.11.2.js"></script> |
||||
<script type="text/javascript" src="{{ SITEURL }}/theme/js/jquery_load_template-1.4.5.min.js"></script> |
||||
<script type="text/javascript" src="{{ SITEURL }}/theme/js/bootstrap-3.3.4.js"></script> |
||||
|
||||
</footer><!-- /#contentinfo --> |
||||
|
File diff suppressed because one or more lines are too long
@ -1,90 +0,0 @@
@@ -1,90 +0,0 @@
|
||||
/* ========================================================== |
||||
* bootstrap-alert.js v2.0.4 |
||||
* http://twitter.github.com/bootstrap/javascript.html#alerts
|
||||
* ========================================================== |
||||
* Copyright 2012 Twitter, Inc. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
* ========================================================== */ |
||||
|
||||
|
||||
!function ($) { |
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* ALERT CLASS DEFINITION |
||||
* ====================== */ |
||||
|
||||
var dismiss = '[data-dismiss="alert"]' |
||||
, Alert = function (el) { |
||||
$(el).on('click', dismiss, this.close) |
||||
} |
||||
|
||||
Alert.prototype.close = function (e) { |
||||
var $this = $(this) |
||||
, selector = $this.attr('data-target') |
||||
, $parent |
||||
|
||||
if (!selector) { |
||||
selector = $this.attr('href') |
||||
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
|
||||
} |
||||
|
||||
$parent = $(selector) |
||||
|
||||
e && e.preventDefault() |
||||
|
||||
$parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) |
||||
|
||||
$parent.trigger(e = $.Event('close')) |
||||
|
||||
if (e.isDefaultPrevented()) return |
||||
|
||||
$parent.removeClass('in') |
||||
|
||||
function removeElement() { |
||||
$parent |
||||
.trigger('closed') |
||||
.remove() |
||||
} |
||||
|
||||
$.support.transition && $parent.hasClass('fade') ? |
||||
$parent.on($.support.transition.end, removeElement) : |
||||
removeElement() |
||||
} |
||||
|
||||
|
||||
/* ALERT PLUGIN DEFINITION |
||||
* ======================= */ |
||||
|
||||
$.fn.alert = function (option) { |
||||
return this.each(function () { |
||||
var $this = $(this) |
||||
, data = $this.data('alert') |
||||
if (!data) $this.data('alert', (data = new Alert(this))) |
||||
if (typeof option == 'string') data[option].call($this) |
||||
}) |
||||
} |
||||
|
||||
$.fn.alert.Constructor = Alert |
||||
|
||||
|
||||
/* ALERT DATA-API |
||||
* ============== */ |
||||
|
||||
$(function () { |
||||
$('body').on('click.alert.data-api', dismiss, Alert.prototype.close) |
||||
}) |
||||
|
||||
}(window.jQuery); |
@ -1,96 +0,0 @@
@@ -1,96 +0,0 @@
|
||||
/* ============================================================ |
||||
* bootstrap-button.js v2.0.4 |
||||
* http://twitter.github.com/bootstrap/javascript.html#buttons
|
||||
* ============================================================ |
||||
* Copyright 2012 Twitter, Inc. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
* ============================================================ */ |
||||
|
||||
|
||||
!function ($) { |
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* BUTTON PUBLIC CLASS DEFINITION |
||||
* ============================== */ |
||||
|
||||
var Button = function (element, options) { |
||||
this.$element = $(element) |
||||
this.options = $.extend({}, $.fn.button.defaults, options) |
||||
} |
||||
|
||||
Button.prototype.setState = function (state) { |
||||
var d = 'disabled' |
||||
, $el = this.$element |
||||
, data = $el.data() |
||||
, val = $el.is('input') ? 'val' : 'html' |
||||
|
||||
state = state + 'Text' |
||||
data.resetText || $el.data('resetText', $el[val]()) |
||||
|
||||
$el[val](data[state] || this.options[state]) |
||||
|
||||
// push to event loop to allow forms to submit
|
||||
setTimeout(function () { |
||||
state == 'loadingText' ? |
||||
$el.addClass(d).attr(d, d) : |
||||
$el.removeClass(d).removeAttr(d) |
||||
}, 0) |
||||
} |
||||
|
||||
Button.prototype.toggle = function () { |
||||
var $parent = this.$element.parent('[data-toggle="buttons-radio"]') |
||||
|
||||
$parent && $parent |
||||
.find('.active') |
||||
.removeClass('active') |
||||
|
||||
this.$element.toggleClass('active') |
||||
} |
||||
|
||||
|
||||
/* BUTTON PLUGIN DEFINITION |
||||
* ======================== */ |
||||
|
||||
$.fn.button = function (option) { |
||||
return this.each(function () { |
||||
var $this = $(this) |
||||
, data = $this.data('button') |
||||
, options = typeof option == 'object' && option |
||||
if (!data) $this.data('button', (data = new Button(this, options))) |
||||
if (option == 'toggle') data.toggle() |
||||
else if (option) data.setState(option) |
||||
}) |
||||
} |
||||
|
||||
$.fn.button.defaults = { |
||||
loadingText: 'loading...' |
||||
} |
||||
|
||||
$.fn.button.Constructor = Button |
||||
|
||||
|
||||
/* BUTTON DATA-API |
||||
* =============== */ |
||||
|
||||
$(function () { |
||||
$('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) { |
||||
var $btn = $(e.target) |
||||
if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') |
||||
$btn.button('toggle') |
||||
}) |
||||
}) |
||||
|
||||
}(window.jQuery); |
@ -1,169 +0,0 @@
@@ -1,169 +0,0 @@
|
||||
/* ========================================================== |
||||
* bootstrap-carousel.js v2.0.4 |
||||
* http://twitter.github.com/bootstrap/javascript.html#carousel
|
||||
* ========================================================== |
||||
* Copyright 2012 Twitter, Inc. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
* ========================================================== */ |
||||
|
||||
|
||||
!function ($) { |
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* CAROUSEL CLASS DEFINITION |
||||
* ========================= */ |
||||
|
||||
var Carousel = function (element, options) { |
||||
this.$element = $(element) |
||||
this.options = options |
||||
this.options.slide && this.slide(this.options.slide) |
||||
this.options.pause == 'hover' && this.$element |
||||
.on('mouseenter', $.proxy(this.pause, this)) |
||||
.on('mouseleave', $.proxy(this.cycle, this)) |
||||
} |
||||
|
||||
Carousel.prototype = { |
||||
|
||||
cycle: function (e) { |
||||
if (!e) this.paused = false |
||||
this.options.interval |
||||
&& !this.paused |
||||
&& (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) |
||||
return this |
||||
} |
||||
|
||||
, to: function (pos) { |
||||
var $active = this.$element.find('.active') |
||||
, children = $active.parent().children() |
||||
, activePos = children.index($active) |
||||
, that = this |
||||
|
||||
if (pos > (children.length - 1) || pos < 0) return |
||||
|
||||
if (this.sliding) { |
||||
return this.$element.one('slid', function () { |
||||
that.to(pos) |
||||
}) |
||||
} |
||||
|
||||
if (activePos == pos) { |
||||
return this.pause().cycle() |
||||
} |
||||
|
||||
return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos])) |
||||
} |
||||
|
||||
, pause: function (e) { |
||||
if (!e) this.paused = true |
||||
clearInterval(this.interval) |
||||
this.interval = null |
||||
return this |
||||
} |
||||
|
||||
, next: function () { |
||||
if (this.sliding) return |
||||
return this.slide('next') |
||||
} |
||||
|
||||
, prev: function () { |
||||
if (this.sliding) return |
||||
return this.slide('prev') |
||||
} |
||||
|
||||
, slide: function (type, next) { |
||||
var $active = this.$element.find('.active') |
||||
, $next = next || $active[type]() |
||||
, isCycling = this.interval |
||||
, direction = type == 'next' ? 'left' : 'right' |
||||
, fallback = type == 'next' ? 'first' : 'last' |
||||
, that = this |
||||
, e = $.Event('slide') |
||||
|
||||
this.sliding = true |
||||
|
||||
isCycling && this.pause() |
||||
|
||||
$next = $next.length ? $next : this.$element.find('.item')[fallback]() |
||||
|
||||
if ($next.hasClass('active')) return |
||||
|
||||
if ($.support.transition && this.$element.hasClass('slide')) { |
||||
this.$element.trigger(e) |
||||
if (e.isDefaultPrevented()) return |
||||
$next.addClass(type) |
||||
$next[0].offsetWidth // force reflow
|
||||
$active.addClass(direction) |
||||
$next.addClass(direction) |
||||
this.$element.one($.support.transition.end, function () { |
||||
$next.removeClass([type, direction].join(' ')).addClass('active') |
||||
$active.removeClass(['active', direction].join(' ')) |
||||
that.sliding = false |
||||
setTimeout(function () { that.$element.trigger('slid') }, 0) |
||||
}) |
||||
} else { |
||||
this.$element.trigger(e) |
||||
if (e.isDefaultPrevented()) return |
||||
$active.removeClass('active') |
||||
$next.addClass('active') |
||||
this.sliding = false |
||||
this.$element.trigger('slid') |
||||
} |
||||
|
||||
isCycling && this.cycle() |
||||
|
||||
return this |
||||
} |
||||
|
||||
} |
||||
|
||||
|
||||
/* CAROUSEL PLUGIN DEFINITION |
||||
* ========================== */ |
||||
|
||||
$.fn.carousel = function (option) { |
||||
return this.each(function () { |
||||
var $this = $(this) |
||||
, data = $this.data('carousel') |
||||
, options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) |
||||
if (!data) $this.data('carousel', (data = new Carousel(this, options))) |
||||
if (typeof option == 'number') data.to(option) |
||||
else if (typeof option == 'string' || (option = options.slide)) data[option]() |
||||
else if (options.interval) data.cycle() |
||||
}) |
||||
} |
||||
|
||||
$.fn.carousel.defaults = { |
||||
interval: 5000 |
||||
, pause: 'hover' |
||||
} |
||||
|
||||
$.fn.carousel.Constructor = Carousel |
||||
|
||||
|
||||
/* CAROUSEL DATA-API |
||||
* ================= */ |
||||
|
||||
$(function () { |
||||
$('body').on('click.carousel.data-api', '[data-slide]', function ( e ) { |
||||
var $this = $(this), href |
||||
, $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
|
||||
, options = !$target.data('modal') && $.extend({}, $target.data(), $this.data()) |
||||
$target.carousel(options) |
||||
e.preventDefault() |
||||
}) |
||||
}) |
||||
|
||||
}(window.jQuery); |
@ -1,157 +0,0 @@
@@ -1,157 +0,0 @@
|
||||
/* ============================================================= |
||||
* bootstrap-collapse.js v2.0.4 |
||||
* http://twitter.github.com/bootstrap/javascript.html#collapse
|
||||
* ============================================================= |
||||
* Copyright 2012 Twitter, Inc. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
* ============================================================ */ |
||||
|
||||
|
||||
!function ($) { |
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* COLLAPSE PUBLIC CLASS DEFINITION |
||||
* ================================ */ |
||||
|
||||
var Collapse = function (element, options) { |
||||
this.$element = $(element) |
||||
this.options = $.extend({}, $.fn.collapse.defaults, options) |
||||
|
||||
if (this.options.parent) { |
||||
this.$parent = $(this.options.parent) |
||||
} |
||||
|
||||
this.options.toggle && this.toggle() |
||||
} |
||||
|
||||
Collapse.prototype = { |
||||
|
||||
constructor: Collapse |
||||
|
||||
, dimension: function () { |
||||
var hasWidth = this.$element.hasClass('width') |
||||
return hasWidth ? 'width' : 'height' |
||||
} |
||||
|
||||
, show: function () { |
||||
var dimension |
||||
, scroll |
||||
, actives |
||||
, hasData |
||||
|
||||
if (this.transitioning) return |
||||
|
||||
dimension = this.dimension() |
||||
scroll = $.camelCase(['scroll', dimension].join('-')) |
||||
actives = this.$parent && this.$parent.find('> .accordion-group > .in') |
||||
|
||||
if (actives && actives.length) { |
||||
hasData = actives.data('collapse') |
||||
if (hasData && hasData.transitioning) return |
||||
actives.collapse('hide') |
||||
hasData || actives.data('collapse', null) |
||||
} |
||||
|
||||
this.$element[dimension](0) |
||||
this.transition('addClass', $.Event('show'), 'shown') |
||||
this.$element[dimension](this.$element[0][scroll]) |
||||
} |
||||
|
||||
, hide: function () { |
||||
var dimension |
||||
if (this.transitioning) return |
||||
dimension = this.dimension() |
||||
this.reset(this.$element[dimension]()) |
||||
this.transition('removeClass', $.Event('hide'), 'hidden') |
||||
this.$element[dimension](0) |
||||
} |
||||
|
||||
, reset: function (size) { |
||||
var dimension = this.dimension() |
||||
|
||||
this.$element |
||||
.removeClass('collapse') |
||||
[dimension](size || 'auto') |
||||
[0].offsetWidth |
||||
|
||||
this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') |
||||
|
||||
return this |
||||
} |
||||
|
||||
, transition: function (method, startEvent, completeEvent) { |
||||
var that = this |
||||
, complete = function () { |
||||
if (startEvent.type == 'show') that.reset() |
||||
that.transitioning = 0 |
||||
that.$element.trigger(completeEvent) |
||||
} |
||||
|
||||
this.$element.trigger(startEvent) |
||||
|
||||
if (startEvent.isDefaultPrevented()) return |
||||
|
||||
this.transitioning = 1 |
||||
|
||||
this.$element[method]('in') |
||||
|
||||
$.support.transition && this.$element.hasClass('collapse') ? |
||||
this.$element.one($.support.transition.end, complete) : |
||||
complete() |
||||
} |
||||
|
||||
, toggle: function () { |
||||
this[this.$element.hasClass('in') ? 'hide' : 'show']() |
||||
} |
||||
|
||||
} |
||||
|
||||
|
||||
/* COLLAPSIBLE PLUGIN DEFINITION |
||||
* ============================== */ |
||||
|
||||
$.fn.collapse = function (option) { |
||||
return this.each(function () { |
||||
var $this = $(this) |
||||
, data = $this.data('collapse') |
||||
, options = typeof option == 'object' && option |
||||
if (!data) $this.data('collapse', (data = new Collapse(this, options))) |
||||
if (typeof option == 'string') data[option]() |
||||
}) |
||||
} |
||||
|
||||
$.fn.collapse.defaults = { |
||||
toggle: true |
||||
} |
||||
|
||||
$.fn.collapse.Constructor = Collapse |
||||
|
||||
|
||||
/* COLLAPSIBLE DATA-API |
||||
* ==================== */ |
||||
|
||||
$(function () { |
||||
$('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) { |
||||
var $this = $(this), href |
||||
, target = $this.attr('data-target') |
||||
|| e.preventDefault() |
||||
|| (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
|
||||
, option = $(target).data('collapse') ? 'toggle' : $this.data() |
||||
$(target).collapse(option) |
||||
}) |
||||
}) |
||||
|
||||
}(window.jQuery); |
File diff suppressed because it is too large
Load Diff
@ -1,100 +0,0 @@
@@ -1,100 +0,0 @@
|
||||
/* ============================================================ |
||||
* bootstrap-dropdown.js v2.0.4 |
||||
* http://twitter.github.com/bootstrap/javascript.html#dropdowns
|
||||
* ============================================================ |
||||
* Copyright 2012 Twitter, Inc. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
* ============================================================ */ |
||||
|
||||
|
||||
!function ($) { |
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* DROPDOWN CLASS DEFINITION |
||||
* ========================= */ |
||||
|
||||
var toggle = '[data-toggle="dropdown"]' |
||||
, Dropdown = function (element) { |
||||
var $el = $(element).on('click.dropdown.data-api', this.toggle) |
||||
$('html').on('click.dropdown.data-api', function () { |
||||
$el.parent().removeClass('open') |
||||
}) |
||||
} |
||||
|
||||
Dropdown.prototype = { |
||||
|
||||
constructor: Dropdown |
||||
|
||||
, toggle: function (e) { |
||||
var $this = $(this) |
||||
, $parent |
||||
, selector |
||||
, isActive |
||||
|
||||
if ($this.is('.disabled, :disabled')) return |
||||
|
||||
selector = $this.attr('data-target') |
||||
|
||||
if (!selector) { |
||||
selector = $this.attr('href') |
||||
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
|
||||
} |
||||
|
||||
$parent = $(selector) |
||||
$parent.length || ($parent = $this.parent()) |
||||
|
||||
isActive = $parent.hasClass('open') |
||||
|
||||
clearMenus() |
||||
|
||||
if (!isActive) $parent.toggleClass('open') |
||||
|
||||
return false |
||||
} |
||||
|
||||
} |
||||
|
||||
function clearMenus() { |
||||
$(toggle).parent().removeClass('open') |
||||
} |
||||
|
||||
|
||||
/* DROPDOWN PLUGIN DEFINITION |
||||
* ========================== */ |
||||
|
||||
$.fn.dropdown = function (option) { |
||||
return this.each(function () { |
||||
var $this = $(this) |
||||
, data = $this.data('dropdown') |
||||
if (!data) $this.data('dropdown', (data = new Dropdown(this))) |
||||
if (typeof option == 'string') data[option].call($this) |
||||
}) |
||||
} |
||||
|
||||
$.fn.dropdown.Constructor = Dropdown |
||||
|
||||
|
||||
/* APPLY TO STANDARD DROPDOWN ELEMENTS |
||||
* =================================== */ |
||||
|
||||
$(function () { |
||||
$('html').on('click.dropdown.data-api', clearMenus) |
||||
$('body') |
||||
.on('click.dropdown', '.dropdown form', function (e) { e.stopPropagation() }) |
||||
.on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle) |
||||
}) |
||||
|
||||
}(window.jQuery); |
@ -1,399 +0,0 @@
@@ -1,399 +0,0 @@
|
||||
/* |
||||
* Bootstrap Image Gallery 2.10 |
||||
* https://github.com/blueimp/Bootstrap-Image-Gallery
|
||||
* |
||||
* Copyright 2011, Sebastian Tschan |
||||
* https://blueimp.net
|
||||
* |
||||
* Licensed under the MIT license: |
||||
* http://www.opensource.org/licenses/MIT
|
||||
*/ |
||||
|
||||
/*jslint nomen: true, regexp: true */ |
||||
/*global define, window, document, jQuery */ |
||||
|
||||
(function (factory) { |
||||
'use strict'; |
||||
if (typeof define === 'function' && define.amd) { |
||||
// Register as an anonymous AMD module:
|
||||
define([ |
||||
'jquery', |
||||
'load-image', |
||||
'bootstrap' |
||||
], factory); |
||||
} else { |
||||
// Browser globals:
|
||||
factory( |
||||
window.jQuery, |
||||
window.loadImage |
||||
); |
||||
} |
||||
}(function ($, loadImage) { |
||||
'use strict'; |
||||
// Bootstrap Image Gallery is an extension to the Modal dialog of Twitter's
|
||||
// Bootstrap toolkit, to ease navigation between a set of gallery images.
|
||||
// It features transition effects, fullscreen mode and slideshow functionality.
|
||||
$.extend($.fn.modal.defaults, { |
||||
// Delegate to search gallery links from, can be anything that
|
||||
// is accepted as parameter for $():
|
||||
delegate: document, |
||||
// Selector for gallery links:
|
||||
selector: null, |
||||
// The filter for the selected gallery links (e.g. set to ":odd" to
|
||||
// filter out label and thumbnail linking twice to the same image):
|
||||
filter: '*', |
||||
// The index of the first gallery image to show:
|
||||
index: 0, |
||||
// The href of the first gallery image to show (overrides index):
|
||||
href: null, |
||||
// The range of images around the current one to preload:
|
||||
preloadRange: 2, |
||||
// Offset of image width to viewport width:
|
||||
offsetWidth: 100, |
||||
// Offset of image height to viewport height:
|
||||
offsetHeight: 200, |
||||
// Set to true to display images as canvas elements:
|
||||
canvas: false, |
||||
// Shows the next image after the given time in ms (0 = disabled):
|
||||
slideshow: 0, |
||||
// Defines the image division for previous/next clicks:
|
||||
imageClickDivision: 0.5 |
||||
}); |
||||
var originalShow = $.fn.modal.Constructor.prototype.show, |
||||
originalHide = $.fn.modal.Constructor.prototype.hide; |
||||
$.extend($.fn.modal.Constructor.prototype, { |
||||
initLinks: function () { |
||||
var $this = this, |
||||
options = this.options, |
||||
selector = options.selector || |
||||
'a[data-target=' + options.target + ']'; |
||||
this.$links = $(options.delegate).find(selector) |
||||
.filter(options.filter).each(function (index) { |
||||
if ($this.getUrl(this) === options.href) { |
||||
options.index = index; |
||||
} |
||||
}); |
||||
if (!this.$links[options.index]) { |
||||
options.index = 0; |
||||
} |
||||
}, |
||||
getUrl: function (element) { |
||||
return element.href || $(element).data('href'); |
||||
}, |
||||
getDownloadUrl: function (element) { |
||||
return $(element).data('download'); |
||||
}, |
||||
startSlideShow: function () { |
||||
var $this = this; |
||||
if (this.options.slideshow) { |
||||
this._slideShow = window.setTimeout( |
||||
function () { |
||||
$this.next(); |
||||
}, |
||||
this.options.slideshow |
||||
); |
||||
} |
||||
}, |
||||
stopSlideShow: function () { |
||||
window.clearTimeout(this._slideShow); |
||||
}, |
||||
toggleSlideShow: function () { |
||||
var node = this.$element.find('.modal-slideshow'); |
||||
if (this.options.slideshow) { |
||||
this.options.slideshow = 0; |
||||
this.stopSlideShow(); |
||||
} else { |
||||
this.options.slideshow = node.data('slideshow') || 5000; |
||||
this.startSlideShow(); |
||||
} |
||||
node.find('i').toggleClass('icon-play icon-pause'); |
||||
}, |
||||
preloadImages: function () { |
||||
var options = this.options, |
||||
range = options.index + options.preloadRange + 1, |
||||
link, |
||||
i; |
||||
for (i = options.index - options.preloadRange; i < range; i += 1) { |
||||
link = this.$links[i]; |
||||
if (link && i !== options.index) { |
||||
$('<img>').prop('src', this.getUrl(link)); |
||||
} |
||||
} |
||||
}, |
||||
loadImage: function () { |
||||
var $this = this, |
||||
modal = this.$element, |
||||
index = this.options.index, |
||||
url = this.getUrl(this.$links[index]), |
||||
download = this.getDownloadUrl(this.$links[index]), |
||||
oldImg; |
||||
this.abortLoad(); |
||||
this.stopSlideShow(); |
||||
modal.trigger('beforeLoad'); |
||||
// The timeout prevents displaying a loading status,
|
||||
// if the image has already been loaded:
|
||||
this._loadingTimeout = window.setTimeout(function () { |
||||
modal.addClass('modal-loading'); |
||||
}, 100); |
||||
oldImg = modal.find('.modal-image').children().removeClass('in'); |
||||
// The timeout allows transition effects to finish:
|
||||
window.setTimeout(function () { |
||||
oldImg.remove(); |
||||
}, 3000); |
||||
modal.find('.modal-title').text(this.$links[index].title); |
||||
modal.find('.modal-download').prop( |
||||
'href', |
||||
download || url |
||||
); |
||||
this._loadingImage = loadImage( |
||||
url, |
||||
function (img) { |
||||
$this.img = img; |
||||
window.clearTimeout($this._loadingTimeout); |
||||
modal.removeClass('modal-loading'); |
||||
modal.trigger('load'); |
||||
$this.showImage(img); |
||||
$this.startSlideShow(); |
||||
}, |
||||
this._loadImageOptions |
||||
); |
||||
this.preloadImages(); |
||||
}, |
||||
showImage: function (img) { |
||||
var modal = this.$element, |
||||
transition = $.support.transition && modal.hasClass('fade'), |
||||
method = transition ? modal.animate : modal.css, |
||||
modalImage = modal.find('.modal-image'), |
||||
clone, |
||||
forceReflow; |
||||
modalImage.css({ |
||||
width: img.width, |
||||
height: img.height |
||||
}); |
||||
modal.find('.modal-title').css({ width: Math.max(img.width, 380) }); |
||||
if (transition) { |
||||
clone = modal.clone().hide().appendTo(document.body); |
||||
} |
||||
if ($(window).width() > 767) { |
||||
method.call(modal.stop(), { |
||||
'margin-top': -((clone || modal).outerHeight() / 2), |
||||
'margin-left': -((clone || modal).outerWidth() / 2) |
||||
}); |
||||
} else { |
||||
modal.css({ |
||||
top: ($(window).height() - (clone || modal).outerHeight()) / 2 |
||||
}); |
||||
} |
||||
if (clone) { |
||||
clone.remove(); |
||||
} |
||||
modalImage.append(img); |
||||
forceReflow = img.offsetWidth; |
||||
modal.trigger('display'); |
||||
if (transition) { |
||||
if (modal.is(':visible')) { |
||||
$(img).on( |
||||
$.support.transition.end, |
||||
function (e) { |
||||
// Make sure we don't respond to other transitions events
|
||||
// in the container element, e.g. from button elements:
|
||||
if (e.target === img) { |
||||
$(img).off($.support.transition.end); |
||||
modal.trigger('displayed'); |
||||
} |
||||
} |
||||
).addClass('in'); |
||||
} else { |
||||
$(img).addClass('in'); |
||||
modal.one('shown', function () { |
||||
modal.trigger('displayed'); |
||||
}); |
||||
} |
||||
} else { |
||||
$(img).addClass('in'); |
||||
modal.trigger('displayed'); |
||||
} |
||||
}, |
||||
abortLoad: function () { |
||||
if (this._loadingImage) { |
||||
this._loadingImage.onload = this._loadingImage.onerror = null; |
||||
} |
||||
window.clearTimeout(this._loadingTimeout); |
||||
}, |
||||
prev: function () { |
||||
var options = this.options; |
||||
options.index -= 1; |
||||
if (options.index < 0) { |
||||
options.index = this.$links.length - 1; |
||||
} |
||||
this.loadImage(); |
||||
}, |
||||
next: function () { |
||||
var options = this.options; |
||||
options.index += 1; |
||||
if (options.index > this.$links.length - 1) { |
||||
options.index = 0; |
||||
} |
||||
this.loadImage(); |
||||
}, |
||||
keyHandler: function (e) { |
||||
switch (e.which) { |
||||
case 37: // left
|
||||
case 38: // up
|
||||
e.preventDefault(); |
||||
this.prev(); |
||||
break; |
||||
case 39: // right
|
||||
case 40: // down
|
||||
e.preventDefault(); |
||||
this.next(); |
||||
break; |
||||
} |
||||
}, |
||||
wheelHandler: function (e) { |
||||
e.preventDefault(); |
||||
e = e.originalEvent; |
||||
this._wheelCounter = this._wheelCounter || 0; |
||||
this._wheelCounter += (e.wheelDelta || e.detail || 0); |
||||
if ((e.wheelDelta && this._wheelCounter >= 120) || |
||||
(!e.wheelDelta && this._wheelCounter < 0)) { |
||||
this.prev(); |
||||
this._wheelCounter = 0; |
||||
} else if ((e.wheelDelta && this._wheelCounter <= -120) || |
||||
(!e.wheelDelta && this._wheelCounter > 0)) { |
||||
this.next(); |
||||
this._wheelCounter = 0; |
||||
} |
||||
}, |
||||
initGalleryEvents: function () { |
||||
var $this = this, |
||||
modal = this.$element; |
||||
modal.find('.modal-image').on('click.modal-gallery', function (e) { |
||||
var modalImage = $(this); |
||||
if ($this.$links.length === 1) { |
||||
$this.hide(); |
||||
} else { |
||||
if ((e.pageX - modalImage.offset().left) / modalImage.width() < |
||||
$this.options.imageClickDivision) { |
||||
$this.prev(e); |
||||
} else { |
||||
$this.next(e); |
||||
} |
||||
} |
||||
}); |
||||
modal.find('.modal-prev').on('click.modal-gallery', function (e) { |
||||
$this.prev(e); |
||||
}); |
||||
modal.find('.modal-next').on('click.modal-gallery', function (e) { |
||||
$this.next(e); |
||||
}); |
||||
modal.find('.modal-slideshow').on('click.modal-gallery', function (e) { |
||||
$this.toggleSlideShow(e); |
||||
}); |
||||
$(document) |
||||
.on('keydown.modal-gallery', function (e) { |
||||
$this.keyHandler(e); |
||||
}) |
||||
.on( |
||||
'mousewheel.modal-gallery, DOMMouseScroll.modal-gallery', |
||||
function (e) { |
||||
$this.wheelHandler(e); |
||||
} |
||||
); |
||||
}, |
||||
destroyGalleryEvents: function () { |
||||
var modal = this.$element; |
||||
this.abortLoad(); |
||||
this.stopSlideShow(); |
||||
modal.find('.modal-image, .modal-prev, .modal-next, .modal-slideshow') |
||||
.off('click.modal-gallery'); |
||||
$(document) |
||||
.off('keydown.modal-gallery') |
||||
.off('mousewheel.modal-gallery, DOMMouseScroll.modal-gallery'); |
||||
}, |
||||
show: function () { |
||||
if (!this.isShown && this.$element.hasClass('modal-gallery')) { |
||||
var modal = this.$element, |
||||
options = this.options, |
||||
windowWidth = $(window).width(), |
||||
windowHeight = $(window).height(); |
||||
if (modal.hasClass('modal-fullscreen')) { |
||||
this._loadImageOptions = { |
||||
maxWidth: windowWidth, |
||||
maxHeight: windowHeight, |
||||
canvas: options.canvas |
||||
}; |
||||
if (modal.hasClass('modal-fullscreen-stretch')) { |
||||
this._loadImageOptions.minWidth = windowWidth; |
||||
this._loadImageOptions.minHeight = windowHeight; |
||||
} |
||||
} else { |
||||
this._loadImageOptions = { |
||||
maxWidth: windowWidth - options.offsetWidth, |
||||
maxHeight: windowHeight - options.offsetHeight, |
||||
canvas: options.canvas |
||||
}; |
||||
} |
||||
if (windowWidth > 767) { |
||||
modal.css({ |
||||
'margin-top': -(modal.outerHeight() / 2), |
||||
'margin-left': -(modal.outerWidth() / 2) |
||||
}); |
||||
} else { |
||||
modal.css({ |
||||
top: ($(window).height() - modal.outerHeight()) / 2 |
||||
}); |
||||
} |
||||
this.initGalleryEvents(); |
||||
this.initLinks(); |
||||
if (this.$links.length) { |
||||
modal.find('.modal-slideshow, .modal-prev, .modal-next') |
||||
.toggle(this.$links.length !== 1); |
||||
modal.toggleClass( |
||||
'modal-single', |
||||
this.$links.length === 1 |
||||
); |
||||
this.loadImage(); |
||||
} |
||||
} |
||||
originalShow.apply(this, arguments); |
||||
}, |
||||
hide: function () { |
||||
if (this.isShown && this.$element.hasClass('modal-gallery')) { |
||||
this.options.delegate = document; |
||||
this.options.href = null; |
||||
this.destroyGalleryEvents(); |
||||
} |
||||
originalHide.apply(this, arguments); |
||||
} |
||||
}); |
||||
$(function () { |
||||
$(document.body).on( |
||||
'click.modal-gallery.data-api', |
||||
'[data-toggle="modal-gallery"]', |
||||
function (e) { |
||||
var $this = $(this), |
||||
options = $this.data(), |
||||
modal = $(options.target), |
||||
data = modal.data('modal'), |
||||
link; |
||||
if (!data) { |
||||
options = $.extend(modal.data(), options); |
||||
} |
||||
if (!options.selector) { |
||||
options.selector = 'a[data-gallery=gallery]'; |
||||
} |
||||
link = $(e.target).closest(options.selector); |
||||
if (link.length && modal.length) { |
||||
e.preventDefault(); |
||||
options.href = link.prop('href') || link.data('href'); |
||||
options.delegate = link[0] !== this ? this : document; |
||||
if (data) { |
||||
$.extend(data.options, options); |
||||
} |
||||
modal.modal(options); |
||||
} |
||||
} |
||||
); |
||||
}); |
||||
})); |
File diff suppressed because one or more lines are too long
@ -1,218 +0,0 @@
@@ -1,218 +0,0 @@
|
||||
/* ========================================================= |
||||
* bootstrap-modal.js v2.0.4 |
||||
* http://twitter.github.com/bootstrap/javascript.html#modals
|
||||
* ========================================================= |
||||
* Copyright 2012 Twitter, Inc. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
* ========================================================= */ |
||||
|
||||
|
||||
!function ($) { |
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* MODAL CLASS DEFINITION |
||||
* ====================== */ |
||||
|
||||
var Modal = function (content, options) { |
||||
this.options = options |
||||
this.$element = $(content) |
||||
.delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) |
||||
} |
||||
|
||||
Modal.prototype = { |
||||
|
||||
constructor: Modal |
||||
|
||||
, toggle: function () { |
||||
return this[!this.isShown ? 'show' : 'hide']() |
||||
} |
||||
|
||||
, show: function () { |
||||
var that = this |
||||
, e = $.Event('show') |
||||
|
||||
this.$element.trigger(e) |
||||
|
||||
if (this.isShown || e.isDefaultPrevented()) return |
||||
|
||||
$('body').addClass('modal-open') |
||||
|
||||
this.isShown = true |
||||
|
||||
escape.call(this) |
||||
backdrop.call(this, function () { |
||||
var transition = $.support.transition && that.$element.hasClass('fade') |
||||
|
||||
if (!that.$element.parent().length) { |
||||
that.$element.appendTo(document.body) //don't move modals dom position
|
||||
} |
||||
|
||||
that.$element |
||||
.show() |
||||
|
||||
if (transition) { |
||||
that.$element[0].offsetWidth // force reflow
|
||||
} |
||||
|
||||
that.$element.addClass('in') |
||||
|
||||
transition ? |
||||
that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) : |
||||
that.$element.trigger('shown') |
||||
|
||||
}) |
||||
} |
||||
|
||||
, hide: function (e) { |
||||
e && e.preventDefault() |
||||
|
||||
var that = this |
||||
|
||||
e = $.Event('hide') |
||||
|
||||
this.$element.trigger(e) |
||||
|
||||
if (!this.isShown || e.isDefaultPrevented()) return |
||||
|
||||
this.isShown = false |
||||
|
||||
$('body').removeClass('modal-open') |
||||
|
||||
escape.call(this) |
||||
|
||||
this.$element.removeClass('in') |
||||
|
||||
$.support.transition && this.$element.hasClass('fade') ? |
||||
hideWithTransition.call(this) : |
||||
hideModal.call(this) |
||||
} |
||||
|
||||
} |
||||
|
||||
|
||||
/* MODAL PRIVATE METHODS |
||||
* ===================== */ |
||||
|
||||
function hideWithTransition() { |
||||
var that = this |
||||
, timeout = setTimeout(function () { |
||||
that.$element.off($.support.transition.end) |
||||
hideModal.call(that) |
||||
}, 500) |
||||
|
||||
this.$element.one($.support.transition.end, function () { |
||||
clearTimeout(timeout) |
||||
hideModal.call(that) |
||||
}) |
||||
} |
||||
|
||||
function hideModal(that) { |
||||
this.$element |
||||
.hide() |
||||
.trigger('hidden') |
||||
|
||||
backdrop.call(this) |
||||
} |
||||
|
||||
function backdrop(callback) { |
||||
var that = this |
||||
, animate = this.$element.hasClass('fade') ? 'fade' : '' |
||||
|
||||
if (this.isShown && this.options.backdrop) { |
||||
var doAnimate = $.support.transition && animate |
||||
|
||||
this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') |
||||
.appendTo(document.body) |
||||
|
||||
if (this.options.backdrop != 'static') { |
||||
this.$backdrop.click($.proxy(this.hide, this)) |
||||
} |
||||
|
||||
if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
|
||||
|
||||
this.$backdrop.addClass('in') |
||||
|
||||
doAnimate ? |
||||
this.$backdrop.one($.support.transition.end, callback) : |
||||
callback() |
||||
|
||||
} else if (!this.isShown && this.$backdrop) { |
||||
this.$backdrop.removeClass('in') |
||||
|
||||
$.support.transition && this.$element.hasClass('fade')? |
||||
this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) : |
||||
removeBackdrop.call(this) |
||||
|
||||
} else if (callback) { |
||||
callback() |
||||
} |
||||
} |
||||
|
||||
function removeBackdrop() { |
||||
this.$backdrop.remove() |
||||
this.$backdrop = null |
||||
} |
||||
|
||||
function escape() { |
||||
var that = this |
||||
if (this.isShown && this.options.keyboard) { |
||||
$(document).on('keyup.dismiss.modal', function ( e ) { |
||||
e.which == 27 && that.hide() |
||||
}) |
||||
} else if (!this.isShown) { |
||||
$(document).off('keyup.dismiss.modal') |
||||
} |
||||
} |
||||
|
||||
|
||||
/* MODAL PLUGIN DEFINITION |
||||
* ======================= */ |
||||
|
||||
$.fn.modal = function (option) { |
||||
return this.each(function () { |
||||
var $this = $(this) |
||||
, data = $this.data('modal') |
||||
, options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option) |
||||
if (!data) $this.data('modal', (data = new Modal(this, options))) |
||||
if (typeof option == 'string') data[option]() |
||||
else if (options.show) data.show() |
||||
}) |
||||
} |
||||
|
||||
$.fn.modal.defaults = { |
||||
backdrop: true |
||||
, keyboard: true |
||||
, show: true |
||||
} |
||||
|
||||
$.fn.modal.Constructor = Modal |
||||
|
||||
|
||||
/* MODAL DATA-API |
||||
* ============== */ |
||||
|
||||
$(function () { |
||||
$('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) { |
||||
var $this = $(this), href |
||||
, $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
|
||||
, option = $target.data('modal') ? 'toggle' : $.extend({}, $target.data(), $this.data()) |
||||
|
||||
e.preventDefault() |
||||
$target.modal(option) |
||||
}) |
||||
}) |
||||
|
||||
}(window.jQuery); |
@ -1,98 +0,0 @@
@@ -1,98 +0,0 @@
|
||||
/* =========================================================== |
||||
* bootstrap-popover.js v2.0.4 |
||||
* http://twitter.github.com/bootstrap/javascript.html#popovers
|
||||
* =========================================================== |
||||
* Copyright 2012 Twitter, Inc. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
* =========================================================== */ |
||||
|
||||
|
||||
!function ($) { |
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* POPOVER PUBLIC CLASS DEFINITION |
||||
* =============================== */ |
||||
|
||||
var Popover = function ( element, options ) { |
||||
this.init('popover', element, options) |
||||
} |
||||
|
||||
|
||||
/* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js |
||||
========================================== */ |
||||
|
||||
Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, { |
||||
|
||||
constructor: Popover |
||||
|
||||
, setContent: function () { |
||||
var $tip = this.tip() |
||||
, title = this.getTitle() |
||||
, content = this.getContent() |
||||
|
||||
$tip.find('.popover-title')[this.isHTML(title) ? 'html' : 'text'](title) |
||||
$tip.find('.popover-content > *')[this.isHTML(content) ? 'html' : 'text'](content) |
||||
|
||||
$tip.removeClass('fade top bottom left right in') |
||||
} |
||||
|
||||
, hasContent: function () { |
||||
return this.getTitle() || this.getContent() |
||||
} |
||||
|
||||
, getContent: function () { |
||||
var content |
||||
, $e = this.$element |
||||
, o = this.options |
||||
|
||||
content = $e.attr('data-content') |
||||
|| (typeof o.content == 'function' ? o.content.call($e[0]) : o.content) |
||||
|
||||
return content |
||||
} |
||||
|
||||
, tip: function () { |
||||
if (!this.$tip) { |
||||
this.$tip = $(this.options.template) |
||||
} |
||||
return this.$tip |
||||
} |
||||
|
||||
}) |
||||
|
||||
|
||||
/* POPOVER PLUGIN DEFINITION |
||||
* ======================= */ |
||||
|
||||
$.fn.popover = function (option) { |
||||
return this.each(function () { |
||||
var $this = $(this) |
||||
, data = $this.data('popover') |
||||
, options = typeof option == 'object' && option |
||||
if (!data) $this.data('popover', (data = new Popover(this, options))) |
||||
if (typeof option == 'string') data[option]() |
||||
}) |
||||
} |
||||
|
||||
$.fn.popover.Constructor = Popover |
||||
|
||||
$.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, { |
||||
placement: 'right' |
||||
, content: '' |
||||
, template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>' |
||||
}) |
||||
|
||||
}(window.jQuery); |
File diff suppressed because it is too large
Load Diff
@ -1,151 +0,0 @@
@@ -1,151 +0,0 @@
|
||||
/* ============================================================= |
||||
* bootstrap-scrollspy.js v2.0.4 |
||||
* http://twitter.github.com/bootstrap/javascript.html#scrollspy
|
||||
* ============================================================= |
||||
* Copyright 2012 Twitter, Inc. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
* ============================================================== */ |
||||
|
||||
|
||||
!function ($) { |
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* SCROLLSPY CLASS DEFINITION |
||||
* ========================== */ |
||||
|
||||
function ScrollSpy( element, options) { |
||||
var process = $.proxy(this.process, this) |
||||
, $element = $(element).is('body') ? $(window) : $(element) |
||||
, href |
||||
this.options = $.extend({}, $.fn.scrollspy.defaults, options) |
||||
this.$scrollElement = $element.on('scroll.scroll.data-api', process) |
||||
this.selector = (this.options.target |
||||
|| ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
|
||||
|| '') + ' .nav li > a' |
||||
this.$body = $('body') |
||||
this.refresh() |
||||
this.process() |
||||
} |
||||
|
||||
ScrollSpy.prototype = { |
||||
|
||||
constructor: ScrollSpy |
||||
|
||||
, refresh: function () { |
||||
var self = this |
||||
, $targets |
||||
|
||||
this.offsets = $([]) |
||||
this.targets = $([]) |
||||
|
||||
$targets = this.$body |
||||
.find(this.selector) |
||||
.map(function () { |
||||
var $el = $(this) |
||||
, href = $el.data('target') || $el.attr('href') |
||||
, $href = /^#\w/.test(href) && $(href) |
||||
return ( $href |
||||
&& href.length |
||||
&& [[ $href.position().top, href ]] ) || null |
||||
}) |
||||
.sort(function (a, b) { return a[0] - b[0] }) |
||||
.each(function () { |
||||
self.offsets.push(this[0]) |
||||
self.targets.push(this[1]) |
||||
}) |
||||
} |
||||
|
||||
, process: function () { |
||||
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset |
||||
, scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight |
||||
, maxScroll = scrollHeight - this.$scrollElement.height() |
||||
, offsets = this.offsets |
||||
, targets = this.targets |
||||
, activeTarget = this.activeTarget |
||||
, i |
||||
|
||||
if (scrollTop >= maxScroll) { |
||||
return activeTarget != (i = targets.last()[0]) |
||||
&& this.activate ( i ) |
||||
} |
||||
|
||||
for (i = offsets.length; i--;) { |
||||
activeTarget != targets[i] |
||||
&& scrollTop >= offsets[i] |
||||
&& (!offsets[i + 1] || scrollTop <= offsets[i + 1]) |
||||
&& this.activate( targets[i] ) |
||||
} |
||||
} |
||||
|
||||
, activate: function (target) { |
||||
var active |
||||
, selector |
||||
|
||||
this.activeTarget = target |
||||
|
||||
$(this.selector) |
||||
.parent('.active') |
||||
.removeClass('active') |
||||
|
||||
selector = this.selector |
||||
+ '[data-target="' + target + '"],' |
||||
+ this.selector + '[href="' + target + '"]' |
||||
|
||||
active = $(selector) |
||||
.parent('li') |
||||
.addClass('active') |
||||
|
||||
if (active.parent('.dropdown-menu')) { |
||||
active = active.closest('li.dropdown').addClass('active') |
||||
} |
||||
|
||||
active.trigger('activate') |
||||
} |
||||
|
||||
} |
||||
|
||||
|
||||
/* SCROLLSPY PLUGIN DEFINITION |
||||
* =========================== */ |
||||
|
||||
$.fn.scrollspy = function ( option ) { |
||||
return this.each(function () { |
||||
var $this = $(this) |
||||
, data = $this.data('scrollspy') |
||||
, options = typeof option == 'object' && option |
||||
if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options))) |
||||
if (typeof option == 'string') data[option]() |
||||
}) |
||||
} |
||||
|
||||
$.fn.scrollspy.Constructor = ScrollSpy |
||||
|
||||
$.fn.scrollspy.defaults = { |
||||
offset: 10 |
||||
} |
||||
|
||||
|
||||
/* SCROLLSPY DATA-API |
||||
* ================== */ |
||||
|
||||
$(function () { |
||||
$('[data-spy="scroll"]').each(function () { |
||||
var $spy = $(this) |
||||
$spy.scrollspy($spy.data()) |
||||
}) |
||||
}) |
||||
|
||||
}(window.jQuery); |
@ -1,135 +0,0 @@
@@ -1,135 +0,0 @@
|
||||
/* ======================================================== |
||||
* bootstrap-tab.js v2.0.4 |
||||
* http://twitter.github.com/bootstrap/javascript.html#tabs
|
||||
* ======================================================== |
||||
* Copyright 2012 Twitter, Inc. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
* ======================================================== */ |
||||
|
||||
|
||||
!function ($) { |
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* TAB CLASS DEFINITION |
||||
* ==================== */ |
||||
|
||||
var Tab = function ( element ) { |
||||
this.element = $(element) |
||||
} |
||||
|
||||
Tab.prototype = { |
||||
|
||||
constructor: Tab |
||||
|
||||
, show: function () { |
||||
var $this = this.element |
||||
, $ul = $this.closest('ul:not(.dropdown-menu)') |
||||
, selector = $this.attr('data-target') |
||||
, previous |
||||
, $target |
||||
, e |
||||
|
||||
if (!selector) { |
||||
selector = $this.attr('href') |
||||
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
|
||||
} |
||||
|
||||
if ( $this.parent('li').hasClass('active') ) return |
||||
|
||||
previous = $ul.find('.active a').last()[0] |
||||
|
||||
e = $.Event('show', { |
||||
relatedTarget: previous |
||||
}) |
||||
|
||||
$this.trigger(e) |
||||
|
||||
if (e.isDefaultPrevented()) return |
||||
|
||||
$target = $(selector) |
||||
|
||||
this.activate($this.parent('li'), $ul) |
||||
this.activate($target, $target.parent(), function () { |
||||
$this.trigger({ |
||||
type: 'shown' |
||||
, relatedTarget: previous |
||||
}) |
||||
}) |
||||
} |
||||
|
||||
, activate: function ( element, container, callback) { |
||||
var $active = container.find('> .active') |
||||
, transition = callback |
||||
&& $.support.transition |
||||
&& $active.hasClass('fade') |
||||
|
||||
function next() { |
||||
$active |
||||
.removeClass('active') |
||||
.find('> .dropdown-menu > .active') |
||||
.removeClass('active') |
||||
|
||||
element.addClass('active') |
||||
|
||||
if (transition) { |
||||
element[0].offsetWidth // reflow for transition
|
||||
element.addClass('in') |
||||
} else { |
||||
element.removeClass('fade') |
||||
} |
||||
|
||||
if ( element.parent('.dropdown-menu') ) { |
||||
element.closest('li.dropdown').addClass('active') |
||||
} |
||||
|
||||
callback && callback() |
||||
} |
||||
|
||||
transition ? |
||||
$active.one($.support.transition.end, next) : |
||||
next() |
||||
|
||||
$active.removeClass('in') |
||||
} |
||||
} |
||||
|
||||
|
||||
/* TAB PLUGIN DEFINITION |
||||
* ===================== */ |
||||
|
||||
$.fn.tab = function ( option ) { |
||||
return this.each(function () { |
||||
var $this = $(this) |
||||
, data = $this.data('tab') |
||||
if (!data) $this.data('tab', (data = new Tab(this))) |
||||
if (typeof option == 'string') data[option]() |
||||
}) |
||||
} |
||||
|
||||
$.fn.tab.Constructor = Tab |
||||
|
||||
|
||||
/* TAB DATA-API |
||||
* ============ */ |
||||
|
||||
$(function () { |
||||
$('body').on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { |
||||
e.preventDefault() |
||||
$(this).tab('show') |
||||
}) |
||||
}) |
||||
|
||||
}(window.jQuery); |
@ -1,275 +0,0 @@
@@ -1,275 +0,0 @@
|
||||
/* =========================================================== |
||||
* bootstrap-tooltip.js v2.0.4 |
||||
* http://twitter.github.com/bootstrap/javascript.html#tooltips
|
||||
* Inspired by the original jQuery.tipsy by Jason Frame |
||||
* =========================================================== |
||||
* Copyright 2012 Twitter, Inc. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
* ========================================================== */ |
||||
|
||||
|
||||
!function ($) { |
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* TOOLTIP PUBLIC CLASS DEFINITION |
||||
* =============================== */ |
||||
|
||||
var Tooltip = function (element, options) { |
||||
this.init('tooltip', element, options) |
||||
} |
||||
|
||||
Tooltip.prototype = { |
||||
|
||||
constructor: Tooltip |
||||
|
||||
, init: function (type, element, options) { |
||||
var eventIn |
||||
, eventOut |
||||
|
||||
this.type = type |
||||
this.$element = $(element) |
||||
this.options = this.getOptions(options) |
||||
this.enabled = true |
||||
|
||||
if (this.options.trigger != 'manual') { |
||||
eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus' |
||||
eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur' |
||||
this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this)) |
||||
this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this)) |
||||
} |
||||
|
||||
this.options.selector ? |
||||
(this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : |
||||
this.fixTitle() |
||||
} |
||||
|
||||
, getOptions: function (options) { |
||||
options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data()) |
||||
|
||||
if (options.delay && typeof options.delay == 'number') { |
||||
options.delay = { |
||||
show: options.delay |
||||
, hide: options.delay |
||||
} |
||||
} |
||||
|
||||
return options |
||||
} |
||||
|
||||
, enter: function (e) { |
||||
var self = $(e.currentTarget)[this.type](this._options).data(this.type) |
||||
|
||||
if (!self.options.delay || !self.options.delay.show) return self.show() |
||||
|
||||
clearTimeout(this.timeout) |
||||
self.hoverState = 'in' |
||||
this.timeout = setTimeout(function() { |
||||
if (self.hoverState == 'in') self.show() |
||||
}, self.options.delay.show) |
||||
} |
||||
|
||||
, leave: function (e) { |
||||
var self = $(e.currentTarget)[this.type](this._options).data(this.type) |
||||
|
||||
if (this.timeout) clearTimeout(this.timeout) |
||||
if (!self.options.delay || !self.options.delay.hide) return self.hide() |
||||
|
||||
self.hoverState = 'out' |
||||
this.timeout = setTimeout(function() { |
||||
if (self.hoverState == 'out') self.hide() |
||||
}, self.options.delay.hide) |
||||
} |
||||
|
||||
, show: function () { |
||||
var $tip |
||||
, inside |
||||
, pos |
||||
, actualWidth |
||||
, actualHeight |
||||
, placement |
||||
, tp |
||||
|
||||
if (this.hasContent() && this.enabled) { |
||||
$tip = this.tip() |
||||
this.setContent() |
||||
|
||||
if (this.options.animation) { |
||||
$tip.addClass('fade') |
||||
} |
||||
|
||||
placement = typeof this.options.placement == 'function' ? |
||||
this.options.placement.call(this, $tip[0], this.$element[0]) : |
||||
this.options.placement |
||||
|
||||
inside = /in/.test(placement) |
||||
|
||||
$tip |
||||
.remove() |
||||
.css({ top: 0, left: 0, display: 'block' }) |
||||
.appendTo(inside ? this.$element : document.body) |
||||
|
||||
pos = this.getPosition(inside) |
||||
|
||||
actualWidth = $tip[0].offsetWidth |
||||
actualHeight = $tip[0].offsetHeight |
||||
|
||||
switch (inside ? placement.split(' ')[1] : placement) { |
||||
case 'bottom': |
||||
tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2} |
||||
break |
||||
case 'top': |
||||
tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2} |
||||
break |
||||
case 'left': |
||||
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth} |
||||
break |
||||
case 'right': |
||||
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width} |
||||
break |
||||
} |
||||
|
||||
$tip |
||||
.css(tp) |
||||
.addClass(placement) |
||||
.addClass('in') |
||||
} |
||||
} |
||||
|
||||
, isHTML: function(text) { |
||||
// html string detection logic adapted from jQuery
|
||||
return typeof text != 'string' |
||||
|| ( text.charAt(0) === "<" |
||||
&& text.charAt( text.length - 1 ) === ">" |
||||
&& text.length >= 3 |
||||
) || /^(?:[^<]*<[\w\W]+>[^>]*$)/.exec(text) |
||||
} |
||||
|
||||
, setContent: function () { |
||||
var $tip = this.tip() |
||||
, title = this.getTitle() |
||||
|
||||
$tip.find('.tooltip-inner')[this.isHTML(title) ? 'html' : 'text'](title) |
||||
$tip.removeClass('fade in top bottom left right') |
||||
} |
||||
|
||||
, hide: function () { |
||||
var that = this |
||||
, $tip = this.tip() |
||||
|
||||
$tip.removeClass('in') |
||||
|
||||
function removeWithAnimation() { |
||||
var timeout = setTimeout(function () { |
||||
$tip.off($.support.transition.end).remove() |
||||
}, 500) |
||||
|
||||
$tip.one($.support.transition.end, function () { |
||||
clearTimeout(timeout) |
||||
$tip.remove() |
||||
}) |
||||
} |
||||
|
||||
$.support.transition && this.$tip.hasClass('fade') ? |
||||
removeWithAnimation() : |
||||
$tip.remove() |
||||
} |
||||
|
||||
, fixTitle: function () { |
||||
var $e = this.$element |
||||
if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') { |
||||
$e.attr('data-original-title', $e.attr('title') || '').removeAttr('title') |
||||
} |
||||
} |
||||
|
||||
, hasContent: function () { |
||||
return this.getTitle() |
||||
} |
||||
|
||||
, getPosition: function (inside) { |
||||
return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), { |
||||
width: this.$element[0].offsetWidth |
||||
, height: this.$element[0].offsetHeight |
||||
}) |
||||
} |
||||
|
||||
, getTitle: function () { |
||||
var title |
||||
, $e = this.$element |
||||
, o = this.options |
||||
|
||||
title = $e.attr('data-original-title') |
||||
|| (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) |
||||
|
||||
return title |
||||
} |
||||
|
||||
, tip: function () { |
||||
return this.$tip = this.$tip || $(this.options.template) |
||||
} |
||||
|
||||
, validate: function () { |
||||
if (!this.$element[0].parentNode) { |
||||
this.hide() |
||||
this.$element = null |
||||
this.options = null |
||||
} |
||||
} |
||||
|
||||
, enable: function () { |
||||
this.enabled = true |
||||
} |
||||
|
||||
, disable: function () { |
||||
this.enabled = false |
||||
} |
||||
|
||||
, toggleEnabled: function () { |
||||
this.enabled = !this.enabled |
||||
} |
||||
|
||||
, toggle: function () { |
||||
this[this.tip().hasClass('in') ? 'hide' : 'show']() |
||||
} |
||||
|
||||
} |
||||
|
||||
|
||||
/* TOOLTIP PLUGIN DEFINITION |
||||
* ========================= */ |
||||
|
||||
$.fn.tooltip = function ( option ) { |
||||
return this.each(function () { |
||||
var $this = $(this) |
||||
, data = $this.data('tooltip') |
||||
, options = typeof option == 'object' && option |
||||
if (!data) $this.data('tooltip', (data = new Tooltip(this, options))) |
||||
if (typeof option == 'string') data[option]() |
||||
}) |
||||
} |
||||
|
||||
$.fn.tooltip.Constructor = Tooltip |
||||
|
||||
$.fn.tooltip.defaults = { |
||||
animation: true |
||||
, placement: 'top' |
||||
, selector: false |
||||
, template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' |
||||
, trigger: 'hover' |
||||
, title: '' |
||||
, delay: 0 |
||||
} |
||||
|
||||
}(window.jQuery); |
@ -1,61 +0,0 @@
@@ -1,61 +0,0 @@
|
||||
/* =================================================== |
||||
* bootstrap-transition.js v2.0.4 |
||||
* http://twitter.github.com/bootstrap/javascript.html#transitions
|
||||
* =================================================== |
||||
* Copyright 2012 Twitter, Inc. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
* ========================================================== */ |
||||
|
||||
|
||||
!function ($) { |
||||
|
||||
$(function () { |
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* CSS TRANSITION SUPPORT (http://www.modernizr.com/) |
||||
* ======================================================= */ |
||||
|
||||
$.support.transition = (function () { |
||||
|
||||
var transitionEnd = (function () { |
||||
|
||||
var el = document.createElement('bootstrap') |
||||
, transEndEventNames = { |
||||
'WebkitTransition' : 'webkitTransitionEnd' |
||||
, 'MozTransition' : 'transitionend' |
||||
, 'OTransition' : 'oTransitionEnd' |
||||
, 'msTransition' : 'MSTransitionEnd' |
||||
, 'transition' : 'transitionend' |
||||
} |
||||
, name |
||||
|
||||
for (name in transEndEventNames){ |
||||
if (el.style[name] !== undefined) { |
||||
return transEndEventNames[name] |
||||
} |
||||
} |
||||
|
||||
}()) |
||||
|
||||
return transitionEnd && { |
||||
end: transitionEnd |
||||
} |
||||
|
||||
})() |
||||
|
||||
}) |
||||
|
||||
}(window.jQuery); |
@ -1,285 +0,0 @@
@@ -1,285 +0,0 @@
|
||||
/* ============================================================= |
||||
* bootstrap-typeahead.js v2.0.4 |
||||
* http://twitter.github.com/bootstrap/javascript.html#typeahead
|
||||
* ============================================================= |
||||
* Copyright 2012 Twitter, Inc. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
* ============================================================ */ |
||||
|
||||
|
||||
!function($){ |
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* TYPEAHEAD PUBLIC CLASS DEFINITION |
||||
* ================================= */ |
||||
|
||||
var Typeahead = function (element, options) { |
||||
this.$element = $(element) |
||||
this.options = $.extend({}, $.fn.typeahead.defaults, options) |
||||
this.matcher = this.options.matcher || this.matcher |
||||
this.sorter = this.options.sorter || this.sorter |
||||
this.highlighter = this.options.highlighter || this.highlighter |
||||
this.updater = this.options.updater || this.updater |
||||
this.$menu = $(this.options.menu).appendTo('body') |
||||
this.source = this.options.source |
||||
this.shown = false |
||||
this.listen() |
||||
} |
||||
|
||||
Typeahead.prototype = { |
||||
|
||||
constructor: Typeahead |
||||
|
||||
, select: function () { |
||||
var val = this.$menu.find('.active').attr('data-value') |
||||
this.$element |
||||
.val(this.updater(val)) |
||||
.change() |
||||
return this.hide() |
||||
} |
||||
|
||||
, updater: function (item) { |
||||
return item |
||||
} |
||||
|
||||
, show: function () { |
||||
var pos = $.extend({}, this.$element.offset(), { |
||||
height: this.$element[0].offsetHeight |
||||
}) |
||||
|
||||
this.$menu.css({ |
||||
top: pos.top + pos.height |
||||
, left: pos.left |
||||
}) |
||||
|
||||
this.$menu.show() |
||||
this.shown = true |
||||
return this |
||||
} |
||||
|
||||
, hide: function () { |
||||
this.$menu.hide() |
||||
this.shown = false |
||||
return this |
||||
} |
||||
|
||||
, lookup: function (event) { |
||||
var that = this |
||||
, items |
||||
, q |
||||
|
||||
this.query = this.$element.val() |
||||
|
||||
if (!this.query) { |
||||
return this.shown ? this.hide() : this |
||||
} |
||||
|
||||
items = $.grep(this.source, function (item) { |
||||
return that.matcher(item) |
||||
}) |
||||
|
||||
items = this.sorter(items) |
||||
|
||||
if (!items.length) { |
||||
return this.shown ? this.hide() : this |
||||
} |
||||
|
||||
return this.render(items.slice(0, this.options.items)).show() |
||||
} |
||||
|
||||
, matcher: function (item) { |
||||
return ~item.toLowerCase().indexOf(this.query.toLowerCase()) |
||||
} |
||||
|
||||
, sorter: function (items) { |
||||
var beginswith = [] |
||||
, caseSensitive = [] |
||||
, caseInsensitive = [] |
||||
, item |
||||
|
||||
while (item = items.shift()) { |
||||
if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item) |
||||
else if (~item.indexOf(this.query)) caseSensitive.push(item) |
||||
else caseInsensitive.push(item) |
||||
} |
||||
|
||||
return beginswith.concat(caseSensitive, caseInsensitive) |
||||
} |
||||
|
||||
, highlighter: function (item) { |
||||
var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&') |
||||
return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) { |
||||
return '<strong>' + match + '</strong>' |
||||
}) |
||||
} |
||||
|
||||
, render: function (items) { |
||||
var that = this |
||||
|
||||
items = $(items).map(function (i, item) { |
||||
i = $(that.options.item).attr('data-value', item) |
||||
i.find('a').html(that.highlighter(item)) |
||||
return i[0] |
||||
}) |
||||
|
||||
items.first().addClass('active') |
||||
this.$menu.html(items) |
||||
return this |
||||
} |
||||
|
||||
, next: function (event) { |
||||
var active = this.$menu.find('.active').removeClass('active') |
||||
, next = active.next() |
||||
|
||||
if (!next.length) { |
||||
next = $(this.$menu.find('li')[0]) |
||||
} |
||||
|
||||
next.addClass('active') |
||||
} |
||||
|
||||
, prev: function (event) { |
||||
var active = this.$menu.find('.active').removeClass('active') |
||||
, prev = active.prev() |
||||
|
||||
if (!prev.length) { |
||||
prev = this.$menu.find('li').last() |
||||
} |
||||
|
||||
prev.addClass('active') |
||||
} |
||||
|
||||
, listen: function () { |
||||
this.$element |
||||
.on('blur', $.proxy(this.blur, this)) |
||||
.on('keypress', $.proxy(this.keypress, this)) |
||||
.on('keyup', $.proxy(this.keyup, this)) |
||||
|
||||
if ($.browser.webkit || $.browser.msie) { |
||||
this.$element.on('keydown', $.proxy(this.keypress, this)) |
||||
} |
||||
|
||||
this.$menu |
||||
.on('click', $.proxy(this.click, this)) |
||||
.on('mouseenter', 'li', $.proxy(this.mouseenter, this)) |
||||
} |
||||
|
||||
, keyup: function (e) { |
||||
switch(e.keyCode) { |
||||
case 40: // down arrow
|
||||
case 38: // up arrow
|
||||
break |
||||
|
||||
case 9: // tab
|
||||
case 13: // enter
|
||||
if (!this.shown) return |
||||
this.select() |
||||
break |
||||
|
||||
case 27: // escape
|
||||
if (!this.shown) return |
||||
this.hide() |
||||
break |
||||
|
||||
default: |
||||
this.lookup() |
||||
} |
||||
|
||||
e.stopPropagation() |
||||
e.preventDefault() |
||||
} |
||||
|
||||
, keypress: function (e) { |
||||
if (!this.shown) return |
||||
|
||||
switch(e.keyCode) { |
||||
case 9: // tab
|
||||
case 13: // enter
|
||||
case 27: // escape
|
||||
e.preventDefault() |
||||
break |
||||
|
||||
case 38: // up arrow
|
||||
if (e.type != 'keydown') break |
||||
e.preventDefault() |
||||
this.prev() |
||||
break |
||||
|
||||
case 40: // down arrow
|
||||
if (e.type != 'keydown') break |
||||
e.preventDefault() |
||||
this.next() |
||||
break |
||||
} |
||||
|
||||
e.stopPropagation() |
||||
} |
||||
|
||||
, blur: function (e) { |
||||
var that = this |
||||
setTimeout(function () { that.hide() }, 150) |
||||
} |
||||
|
||||
, click: function (e) { |
||||
e.stopPropagation() |
||||
e.preventDefault() |
||||
this.select() |
||||
} |
||||
|
||||
, mouseenter: function (e) { |
||||
this.$menu.find('.active').removeClass('active') |
||||
$(e.currentTarget).addClass('active') |
||||
} |
||||
|
||||
} |
||||
|
||||
|
||||
/* TYPEAHEAD PLUGIN DEFINITION |
||||
* =========================== */ |
||||
|
||||
$.fn.typeahead = function (option) { |
||||
return this.each(function () { |
||||
var $this = $(this) |
||||
, data = $this.data('typeahead') |
||||
, options = typeof option == 'object' && option |
||||
if (!data) $this.data('typeahead', (data = new Typeahead(this, options))) |
||||
if (typeof option == 'string') data[option]() |
||||
}) |
||||
} |
||||
|
||||
$.fn.typeahead.defaults = { |
||||
source: [] |
||||
, items: 8 |
||||
, menu: '<ul class="typeahead dropdown-menu"></ul>' |
||||
, item: '<li><a href="#"></a></li>' |
||||
} |
||||
|
||||
$.fn.typeahead.Constructor = Typeahead |
||||
|
||||
|
||||
/* TYPEAHEAD DATA-API |
||||
* ================== */ |
||||
|
||||
$(function () { |
||||
$('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) { |
||||
var $this = $(this) |
||||
if ($this.data('typeahead')) return |
||||
e.preventDefault() |
||||
$this.typeahead($this.data()) |
||||
}) |
||||
}) |
||||
|
||||
}(window.jQuery); |
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
Before Width: | Height: | Size: 50 B |
@ -1,490 +0,0 @@
@@ -1,490 +0,0 @@
|
||||
|
||||
/* BonBon Buttons 1.1 by simurai.com |
||||
|
||||
1.1 Added unprefixed attributes, :focus style, <button> support |
||||
1.0 Released |
||||
|
||||
Usage: |
||||
|
||||
Default button: <a href="" class="button">Label</a> |
||||
More fancy with icon: <a href="" class="button orange glossy" data-icon="★">Label</a> |
||||
|
||||
Following additional class names are supported: |
||||
|
||||
Color: orange, pink, blue, green, transparent |
||||
Font: serif |
||||
Material: glossy, glass |
||||
Size: xs, xl |
||||
Shape: round, oval, brackets, skew, back, knife, shield, drop, morph |
||||
Icon only: icon |
||||
Disabled: disabled |
||||
|
||||
*/ |
||||
|
||||
|
||||
@import url(http://fonts.googleapis.com/css?family=Droid+Sans:bold+Lobster); |
||||
@import url(http://fonts.googleapis.com/css?family=Lobster); |
||||
|
||||
|
||||
/* -------------- THE button -------------- */ |
||||
.button { |
||||
|
||||
/* text */ |
||||
text-decoration: none; |
||||
font: 24px/1em 'Droid Sans', sans-serif; |
||||
font-weight: bold; |
||||
text-shadow: rgba(255,255,255,.5) 0 1px 0; |
||||
-webkit-user-select: none; |
||||
-moz-user-select: none; |
||||
user-select: none; |
||||
|
||||
|
||||
/* layout */ |
||||
/* |
||||
padding: .5em .6em .4em .6em; |
||||
margin: .5em; |
||||
*/ |
||||
padding: .4em .4em .4em .4em; |
||||
margin: .3em; |
||||
display: inline-block; |
||||
position: relative; |
||||
|
||||
-webkit-border-radius: 8px; |
||||
-moz-border-radius: 8px; |
||||
border-radius: 8px; |
||||
|
||||
/* effects */ |
||||
border-top: 1px solid rgba(255,255,255,0.8); |
||||
border-bottom: 1px solid rgba(0,0,0,0.1); |
||||
|
||||
background-image: -webkit-gradient(radial, 50% 0, 100, 50% 0, 0, from( rgba(255,255,255,0) ), to( rgba(255,255,255,0.7) )), url(noise.png); |
||||
background-image: -moz-radial-gradient(top, ellipse cover, rgba(255,255,255,0.7) 0%, rgba(255,255,255,0) 100%), url(noise.png); |
||||
background-image: gradient(radial, 50% 0, 100, 50% 0, 0, from( rgba(255,255,255,0) ), to( rgba(255,255,255,0.7) )), url(noise.png); |
||||
|
||||
-webkit-transition: background .4s ease-in-out; |
||||
-moz-transition: background .4s ease-in-out; |
||||
transition: background .4s ease-in-out; |
||||
|
||||
/* color */ |
||||
color: hsl(0, 0%, 40%) !important; |
||||
background-color: hsl(0, 0%, 75%); |
||||
|
||||
-webkit-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ |
||||
hsl(0, 0%, 60%) 0 .1em 3px, hsl(0, 0%, 45%) 0 .3em 1px, /* color border */ |
||||
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ |
||||
-moz-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ |
||||
hsl(0, 0%, 60%) 0 .1em 3px, hsl(0, 0%, 45%) 0 .3em 1px, /* color border */ |
||||
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ |
||||
box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ |
||||
hsl(0, 0%, 60%) 0 .1em 3px, hsl(0, 0%, 45%) 0 .3em 1px, /* color border */ |
||||
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ |
||||
} |
||||
|
||||
/* -------------- button (tag) -------------- */ |
||||
|
||||
button.button { |
||||
border-left: none; |
||||
border-right: none; |
||||
} |
||||
button.button:hover { |
||||
cursor: pointer; |
||||
} |
||||
|
||||
|
||||
/* -------------- icon -------------- */ |
||||
.button:before { |
||||
font: 1.2em/0 sans-serif; |
||||
content: attr(data-icon); /* gets the icon value from the custom data attribute and puts it infront of the button label */ |
||||
margin-right: 0.4em; |
||||
} |
||||
|
||||
|
||||
/* icon only */ |
||||
.icon { |
||||
font-weight: normal; |
||||
font-style: normal; |
||||
text-indent: -999em; |
||||
} |
||||
.icon:before { |
||||
margin-right: 0; |
||||
display: block; |
||||
height: 0; |
||||
text-indent: 0px; |
||||
line-height: .75em; |
||||
} |
||||
|
||||
|
||||
|
||||
/* -------------- colours -------------- */ |
||||
|
||||
.button.orange { |
||||
color: hsl(39, 100%, 30%) !important; |
||||
background-color: hsl(39, 100%, 50%); |
||||
|
||||
-webkit-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ |
||||
hsl(39, 100%, 40%) 0 .1em 3px, hsl(39, 100%, 30%) 0 .3em 1px, /* color border */ |
||||
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ |
||||
-moz-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ |
||||
hsl(39, 100%, 40%) 0 .1em 3px, hsl(39, 100%, 30%) 0 .3em 1px, /* color border */ |
||||
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ |
||||
box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ |
||||
hsl(39, 100%, 40%) 0 .1em 3px, hsl(39, 100%, 30%) 0 .3em 1px, /* color border */ |
||||
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ |
||||
} |
||||
.button.orange:hover { background-color: hsl(39, 100%, 65%); } |
||||
|
||||
|
||||
.button.blue { |
||||
color: hsl(208, 50%, 40%) !important; |
||||
background-color: hsl(208, 100%, 75%); |
||||
|
||||
-webkit-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ |
||||
hsl(208, 50%, 55%) 0 .1em 3px, hsl(208, 50%, 40%) 0 .3em 1px, /* color border */ |
||||
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ |
||||
-moz-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ |
||||
hsl(208, 50%, 55%) 0 .1em 3px, hsl(208, 50%, 40%) 0 .3em 1px, /* color border */ |
||||
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ |
||||
box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ |
||||
hsl(208, 50%, 55%) 0 .1em 3px, hsl(208, 50%, 40%) 0 .3em 1px, /* color border */ |
||||
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ |
||||
} |
||||
.button.blue:hover { background-color: hsl(208, 100%, 83%); } |
||||
|
||||
.button.green { |
||||
color: hsl(88, 70%, 30%) !important; |
||||
background-color: hsl(88, 70%, 60%); |
||||
-webkit-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ |
||||
hsl(88, 70%, 40%) 0 .1em 3px, hsl(88, 70%, 30%) 0 .3em 1px, /* color border */ |
||||
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ |
||||
-moz-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ |
||||
hsl(88, 70%, 40%) 0 .1em 3px, hsl(88, 70%, 30%) 0 .3em 1px, /* color border */ |
||||
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ |
||||
box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ |
||||
hsl(88, 70%, 40%) 0 .1em 3px, hsl(88, 70%, 30%) 0 .3em 1px, /* color border */ |
||||
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ |
||||
} |
||||
.button.green:hover { background-color: hsl(88, 70%, 75%); } |
||||
|
||||
.button.pink { |
||||
color: hsl(340, 100%, 30%) !important; |
||||
background-color: hsl(340, 100%, 75%); |
||||
-webkit-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ |
||||
hsl(340, 70%, 50%) 0 .1em 3px, hsl(340, 80%, 40%) 0 .3em 1px, /* color border */ |
||||
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ |
||||
-moz-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ |
||||
hsl(340, 70%, 50%) 0 .1em 3px, hsl(340, 80%, 40%) 0 .3em 1px, /* color border */ |
||||
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ |
||||
box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ |
||||
hsl(340, 70%, 50%) 0 .1em 3px, hsl(340, 80%, 40%) 0 .3em 1px, /* color border */ |
||||
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ |
||||
} |
||||
.button.pink:hover { background-color: hsl(340, 100%, 83%); } |
||||
|
||||
|
||||
|
||||
.button.transparent { |
||||
color: rgba(0,0,0,0.5) !important; |
||||
} |
||||
.button.transparent, .button.transparent:hover, .button.transparent:active { |
||||
background-color: transparent; |
||||
background-image: none; |
||||
} |
||||
.button.transparent:hover { |
||||
opacity: .9; |
||||
} |
||||
|
||||
|
||||
|
||||
/* -------------- States -------------- */ |
||||
|
||||
.button:hover { |
||||
background-color: hsl(0, 0%, 83%); |
||||
} |
||||
|
||||
|
||||
|
||||
.button:active { |
||||
background-image: -webkit-gradient(radial, 50% 0, 100, 50% 0, 0, from( rgba(255,255,255,0) ), to( rgba(255,255,255,0) )), url(noise.png); |
||||
background-image: -moz-gradient(radial, 50% 0, 100, 50% 0, 0, from( rgba(255,255,255,0) ), to( rgba(255,255,255,0) )), url(noise.png); |
||||
background-image: gradient(radial, 50% 0, 100, 50% 0, 0, from( rgba(255,255,255,0) ), to( rgba(255,255,255,0) )), url(noise.png); |
||||
|
||||
-webkit-box-shadow: inset rgba(255,255,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.2) 0 -0.1em .3em, /* inner shadow */ |
||||
rgba(0,0,0,0.4) 0 .1em 1px, /* border */ |
||||
rgba(0,0,0,0.2) 0 .2em 6px; /* drop shadow */ |
||||
-moz-box-shadow: inset rgba(255,255,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.2) 0 -0.1em .3em, /* inner shadow */ |
||||
rgba(0,0,0,0.4) 0 .1em 1px, /* border */ |
||||
rgba(0,0,0,0.2) 0 .2em 6px; /* drop shadow */ |
||||
box-shadow: inset rgba(255,255,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.2) 0 -0.1em .3em, /* inner shadow */ |
||||
rgba(0,0,0,0.4) 0 .1em 1px, /* border */ |
||||
rgba(0,0,0,0.2) 0 .2em 6px; /* drop shadow */ |
||||
|
||||
-webkit-transform: translateY(.2em); |
||||
-moz-transform: translateY(.2em); |
||||
transform: translateY(.2em); |
||||
} |
||||
|
||||
.button:focus { |
||||
outline: none; |
||||
color: rgba(254,255,255,0.9) !important; |
||||
text-shadow: rgba(0,0,0,0.2) 0 1px 2px; |
||||
} |
||||
|
||||
|
||||
.button[disabled], .button[disabled]:hover, .button.disabled, .button.disabled:hover { |
||||
opacity: .5; |
||||
cursor: default; |
||||
color: rgba(0,0,0,0.2) !important; |
||||
text-shadow: none !important; |
||||
background-color: rgba(0,0,0,0.05); |
||||
background-image: none; |
||||
border-top: none; |
||||
|
||||
-webkit-box-shadow: inset rgba(255,254,255,0.4) 0 0.3em .3em, inset rgba(0,0,0,0.1) 0 -0.1em .3em, /* inner shadow */ |
||||
rgba(0,0,0,0.3) 0 .1em 1px, /* border */ |
||||
rgba(0,0,0,0.2) 0 .2em 6px; /* drop shadow */ |
||||
-moz-box-shadow: inset rgba(255,254,255,0.4) 0 0.3em .3em, inset rgba(0,0,0,0.1) 0 -0.1em .3em, /* inner shadow */ |
||||
rgba(0,0,0,0.3) 0 .1em 1px, /* border */ |
||||
rgba(0,0,0,0.2) 0 .2em 6px; /* drop shadow */ |
||||
box-shadow: inset rgba(255,254,255,0.4) 0 0.3em .3em, inset rgba(0,0,0,0.1) 0 -0.1em .3em, /* inner shadow */ |
||||
rgba(0,0,0,0.3) 0 .1em 1px, /* border */ |
||||
rgba(0,0,0,0.2) 0 .2em 6px; /* drop shadow */ |
||||
|
||||
-webkit-transform: translateY(5px); |
||||
-moz-transform: translateY(5px); |
||||
transform: translateY(5px); |
||||
} |
||||
|
||||
/* -------------- Fonts -------------- */ |
||||
|
||||
.serif { |
||||
font-family: 'Lobster', serif; |
||||
font-weight: normal; |
||||
} |
||||
|
||||
|
||||
/* -------------- Sizes -------------- */ |
||||
|
||||
.xs { font-size: 16px; } |
||||
.xl { font-size: 32px; } |
||||
|
||||
|
||||
/* -------------- Materials -------------- */ |
||||
|
||||
.button.glossy:after, .button.glass:after { |
||||
content: ""; |
||||
position: absolute; |
||||
width: 90%; |
||||
height: 60%; |
||||
top: 0; |
||||
left: 5%; |
||||
|
||||
-webkit-border-radius: .5em .5em 1em 1em / .5em .5em 2em 2em; |
||||
-moz-border-radius: .5em .5em 1em 1em / .5em .5em 2em 2em; |
||||
border-radius: .5em .5em 1em 1em / .5em .5em 2em 2em; |
||||
|
||||
background-image: -webkit-gradient(linear, 0% 0, 100% 0, from( rgba(255,255,255,.55) ), to( rgba(255,255,255,.5) ), |
||||
color-stop(.5, rgba(255,255,255,0)), color-stop(.8, rgba(255,255,255,0)) ); |
||||
background-image: -moz-linear-gradient(left, rgba(255,255,255,.55), rgba(255,255,255,0) 50%, rgba(255,255,255,0) 80%, rgba(255,255,255,.5) ); |
||||
background-image: gradient(linear, 0% 0, 100% 0, from( rgba(255,255,255,.55) ), to( rgba(255,255,255,.5) ), |
||||
color-stop(.5, rgba(255,255,255,0)), color-stop(.8, rgba(255,255,255,0)) ); |
||||
} |
||||
.button.glossy:active:after, |
||||
.button.glass:active:after, |
||||
.button.disabled:after, |
||||
.button[disabled]:after |
||||
{ opacity: .6; } |
||||
|
||||
.button.icon.glossy:after, |
||||
.button.icon.glass:after { height: 75% ; } |
||||
|
||||
/* -------------- Glass + Transparent -------------- */ |
||||
.button.glass { |
||||
text-shadow: rgba(255,255,255,.5) 0 -1px 0, rgba(0,0,0,0.18) 0 .18em .15em; |
||||
} |
||||
.button.glass:active { |
||||
text-shadow: rgba(255,255,255,.3) 0 1px 0, rgba(0,0,0,0.15) 0 .18em .15em; |
||||
} |
||||
|
||||
|
||||
/* -------------- Shapes -------------- */ |
||||
|
||||
/* round */ |
||||
.round, .round.glossy:after, .round.glass:after { |
||||
border-top: none; |
||||
-webkit-border-radius: 1em; |
||||
-moz-border-radius: 1em; |
||||
border-radius: 1em; |
||||
} |
||||
|
||||
/* oval */ |
||||
.oval { |
||||
border-top: none; |
||||
padding-left: .8em; |
||||
padding-right: .8em; |
||||
-webkit-border-radius: 5em / 2em; |
||||
-moz-border-radius: 5em / 2em; |
||||
border-radius: 5em / 2em; |
||||
} |
||||
.oval.glossy:after, .oval.glass:after { |
||||
top: 5%; |
||||
-webkit-border-radius: 5em / 2em 2em 1em 1em; |
||||
-moz-border-radius: 5em / 2em 2em 1em 1em; |
||||
border-radius: 5em / 2em 2em 1em 1em; |
||||
} |
||||
.oval.icon { |
||||
padding-left: .8em; |
||||
padding-right: .8em; |
||||
-webkit-border-radius: 1.5em / 1em; |
||||
-moz-border-radius: 1.5em / 1em; |
||||
border-radius: 1.5em / 1em; |
||||
} |
||||
.oval.icon.glossy:after, .oval.icon.glass:after { |
||||
-webkit-border-radius: 1.5em / 1em; |
||||
-moz-border-radius: 1.5em / 1em; |
||||
border-radius: 1.5em / 1em; |
||||
} |
||||
|
||||
/* brackets */ |
||||
.brackets, .brackets.glossy:after, .brackets.glass:after { |
||||
border-top: none; |
||||
-webkit-border-radius: .5em / 1em; |
||||
-moz-border-radius: .5em / 1em; |
||||
border-radius: .5em / 1em; |
||||
} |
||||
|
||||
/* skew */ |
||||
.skew { |
||||
border-top: none; |
||||
padding-right: 1.2em; |
||||
padding-left: 0.8em; |
||||
-webkit-border-radius: 5em 1em / 5em 1em; |
||||
-moz-border-radius: 5em 1em / 5em 1em; |
||||
border-radius: 5em 1em / 5em 1em; |
||||
} |
||||
.skew.glossy:after, .skew.glass:after { |
||||
left: 10%; |
||||
-webkit-border-radius: 7em 1em / 5em 1em; |
||||
-moz-border-radius: 7em 1em / 5em 1em; |
||||
border-radius: 7em 1em / 5em 1em; |
||||
} |
||||
.skew.icon { |
||||
padding-right: .9em; |
||||
padding-left: .8em; |
||||
} |
||||
|
||||
/* back */ |
||||
.back, .back.glossy:after, .back.glass:after { |
||||
border-top-color: rgba(255,255,255,0.5); |
||||
-webkit-border-radius: 1.6em 1.6em 1em 1em / 4em 4em 1em 1em; |
||||
-moz-border-radius: 1.6em 1.6em 1em 1em / 4em 4em 1em 1em; |
||||
border-radius: 1.6em 1.6em 1em 1em / 4em 4em 1em 1em; |
||||
} |
||||
.back.glossy:after, .back.glass:after { |
||||
left: 6%; |
||||
width: 88%; |
||||
} |
||||
|
||||
/* knife */ |
||||
.knife { |
||||
padding-left: 1.5em; |
||||
-webkit-border-radius: .2em .5em .5em 8em / .2em .5em .5em 5em; |
||||
-moz-border-radius: .2em .5em .5em 8em / .2em .5em .5em 5em; |
||||
border-radius: .2em .5em .5em 8em / .2em .5em .5em 5em; |
||||
} |
||||
.knife.glossy:after, .knife.glass:after { |
||||
left: 3%; |
||||
width: 97%; |
||||
-webkit-border-radius: .1em .5em .5em 8em / .1em .5em .5em 2em; |
||||
-moz-border-radius: .1em .5em .5em 8em / .1em .5em .5em 2em; |
||||
border-radius: .1em .5em .5em 8em / .1em .5em .5em 2em; |
||||
} |
||||
.knife.glossy.icon:after, .knife.glass.icon:after { |
||||
left: 5%; |
||||
width: 95%; |
||||
-webkit-border-radius: .5em .5em 1em 6em / .5em .5em 1em 4em; |
||||
-moz-border-radius: .5em .5em 1em 6em / .5em .5em 1em 4em; |
||||
border-radius: .5em .5em 1em 6em / .5em .5em 1em 4em; |
||||
} |
||||
|
||||
/* shield */ |
||||
.shield, .shield.glossy:after, .shield.glass:after { |
||||
-webkit-border-radius: .4em .4em 2em 2em / .4em .4em 3em 3em; |
||||
-moz-border-radius: .4em .4em 2em 2em / .4em .4em 3em 3em; |
||||
border-radius: .4em .4em 2em 2em / .4em .4em 3em 3em; |
||||
} |
||||
.shield { |
||||
padding-left: .8em; |
||||
padding-right: .8em; |
||||
} |
||||
.shield.icon { |
||||
padding-left: .6em; |
||||
padding-right: .6em; |
||||
} |
||||
|
||||
/* drop */ |
||||
.drop { |
||||
border-top: none; |
||||
-webkit-border-radius: 2em 5em 2em .6em / 2em 4em 2em .6em; |
||||
-moz-border-radius: 2em 5em 2em .6em / 2em 4em 2em .6em; |
||||
border-radius: 2em 5em 2em .6em / 2em 4em 2em .6em; |
||||
} |
||||
.drop.glossy:after, .drop.glass:after { |
||||
left: 4%; |
||||
-webkit-border-radius: 2em 6em 2em 1em / 2em 4em 2em 2em; |
||||
-moz-border-radius: 2em 6em 2em 1em / 2em 4em 2em 2em; |
||||
border-radius: 2em 6em 2em 1em / 2em 4em 2em 2em; |
||||
} |
||||
.drop.icon { |
||||
padding-right: .6em; |
||||
} |
||||
|
||||
|
||||
/* morph */ |
||||
.morph { |
||||
border-top: none; |
||||
-webkit-border-radius: 5em / 2em; |
||||
-moz-border-radius: 5em / 2em; |
||||
border-radius: 5em / 2em; |
||||
-webkit-transition: -webkit-border-radius .3s ease-in-out; |
||||
-moz-transition: -moz-border-radius .3s ease-in-out; |
||||
transition: -moz-border-radius .3s ease-in-out; |
||||
} |
||||
.morph:hover { |
||||
-webkit-border-radius: .4em .4em 2em 2em / .4em .4em 3em 3em; |
||||
-moz-border-radius: .4em .4em 2em 2em / .4em .4em 3em 3em; |
||||
border-radius: .4em .4em 2em 2em / .4em .4em 3em 3em; |
||||
} |
||||
.morph:active { |
||||
-webkit-border-radius: .3em; |
||||
-moz-border-radius: .3em; |
||||
border-radius: .3em; |
||||
} |
||||
.morph:after { |
||||
display: none; |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
/* Some ugly hacks for FF. |
||||
Thanks to David Hund for some help - http://valuedstandards.com/static/test/buttons/ */ |
||||
@-moz-document url-prefix() { |
||||
.button { text-align: center; } |
||||
.icon { padding: .5em 1em; } |
||||
.icon:before { margin-left: -.42em; float: left; } |
||||
.social.icon:before { margin-left: -.22em; } |
||||
|
||||
.drop.icon { padding-right: 1.1em; } |
||||
.shield.icon { padding-left: 1.1em; padding-right: 1.1em; } |
||||
.skew.icon { padding-right: 1.4em; padding-left: 1.3em; } |
||||
.oval.icon { padding-left: 1.3em; padding-right: 1.3em; } |
||||
.knife { padding-left: 2em; } |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
/* Damn, this became a fat baby.. */ |
||||
|
||||
|
||||
|
@ -1,24 +0,0 @@
@@ -1,24 +0,0 @@
|
||||
<div class="navbar-wrapper"> |
||||
<div class="container"> |
||||
|
||||
<div class="navbar navbar-default navbar-static-top" role="navigation"> |
||||
<div class="container"> |
||||
<div class="navbar-header"> |
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> |
||||
<span class="icon-bar"></span> |
||||
<span class="icon-bar"></span> |
||||
<span class="icon-bar"></span> |
||||
</button> |
||||
<a class="navbar-brand" href="./index.html">ossoc</a> |
||||
</div> |
||||
<div class="collapse navbar-collapse"> |
||||
<ul class="nav navbar-nav navbar-right"> |
||||
<button id="loginbutton" type="button" class="btn btn-primary narbar-btn"><i class="glyphicon glyphicon-log-in"></i>Login</button> |
||||
<button type="button" class="btn btn-success navbar-btn"><i class="glyphicon glyphicon-link"></i><a href="./register.jsp">Create account</a></button> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
</div> |
@ -1,124 +0,0 @@
@@ -1,124 +0,0 @@
|
||||
blockquote#quote { |
||||
margin-top: 30px; |
||||
margin-bottom: 30px; |
||||
} |
||||
|
||||
@font-face |
||||
{ |
||||
font-family: 'GenBasI'; |
||||
src: url('/css/font/GenBasI.ttf'); |
||||
} |
||||
|
||||
blockquote#quote p { |
||||
/* |
||||
font-family: "HelveticaNeue Light","Helvetica Neue Light","Helvetica Neue","Helvetica"; |
||||
*/ |
||||
font-family: 'GenBasI'; |
||||
font-weight: 100; |
||||
font-size: 20px; |
||||
line-height: 150%; |
||||
} |
||||
|
||||
img { |
||||
/*background-color: #fff;*/ |
||||
padding: 5px; |
||||
} |
||||
img.tex { |
||||
background-color: #ddd; |
||||
} |
||||
|
||||
body.mediawiki { |
||||
padding-top: 0px; |
||||
} |
||||
|
||||
@media (min-width: 981px) { |
||||
/* |
||||
body.mediawiki { |
||||
padding-top: 100px; |
||||
} |
||||
*/ |
||||
} |
||||
|
||||
div.wikilink_btn a { |
||||
color: #fff; |
||||
font-weight: bold; |
||||
font-size: 20px; |
||||
} |
||||
|
||||
.wikitable th,.wikitable td { |
||||
border-top:1px solid #222; background: transparent; |
||||
} |
||||
|
||||
.wikitable th,.wikitable td{border-top:1px solid #222;} |
||||
.wikitable tbody tr:hover th,.wikitable tbody tr:hover td{background-color:#444;} |
||||
.wikitable tbody tr:hover td,.table tbody tr:hover th{background-color:#444;} |
||||
.wikitable,.well,.prettyprint,input,textarea,select{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;} |
||||
.wikitable{width:100%;margin-bottom:18px;}.wikitable th,.wikitable td{padding:8px;line-height:18px;text-align:left;vertical-align:top;border-top:1px solid #dddddd;} |
||||
.wikitable th{font-weight:bold;} |
||||
.wikitable thead th{vertical-align:bottom;} |
||||
.wikitable caption+thead tr:first-child th,.wikitable caption+thead tr:first-child td,.wikitable colgroup+thead tr:first-child th,.wikitable colgroup+thead tr:first-child td,.wikitable thead:first-child tr:first-child th,.wikitable thead:first-child tr:first-child td{border-top:0;} |
||||
.wikitable tbody+tbody{border-top:2px solid #dddddd;} |
||||
|
||||
.wikitable tbody tr:hover th,.wikitable tbody tr:hover td{background-color:#333;} |
||||
.wikitable{width:100%;margin-bottom:18px;}.wikitable th,.wikitable td{padding:8px;line-height:18px;text-align:left;vertical-align:top;border-top:1px solid #dddddd;} |
||||
.wikitable th{font-weight:bold;} |
||||
.wikitable thead th{vertical-align:bottom;} |
||||
.wikitable caption+thead tr:first-child th,.wikitable caption+thead tr:first-child td,.wikitable colgroup+thead tr:first-child th,.wikitable colgroup+thead tr:first-child td,.wikitable thead:first-child tr:first-child th,.wikitable thead:first-child tr:first-child td{border-top:0;} |
||||
.wikitable tbody+tbody{border-top:2px solid #dddddd;} |
||||
|
||||
table.wikitable, table.wikitable th { |
||||
background: none repeat scroll 0 0 #222; |
||||
} |
||||
|
||||
/* |
||||
ul, div { |
||||
font-size: 18px; |
||||
} |
||||
*/ |
||||
|
||||
div#mw-normal-catlinks { |
||||
font-size: 14px; |
||||
margin-top: 20px; |
||||
margin-bottom: 20px; |
||||
} |
||||
|
||||
table, table.navbox, |
||||
table ul li, table.navbox ul li, |
||||
table ul, table.navbox ul, |
||||
table p, table.navbox p, |
||||
table a, table.navbox a { |
||||
font-size: 14px; |
||||
} |
||||
|
||||
h1, h2, h3, h4, h5 { |
||||
padding-top: 20px; |
||||
} |
||||
|
||||
div.mw-geshi { |
||||
font-size: 14px; |
||||
} |
||||
pre { |
||||
font-size: 14px; |
||||
} |
||||
|
||||
div.mainarticle { |
||||
font-size: 18px; |
||||
} |
||||
|
||||
a:visited { |
||||
/* |
||||
unvisited link color: |
||||
color: #33b5e5; |
||||
*/ |
||||
/* |
||||
visited link color: |
||||
http://www.w3schools.com/tags/ref_colorpicker.asp |
||||
*/ |
||||
color: #2E8AE6; |
||||
} |
||||
|
||||
#toc, .toc, |
||||
#catlinks, .catlinks { |
||||
background-color: #333; |
||||
} |
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue