A Bootstrap-based web application built in Go on top of the Revel Web Framework
BaseApp is a web application that provides web application scaffolding with the following features out of the box:
- Basic pages (Home, About Us, Contact Us, etc)
- Account registration (including password strength meter and safe storage of passwords with bcrypt)
- Account confirmation via email (via configurable e-mail settings)
- Account recovery via email (via configurable e-mail settings)
- Account log in (by username or email address)
- Public user profiles (with Gravatar integration for profile photos and profile edit functionality)
- Public user posts (with full Markdown support and edit + delete functionality)
- Social Features (Profile Follower and Following Counts and Post Likes)
- People finder search (by username or full name)
- Auto-provisioned backend data store (SQLite3, MySQL, PostgreSQL)
- Full live client-side and static server-side form validation
- Full non-interactive and interactive testing framework (Test-driven development process)
- Responsive front-end design with Bootstrap (looks good on mobile, tablet and desktop screen sizes)
Example Home Page:
User Registration Form:
User Registration Form - Form Validation Failed:
User Login Form:
Display User Profile:
Followers Display:
Following Display:
Edit User Profile Form:
New Post Form:
Post Display:
User Search:
Reset Password Form (if email settings are provided in conf/app.conf
):
Interactive Test Suite (at http://localhost:9000/@tests
)
You will need a functioning Revel installation for BaseApp to work.
To get BaseApp, run
go get github.com/richtr/baseapp/...
This command does a couple things:
- Go uses git to clone the repository into $GOPATH/src/github.com/richtr/baseapp/
- Go transitively finds all of the dependencies and runs go get on them as well.
Before you can start using BaseApp you will need to add your own app.conf
file in the conf/
directory. You can copy and use the default configuration file provided at /conf/app.conf.default
with
cp $GOPATH/src/github.com/richtr/baseapp/conf/app.conf.default $GOPATH/src/github.com/richtr/baseapp/conf/app.conf
Note: It is highly recommended that you review the configuration options available in app.conf.default
before you run your project for the first time!
You can customize the configuration of your BaseApp application either directly in your app.conf
or via environment variables (see Running BaseApp below for instructions on running BaseApp with environment variable overrides).
Configuration Name | Environment Variable Name | Description |
---|---|---|
- | BASEAPP_RUN_LEVEL |
The run level of your application. |
app.name |
BASEAPP_APPLICATION_NAME |
The name of your application. default: "BaseApp" |
http.host |
BASEAPP_SERVER_HOST |
The fully qualified address for your application. default: "http://localhost:9000" |
http.port |
BASEAPP_SERVER_PORT |
The port on which to expose your application. default: 9000 |
http.ssl |
BASEAPP_SERVER_SSL |
Flag to indicate that BaseApp should be served over HTTPS default: false |
http.sslcert |
BASEAPP_SERVER_SSLCERT |
Your SSL certificate as a string default: `` |
http.sslkey |
BASEAPP_SERVER_SSLKEY |
Your SSL private key as a string default: `` |
db.driver |
BASEAPP_DATABASE_DRIVER |
The Go driver name for your database. |
db.import |
BASEAPP_DATABASE_IMPORT |
The Go driver library for your database |
db.spec |
BASEAPP_DATABASE_SPEC |
The Go driver connection string for your database |
mailer.server |
BASEAPP_MAILER_SERVER |
SMTP server address |
mailer.port |
BASEAPP_MAILER_PORT |
SMTP server port |
mailer.username |
BASEAPP_MAILER_USERNAME |
SMTP server user name |
mailer.password |
BASEAPP_MAILER_PASSWORD |
SMTP server password |
mailer.fromaddress |
BASEAPP_MAILER_FROMADDRESS |
The email address to include as the sender address |
Once you have set up an app.conf
file you can start BaseApp in test mode, with
revel run github.com/richtr/baseapp test
If you have set up BaseApp environment variable overrides you should start BaseApp with the included start.sh
script instead:
./start.sh
Point your browser to your BaseApp installation at http://localhost:9000
(or the host/port you specified in your configuration) and BaseApp should compile and run.
BaseApp can be run in three different modes that are each useful for different stages of application development:
-
test
mode: Uses an in-memory sqlite3 datastore that is created and populated with basic data which is always wiped when your application ends.You can run BaseApp in
test
mode as follows:$> revel run github.com/richtr/baseapp test 9000
Once BaseApp is up and running you can point your browser to
http://localhost:9000
to use the application orhttp://localhost:9000/@tests
to run the interactive test suite.To run the BaseApp test suite in non-interactive mode you can use:
$> revel test github.com/richtr/baseapp test 9000
If testing is successful then a
test-results/result.passed
is written. Otherwise atest-results/result.failed
is written. You can use check for these files when testing before deployment within your own continuous integration system. -
dev
mode [default mode]: Uses a blank sqlite3/mysql/postgres datastore that is created if it does not already exist at your chosen location and persists whenever your application is restarted. Outputs detailed error messages if something goes wrong in your application.You can run BaseApp in
dev
mode as follows:$> revel run github.com/richtr/baseapp dev 9000
Or, simply:
$> revel run github.com/richtr/baseapp
-
prod
mode: Uses a blank sqlite3/mysql/postgres datastore that is created if it does not already exist at your chosen location and persists whenever your application is restarted. Outputs user-friendly error messages if something goes wrong in your application.You can run BaseApp in
prod
mode as follows:$> revel run github.com/richtr/baseapp prod 9000
Note: Both dev
and prod
modes require a configured backend DB. See app.conf.default. The test
mode creates an in-memory database representation that dies when the app dies.
This project comes with its own Dockerfile
for building your own LXC container via Docker to host BaseApp.
You will need a functioning Docker installation to build and use BaseApp as an LXC container.
To build your own BaseApp LXC container via Docker is easy:
$ git clone https://github.com/richtr/baseapp.git
$ cd baseapp
$ docker build -t="richtr/baseapp" .
To spawn a new instance of BaseApp:
$ docker run -p 9000:9000 -d richtr/baseapp
Then you can the visit the following URL in a browser on your host machine to get started:
http://127.0.0.1:9000
An example docker-compose
configuration is provided with this repo. To build and run the infrastructure defined in the docker-compose
file, run the following:
$ docker-compose up
It can take a while to bring this architecture up but once BaseApp has been built in its docker container, you can navigate to http://dockerhost:80
(or http://localhost:80
) to see everything running.
See the Configuring BaseApp section above for available docker compose environment variable overrides.
If you find any bugs or issues please report them on the BaseApp Issue Tracker.
If you would like to contribute to this project please consider forking this repo, making your changes and then creating a new Pull Request back to the main code repository.
MIT. Copyright (c) Rich Tibbett.
See the LICENSE file.