mirror of
https://gitlab.com/depesz/explain.depesz.com.git
synced 2024-11-30 09:06:42 +02:00
Merge branch 'master' into 'master'
Re-issue of merge request #10 after rebase See merge request depesz/explain.depesz.com!11
This commit is contained in:
commit
6ef3a11b46
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
||||
log
|
||||
explain.production.json
|
||||
.vagrant
|
||||
|
99
README.md
99
README.md
@ -6,9 +6,9 @@ Setup
|
||||
|
||||
There are three ways to install your own copy:
|
||||
|
||||
* Using Vagrant [ VirtualBox machine, fully automated ]
|
||||
* Calling `puppet apply`
|
||||
* Manually
|
||||
1. Using Vagrant [ VirtualBox machine, fully automated ]
|
||||
1. Calling `puppet apply`
|
||||
1. Manually
|
||||
|
||||
First get the source code:
|
||||
|
||||
@ -16,7 +16,8 @@ First get the source code:
|
||||
|
||||
## Vagrant setup
|
||||
|
||||
WARNING: first call `vagrant up` fetches ~400MB of vbox image from the Internet.
|
||||
*WARNING:*
|
||||
The first call of `vagrant up` fetches a ~400MB vbox image from the Internet.
|
||||
|
||||
1. Call `vagrant up`
|
||||
|
||||
@ -25,23 +26,23 @@ Point your browser on http://192.168.44.55 (or use `/etc/hosts` entry explain.de
|
||||
## Puppet setup
|
||||
|
||||
1. Install puppet on your machine, e.g. Debian installation described [here](https://docs.puppetlabs.com/guides/install_puppet/install_debian_ubuntu.html).
|
||||
2. Open explain.pp and fix line 5 with correct project dir value
|
||||
3. Call `sudo puppet apply --logdest console explain.pp` on your working copy directory.
|
||||
1. Open `explain.pp` and fix line 5 with correct project dir value
|
||||
1. Call `sudo puppet apply --logdest console explain.pp` on your working copy directory.
|
||||
|
||||
## Manual setup
|
||||
|
||||
1) Mojolicious
|
||||
|
||||
You have to have Mojolicious installed on your server. Mojolicious is a web framework for Perl.
|
||||
### 1) Mojolicious
|
||||
You have to have Mojolicious installed on your server.
|
||||
Mojolicious is a web framework for Perl.
|
||||
http://mojolicio.us/
|
||||
|
||||
Installation can be accomplished with one command line:
|
||||
|
||||
curl -L cpanmin.us | perl - -n Mojolicious
|
||||
|
||||
See the "Installation" section at http://mojolicio.us/ for details.
|
||||
See the `Installation` section at http://mojolicio.us/ for details.
|
||||
|
||||
2) Perl Dependencies:
|
||||
### 2) Perl Dependencies:
|
||||
You will need the following packages installed in your version of Perl:
|
||||
|
||||
DBD::Pg
|
||||
@ -51,61 +52,77 @@ You will need the following packages installed in your version of Perl:
|
||||
Email::Valid
|
||||
|
||||
|
||||
Install the above packages using "cpan" then "i Date::Simple", "i Mail::Sender" &etc.
|
||||
Install the above packages using `cpan` then `-i Date::Simple`, `-i Mail::Sender`, &etc.
|
||||
|
||||
Note that in case of most current Linux distributions, you can install most of
|
||||
these from binary package repositories. For example, in case of Ubuntu and
|
||||
Debian, you can:
|
||||
|
||||
apt-get install libmojolicious-perl libmail-sender-perl libdate-simple-perl libemail-valid-perl
|
||||
apt-get install libmojolicious-perl \
|
||||
libmail-sender-perl \
|
||||
libdate-simple-perl \
|
||||
libemail-valid-perl \
|
||||
libxml-simple-perl \
|
||||
libdbd-pg-perl
|
||||
|
||||
And then only add Pg::Explain via cpan.
|
||||
And then only add `Pg::Explain` via CPAN.
|
||||
|
||||
3) PostgreSQL
|
||||
### 3) PostgreSQL
|
||||
You'll need to have PostgreSQL installed in order to record all the explain
|
||||
plans into history. Consult the [PostgreSQL Wiki](https://wiki.postgresql.org/wiki/Detailed_installation_guides)
|
||||
for more information
|
||||
|
||||
A) Create a new database "explain". This will be were the explain server will store the "users"
|
||||
and "plans" tables in the default schema "public".
|
||||
#### 3A) Create a new database `explain`
|
||||
This will be were the explain server will store the `users` and `plans` tables
|
||||
in the default schema `public`.
|
||||
|
||||
B) Run SQL scripts. Log into postgres as postgres. Switch to the "explain" database.
|
||||
Execute the SQL scripts located in the "sql" directory in the following order:
|
||||
#### 3B) Run SQL scripts
|
||||
Log in to the `explain` database and execute the SQL scripts located in this
|
||||
project's `sql` directory in the following order:
|
||||
|
||||
\i create.sql
|
||||
\i patch-001.sql
|
||||
\i patch-002.sql
|
||||
|
||||
The "create.sql" will create tables in the explain database "public" schema, i.e. "plans" and "users".
|
||||
The `create.sql` will create tables in the `explain` database `public` schema,
|
||||
i.e. `plans` and `users`.
|
||||
|
||||
B) Create a user role. I use "explaind" [explain daemon] and remember to provides it a password and then configure
|
||||
the explain.json file to reflect this new role and password.
|
||||
#### 3C) Create a user role
|
||||
I use `explaind` [explain daemon], for example. Remember to provide it a
|
||||
password and then configure the `explain.json` file to reflect this new role and
|
||||
password.
|
||||
|
||||
C) Grant all rights to the tables in "explain" to your role "explaind":
|
||||
CREATE USER explaind WITH PASSWORD 'explain';
|
||||
|
||||
grant all on plans, users to explaind;
|
||||
#### 3D) Grant all rights to the tables in `explain` to your role:
|
||||
|
||||
D) modify /etc/postgresql-9.3/pg_hba.conf so that it has the server as "127.0.0.1"
|
||||
GRANT ALL ON plans, users TO explaind;
|
||||
|
||||
#### 3E) modify `pg_hba.conf` so that it has the server as "127.0.0.1"
|
||||
|
||||
local all all 127.0.0.1 trust
|
||||
|
||||
If you do not want to alter /etc/postgresql-9.3/pg_hba.conf, then you might be able
|
||||
to modify the explain.json.dsn setting to specify the name of the value i
|
||||
n the server column from your /etc/postgresql-9.3/pg_hba.conf file, e.g. "localhost". This
|
||||
alternative approach has not been tested. It would be desirable to install this project with
|
||||
the minimal amount of configuration changes, so I encourage someone to come up with a solution
|
||||
that removes this step "D".
|
||||
If you do not want to alter `pg_hba.conf`, then you might be able to modify the
|
||||
`explain.json.dsn` setting to specify the name of the value in the server column
|
||||
from your `pg_hba.conf` file, e.g. "localhost". This alternative approach has
|
||||
not been tested. It would be desirable to install this project with the minimal
|
||||
amount of configuration changes, so I encourage someone to come up with a
|
||||
solution that removes this step "E".
|
||||
|
||||
4) Alter configuration file explain.json making sure you have the correct values for your database connection.
|
||||
See companion documentation file explain-json-notes.txt
|
||||
### 4) Configure `explain.json`
|
||||
Make sure you have the correct values for your database connection.
|
||||
See companion documentation file `explain-json-notes.txt`
|
||||
|
||||
5) Shell
|
||||
|
||||
The explain server runs on port 3000. Make sure port 3000 is available and not in use by another process.
|
||||
You may have to specify a different port, e.g. 3200. I do not know where you do that, probably in Mojolicious.
|
||||
### 5) Shell
|
||||
The explain server runs on port 3000. Make sure port 3000 is available and not
|
||||
in use by another process. You may have to specify a different port (e.g. 3200).
|
||||
I do not know where you do that, probably in Mojolicious.
|
||||
|
||||
In the trunk directory for this project, run in a shell:
|
||||
|
||||
./explain daemon
|
||||
./explain.pl daemon
|
||||
|
||||
Then access the web page http://localhost:3000
|
||||
|
||||
6) when you access the web page, remember to login and create an account for yourself so that your explain plans
|
||||
### 6) Browser
|
||||
Then access the web page `http://localhost:3000` When you access the web page,
|
||||
remember to login and create an account for yourself so that your explain plans
|
||||
will be associated with your account.
|
||||
|
18
Vagrantfile
vendored
18
Vagrantfile
vendored
@ -12,12 +12,16 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
||||
vb.customize ["modifyvm", :id, "--memory", "1024"]
|
||||
end
|
||||
|
||||
config.vm.provision "puppet" do |puppet|
|
||||
puppet.options = "--verbose --debug"
|
||||
puppet.manifests_path = "."
|
||||
puppet.manifest_file = "explain.pp"
|
||||
puppet.facter = {
|
||||
"use_vagrant" => true
|
||||
}
|
||||
if Vagrant.has_plugin?("vagrant-puppet-install")
|
||||
config.vm.provision "puppet" do |puppet|
|
||||
puppet.options = "--verbose --debug"
|
||||
puppet.manifests_path = "."
|
||||
puppet.manifest_file = "explain.pp"
|
||||
puppet.facter = {
|
||||
"use_vagrant" => true
|
||||
}
|
||||
end
|
||||
else
|
||||
config.vm.provision "shell", path: "vagrant_bootstrap.sh"
|
||||
end
|
||||
end
|
||||
|
57
vagrant_bootstrap.sh
Normal file
57
vagrant_bootstrap.sh
Normal file
@ -0,0 +1,57 @@
|
||||
#!/bin/bash
|
||||
|
||||
export PGDATA="/etc/postgresql/10/main"
|
||||
export APP_USER="explain"
|
||||
export APP_PASS="explain"
|
||||
export BASEDIR="/vagrant"
|
||||
|
||||
### This script *can* be run on a Docker Ubuntu VM if desired.
|
||||
### To do so, additional commands need to be run:
|
||||
# apt-get update
|
||||
# apt-get -y -qq install make curl libclone-perl lsb-release sudo
|
||||
# sed -i "s/exit.*/exit 0/" /usr/sbin/policy-rc.d
|
||||
# export BASEDIR="/explain"
|
||||
|
||||
# Set username in explain.json
|
||||
sed -i "s/\"username\" : \"explain\"/\"username\" : \"${APP_USER}\"/" ${BASEDIR}/explain.json
|
||||
sed -i "s/\"password\" : \"explain\"/\"password\" : \"${APP_PASS}\"/" ${BASEDIR}/explain.json
|
||||
|
||||
# Install dependencies
|
||||
curl -s -L cpanmin.us | perl - -n Mojolicious
|
||||
apt-get -y -qq install wget ca-certificates cpanminus libmojolicious-perl libmail-sender-perl libdate-simple-perl libemail-valid-perl libxml-simple-perl libdbd-pg-perl
|
||||
|
||||
# Install Pg::Explain
|
||||
cpanm -q Pg::Explain
|
||||
|
||||
# Install Postgres
|
||||
echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list
|
||||
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
|
||||
sudo apt-get -y -qq update
|
||||
sudo apt-get -y -qq upgrade
|
||||
sudo apt-get -y -qq install postgresql-10
|
||||
sed -i -e "s/peer/trust/" ${PGDATA}/pg_hba.conf
|
||||
sudo -u postgres psql -tc "select pg_reload_conf()"
|
||||
|
||||
# Create database
|
||||
createdb -U postgres explain
|
||||
|
||||
# Create user
|
||||
psql -qU postgres explain -c "CREATE USER ${APP_USER} WITH PASSWORD '${APP_PASS}'"
|
||||
|
||||
# Apply patches
|
||||
psql -q -f ${BASEDIR}/sql/create.sql -U postgres explain
|
||||
for i in `seq -f "%03g" 1 10`
|
||||
do
|
||||
psql -q -f ${BASEDIR}/sql/patch-${i}.sql -U postgres explain
|
||||
done
|
||||
|
||||
# Apply grants
|
||||
psql -qU postgres explain -c "GRANT ALL ON plans, users TO ${APP_USER}"
|
||||
psql -qU postgres explain -c "GRANT ALL ON SCHEMA plans TO ${APP_USER}"
|
||||
for x in `echo {0..9} {A..Z} {a..z}`
|
||||
do
|
||||
psql -qU postgres explain -c "GRANT ALL PRIVILEGES ON plans.\"part_${x}\" TO ${APP_USER}"
|
||||
done
|
||||
|
||||
# Done
|
||||
echo "Your Vagrant box is all set up. Use 'vagrant ssh' to log in, then call '/vagrant/explain.pl daemon' to start the service"
|
Loading…
Reference in New Issue
Block a user