The first developer-oriented translation tool. True asynchronous flow between translators and your team.
The first developer-oriented translation tool
True asynchronous flow between translators and your team.
Accent provides a powerful abstraction around the process maintaining translations in a web/native app.
Contents
Section Description
🚀 Getting started Quickly setup a working app
🚧 Requirements Dependencies required to run Accent’ stack
🎛 Mix commands How to execute mix task with the Twelve-Factor pattern
🏎 Quickstart Steps to run the project, from API to webapp, with or without Docker
🌳 Environment variables Required and optional env var used
✅ Tests How to run the extensive tests suite
🚀 Heroku Easy deployment setup with Heroku
🌎 Contribute How to contribute to this repo
🚀 Getting started
Easiest way to run an instance of Accent is by using the offical docker image: https://hub.docker.com/r/mirego/accent
.env
file. Example:DATABASE_URL=postgresql://postgres@docker.for.mac.host.internal/accent_development
DUMMY_LOGIN_ENABLED=1
$ docker run --env-file .env -p 4000:4000 mirego/accent
This will start the webserver on port 4000, migrate the database to have an up and running Accent instance!
🚧 Requirements
erlang ~> 24.0
elixir ~> 1.13
postgres >= 9.4
node.js >= 16.13
libyaml >= 0.1.7
🎛 Executing mix commands
The app is modeled with the Twelve-Factor App architecture, all configurations are stored in the environment.
When executing mix
commands, you should always make sure that the required environment variables are present. You can source
, use nv or a custom l33t bash script.
Every following steps assume you have this kind of system.
But Accent can be run with default environment variables if you have a PostgreSQL user named postgres
listening on port 5432
on localhost
.
Example
With nv
you inject the environment keys in the context with:
$ nv .env mix <mix command>🏎 Quickstart
This is the full development setup. To simply run the app, see the Getting started instructions
nodejs
with brew install nodejs
elixir
with brew install elixir
libyaml
with brew install libyaml
postgres
with brew install postgres
or the Docker setup as described below.make dependencies
mix ecto.setup
mix phx.server
That’s it! You should now be able to open the app at http://localhost:4000
Makefile
The Makefile should be the main entry for common tasks such as tests, linting, Docker, etc. This simplifies the development process since you don’t have to search for which service provides which command. mix
, npm
, prettier
, docker
, stylelint
, etc are all used in the Makefile.
Docker
For the production setup, we use Docker to build an OTP release of the app. With docker-compose, you can run the image locally. Here are the steps to have a working app running locally with Docker:
When running the production env, you need to provide a valid GOOGLE_API_CLIENT_ID in the docker-compose.yml
file.
make build
to build the OTP release with Dockermake dev-start-postgresql
to start an instance of Postgresql. The instance will run on port 5432 with the postgres
user. You can change those values in the docker-compose.yml
file.make dev-start-application
to start the app! The release hook of the release will execute migrations and seeds before starting the webserver on port 4000 (again you can change the settings in docker-compose.yml
)That’s it! You now have a working Accent instance without installing Elixir or Node!
🌳 Environment variables
Accent provides a default value for every required environment variable. This means that with the right PostgreSQL setup, you can just run mix phx.server
.
Variable Default Description
DATABASE_URL
postgres://localhost/accent_development
A valid database URL
PORT
4000
A port to run the app on
Production setup
Variable Default Description
RESTRICTED_PROJECT_CREATOR_EMAIL_DOMAIN
none
If specified, only authenticated users from this domain name will be able to create new projects.
FORCE_SSL
false
If the app should always be served by https (and wss for websocket)
SENTRY_DSN
none
The secret Sentry DSN used to collect API runtime errors
WEBAPP_SENTRY_DSN
none
The public Sentry DSN used to collect Webapp runtime errors
CANONICAL_URL
none
The URL of the app. Used in sent emails and to redirect from external services to the app in the authentication flow.
STATIC_URL
none
The URL of the app. Default to the CANONICAL_URL value.
WEBAPP_SKIP_SUBRESOURCE_INTEGRITY
none
Remove integrity attributes on link and script tag. Useful when using a proxy that compress resources before serving them.
DATABASE_SSL
false
If SSL should be used to connect to the database
DATABASE_POOL_SIZE
10
The size of the pool used by the database connection module
MACHINE_TRANSLATIONS_VAULT_KEY
DEFAULT_UNSAFE_VAULT_KEY
The secret key that is used to encrypt machine translations services config key
Authentication setup
Various login providers are included in Accent using Ueberauth to abstract services.
Variable Default Description
DUMMY_LOGIN_ENABLED
none
If specified, the password-less authentication (with only the email) will be available.
GITHUB_CLIENT_ID
none
GITHUB_CLIENT_SECRET
none
GITLAB_CLIENT_ID
none
GITLAB_CLIENT_SECRET
none
GITLAB_SITE_URL
https://gitlab.com
GOOGLE_API_CLIENT_ID
none
GOOGLE_API_CLIENT_SECRET
none
SLACK_CLIENT_ID
none
SLACK_CLIENT_SECRET
none
SLACK_TEAM_ID
none
DISCORD_CLIENT_ID
none
DISCORD_CLIENT_SECRET
none
MICROSOFT_CLIENT_ID
none
MICROSOFT_CLIENT_SECRET
none
MICROSOFT_TENANT_ID
none
Email setup
If you want to send emails, you’ll have to configure the following environment variables:
Variable Default Description
MAILER_FROM
none
The email address used to send emails.
SENDGRID_API_KEY
none
Use SendGrid to send emails
MANDRILL_API_KEY
none
Use Mandrill to send emails
MAILGUN_API_KEY
none
Use Mailgun to send emails
MAILGUN_DOMAIN
none
Use a custom domain in Mailgun
MAILGUN_BASE_URI
none
Send emails from a different server
SMTP_ADDRESS
none
Use an SMTP server to send your emails.
SMTP_API_HEADER
none
An optional API header that will be added to sent emails.
SMTP_PORT
none
The port ex: (25, 465, 587).
SMTP_PASSWORD
none
The password for authentification.
SMTP_USERNAME
none
The username for authentification.
Metrics and monitoring setup
If you want to track performance of Accent, you can configure NewRelic with the following environment variables:
Variable Default Description
NEW_RELIC_APP_NAME
none
Service APM name
NEW_RELIC_LICENSE_KEY
none
License key
Or use the built-in metrics UI from TelemetryUI:
Variable Default Description
METRICS_BASIC_AUTH
none
username:password to HTTP basic auth login on the pre-configured dashboard
Kubernetes helm chart setup
You can setup the project with a helm chart like this one. This project uses a fork by andreymaznyak and not this canonical repository. The specs and values may need to be updated if you use this repo.
✅ Tests API
Accent provides a default value for every required environment variable. This means that with the right PostgreSQL setup (and a few setup commands), you can just run mix test
.
$ npm --prefix webapp run build $ mix run ./priv/repo/seeds.exs $ mix test
The full check that runs in the CI environment can be executed with ./priv/scripts/ci-check.sh
.
🚀 Deploy on Heroku
An Heroku-compatible app.json
makes it easy to deploy the application on Heroku.
Using Heroku CLI
Based on this guide
$> heroku create
Creating app... done, ⬢ peaceful-badlands-85887
https://peaceful-badlands-85887.herokuapp.com/ | https://git.heroku.com/peaceful-badlands-85887.git
$> heroku addons:create heroku-postgresql:hobby-dev --app peaceful-badlands-85887
Creating heroku-postgresql:hobby-dev on ⬢ peaceful-badlands-85887... free
Database has been created and is available
$> heroku config:set FORCE_SSL=true DATABASE_SSL=true DUMMY_LOGIN_ENABLED=true --app peaceful-badlands-85887
Setting FORCE_SSL, DATABASE_SSL, DUMMY_LOGIN_ENABLED and restarting ⬢ peaceful-badlands-85887... done
$> heroku container:push web --app peaceful-badlands-85887
=== Building web
Your image has been successfully pushed. You can now release it with the 'container:release' command.
$> heroku container:release web --app peaceful-badlands-85887
Releasing images web to peaceful-badlands-85887... done
🌎 Contribute
Before opening a pull request, please open an issue first.
Once you’ve made your additions and the test suite passes, go ahead and open a PR!
Don’t forget to run the ./priv/scripts/ci-check.sh
script to make sure that the CI build will pass :)
License
Accent is © 2015-2019 Mirego and may be freely distributed under the New BSD license. See the LICENSE.md
file.
About Mirego
Mirego is a team of passionate people who believe that work is a place where you can innovate and have fun. We’re a team of talented people who imagine and build beautiful Web and mobile applications. We come together to share ideas and change the world.
We also love open-source software and we try to give back to the community as much as we can.
Twice a month we will interview people behind open source businesses. We will talk about how they are building a business on top of open source projects.
We'll never share your email with anyone else.