├── .github └── workflows │ └── shellcheck.yml ├── README.md └── install_odoo.sh /.github/workflows/shellcheck.yml: -------------------------------------------------------------------------------- 1 | name: ShellCheck 2 | 3 | on: 4 | push: 5 | paths: 6 | - '**.sh' 7 | pull_request: 8 | paths: 9 | - '**.sh' 10 | 11 | jobs: 12 | shellcheck: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - uses: actions/checkout@v2 16 | - name: Run ShellCheck 17 | uses: ludeeus/action-shellcheck@master 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Odoo Installation Script 3 | 4 | An automated installation script for Odoo on Ubuntu systems. This script supports multiple Odoo versions (12.0+) and Ubuntu versions (18.04+). 5 | 6 | 7 | Author 8 | Moaaz Gafar 9 | 10 | - Email: m.gafar2024@gmail.com 11 | - LinkedIn:https://www.linkedin.com/in/moaaz-gafar-0676a3111/ 12 | - GitHub: https://github.com/moaaz1995 13 | 14 | 15 | ## Features 16 | 17 | - Supports all Odoo versions (12.0 and above) 18 | - Works on Ubuntu 18.04 and newer versions 19 | - Secure configuration with automatic password generation 20 | - Automatic dependency handling 21 | - Detailed logging 22 | - Systemd service configuration 23 | - Easy update mechanism 24 | 25 | ## Quick Start 26 | 27 | ```bash 28 | # Download the script 29 | wget https://raw.githubusercontent.com/moaaz1995/odoo-install-script/main/install_odoo.sh 30 | 31 | # Make it executable 32 | chmod +x install_odoo.sh 33 | 34 | # Run the script (replace XX.0 with your desired Odoo version) 35 | sudo ./install_odoo.sh XX.0 36 | ``` 37 | 38 | ## Requirements 39 | 40 | - Ubuntu 18.04 or newer 41 | - Sudo privileges 42 | - Internet connection 43 | 44 | ## Usage Examples 45 | 46 | Install Odoo 18: 47 | ```bash 48 | sudo ./install_odoo.sh 18.0 49 | ``` 50 | 51 | Install Odoo 16: 52 | ```bash 53 | sudo ./install_odoo.sh 16.0 54 | ``` 55 | 56 | ## What Gets Installed? 57 | 58 | - Odoo of specified version 59 | - PostgreSQL database 60 | - Python dependencies 61 | - System dependencies 62 | - Wkhtmltopdf 63 | - Systemd service 64 | - Virtual environment 65 | 66 | ## Post-Installation 67 | 68 | After installation completes: 69 | 1. Access Odoo at: `http://localhost:8069` 70 | 2. Check service status: `systemctl status odoo-XX.0` 71 | 3. View logs: `tail -f /var/log/odoo/odoo-XX.0.log` 72 | 73 | ## Updating Odoo 74 | 75 | Use the provided update script: 76 | ```bash 77 | sudo /opt/odoo/update-odoo-XX.0.sh 78 | ``` 79 | 80 | 81 | ## Support 82 | 83 | If you encounter any problems, please: 84 | 1. Check the [Troubleshooting Guide](docs/TROUBLESHOOTING.md) 85 | 2. Search existing [Issues](https://github.com/moaaz1995/odoo-install-script/issues) 86 | 3. Create a new issue if needed 87 | 88 | ## Star History 89 | 90 | If you find this script helpful, please consider giving it a star ⭐️ 91 | -------------------------------------------------------------------------------- /install_odoo.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | 4 | # Universal Odoo Installation Script 5 | # Author: Moaaz Gafar 6 | # Email: m.gafar2024@gmail.com 7 | # LinkedIn: https://www.linkedin.com/in/%F0%9D%91%B4%F0%9D%92%90%F0%9D%92%82%F0%9D%92%82%F0%9D%92%9B-%F0%9D%91%AE%F0%9D%92%82%F0%9D%92%87%F0%9D%92%82%F0%9D%92%93-0676a3111/ 8 | # Created: 2024 9 | # Description: Automated installation script for Odoo (versions 12.0+) on Ubuntu systems 10 | # Repository: https://github.com/moaaz1995/odoo-install-script 11 | # 12 | # This script is provided under MIT License 13 | # Copyright (c) 2024 Moaaz Gafar 14 | 15 | 16 | # Supports multiple Ubuntu versions (18.04+) and Odoo versions (12.0+) 17 | # Usage: sudo bash install_odoo.sh 18 | # Example: sudo bash install_odoo.sh 16.0 19 | 20 | # Exit script on error 21 | set -e 22 | 23 | # Colors for output 24 | RED='\033[0;31m' 25 | GREEN='\033[0;32m' 26 | YELLOW='\033[1;33m' 27 | NC='\033[0m' # No Color 28 | 29 | # Function to display messages 30 | log() { 31 | echo -e "${GREEN}[$(date +'%Y-%m-%dT%H:%M:%S%z')]: $1${NC}" 32 | } 33 | 34 | error() { 35 | echo -e "${RED}[$(date +'%Y-%m-%dT%H:%M:%S%z')]: $1${NC}" >&2 36 | } 37 | 38 | warning() { 39 | echo -e "${YELLOW}[$(date +'%Y-%m-%dT%H:%M:%S%z')]: $1${NC}" 40 | } 41 | 42 | # Check if script is run with sudo 43 | if [ "$EUID" -ne 0 ]; then 44 | error "Please run as root (sudo)" 45 | exit 1 46 | fi 47 | 48 | # Check if version parameter is provided 49 | if [ -z "$1" ]; then 50 | error "Please provide Odoo version!" 51 | echo "Usage: sudo bash install_odoo.sh " 52 | echo "Example: sudo bash install_odoo.sh 16.0" 53 | exit 1 54 | fi 55 | 56 | # Set Odoo version 57 | ODOO_VERSION=$1 58 | 59 | # Detect Ubuntu version 60 | UBUNTU_VERSION=$(lsb_release -rs) 61 | log "Detected Ubuntu version: ${UBUNTU_VERSION}" 62 | 63 | # Function to compare versions 64 | version_gt() { 65 | test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1" 66 | } 67 | 68 | # Function to handle package manager locks 69 | handle_locks() { 70 | log "Handling package manager locks..." 71 | killall apt apt-get 2>/dev/null || true 72 | rm /var/lib/apt/lists/lock 2>/dev/null || true 73 | rm /var/cache/apt/archives/lock 2>/dev/null || true 74 | rm /var/lib/dpkg/lock* 2>/dev/null || true 75 | dpkg --configure -a 76 | } 77 | 78 | # Function to check and install package 79 | install_package() { 80 | if ! dpkg -l | grep -q "^ii $1 "; then 81 | apt install -y "$1" 82 | fi 83 | } 84 | 85 | # Handle any existing locks 86 | handle_locks 87 | 88 | # Update system 89 | log "Updating system packages..." 90 | apt update 91 | apt upgrade -y 92 | 93 | # Install common dependencies 94 | log "Installing common dependencies..." 95 | COMMON_PACKAGES="git build-essential wget postgresql node-less" 96 | for package in $COMMON_PACKAGES; do 97 | install_package $package 98 | done 99 | 100 | # Python package installation based on Ubuntu version 101 | log "Installing Python packages..." 102 | if version_gt $UBUNTU_VERSION "22.04"; then 103 | # For Ubuntu 22.04 and newer 104 | apt install -y python3-dev python3-pip python3-wheel python3-venv python3-full \ 105 | python3-setuptools 106 | else 107 | # For Ubuntu 20.04 and older 108 | apt install -y python3-dev python3-pip python3-wheel python3-venv \ 109 | python3-setuptools 110 | fi 111 | 112 | # Install system dependencies 113 | log "Installing system dependencies..." 114 | apt install -y libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev \ 115 | libtiff5-dev libjpeg8-dev libopenjp2-7-dev zlib1g-dev libfreetype6-dev \ 116 | liblcms2-dev libwebp-dev libharfbuzz-dev libfribidi-dev libxcb1-dev \ 117 | libpq-dev 118 | 119 | # Install wkhtmltopdf based on Ubuntu version 120 | log "Installing wkhtmltopdf..." 121 | if version_gt $UBUNTU_VERSION "22.04"; then 122 | apt install -y wkhtmltopdf 123 | else 124 | # For older Ubuntu versions, install from website 125 | wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.jammy_amd64.deb 126 | apt install -y ./wkhtmltox_0.12.6.1-2.jammy_amd64.deb 127 | rm wkhtmltox_0.12.6.1-2.jammy_amd64.deb 128 | fi 129 | 130 | # Create Odoo user 131 | log "Creating Odoo user..." 132 | id -u odoo &>/dev/null || useradd -m -d /opt/odoo -U -r -s /bin/bash odoo 133 | 134 | # Setup PostgreSQL 135 | log "Configuring PostgreSQL..." 136 | su - postgres -c "psql -c \"SELECT 1 FROM pg_user WHERE usename = 'odoo'\" | grep -q 1 || createuser -s odoo" 137 | 138 | # Directory structure 139 | log "Creating directory structure..." 140 | mkdir -p /opt/odoo 141 | mkdir -p /var/log/odoo 142 | mkdir -p /etc/odoo 143 | chown -R odoo:odoo /opt/odoo 144 | chown -R odoo:odoo /var/log/odoo 145 | chown -R odoo:odoo /etc/odoo 146 | 147 | # Clone Odoo 148 | log "Cloning Odoo ${ODOO_VERSION}..." 149 | if [ -d "/opt/odoo/odoo-${ODOO_VERSION}" ]; then 150 | log "Updating existing Odoo installation..." 151 | su - odoo -c "cd /opt/odoo/odoo-${ODOO_VERSION} && git pull" 152 | else 153 | su - odoo -c "git clone --depth 1 --branch ${ODOO_VERSION} https://github.com/odoo/odoo /opt/odoo/odoo-${ODOO_VERSION}" 154 | fi 155 | 156 | # Setup virtual environment 157 | log "Setting up Python virtual environment..." 158 | su - odoo -c "python3 -m venv /opt/odoo/odoo-${ODOO_VERSION}-venv" 159 | VENV_PATH="/opt/odoo/odoo-${ODOO_VERSION}-venv" 160 | VENV_PYTHON="${VENV_PATH}/bin/python3" 161 | VENV_PIP="${VENV_PATH}/bin/pip" 162 | 163 | # Install Python dependencies 164 | log "Installing Python packages in virtual environment..." 165 | su - odoo -c "${VENV_PIP} install wheel" 166 | su - odoo -c "cd /opt/odoo/odoo-${ODOO_VERSION} && ${VENV_PIP} install -r requirements.txt" 167 | 168 | # Generate random admin password 169 | ADMIN_PASSWORD=$(openssl rand -base64 12) 170 | 171 | # Create Odoo config 172 | log "Creating Odoo configuration..." 173 | cat > /etc/odoo/odoo-${ODOO_VERSION}.conf << EOF 174 | [options] 175 | admin_passwd = ${ADMIN_PASSWORD} 176 | db_host = False 177 | db_port = False 178 | db_user = odoo 179 | db_password = False 180 | addons_path = /opt/odoo/odoo-${ODOO_VERSION}/addons 181 | logfile = /var/log/odoo/odoo-${ODOO_VERSION}.log 182 | http_port = 8069 183 | EOF 184 | 185 | chown odoo:odoo /etc/odoo/odoo-${ODOO_VERSION}.conf 186 | chmod 640 /etc/odoo/odoo-${ODOO_VERSION}.conf 187 | 188 | # Create systemd service 189 | log "Creating systemd service..." 190 | cat > /etc/systemd/system/odoo-${ODOO_VERSION}.service << EOF 191 | [Unit] 192 | Description=Odoo ${ODOO_VERSION} 193 | Requires=postgresql.service 194 | After=network.target postgresql.service 195 | 196 | [Service] 197 | Type=simple 198 | SyslogIdentifier=odoo-${ODOO_VERSION} 199 | PermissionsStartOnly=true 200 | User=odoo 201 | Group=odoo 202 | Environment="PATH=${VENV_PATH}/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" 203 | ExecStart=${VENV_PYTHON} /opt/odoo/odoo-${ODOO_VERSION}/odoo-bin -c /etc/odoo/odoo-${ODOO_VERSION}.conf 204 | StandardOutput=journal+console 205 | Restart=always 206 | RestartSec=5 207 | 208 | [Install] 209 | WantedBy=multi-user.target 210 | EOF 211 | 212 | chmod 755 /etc/systemd/system/odoo-${ODOO_VERSION}.service 213 | systemctl daemon-reload 214 | 215 | # Start and enable Odoo service 216 | log "Starting Odoo service..." 217 | systemctl start odoo-${ODOO_VERSION} 218 | systemctl enable odoo-${ODOO_VERSION} 219 | 220 | # Create an update script 221 | log "Creating update script..." 222 | cat > /opt/odoo/update-odoo-${ODOO_VERSION}.sh << EOF 223 | #!/bin/bash 224 | systemctl stop odoo-${ODOO_VERSION} 225 | su - odoo -c "cd /opt/odoo/odoo-${ODOO_VERSION} && git pull" 226 | su - odoo -c "${VENV_PIP} install -r /opt/odoo/odoo-${ODOO_VERSION}/requirements.txt" 227 | systemctl start odoo-${ODOO_VERSION} 228 | EOF 229 | 230 | chmod +x /opt/odoo/update-odoo-${ODOO_VERSION}.sh 231 | chown odoo:odoo /opt/odoo/update-odoo-${ODOO_VERSION}.sh 232 | 233 | log "Installation complete!" 234 | echo "========================================" 235 | echo "Odoo ${ODOO_VERSION} Installation Summary" 236 | echo "========================================" 237 | echo "Web interface: http://localhost:8069" 238 | echo "Service name: odoo-${ODOO_VERSION}" 239 | echo "Config file: /etc/odoo/odoo-${ODOO_VERSION}.conf" 240 | echo "Log file: /var/log/odoo/odoo-${ODOO_VERSION}.log" 241 | echo "Virtual environment: ${VENV_PATH}" 242 | echo "Admin password: ${ADMIN_PASSWORD}" 243 | echo "" 244 | echo "To update Odoo in the future, run:" 245 | echo "sudo /opt/odoo/update-odoo-${ODOO_VERSION}.sh" 246 | echo "" 247 | echo "Useful commands:" 248 | echo "- Check status: systemctl status odoo-${ODOO_VERSION}" 249 | echo "- View logs: tail -f /var/log/odoo/odoo-${ODOO_VERSION}.log" 250 | echo "- Restart service: systemctl restart odoo-${ODOO_VERSION}" 251 | --------------------------------------------------------------------------------