مقدمه
Odoo یک ابزار منبع باز برنامه ریزی منابع سازمانی (ERP) است که در پایتون نوشته شده است. از تعدادی پلاگین برای انواع مختلف نیازهای تجاری مانند حسابداری، حقوق و دستمزد، مدیریت موجودی و موارد دیگر پشتیبانی می کند. در این آموزش شما Odoo و پایگاه داده PostgreSQL را با استفاده از Docker Compose نصب خواهید کرد، سپس Nginx را نصب کنید تا به عنوان یک پروکسی معکوس برای سایت Odoo شما عمل کند. در نهایت، با استفاده از Certbot برای دانلود و پیکربندی یک گواهی TLS از Let’s Encrypt Certificate Authority، اتصالات HTTPS ایمن را فعال خواهید کرد.
پیش نیازها
- یک سرور اوبونتو با 2 یا بیشتر CPU، دارای یک کاربر غیر ریشه با امتیازات sudo و فایروال فعال.
- داکر نصب شده باشد
- در نهایت، برای فعال کردن TLS به یک نام دامنه نیاز دارید که به آدرس IP عمومی سرور شما اشاره داشته باشد. این باید چیزی شبیه example.com یا odoo.example.com باشد.
هنگامی که تمام پیش نیازها را آماده کردید، به مرحله 1 بروید، جایی که بسته docker-compose را نصب خواهید کرد.
مرحله 1 – نصب Docker Compose
برای نصب ابزار خط فرمان docker-compose
، لیست بسته خود را بازخوانی کنید، سپس بسته را با استفاده از apt
نصب کنید:
sudo apt update
sudo apt install docker-compose
با اجرای دستور زیر می توانید تایید کنید که بسته نصب شده است:
docker-compose –version
شما باید خروجی هایی مانند زیر دریافت کنید:
Output
docker-compose version 1.25.0, build unknown
docker-py version: 4.1.0
CPython version: 3.8.10
هنگامی که تأیید کردید که Docker Compose روی سرور شما نصب شده است، Odoo و PostgreSQL را با استفاده از Docker Compose در مرحله بعدی این آموزش پیکربندی و راه اندازی خواهید کرد.
مرحله 2 – اجرای Odoo و PostgreSQL با Docker Compose
برای شروع ایجاد کانتینرهای Odoo و PostgreSQL خود، یک دایرکتوری به نام odoo در فهرست اصلی خود ایجاد کنید تا فایل هایی را که در این آموزش ایجاد خواهید کرد ذخیره کنید. شما از این دایرکتوری برای ذخیره تمام فایل هایی که برای اجرای Odoo نیاز دارید استفاده خواهید کرد.
دستورات زیر را برای ایجاد دایرکتوری و سپس cd
در آن اجرا کنید:
mkdir ~/odoo
cd ~/odoo
اکنون یک فایل YAML خالی جدید به نام docker-compose.yml
را با استفاده از nano
یا ویرایشگر دلخواه خود باز کنید:
nano docker-compose.yml
شما از این فایل با دستور docker-compose
برای راه اندازی کانتینرهای Odoo و PostgreSQL خود و پیوند آنها به یکدیگر استفاده خواهید کرد. خطوط زیر را به فایل اضافه کنید:
version: '3'
services:
odoo:
image: odoo:15.0
env_file: .env
depends_on:
- postgres
ports:
- "127.0.0.1:8069:8069"
volumes:
- data:/var/lib/odoo
postgres:
image: postgres:13
env_file: .env
volumes:
- db:/var/lib/postgresql/data/pgdata
volumes:
data:
db:
فایل دو سرویس را تعریف می کند. اولین مورد odoo نام دارد که برنامه Odoo را اجرا می کند. دومی postgres نام دارد که ظرف پایگاه داده PostgreSQL است. هر دو سرویس به حجمهایی اشاره میکنند که برای ذخیره دادهها در خارج از نمونههای کانتینر در حال اجرا استفاده میکنند. در نهایت، سرویس odoo پورت 8069 روی سرور شما را در معرض کانتینر Odoo قرار می دهد که روی همان پورت 8069 اجرا می شود.
پس از اتمام ویرایش فایل، آن را ذخیره کرده و از آن خارج شوید. اگر از نانو استفاده می کنید، CTRL+O و سپس RETURN را برای ذخیره و سپس CTRL+X را برای خروج فشار دهید.
کانتینرهای Odoo و PostgreSQL از متغیرهای محیطی برای پیکربندی خود استفاده می کنند. فایل docker-compose.yml دستور env_file را برای هر دو سرویس مشخص می کند. سپس آن دستورالعمل شامل فایل ارجاعی می شود که حاوی متغیرهایی است که هر سرویس برای اجرا نیاز دارد.
این رویکرد معمولاً بهجای افزودن مستقیم متغیرهای محیطی به فایل docker-compose.yml توصیه میشود، زیرا عمل خوبی است که پسوردها را از فایل docker-compose.yml خود دور نگه دارید. این رویکرد مخصوصاً در صورتی کاربرد دارد که فایلهای خود را به یک مخزن Git یا سیستم کنترل منبع دیگری اختصاص دهید.
یک فایل env جدید با nano باز کنید:
nano .env
خطوط زیر را به فایل اضافه کنید و به جای مقادیر هایلایت شده، یک POSTGRES_USER
و POSTGRES_PASSWORD
انتخابی خود را جایگزین کنید:
# postgresql environment variables
POSTGRES_DB=postgres
POSTGRES_PASSWORD=a_strong_password_for_user
POSTGRES_USER=odoo
PGDATA=/var/lib/postgresql/data/pgdata
# odoo environment variables
HOST=postgres
USER=odoo
PASSWORD=a_strong_password_for_user
برای ایجاد رمز عبور برای Odoo و PostgreSQL، از دستور openssl استفاده کنید که باید در اکثر سیستم های لینوکس موجود باشد. دستور زیر را بر روی سرور خود اجرا کنید تا مجموعه ای تصادفی از بایت ها تولید شود و نسخه کدگذاری شده base64 که می توانید از آن به عنوان رمز عبور استفاده کنید چاپ کنید:
openssl rand -base64 30
رشته به دست آمده را به جای گذرواژه های نگهدارنده a_strong_password_for_user
در فایل .env
خود قرار دهید.هنگامی که ویرایش فایل .env خود را تمام کردید، ویرایشگر متن خود را ذخیره کرده و از آن خارج شوید.
اکنون آماده هستید تا کانتینرهای odoo
و postgres
را با دستور docker-compose
شروع کنید:
docker-compose up -d
فرمان فرعی up به docker-compose می گوید که کانتینرها و حجم ها و شبکه های مرتبط را که در فایل docker-compose.yml تعریف شده اند، راه اندازی کند. پرچم -d (که مخفف “daemonize” است) به docker-compose میگوید که کانتینرها را در پسزمینه اجرا کند تا فرمان ترمینال شما را تحت کنترل نگیرد. docker-compose زمانی که تصاویر Docker مورد نیاز را دانلود میکند و سپس کانتینرها را راهاندازی میکند، خروجی مختصری را چاپ میکند:
Output
Creating network "odoo_default" with the default driver
Creating volume "odoo_odoo_data" with default driver
Creating volume "odoo_postgres_data" with default driver
Pulling odoo (odoo:14.0)...
15.0: Pulling from library/odoo
. . .
وقتی این کار تمام شد، Odoo باید در حال اجرا باشد. با واکشی صفحه اصلی با استفاده از دستور curl، می توانید آزمایش کنید که یک وب سرور در 127.0.0.1:8069
اجرا می شود:
curl --head http://localhost:8069
با این کار فقط سرصفحه های HTTP از پاسخ چاپ می شود:
Output
HTTP/1.0 303 SEE OTHER
Content-Type: text/html; charset=utf-8
Content-Length: 215
Location: http://localhost:8069/web
Set-Cookie: session_id=142fa5c02742d0f5f16c73bc14ec8144b8230f8a; Expires=Mon, 06-Jun-2022 20:45:34 GMT; Max-Age=7776000; HttpOnly; Path=/
Server: Werkzeug/0.14.1 Python/3.7.3
Date: Tue, 08 Mar 2022 20:45:34 GMT
پاسخ 303 SEE OTHER
به این معنی است که سرور Odoo
آماده و در حال اجرا است، اما برای تکمیل نصب باید از صفحه دیگری دیدن کنید. هدر http://localhost:8069/web
مشخص شده مکان نشان می دهد که کجا باید از صفحه نصب کننده Odoo در مرورگر خود بازدید کنید.
سپس Nginx را برای پراکسی کردن ترافیک عمومی به کانتینر Odoo راهاندازی میکنیم.
مرحله 3 – نصب و پیکربندی Nginx
قرار دادن یک وب سرور مانند Nginx در مقابل سرور Odoo میتواند عملکرد را با بارگذاری ذخیرهسازی، فشردهسازی و سرویس فایل استاتیک برای یک فرآیند کارآمدتر بهبود بخشد. ما قصد داریم Nginx را نصب کنیم و آن را پیکربندی کنیم تا درخواستهای پروکسی را به Odoo معکوس کند، به این معنی که از ارسال درخواستهای کاربران شما به Odoo و بازگشت دوباره مراقبت میکند. استفاده از فرآیند Nginx غیر کانتینری اضافه کردن گواهینامههای Let’s Encrypt TLS را در مرحله بعدی آسانتر میکند.
ابتدا لیست بسته خود را بازخوانی کنید، سپس Nginx را با استفاده از apt
نصب کنید:
sudo apt update
sudo apt install nginx
با استفاده از نمایه برنامه Nginx Full UFW، ترافیک عمومی به پورت های 80 و 443 (HTTP و HTTPS) را مجاز کنید:
sudo ufw allow "Nginx Full"
Output
Rule added
Rule added (v6)
سپس یک فایل پیکربندی جدید Nginx را در دایرکتوری /etc/nginx/sites-available باز کنید. ما odoo.conf خود را صدا می کنیم اما می توانید از نام دیگری استفاده کنید:
sudo nano /etc/nginx/sites-available/odoo.conf
موارد زیر را در فایل پیکربندی جدید جایگذاری کنید، مطمئن شوید که your_domain_here را با دامنهای که پیکربندی کردهاید برای اشاره به سرور Odoo خود جایگزین کنید. این باید چیزی شبیه odoo.example.com باشد، برای مثال:
server {
listen 80;
listen [::]:80;
server_name your_domain_here;
access_log /var/log/nginx/odoo.access.log;
error_log /var/log/nginx/odoo.error.log;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_pass http://localhost:8069;
}
}
این پیکربندی فعلاً فقط HTTP است، زیرا به Certbot اجازه میدهیم تا در مرحله بعدی پیکربندی TLS را انجام دهد. بقیه فایل پیکربندی مکانهای ثبت را تنظیم میکند و سپس تمام ترافیک و همچنین برخی از هدرهای پراکسی مهم را به همراه http://localhost:8069، ظرف Odoo که در مرحله قبل راهاندازی کردیم، ارسال میکند.
فایل را ذخیره کرده و ببندید، سپس پیکربندی را با پیوند دادن آن به /etc/nginx/sites-enabled/ فعال کنید:
sudo ln -s /etc/nginx/sites-available/odoo.conf /etc/nginx/sites-enabled/
از nginx -t برای بررسی درست بودن نحو فایل پیکربندی استفاده کنید:
sudo nginx -t
Output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
و در نهایت، سرویس nginx را با پیکربندی جدید بارگیری مجدد کنید:
sudo systemctl reload nginx.service
سایت Odoo شما اکنون باید با HTTP ساده در دسترس باشد. http://your_domain_here را بارگیری کنید (ممکن است مجبور شوید از طریق یک هشدار امنیتی کلیک کنید) و به شکل زیر خواهد بود:
اکنون که سایت خود را از طریق HTTP راهاندازی کردهاید، زمان آن رسیده است که اتصال را با گواهیهای Certbot و Let’s Encrypt ایمن کنید. شما باید این کار را قبل از انجام مراحل راه اندازی مبتنی بر وب Odoo انجام دهید.
مرحله 4 – نصب Certbot و راهاندازی گواهیهای TLS
به لطف Certbot و مجوز مجوز رایگان Let’s Encrypt، افزودن رمزگذاری TLS به برنامه Odoo شما تنها دو دستور را می طلبد.
ابتدا Certbot و افزونه Nginx آن را نصب کنید:
sudo apt install certbot python3-certbot-nginx
سپس، certbot را در حالت –nginx اجرا کنید و همان دامنه ای را که در دستورالعمل پیکربندی Nginx server_name استفاده کرده اید، مشخص کنید:
sudo certbot --nginx -d your_domain_here
از شما خواسته می شود که با شرایط خدمات Let’s Encrypt موافقت کنید و یک آدرس ایمیل وارد کنید. پس از آن، از شما پرسیده می شود که آیا می خواهید تمام ترافیک HTTP را به HTTPS هدایت کنید. این به شما بستگی دارد، اما این به طور کلی توصیه می شود و انجام آن بی خطر است.
پس از آن، Let’s Encrypt درخواست شما را تایید می کند و Certbot گواهی شما را دانلود می کند:
Output
Congratulations! You have successfully enabled https://odoo.example.com
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=odoo.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/odoo.example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/odoo.example.com/privkey.pem
Your cert will expire on 2022-05-09. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Certbot به طور خودکار Nginx را با پیکربندی و گواهی های جدید بارگیری می کند. سایت خود را مجدداً در مرورگر خود بارگیری کنید و اگر گزینه تغییر مسیر را انتخاب کنید، باید به طور خودکار شما را به HTTPS تغییر دهد.
سایت شما اکنون ایمن است و ادامه مراحل راه اندازی مبتنی بر وب بی خطر است.
مرحله 5 – راه اندازی Odoo
به مرورگر وب خود برگردید، صفحه را دوباره بارگیری کنید. اکنون باید صفحه پیکربندی پایگاه داده Odoo را از طریق یک اتصال امن https:// باز کنید. اکنون می توانید نام کاربری و رمز عبور را با خیال راحت وارد کنید تا مراحل نصب تکمیل شود.
اطلاعاتی که در این صفحه پر می کنید به برنامه Odoo می گوید که چگونه پایگاه داده PostgreSQL خود را ایجاد کند و جزئیاتی در مورد کاربر پیش فرض مدیریتی.
فیلدهای زیر را پر کنید:
- نام پایگاه داده: odoo
- ایمیل: آدرس ایمیل شما
- رمز عبور: یک رمز عبور قوی و منحصر به فرد برای ورود سرپرست شما
- دادههای نمایشی: اگر اولین باری است که odoo را نصب میکنید، مطمئن شوید که این گزینه علامت زده شده است
پیشفرضها برای فیلدهای باقیمانده مناسب هستند. حتماً مقادیر ایمیل و رمز عبوری را که انتخاب میکنید ثبت کنید، زیرا در آینده از آنها برای ورود به Odoo استفاده خواهید کرد.
اکنون روی دکمه ایجاد پایگاه داده در سمت چپ پایین صفحه کلیک کنید. ممکن است یک یا دو دقیقه طول بکشد تا Odoo جداول پایگاه داده خود را ایجاد کند. پس از تکمیل فرآیند، به صفحه اداری Odoo Apps هدایت خواهید شد.
از اینجا می توانید انتخاب کنید که کدام ماژول های Odoo را می خواهید برای نیازهای ERP خود نصب و استفاده کنید. اگر می خواهید یک برنامه را آزمایش کنید، روی دکمه Install در کاشی Sales کلیک کنید. Odoo ماژول را نصب می کند و سپس شما را به صفحه شخصی برنامه Discuss هدایت می کند.
روی نماد مربع تقسیمبندی شده در سمت چپ بالای صفحه کلیک کنید و سپس پیوند فروش را در لیست گزینههای کشویی انتخاب کنید.
شما در صفحهای خواهید بود که شما را از طریق سفارشیسازی دادهها، قیمتها، سفارشها و فهرستی از نمونههای فروش که میتوانید با آنها آزمایش کنید، راهنمایی میکند.
نتیجه
در این آموزش، شما برنامه Odoo ERP و پایگاه داده PostgreSQL را با استفاده از Docker Compose راه اندازی کردید، سپس یک پراکسی معکوس Nginx راه اندازی کردید و با استفاده از گواهینامه های Let’s Encrypt TLS آن را ایمن کردید.