Кейсы

Установка Debian сервера: Nginx, Python, PostgreSQL, PHP

Эта статья нужна мне самому, чтобы не забывать что нужно поставить и вообще что делать.

Ниже простой список команд после того как вы попали в root

Обновление пакетов

apt update
apt upgrade

Установка пакетов

apt install zsh git wget curl tmux sudo python3 nginx htop sudo nginx
apt install python3-pip 
apt install postgresql postgresql-contrib

apt install python3-acme python3-certbot python3-mock python3-openssl python3-pkg-resources python3-pyparsing python3-zope.interface
apt install python3-certbot-nginx
apt install libpq-dev python3-dev

Включение Oh My Zsh

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
chsh -s /bin/zsh

Чтобы поменять тему — открыть файл ~/.zshrc, и в поле ZSH_THEME заменить значение. Другие темы тут

ZSH_THEME="agnoster"

Включение сервисов автоматически после перезапуска

sudo systemctl enable nginx
sudo systemctl enable postgresql

Установка основных PIP пакетов

У меня их достаточно много, у меня на все репозитории одинаковые так что как-то так

python3 -m pip install psycopg2 flask flask_cors flask_restful marshmallow PyYAML urllib3 requests peewee backoff setproctitle flask_restful hashlib

Добавление пользователя и переход к нему

adduser daniilak
usermod -aG sudo daniilak
su - daniilak

Генерация ssh-ключа

ssh-keygen -t ed25519 
cat /home/daniilak/.ssh/id_rsa.pub

Настройка PostgreSQL

sudo passwd postgres
usermod -aG sudo postgres
su - postgres
sudo -u postgres psql -c "SELECT version();"
sudo su - postgres -c "createuser daniilak"
sudo su - postgres -c "createdb daniilak"
sudo nano /etc/postgresql/13/main/postgresql.conf

Чтобы узнать как настраивать параметры — можно глянуть в PG Tune

sudo nano /etc/postgresql/13/main/pg_hba.conf

Это я сейчас не помню, так что пусть будет так:

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5

Перезапустить службу

sudo systemctl restart postgresql.service

Настройка NGINX

Нужно зайти в конфиг, который можно переименовать в виде названия домена, но и так норм (нет)

sudo nano /etc/nginx/sites-available/default

Конфиги приведены для flask приложений, которые запускаются как python3 app.py и имеют команду, например

app.run(host='0.0.0.0', port=5001)

Тут два варианта:

  1. Если есть домен и настроен certbot для let’s encrypt и можно настроить https. Не забыть заменить example.ru на свой
server
{
  client_max_body_size 100M;
  listen [::]:80 default_server ipv6only=on;
  listen 80 default_server;
  server_name example.ru;
  return 301 https://$host:443$request_uri;
}


server
{
  client_max_body_size 100M;
  listen [::]:443 ssl ipv6only=on;
  listen 443 ssl;

  server_name example.ru www.example.ru;

  location /path/
  {
    proxy_pass http://localhost:5001;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
  }

  location /
  {
    proxy_pass http://localhost:5000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;

  }
}

  1. Если домена нет, то придется обойтись http
server {
        listen 80 default_server;
        client_max_body_size 100M;
        listen [::]:80 default_server ipv6only=on;
        server_name _;

        location /path/ {
            proxy_pass http://localhost:5001;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
        location / {
            proxy_pass http://localhost:5000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
}

Проверить на ошибки кофиг и перезапустить службу

nginx -t 
nginx -s reload

Настройка ssl на домен

certbot --nginx -d example.ru -d www.example.ru
nginx -t 
nginx -s reload

Вроде бы всё из самого основного