diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..53644f0 --- /dev/null +++ b/.env.example @@ -0,0 +1,3 @@ +CLOUD_DOMAIN=cloud.ospp.openstone.cn +DB_USER=odoo +DB_PASS=odoo \ No newline at end of file diff --git a/config/odoo.conf b/config/odoo.conf new file mode 100644 index 0000000..167fe67 --- /dev/null +++ b/config/odoo.conf @@ -0,0 +1,37 @@ +[options] +addons_path = /mnt/extra-addons +data_dir = /var/lib/odoo +; admin_passwd = admin +; csv_internal_sep = , +; db_maxconn = 64 +; db_name = False +; db_template = template1 +; dbfilter = .* +; debug_mode = False +; email_from = False +; limit_memory_hard = 2684354560 +; limit_memory_soft = 2147483648 +; limit_request = 8192 +limit_time_cpu = 3600 +limit_time_real = 7200 +; list_db = True +; log_db = False +; log_handler = [':INFO'] +; log_level = info +; logfile = None +longpolling_port = 8072 +; max_cron_threads = 2 +; osv_memory_age_limit = 1.0 +; osv_memory_count_limit = False +; smtp_password = False +; smtp_port = 25 +; smtp_server = localhost +; smtp_ssl = False +; smtp_user = False +workers = 4 +; xmlrpc = True +; xmlrpc_interface = +xmlrpc_port = 8069 +; xmlrpcs = True +; xmlrpcs_interface = +; xmlrpcs_port = 8071 \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..7227b50 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,167 @@ +version: "3" + +services: + cloud_db: + image: postgres:13 + container_name: "cloud_db" + environment: + - POSTGRES_DB=postgres + - POSTGRES_PASSWORD=${DB_USER:-odoo} + - POSTGRES_USER=${DB_PASS:-odoo} + - PGDATA=/var/lib/postgresql/data/pgdata + volumes: + - ./data:/var/lib/postgresql/data/pgdata + + ospp_cloud: + image: odoo:16.0 + container_name: "ospp_cloud" + depends_on: + - cloud_db +# ports: +# - "8069:8069" + volumes: + - ./files:/var/lib/odoo + - ./config:/etc/odoo + - ./addons:/mnt/extra-addons + environment: + - HOST=cloud_db + - USER=${DB_USER:-odoo} + - PASSWORD=${DB_PASS:-odoo} + networks: + - traefik-docker_default + labels: + - "traefik.enable=true" + - "traefik.http.routers.ospp_cloud.rule=Host(`${CLOUD_DOMAIN}`)" + - "traefik.http.routers.ospp_cloud.service=ospp_cloud" + - "traefik.http.services.ospp_cloud.loadbalancer.server.port=8069" + - "traefik.http.middlewares.ospp_cloud.compress=true" + - "traefik.http.routers.ospp_cloud_im.rule=Host(`${CLOUD_DOMAIN}`) && (PathPrefix(`/longpolling`))" + - "traefik.http.routers.ospp_cloud_im.service=ospp_cloud_im" + - "traefik.http.services.ospp_cloud_im.loadbalancer.server.port=8072" + - "traefik.http.middlewares.ospp_cloud_im.compress=true" + + + + +# +#services: +# traefik: +# image: "traefik:v2.4" +# container_name: "traefik" +# env_file: .env +# environment: +# - UID=2000 +# - GID=2000 +# ports: +# - "80:80" +# - "443:443" +# command: +# - --api.insecure=true +# - --api.dashboard=true +# - --api.debug=true +# - --log=true +# - --log.level=INFO +# - --providers.docker=true +# - --providers.docker.exposedbydefault=false +# - --providers.file.filename=/dynamic.yml +# - --providers.docker.network=web +# - --entrypoints.http.address=:80 +# - --entrypoints.https.address=:443 +# - --certificatesresolvers.le.acme.httpchallenge=true +# - --certificatesresolvers.le.acme.httpchallenge.entrypoint=http +# - --certificatesresolvers.le.acme.email=${LETS_ENCRYPT_CONTACT_EMAIL} +# - --certificatesresolvers.le.acme.storage=/letsencrypt/acme.json +# networks: +# - web +# volumes: +# - "${BASE_VOLUME_DIR}/traefik/conf/letsencrypt:/letsencrypt" +# - "${BASE_VOLUME_DIR}/traefik/conf/dynamic.yml:/dynamic.yml" +# - "/var/run/docker.sock:/var/run/docker.sock:ro" +# labels: +# - traefik.enable=true +# - traefik.http.routers.traefik-http.rule=Host(`${TRAEFIK_HOSTNAME}`) +# - traefik.http.routers.traefik-http.entrypoints=http +# - traefik.http.routers.traefik-http.service=traefik +# - traefik.http.routers.traefik-http.middlewares=redirect@file +# - traefik.http.routers.traefik-https.rule=Host(`${TRAEFIK_HOSTNAME}`) +# - traefik.http.routers.traefik-https.entrypoints=https +# - traefik.http.routers.traefik-https.tls=true +# - traefik.http.routers.traefik-https.tls.options=default +# - traefik.http.routers.traefik-https.service=traefik +# - traefik.http.routers.traefik-https.tls.certresolver=le +# - traefik.http.services.traefik.loadbalancer.server.port=8080 +# - traefik.http.routers.traefik-https.middlewares=gzip +# - traefik.http.middlewares.gzip.compress=true +# +# odoo: +# image: registry.wisecoding.io/docker/odoo:11.0 +# container_name: odoo +# networks: +# - web +# env_file: .env +# healthcheck: +# test: ["CMD-SHELL", "curl -X HEAD -I http://127.0.0.1:8069"] +# interval: 10s +# timeout: 10s +# retries: 10 +# volumes: +# #- "${BASE_VOLUME_DIR}/odoo/entrypoint.sh:/entrypoint.sh" +# - "${BASE_VOLUME_DIR}/odoo/extra-addons:/opt/odoo/extra-addons" +# - "${BASE_VOLUME_DIR}/odoo/data:/opt/odoo/data" +# - "${BASE_VOLUME_DIR}/odoo/logs:/opt/odoo/logs" +# - "${BASE_VOLUME_DIR}/odoo/conf:/opt/odoo/conf" +# ulimits: +# nofile: +# soft: 65536 +# hard: 65536 +# +# labels: +# - traefik.enable=true +# #----------------------------------------------- routers for: odoo -------------------------------------------------- +# # http +# - traefik.http.routers.odoo-http.rule=Host(`${ODOO_HOSTNAME}`) +# - traefik.http.routers.odoo-http.entrypoints=http +# - traefik.http.routers.odoo-http.middlewares=redirect@file +# - traefik.http.routers.odoo-http.service=odoo +# # https +# - traefik.http.routers.odoo-https.rule=Host(`${ODOO_HOSTNAME}`) +# - traefik.http.routers.odoo-https.entrypoints=https +# - traefik.http.routers.odoo-https.service=odoo +# - traefik.http.routers.odoo-https.tls.certresolver=le +# - traefik.http.routers.odoo-https.middlewares=gzip,sslheader,limit +# #----------------------------- routes for: odoo/web/database || odoo/website/info ----------------------------- +# # http +# - traefik.http.routers.odoo-db-http.rule=Host(`${ODOO_HOSTNAME}`) && (PathPrefix(`/web/database`) || PathPrefix(`/website/info`)) +# - traefik.http.routers.odoo-db-http.entrypoints=http +# - traefik.http.routers.odoo-db-http.service=odoo +# - traefik.http.routers.odoo-db-http.middlewares=redirect@file +# - traefik.http.services.odoo-db-http.loadbalancer.server.port=8069 +# # https +# - traefik.http.routers.odoo-db-https.rule=Host(`${ODOO_HOSTNAME}`) && (PathPrefix(`/web/database`) || PathPrefix(`/website/info`)) +# - traefik.http.routers.odoo-db-https.entrypoints=https +# - traefik.http.routers.odoo-db-https.service=odoo +# - traefik.http.routers.odoo-db-https.tls.certresolver=le +# - traefik.http.routers.odoo-db-https.middlewares=gzip,sslheader,limit +# - traefik.http.services.odoo-db-https.loadbalancer.server.port=8069 +# #---------------------------------------- routes for: odoo/longpolling ------------------------------------------------ +# # http +# - traefik.http.routers.odoo-im-http.rule=Host(`${ODOO_HOSTNAME}`) && (PathPrefix(`/longpolling`)) +# - traefik.http.routers.odoo-im-http.entrypoints=http +# - traefik.http.routers.odoo-im-http.middlewares=redirect@file +# - traefik.http.routers.odoo-im-http.service=odoo-im +# # https +# - traefik.http.routers.odoo-im-https.rule=Host(`${ODOO_HOSTNAME}`) && (PathPrefix(`/longpolling`)) +# - traefik.http.routers.odoo-im-https.entrypoints=https +# - traefik.http.routers.odoo-im-https.service=odoo-im +# - traefik.http.routers.odoo-im-https.tls.certresolver=le +# - traefik.http.routers.odoo-im-https.middlewares=gzip,sslheader,limit +# +# #====================================================== services =========================================================== +# - traefik.http.services.odoo.loadbalancer.server.port=8069 +# - traefik.http.services.odoo-im.loadbalancer.server.port=8072 +# +# #===================================================== middlewares ========================================================= +# - traefik.http.middlewares.gzip.compress=true +# - traefik.http.middlewares.sslheader.headers.customrequestheaders.X-Forwarded-Proto=https +# - traefik.http.middlewares.limit.buffering.memRequestBodyBytes=20971520 +# - traefik.http.middlewares.limit.buffering.maxRequestBodyBytes=20971520 \ No newline at end of file