Fakultas Ilmu Komputer UI
Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
ppl-fasilkom-ui
PPL Sosial
pilar
pilar-backend
Commits
0c39e785
Commit
0c39e785
authored
Mar 16, 2021
by
Bunga Amalia Kurniawati
🌺
Committed by
Azhar Difa Arnanda
Mar 16, 2021
Browse files
Dockerize Aplikasi
parent
8e814adf
Changes
5
Hide whitespace changes
Inline
Side-by-side
.gitignore
View file @
0c39e785
...
...
@@ -2,4 +2,6 @@ __pycache__/
.python-version
.coverage
.env_var
static
\ No newline at end of file
static
env
.env
\ No newline at end of file
Dockerfile
0 → 100644
View file @
0c39e785
FROM
python:3.8-slim-buster
ENV
PYTHONUNBUFFERED=1
WORKDIR
/code
COPY
requirements.txt /code/
RUN
pip3
install
-r
requirements.txt
COPY
. /code/
COPY
wait-for-it.sh /wait-for-it.sh
RUN
chmod
+x /wait-for-it.sh
\ No newline at end of file
README.md
View file @
0c39e785
...
...
@@ -79,48 +79,45 @@ Key | Required | Example
## Local Configuration
-
Install Python 3.6 or higher and PostgreSQL
-
Create Python virtual environment
-
Create environment variables in root folder (change as needed)
Filename:
`.env`
```
bash
$
cd
/path/to/project/directory
$
python3
-m
venv
env
$
source env
/bin/activate
$
pip3
install
-r
requirements.txt
DATABASE_HOST
=
db
DATABASE_NAME
=
home_industry
DATABASE_PASSWORD
=
postgres
DATABASE_PORT
=
5432
DATABASE_USER
=
postgres
DJANGO_SETTINGS_MODULE
=
home_industry.settings.local
SECRET_KEY
=
7&s33ax
$lxxzti1
)
0y
=
8#tu!
$7bdy
)
p
$1
@kn06tp&8x8i9#h2u
ALLOWED_HOST
=
0.0.0.0
```
-
Create PostgreSQL database
-
Set up environment variables (change as needed)
-
Run docker-compose
```
bash
$
export
DATABASE_HOST
=
'127.0.0.1'
$
export
DATABASE_NAME
=
'home_industry'
$
export
DATABASE_PASSWORD
=
'postgres'
$
export
DATABASE_PORT
=
'5432'
$
export
DATABASE_USER
=
'postgres'
$
export
DJANGO_SETTINGS_MODULE
=
'home_industry.settings.local'
$
export
SECRET_KEY
=
'7&s33ax$lxxzti1)0y=8#tu!$7bdy)p$1@kn06tp&8x8i9#h2u'
$
sudo
docker-compose up
```
-
Migrate the database
-
In another terminal, check running container
```
bash
$
python3 manage.py migrate
$
docker ps
```
-
Set up API configuration by modifying
`api_config.yaml`
-
Create or update the API configuration in database
-
Run collectstatic
```
bash
$
python
3
manage.py c
reateorupdateapiconfig
$
docker
exec
-it
<web-container-id>
python manage.py c
ollectstatic
--noinput
```
-
Create
Superu
se
r
-
Create
or update API configuration in databa
se
```
bash
$
python
3
manage.py create
superuser
$
docker
exec
-it
<web-container-id>
python manage.py create
orupdateapiconfig
```
-
Run server
-
Access database
```
bash
$
python3 manage.py runserver
$
docker
exec
-it
<postgres-container-id> psql
-U
postgres
-d
home_industry
-h
db
```
## Deployed API URLs
-
Staging:
[
https://industripilar-staging.herokuapp.com
](
https://industripilar-staging.herokuapp.com
)
-
Production:
[
https://api.industripilar.com
](
https://api.industripilar.com
)
-
Development:
[
https://pilar-be-dev.cs.ui.ac.id
](
https://pilar-be-dev.cs.ui.ac.id
)
-
Staging:
[
https://pilar-be-staging.cs.ui.ac.id
](
https://pilar-be-staging.cs.ui.ac.id
)
-
Production:
[
https://pilar-be.cs.ui.ac.id
](
https://pilar-be.cs.ui.ac.id
)
## API Documentation
[
https://
industripilar-staging.herokuapp.com/docs/
](
https://industripilar-staging.herokuapp.com
/docs/
)
[
https://
pilar-be-dev.cs.ui.ac.id/docs/
](
https://pilar-be-dev.cs.ui.ac.id
/docs/
)
docker-compose.yml
0 → 100644
View file @
0c39e785
version
:
"
3.9"
services
:
db
:
image
:
postgres:13
environment
:
-
POSTGRES_DB=home_industry
-
POSTGRES_USER=postgres
-
POSTGRES_PASSWORD=postgres
-
POSTGRES_HOST=127.0.0.1
web
:
build
:
.
command
:
bash -c "
python manage.py makemigrations &&
python manage.py migrate &&
/wait-for-it.sh db:5432 -- python manage.py runserver 0.0.0.0:8000"
volumes
:
-
./wait-for-it.sh:/wait-for-it.sh
-
.:/code
ports
:
-
"
8000:8000"
depends_on
:
-
db
env_file
:
.env
\ No newline at end of file
wait-for-it.sh
0 → 100644
View file @
0c39e785
#!/usr/bin/env bash
# Use this script to test if a given TCP host/port are available
WAITFORIT_cmdname
=
${
0
##*/
}
echoerr
()
{
if
[[
$WAITFORIT_QUIET
-ne
1
]]
;
then
echo
"
$@
"
1>&2
;
fi
}
usage
()
{
cat
<<
USAGE
>&2
Usage:
$WAITFORIT_cmdname
host:port [-s] [-t timeout] [-- command args]
-h HOST | --host=HOST Host or IP under test
-p PORT | --port=PORT TCP port under test
Alternatively, you specify the host and port as host:port
-s | --strict Only execute subcommand if the test succeeds
-q | --quiet Don't output any status messages
-t TIMEOUT | --timeout=TIMEOUT
Timeout in seconds, zero for no timeout
-- COMMAND ARGS Execute command with args after the test finishes
USAGE
exit
1
}
wait_for
()
{
if
[[
$WAITFORIT_TIMEOUT
-gt
0
]]
;
then
echoerr
"
$WAITFORIT_cmdname
: waiting
$WAITFORIT_TIMEOUT
seconds for
$WAITFORIT_HOST
:
$WAITFORIT_PORT
"
else
echoerr
"
$WAITFORIT_cmdname
: waiting for
$WAITFORIT_HOST
:
$WAITFORIT_PORT
without a timeout"
fi
WAITFORIT_start_ts
=
$(
date
+%s
)
while
:
do
if
[[
$WAITFORIT_ISBUSY
-eq
1
]]
;
then
nc
-z
$WAITFORIT_HOST
$WAITFORIT_PORT
WAITFORIT_result
=
$?
else
(
echo
-n
>
/dev/tcp/
$WAITFORIT_HOST
/
$WAITFORIT_PORT
)
>
/dev/null 2>&1
WAITFORIT_result
=
$?
fi
if
[[
$WAITFORIT_result
-eq
0
]]
;
then
WAITFORIT_end_ts
=
$(
date
+%s
)
echoerr
"
$WAITFORIT_cmdname
:
$WAITFORIT_HOST
:
$WAITFORIT_PORT
is available after
$((
WAITFORIT_end_ts
-
WAITFORIT_start_ts
))
seconds"
break
fi
sleep
1
done
return
$WAITFORIT_result
}
wait_for_wrapper
()
{
# In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692
if
[[
$WAITFORIT_QUIET
-eq
1
]]
;
then
timeout
$WAITFORIT_BUSYTIMEFLAG
$WAITFORIT_TIMEOUT
$0
--quiet
--child
--host
=
$WAITFORIT_HOST
--port
=
$WAITFORIT_PORT
--timeout
=
$WAITFORIT_TIMEOUT
&
else
timeout
$WAITFORIT_BUSYTIMEFLAG
$WAITFORIT_TIMEOUT
$0
--child
--host
=
$WAITFORIT_HOST
--port
=
$WAITFORIT_PORT
--timeout
=
$WAITFORIT_TIMEOUT
&
fi
WAITFORIT_PID
=
$!
trap
"kill -INT -
$WAITFORIT_PID
"
INT
wait
$WAITFORIT_PID
WAITFORIT_RESULT
=
$?
if
[[
$WAITFORIT_RESULT
-ne
0
]]
;
then
echoerr
"
$WAITFORIT_cmdname
: timeout occurred after waiting
$WAITFORIT_TIMEOUT
seconds for
$WAITFORIT_HOST
:
$WAITFORIT_PORT
"
fi
return
$WAITFORIT_RESULT
}
# process arguments
while
[[
$#
-gt
0
]]
do
case
"
$1
"
in
*
:
*
)
WAITFORIT_hostport
=(
${
1
//
:/
}
)
WAITFORIT_HOST
=
${
WAITFORIT_hostport
[0]
}
WAITFORIT_PORT
=
${
WAITFORIT_hostport
[1]
}
shift
1
;;
--child
)
WAITFORIT_CHILD
=
1
shift
1
;;
-q
|
--quiet
)
WAITFORIT_QUIET
=
1
shift
1
;;
-s
|
--strict
)
WAITFORIT_STRICT
=
1
shift
1
;;
-h
)
WAITFORIT_HOST
=
"
$2
"
if
[[
$WAITFORIT_HOST
==
""
]]
;
then
break
;
fi
shift
2
;;
--host
=
*
)
WAITFORIT_HOST
=
"
${
1
#*=
}
"
shift
1
;;
-p
)
WAITFORIT_PORT
=
"
$2
"
if
[[
$WAITFORIT_PORT
==
""
]]
;
then
break
;
fi
shift
2
;;
--port
=
*
)
WAITFORIT_PORT
=
"
${
1
#*=
}
"
shift
1
;;
-t
)
WAITFORIT_TIMEOUT
=
"
$2
"
if
[[
$WAITFORIT_TIMEOUT
==
""
]]
;
then
break
;
fi
shift
2
;;
--timeout
=
*
)
WAITFORIT_TIMEOUT
=
"
${
1
#*=
}
"
shift
1
;;
--
)
shift
WAITFORIT_CLI
=(
"
$@
"
)
break
;;
--help
)
usage
;;
*
)
echoerr
"Unknown argument:
$1
"
usage
;;
esac
done
if
[[
"
$WAITFORIT_HOST
"
==
""
||
"
$WAITFORIT_PORT
"
==
""
]]
;
then
echoerr
"Error: you need to provide a host and port to test."
usage
fi
WAITFORIT_TIMEOUT
=
${
WAITFORIT_TIMEOUT
:-
15
}
WAITFORIT_STRICT
=
${
WAITFORIT_STRICT
:-
0
}
WAITFORIT_CHILD
=
${
WAITFORIT_CHILD
:-
0
}
WAITFORIT_QUIET
=
${
WAITFORIT_QUIET
:-
0
}
# Check to see if timeout is from busybox?
WAITFORIT_TIMEOUT_PATH
=
$(
type
-p
timeout
)
WAITFORIT_TIMEOUT_PATH
=
$(
realpath
$WAITFORIT_TIMEOUT_PATH
2>/dev/null
||
readlink
-f
$WAITFORIT_TIMEOUT_PATH
)
WAITFORIT_BUSYTIMEFLAG
=
""
if
[[
$WAITFORIT_TIMEOUT_PATH
=
~
"busybox"
]]
;
then
WAITFORIT_ISBUSY
=
1
# Check if busybox timeout uses -t flag
# (recent Alpine versions don't support -t anymore)
if
timeout
&>/dev/stdout |
grep
-q
-e
'-t '
;
then
WAITFORIT_BUSYTIMEFLAG
=
"-t"
fi
else
WAITFORIT_ISBUSY
=
0
fi
if
[[
$WAITFORIT_CHILD
-gt
0
]]
;
then
wait_for
WAITFORIT_RESULT
=
$?
exit
$WAITFORIT_RESULT
else
if
[[
$WAITFORIT_TIMEOUT
-gt
0
]]
;
then
wait_for_wrapper
WAITFORIT_RESULT
=
$?
else
wait_for
WAITFORIT_RESULT
=
$?
fi
fi
if
[[
$WAITFORIT_CLI
!=
""
]]
;
then
if
[[
$WAITFORIT_RESULT
-ne
0
&&
$WAITFORIT_STRICT
-eq
1
]]
;
then
echoerr
"
$WAITFORIT_cmdname
: strict mode, refusing to execute subprocess"
exit
$WAITFORIT_RESULT
fi
exec
"
${
WAITFORIT_CLI
[@]
}
"
else
exit
$WAITFORIT_RESULT
fi
'+
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment