<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.mediagoblin.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mconnell</id>
	<title>GNU MediaGoblin Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.mediagoblin.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mconnell"/>
	<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/Special:Contributions/Mconnell"/>
	<updated>2026-06-21T22:36:20Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=EasyDeployment&amp;diff=1941</id>
		<title>EasyDeployment</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=EasyDeployment&amp;diff=1941"/>
		<updated>2020-05-16T04:35:47Z</updated>

		<summary type="html">&lt;p&gt;Mconnell: /* Nginx virtual server definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Inventory of single step installation of MediaGoblin for demonstration purposes.&lt;br /&gt;
&lt;br /&gt;
= Containers =&lt;br /&gt;
&lt;br /&gt;
== Docker ==&lt;br /&gt;
&lt;br /&gt;
While MediaGoblin has no official Docker image, [https://hub.docker.com/r/mtlynch/mediagoblin/ mtlynch maintains] the most up-to-date version.&lt;br /&gt;
&lt;br /&gt;
To run it:&lt;br /&gt;
&lt;br /&gt;
  docker run \&lt;br /&gt;
    --tty \&lt;br /&gt;
    --detach \&lt;br /&gt;
    --publish 8080:6543 \&lt;br /&gt;
    --name mediagoblin \&lt;br /&gt;
    mtlynch/mediagoblin&lt;br /&gt;
&lt;br /&gt;
Visit [http://localhost:8080 http://localhost:8080] in your browser to see your Dockerized MediaGoblin instance.&lt;br /&gt;
&lt;br /&gt;
Admin credentials are:&lt;br /&gt;
&lt;br /&gt;
* Username: &#039;&#039;&#039;admin&#039;&#039;&#039;&lt;br /&gt;
* Password: &#039;&#039;&#039;admin&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For full details on running the Docker image or rebuilding your own custom image, see [https://github.com/mtlynch/mediagoblin-docker https://github.com/mtlynch/mediagoblin-docker].&lt;br /&gt;
&lt;br /&gt;
=== Docker behind nginx ===&lt;br /&gt;
&lt;br /&gt;
The following may be useful for users running a MediaGoblin docker container behind an nginx reverse proxy, eg. for handling SSL.&lt;br /&gt;
&lt;br /&gt;
==== Nginx virtual server definition ====&lt;br /&gt;
&lt;br /&gt;
Note that the port number in the proxy_pass must match the port number you use when starting the container.  See the shell script in the next section.&lt;br /&gt;
&lt;br /&gt;
You will want to edit the host name to use your own, as well.&lt;br /&gt;
&lt;br /&gt;
You may also change the client_max_body_size to a value you deem appropriate for your server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    if ($host = mediagoblin.example.com) {&lt;br /&gt;
        return 301 https://$host$request_uri;&lt;br /&gt;
    } # managed by Certbot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    listen 80 ;&lt;br /&gt;
    listen [::]:80 ;&lt;br /&gt;
    server_name mediagoblin.example.com;&lt;br /&gt;
&lt;br /&gt;
    access_log /var/log/nginx/mg.access_log ;&lt;br /&gt;
    error_log /var/log/nginx/mg.error_log ;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# HTTPS&lt;br /&gt;
server {&lt;br /&gt;
   listen 443 ;&lt;br /&gt;
   listen [::]:443 ;&lt;br /&gt;
   server_name mediagoblin.example.com;&lt;br /&gt;
&lt;br /&gt;
   # needed to actually upload any files.&lt;br /&gt;
   client_max_body_size 32M;&lt;br /&gt;
&lt;br /&gt;
   access_log /var/log/nginx/mg.ssl_access_log ;&lt;br /&gt;
   error_log /var/log/nginx/mg.ssl_error_log ;&lt;br /&gt;
&lt;br /&gt;
   location / {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8138;&lt;br /&gt;
        proxy_set_header X-Forwarded-Host $server_name;&lt;br /&gt;
        proxy_set_header X-Forwarded-Proto https;&lt;br /&gt;
        proxy_set_header X-Forwarded-For $remote_addr;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate /etc/letsencrypt/live/mediagoblin.example.com/fullchain.pem; # managed by Certbot&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/mediagoblin.example.com/privkey.pem; # managed by Certbot&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Docker container start/stop/update script ====&lt;br /&gt;
&lt;br /&gt;
This shell script is essentially a wrapper around the example docker run statement given for the container.  However, this adds in some helper functions as well, so that starting or restarting the container can be done just by calling the script, and updating the container is as easy as calling the script with &amp;quot;update&amp;quot; as the first argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# MediaGoblin docker container bootstrap&lt;br /&gt;
# References:&lt;br /&gt;
# - https://savannah.gnu.org/projects/mediagoblin&lt;br /&gt;
# - https://hub.docker.com/r/mtlynch/mediagoblin&lt;br /&gt;
&lt;br /&gt;
### Setup&lt;br /&gt;
&lt;br /&gt;
set -o errexit&lt;br /&gt;
set -o pipefail&lt;br /&gt;
&lt;br /&gt;
# Docker stuff&lt;br /&gt;
# CONTAINER refers to the namespace and container name&lt;br /&gt;
# SHORTNAME can be changed to whatever you like&lt;br /&gt;
# CONTAINERTAG should be latest unless you have need of a specific tag&lt;br /&gt;
CONTAINER=&amp;quot;mtlynch/mediagoblin&amp;quot;&lt;br /&gt;
SHORTNAME=&amp;quot;mediagoblin&amp;quot;&lt;br /&gt;
CONTAINERTAG=&amp;quot;latest&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Docker options&lt;br /&gt;
# The INSIDEPORT should remain the same; see the docker hub page&lt;br /&gt;
# The OUTSIDEPORT can be whatever you like (&amp;gt;1024) and must match nginx config&lt;br /&gt;
# The LOCALDIR is the directory on your local file system to mount inside the container&lt;br /&gt;
# The CONTAINERDIR should remain as-is; see the docker hub page.&lt;br /&gt;
INSIDEPORT=6543&lt;br /&gt;
OUTSIDEPORT=8138&lt;br /&gt;
LOCALDIR=/var/lib/mediagoblin&lt;br /&gt;
CONTAINERDIR=/var/lib/mediagoblin&lt;br /&gt;
&lt;br /&gt;
### Functions&lt;br /&gt;
&lt;br /&gt;
# Pull the latest container&lt;br /&gt;
function pullContainer() {&lt;br /&gt;
    docker pull &amp;quot;${CONTAINER}&amp;quot;:&amp;quot;${CONTAINERTAG}&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Check if the container is running&lt;br /&gt;
function checkRunning() {&lt;br /&gt;
    return $(docker ps | grep -c &amp;quot;${SHORTNAME}&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Stop existing container&lt;br /&gt;
function stopContainer() {&lt;br /&gt;
    docker stop &amp;quot;${SHORTNAME}&amp;quot;&lt;br /&gt;
    docker rm &amp;quot;${SHORTNAME}&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Run the container.&lt;br /&gt;
function runContainer() {&lt;br /&gt;
&lt;br /&gt;
    docker run -d \&lt;br /&gt;
        --name &amp;quot;${SHORTNAME}&amp;quot; \&lt;br /&gt;
        --restart=unless-stopped \&lt;br /&gt;
        --publish ${OUTSIDEPORT}:${INSIDEPORT} \&lt;br /&gt;
        --volume ${LOCALDIR}:${CONTAINERDIR} \&lt;br /&gt;
        &amp;quot;${CONTAINER}&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
### Logic&lt;br /&gt;
&lt;br /&gt;
# Update if desired&lt;br /&gt;
if [[ &amp;quot;$1&amp;quot; == &amp;quot;update&amp;quot; ]]; then&lt;br /&gt;
    pullContainer&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# If it is running, stop it.&lt;br /&gt;
if ! checkRunning ; then&lt;br /&gt;
    stopContainer&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Run the container&lt;br /&gt;
runContainer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= PaaS =&lt;br /&gt;
&lt;br /&gt;
== Sandstorm ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning: Out Of Date. Was at version 0.7.1&#039;&#039;&#039; on 2016-12-20. Can you help to update it?&lt;br /&gt;
&lt;br /&gt;
* sandstorm.io [https://demo.sandstorm.io/appdemo/70awyqss6jq2gkz7dwzsnvumzr07256pzdt3hda9acfuxwh6uh7h MediaGoblin demo]&lt;br /&gt;
&lt;br /&gt;
Source code for the MediaGoblin Sandstorm app:&lt;br /&gt;
&lt;br /&gt;
https://github.com/jparyani/mediagoblin&lt;/div&gt;</summary>
		<author><name>Mconnell</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=EasyDeployment&amp;diff=1940</id>
		<title>EasyDeployment</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=EasyDeployment&amp;diff=1940"/>
		<updated>2020-05-16T04:35:14Z</updated>

		<summary type="html">&lt;p&gt;Mconnell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Inventory of single step installation of MediaGoblin for demonstration purposes.&lt;br /&gt;
&lt;br /&gt;
= Containers =&lt;br /&gt;
&lt;br /&gt;
== Docker ==&lt;br /&gt;
&lt;br /&gt;
While MediaGoblin has no official Docker image, [https://hub.docker.com/r/mtlynch/mediagoblin/ mtlynch maintains] the most up-to-date version.&lt;br /&gt;
&lt;br /&gt;
To run it:&lt;br /&gt;
&lt;br /&gt;
  docker run \&lt;br /&gt;
    --tty \&lt;br /&gt;
    --detach \&lt;br /&gt;
    --publish 8080:6543 \&lt;br /&gt;
    --name mediagoblin \&lt;br /&gt;
    mtlynch/mediagoblin&lt;br /&gt;
&lt;br /&gt;
Visit [http://localhost:8080 http://localhost:8080] in your browser to see your Dockerized MediaGoblin instance.&lt;br /&gt;
&lt;br /&gt;
Admin credentials are:&lt;br /&gt;
&lt;br /&gt;
* Username: &#039;&#039;&#039;admin&#039;&#039;&#039;&lt;br /&gt;
* Password: &#039;&#039;&#039;admin&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For full details on running the Docker image or rebuilding your own custom image, see [https://github.com/mtlynch/mediagoblin-docker https://github.com/mtlynch/mediagoblin-docker].&lt;br /&gt;
&lt;br /&gt;
=== Docker behind nginx ===&lt;br /&gt;
&lt;br /&gt;
The following may be useful for users running a MediaGoblin docker container behind an nginx reverse proxy, eg. for handling SSL.&lt;br /&gt;
&lt;br /&gt;
==== Nginx virtual server definition ====&lt;br /&gt;
&lt;br /&gt;
Note that the port number in the proxy_pass must match the port number you use when starting the container.  See the shell script in the next section.&lt;br /&gt;
&lt;br /&gt;
You will want to edit the host name to use your own, as well.&lt;br /&gt;
&lt;br /&gt;
You may also change the client_max_body_size to a value you deem appropriate for your server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    if ($host = mediagoblin.example.com) {&lt;br /&gt;
        return 301 https://$host$request_uri;&lt;br /&gt;
    } # managed by Certbot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    listen 80 ;&lt;br /&gt;
    listen [::]:80 ;&lt;br /&gt;
    server_name mediagoblin.example.com;&lt;br /&gt;
&lt;br /&gt;
    access_log /var/log/nginx/mg.access_log ;&lt;br /&gt;
    error_log /var/log/nginx/mg.error_log ;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# HTTPS&lt;br /&gt;
server {&lt;br /&gt;
   listen 443 ;&lt;br /&gt;
   listen [::]:443 ;&lt;br /&gt;
   server_name mediagoblin.example.com;&lt;br /&gt;
&lt;br /&gt;
   # needed to actually upload any files.&lt;br /&gt;
   client_max_body_size 32M;&lt;br /&gt;
&lt;br /&gt;
   access_log /var/log/nginx/mg.ssl_access_log ;&lt;br /&gt;
   error_log /var/log/nginx/mg.ssl_error_log ;&lt;br /&gt;
&lt;br /&gt;
   location / {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8138;&lt;br /&gt;
        proxy_set_header X-Forwarded-Host $server_name;&lt;br /&gt;
        proxy_set_header X-Forwarded-Proto https;&lt;br /&gt;
        proxy_set_header X-Forwarded-For $remote_addr;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate /etc/letsencrypt/live/mediagoblin.example.com/fullchain.pem; # managed by Certbot&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/mediagoblin.example.com/privkey.pem; # managed by Certbot&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Docker container start/stop/update script ====&lt;br /&gt;
&lt;br /&gt;
This shell script is essentially a wrapper around the example docker run statement given for the container.  However, this adds in some helper functions as well, so that starting or restarting the container can be done just by calling the script, and updating the container is as easy as calling the script with &amp;quot;update&amp;quot; as the first argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# MediaGoblin docker container bootstrap&lt;br /&gt;
# References:&lt;br /&gt;
# - https://savannah.gnu.org/projects/mediagoblin&lt;br /&gt;
# - https://hub.docker.com/r/mtlynch/mediagoblin&lt;br /&gt;
&lt;br /&gt;
### Setup&lt;br /&gt;
&lt;br /&gt;
set -o errexit&lt;br /&gt;
set -o pipefail&lt;br /&gt;
&lt;br /&gt;
# Docker stuff&lt;br /&gt;
# CONTAINER refers to the namespace and container name&lt;br /&gt;
# SHORTNAME can be changed to whatever you like&lt;br /&gt;
# CONTAINERTAG should be latest unless you have need of a specific tag&lt;br /&gt;
CONTAINER=&amp;quot;mtlynch/mediagoblin&amp;quot;&lt;br /&gt;
SHORTNAME=&amp;quot;mediagoblin&amp;quot;&lt;br /&gt;
CONTAINERTAG=&amp;quot;latest&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Docker options&lt;br /&gt;
# The INSIDEPORT should remain the same; see the docker hub page&lt;br /&gt;
# The OUTSIDEPORT can be whatever you like (&amp;gt;1024) and must match nginx config&lt;br /&gt;
# The LOCALDIR is the directory on your local file system to mount inside the container&lt;br /&gt;
# The CONTAINERDIR should remain as-is; see the docker hub page.&lt;br /&gt;
INSIDEPORT=6543&lt;br /&gt;
OUTSIDEPORT=8138&lt;br /&gt;
LOCALDIR=/var/lib/mediagoblin&lt;br /&gt;
CONTAINERDIR=/var/lib/mediagoblin&lt;br /&gt;
&lt;br /&gt;
### Functions&lt;br /&gt;
&lt;br /&gt;
# Pull the latest container&lt;br /&gt;
function pullContainer() {&lt;br /&gt;
    docker pull &amp;quot;${CONTAINER}&amp;quot;:&amp;quot;${CONTAINERTAG}&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Check if the container is running&lt;br /&gt;
function checkRunning() {&lt;br /&gt;
    return $(docker ps | grep -c &amp;quot;${SHORTNAME}&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Stop existing container&lt;br /&gt;
function stopContainer() {&lt;br /&gt;
    docker stop &amp;quot;${SHORTNAME}&amp;quot;&lt;br /&gt;
    docker rm &amp;quot;${SHORTNAME}&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Run the container.&lt;br /&gt;
function runContainer() {&lt;br /&gt;
&lt;br /&gt;
    docker run -d \&lt;br /&gt;
        --name &amp;quot;${SHORTNAME}&amp;quot; \&lt;br /&gt;
        --restart=unless-stopped \&lt;br /&gt;
        --publish ${OUTSIDEPORT}:${INSIDEPORT} \&lt;br /&gt;
        --volume ${LOCALDIR}:${CONTAINERDIR} \&lt;br /&gt;
        &amp;quot;${CONTAINER}&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
### Logic&lt;br /&gt;
&lt;br /&gt;
# Update if desired&lt;br /&gt;
if [[ &amp;quot;$1&amp;quot; == &amp;quot;update&amp;quot; ]]; then&lt;br /&gt;
    pullContainer&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# If it is running, stop it.&lt;br /&gt;
if ! checkRunning ; then&lt;br /&gt;
    stopContainer&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Run the container&lt;br /&gt;
runContainer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= PaaS =&lt;br /&gt;
&lt;br /&gt;
== Sandstorm ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning: Out Of Date. Was at version 0.7.1&#039;&#039;&#039; on 2016-12-20. Can you help to update it?&lt;br /&gt;
&lt;br /&gt;
* sandstorm.io [https://demo.sandstorm.io/appdemo/70awyqss6jq2gkz7dwzsnvumzr07256pzdt3hda9acfuxwh6uh7h MediaGoblin demo]&lt;br /&gt;
&lt;br /&gt;
Source code for the MediaGoblin Sandstorm app:&lt;br /&gt;
&lt;br /&gt;
https://github.com/jparyani/mediagoblin&lt;/div&gt;</summary>
		<author><name>Mconnell</name></author>
	</entry>
</feed>