Периодически приходится создавать новые серваки, поэтому записал небольшую шпаргалку из часто используемых команд.
Дисклеймер: я не несу ответственности, если вы ввели команды с этого сайта, и всё сломалось.
Информация актуальна на январь 2024.
Обновим репозитории и проапгрейдимся
apt-get update && apt-get upgrade
Установка основных пакетов, которые ну полюбасу пригодятся
apt-get install -y sudo mc curl gnupg2 ca-certificates lsb-release apt-transport-https git htop bsdmainutils
Установим имя сервера
hostnamectl set-hostname pentagon
Пропишем его в hosts
mcedit /etc/hosts
127.0.0.1 pentagon
Сгенерируем ключ для входа без пароля
ssh-keygen -t ssh-ed25519 -f ~/.ssh/id_rsa && cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys && cat ~/.ssh/id_rsa
Если второй юзер уже добавлен, и находится в группе sudo, можно отключить вход для рута
mcedit /etc/ssh/sshd_config
PermitRootLogin no
Проверим, что вход по публичному ключу разрешён:
PubkeyAuthentication yes
Чекним синтаксис
sshd -t
Перезапустим сервис
service sshd restart
Создание пользователя
NEWUSER=blog && useradd -d /home/$NEWUSER -m -s /bin/bash $NEWUSER \ && usermod -a -G $NEWUSER $NEWUSER \ && passwd $NEWUSER
Случайный пароль:
Сгенерируем ключ для входа без пароля (уже под созданным юзером, через su)
ssh-keygen -t ssh-ed25519 -f ~/.ssh/id_rsa && cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys && cat ~/.ssh/id_rsa
Добавить юзера в группу sudo
usermod -a -G sudo blog
Удалить пользователя
userdel blog
Bash: поиск по истории через up/down
echo -e '"\e[B": history-search-forward\n"\e[A": history-search-backward' > ~/.inputrc
Добавим репозиторий
echo "deb https://nginx.org/packages/debian/ `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list
Проверяем версию
apt update && apt-cache policy nginx
Импортируем официальный ключ, используемый apt для проверки подлинности пакетов:
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys KEY_FROM ERROR
Устанавливаем NginX
apt-get update && apt-get install -y nginx
Запускаем:
service nginx start
Теперь по адресу сервера должна отображаться стартовая страница NginX.
Дефолтный конфиг NginX находится по адресу:
mcedit /etc/nginx/conf.d/default.conf
Для того, чтобы работал PHP заменяем его на это:
server { listen 80; server_name _; root /var/www/default; charset utf8; index index.html; location / { try_files $uri $uri/ =404; } }
server { listen 80; server_name _; root /var/www/default/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; index index.php; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ \.php$ { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } }
server { listen 80; server_name _; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; } }
Для более удобной настройки можно добавить следующий файл:
mcedit /etc/php/7.4/fpm/pool.d/cvp.su.conf
[cvp.su] listen = /run/php/cvp.su.sock listen.mode = 0666 user = blog group = blog pm = dynamic pm.max_children = 380 pm.start_servers = 20 pm.min_spare_servers = 16 pm.max_spare_servers = 32 pm.max_requests = 800 chdir = /var/www/cvp.su/ php_admin_value[open_basedir] = /var/www/cvp.su/ php_admin_value[upload_tmp_dir] = /var/www/cvp.su/storage/app/public/ php_admin_value[date.timezone] = Europe/Moscow php_admin_value[memory_limit] = 4G php_admin_value[upload_max_filesize] = 150M php_admin_value[post_max_size] = 150M
И обновить в файле настроек nginx строку `fastcgi_pass`:
fastcgi_pass unix:/run/php/cvp.su.sock;
Перезапускаем сервис:
service php7.4-fpm restart
Для более удобной настройки можно добавить следующий файл:
mcedit /etc/php/8.2/fpm/pool.d/cvp.su.conf
[cvp.su] listen = /run/php/cvp.su.sock listen.mode = 0666 user = blog group = blog pm = dynamic pm.max_children = 380 pm.start_servers = 20 pm.min_spare_servers = 16 pm.max_spare_servers = 32 pm.max_requests = 800 chdir = /var/www/cvp.su/ php_admin_value[open_basedir] = /var/www/cvp.su/ php_admin_value[upload_tmp_dir] = /var/www/cvp.su/storage/app/public/ php_admin_value[date.timezone] = Europe/Moscow php_admin_value[memory_limit] = 4G php_admin_value[upload_max_filesize] = 150M php_admin_value[post_max_size] = 150M
И обновить в файле настроек nginx строку `fastcgi_pass`:
fastcgi_pass unix:/run/php/cvp.su.sock;
Перезапускаем сервис:
service php8.2-fpm restart
Для более удобной настройки можно добавить следующий файл:
mcedit /etc/php/8.3/fpm/pool.d/cvp.su.conf
[cvp.su] listen = /run/php/cvp.su.sock listen.mode = 0666 user = blog group = blog pm = dynamic pm.max_children = 380 pm.start_servers = 20 pm.min_spare_servers = 16 pm.max_spare_servers = 32 pm.max_requests = 800 chdir = /var/www/cvp.su/ php_admin_value[open_basedir] = /var/www/cvp.su/ php_admin_value[upload_tmp_dir] = /var/www/cvp.su/storage/app/public/ php_admin_value[date.timezone] = Europe/Moscow php_admin_value[memory_limit] = 4G php_admin_value[upload_max_filesize] = 150M php_admin_value[post_max_size] = 150M
И обновить в файле настроек nginx строку `fastcgi_pass`:
fastcgi_pass unix:/run/php/cvp.su.sock;
Перезапускаем сервис:
service php8.3-fpm restart
Для сжатия данных при передаче можно создать файлик ```mcedit /etc/nginx/conf.d/gzip_append``` и инклюдить его в основной файл конфига ```include conf.d/gzip_append;```
gzip on; gzip_disable "MSIE [1-6]\.(?!.*SV1)"; gzip_proxied any; gzip_buffers 16 8k; gzip_types text/plain text/css text/js text/xml text/javascript application/javascript application/x-javascript application/json application/xml application/rss+xml image/svg+xml/javascript; gzip_vary on;
location ~* ^.+\.(jpg|jpeg|gif|png|ico|webp)$ { expires 30d; # кешируем у клиента на 30 дней } location ~* ^.+\.(css|js)$ { expires 1d; # кешируем у клиента на 1 день }
fastcgi_cache_path /var/nginx_cache levels=1:2 keys_zone=nginx_cache:100m max_size=10g inactive=10m use_temp_path=off; server { location ~ \.php$ { # Настройка уникального ключа кэша на основе запроса с GET - параметрами fastcgi_cache_key "$scheme$request_method$host$request_uri$is_args$args"; fastcgi_cache nginx_cache; fastcgi_cache_valid 200 301 302 30m; fastcgi_cache_valid 404 1m; add_header X-Cache $upstream_cache_status;
Soon
Перезапускаем nginx:
service nginx restart
Установим сертбот:
apt-get install -y python3-certbot-nginx
Установим сертификат на домен:
certbot --nginx -d example.com
Чтобы не продлять сертификаты руками можно добавить в крон запись:
43 6 1 * * certbot renew
Добавляем репозиторий
echo "deb https://packages.sury.org/php/ `lsb_release -cs` main" | tee /etc/apt/sources.list.d/php.list
echo "deb https://debian.octopuce.fr/sury-php/ `lsb_release -cs` main" | tee /etc/apt/sources.list.d/php.list
Забираем ключ репозитория:
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
Обновляемся и проверяем версию кандидата:
apt-get update && apt-cache policy php
Устанавливаем fpm версию и дополнительные пакеты:
apt install -y php7.4-fpm php7.4-curl php7.4-gd php7.4-mysql php7.4-mbstring php7.4-xml php7.4-zip php7.4-intl php7.4-gmp php7.4-xdebug
Проверяем:
service php7.4-fpm status
Теперь нужно настроить fpm
mcedit /etc/php/7.4/fpm/pool.d/www.conf
Меняем пользователя www-data на nginx
sed -i 's/www-data/nginx/' /etc/php/7.4/fpm/pool.d/www.conf
Уберём потенциальную дыру в безопасности:
sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php/7.4/fpm/php.ini
Перезапускаемся:
service php7.4-fpm restart
Для переключения между консольными версиями PHP:
update-alternatives --set php /usr/bin/php7.4
Устанавливаем fpm версию и дополнительные пакеты:
apt install -y php8.1-fpm php8.1-curl php8.1-gd php8.1-mysql php8.1-mbstring php8.1-xml php8.1-zip php8.1-intl php8.1-gmp php8.1-xdebug
Проверяем:
service php8.1-fpm status
Теперь нужно настроить fpm
mcedit /etc/php/8.1/fpm/pool.d/www.conf
Меняем пользователя www-data на nginx
sed -i 's/www-data/nginx/' /etc/php/8.1/fpm/pool.d/www.conf
Уберём потенциальную дыру в безопасности:
sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php/8.1/fpm/php.ini
Перезапускаемся:
service php8.1-fpm restart
Для переключения между консольными версиями PHP:
update-alternatives --set php /usr/bin/php8.1
Устанавливаем fpm версию и дополнительные пакеты:
apt install -y php8.2-fpm php8.2-curl php8.2-gd php8.2-mysql php8.2-mbstring php8.2-xml php8.2-zip php8.2-intl php8.2-gmp php8.2-xdebug
Проверяем:
service php8.2-fpm status
Теперь нужно настроить fpm
mcedit /etc/php/8.2/fpm/pool.d/www.conf
Меняем пользователя www-data на nginx
sed -i 's/www-data/nginx/' /etc/php/8.2/fpm/pool.d/www.conf
Уберём потенциальную дыру в безопасности:
sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php/8.2/fpm/php.ini
Перезапускаемся:
service php8.2-fpm restart
Для переключения между консольными версиями PHP:
update-alternatives --set php /usr/bin/php8.2
Устанавливаем fpm версию и дополнительные пакеты:
apt install -y php8.3-fpm php8.3-curl php8.3-gd php8.3-mysql php8.3-mbstring php8.3-xml php8.3-zip php8.3-intl php8.3-gmp php8.3-xdebug
Проверяем:
service php8.3-fpm status
Теперь нужно настроить fpm
mcedit /etc/php/8.3/fpm/pool.d/www.conf
Меняем пользователя www-data на nginx
sed -i 's/www-data/nginx/' /etc/php/8.3/fpm/pool.d/www.conf
Уберём потенциальную дыру в безопасности:
sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php/8.3/fpm/php.ini
Перезапускаемся:
service php8.3-fpm restart
Для переключения между консольными версиями PHP:
update-alternatives --set php /usr/bin/php8.3
Забираем MySQL APT репозиторий
wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.30-1_all.deb && dpkg -i mysql-apt-config_0.8.30-1_all.deb && rm mysql-apt-config_0.8.30-1_all.deb
Обновляемся и проверяем версию кандидата:
apt-get update && apt-cache policy mysql-server
Если ругается - импортируем официальный ключ, используемый apt для проверки подлинности пакетов:
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys KEY_FROM ERROR
Устанавливаем:
apt install -y mysql-server
Случайный пароль:
Забираем архив
wget https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.zip && mv phpMyAdmin-5.2.1-all-languages.zip pma.zip
Распакуем
unzip pma.zip && rm pma.zip && mv phpMyAdmin-5.2.1-all-languages pma
Настраиваем
cd pma && cp config.sample.inc.php config.inc.php && mcedit config.inc.php
Устанавливаем blowfish фразу
sed -i 's/$cfg['blowfish_secret'] = '';/$cfg['blowfish_secret'] = '';/' config.inc.php
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php && php -r "unlink('composer-setup.php');"
mv composer.phar /usr/local/bin/composer
mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
NODE_MAJOR=20
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list
Обновляемся и проверяем версию кандидата:
apt-get update && apt-cache policy nodejs
Устанавливаем:
apt install -y nodejs
cd ~ && curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh && chmod +x openvpn-install.sh && ./openvpn-install.sh
Чтобы добавить клиент, запустить скрипт ещё раз:
./openvpn-install.sh
Импортируем официальный ключ для проверки подлинности пакетов:
sudo mkdir -p /etc/apt/keyrings && curl -fsSL https://packages.openvpn.net/packages-repo.gpg | sudo tee /etc/apt/keyrings/openvpn.asc
Добавим репозиторий
echo "deb [signed-by=/etc/apt/keyrings/openvpn.asc] https://packages.openvpn.net/openvpn3/debian `lsb_release -cs` main" | sudo tee /etc/apt/sources.list.d/openvpn-packages.list
Проверяем версию
apt update && apt-cache policy openvpn3
Устанавливаем openvpn3
apt install -y openvpn3
Подключиться к серверу
openvpn3 session-start --config client.ovpn
Отключиться от сервера
openvpn3 session-manage --config client.ovpn --disconnect
Чтобы подключать папки с сервера как сетевые диски, можно использовать samba
apt-get install samba
Добавим новую shared - папку
mkdir ~/shared
Настроим конфиг:
mcedit /etc/samba/smb.conf
Добавим новый блок, где YOURUSER - ваш пользователь
[Files] comment = A new share path = /home/YOURUSER/share browseable = yes read only = no guest ok = no valid users = YOURUSER
Перезагружаемся
servive smbd restart
Добавляем samba-пароль нашему пользователю:
smbpasswd -a YOURUSER
Всё, теперь можно идти по адресу \\YOUR_IP\Files
При импорте большого SQL файла я столкнулся с проблемой mysql server has gone away. Ну ушёл и ушёл, я то тут причём? Решается добавлением в конфиг следующих строчек:
mcedit /etc/mysql/my.cnf
[mysqld] wait_timeout=28800 interactive_timeout=28800 max_allowed_packet=4G
Добавить в гит информацию о юзере
git config --global user.name "Vadim N." git config --global user.email "spam@vard.su"
cd /var/www && wget https://wordpress.org/latest.zip && unzip latest.zip
mv wordpress site
cd site
mkdir wp-content/uploads
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chmod -R 775 wp-content/uploads
chmod 664 wp-config.php