Waxx uses a simple YAML file for config. Each environment has its own directory with a config.yaml
file and any other environment-specific files.
In the installation directory, there is a folder opt/
:
opt/
|-- active -> dev # A symbolic link to the the active config folder (dev in this case)
|-- deploy.yaml # How to deploy to each environment (servers and commands to run, see below.)
|-- dev # The dev environment
| |-- config.yaml # The config file (see details below)
| |-- nginx.conf # The webserver config file
| `-- ssl # The container for SSL keys and certs
| |-- fullchain.pem # Self-signed cert for development
| `-- privkey.pem
`-- prod # The production environment
|-- config.yaml # The config file (see details below)
|-- deploy # A deploy script that is run on the production server(s) (see below)
`-- nginx.conf # The production webserver config (could be Apache or HAProxy too)
# SSL certs for production are stored on the production servers (or you can put them here)
# stage and test folders are also here.
server:
host: localhost # IP or host name to listen on
port: 7777 # Port to listen on
min_threads: 4 # Start this many threads (each thread has a database connection)
max_threads: 4 # Additional threads will be added up to max if the queue is full
idle_thread_timeout: 300 # Kill a thread that is idle for this many seconds
log_dir: log # Where to put the logs
pid_dir: tmp/pids # Where to store the pid file (used for stopping and restarting the processs)
site:
name: The name of your app or site
support_email: dev.null@waxx.io # The email used to send email from by default. (This is bogus address for the docs)
url: https://www.waxx.io/ # The URL of your site. This is normally not the same as the server/host above.
encryption: # Every waxx installation should have its own random strings here. DO NOT COPY THESE!!!
cipher: AES-256-CBC # The encryption cypher to use (anything supported by OpenSSL)
key: S0M3-r@nd0m-32-CHAR-5TR!NG...... # The 32-character key (random string - DO NOT COPY!!!)
iv: A-16-CHAR-5TR!NG # The 16-character initiation vector (random string - DO NOT COPY!!!)
cookie: # Cookie options. Waxx uses two cookies
user: # A short-lived session cookie
name: wxu # Session cookie name
expires_after_login_mins: 1440 # Expires in minutes after login
expires_after_activity_mins: 480 # Expires in minutes after last activity
secure: true # Only send over HTTPS
agent: # A long-lived cookie for things like preferences or login name
name: wxa # Client cookie name
expires_years: 30 # Expires in years. Use decimals for less than 1 year: .25 = 3 months
secure: true # Only send over HTTPS
debug: # How to handle bugs
level: 9 # The level to print to the logs (0 = no debugging, 9 = all debugging)
on_screen: true # Show the error report on the screen (normally for dev mode and maybe staging)
send_email: false # Send an email bug report (normally for production, maybe for staging)
email: dev.null@waxx.io # Who to send the email to (This is a bogus address)
auto_reload_code: true # Detect code changes and reload if changed (set to false for production)
databases: # You can have zero or more database connections. Each connection must have a unique name here.
app: postgresql://waxx@localhost:5432/waxx # A sample postgres connection string. This connection is available as x.db.app anywhere in the system.
blog: sqlite3:///home/waxx/dev/db/blog.db # An sqlite file db. x.db.blog
forum: mysql2://waxx@localhost/waxx # A MySQL or MariaDB connection. x.db.forum
default: # Defaults path info. If path is "/" then the 'index' runner of the App::Website module will be run
app: website # Default module (x.app)
act: index # Default runner (x.act)
ext: html # Default extension (x.ext). This drived the Content-Type response header too if there is no extension in the path
smtp: # SMTP settings. Only needed if your app sends email.
server: aeromail.io # Server host name
user: smtp-user-name # Login
pass: smtp-password # Password
port: 587 # Port
tls: true # TLS (should be true or authentication should not be plain)
authentication: plain # Change for other authentication types
file: # Waxx has a primitive file server for dev puposes if needed
serve: false # Serve files (not recommended for production)
path: public # The path relative to the install directory (Waxx::Root or Conf/:opts/:base)
You can add any other params you want to config.yaml like keys and passwords to third-party services.
All values set here are available system-wide in the Waxx::Conf[]
constant or the shorcut Waxx[]
. For example these are all equivelant:
Waxx::Conf['site']['name']
Waxx['site']['name']
Waxx has very few patches to Ruby standard classes. One of them is the Hash#/ method that gets hash values by string or symbol. Think of it as "dividing the hash by key". So the config options are also available like so:
Waxx::Conf/:site/:name
Waxx/:site/:name
All four options above will return the name of your site.
When you are ready to put your app in production, see Things to change for production Waxx installations