This is the source code for the DuckDuckGo Community Platform at duck.co
The DuckDuckGo Community Platform is built on Perl, Catalyst, DBIx::Class, Text::Xslate and Dancer2.
Requires perl 5.16.3 (or higher) and:
- cpanm (local::lib and/or perlbrew recommended)
- gcc toolchain (gcc, make, lib headers)
- git
- libcurl
- imagemagick
- postgresql (recommended, though you may get away with mysql or sqlite for now)
To install these on Debian / Ubuntu:
apt-get install cpanm build-essential libgd2-xpm-dev libssl-dev git libcurl4-gnutls-dev libxml2-dev imagemagick perl-doc postgresql libpq-dev
To proceed with installation, you will also need Dist::Zilla
cpanm -i Dist::Zilla
To install community-platform's Perl dependencies, go to its directory and run:
dzil authordeps --missing | cpanm --mirror http://duckpan.org/
dzil listdeps --missing | grep -v abstract | cpanm --mirror http://duckpan.org/
This will take some time. You can add --notest
to the cpanm command to speed
things up, but this may result in fires later.
Before running the dev server, we need a database schema.
The default is to use SQLite if no DSN configuration environment variables are found, e.g.
export DDGC_DB_DSN='dbi:Pg:database=ddgc';
export DDGC_DB_USER='ddgc';
export DDGC_DB_PASSWORD='yourdbpass';
To run the dev environment deployment script, your postgres user requires the following permissions:
ALTER USER ddgc CREATEDB;
ALTER USER ddgc LOGIN;
This script deploys the schema and populates it with a test / dev data set:
script/ddgc_deploy_dev.pl
You can also roll over any existing schema with the --kill
switch:
script/ddgc_deploy_dev.pl --kill
For the flags to work, you need to generate their sprites. This process has to be repeated everytime the country flags are changed.
script/ddgc_generate_flag_sprites.pl
Community platform's generated static files, media uploads, caches, duckpan
packages etc. live in $HOME/ddgc/
To launch the development web server:
script/ddgc_dev_server.sh
This, by default, launches a plack server bound to port 5001 with DBIC and Catalyst console debugging enabled with Plack debug panels in rendered output.
It watches the lib/
directory and restarts if there are any changes written.
It supports the following options:
- -p - Set port to bind to
- -m - Use a debug mailer on localhost:1025 (python -m smtpd -n -c DebuggingServer localhost:1025)
- -n - Don't render Plack debug panels (useful for frontend work)
Front end elements (js, css...) in src/
are managed by node.js / grunt.
To launch a task to rebuild static files when they change, use
grunt watch
The following accounts are created by ddgc_deploy_dev.pl
:
-
testone An admin, who is native German but also speaks English.
-
testtwo A normal user who speaks Spanish with public profile.
-
testthree A translation manager who speaks English, Arabic, and German.
-
testfour An admin, who speaks German, Spanish, and English.
-
testfive A normal user without public profile, who speaks Russian and English.
-
Additionally there are also test1 to test40 all without any setup.
Any random password will suffice, as a separate service is used to provide authentication in production.