This guide deploys OpenCart 4.0 with Docker Compose on Debian 10+, Ubuntu 20.04+, or RHEL 9+.
Current Version: 4.0.x (released 2023-2024)
⚠️ Important: No official OpenCart Docker image exists. This playbook builds a custom Docker image.
- name: Deploy OpenCart with Docker Compose
hosts: opencart
become: true
vars:
app_root: /opt/opencart
app_port: 8080
db_name: opencart
db_user: opencart
db_password: "opencart-db-password-change-me"
db_root_password: "mariadb-root-password-change-me"
tasks:
- name: Install Docker on Debian/Ubuntu
apt:
name:
- docker.io
- docker-compose-plugin
state: present
update_cache: true
when: ansible_os_family == "Debian"
- name: Install Docker on RHEL family
dnf:
name:
- docker
- docker-compose-plugin
state: present
when: ansible_os_family == "RedHat"
- name: Enable and start Docker
service:
name: docker
state: started
enabled: true
- name: Create app directory
file:
path: "{{ app_root }}"
state: directory
mode: "0755"
- name: Write Dockerfile for OpenCart
copy:
dest: "{{ app_root }}/Dockerfile"
mode: "0644"
content: |
FROM php:8.1-apache
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
libzip-dev \
zip \
unzip \
&& docker-php-ext-install pdo_mysql bcmath zip gd mysqli \
&& a2enmod rewrite headers ssl \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
WORKDIR /var/www/html
EXPOSE 80
- name: Write Docker Compose file for OpenCart
copy:
dest: "{{ app_root }}/docker-compose.yml"
mode: "0644"
content: |
version: '3.8'
services:
mariadb:
image: mariadb:10.6
container_name: opencart-mariadb
restart: unless-stopped
environment:
MYSQL_DATABASE: {{ db_name }}
MYSQL_USER: {{ db_user }}
MYSQL_PASSWORD: {{ db_password }}
MYSQL_ROOT_PASSWORD: {{ db_root_password }}
volumes:
- mariadb_data:/var/lib/mysql
networks:
- opencart-net
opencart:
build: .
container_name: opencart
restart: unless-stopped
depends_on:
- mariadb
ports:
- "{{ app_port }}:80"
volumes:
- opencart_data:/var/www/html
networks:
- opencart-net
volumes:
mariadb_data:
opencart_data:
networks:
opencart-net:
- name: Build and start application stack
command: docker compose up -d --build
args:
chdir: "{{ app_root }}"
- name: Wait for OpenCart to be ready
wait_for:
port: "{{ app_port }}"
timeout: 120
delay: 10
- name: Install OpenCart via Composer
command: >
docker compose exec -T opencart
composer create-project opencart/opencart opencart
register: install_result
changed_when: "'Installing' in install_result.stdout"
failed_when: install_result.rc != 0 and 'already exists' not in install_result.stderr
- name: Display installation information
debug:
msg: |
OpenCart installation is ready!
Access: http://{{ inventory_hostname }}:{{ app_port }}
Admin: http://{{ inventory_hostname }}:{{ app_port }}/admin
IMPORTANT:
1. Complete the setup wizard on first access
2. Delete the /install directory after installation
3. Change the admin password immediately after setup
4. Configure SSL/TLS via reverse proxy for production
http://YOUR-SERVER:8080docker compose exec opencart rm -rf /var/www/html/opencart/install| Variable | Description | Default |
|---|---|---|
app_root |
Installation directory | /opt/opencart |
app_port |
External port for web access | 8080 |
db_name |
MySQL database name | opencart |
db_user |
MySQL database user | opencart |
db_password |
MySQL database password | (change me) |
db_root_password |
MySQL root password | (change me) |