Установка LEMP стека в YC
LEMP стек - это набор сервисов, состоящий из шести программ: Linux, Nginx, MySQL, PHP, php-fpm, PhpMyAdmin. Данный стек применяется для работы с сайтами.
Установим последовательно все компоненты. Поехади!
SA у нас уже готов: https://teletype.in/@cameda/w93lPMPQWS4
Выберем зону доступности А: https://teletype.in/@cameda/S34zdiTcbUM
Сеть и подсети создали ранее: https://teletype.in/@cameda/ZbTkF70KWK9
SG будем использовать со стандартными открытыми портами: https://teletype.in/@cameda/WIoqKmpMNLM
export SG=$(yc vpc sg get cam-default --format=json | jq -r '.id') export FOLDER_ID=$(yc config get folder-id) export ZONE=ru-central1-a export SUBNET_ID=$(yc vpc subnet get subnet-a --format json | jq -r '.id') export SA=$(yc iam service-account get cam-instance-sa --format json | jq -r '.id')
Создадим скрипт для cloud-init:
#cloud-config version: v1 package_update: true package_upgrade: true write_files: - encoding: b64 content: VGVzc3R0dC4uLg== owner: root:root path: /opt/test permissions: '0644' packages: - git - htop - mc - tree - make - iftop - iotop - dstat - gcc - gdb datasource: Ec2: strict_id: false users: - default - name: cameda gecos: Alexey Volkov groups: sudo shell: /bin/bash sudo: ['ALL=(ALL) NOPASSWD:ALL'] lock_passwd: false passwd: $6$rounds=4096$WhW2cxlj/QX90$Jic1yPwlpiWV98oX8akplpOX4e7pgJlWHCfKAyPiMf7xP1AqI7iocN/gjWQNX9WuIUf14LVgxJluajfOInk.u. ssh_authorized_keys: - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDI98mJDBN9cnp6HOdBYTQILeAhUSDvDfoqA9iLmVPDyPLFRWs7tE4BjCAcFD6a3M50QIboCaohfa7h+PWksYibab7I3QHOR7y9pCW8FGonGRw2ACvt906qlaWHFj7jWOxuihFoiRROKqLCW5YE/Yc4XFIvW1gu3JQdvQ1wemWvujsI8EHE6PI1pEg7/41y6kn3IhNHIr8WRLe4dPyPGjwc4LpBCcaRSJiX4YjVXynSIHNk365UrL+nGv8ix7bW5FNCgGqSgfUTVCfMYLzQ/gYHPVQrcIvCeHjkwluH8Z3gXeN3OliejBjpLi+IWIzd9K6UADSUNU8oL+9941tDidp8APoe7RbB4h3bY6k8Bhy0yxohgQS2OWSYd1mjeEx8Ba5wzJKqfpUgmcPdrBJnBwLgLMFQyEfYG6vTPkYWAKEvkkJ6ZiA4tdoQvCb+B0xJV/ivHyLtoi3LFE59mbQFDUy8O51vX9JjBDLwzyTEeslWp7uOP66Ti5Q5ucNXbs5yXTU= cameda@cameda-osx"
yc vpc address create \ --folder-id $FOLDER_ID \ --name lemp-ip \ --description "LEMP IP" \ --external-ipv4 zone=$ZONE \ --labels work=lemp \ --async
Создадим ВМ с Ubuntu 20.04:
export IP=$(yc vpc address get lemp-ip --format=json | jq -r ".external_ipv4_address" | jq -r ".address") yc compute instance create \ --folder-id $FOLDER_ID \ --name cam-lemp \ --description "LEMP" \ --hostname cam-lemp \ --zone $ZONE \ --labels work=lemp \ --platform standard-v3 \ --create-boot-disk image-family=ubuntu-2004-lts,size=60,type=network-ssd,block-size=8K \ --image-folder-id standard-images \ --memory 4 \ --cores 2 \ --core-fraction 100 \ --network-settings type=standard \ --network-interface subnet-id=$SUBNET_ID,nat-ip-version=ipv4,nat-address=$IP,security-group-ids=$SG \ --metadata serial-port-enable=1 \ --metadata-from-file='user-data=cloud-init.yaml' \ --service-account-id $SA \ --async
login: cameda password: Pa$w0rd
ssh cameda@$IP sudo -i ping ya.ru - проверим что корректно работает DNS. apt -y update && apt -y upgrade hostnamectl - проверим, что версия ОС и имя ВМ корректны.
Установим Nginx:
apt -y install nginx
nginx -v - смотрим какая версия nginx nginx version: nginx/1.18.0 (Ubuntu) nginx -t - смотрим, что конфигурация верная nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful systemctl status nginx - должно быть active. systemctl enable nginx
Проверим, что стартовая страничка открылась: http://IP
Воспользуемся доменом, который уже зарегистрировали: https://teletype.in/@cameda/editor/DtL0osUlczH
И поправим конфигурацию nginx для работы с этим доменом.
echo "" > /etc/nginx/sites-available/default vi /etc/nginx/sites-available/default
server { listen 80 default_server; server_name cameda.ru; index index.html; access_log off; location / { root /var/www/html/cameda.ru; } }
Если своего домена нет, то можно сделать так:
server { listen 80 default_server; server_name $IP; index index.html; access_log off; location / { root /var/www/html/cameda.ru; } }
Здесь вместо $IP нужно будет подставить реальный адрес ВМ.
Это совсем простенькая конфигурация, говорящая о том, что надо слушать 80 порт, файл index.html находится по адресу /var/www/html/cameda.ru и редирект на эту страницу переходит при обращении к сайту по его доменному имени - cameda.ru. Или как в случае без домена по IP.
nginx -t systemctl restart nginx
Создадим директорию для сайта:
mkdir -p /var/www/html/cameda.ru touch index.html echo "Hello, Cameda" > /var/www/html/cameda.ru/index.html curl cameda.ru Hello, Cameda! curl $IP Hello, Cameda!
Установим MySQL.
apt -y install mysql-server mysql-client systemctl enable mysql mysql -V mysql Ver 8.0.30-0ubuntu0.20.04.2 for Linux on x86_64 ((Ubuntu))
mysql ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'Pa$word'; quit mysql_secure_installation Pa$word Меняем пароль на свой любимый. Далее везде "у".
mysql -u root -p CREATE DATABASE camDB; CREATE USER 'cameda'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON camDB.* TO 'cameda'@'localhost'; FLUSH PRIVILEGES;
SELECT user,host FROM mysql.user; +------------------+-----------+ | user | host | +------------------+-----------+ | cameda | localhost | | debian-sys-maint | localhost | | mysql.infoschema | localhost | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +------------------+-----------+
SHOW DATABASES; +--------------------+ | Database | +--------------------+ | camDB | | information_schema | | mysql | | performance_schema | | sys | +--------------------+
quit
Установим PHP 8.1 + php-fpm:
apt -y install php8.1-fpm php8.1-mysqlnd php8.1-gd php8.1-curl php8.1-opcache php8.1-cli php8.1-readline php8.1-mbstring
php -v systemctl status php8.1-fpm
vi /etc/php/8.1/fpm/pool.d/www.conf - конфигурация php-fpm
Обновим кокфигурацию Nginx для работы с php:
server { listen 80 default_server; server_name cameda.ru; root /var/www/html/cameda.ru; access_log off; location / { index index.php index.html; } ######## PHP section unix socket ################# location ~ \.php$ { fastcgi_pass unix:/run/php/php8.1-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; } ######## PHP section tcp socket ################# # location ~ \.php$ { # fastcgi_pass 127.0.0.1:8080; # fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # include fastcgi_params; # include snippets/fastcgi-php.conf; # } location ~ /\.ht { deny all; } }
nginx -t systemctl reload nginx chown -R www-data:www-data /var/www/html/cameda.ru chmod -R 755 /var/www/html/cameda.ru mv /var/www/html/cameda.ru/index.html /var/www/html/cameda.ru/index.php echo "" > /var/www/html/cameda.ru/index.php vi /var/www/html/cameda.ru/index.php
<?php phpinfo(); ?>
php /var/www/html/cameda.ru/index.php curl http://cameda.ru/index.php
Php и php-fpm установлены и работают.
Установим PhpMyAdmin.
PhpMyAdmin - это веб интерфейс для работы с MySQL.
apt -y install phpmyadmin Во время установки нужно будет выбрать название базы, в которой будут храниться данные phpmyadmin; пользователя, который будет работать с базой и пароль для входа.
chown -R www-data:www-data /usr/share/phpmyadmin chmod -R 755 /usr/share/phpmyadmin ln -s /usr/share/phpmyadmin /var/www/html/cameda.ru/phpmyadmin
http:/cameda.ru/phpmyadmin