├── .gitignore ├── README.md ├── addons └── readme.md ├── docker-compose.yml ├── entrypoint.sh ├── etc ├── odoo.conf └── requirements.txt ├── run.sh └── screenshots ├── odoo-13-apps-screenshot.png ├── odoo-13-sales-form.png ├── odoo-13-sales-screen.png └── odoo-13-welcome-screenshot.png /.gitignore: -------------------------------------------------------------------------------- 1 | etc/odoo-server.log -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Quick install 2 | 3 | Installing Odoo 13 with one command. 4 | 5 | (Supports multiple Odoo instances on one server) 6 | 7 | Install [docker](https://docs.docker.com/get-docker/) and [docker-compose](https://docs.docker.com/compose/install/) yourself, then run: 8 | 9 | ``` bash 10 | curl -s https://raw.githubusercontent.com/minhng92/odoo-13-docker-compose/master/run.sh | sudo bash -s odoo-one 10013 20013 11 | ``` 12 | 13 | to set up first Odoo instance @ `localhost:10013` (default master password: `minhng.info`) 14 | 15 | and 16 | 17 | ``` bash 18 | curl -s https://raw.githubusercontent.com/minhng92/odoo-13-docker-compose/master/run.sh | sudo bash -s odoo-two 11013 21013 19 | ``` 20 | 21 | to set up another Odoo instance @ `localhost:11013` (default master password: `minhng.info`) 22 | 23 | Some arguments: 24 | * First argument (**odoo-one**): Odoo deploy folder 25 | * Second argument (**10013**): Odoo port 26 | * Third argument (**20013**): live chat port 27 | 28 | If `curl` is not found, install it: 29 | 30 | ``` bash 31 | $ sudo apt-get install curl 32 | # or 33 | $ sudo yum install curl 34 | ``` 35 | 36 | # Usage 37 | 38 | Start the container: 39 | ``` sh 40 | docker-compose up 41 | ``` 42 | 43 | * Then open `localhost:10013` to access Odoo 13.0. If you want to start the server with a different port, change **10013** to another value in **docker-compose.yml**: 44 | 45 | ``` 46 | ports: 47 | - "10013:8069" 48 | ``` 49 | 50 | Run Odoo container in detached mode (be able to close terminal without stopping Odoo): 51 | 52 | ``` 53 | docker-compose up -d 54 | ``` 55 | 56 | **If you get the permission issue**, change the folder permission to make sure that the container is able to access the directory: 57 | 58 | ``` sh 59 | $ git clone https://github.com/minhng92/odoo-13-docker-compose 60 | $ sudo chmod -R 777 addons 61 | $ sudo chmod -R 777 etc 62 | $ mkdir -p postgresql 63 | $ sudo chmod -R 777 postgresql 64 | ``` 65 | 66 | Increase maximum number of files watching from 8192 (default) to **524288**. In order to avoid error when we run multiple Odoo instances. This is an *optional step*. These commands are for Ubuntu user: 67 | 68 | ``` 69 | $ if grep -qF "fs.inotify.max_user_watches" /etc/sysctl.conf; then echo $(grep -F "fs.inotify.max_user_watches" /etc/sysctl.conf); else echo "fs.inotify.max_user_watches = 524288" | sudo tee -a /etc/sysctl.conf; fi 70 | $ sudo sysctl -p # apply new config immediately 71 | ``` 72 | 73 | # Custom addons 74 | 75 | The **addons/** folder contains custom addons. Just put your custom addons if you have any. 76 | 77 | # Odoo configuration & log 78 | 79 | * To change Odoo configuration, edit file: **etc/odoo.conf**. 80 | * Log file: **etc/odoo-server.log** 81 | * Default database password (**admin_passwd**) is `minhng.info`, please change it @ [etc/odoo.conf#L60](/etc/odoo.conf#L60) 82 | 83 | # Odoo container management 84 | 85 | **Run Odoo**: 86 | 87 | ``` bash 88 | docker-compose up -d 89 | ``` 90 | 91 | **Restart Odoo**: 92 | 93 | ``` bash 94 | docker-compose restart 95 | ``` 96 | 97 | **Stop Odoo**: 98 | 99 | ``` bash 100 | docker-compose down 101 | ``` 102 | 103 | # Live chat 104 | 105 | In [docker-compose.yml#L21](docker-compose.yml#L21), we exposed port **20013** for live-chat on host. 106 | 107 | Configuring **nginx** to activate live chat feature (in production): 108 | 109 | ``` conf 110 | #... 111 | server { 112 | #... 113 | location /longpolling/ { 114 | proxy_pass http://0.0.0.0:20013/longpolling/; 115 | } 116 | #... 117 | } 118 | #... 119 | ``` 120 | 121 | # docker-compose.yml 122 | 123 | * odoo:13.0 124 | * postgres:11 125 | 126 | # Odoo 13 screenshots 127 | 128 | ![odoo-13-welcome-docker](screenshots/odoo-13-welcome-screenshot.png) 129 | 130 | ![odoo-13-apps-docker](screenshots/odoo-13-apps-screenshot.png) 131 | 132 | ![odoo-13-sales](screenshots/odoo-13-sales-screen.png) 133 | 134 | ![odoo-13-form](screenshots/odoo-13-sales-form.png) 135 | -------------------------------------------------------------------------------- /addons/readme.md: -------------------------------------------------------------------------------- 1 | This file is intentionally left blank. -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | db: 4 | image: postgres:11 5 | user: root 6 | environment: 7 | - POSTGRES_PASSWORD=odoo 8 | - POSTGRES_USER=odoo 9 | - POSTGRES_DB=postgres 10 | restart: always # run as a service 11 | volumes: 12 | - ./postgresql:/var/lib/postgresql/data 13 | 14 | odoo13: 15 | image: odoo:13 16 | user: root 17 | depends_on: 18 | - db 19 | ports: 20 | - "10013:8069" 21 | - "20013:8072" # live chat 22 | tty: true 23 | command: -- 24 | # command: odoo scaffold /mnt/extra-addons/test_module 25 | environment: 26 | - HOST=db 27 | - USER=odoo 28 | - PASSWORD=odoo 29 | volumes: 30 | #- /etc/timezone:/etc/timezone:ro 31 | #- /etc/localtime:/etc/localtime:ro 32 | # - ./entrypoint.sh:/entrypoint.sh # if you want to install additional Python packages, uncomment this line! 33 | - ./addons:/mnt/extra-addons 34 | - ./etc:/etc/odoo 35 | restart: always # run as a service 36 | -------------------------------------------------------------------------------- /entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | # set the postgres database host, port, user and password according to the environment 6 | # and pass them as arguments to the odoo process if not present in the config file 7 | : ${HOST:=${DB_PORT_5432_TCP_ADDR:='db'}} 8 | : ${PORT:=${DB_PORT_5432_TCP_PORT:=5432}} 9 | : ${USER:=${DB_ENV_POSTGRES_USER:=${POSTGRES_USER:='odoo'}}} 10 | : ${PASSWORD:=${DB_ENV_POSTGRES_PASSWORD:=${POSTGRES_PASSWORD:='odoo'}}} 11 | 12 | # install python packages 13 | pip3 install pip --upgrade 14 | pip3 install -r /etc/odoo/requirements.txt 15 | 16 | # sed -i 's|raise werkzeug.exceptions.BadRequest(msg)|self.jsonrequest = {}|g' /usr/lib/python3/dist-packages/odoo/http.py 17 | 18 | DB_ARGS=() 19 | function check_config() { 20 | param="$1" 21 | value="$2" 22 | if grep -q -E "^\s*\b${param}\b\s*=" "$ODOO_RC" ; then 23 | value=$(grep -E "^\s*\b${param}\b\s*=" "$ODOO_RC" |cut -d " " -f3|sed 's/["\n\r]//g') 24 | fi; 25 | DB_ARGS+=("--${param}") 26 | DB_ARGS+=("${value}") 27 | } 28 | check_config "db_host" "$HOST" 29 | check_config "db_port" "$PORT" 30 | check_config "db_user" "$USER" 31 | check_config "db_password" "$PASSWORD" 32 | 33 | case "$1" in 34 | -- | odoo) 35 | shift 36 | if [[ "$1" == "scaffold" ]] ; then 37 | exec odoo "$@" 38 | else 39 | wait-for-psql.py ${DB_ARGS[@]} --timeout=30 40 | exec odoo "$@" "${DB_ARGS[@]}" 41 | fi 42 | ;; 43 | -*) 44 | wait-for-psql.py ${DB_ARGS[@]} --timeout=30 45 | exec odoo "$@" "${DB_ARGS[@]}" 46 | ;; 47 | *) 48 | exec "$@" 49 | esac 50 | 51 | exit 1 -------------------------------------------------------------------------------- /etc/odoo.conf: -------------------------------------------------------------------------------- 1 | [options] 2 | ; =================== 3 | ; | Common options) | 4 | ; =================== 5 | ; ------ 6 | ; -c / --config | specify alternate config file 7 | ; ------ 8 | ; config = 9 | 10 | ; ------ 11 | ; -s / --save | save configuration to ~/.odoorc (or to ~/.openerp_serverrc if it exists) 12 | ; ------ 13 | ; save = 14 | 15 | ; ------ 16 | ; -i / --init | install one or more modules (comma-separated list, use "all" for all modules), requires -d 17 | ; ------ 18 | ; init = 19 | 20 | ; ------ 21 | ; -u / --update | update one or more modules (comma-separated list, use "all" for all modules). Requires -d. 22 | ; ------ 23 | ; update = 24 | 25 | ; ------ 26 | ; --without-demo | disable loading demo data for modules to be installed (comma-separated, use "all" for all modules). Requires -d and -i. Default is %default 27 | ; ------ 28 | ; without_demo = 29 | 30 | ; ------ 31 | ; -P / --import-partial | Use this for big data importation, if it crashes you will be able to continue at the current state. Provide a filename to store intermediate importation states. 32 | ; ------ 33 | ; import_partial = 34 | 35 | ; ------ 36 | ; --pidfile | file where the server pid will be stored 37 | ; ------ 38 | ; pidfile = 39 | 40 | ; ------ 41 | ; --addons-path | type = string | specify additional addons paths (separated by commas). 42 | ; ------ 43 | addons_path = /mnt/extra-addons 44 | 45 | ; ------ 46 | ; --upgrade-path | type = string | specify an additional upgrade path. 47 | ; ------ 48 | ; upgrade_path = 49 | 50 | ; ------ 51 | ; --load | Comma-separated list of server-wide modules. 52 | ; ------ 53 | ; server_wide_modules = base,web 54 | 55 | ; ------ 56 | ; -D / --data-dir | Directory where to store Odoo data 57 | ; ------ 58 | data_dir = /etc/odoo 59 | 60 | admin_passwd = minhng.info 61 | 62 | ; ============================== 63 | ; | HTTP Service Configuration | 64 | ; ============================== 65 | ; ------ 66 | ; --http-interface | Listen interface address for HTTP services. Keep empty to listen on all interfaces (0.0.0.0) 67 | ; ------ 68 | ; http_interface = 69 | 70 | ; ------ 71 | ; -p / --http-port | type = int | Listen port for the main HTTP service 72 | ; ------ 73 | ; http_port = 8069 74 | 75 | ; ------ 76 | ; --longpolling-port | type = int | Listen port for the longpolling HTTP service 77 | ; ------ 78 | ; longpolling_port = 8072 79 | 80 | ; ------ 81 | ; --no-http | Disable the HTTP and Longpolling services entirely 82 | ; ------ 83 | ; http_enable = True 84 | 85 | ; ------ 86 | ; --proxy-mode | Activate reverse proxy WSGI wrappers (headers rewriting) Only enable this when running behind a trusted web proxy! 87 | ; ------ 88 | ; proxy_mode = 89 | 90 | ; ------ 91 | ; --xmlrpc-interface | SUPPRESSHELP 92 | ; ------ 93 | ; http_interface = 94 | 95 | ; ------ 96 | ; --xmlrpc-port | type = int | SUPPRESSHELP 97 | ; ------ 98 | ; http_port = 99 | 100 | ; ------ 101 | ; --no-xmlrpc | SUPPRESSHELP 102 | ; ------ 103 | ; http_enable = 104 | 105 | ; =============================== 106 | ; | Web interface Configuration | 107 | ; =============================== 108 | ; ------ 109 | ; --db-filter | Regular expressions for filtering available databases for Web UI. The expression can use %d (domain) and %h (host) placeholders. 110 | ; ------ 111 | ; dbfilter = 112 | 113 | ; ========================= 114 | ; | Testing Configuration | 115 | ; ========================= 116 | ; ------ 117 | ; --test-file | Launch a python test file. 118 | ; ------ 119 | ; test_file = 120 | 121 | ; ------ 122 | ; --test-enable | Enable unit tests. 123 | ; ------ 124 | ; test_enable = 125 | 126 | ; ------ 127 | ; --test-tags | Comma separated list of spec to filter which tests to execute. Enable unit tests if set. A filter spec has the format: [-][tag][/module][:class][.method] The '-' specifies if we want to include or exclude tests matching this spec. The tag will match tags added on a class with a @tagged decorator. By default tag value is 'standard' when not given on include mode. '*' will match all tags. Tag will also match module name (deprecated, use /module) The module, class, and method will respectively match the module name, test class name and test method name. examples: :TestClass.test_func,/test_module,external 128 | ; ------ 129 | ; test_tags = 130 | 131 | ; ------ 132 | ; --screencasts | Screencasts will go in DIR/{db_name}/screencasts. 133 | ; ------ 134 | ; screencasts = 135 | 136 | ; ------ 137 | ; --screenshots | Screenshots will go in DIR/{db_name}/screenshots. Defaults to /etc/odoo/odoo_tests. 138 | ; ------ 139 | ; screenshots = /etc/odoo/odoo_tests 140 | 141 | ; ========================= 142 | ; | Logging Configuration | 143 | ; ========================= 144 | ; ------ 145 | ; --logfile | file where the server log will be stored 146 | ; ------ 147 | logfile = /etc/odoo/odoo-server.log 148 | 149 | ; ------ 150 | ; --syslog | Send the log to the syslog server 151 | ; ------ 152 | ; syslog = 153 | 154 | ; ------ 155 | ; --log-handler | setup a handler at LEVEL for a given PREFIX. An empty PREFIX indicates the root logger. This option can be repeated. Example: "odoo.orm:DEBUG" or "werkzeug:CRITICAL" (default: ":INFO") 156 | ; ------ 157 | ; None = :INFO 158 | 159 | ; ------ 160 | ; --log-request | shortcut for --log-handler=odoo.http.rpc.request:DEBUG 161 | ; ------ 162 | ; log_handler = 163 | 164 | ; ------ 165 | ; --log-response | shortcut for --log-handler=odoo.http.rpc.response:DEBUG 166 | ; ------ 167 | ; log_handler = 168 | 169 | ; ------ 170 | ; --log-web | shortcut for --log-handler=odoo.http:DEBUG 171 | ; ------ 172 | ; log_handler = 173 | 174 | ; ------ 175 | ; --log-sql | shortcut for --log-handler=odoo.sql_db:DEBUG 176 | ; ------ 177 | ; log_handler = 178 | 179 | ; ------ 180 | ; --log-db | Logging database 181 | ; ------ 182 | ; log_db = 183 | 184 | ; ------ 185 | ; --log-db-level | Logging database level 186 | ; ------ 187 | ; log_db_level = warning 188 | 189 | ; ------ 190 | ; --log-level | type = choice | choices = ['info', 'debug_rpc', 'warn', 'test', 'critical', 'debug_sql', 'error', 'debug', 'debug_rpc_answer', 'notset'] | specify the level of the logging. Accepted values: ['info', 'debug_rpc', 'warn', 'test', 'critical', 'debug_sql', 'error', 'debug', 'debug_rpc_answer', 'notset']. 191 | ; ------ 192 | ; log_level = info 193 | 194 | ; ====================== 195 | ; | SMTP Configuration | 196 | ; ====================== 197 | ; ------ 198 | ; --email-from | specify the SMTP email address for sending email 199 | ; ------ 200 | ; email_from = 201 | 202 | ; ------ 203 | ; --smtp | specify the SMTP server for sending email 204 | ; ------ 205 | ; smtp_server = localhost 206 | 207 | ; ------ 208 | ; --smtp-port | type = int | specify the SMTP port 209 | ; ------ 210 | ; smtp_port = 25 211 | 212 | ; ------ 213 | ; --smtp-ssl | if passed, SMTP connections will be encrypted with SSL (STARTTLS) 214 | ; ------ 215 | ; smtp_ssl = 216 | 217 | ; ------ 218 | ; --smtp-user | specify the SMTP username for sending email 219 | ; ------ 220 | ; smtp_user = 221 | 222 | ; ------ 223 | ; --smtp-password | specify the SMTP password for sending email 224 | ; ------ 225 | ; smtp_password = 226 | 227 | ; ============================ 228 | ; | Database related options | 229 | ; ============================ 230 | ; ------ 231 | ; -d / --database | specify the database name 232 | ; ------ 233 | ; db_name = 234 | 235 | ; ------ 236 | ; -r / --db_user | specify the database user name 237 | ; ------ 238 | ; db_user = 239 | 240 | ; ------ 241 | ; -w / --db_password | specify the database password 242 | ; ------ 243 | ; db_password = 244 | 245 | ; ------ 246 | ; --pg_path | specify the pg executable path 247 | ; ------ 248 | ; pg_path = 249 | 250 | ; ------ 251 | ; --db_host | specify the database host 252 | ; ------ 253 | ; db_host = 254 | 255 | ; ------ 256 | ; --db_port | type = int | specify the database port 257 | ; ------ 258 | ; db_port = 259 | 260 | ; ------ 261 | ; --db_sslmode | type = choice | choices = ['disable', 'allow', 'prefer', 'require', 'verify-ca', 'verify-full'] | specify the database ssl connection mode (see PostgreSQL documentation) 262 | ; ------ 263 | ; db_sslmode = prefer 264 | 265 | ; ------ 266 | ; --db_maxconn | type = int | specify the maximum number of physical connections to PostgreSQL 267 | ; ------ 268 | ; db_maxconn = 64 269 | 270 | ; ------ 271 | ; --db-template | specify a custom database template to create a new database 272 | ; ------ 273 | ; db_template = template0 274 | 275 | ; ======================== 276 | ; | Internationalisation | 277 | ; ======================== 278 | ; ------ 279 | ; --load-language | specifies the languages for the translations you want to be loaded 280 | ; ------ 281 | ; load_language = 282 | 283 | ; ------ 284 | ; -l / --language | specify the language of the translation file. Use it with --i18n-export or --i18n-import 285 | ; ------ 286 | ; language = 287 | 288 | ; ------ 289 | ; --i18n-export | export all sentences to be translated to a CSV file, a PO file or a TGZ archive and exit 290 | ; ------ 291 | ; translate_out = 292 | 293 | ; ------ 294 | ; --i18n-import | import a CSV or a PO file with translations and exit. The '-l' option is required. 295 | ; ------ 296 | ; translate_in = 297 | 298 | ; ------ 299 | ; --i18n-overwrite | overwrites existing translation terms on updating a module or importing a CSV or a PO file. 300 | ; ------ 301 | ; overwrite_existing_translations = 302 | 303 | ; ------ 304 | ; --modules | specify modules to export. Use in combination with --i18n-export 305 | ; ------ 306 | ; translate_modules = 307 | 308 | ; ============================ 309 | ; | Security-related options | 310 | ; ============================ 311 | ; ------ 312 | ; --no-database-list | Disable the ability to obtain or view the list of databases. Also disable access to the database manager and selector, so be sure to set a proper --database parameter first 313 | ; ------ 314 | ; list_db = True 315 | 316 | ; ==================== 317 | ; | Advanced options | 318 | ; ==================== 319 | ; ------ 320 | ; --dev | type = string | Enable developer mode. Param: List of options separated by comma. Options : all, [pudb|wdb|ipdb|pdb], reload, qweb, werkzeug, xml 321 | ; ------ 322 | dev_mode = reload 323 | 324 | ; ------ 325 | ; --shell-interface | type = string | Specify a preferred REPL to use in shell mode. Supported REPLs are: [ipython|ptpython|bpython|python] 326 | ; ------ 327 | ; shell_interface = 328 | 329 | ; ------ 330 | ; --stop-after-init | stop the server after its initialization 331 | ; ------ 332 | ; stop_after_init = 333 | 334 | ; ------ 335 | ; --osv-memory-count-limit | type = int | Force a limit on the maximum number of records kept in the virtual osv_memory tables. The default is False, which means no count-based limit. 336 | ; ------ 337 | ; osv_memory_count_limit = 338 | 339 | ; ------ 340 | ; --osv-memory-age-limit | type = float | Force a limit on the maximum age of records kept in the virtual osv_memory tables. This is a decimal value expressed in hours, and the default is 1 hour. 341 | ; ------ 342 | ; osv_memory_age_limit = 1.0 343 | 344 | ; ------ 345 | ; --max-cron-threads | type = int | Maximum number of threads processing concurrently cron jobs (default 2). 346 | ; ------ 347 | ; max_cron_threads = 2 348 | 349 | ; ------ 350 | ; --unaccent | Use the unaccent function provided by the database when available. 351 | ; ------ 352 | ; unaccent = 353 | 354 | ; ------ 355 | ; --geoip-db | Absolute path to the GeoIP database file. 356 | ; ------ 357 | ; geoip_database = /usr/share/GeoIP/GeoLite2-City.mmdb 358 | 359 | ; =========================== 360 | ; | Multiprocessing options | 361 | ; =========================== 362 | ; ------ 363 | ; --workers | type = int | Specify the number of workers, 0 disable prefork mode. 364 | ; ------ 365 | ; workers = 366 | 367 | ; ------ 368 | ; --limit-memory-soft | type = int | Maximum allowed virtual memory per worker, when reached the worker be reset after the current request (default 2048MiB). 369 | ; ------ 370 | ; limit_memory_soft = 2147483648 371 | 372 | ; ------ 373 | ; --limit-memory-hard | type = int | Maximum allowed virtual memory per worker, when reached, any memory allocation will fail (default 2560MiB). 374 | ; ------ 375 | ; limit_memory_hard = 2684354560 376 | 377 | ; ------ 378 | ; --limit-time-cpu | type = int | Maximum allowed CPU time per request (default 60). 379 | ; ------ 380 | ; limit_time_cpu = 60 381 | 382 | ; ------ 383 | ; --limit-time-real | type = int | Maximum allowed Real time per request (default 120). 384 | ; ------ 385 | ; limit_time_real = 120 386 | 387 | ; ------ 388 | ; --limit-time-real-cron | type = int | Maximum allowed Real time per cron job. (default: --limit-time-real). Set to 0 for no limit. 389 | ; ------ 390 | ; limit_time_real_cron = -1 391 | 392 | ; ------ 393 | ; --limit-request | type = int | Maximum number of request to be processed per worker (default 8192). 394 | ; ------ 395 | ; limit_request = 8192 396 | -------------------------------------------------------------------------------- /etc/requirements.txt: -------------------------------------------------------------------------------- 1 | # ----------------------- 2 | # | Add Python packages | 3 | # ----------------------- 4 | # To install below packages at startup, uncomment this line in "docker-compose.yml" file! 5 | # - ./entrypoint.sh:/entrypoint.sh 6 | # then down the docker container ($ docker-compose down) and up it again ($ docker-compose up -d). 7 | # ----------------------- 8 | # paramiko==2.7.2 # for auto_backup module 9 | -------------------------------------------------------------------------------- /run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | DESTINATION=$1 3 | PORT=$2 4 | CHAT=$3 5 | 6 | # Clone Odoo directory 7 | git clone --depth=1 https://github.com/minhng92/odoo-13-docker-compose $DESTINATION 8 | rm -rf $DESTINATION/.git 9 | 10 | # Create PostgreSQL directory 11 | mkdir -p $DESTINATION/postgresql 12 | 13 | # Change ownership to current user and set restrictive permissions for security 14 | sudo chown -R $USER:$USER $DESTINATION 15 | sudo chmod -R 700 $DESTINATION # Only the user has access 16 | 17 | # Check if running on macOS 18 | if [[ "$OSTYPE" == "darwin"* ]]; then 19 | echo "Running on macOS. Skipping inotify configuration." 20 | else 21 | # System configuration 22 | if grep -qF "fs.inotify.max_user_watches" /etc/sysctl.conf; then 23 | echo $(grep -F "fs.inotify.max_user_watches" /etc/sysctl.conf) 24 | else 25 | echo "fs.inotify.max_user_watches = 524288" | sudo tee -a /etc/sysctl.conf 26 | fi 27 | sudo sysctl -p 28 | fi 29 | 30 | # Set ports in docker-compose.yml 31 | # Update docker-compose configuration 32 | if [[ "$OSTYPE" == "darwin"* ]]; then 33 | # macOS sed syntax 34 | sed -i '' 's/10013/'$PORT'/g' $DESTINATION/docker-compose.yml 35 | sed -i '' 's/20013/'$CHAT'/g' $DESTINATION/docker-compose.yml 36 | else 37 | # Linux sed syntax 38 | sed -i 's/10013/'$PORT'/g' $DESTINATION/docker-compose.yml 39 | sed -i 's/20013/'$CHAT'/g' $DESTINATION/docker-compose.yml 40 | fi 41 | 42 | # Set file and directory permissions after installation 43 | find $DESTINATION -type f -exec chmod 644 {} \; 44 | find $DESTINATION -type d -exec chmod 755 {} \; 45 | 46 | # Run Odoo 47 | docker-compose -f $DESTINATION/docker-compose.yml up -d 48 | 49 | echo "Odoo started at http://localhost:$PORT | Master Password: minhng.info | Live chat port: $CHAT" 50 | -------------------------------------------------------------------------------- /screenshots/odoo-13-apps-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minhng92/odoo-13-docker-compose/339135c478d71524a2837831c5e9d764d39663ab/screenshots/odoo-13-apps-screenshot.png -------------------------------------------------------------------------------- /screenshots/odoo-13-sales-form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minhng92/odoo-13-docker-compose/339135c478d71524a2837831c5e9d764d39663ab/screenshots/odoo-13-sales-form.png -------------------------------------------------------------------------------- /screenshots/odoo-13-sales-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minhng92/odoo-13-docker-compose/339135c478d71524a2837831c5e9d764d39663ab/screenshots/odoo-13-sales-screen.png -------------------------------------------------------------------------------- /screenshots/odoo-13-welcome-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minhng92/odoo-13-docker-compose/339135c478d71524a2837831c5e9d764d39663ab/screenshots/odoo-13-welcome-screenshot.png --------------------------------------------------------------------------------