Browse Source

Add docker compose config to setup development environment quickly

pull/558/head
Hironsan 5 years ago
parent
commit
f07a121d52
8 changed files with 140 additions and 6 deletions
  1. 10
      README.md
  2. 9
      app/app/settings.py
  3. 1
      app/requirements.txt
  4. 35
      app/tools/dev-django.sh
  5. 55
      docker-compose.dev.yml
  6. 13
      frontend/.eslintrc.js
  7. 19
      frontend/dev-nuxt.sh
  8. 4
      frontend/nuxt.config.js

10
README.md

@ -82,6 +82,16 @@ All data created in the container will persist across restarts.
Access <http://127.0.0.1:8000/>.
### For Developers
```bash
$ git clone https://github.com/doccano/doccano.git
$ cd doccano
$ docker-compose -f docker-compose.dev.yml up
```
Access <http://127.0.0.1:8000/>.
## One-click Deployment
| Service | Button |

9
app/app/settings.py

@ -60,6 +60,7 @@ INSTALLED_APPS = [
'social_django',
'polymorphic',
'webpack_loader',
'corsheaders',
]
CLOUD_BROWSER_APACHE_LIBCLOUD_PROVIDER = env('CLOUD_BROWSER_LIBCLOUD_PROVIDER', None)
@ -82,6 +83,7 @@ MIDDLEWARE = [
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'social_django.middleware.SocialAuthExceptionMiddleware',
'applicationinsights.django.ApplicationInsightsMiddleware',
'corsheaders.middleware.CorsMiddleware',
]
ROOT_URLCONF = 'app.urls'
@ -305,3 +307,10 @@ EMAIL_PORT = env.int('EMAIL_PORT', 587)
if not EMAIL_HOST:
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
if DEBUG:
CORS_ORIGIN_WHITELIST = (
'http://127.0.0.1:3000',
'http://0.0.0.0:3000',
)

1
app/requirements.txt

@ -6,6 +6,7 @@ coverage==4.5.3
dj-database-url==0.5.0
Django==2.1.11
django-cloud-browser==0.5.0
django-cors-headers==3.1.1
django-filter==2.0.0
django-heroku==0.3.1
django-webpack-loader==0.6.0

35
app/tools/dev-django.sh

@ -0,0 +1,35 @@
#!/usr/bin/env bash
set -o errexit
root="$(dirname "$0")/../.."
app="${root}/app"
venv="${root}/venv"
if [[ ! -f "${venv}/bin/python" ]]; then
echo "Creating virtualenv"
mkdir -p "${venv}"
python3 -m venv "${venv}"
"${venv}/bin/pip" install --upgrade pip setuptools
fi
echo "Installing dependencies"
apt-get update && apt-get install -y g++ unixodbc-dev # pyodbc build dependencies
"${venv}/bin/pip" install -r "${app}/requirements.txt"
echo "Initializing database"
"${venv}/bin/python" "${app}/manage.py" wait_for_db
"${venv}/bin/python" "${app}/manage.py" migrate
"${venv}/bin/python" "${app}/manage.py" create_roles
if [[ -n "${ADMIN_USERNAME}" ]] && [[ -n "${ADMIN_PASSWORD}" ]] && [[ -n "${ADMIN_EMAIL}" ]]; then
"${venv}/bin/python" "${app}/manage.py" create_admin \
--username "${ADMIN_USERNAME}" \
--password "${ADMIN_PASSWORD}" \
--email "${ADMIN_EMAIL}" \
--noinput \
|| true
fi
echo "Starting django"
"${venv}/bin/python" -u "${app}/manage.py" runserver "$@"

55
docker-compose.dev.yml

@ -0,0 +1,55 @@
version: "3.7"
services:
backend:
image: python:3.6
volumes:
- .:/src
- venv:/src/venv
command: ["/src/app/tools/dev-django.sh", "0.0.0.0:8000"]
environment:
ADMIN_USERNAME: "admin"
ADMIN_PASSWORD: "password"
ADMIN_EMAIL: "admin@example.com"
DATABASE_URL: "postgres://doccano:doccano@postgres:5432/doccano?sslmode=disable"
ALLOW_SIGNUP: "False"
ports:
- 8000:8000
depends_on:
- postgres
networks:
- network-backend
- network-frontend
frontend:
image: node:13.2.0
command: ["/src/frontend/dev-nuxt.sh"]
volumes:
- .:/src
- node_modules:/src/frontend/node_modules
ports:
- 3000:3000
depends_on:
- backend
networks:
- network-frontend
postgres:
image: postgres:12.0-alpine
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
POSTGRES_USER: "doccano"
POSTGRES_PASSWORD: "doccano"
POSTGRES_DB: "doccano"
networks:
- network-backend
volumes:
postgres_data:
node_modules:
venv:
networks:
network-backend:
network-frontend:

13
frontend/.eslintrc.js

@ -15,11 +15,12 @@ module.exports = {
rules: {
"no-console": "off",
"no-restricted-syntax": [
"error",
{
"selector": "CallExpression[callee.object.name='console'][callee.property.name!=/^(log|warn|error|info|trace)$/]",
"message": "Unexpected property on console object was called"
}
]
"error",
{
"selector": "CallExpression[callee.object.name='console'][callee.property.name!=/^(log|warn|error|info|trace)$/]",
"message": "Unexpected property on console object was called"
}
],
"vue/valid-template-root": "off"
}
}

19
frontend/dev-nuxt.sh

@ -0,0 +1,19 @@
#!/usr/bin/env bash
set -o errexit
root="$(dirname "$0")/.."
app="${root}/frontend"
(
cd "${app}"
if [[ ! -d node_modules/.bin ]]; then
echo "Installing dependencies"
npm install
fi
echo "Starting frontend server"
npm run lintfix
npm run dev
)

4
frontend/nuxt.config.js

@ -30,6 +30,10 @@ export default {
'~/api/index.js'
],
server: {
host: '0.0.0.0' // default: localhost
},
env: {
baseUrl: process.env.NODE_ENV === 'production' ? '/v1' : 'http://127.0.0.1:8000/v1'
},

Loading…
Cancel
Save