سلام.
من توسعهدهندهی سمت سرور با Laravel/PHP هستم و بعد از نصب سیستم عامل (در اینجا اوبونتو 22.04) ابزارهایی رو نصب و تنظیم میکنم که بتونم راحتتر به توسعهی نرمافزار بپردازم.
توی این پست قصد دارم مراحلی که انجام میدم و ابزارهایی که نصب میکنم رو اینجا مستند کنم که شاید به درد همکارانم بخوره.
پسنوشت: بعضی از دوستان گفتن چرا پروژههات رو Dockerize نمیکنی که نیاز به انجام این مراحل نباشه؟!
باید بگم که برای داکرایز نکردن پروژهها، دلایل خودم رو دارم که نیازی به توضیحشون نمیبینم. مسئلهی بعدی اینه که به این پست از جنبهی آموزشی نگاه کنید، همهی پروژهها لزوما نیاز به داکرایز شدن ندارن و هرکسی به یه روشی راحته. اینم روش منه. اگر شما هم دوست داشتید میتونید مراحلی که برای آمادهسازی سیستمتون انجام میدید رو مستند کنید که همه استفاده کنند. با تشکر.
بعد از نصب اوبونتو 22.04 اولین کاری که باید کرد آپدیت کردن پکیجهاست.
پس دو دستور زیر رو به ترتیب میزنم:
sudo apt update
sudo apt upgrade
بعد نیاز به نصب چند پکیج ابتدایی دارم:
sudo apt install git zsh curl wget build-essential
حالا پلاگین OhMyZSH رو برای zsh نصب میکنم:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
بعد از این کار باید یک بار لاگاوت و دوباره لاگین کنم که Shell پیشفرض به zsh تغییر کنه و پلاگین OhMyZSH لود بشه.
حالا باید PHP رو نصب کنم. من برای نصب پیاچپی از ریپازیتوری ondrej/php استفاده میکنم که همواره آخرین آپدیتها رو توی خودش داره:
sudo add-apt-repository ppa:ondrej/php
و بعد پکیجهای PHP مورد نیازم رو نصب میکنم:
sudo apt install php-fpm php-mbstring php-bcmath php-mcrypt php-zip php-xml php-tokenizer php-mysql php-sqlite3 php-mongodb php-redis php-gd php-imagick php-bz2 php-json php-curl php-soap php-readline php-intl php-dev php-pgsql
اگر نیاز به نسخههای دیگهای هم داشتم به این صورت عمل میکنم:
sudo apt install php8.0-fpm php8.0-mbstring php8.0-bcmath php8.0-mcrypt php8.0-zip php8.0-xml php8.0-tokenizer php8.0-mysql php8.0-sqlite3 php8.0-mongodb php8.0-redis php8.0-gd php8.0-imagick php8.0-bz2 php8.0-curl php8.0-soap php8.0-readline php8.0-intl php8.0-dev php8.0-pgsql
بعد از نصب PHP باید Composer رو نصب کنم:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
sudo php composer-setup.php --install-dir /usr/local/bin --filename composer
php -r "unlink('composer-setup.php');"
بعد خط زیر روی به فایل ~/.zshrc اضافه میکنم که سیستم عامل باینریهای کامپوزر رو از مسیرش بخونه:
export PATH="$HOME/.config/composer/vendor/bin:$PATH"
در این مرحله نیاز به نصب nodejs دارم که من برای نصبش از ابزار nvm استفاده میکنم:
بهتره که از سایت github.com/nvm-sh/nvm دستورات رو برداشت (با دستور زیر نسخهی 0.39.3 نصب میشه).
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
بعد از اجرای دستور بالا باید به صورت اتوماتیک خطهای زیر به انتهای فایل .zshrc در مسیر HOME اضافه شده باشند. اگر اضافه نشدند به صورت دستی اونها رو اضافه میکنم:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
حالا باید فایل .zshrc رو با دستور زیر دوباره به شل zsh معرفی کنم:
source ~/.zshrc
حالا میتونم نسخههای مختلف node رو با nvm install به راحتی نصب کنم:
اگر قصد نصب نسخههای دیگه رو داشتید عدد 18 رو به عدد ورژن مورد نظرتون تغییر بدید.
nvm install 18
حالا برای Serve کردن پروژههام نیاز به نصب ابزار valet-linux دارم که توسط کامپوزر به صورت گلوبال نصب میشه:
composer global require cpriego/valet-linux
بعد از نصب valet-linux باید چند تا پکیج که پیشنیاز valet هستن رو با دستور زیر نصب کنم:
sudo apt install libnss3-tools jq xsel
و در نهایت میتونم با دستور زیر valet رو نصب کنم:
valet install
حالا دستور زیر رو اجرا میکنم که به Valet بگم پروژههام کجا هستن:
cd && mkdir Sites && cd Sites && valet park
با دستور بالا اول به HOME میرم، بعد دایرکتوری Sites رو میسازم، بعد وارد دایرکتوری Sites میشم و در نهایت با دستور valet park به valet میگم که پروژههام رو از دایرکتوری Sites بخونه.
حالا نیاز به نصب docker دارم.
ابتدا:
sudo apt update && sudo apt install ca-certificates curl gnupg lsb-release
بعد:
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
در نهایت:
sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
بعد از نصب داکر یوزر فعلیم رو به گروه docker اضافه میکنم که نیازی به وارد کردن sudo قبل از هر دستور docker نداشته باشم:
sudo usermod -aG docker $USER
حالا باید یک بار لاگاوت و دوباره لاگین کنم.
حالا به کمک دستور pull داکر ایمیجهای mysql, phpmyadmin, mongo, mongoclient, redis, rebrow رو دریافت میکنم:
docker pull mysql:8
docker pull phpmyadmin
docker pull mongo:4
docker pull mongoclient/mongoclient
docker pull redis
docker pull marian/rebrow
حالا یک network به اسم mynet برای کانتینرهام میسازم:
docker network create mynet
حالا باید کانتینرهای مورد نیازم رو ایجاد کنم:
Mysql (ports: 3306,33060 | username: root | password: root):
docker run -d --name mysql --net mynet --restart always -p 3306:3306 -p 33060:33060 -e MYSQL_ROOT_PASSWORD=root mysql:8
phpMyAdmin:
docker run -d --name mysql-client --net mynet --restart always -p 3001:80 -e PMA_HOST=mysql -e UPLOAD_LIMIT=2048M phpmyadmin
Mongo:
docker run -d --name mongo --net mynet --restart always -p 27017:27017 mongo:4
MongoClient:
docker run -d --name mongo-client --net mynet --restart always -p 3002:3000 mongoclient/mongoclient
Redis:
docker run -d --name redis --net mynet --restart always -p 6379:6379 redis
Rebrow (Redis Client):
docker run -d --name redis-client --net mynet --restart always -p 3003:5001 marian/rebrow
با اجرای دستورات بالا و ایجاد کانتینرهای مورد نظر، سرویسهای Mysql, Mongo و Redis روی پورت پیشفرض خودشون Run میشن و کلاینتهای اونها، روی پورتهای زیر در دسترس خواهند بود:
phpMyAdmin: http://localhost:3001 (username: root | password: root)
MongoClient: http://localhost:3002
Rebrow (Redis): http://localhost:3003
حالا باید پکیجهای Snap رو هم آپدیت کنم:
ابتدا دستور زیر رو میزنم:
sudo snap-store --quit
بعد تمام برنامههای باز رو میبندم و دستور زیر رو میزنم (حتما ببندید که آپدیتتون به مشکل نخوره):
sudo snap refresh
و در نهایت یک بار سیستم رو ریستارت میکنم.
در انتها ابزارهای مورد نیازم رو Ubuntu Software نصب میکنم:
خب آمادهسازی اوبونتو 22.04 برای برنامهنویسی Laravel/PHP تموم شد.
امیدوارم این مطلب به دردتون بخوره و کارتون رو راحت بکنه.
اگر نکتهای داشتید و یا پیشنهادی برای بهتر شدن روند آمادهسازی داشتید حتما توی کامنتها بهم بگید.
«سال نو مبارک»