Compare commits
96 Commits
service-up
...
main
Author | SHA1 | Date | |
---|---|---|---|
3aba9729e6 | |||
eb840384d1 | |||
5bf613cd56 | |||
ccfed3f3fc | |||
194e619537 | |||
a0f9548fcf | |||
418315150a | |||
ebb304d374 | |||
8580c2c1f0 | |||
a3f460113a | |||
e94f911d99 | |||
f7446c5a2d | |||
6d1fa940a7 | |||
cfac7c69dc | |||
3287d57554 | |||
d347024939 | |||
8e4f86c8c6 | |||
5b855a575a | |||
4248f86c64 | |||
f36011d4cc | |||
4953dfb8f3 | |||
d003935769 | |||
58e795bd98 | |||
0709e883ea | |||
8965515215 | |||
69523ba027 | |||
2a4ed33024 | |||
f880c44b79 | |||
5cac0fa869 | |||
303ebf8ea3 | |||
4d638c456e | |||
72fc465d1d | |||
2f579f4cfa | |||
1bc4bb4902 | |||
d91b7dc735 | |||
acb2f57176 | |||
3482004df0 | |||
4ed1b479ef | |||
5a931c2e38 | |||
17da345041 | |||
5e9be9e6c8 | |||
0148fe3e55 | |||
a144d6070b | |||
989036ac21 | |||
523ed50647 | |||
03f81f4a25 | |||
002ad20d7d | |||
2cb6a39990 | |||
920ff3839e | |||
d3dae75d38 | |||
4004ba6ccb | |||
cf982ee2c6 | |||
efd9487953 | |||
b2552b6345 | |||
1a8f699ab4 | |||
5e3ab1768c | |||
291ff2d28a | |||
229975883c | |||
af7ef822f0 | |||
cc3688a982 | |||
e080cda745 | |||
45c0f1390f | |||
dacef1ac09 | |||
03a8456a2a | |||
d1d749d8e4 | |||
74adabc43a | |||
3566305577 | |||
7442b2ee87 | |||
9aa49166a6 | |||
f06ac24ecb | |||
b796cc9756 | |||
25063ed251 | |||
72a47d71f2 | |||
dba09976fb | |||
7a3c76b9f9 | |||
18fd6038df | |||
18814b6a1d | |||
fc35d94b3c | |||
3604bc1378 | |||
f0f65db9e3 | |||
e5686d4d9a | |||
30c4a24b8d | |||
904122db17 | |||
8760edf0c3 | |||
b4650771bc | |||
b8182774a4 | |||
bb3b6c027a | |||
1d18b5e71c | |||
858cb6c3c8 | |||
0a5f9f99ac | |||
2ac521e1c9 | |||
ffc4f1d0c0 | |||
7246b0845c | |||
67acb4a32b | |||
15d4bcecc7 | |||
9c92f3fd75 |
2
.gitmodules
vendored
2
.gitmodules
vendored
@@ -1,3 +1,3 @@
|
||||
[submodule "mkdocs-material"]
|
||||
path = mkdocs-material
|
||||
url = git@github.com:charlesreid1-docker/mkdocs-material.git
|
||||
url = https://github.com/charlesreid1/mkdocs-material
|
||||
|
53
Makefile
53
Makefile
@@ -63,13 +63,14 @@ help:
|
||||
templates:
|
||||
@find * -name "*.service.j2" | xargs -I '{}' chmod 644 {}
|
||||
@find * -name "*.timer.j2" | xargs -I '{}' chmod 644 {}
|
||||
python3 $(POD_CHARLESREID1_DIR)/scripts/apply_templates.py
|
||||
/home/charles/.pyenv/shims/python3 $(POD_CHARLESREID1_DIR)/scripts/apply_templates.py
|
||||
|
||||
list-templates:
|
||||
@find * -name "*.j2"
|
||||
|
||||
clean-templates:
|
||||
python3 $(POD_CHARLESREID1_DIR)/scripts/clean_templates.py
|
||||
# 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
|
||||
|
||||
@@ -97,31 +98,42 @@ mw-fix-skins:
|
||||
# /www Dir
|
||||
|
||||
clone-www:
|
||||
python3 $(POD_CHARLESREID1_DIR)/scripts/git_clone_www.py
|
||||
/home/charles/.pyenv/shims/python3 $(POD_CHARLESREID1_DIR)/scripts/git_clone_www.py
|
||||
|
||||
pull-www:
|
||||
python3 $(POD_CHARLESREID1_DIR)/scripts/git_pull_www.py
|
||||
/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/pod-charlesreid1-backups-gitea.{service,timer} /etc/systemd/system/.
|
||||
sudo cp $(POD_CHARLESREID1_DIR)/scripts/backups/pod-charlesreid1-backups-aws.{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
|
||||
|
||||
@@ -129,37 +141,54 @@ endif
|
||||
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-backups-gitea.timer
|
||||
-sudo systemctl disable pod-charlesreid1-backups-aws.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-backups-gitea.timer
|
||||
-sudo systemctl stop pod-charlesreid1-backups-aws.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-backups-gitea.{service,timer}
|
||||
-sudo rm -f /etc/systemd/system/pod-charlesreid1-backups-aws.{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
|
||||
|
19
Troubleshooting.md
Normal file
19
Troubleshooting.md
Normal file
@@ -0,0 +1,19 @@
|
||||
To get a shell in a container that has been created, before it is runnning in a pod, use `docker run`:
|
||||
|
||||
```
|
||||
docker run --rm -it --entrypoint bash <image-name-or-id>
|
||||
|
||||
|
||||
docker run --rm -it --entrypoint bash pod-charlesreid1_stormy_mediawiki
|
||||
```
|
||||
|
||||
To get a shell in a container that is running in a pod, use `docker exec`:
|
||||
|
||||
```
|
||||
docker exec -it <image-name> /bin/bash
|
||||
|
||||
docker exec -it stormy_mw /bin/bash
|
||||
```
|
||||
|
||||
Also, if no changes are picking up, and you've already tried rebuilding the container image, try editing the Dockerfile.
|
||||
|
@@ -6,12 +6,14 @@
|
||||
;; https://github.com/go-gitea/gitea/blob/master/conf/app.ini
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
APP_NAME = {{ gitea_app_name }}
|
||||
APP_NAME = {{ pod_charlesreid1_gitea_app_name }}
|
||||
RUN_USER = git
|
||||
RUN_MODE = prod
|
||||
WORK_PATH = /data/gitea
|
||||
|
||||
[ui]
|
||||
DEFAULT_THEME = arc-green
|
||||
DEFAULT_THEME = gitea-dark
|
||||
THEMES = gitea-dark
|
||||
|
||||
[database]
|
||||
DB_TYPE = sqlite3
|
||||
@@ -31,17 +33,17 @@ DISABLE_HTTP_GIT = false
|
||||
|
||||
[server]
|
||||
PROTOCOL = http
|
||||
DOMAIN = git.{{ server_name_default }}
|
||||
DOMAIN = git.{{ pod_charlesreid1_server_name }}
|
||||
#CERT_FILE = /www/gitea/certs/cert.pem
|
||||
#KEY_FILE = /www/gitea/certs/key.pem
|
||||
SSH_DOMAIN = git.{{ server_name_default }}
|
||||
SSH_DOMAIN = git.{{ pod_charlesreid1_server_name }}
|
||||
HTTP_PORT = 3000
|
||||
HTTP_ADDR = 0.0.0.0
|
||||
ROOT_URL = https://git.{{ server_name_default }}
|
||||
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
|
||||
;SSH_PORT = 222
|
||||
; port for built-in ssh server to listen on:
|
||||
SSH_LISTEN_PORT = 22
|
||||
OFFLINE_MODE = false
|
||||
@@ -92,9 +94,9 @@ ENABLED = false
|
||||
|
||||
[security]
|
||||
INSTALL_LOCK = true
|
||||
SECRET_KEY = {{ gitea_secret_key }}
|
||||
SECRET_KEY = {{ pod_charlesreid1_gitea_secretkey }}
|
||||
MIN_PASSWORD_LENGTH = 6
|
||||
INTERNAL_TOKEN = {{ gitea_internal_token }}
|
||||
INTERNAL_TOKEN = {{ pod_charlesreid1_gitea_internaltoken }}
|
||||
|
||||
[other]
|
||||
SHOW_FOOTER_BRANDING = false
|
||||
|
@@ -1,4 +1,4 @@
|
||||
FROM mediawiki
|
||||
FROM mediawiki:1.34
|
||||
|
||||
EXPOSE 8989
|
||||
|
||||
@@ -41,17 +41,13 @@ 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
|
||||
RUN touch /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
|
||||
|
||||
# MediaWiki Fail2ban log directory
|
||||
RUN mkdir -p /var/log/mwf2b
|
||||
RUN chown -R www-data:www-data /var/log/mwf2b
|
||||
RUN chmod 700 /var/log/mwf2b
|
||||
|
||||
# Apache conf file
|
||||
COPY charlesreid1-config/apache/*.conf /etc/apache2/sites-enabled/
|
||||
RUN a2enmod rewrite
|
||||
@@ -59,4 +55,10 @@ 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
|
||||
|
@@ -5,6 +5,10 @@ To update the MediaWiki skin:
|
||||
- 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.
|
||||
|
||||
The skin currently in use is in `charlesreid1-config/mediawiki/skins/Bootstrap2`
|
||||
|
||||
To rebuild and then restart the pod:
|
||||
|
||||
```
|
||||
# switch to main pod directory
|
||||
cd ../
|
||||
|
@@ -1,4 +1,4 @@
|
||||
ServerName {{ server_name_default }}
|
||||
ServerName {{ pod_charlesreid1_server_name }}
|
||||
|
||||
Listen 8989
|
||||
|
||||
@@ -7,10 +7,10 @@ Listen 8989
|
||||
# talks to apache via 127.0.0.1
|
||||
# on port 8989
|
||||
|
||||
ServerAlias www.{{ server_name_default }}
|
||||
ServerAlias www.{{ pod_charlesreid1_server_name }}
|
||||
|
||||
LogLevel warn
|
||||
ServerAdmin {{ admin_email }}
|
||||
ServerAdmin {{ pod_charlesreid1_mediawiki_admin_email }}
|
||||
DirectoryIndex index.html index.cgi index.php
|
||||
|
||||
|
||||
|
@@ -13,8 +13,8 @@ if ( !defined( 'MEDIAWIKI' ) ) {
|
||||
}
|
||||
|
||||
## The protocol and server name to use in fully-qualified URLs
|
||||
$wgServer = 'https://{{ server_name_default }}';
|
||||
$wgCanonicalServer = 'https://{{ server_name_default }}';
|
||||
$wgServer = 'https://{{ pod_charlesreid1_server_name }}';
|
||||
$wgCanonicalServer = 'https://{{ pod_charlesreid1_server_name }}';
|
||||
|
||||
## The URL path to static resources (images, scripts, etc.)
|
||||
$wgStylePath = "$wgScriptPath/skins";
|
||||
@@ -209,13 +209,6 @@ wfLoadExtension( 'EmbedVideo' );
|
||||
|
||||
require_once "$IP/extensions/Math/Math.php";
|
||||
|
||||
#############################################
|
||||
# Fail2banlog extension
|
||||
# https://www.mediawiki.org/wiki/Extension:Fail2banlog
|
||||
|
||||
require_once "$IP/extensions/Fail2banlog/Fail2banlog.php";
|
||||
$wgFail2banlogfile = "/var/log/apache2/mwf2b.log";
|
||||
|
||||
#############################################
|
||||
# Fix cookies crap
|
||||
|
||||
@@ -224,7 +217,7 @@ session_save_path("/tmp");
|
||||
##############################################
|
||||
# Secure login
|
||||
|
||||
$wgServer = "https://{{ server_name_default }}";
|
||||
$wgServer = "https://{{ pod_charlesreid1_server_name }}";
|
||||
$wgSecureLogin = true;
|
||||
|
||||
###################################
|
||||
|
@@ -1,93 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# clone or download each extension
|
||||
# and build o
|
||||
|
||||
mkdir -p extensions
|
||||
(
|
||||
cd extensions
|
||||
|
||||
##############################
|
||||
|
||||
Extension="SyntaxHighlight_GeSHi"
|
||||
if [ ! -d ${Extension} ]
|
||||
then
|
||||
## This requires mediawiki > 1.31
|
||||
## (so does REL1_31)
|
||||
#git clone https://github.com/wikimedia/mediawiki-extensions-SyntaxHighlight_GeSHi.git SyntaxHighlight_GeSHi
|
||||
|
||||
## This manually downloads REL1_30
|
||||
#wget https://extdist.wmflabs.org/dist/extensions/SyntaxHighlight_GeSHi-REL1_30-87392f1.tar.gz -O SyntaxHighlight_GeSHi.tar.gz
|
||||
#tar -xzf SyntaxHighlight_GeSHi.tar.gz -C ${PWD}
|
||||
#rm -f SyntaxHighlight_GeSHi.tar.gz
|
||||
|
||||
# Best of both worlds
|
||||
git clone https://github.com/wikimedia/mediawiki-extensions-SyntaxHighlight_GeSHi.git SyntaxHighlight_GeSHi
|
||||
(
|
||||
cd ${Extension}
|
||||
git checkout --track remotes/origin/REL1_34
|
||||
)
|
||||
else
|
||||
echo "Skipping ${Extension}"
|
||||
fi
|
||||
|
||||
##############################
|
||||
|
||||
Extension="ParserFunctions"
|
||||
if [ ! -d ${Extension} ]
|
||||
then
|
||||
git clone https://github.com/wikimedia/mediawiki-extensions-ParserFunctions.git ${Extension}
|
||||
(
|
||||
cd ${Extension}
|
||||
git checkout --track remotes/origin/REL1_34
|
||||
)
|
||||
else
|
||||
echo "Skipping ${Extension}"
|
||||
fi
|
||||
|
||||
##############################
|
||||
|
||||
Extension="EmbedVideo"
|
||||
if [ ! -d ${Extension} ]
|
||||
then
|
||||
git clone https://github.com/HydraWiki/mediawiki-embedvideo.git ${Extension}
|
||||
(
|
||||
cd ${Extension}
|
||||
git checkout v2.7.3
|
||||
)
|
||||
else
|
||||
echo "Skipping ${Extension}"
|
||||
fi
|
||||
|
||||
##############################
|
||||
|
||||
Extension="Math"
|
||||
if [ ! -d ${Extension} ]
|
||||
then
|
||||
git clone https://github.com/wikimedia/mediawiki-extensions-Math.git ${Extension}
|
||||
(
|
||||
cd ${Extension}
|
||||
git checkout REL1_34
|
||||
)
|
||||
else
|
||||
echo "Skipping ${Extension}"
|
||||
fi
|
||||
|
||||
##############################
|
||||
|
||||
Extension="Fail2banlog"
|
||||
if [ ! -d ${Extension} ]
|
||||
then
|
||||
git clone https://github.com/charlesreid1-docker/mw-fail2ban.git ${Extension}
|
||||
(
|
||||
cd ${Extension}
|
||||
git checkout master
|
||||
)
|
||||
else
|
||||
echo "Skipping ${Extension}"
|
||||
fi
|
||||
|
||||
##############################
|
||||
|
||||
# fin
|
||||
)
|
@@ -106,7 +106,7 @@ include('/var/www/html/skins/Bootstrap2/navbar.php');
|
||||
<div class="container-fixed">
|
||||
<div class="navbar-header">
|
||||
<a href="/wiki/" class="navbar-brand">
|
||||
{{ top_domain }} wiki
|
||||
{{ pod_charlesreid1_server_name }} wiki
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
|
@@ -11,7 +11,7 @@
|
||||
</span>
|
||||
Made from the command line with vim by
|
||||
<a href="http://charlesreid1.com">charlesreid1</a><br />
|
||||
with help from <a href="https://getbootstrap.com/">Bootstrap</a> and <a href="http://getpelican.com">Pelican</a>.
|
||||
with help from <a href="https://getbootstrap.com/">Bootstrap</a> and <a href="http://mediawiki.org">MediaWiki</a>.
|
||||
</p>
|
||||
|
||||
<p style="text-align: center">
|
||||
|
@@ -6,14 +6,14 @@
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a href="/" class="navbar-brand">{{ top_domain }}</a>
|
||||
<a href="/" class="navbar-brand">{{ pod_charlesreid1_server_name }}</a>
|
||||
</div>
|
||||
<div>
|
||||
<div class="collapse navbar-collapse" id="myNavbar">
|
||||
<ul class="nav navbar-nav">
|
||||
|
||||
<li>
|
||||
<a href="https://{{ top_domain }}/wiki">Wiki</a>
|
||||
<a href="https://{{ pod_charlesreid1_server_name }}/wiki">Wiki</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
@@ -1086,7 +1086,8 @@ html {
|
||||
}
|
||||
body {
|
||||
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
font-size: 14px;
|
||||
/*font-size: 14px;*/
|
||||
font-size: 20px;
|
||||
line-height: 1.42857143;
|
||||
color: #c8c8c8;
|
||||
background-color: #272b30;
|
||||
|
3
d-mediawiki/php/php.ini
Normal file
3
d-mediawiki/php/php.ini
Normal file
@@ -0,0 +1,3 @@
|
||||
post_max_size = 128M
|
||||
memory_limit = 128M
|
||||
upload_max_filesize = 100M
|
@@ -1,6 +1,6 @@
|
||||
####################
|
||||
#
|
||||
# {{ server_name_default }}
|
||||
# {{ pod_charlesreid1_server_name }}
|
||||
# http/{{ port_default }}
|
||||
#
|
||||
# basically, just redirects to https
|
||||
@@ -10,20 +10,20 @@
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name {{ server_name_default }};
|
||||
return 301 https://{{ server_name_default }}$request_uri;
|
||||
server_name {{ pod_charlesreid1_server_name }};
|
||||
return 301 https://{{ pod_charlesreid1_server_name }}$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name www.{{ server_name_default }};
|
||||
return 301 https://www.{{ server_name_default }}$request_uri;
|
||||
server_name www.{{ pod_charlesreid1_server_name }};
|
||||
return 301 https://www.{{ pod_charlesreid1_server_name }}$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name git.{{ server_name_default }};
|
||||
return 301 https://git.{{ server_name_default }}$request_uri;
|
||||
server_name git.{{ pod_charlesreid1_server_name }};
|
||||
return 301 https://git.{{ pod_charlesreid1_server_name }}$request_uri;
|
||||
}
|
||||
|
@@ -1,9 +1,9 @@
|
||||
####################
|
||||
#
|
||||
# {{ server_name_default }}
|
||||
# {{ pod_charlesreid1_server_name }}
|
||||
# https/443
|
||||
#
|
||||
# {{ server_name_default }} and www.{{ server_name_default }}
|
||||
# {{ pod_charlesreid1_server_name }} and www.{{ pod_charlesreid1_server_name }}
|
||||
# should handle the following cases:
|
||||
# - w/ and wiki/ should reverse proxy story_mw
|
||||
# - gitea subdomain should reverse proxy stormy_gitea
|
||||
@@ -15,20 +15,24 @@
|
||||
server {
|
||||
listen 443 ssl;
|
||||
listen [::]:443 ssl;
|
||||
server_name {{ server_name_default }} default_server;
|
||||
server_name {{ pod_charlesreid1_server_name }} default_server;
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/{{ server_name_default }}/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/{{ server_name_default }}/privkey.pem;
|
||||
ssl_certificate /etc/letsencrypt/live/{{ pod_charlesreid1_server_name }}/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/{{ pod_charlesreid1_server_name }}/privkey.pem;
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf;
|
||||
include /etc/nginx/conf.d/secheaders.conf;
|
||||
include /etc/nginx/conf.d/csp.conf;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
root /www/{{ server_name_default }}/htdocs;
|
||||
root /www/{{ pod_charlesreid1_server_name }}/htdocs;
|
||||
index index.html;
|
||||
}
|
||||
|
||||
location = /robots.txt {
|
||||
alias /var/www/robots/robots.txt;
|
||||
}
|
||||
|
||||
location /wiki/ {
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $remote_addr;
|
||||
@@ -55,21 +59,25 @@ server {
|
||||
server {
|
||||
listen 443 ssl;
|
||||
listen [::]:443 ssl;
|
||||
server_name www.{{ server_name_default }};
|
||||
server_name www.{{ pod_charlesreid1_server_name }};
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/www.{{ server_name_default }}/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/www.{{ server_name_default }}/privkey.pem;
|
||||
ssl_certificate /etc/letsencrypt/live/www.{{ pod_charlesreid1_server_name }}/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/www.{{ pod_charlesreid1_server_name }}/privkey.pem;
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf;
|
||||
include /etc/nginx/conf.d/secheaders.conf;
|
||||
include /etc/nginx/conf.d/csp.conf;
|
||||
|
||||
root /www/{{ server_name_default }}/htdocs;
|
||||
root /www/{{ pod_charlesreid1_server_name }}/htdocs;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
index index.html;
|
||||
}
|
||||
|
||||
location = /robots.txt {
|
||||
alias /var/www/robots/robots.txt;
|
||||
}
|
||||
|
||||
location /wiki/ {
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $remote_addr;
|
||||
@@ -94,18 +102,50 @@ server {
|
||||
server {
|
||||
listen 443 ssl;
|
||||
listen [::]:443 ssl;
|
||||
server_name git.{{ server_name_default }};
|
||||
server_name git.{{ pod_charlesreid1_server_name }};
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/git.{{ server_name_default }}/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/git.{{ server_name_default }}/privkey.pem;
|
||||
ssl_certificate /etc/letsencrypt/live/git.{{ pod_charlesreid1_server_name }}/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/git.{{ pod_charlesreid1_server_name }}/privkey.pem;
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf;
|
||||
include /etc/nginx/conf.d/secheaders.conf;
|
||||
include /etc/nginx/conf.d/giteacsp.conf;
|
||||
|
||||
location / {
|
||||
# Ban jerks
|
||||
deny 52.39.237.48;
|
||||
deny 52.70.240.171;
|
||||
deny 54.36.148.135;
|
||||
deny 34.215.160.160;
|
||||
deny 217.113.194.226;
|
||||
deny 189.84.38.222;
|
||||
|
||||
deny 47.76.0.0/16;
|
||||
deny 47.79.0.0/16;
|
||||
# Fuck you in particular
|
||||
deny 47.76.209.138;
|
||||
deny 47.76.99.127;
|
||||
deny 47.76.220.119;
|
||||
deny 47.79.118.97;
|
||||
deny 84.33.26.105;
|
||||
|
||||
deny 8.210.0.0/16;
|
||||
deny 8.218.0.0/16;
|
||||
# Fuck you in particular
|
||||
deny 8.210.187.5;
|
||||
deny 8.210.164.94;
|
||||
deny 168.90.209.163;
|
||||
deny 168.90.209.127;
|
||||
|
||||
deny 89.116.78.169;
|
||||
allow all;
|
||||
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $remote_addr;
|
||||
proxy_set_header Host $host;
|
||||
proxy_pass http://stormy_gitea:3000/;
|
||||
}
|
||||
|
||||
location = /robots.txt {
|
||||
alias /var/www/robots/gitea.txt;
|
||||
}
|
||||
}
|
||||
|
16
d-nginx-charlesreid1/robots/gitea.txt
Normal file
16
d-nginx-charlesreid1/robots/gitea.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
User-agent: *
|
||||
Disallow: */commit/*
|
||||
Disallow: */src/*
|
||||
Disallow: */tree/*
|
||||
Disallow: */activity/*
|
||||
Disallow: */wiki/*
|
||||
Disallow: */releases/*
|
||||
Disallow: */pulls/*
|
||||
Disallow: */stars
|
||||
Disallow: */watchers
|
||||
Disallow: */forks
|
||||
Disallow: *?tab=activity
|
||||
Disallow: *?tab=stars
|
||||
Disallow: *?tab=following
|
||||
Disallow: *?tab=followers
|
||||
Disallow: *?lang=*
|
2
d-nginx-charlesreid1/robots/robots.txt
Normal file
2
d-nginx-charlesreid1/robots/robots.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
User-agent: *
|
||||
Disallow: /w/
|
@@ -13,6 +13,7 @@ services:
|
||||
restart: always
|
||||
volumes:
|
||||
- "stormy_gitea_data:/data"
|
||||
- "./d-nginx-charlesreid1/robots:/var/www/robots:ro"
|
||||
- "./d-gitea/custom:/data/gitea"
|
||||
- "./d-gitea/data:/app/gitea/data"
|
||||
- "/gitea_repositories:/data/git/repositories"
|
||||
@@ -35,26 +36,25 @@ services:
|
||||
max-size: 1m
|
||||
max-file: "10"
|
||||
environment:
|
||||
- MYSQL_ROOT_PASSWORD={{ mysql_password }}
|
||||
- MYSQL_ROOT_PASSWORD={{ pod_charlesreid1_mysql_password }}
|
||||
|
||||
stormy_mw:
|
||||
build: d-mediawiki
|
||||
container_name: stormy_mw
|
||||
volumes:
|
||||
- "stormy_mw_data:/var/www/html"
|
||||
- "./mwf2b:/var/log/mwf2b"
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: 1m
|
||||
max-file: "10"
|
||||
environment:
|
||||
- MEDIAWIKI_SITE_SERVER=https://{{ server_name_default }}
|
||||
- MEDIAWIKI_SECRETKEY={{ mediawiki_secretkey }}
|
||||
- MEDIAWIKI_SITE_SERVER=https://{{ pod_charlesreid1_server_name }}
|
||||
- MEDIAWIKI_SECRETKEY={{ pod_charlesreid1_mediawiki_secretkey }}
|
||||
- MYSQL_HOST=stormy_mysql
|
||||
- MYSQL_DATABASE=wikidb
|
||||
- MYSQL_USER=root
|
||||
- MYSQL_PASSWORD={{ mysql_password }}
|
||||
- MYSQL_PASSWORD={{ pod_charlesreid1_mysql_password }}
|
||||
depends_on:
|
||||
- stormy_mysql
|
||||
|
||||
@@ -62,14 +62,15 @@ services:
|
||||
restart: always
|
||||
image: nginx
|
||||
container_name: stormy_nginx
|
||||
hostname: {{ server_name_default }}
|
||||
hostname: {{ pod_charlesreid1_server_name }}
|
||||
hostname: charlesreid1.com
|
||||
command: /bin/bash -c "nginx -g 'daemon off;'"
|
||||
volumes:
|
||||
- "./d-nginx-charlesreid1/conf.d:/etc/nginx/conf.d:ro"
|
||||
- "./d-nginx-charlesreid1/robots:/var/www/robots:ro"
|
||||
- "/etc/localtime:/etc/localtime:ro"
|
||||
- "/etc/letsencrypt:/etc/letsencrypt"
|
||||
- "/www/{{ server_name_default }}/htdocs:/www/{{ server_name_default }}/htdocs:ro"
|
||||
- "/www/{{ pod_charlesreid1_server_name }}/htdocs:/www/{{ pod_charlesreid1_server_name }}/htdocs:ro"
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
|
9
docs/BlockIps.md
Normal file
9
docs/BlockIps.md
Normal file
@@ -0,0 +1,9 @@
|
||||
To block IP address:
|
||||
|
||||
* Modify the nginx config file template at
|
||||
`d-nginx-charlesreid1/conf.d/https.DOMAIN.conf.j2`
|
||||
* Re-render the Jinja templates into config files via
|
||||
`make clean-templates && make templates`
|
||||
* Stop and restart the pod service:
|
||||
`sudo systemctl stop pod-charlesreid1 &&
|
||||
sudo systemctl start pod-charlesreid1`
|
35
environment.j2
Normal file
35
environment.j2
Normal file
@@ -0,0 +1,35 @@
|
||||
#!/bin/bash
|
||||
|
||||
# multiple templates:
|
||||
# -------------------
|
||||
export POD_CHARLESREID1_DIR="{{ pod_charlesreid1_pod_install_dir }}"
|
||||
export POD_CHARLESREID1_TLD="{{ pod_charlesreid1_server_name }}"
|
||||
export POD_CHARLESREID1_USER="{{ pod_charlesreid1_username }}"
|
||||
export POD_CHARLESREID1_VPN_IP_ADDR="{{ pod_charlesreid1_vpn_ip_addr }}"
|
||||
|
||||
# mediawiki:
|
||||
# ----------
|
||||
export POD_CHARLESREID1_MW_ADMIN_EMAIL="{{ pod_charlesreid1_mediawiki_admin_email }}"
|
||||
export POD_CHARLESREID1_MW_SECRET_KEY="{{ pod_charlesreid1_mediawiki_secretkey }}"
|
||||
|
||||
# mysql:
|
||||
# ------
|
||||
export POD_CHARLESREID1_MYSQL_PASSWORD="{{ pod_charlesreid1_mysql_password }}"
|
||||
|
||||
# gitea:
|
||||
# ------
|
||||
export POD_CHARLESREID1_GITEA_APP_NAME="{{ pod_charlesreid1_gitea_app_name }}"
|
||||
export POD_CHARLESREID1_GITEA_SECRET_KEY="{{ pod_charlesreid1_gitea_secretkey }}"
|
||||
export POD_CHARLESREID1_GITEA_INTERNAL_TOKEN="{{ pod_charlesreid1_gitea_internaltoken }}"
|
||||
|
||||
# aws:
|
||||
# ----
|
||||
export AWS_ACCESS_KEY_ID="{{ pod_charlesreid1_backups_aws_access_key }}"
|
||||
export AWS_SECRET_ACCESS_KEY="{{ pod_charlesreid1_backups_aws_secret_access_key }}"
|
||||
export AWS_DEFAULT_REGION="{{ pod_charlesreid1_backups_aws_region }}"
|
||||
|
||||
# backups and scripts:
|
||||
# --------------------
|
||||
export POD_CHARLESREID1_BACKUP_DIR="{{ pod_charlesreid1_backups_dir }}"
|
||||
export POD_CHARLESREID1_BACKUP_S3BUCKET="{{ pod_charlesreid1_backups_bucket }}"
|
||||
export POD_CHARLESREID1_CANARY_WEBHOOK="{{ pod_charlesreid1_backups_canary_slack_url }}"
|
@@ -12,21 +12,22 @@ OVERWRITE = False
|
||||
|
||||
# Map of jinja variables to environment variables
|
||||
jinja_to_env = {
|
||||
"pod_install_dir": "POD_CHARLESREID1_DIR",
|
||||
"top_domain": "POD_CHARLESREID1_TLD",
|
||||
"server_name_default" : "POD_CHARLESREID1_TLD",
|
||||
"username": "POD_CHARLESREID1_USER",
|
||||
# docker-compose:
|
||||
"mysql_password" : "POD_CHARLESREID1_MYSQL_PASSWORD",
|
||||
"mediawiki_secretkey" : "POD_CHARLESREID1_MW_SECRET_KEY",
|
||||
# mediawiki:
|
||||
"admin_email": "POD_CHARLESREID1_MW_ADMIN_EMAIL",
|
||||
# gitea:
|
||||
"gitea_app_name": "POD_CHARLESREID1_GITEA_APP_NAME",
|
||||
"gitea_secret_key": "POD_CHARLESREID1_GITEA_SECRET_KEY",
|
||||
"gitea_internal_token": "POD_CHARLESREID1_GITEA_INTERNAL_TOKEN",
|
||||
# aws:
|
||||
"backup_canary_webhook_url": "POD_CHARLESREID1_CANARY_WEBHOOK",
|
||||
"pod_charlesreid1_pod_install_dir": "POD_CHARLESREID1_DIR",
|
||||
"pod_charlesreid1_server_name": "POD_CHARLESREID1_TLD",
|
||||
"pod_charlesreid1_username": "POD_CHARLESREID1_USER",
|
||||
"pod_charlesreid1_vpn_ip_addr": "POD_CHARLESREID1_VPN_IP_ADDR",
|
||||
"pod_charlesreid1_mediawiki_admin_email": "POD_CHARLESREID1_MW_ADMIN_EMAIL",
|
||||
"pod_charlesreid1_mediawiki_secretkey": "POD_CHARLESREID1_MW_SECRET_KEY",
|
||||
"pod_charlesreid1_mysql_password": "POD_CHARLESREID1_MYSQL_PASSWORD",
|
||||
"pod_charlesreid1_gitea_app_name": "POD_CHARLESREID1_GITEA_APP_NAME",
|
||||
"pod_charlesreid1_gitea_secretkey": "POD_CHARLESREID1_GITEA_SECRET_KEY",
|
||||
"pod_charlesreid1_gitea_internaltoken": "POD_CHARLESREID1_GITEA_INTERNAL_TOKEN",
|
||||
"pod_charlesreid1_backups_aws_access_key": "AWS_ACCESS_KEY_ID",
|
||||
"pod_charlesreid1_backups_aws_secret_access_key": "AWS_SECRET_ACCESS_KEY",
|
||||
"pod_charlesreid1_backups_aws_region": "AWS_DEFAULT_REGION",
|
||||
"pod_charlesreid1_backups_dir": "POD_CHARLESREID1_BACKUP_DIR",
|
||||
"pod_charlesreid1_backups_bucket": "POD_CHARLESREID1_BACKUP_S3BUCKET",
|
||||
"pod_charlesreid1_backups_canary_slack_url": "POD_CHARLESREID1_CANARY_WEBHOOK",
|
||||
}
|
||||
|
||||
scripts_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
|
28
scripts/backups/10-pod-charlesreid1-rsyslog.conf
Normal file
28
scripts/backups/10-pod-charlesreid1-rsyslog.conf
Normal file
@@ -0,0 +1,28 @@
|
||||
if ( $programname startswith "pod-charlesreid1-canary" ) then {
|
||||
action(type="omfile" file="/var/log/pod-charlesreid1-canary.service.log" flushOnTXEnd="off")
|
||||
stop
|
||||
}
|
||||
if ( $programname startswith "pod-charlesreid1-certbot" ) then {
|
||||
action(type="omfile" file="/var/log/pod-charlesreid1-certbot.service.log" flushOnTXEnd="off")
|
||||
stop
|
||||
}
|
||||
if ( $programname startswith "pod-charlesreid1-backups-aws" ) then {
|
||||
action(type="omfile" file="/var/log/pod-charlesreid1-backups-aws.service.log" flushOnTXEnd="off")
|
||||
stop
|
||||
}
|
||||
if ( $programname startswith "pod-charlesreid1-backups-cleanolderthan" ) then {
|
||||
action(type="omfile" file="/var/log/pod-charlesreid1-backups-cleanolderthan.service.log" flushOnTXEnd="off")
|
||||
stop
|
||||
}
|
||||
if ( $programname startswith "pod-charlesreid1-backups-gitea" ) then {
|
||||
action(type="omfile" file="/var/log/pod-charlesreid1-backups-gitea.service.log" flushOnTXEnd="off")
|
||||
stop
|
||||
}
|
||||
if ( $programname startswith "pod-charlesreid1-backups-wikidb" ) then {
|
||||
action(type="omfile" file="/var/log/pod-charlesreid1-backups-wikidb.service.log" flushOnTXEnd="on")
|
||||
stop
|
||||
}
|
||||
if ( $programname startswith "pod-charlesreid1-backups-wikifiles" ) then {
|
||||
action(type="omfile" file="/var/log/pod-charlesreid1-backups-wikifiles.service.log" flushOnTXEnd="on")
|
||||
stop
|
||||
}
|
@@ -13,3 +13,40 @@ for the systemd service.
|
||||
|
||||
Use `make install` in the top level of this repo to install
|
||||
the rendered service and timer files.
|
||||
|
||||
## syslog filtering
|
||||
|
||||
Due to a bug in systemd bundled with Ubuntu 18.04, we can't just use the nice easy solution of
|
||||
directing output and error to a specific file.
|
||||
|
||||
Instead, the services all send their stderr and stdout to the system log, and then rsyslog
|
||||
filters those messages and collects them into a separate log file.
|
||||
|
||||
First, install the services.
|
||||
|
||||
Then, install the following rsyslog config file:
|
||||
|
||||
`/etc/rsyslog.d/10-pod-charlesreid1-rsyslog.conf`:
|
||||
|
||||
```
|
||||
if $programname == 'pod-charlesreid1-canary' then /var/log/pod-charlesreid1-canary.service.log
|
||||
if $programname == 'pod-charlesreid1-canary' then stop
|
||||
|
||||
if $programname == 'pod-charlesreid1-backups-aws' then /var/log/pod-charlesreid1-backups-aws.service.log
|
||||
if $programname == 'pod-charlesreid1-backups-aws' then stop
|
||||
|
||||
if $programname == 'pod-charlesreid1-backups-cleanolderthan' then /var/log/pod-charlesreid1-backups-cleanolderthan.service.log
|
||||
if $programname == 'pod-charlesreid1-backups-cleanolderthan' then stop
|
||||
|
||||
if $programname == 'pod-charlesreid1-backups-gitea' then /var/log/pod-charlesreid1-backups-gitea.service.log
|
||||
if $programname == 'pod-charlesreid1-backups-gitea' then stop
|
||||
|
||||
if $programname == 'pod-charlesreid1-backups-wikidb' then /var/log/pod-charlesreid1-backups-wikidb.service.log
|
||||
if $programname == 'pod-charlesreid1-backups-wikidb' then stop
|
||||
|
||||
if $programname == 'pod-charlesreid1-backups-wikifiles' then /var/log/pod-charlesreid1-backups-wikifiles.service.log
|
||||
if $programname == 'pod-charlesreid1-backups-wikifiles' then stop
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
@@ -47,12 +47,12 @@ if [ "$#" == "0" ]; then
|
||||
echo "Last backup found: ${LAST_BACKUP}"
|
||||
echo "Last backup directory: ${POD_CHARLESREID1_BACKUP_DIR}/${LAST_BACKUP}"
|
||||
|
||||
BACKUP_SIZE=$(du -hs ${POD_CHARLESREID1_BACKUP_DIR}/${LAST_BACKUP})
|
||||
BACKUP_SIZE=$(/usr/bin/du -hs ${POD_CHARLESREID1_BACKUP_DIR}/${LAST_BACKUP} | cut -f 1)
|
||||
echo "Backup directory size: ${BACKUP_SIZE}"
|
||||
|
||||
# Copy to AWS
|
||||
echo "Backing up directory ${POD_CHARLESREID1_BACKUP_DIR}/${LAST_BACKUP}"
|
||||
aws s3 cp --only-show-errors --recursive ${POD_CHARLESREID1_BACKUP_DIR}/${LAST_BACKUP} s3://${POD_CHARLESREID1_BACKUP_S3BUCKET}/backups/${LAST_BACKUP}
|
||||
aws s3 cp --only-show-errors --no-progress --recursive ${POD_CHARLESREID1_BACKUP_DIR}/${LAST_BACKUP} s3://${POD_CHARLESREID1_BACKUP_S3BUCKET}/backups/${LAST_BACKUP}
|
||||
echo "Done."
|
||||
|
||||
else
|
||||
|
@@ -24,7 +24,7 @@ def main():
|
||||
alert(msg)
|
||||
|
||||
# verify there is a backup newer than N days
|
||||
newer_backups = subprocess.getoutput(f'find {backup_dir} -mtime -{N}').split('\n')
|
||||
newer_backups = subprocess.getoutput(f'find {backup_dir}/* -mtime -{N}').split('\n')
|
||||
if len(newer_backups)==1 and newer_backups[0]=='':
|
||||
msg = "Local Backups Error:\n"
|
||||
msg += f"The backup directory `{backup_dir}` is missing backup files from the last {N} day(s)!"
|
||||
@@ -97,7 +97,7 @@ def alert(msg):
|
||||
raise Exception(response.status_code, response.text)
|
||||
|
||||
print("Goodbye.")
|
||||
sys.exit(1)
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
@@ -5,9 +5,10 @@ After=docker.service
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
StandardError=file:{{ pod_install_dir }}/.pod-charlesreid1-canary.service.error.log
|
||||
StandardOutput=file:{{ pod_install_dir }}/.pod-charlesreid1-canary.service.output.log
|
||||
ExecStart=/bin/bash -ac '. {{ pod_install_dir }}/environment; {{ pod_install_dir }}/scripts/backups/canary/vp/bin/python3 {{ pod_install_dir }}/scripts/backups/canary/backups_canary.py'
|
||||
StandardError=syslog
|
||||
StandardOutput=syslog
|
||||
SyslogIdentifier=pod-charlesreid1-canary
|
||||
ExecStartPre=/usr/bin/test -f {{ pod_charlesreid1_pod_install_dir }}/environment
|
||||
ExecStart=/bin/bash -ac '. {{ pod_charlesreid1_pod_install_dir }}/environment; /home/charles/.pyenv/shims/python3 {{ pod_charlesreid1_pod_install_dir }}/scripts/backups/canary/backups_canary.py'
|
||||
User=charles
|
||||
Group=charles
|
||||
|
||||
|
@@ -2,7 +2,7 @@
|
||||
Description=Timer to run the pod-charlesreid1 backups canary
|
||||
|
||||
[Timer]
|
||||
OnCalendar=Sun *-*-* 9:03:00
|
||||
OnCalendar=*-*-* 7:01:00
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
|
@@ -6,7 +6,7 @@ set -eux
|
||||
|
||||
# Number of days of backups to retain.
|
||||
# Everything older than this many days will be deleted
|
||||
N="45"
|
||||
N="22"
|
||||
|
||||
function usage {
|
||||
set +x
|
||||
@@ -39,7 +39,7 @@ if [ "$#" == "0" ]; then
|
||||
echo "Backup directory: ${POD_CHARLESREID1_BACKUP_DIR}"
|
||||
echo ""
|
||||
|
||||
echo "Cleaning backups directory $BACKUP_DIR"
|
||||
echo "Cleaning backups directory $POD_CHARLESREID1_BACKUP_DIR"
|
||||
echo "The following files older than $N days will be deleted:"
|
||||
find ${POD_CHARLESREID1_BACKUP_DIR} -mtime +${N}
|
||||
|
||||
|
@@ -53,7 +53,7 @@ if [ "$#" == "0" ]; then
|
||||
# We don't need to use docker, since these directories
|
||||
# are both bind-mounted into the Docker container
|
||||
echo "Backing up custom directory"
|
||||
tar czf ${CUSTOM_TARGET} ${POD_CHARLESREID1_DIR}/d-gitea/custom
|
||||
tar --exclude='gitea.log' --ignore-failed-read -czf ${CUSTOM_TARGET} ${POD_CHARLESREID1_DIR}/d-gitea/custom
|
||||
echo "Backing up data directory"
|
||||
tar czf ${DATA_TARGET} ${POD_CHARLESREID1_DIR}/d-gitea/data
|
||||
|
||||
|
@@ -5,10 +5,10 @@ After=docker.service
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
StandardError=file:{{ pod_install_dir }}/.pod-charlesreid1-backups-aws.service.error.log
|
||||
StandardOutput=file:{{ pod_install_dir }}/.pod-charlesreid1-backups-aws.service.output.log
|
||||
ExecStartPre=/usr/bin/test -f {{ pod_install_dir }}/environment
|
||||
ExecStart=/bin/bash -ac '. {{ pod_install_dir }}/environment; {{ pod_install_dir }}/scripts/backups/aws_backup.sh'
|
||||
StandardError=syslog
|
||||
StandardOutput=syslog
|
||||
SyslogIdentifier=pod-charlesreid1-backups-aws
|
||||
ExecStartPre=/usr/bin/test -f {{ pod_charlesreid1_pod_install_dir }}/environment
|
||||
ExecStart=/bin/bash -ac '. {{ pod_charlesreid1_pod_install_dir }}/environment; {{ pod_charlesreid1_pod_install_dir }}/scripts/backups/aws_backup.sh'
|
||||
User=charles
|
||||
Group=charles
|
||||
|
||||
|
@@ -3,6 +3,7 @@ Description=Timer to copy the lastest pod-charlesreid1 backup to an S3 bucket
|
||||
|
||||
[Timer]
|
||||
OnCalendar=Sun *-*-* 2:56:00
|
||||
#OnCalendar=*-*-* 2:56:00
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
|
@@ -1,12 +1,14 @@
|
||||
[Unit]
|
||||
Description=Copy the latest pod-charlesreid1 backup to an S3 bucket
|
||||
Description=Clean pod-charlesreid1 backups older than N days
|
||||
Requires=docker.service
|
||||
After=docker.service
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
StandardError=file:{{ pod_install_dir }}/.pod-charlesreid1-backups-cleanolderthan.service.error.log
|
||||
StandardOutput=file:{{ pod_install_dir }}/.pod-charlesreid1-backups-cleanolderthan.service.output.log
|
||||
ExecStart=/bin/bash -ac '. {{ pod_install_dir }}/environment; {{ pod_install_dir }}/scripts/backups/clean_olderthan.sh'
|
||||
StandardError=syslog
|
||||
StandardOutput=syslog
|
||||
SyslogIdentifier=pod-charlesreid1-backups-cleanolderthan
|
||||
ExecStartPre=/usr/bin/test -f {{ pod_charlesreid1_pod_install_dir }}/environment
|
||||
ExecStart=/bin/bash -ac '. {{ pod_charlesreid1_pod_install_dir }}/environment; {{ pod_charlesreid1_pod_install_dir }}/scripts/backups/clean_olderthan.sh'
|
||||
User=charles
|
||||
Group=charles
|
||||
|
@@ -0,0 +1,9 @@
|
||||
[Unit]
|
||||
Description=Timer to clean files older than N days from the pod-charlesreid1 backups dir
|
||||
|
||||
[Timer]
|
||||
OnCalendar=Sun *-*-* 2:28:00
|
||||
#OnCalendar=*-*-* 2:28:00
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
@@ -5,10 +5,10 @@ After=docker.service
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
StandardError=file:{{ pod_install_dir }}/.pod-charlesreid1-backups-gitea.service.error.log
|
||||
StandardOutput=file:{{ pod_install_dir }}/.pod-charlesreid1-backups-gitea.service.output.log
|
||||
ExecStartPre=/usr/bin/test -f {{ pod_install_dir }}/environment
|
||||
ExecStart=/bin/bash -ac '. {{ pod_install_dir }}/environment; {{ pod_install_dir }}/scripts/backups/gitea_backup.sh'
|
||||
StandardError=syslog
|
||||
StandardOutput=syslog
|
||||
SyslogIdentifier=pod-charlesreid1-backups-gitea
|
||||
ExecStartPre=/usr/bin/test -f {{ pod_charlesreid1_pod_install_dir }}/environment
|
||||
ExecStart=/bin/bash -ac '. {{ pod_charlesreid1_pod_install_dir }}/environment; {{ pod_charlesreid1_pod_install_dir }}/scripts/backups/gitea_backup.sh'
|
||||
User=charles
|
||||
Group=charles
|
||||
|
||||
|
@@ -3,6 +3,7 @@ Description=Timer to back up pod-charlesreid1 gitea files
|
||||
|
||||
[Timer]
|
||||
OnCalendar=Sun *-*-* 2:12:00
|
||||
#OnCalendar=*-*-* 2:12:00
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
|
@@ -5,10 +5,10 @@ After=docker.service
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
StandardError=file:{{ pod_install_dir }}/.pod-charlesreid1-backups-wikidb.service.error.log
|
||||
StandardOutput=file:{{ pod_install_dir }}/.pod-charlesreid1-backups-wikidb.service.output.log
|
||||
ExecStartPre=/usr/bin/test -f {{ pod_install_dir }}/environment
|
||||
ExecStart=/bin/bash -ac '. {{ pod_install_dir }}/environment; {{ pod_install_dir }}/scripts/backups/wikidb_dump.sh'
|
||||
StandardError=syslog
|
||||
StandardOutput=syslog
|
||||
SyslogIdentifier=pod-charlesreid1-backups-wikidb
|
||||
ExecStartPre=/usr/bin/test -f {{ pod_charlesreid1_pod_install_dir }}/environment
|
||||
ExecStart=/bin/bash -ac '. {{ pod_charlesreid1_pod_install_dir }}/environment; {{ pod_charlesreid1_pod_install_dir }}/scripts/backups/wikidb_dump.sh'
|
||||
User=charles
|
||||
Group=charles
|
||||
|
||||
|
@@ -1,13 +1,14 @@
|
||||
[Unit]
|
||||
Description=Back up the pod-charlesreid1 wiki files
|
||||
Description=Back up pod-charlesreid1 wiki files
|
||||
Requires=docker.service
|
||||
After=docker.service
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
StandardError=file:{{ pod_install_dir }}/.pod-charlesreid1-backups-wikifiles.service.error.log
|
||||
StandardOutput=file:{{ pod_install_dir }}/.pod-charlesreid1-backups-wikifiles.service.output.log
|
||||
ExecStartPre=/usr/bin/test -f {{ pod_install_dir }}/environment
|
||||
ExecStart=/bin/bash -ac '. {{ pod_install_dir }}/environment; {{ pod_install_dir }}/scripts/backups/wikifiles_dump.sh'
|
||||
StandardError=syslog
|
||||
StandardOutput=syslog
|
||||
SyslogIdentifier=pod-charlesreid1-backups-wikifiles
|
||||
ExecStartPre=/usr/bin/test -f {{ pod_charlesreid1_pod_install_dir }}/environment
|
||||
ExecStart=/bin/bash -ac '. {{ pod_charlesreid1_pod_install_dir }}/environment; {{ pod_charlesreid1_pod_install_dir }}/scripts/backups/wikifiles_dump.sh'
|
||||
User=charles
|
||||
Group=charles
|
||||
|
@@ -1,5 +1,5 @@
|
||||
[Unit]
|
||||
Description=Timer to back up the pod-charlesreid1 wiki files
|
||||
Description=Timer to back up pod-charlesreid1 wiki files
|
||||
|
||||
[Timer]
|
||||
OnCalendar=Sun *-*-* 2:08:00
|
||||
|
@@ -5,7 +5,8 @@
|
||||
set -eux
|
||||
|
||||
CONTAINER_NAME="stormy_mysql"
|
||||
STAMP="`date +"%Y%m%d"`"
|
||||
DATESTAMP="`date +"%Y%m%d"`"
|
||||
TIMESTAMP="`date +"%Y%m%d_%H%M%S"`"
|
||||
|
||||
function usage {
|
||||
set +x
|
||||
@@ -20,7 +21,7 @@ function usage {
|
||||
echo "Example:"
|
||||
echo ""
|
||||
echo " ./wikidb_dump.sh"
|
||||
echo " (creates ${POD_CHARLESREID1_BACKUP_DIR}/20200101/wikidb_20200101.sql)"
|
||||
echo " (creates ${POD_CHARLESREID1_BACKUP_DIR}/YYYYMMDD/wikidb_YYYYMMDD_HHMMSS.sql)"
|
||||
echo ""
|
||||
exit 1;
|
||||
}
|
||||
@@ -36,25 +37,33 @@ fi
|
||||
|
||||
if [ "$#" == "0" ]; then
|
||||
|
||||
TARGET="wikidb_${STAMP}.sql"
|
||||
BACKUP_TARGET="${POD_CHARLESREID1_BACKUP_DIR}/${STAMP}/${TARGET}"
|
||||
TARGET="wikidb_${TIMESTAMP}.sql"
|
||||
BACKUP_DIR="${POD_CHARLESREID1_BACKUP_DIR}/${DATESTAMP}"
|
||||
BACKUP_TARGET="${BACKUP_DIR}/${TARGET}"
|
||||
|
||||
echo ""
|
||||
echo "pod-charlesreid1: wikidb_dump.sh"
|
||||
echo "--------------------------------"
|
||||
echo ""
|
||||
echo "Backup directory: ${POD_CHARLESREID1_BACKUP_DIR}"
|
||||
echo "Backup directory: ${BACKUP_DIR}"
|
||||
echo "Backup target: ${BACKUP_TARGET}"
|
||||
echo ""
|
||||
|
||||
mkdir -p ${POD_CHARLESREID1_BACKUP_DIR}/${STAMP}
|
||||
mkdir -p ${BACKUP_DIR}
|
||||
|
||||
DOCKER=$(which docker)
|
||||
DOCKERX="${DOCKER} exec -t"
|
||||
|
||||
echo "Running mysqldump inside the mysql container"
|
||||
${DOCKERX} ${CONTAINER_NAME} sh -c 'exec mysqldump wikidb --databases -uroot -p"$MYSQL_ROOT_PASSWORD"' 2>&1 | grep -v "Using a password" > ${BACKUP_TARGET}
|
||||
|
||||
# this works, except the first line is a stupid warning about passwords
|
||||
${DOCKERX} ${CONTAINER_NAME} sh -c 'exec mysqldump wikidb --databases -uroot -p"$MYSQL_ROOT_PASSWORD" --default-character-set=binary' > ${BACKUP_TARGET}
|
||||
|
||||
# trim stupid first line warning
|
||||
tail -n +2 ${BACKUP_TARGET} > ${BACKUP_TARGET}.tmp
|
||||
mv ${BACKUP_TARGET}.tmp ${BACKUP_TARGET}
|
||||
|
||||
echo "Successfully wrote SQL dump to file: ${BACKUP_TARGET}"
|
||||
echo "Done."
|
||||
|
||||
else
|
||||
|
@@ -5,7 +5,8 @@
|
||||
set -eux
|
||||
|
||||
CONTAINER_NAME="stormy_mw"
|
||||
STAMP="`date +"%Y%m%d"`"
|
||||
DATESTAMP="`date +"%Y%m%d"`"
|
||||
TIMESTAMP="`date +"%Y%m%d_%H%M%S"`"
|
||||
|
||||
function usage {
|
||||
set +x
|
||||
@@ -20,7 +21,7 @@ function usage {
|
||||
echo "Example:"
|
||||
echo ""
|
||||
echo " ./wikifiles_dump.sh"
|
||||
echo " (creates ${POD_CHARLESREID1_BACKUP_DIR}/20200101/wikifiles_20200101.tar.gz)"
|
||||
echo " (creates ${POD_CHARLESREID1_BACKUP_DIR}/YYYYMMDD/wikifiles_YYYYMMDD_HHMMSS.tar.gz)"
|
||||
echo ""
|
||||
exit 1;
|
||||
}
|
||||
@@ -36,18 +37,19 @@ fi
|
||||
|
||||
if [ "$#" == "0" ]; then
|
||||
|
||||
TARGET="wikifiles_${STAMP}.tar.gz"
|
||||
BACKUP_TARGET="${POD_CHARLESREID1_BACKUP_DIR}/${STAMP}/${TARGET}"
|
||||
TARGET="wikifiles_${TIMESTAMP}.tar.gz"
|
||||
BACKUP_DIR="${POD_CHARLESREID1_BACKUP_DIR}/${DATESTAMP}"
|
||||
BACKUP_TARGET="${BACKUP_DIR}/${TARGET}"
|
||||
|
||||
echo ""
|
||||
echo "pod-charlesreid1: wikifiles_dump.sh"
|
||||
echo "-----------------------------------"
|
||||
echo ""
|
||||
echo "Backup directory: ${POD_CHARLESREID1_BACKUP_DIR}"
|
||||
echo "Backup directory: ${BACKUP_DIR}"
|
||||
echo "Backup target: ${BACKUP_TARGET}"
|
||||
echo ""
|
||||
|
||||
mkdir -p ${POD_CHARLESREID1_BACKUP_DIR}/${STAMP}
|
||||
mkdir -p ${BACKUP_DIR}
|
||||
|
||||
DOCKER=$(which docker)
|
||||
DOCKERX="${DOCKER} exec -t"
|
||||
@@ -62,6 +64,7 @@ if [ "$#" == "0" ]; then
|
||||
echo "Step 3: Clean up tar.gz file"
|
||||
${DOCKERX} ${CONTAINER_NAME} /bin/rm -f /tmp/${TARGET}
|
||||
|
||||
echo "Successfully wrote wikifiles dump to file: ${BACKUP_TARGET}"
|
||||
echo "Done."
|
||||
|
||||
else
|
||||
|
47
scripts/backups/wikifiles_restore.sh
Executable file
47
scripts/backups/wikifiles_restore.sh
Executable file
@@ -0,0 +1,47 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Restore wiki files from a tar file
|
||||
# into the stormy_mw container.
|
||||
set -eu
|
||||
|
||||
function usage {
|
||||
echo ""
|
||||
echo "restore_wikifiles.sh script:"
|
||||
echo "Restore wiki files from a tar file"
|
||||
echo "into the stormy_mw container"
|
||||
echo ""
|
||||
echo " ./restore_wikifiles.sh <tar-file>"
|
||||
echo ""
|
||||
echo "Example:"
|
||||
echo ""
|
||||
echo " ./restore_wikifiles.sh /path/to/wikifiles.tar.gz"
|
||||
echo ""
|
||||
echo ""
|
||||
exit 1;
|
||||
}
|
||||
|
||||
# NOTE:
|
||||
# I assume images/ is the only directory to back up/restore.
|
||||
# If there are more I forgot, add them back in here.
|
||||
# (skins and extensions are static, added into image at build time.)
|
||||
|
||||
if [[ "$#" -eq 1 ]];
|
||||
then
|
||||
|
||||
NAME="stormy_mw"
|
||||
TAR=$(basename "$1")
|
||||
|
||||
echo "Checking that container ${NAME} exists"
|
||||
docker ps --format '{{.Names}}' | grep ${NAME} || exit 1;
|
||||
|
||||
echo "Copying dir $1 into container ${NAME}"
|
||||
set -x
|
||||
docker cp $1 ${NAME}:/tmp/${TAR}
|
||||
docker exec -it ${NAME} rm -rf /var/www/html/images.old
|
||||
docker exec -it ${NAME} mv /var/www/html/images /var/www/html/images.old
|
||||
docker exec -it ${NAME} tar -xf /tmp/${TAR} -C / && rm -f /tmp/${TAR}
|
||||
docker exec -it ${NAME} chown -R www-data:www-data /var/www/html/images
|
||||
|
||||
else
|
||||
usage
|
||||
fi
|
@@ -5,6 +5,8 @@ After=docker.service
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
StandardError=file:{{ pod_install_dir }}/.pod-charlesreid1-certbot.service.error.log
|
||||
StandardOutput=file:{{ pod_install_dir }}/.pod-charlesreid1-certbot.service.output.log
|
||||
ExecStart=/bin/bash -ac '. {{ pod_install_dir }}/environment; {{ pod_install_dir }}/scripts/certbot/renew_charlesreid1_certs.sh'
|
||||
StandardError=syslog
|
||||
StandardOutput=syslog
|
||||
SyslogIdentifier=pod-charlesreid1-certbot
|
||||
ExecStartPre=/usr/bin/test -f {{ pod_charlesreid1_pod_install_dir }}/environment
|
||||
ExecStart=/bin/bash -ac '. {{ pod_charlesreid1_pod_install_dir }}/environment; {{ pod_charlesreid1_pod_install_dir }}/scripts/certbot/renew_charlesreid1_certs.sh'
|
||||
|
@@ -34,7 +34,7 @@ if [ "$#" == "0" ]; then
|
||||
sudo systemctl stop ${SERVICE}
|
||||
|
||||
echo "Stop pod"
|
||||
docker-compose -f {{ pod_install_dir }}/docker-compose.yml down
|
||||
docker-compose -f {{ pod_charlesreid1_pod_install_dir }}/docker-compose.yml down
|
||||
|
||||
echo "Run certbot renew"
|
||||
SUBS="git www"
|
||||
@@ -63,7 +63,7 @@ if [ "$#" == "0" ]; then
|
||||
done
|
||||
|
||||
echo "Start pod"
|
||||
docker-compose -f {{ pod_install_dir }}/docker-compose.yml up -d
|
||||
docker-compose -f {{ pod_charlesreid1_pod_install_dir }}/docker-compose.yml up -d
|
||||
|
||||
echo "Enable and start system service ${SERVICE}"
|
||||
sudo systemctl enable ${SERVICE}
|
||||
|
@@ -13,7 +13,9 @@ def clean():
|
||||
rname = tname[:-3]
|
||||
rpath = os.path.join(tdir, rname)
|
||||
|
||||
if os.path.exists(rpath):
|
||||
ignore_list = ['environment']
|
||||
|
||||
if os.path.exists(rpath) and rname not in ignore_list:
|
||||
print(f"Removing file {rpath}")
|
||||
os.remove(rpath)
|
||||
else:
|
||||
|
@@ -11,8 +11,8 @@ directory structure for charlesreid1.com
|
||||
content. (Or, charlesreid1.XYZ, whatever.)
|
||||
"""
|
||||
|
||||
SERVER_NAME_DEFAULT = '{{ server_name_default }}'
|
||||
USERNAME = '{{ username }}'
|
||||
SERVER_NAME_DEFAULT = '{{ pod_charlesreid1_server_name }}'
|
||||
USERNAME = '{{ pod_charlesreid1_username }}'
|
||||
|
||||
|
||||
|
||||
|
@@ -10,8 +10,8 @@ This script git pulls the /www directory
|
||||
for updating charlesreid1.com content.
|
||||
"""
|
||||
|
||||
SERVER_NAME_DEFAULT = '{{ server_name_default }}'
|
||||
USERNAME = '{{ username }}'
|
||||
SERVER_NAME_DEFAULT = '{{ pod_charlesreid1_server_name }}'
|
||||
USERNAME = '{{ pod_charlesreid1_username }}'
|
||||
|
||||
|
||||
|
||||
|
@@ -80,19 +80,5 @@ fi
|
||||
|
||||
##############################
|
||||
|
||||
Extension="Fail2banlog"
|
||||
if [ ! -d ${Extension} ]
|
||||
then
|
||||
git clone https://github.com/charlesreid1-docker/mw-fail2ban.git ${Extension}
|
||||
(
|
||||
cd ${Extension}
|
||||
git checkout master
|
||||
)
|
||||
else
|
||||
echo "Skipping ${Extension}"
|
||||
fi
|
||||
|
||||
##############################
|
||||
|
||||
# fin
|
||||
)
|
||||
|
@@ -1,13 +1,6 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# fix LocalSettings.php in the mediawiki container.
|
||||
#
|
||||
# docker is stupid, so it doesn't let you bind mount
|
||||
# a single file into a docker volume.
|
||||
#
|
||||
# so, rather than rebuilding the entire goddamn container
|
||||
# just to update LocalSettings.php when it changes, we just
|
||||
# use a docker cp command to copy it into the container.
|
||||
set -eux
|
||||
|
||||
NAME="stormy_mw"
|
||||
|
@@ -1,12 +1,6 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# fix extensions dir in the mediawiki container
|
||||
#
|
||||
# in theory, we should be able to update the
|
||||
# extensions folder in d-mediawiki/charlesreid1-config,
|
||||
# but in reality this falls on its face.
|
||||
# So, we have to fix the fucking extensions directory
|
||||
# ourselves.
|
||||
set -eux
|
||||
|
||||
NAME="stormy_mw"
|
||||
|
@@ -1,13 +1,6 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# fix skins in the mediawiki container.
|
||||
#
|
||||
# docker is stupid, so it doesn't let you bind mount
|
||||
# a single file into a docker volume.
|
||||
#
|
||||
# so, rather than rebuilding the entire goddamn container
|
||||
# just to update the skin when it changes, we just
|
||||
# use a docker cp command to copy it into the container.
|
||||
set -eux
|
||||
|
||||
NAME="stormy_mw"
|
||||
|
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# Restore wiki files from a tar file
|
||||
# into the stormy_mw container.
|
||||
set -eux
|
||||
set -eu
|
||||
|
||||
function usage {
|
||||
echo ""
|
||||
@@ -31,16 +31,16 @@ then
|
||||
NAME="stormy_mw"
|
||||
TAR=$(basename "$1")
|
||||
|
||||
echo "Checking that container exists"
|
||||
echo "Checking that container ${NAME} exists"
|
||||
docker ps --format '{{.Names}}' | grep ${NAME} || exit 1;
|
||||
|
||||
echo "Copying $1 into container ${NAME}"
|
||||
echo "Copying dir $1 into container ${NAME}"
|
||||
set -x
|
||||
docker cp $1 ${NAME}:/tmp/${TAR}
|
||||
docker exec -it ${NAME} rm -rf /var/www/html/images.old
|
||||
docker exec -it ${NAME} mv /var/www/html/images /var/www/html/images.old
|
||||
docker exec -it ${NAME} tar -xf /tmp/${TAR} -C / && rm -f /tmp/${TAR}
|
||||
docker exec -it ${NAME} chown -R www-data:www-data /var/www/html/images
|
||||
set +x
|
||||
|
||||
else
|
||||
usage
|
||||
|
@@ -1,35 +1,36 @@
|
||||
#!/bin/bash
|
||||
echo "this script is deprecated, see ../backups/wikidb_dump.sh"
|
||||
##
|
||||
## Dump a database to an .sql file
|
||||
## from the stormy_mysql container.
|
||||
#set -eu
|
||||
#
|
||||
# Dump a database to an .sql file
|
||||
# from the stormy_mysql container.
|
||||
set -x
|
||||
|
||||
function usage {
|
||||
echo ""
|
||||
echo "dump_database.sh script:"
|
||||
echo "Dump a database to an .sql file "
|
||||
echo "from the stormy_mysql container."
|
||||
echo ""
|
||||
echo " ./dump_database.sh <sql-dump-file>"
|
||||
echo ""
|
||||
echo "Example:"
|
||||
echo ""
|
||||
echo " ./dump_database.sh /path/to/wikidb_dump.sql"
|
||||
echo ""
|
||||
echo ""
|
||||
exit 1;
|
||||
}
|
||||
|
||||
CONTAINER_NAME="stormy_mysql"
|
||||
|
||||
if [[ "$#" -gt 0 ]];
|
||||
then
|
||||
|
||||
TARGET="$1"
|
||||
mkdir -p $(dirname $TARGET)
|
||||
docker exec -i ${CONTAINER_NAME} sh -c 'exec mysqldump wikidb --databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > $TARGET
|
||||
|
||||
else
|
||||
usage
|
||||
fi
|
||||
|
||||
#function usage {
|
||||
# echo ""
|
||||
# echo "dump_database.sh script:"
|
||||
# echo "Dump a database to an .sql file "
|
||||
# echo "from the stormy_mysql container."
|
||||
# echo ""
|
||||
# echo " ./dump_database.sh <sql-dump-file>"
|
||||
# echo ""
|
||||
# echo "Example:"
|
||||
# echo ""
|
||||
# echo " ./dump_database.sh /path/to/wikidb_dump.sql"
|
||||
# echo ""
|
||||
# echo ""
|
||||
# exit 1;
|
||||
#}
|
||||
#
|
||||
#CONTAINER_NAME="stormy_mysql"
|
||||
#
|
||||
#if [[ "$#" -gt 0 ]];
|
||||
#then
|
||||
#
|
||||
# TARGET="$1"
|
||||
# mkdir -p $(dirname $TARGET)
|
||||
# set -x
|
||||
# docker exec -i ${CONTAINER_NAME} sh -c 'exec mysqldump wikidb --databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > $TARGET
|
||||
#
|
||||
#else
|
||||
# usage
|
||||
#fi
|
||||
|
@@ -6,6 +6,7 @@
|
||||
# Note that this expects the .sql dump
|
||||
# to create its own databases.
|
||||
# Use the --databases flag with mysqldump.
|
||||
set -eu
|
||||
|
||||
function usage {
|
||||
echo ""
|
||||
@@ -42,31 +43,23 @@ function usage {
|
||||
# because of all these one-off
|
||||
# "whoopsie we don't do that" problems.
|
||||
|
||||
if [[ "$#" -eq 1 ]];
|
||||
then
|
||||
|
||||
CONTAINER_NAME="stormy_mysql"
|
||||
TARGET=$(basename $1)
|
||||
TARGET_DIR=$(dirname $1)
|
||||
|
||||
|
||||
if [[ "$#" -eq 1 ]];
|
||||
then
|
||||
|
||||
# Step 1: Copy the sql dump into the container
|
||||
set -x
|
||||
# Step 1: Copy the sql dump into the container
|
||||
docker cp $1 ${CONTAINER_NAME}:/tmp/${TARGET}
|
||||
set +x
|
||||
|
||||
# Step 2: Run sqldump inside the container
|
||||
set -x
|
||||
docker exec -i ${CONTAINER_NAME} sh -c "/usr/bin/mysql --defaults-file=/root/.mysql.rootpw.cnf < /tmp/${TARGET}"
|
||||
set +x
|
||||
|
||||
# Step 3: Clean up sql dump from inside container
|
||||
set -x
|
||||
docker exec -i ${CONTAINER_NAME} sh -c "/bin/rm -fr /tmp/${TARGET}.sql"
|
||||
set +x
|
||||
docker exec -i ${CONTAINER_NAME} sh -c "/bin/rm -fr /tmp/${TARGET}"
|
||||
|
||||
|
||||
set +x
|
||||
else
|
||||
usage
|
||||
fi
|
||||
|
@@ -7,9 +7,9 @@ After=docker.service
|
||||
Restart=always
|
||||
StandardError=null
|
||||
StandardOutput=null
|
||||
ExecStartPre=/usr/bin/test -f {{ pod_install_dir }}/docker-compose.yml
|
||||
ExecStart=/usr/local/bin/docker-compose -f {{ pod_install_dir }}/docker-compose.yml up
|
||||
ExecStop=/usr/local/bin/docker-compose -f {{ pod_install_dir }}/docker-compose.yml stop
|
||||
ExecStartPre=/usr/bin/test -f {{ pod_charlesreid1_pod_install_dir }}/docker-compose.yml
|
||||
ExecStart=/usr/local/bin/docker-compose -f {{ pod_charlesreid1_pod_install_dir }}/docker-compose.yml up
|
||||
ExecStop=/usr/local/bin/docker-compose -f {{ pod_charlesreid1_pod_install_dir }}/docker-compose.yml stop
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
|
Reference in New Issue
Block a user